| |
| # 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 |