]> Joshua Wise's Git repositories - fpgaboy.git/blame - rom.asm
Update the 7seg more often.
[fpgaboy.git] / rom.asm
CommitLineData
616eebe0 1 SECTION "a",HOME
20204e79 2
616eebe0 3main:
20204e79 4 ld c, $51 ; Note that we are alive.
616eebe0
JW
5 ld a, $FF
6 ld [c],a
616eebe0 7
20204e79
JW
8 ld sp, $DFFF
9
10 ld hl, signon
616eebe0
JW
11 call puts
12
13 call memtest
20204e79
JW
14
15 call insntest
16
616eebe0 17 call waitsw
20204e79 18
9a5394d1 19 jr main
616eebe0 20
20204e79 21signon:
97d31911 22 db $0D,$0A,$1B,"[1mFPGABoy Diagnostic ROM",$1B,"[0m",$0D,$0A,0
616eebe0 23
20204e79 24; Memory tester: writes h ^ l to all addresses from C000 to DF80.
616eebe0
JW
25memtest:
26 ld hl,memteststr
27 call puts
28
20204e79 29 ld hl, $C000 ; Write loop
616eebe0
JW
30.wr:
31 ld a,h
32 xor l
33 ld [hli],a
34 ld a, $DF
35 cp h
9a5394d1 36 jr nz, .wr
616eebe0
JW
37 ld a, $80
38 cp l
9a5394d1 39 jr nz, .wr
616eebe0 40
20204e79 41 ld hl, $C000 ; Read loop
616eebe0
JW
42.rd:
43 ld a,h
44 xor l
45 ld b,a
46 ld a, [hli]
47 cp b
9a5394d1 48 jr nz, .memfail
616eebe0
JW
49
50 ld a, $DF
51 cp h
9a5394d1 52 jr nz, .rd
616eebe0
JW
53 ld a, $80
54 cp l
9a5394d1 55 jr nz, .rd
616eebe0 56
20204e79 57 ld hl, testokstr ; Say we're OK
616eebe0
JW
58 call puts
59 ret
20204e79
JW
60.memfail: ; Say we failed (sadface)
61 ; decrement hl the easy way
616eebe0
JW
62 ld a,[hld]
63 push hl
64 ld hl, failatstr
65 call puts
66 pop hl
67 ld a, h
68 call puthex
69 ld a, l
70 call puthex
71 ld a, $0A
72 call putc
73 ld a, $0D
74 call putc
75 ret
616eebe0
JW
76memteststr:
77 db "Testing memory from $C000 to $DF80...",0
78testokstr:
79 db " OK!",$0D,$0A,0
80failatstr:
81 db " Test failed at $",0
20204e79
JW
82
83puthex: ; Put two hex nibbles to the serial console.
616eebe0
JW
84 push af
85 rra
86 rra
87 rra
88 rra
89 ld b,$0F
90 and b
91 ld b,$30
92 add b
93 call putc
94 pop af
95 ld b,$0F
96 and b
97 ld b,$30
98 add b
99 call putc
100 ret
101
20204e79 102; Wait for switches to be flipped on and off again.
616eebe0
JW
103waitsw:
104 ld hl,waitswstr
105 call puts
106
107 ld c, $51
108 ld a, $00
109 ld [c],a
110
111 ld c, $51
112 ld b, $0
113.loop1:
114 ld a,[c]
115 cp b
9a5394d1 116 jr z,.loop1
616eebe0
JW
117.loop2:
118 ld a,[c]
119 cp b
9a5394d1 120 jr nz,.loop2
616eebe0
JW
121 ret
122
123waitswstr:
124 db "Diagnostic ROM complete; flip switches to nonzero and then to zero to reset.",$0D,$0A,0
125
20204e79
JW
126; Core instruction basic acceptance tests.
127insntest:
128 ld hl, .insnteststr
129 call puts
130
131 ; Test PUSH and POP.
132 ld b, $12
133 ld c, $34
134 ld d, $56
135 ld e, $78
136 push bc
137 pop de
138 ld hl, .pushpopfail
139 ld a, d
140 cp b
9a5394d1 141 jr nz,.fail
20204e79
JW
142 ld a, e
143 cp c
9a5394d1 144 jr nz,.fail
20204e79
JW
145
146 ; Test ALU (HL).
147 ld hl, .ff
148 ld a, $FF
149 xor [hl]
150 ld hl, .xorhlfail
9a5394d1 151 jr nz, .fail
20204e79 152
722e486a
JW
153 ; Test JP (HL)
154 ld hl, .jphl
155 jp [hl]
156 ld hl, .jphlfail
9a5394d1 157 jr .fail
722e486a
JW
158 rst $00
159.jphl:
160
161 ; Test JR
162 ld a, $FF
163 ld b, $00
164 cp b
165 jr nz,.jr
166 ld hl, .jrfail
9a5394d1 167 jr .fail
722e486a
JW
168 rst $00
169.jr:
170
20204e79
JW
171 ; Test CP.
172 ld hl, .cpfail
173 ld a, $10
174 ld b, $20
175 cp b
9a5394d1 176 jr nc,.fail
20204e79
JW
177 ld a, $20
178 ld b, $10
179 cp b
9a5394d1 180 jr c,.fail
20204e79
JW
181
182 ; Test CPL
183 ld hl, .cplfail
184 ld a, $55
185 ld b, $AA
186 cpl
187 cp b
9a5394d1 188 jr nz,.fail
20204e79
JW
189
190 ld hl, .ok
191 call puts
192 ret
193.fail:
194 call puts
195 ret
196.insnteststr:
197 db "Testing instructions... ",$0
198.pushpopfail:
199 db "PUSH/POP test failed.",$0D,$0A,0
200.ff:
201 db $FF
202.xorhlfail:
203 db "XOR [HL] test failed.",$0D,$0A,0
722e486a
JW
204.jphlfail:
205 db "JP [HL] test failed.",$0D,$0A,0
206.jrfail:
207 db "JR test failed.",$0D,$0A,0
20204e79
JW
208.cpfail:
209 db "CP test failed.",$0D,$0A,0
210.cplfail:
211 db "CPL test failed.",$0D,$0A,0
212.ok:
213 db "OK!",$0D,$0A,0
214
215; Serial port manipulation functions.
616eebe0
JW
216putc:
217 push af
218 ld b, 0
219 ld c, $50
220.waitport:
221 ld a,[c]
222 cp b
9a5394d1 223 jr nz,.waitport
616eebe0
JW
224 pop af
225 ld [c],a
226 ret
227
228puts:
229 ld a, [hli]
230 ld b, $00
231 cp b
9a5394d1 232 jr z, .done
616eebe0 233 call putc
9a5394d1 234 jr puts
616eebe0
JW
235.done:
236 ret
237
This page took 0.041823 seconds and 4 git commands to generate.