SECTION "a",HOME
-main:
- ld c, $51
- ld a, $FF
- ld [c],a
- ld sp,$DFFF
- ld hl,text
- call puts
+main:
+ ld a, $FF ; Note that we are alive.
+ ld [$FF51],a
- call memtest
- call waitsw
- jp main
-
-text:
- db $0D,$0A,$1B,"[1mFPGABoy Diagnostic ROM",$1B,"[0m",$0D,$0A,0
-
-memtest:
- ld hl,memteststr
- call puts
+ ld sp, $DFF0
- ld hl, $C000
-.wr:
- ld a,h
- xor l
- ld [hli],a
- ld a, $DF
- cp h
- jp nz, .wr
+ ld hl, $DF81
ld a, $80
- cp l
- jp nz, .wr
+ ld [hl], a
- ld hl, $C000
-.rd:
- ld a,h
- xor l
- ld b,a
- ld a, [hli]
- cp b
- jp nz, .memfail
-
- ld a, $DF
- cp h
- jp nz, .rd
- ld a, $80
- cp l
- jp nz, .rd
-
- ld hl, testokstr
- call puts
- ret
-.memfail:
- @ decrement hl the easy way
- ld a,[hld]
- push hl
- ld hl, failatstr
- call puts
- pop hl
- ld a, h
- call puthex
- ld a, l
- call puthex
- ld a, $0A
- call putc
- ld a, $0D
- call putc
- ret
+ ld c, $07
+ ld a, $04 ;start timer, 4.096KHz
+ ld [c], a
+;diqs: ei
+; ld a, $80
+; ld c, $51
+; ld [c], a
+; jr diqs
+ call irqhand
+ ei
+coqs: jr coqs
-memteststr:
- db "Testing memory from $C000 to $DF80...",0
-testokstr:
- db " OK!",$0D,$0A,0
-failatstr:
- db " Test failed at $",0
-puthex:
- push af
- rra
- rra
- rra
- rra
- ld b,$0F
- and b
- ld b,$30
- add b
- call putc
- pop af
- ld b,$0F
- and b
- ld b,$30
- add b
- call putc
- ret
+ section "Diq", HOME[$38]
+fuqed:
+ di
+ jr fuqed
-waitsw:
- ld hl,waitswstr
- call puts
+ section "fuq",HOME[$100]
+irqhand:
+ PUSH AF
+ PUSH BC
+ PUSH DE
+ PUSH HL
- ld c, $51
- ld a, $00
- ld [c],a
+ xor a
+ ld c, $0F ; ack the irq
+ ld [c], a
+
+ ld a, $41 ; print A
+ call putc
+ ld hl, $DF81
+ inc [hl]
+ ld a, [hl]
ld c, $51
- ld b, $0
-.loop1:
- ld a,[c]
- cp b
- jp z,.loop1
-.loop2:
- ld a,[c]
- cp b
- jp nz,.loop2
- ret
+ ld [c], a
+
-waitswstr:
- db "Diagnostic ROM complete; flip switches to nonzero and then to zero to reset.",$0D,$0A,0
+ POP HL
+ POP DE
+ POP BC
+ POP AF
+ RETI
+ db $18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE
+ db $18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE
+ db $18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE,$18,$FE
putc:
- push af
ld b, 0
ld c, $50
+ push af
.waitport:
ld a,[c]
cp b
- jp nz,.waitport
+ jr nz,.waitport
pop af
ld [c],a
ret
-
-puts:
- ld a, [hli]
- ld b, $00
- cp b
- jp z, .done
- call putc
- jp puts
-.done:
- ret
-