]> Joshua Wise's Git repositories - fpgaboy.git/blobdiff - rom.asm
Add a ROM, and go up to 8k of RAM
[fpgaboy.git] / rom.asm
diff --git a/rom.asm b/rom.asm
new file mode 100644 (file)
index 0000000..2ede41c
--- /dev/null
+++ b/rom.asm
@@ -0,0 +1,139 @@
+       SECTION "a",HOME
+main:
+       ld c, $51
+       ld a, $FF
+       ld [c],a
+       ld sp,$DFFF
+
+       ld hl,text
+       call puts
+       
+       call memtest
+       call waitsw
+       jp main
+
+text:
+       db $1B,"[1mFPGABoy Diagnostic ROM",$1B,"[0m",$0D,$0A,0
+
+memtest:
+       ld hl,memteststr
+       call puts
+       
+       ld hl, $C000
+.wr:
+       ld a,h
+       xor l
+       ld [hli],a
+       ld a, $DF
+       cp h
+       jp nz, .wr
+       ld a, $80
+       cp l
+       jp nz, .wr
+
+       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
+
+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
+
+waitsw:
+       ld hl,waitswstr
+       call puts
+       
+       ld c, $51
+       ld a, $00
+       ld [c],a
+       
+       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
+
+waitswstr:
+       db "Diagnostic ROM complete; flip switches to nonzero and then to zero to reset.",$0D,$0A,0
+
+putc:
+       push af
+       ld b, 0
+       ld c, $50
+.waitport:
+       ld a,[c]
+       cp b
+       jp 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
+
This page took 0.026022 seconds and 4 git commands to generate.