X-Git-Url: http://git.joshuawise.com/fpgaboy.git/blobdiff_plain/c87db60a8f262ec834a46432e5d7b9a4faf09e09..616eebe0bdb3166e9cfda312d6425910b2addf8f:/rom.asm diff --git a/rom.asm b/rom.asm new file mode 100644 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 +