]> Joshua Wise's Git repositories - fpgaboy.git/blame - rom.asm
JR and JRCC
[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
616eebe0
JW
19 jp main
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
36 jp nz, .wr
37 ld a, $80
38 cp l
39 jp nz, .wr
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
48 jp nz, .memfail
49
50 ld a, $DF
51 cp h
52 jp nz, .rd
53 ld a, $80
54 cp l
55 jp nz, .rd
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
116 jp z,.loop1
117.loop2:
118 ld a,[c]
119 cp b
120 jp nz,.loop2
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
141 jp nz,.fail
142 ld a, e
143 cp c
144 jp nz,.fail
145
146 ; Test ALU (HL).
147 ld hl, .ff
148 ld a, $FF
149 xor [hl]
150 ld hl, .xorhlfail
151 jp nz, .fail
152
722e486a
JW
153 ; Test JP (HL)
154 ld hl, .jphl
155 jp [hl]
156 ld hl, .jphlfail
157 jp .fail
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
167 jp .fail
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
176 jp nc,.fail
177 ld a, $20
178 ld b, $10
179 cp b
180 jp c,.fail
181
182 ; Test CPL
183 ld hl, .cplfail
184 ld a, $55
185 ld b, $AA
186 cpl
187 cp b
188 jp nz,.fail
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
223 jp nz,.waitport
224 pop af
225 ld [c],a
226 ret
227
228puts:
229 ld a, [hli]
230 ld b, $00
231 cp b
232 jp z, .done
233 call putc
234 jp puts
235.done:
236 ret
237
This page took 0.044441 seconds and 4 git commands to generate.