[comp.sys.cbm] C-ASSM Test Sources

mark@unisec.usi.com (Mark Rinfret) (05/11/87)

The following files are a minimal set of tests for the C-Power (tm)
compatible assembler posted earlier.
---------- cut here ----------
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#	assmtest.a
#	atest.a
#	atest1.a
#	atest2.a
#	chrtest.a
#	chrtest1.a
#	chrtest2.a
#	condtest.a
# This archive created: Mon May 11 14:05:25 1987
export PATH; PATH=/bin:$PATH
if test -f 'assmtest.a'
then
	echo shar: will not over-write existing file "'assmtest.a'"
else
cat << \SHAR_EOF > 'assmtest.a'
;******************************************
; Test file for the 6502 assembler - C-ASSM
; assemble as
;     assm -niv assmtest.a
; and compare output with assmtest.l
;******************************************
;; comment treatment
;******************************************
aa = $10; ';' immediately after the '0'
B = $20 space to comment subfield
C = $30 tab to comment subfield
DEFGHIjkl = $FFEE
D =DEFGHIjkl
;******************************************
; Number formats
;******************************************
 .byte %0101 ; binary number
 .byte 022,@22 ; octal numbers - two forms
 .byte 22 ; decimal number
 .byte $22,$ff,$FF ; hex - upper/lower case
 .byte 'a,'b ; single ASCII characters
;******************************************
;; ASCII character string
;******************************************
 .byte "abcd\n\f",0 ; new line, form feed
;******************************************
; Operation checks
;******************************************
 .word aa+B ; addition
 .word aa-B ; subtraction
 .word aa*B ; multiplication
 .word B/aa ; division
 .word C%B ; modulo
 .word B^C ; exclusive OR
 .word ~C ; one's complement
 .word B&C ; logical AND
 .word aa|B ; logical OR
 .word <D ; low byte
 .word >D ; high byte
 .word * ; current location
 .word aa,B,C
 .word B*[aa+C] ; one level of parenthesis
 .dbyt D ; high byte-low byte word
 .word D/256,D%256
;******************************************
; Addressing Mode Check
;******************************************
 lda =aa ; immediate addressing
 lda #aa ; immediate addressing, alternate
 lda D ; direct addessing
 LDA aa ; page zero addressing, aa < 256
a1 = 512 ;absolute expressions
a2 = 500
 lda a1-a2 ; also page zero
 asl A ; accumulator addressing
 AsL a ; accumulator addressing also
 brk ; implied addressing
 lda (aa,X) ; indirect,X addressing
 lda (aa),Y ; indirect,Y addressing
 lda aa,X ; zero page,X addressing
 lda D,X ; absolute,X addressing
 lda D,Y ; absolute,Y addressing
 bcc *-$10 ; relative addressing
 jmp (D) ; indirect addressing
 ldx aa,Y ; zero page,Y addressing
 ldx aa,y ; alternate index name
 .nlst
;******************************************
; opcode check
;******************************************
 adc =01
 and =01
 asl A
 bcc *+2
 bcs *+2
 beq *+2
 bit $01
 bmi *+2
 bne *+2
 bpl *+2
 brk
 bvc *+2
 bvs *+2
 clc
 cld
 cli
 clv
 cmp =01
 cpx =01
 cpy =01
 dec $01
 dex
 dey
 eor =01
 inc $01
 inx
 iny
 jmp *+3
 jsr *+3
 lda =01
 ldx =01
 ldy =01
 lsr A
 nop
 ora =01
 pha
 php
 pla
 plp
 rol A
 ror A
 rti
 rts
 sbc =01
 sec
 sed
 sei
 sta $01
 stx $01
 sty $01
 tax
 tay
 tsx
 txa
 txs
 tya
SHAR_EOF
fi # end of overwriting check
if test -f 'atest.a'
then
	echo shar: will not over-write existing file "'atest.a'"
else
cat << \SHAR_EOF > 'atest.a'

SHAR_EOF
fi # end of overwriting check
if test -f 'atest1.a'
then
	echo shar: will not over-write existing file "'atest1.a'"
else
cat << \SHAR_EOF > 'atest1.a'
; test program for C/ASSM assembler
; checks < and > operators, offsets on
; external identifiers, and .dseg
;
 .ref prline
 .ref xmsg,xmsg2,msglen

 lda msg ;msg length
 sta msglen
 ldy #>msg+1 ;msg address
 ldx #<msg+1
 jsr prline

