blob: c07811f60303ed6505e961dcc3ec3b60ae0ea767 [file] [log] [blame]
# Write ch to the standard output
.macro outch ch
ldk $r0,\ch
sta 0x10000,$r0
.endm
# End the test with return code c
.macro exit c
ldk $r0,\c
sta 0x1fffc,$r0
.endm
# All assembler tests should start with this macro "start"
.macro start
.text
jmp __start
jmp __start
reti
.data
ccsave: .long 0
.text
# Fiddling to load $cc from the following word in program memory
loadcc:
exi $r29,$sp,0
lpmi $cc,$r29,0
add $r29,$r29,4
exi $r29,$sp,0
return
failcase:
outch 'f'
outch 'a'
outch 'i'
outch 'l'
outch '\n'
exit 1
__start:
.endm
# At the end of the test, the code should reach this macro PASS
.macro PASS
outch 'p'
outch 'a'
outch 's'
outch 's'
outch '\n'
exit 0
.endm
# Confirm that reg has value, and fail immediately if not
# Preserves all registers
.macro EXPECT reg,value
sta ccsave,$cc
call loadcc
.long \value
cmp \reg,$cc
jmpc nz,failcase
lda $cc,ccsave
.endm