1 section "end",HOME[1024]
8 section "vbl",HOME[$40]
11 section "lcdc",HOME[$48]
14 section "tmro",HOME[$50]
24 ld a, $04 ;start timer, 4.096KHz
54 db $0D,$0A,$1B,"[1mFPGABoy Diagnostic ROM",$1B,"[0m",$0D,$0A,0
94 LD A,$fc ; $001d Setup BG palette
100 ld hl, $8000 ; Copy two tiles.
113 .vloop: call .vblwait
130 .stat1: ld a, [$FF41] ; STAT
134 .stat2: ld a, [$FF41]
177 .scydown: ld hl, $FF42
185 .scxdown: ld hl, $FF43
233 ; Memory tester: writes h ^ l to all addresses from C000 to DF80.
238 ld hl, $C000 ; Write loop
250 ld hl, $C000 ; Read loop
266 ld hl, testokstr ; Say we're OK
269 .memfail: ; Say we failed (sadface)
270 ; decrement hl the easy way
286 db "Testing memory from $C000 to $DF80...",0
290 db " Test failed at $",0
292 puthex: ; Put two hex nibbles to the serial console.
307 ; Wait for switches to be flipped on and off again.
331 db "Diagnostic ROM complete; flip switches to nonzero and then to zero to reset. Expect A.",$0D,$0A,0
333 ; Core instruction basic acceptance tests.
407 ld hl, .dinocausefail
408 ld c, $0F ; First, wait until an interrupt happens...
413 ei ; Now make sure that an IRQ didn't happen on EI/DI
420 ei ; Make sure that an IRQ does happen on EI/NOP/DI
440 db "Testing instructions... ",0
458 db "DI/EI does not cause interrupt",0
460 db "DI/NOP/EI cause interrupt",0
462 db " test failed.",$0D,$0A,0
466 ; Serial port manipulation functions.