; same for externally defined msg
 lda xmsg
 sta msglen
 ldy #>xmsg+1
 ldx #<xmsg+1
 jsr prline

 lda xmsg2-1 ;xmsg2 points to the text
 sta msglen
 ldy #>xmsg2
 ldx #<xmsg2
 jsr prline

 rts

msg .byte msgend-1-*,"Hello, world!\n"
msgend = *
SHAR_EOF
fi # end of overwriting check
if test -f 'atest2.a'
then
	echo shar: will not over-write existing file "'atest2.a'"
else
cat << \SHAR_EOF > 'atest2.a'
 .def prline
 .def xmsg,xmsg2

CHROUT = $ffd2

tmp = $fb

prline ;print a one line message
 sty tmp+1
 stx tmp
 ldx msglen
 ldy #0

loop lda (tmp),y
 jsr CHROUT
 iny
 dex
 bne loop

 rts

; the following is a separately relocatable
; data segment.  At run time, it may be
; located anywhere in memory, but
; (hopefully) all references will be
; properly resolved by the linker.  (It
; will not be located in the middle of
; this program!)
msglen .dseg 1 ;a silly size for a dseg!

; back to in-line code:
xmsg .byte xmend-*-1
 .byte "This is an external message\n"
xmend = *

 .ifgt $ffff,0 ;values are unsigned
;this gets assembled
 .byte xm2end-xmsg2
xmsg2 .byte "Goodbye!\n"
xm2end=*
 .else
 sec ;this does not get assembled
 .fi
SHAR_EOF
fi # end of overwriting check
if test -f 'chrtest.a'
then
	echo shar: will not over-write existing file "'chrtest.a'"
else
cat << \SHAR_EOF > 'chrtest.a'

SHAR_EOF
fi # end of overwriting check
if test -f 'chrtest1.a'
then
	echo shar: will not over-write existing file "'chrtest1.a'"
else
cat << \SHAR_EOF > 'chrtest1.a'
;Short, 2-part test program to exercise
;the C/ASSM assembler.

       .def exit,xstring

       .ref test2

#include <kernal.equ>

       jmp test1

xstring .byte "abcdefghijklmnopqrstuvwxyz\n",0

     
test1
       jsr CLRCHN

       jmp test2 ;call external routine

exit
       rts

SHAR_EOF
fi # end of overwriting check
if test -f 'chrtest2.a'
then
	echo shar: will not over-write existing file "'chrtest2.a'"
else
cat << \SHAR_EOF > 'chrtest2.a'
; Part 2 of C/ASSM assembler test
;
       .def test2
       .ref xstring,exit

#include "kernal.equ"

zptr   = 251 ;zero page pointer cell

test2  jsr CLRCHN
       lda #<xstring ;get string address
       sta zptr
       lda #>xstring
       sta zptr+1
       ldy #0
loop
       lda (zptr),y
       beq done
       jsr CHROUT
       iny
       bne loop
done
       jmp exit

SHAR_EOF
fi # end of overwriting check
if test -f 'condtest.a'
then
	echo shar: will not over-write existing file "'condtest.a'"
else
cat << \SHAR_EOF > 'condtest.a'
z = $100
 .ifgt z,10
 lda z ;this gets assembled
 .ifgt z,1000
 ldx z ;this does not
 .else
 ldy z ;assembles
 .fi
 asl z ;assembles
 .ifeq z,40
 lsr z ;does not
 .fi
 lda #1 ;assembles
 .else
 lda #2 ;does not assemble
 .ifgt z,0
 tax ;still no
 .fi
 tay ;still no
 .ifgt x,z ;x is undefined--no problem
 tya ;no assembly
 .fi
 sec ;still not
 .fi
 clc ;assembles
SHAR_EOF
fi # end of overwriting check
#	End of shell archive
exit 0
-- 
| Mark R. Rinfret, SofTech, Inc.		mark@unisec.usi.com |
| Guest of UniSecure Systems, Inc., Newport, RI                     |
| UUCP:  {gatech|mirror|cbosgd|uiucdcs|ihnp4}!rayssd!unisec!mark    |
| work: (401)-849-4174	home: (401)-846-7639                        |