1; Utilities for writing test ROMs
2
3; In NVRAM so these can be used before initializing runtime,
4; then runtime initialized without clearing them
5nv_res test_code ; code of current test
6nv_res test_name,2 ; address of name of current test, or 0 of none
7
8
9; Sets current test code and optional name. Also resets
10; checksum.
11; Preserved: A, X, Y
12.macro set_test code,name
13	pha
14	lda #code
15	jsr set_test_
16	.ifblank name
17		setb test_name+1,0
18	.else
19		.local Addr
20		setw test_name,Addr
21		seg_data "RODATA",{Addr: .byte name,0}
22	.endif
23	pla
24.endmacro
25
26set_test_:
27	sta test_code
28	jmp reset_crc
29
30
31; Initializes testing module
32init_testing:
33	jmp init_crc
34
35
36; Reports that all tests passed
37tests_passed:
38	jsr print_filename
39	print_str newline,"Passed"
40	lda #0
41	jmp exit
42
43
44; Reports "Done" if set_test has never been used,
45; "Passed" if set_test 0 was last used, or
46; failure if set_test n was last used.
47tests_done:
48	ldx test_code
49	jeq tests_passed
50	inx
51	bne test_failed
52	jsr print_filename
53	print_str newline,"Done"
54	lda #0
55	jmp exit
56
57
58; Reports that the current test failed. Prints code and
59; name last set with set_test, or just "Failed" if none
60; have been set yet.
61test_failed:
62	ldx test_code
63
64	; Treat $FF as 1, in case it wasn't ever set
65	inx
66	bne :+
67	inx
68	stx test_code
69:
70	; If code >= 2, print name
71	cpx #2-1        ; -1 due to inx above
72	blt :+
73	lda test_name+1
74	beq :+
75	jsr print_newline
76	sta addr+1
77	lda test_name
78	sta addr
79	jsr print_str_addr
80	jsr print_newline
81:
82	jsr print_filename
83
84	; End program
85	lda test_code
86	jmp exit
87
88
89; If checksum doesn't match expected, reports failed test.
90; Clears checksum afterwards.
91; Preserved: A, X, Y
92.macro check_crc expected
93	jsr_with_addr check_crc_,{.dword expected}
94.endmacro
95
96check_crc_:
97	pha
98	jsr is_crc_
99	bne :+
100	jsr reset_crc
101	pla
102	rts
103
104:       jsr print_newline
105	jsr print_crc
106	jmp test_failed
107