1
2# Write ch to the standard output
3	.macro outch  ch
4	ldk   $r0,\ch
5	sta   0x10000,$r0
6	.endm
7
8# End the test with return code c
9	.macro  exit c
10	ldk   $r0,\c
11	sta   0x1fffc,$r0
12	.endm
13
14# All assembler tests should start with this macro "start"
15	.macro start
16	.text
17
18	jmp     __start
19	jmp     __start
20	reti
21
22	.data
23ccsave: .long   0
24	.text
25
26# Fiddling to load $cc from the following word in program memory
27loadcc:
28	exi     $r29,$sp,0
29	lpmi    $cc,$r29,0
30	add     $r29,$r29,4
31	exi     $r29,$sp,0
32	return
33
34failcase:
35	outch 'f'
36	outch 'a'
37	outch 'i'
38	outch 'l'
39	outch '\n'
40	exit  1
41
42__start:
43
44	.endm
45
46# At the end of the test, the code should reach this macro PASS
47	.macro PASS
48	outch 'p'
49	outch 'a'
50	outch 's'
51	outch 's'
52	outch '\n'
53	exit  0
54	.endm
55
56# Confirm that reg has value, and fail immediately if not
57# Preserves all registers
58	.macro EXPECT reg,value
59	sta   ccsave,$cc
60	call  loadcc
61	.long \value
62	cmp   \reg,$cc
63	jmpc  nz,failcase
64	lda   $cc,ccsave
65	.endm
66