X-Git-Url: http://git.joshuawise.com/fpgaboy.git/blobdiff_plain/00573fd53c3dc0b2aca146f085d30801a3aed576..2bcaaabf0bbbb0232fe8ffe0a8943a14159852ab:/diag.asm?ds=inline diff --git a/diag.asm b/diag.asm index 8d6aec8..780f5c2 100644 --- a/diag.asm +++ b/diag.asm @@ -11,19 +11,30 @@ start: jp main section "tmro",HOME[$50] jp tmro + SECTION "b",HOME[$100] +boot: jr main ; $0100 + nop ; $0102 + nop ; $0103 + ;Nintendo Logo ; $0104 + DB $CE,$ED,$66,$66,$CC,$0D,$00,$0B,$03,$73,$00,$83,$00,$0C,$00,$0D + DB $00,$08,$11,$1F,$88,$89,$00,$0E,$DC,$CC,$6E,$E6,$DD,$DD,$D9,$99 + DB $BB,$BB,$67,$63,$6E,$0E,$EC,$CC,$DD,$DC,$99,$9F,$BB,$B9,$33,$3E + ;$0134 + DB $00,$E7,$00,$00,$00,$00,$00,$00, $00,$00,$00,$00,$00,$00,$00,$00 + ;$0144 + DB $00,$00,$00,$00,$00,$00,$00,$00, $00,$00,$00,$00,$00,$00,$00,$00 + main: ld a, $FF - ld [$FF51],a + ld c, $51 + ld [c], a -; ld a, $04 -; ld [$FFFF], a - ld sp, $DFF0 ld a, $04 ;start timer, 4.096KHz ld c, $07 ld [c], a - + ld hl, $DF81 xor a ld [hli], a @@ -31,6 +42,11 @@ main: ld hl, signon call puts + + ld a, $91 + ld [$FF40], a + + call putscreen ei @@ -47,14 +63,148 @@ main: signon: db $0D,$0A,$1B,"[1mFPGABoy Diagnostic ROM",$1B,"[0m",$0D,$0A,0 +tiles: + db %01111100 + db %11000110 + db %11000110 + db %11111110 + db %11000110 + db %11000110 + db %11000110 + db %00000000 + + db %11111100 + db %11000110 + db %11000110 + db %11111100 + db %11000110 + db %11000110 + db %11111100 + db %00000000 + + db %01111100 + db %11000110 + db %11000010 + db %11000000 + db %11000010 + db %11000110 + db %01111100 + db %00000000 + + db %11111100 + db %11000110 + db %11000110 + db %11000110 + db %11000110 + db %11000110 + db %11111100 + db %00000000 + +putscreen: + LD A,$fc ; $001d Setup BG palette + LD [$FF47],A ; $001f + + ; Wait for vblank + call .vblwait + + ld hl, $8000 ; Copy two tiles. + ld de, tiles + ld c, $20 +.cloop: ld a, [de] + inc de + ld [hli], a + ld [hli], a + dec c + xor a + cp c + jr nz, .cloop + + ld hl, $9800 +.vloop: call .vblwait + ld c, $40 + ld b, 0 +.loop: ld a, b + inc b + and $03 + ld [hli], a + ld a, h + cp $9C + ret z + dec c + xor a + cp c + jr nz,.loop + jr .vloop + +.vblwait: +.stat1: ld a, [$FF41] ; STAT + and $03 + cp $00 + jp nz, .stat1 +.stat2: ld a, [$FF41] + and $03 + cp $01 + jr nz, .stat2 + ret + vbl: + PUSH AF + PUSH BC + PUSH DE + PUSH HL + + xor a + ld [$FF0F], a + + ld a, [$FF51] + bit 7, a + jr z, .nothing + + bit 0, a + call nz, .scyup + + bit 1, a + call nz, .scydown + + bit 2, a + call nz, .scxup + + bit 3, a + call nz, .scxdown + +.nothing: + POP HL + POP DE + POP BC + POP AF + + RETI + +.scyup: ld hl, $FF42 + inc [hl] + ret + +.scydown: ld hl, $FF42 + dec [hl] + ret + +.scxup: ld hl, $FF43 + inc [hl] + ret + +.scxdown: ld hl, $FF43 + dec [hl] + ret + + lcdc: PUSH AF + PUSH BC xor a - ld c, $0F - ld [c], a + ld [$FF0F], a + POP BC POP AF reti @@ -66,22 +216,23 @@ tmro: PUSH HL xor a - ld c, $0F + ld [$FF0F], a + + ld c, $45 ; LYC + ld a, [c] + inc a ld [c], a - ld hl, $DF82 - ld a, [hld] + ld a, [$DF82] cp 0 jr z, .noprint ld a, $41 ; print A call putc .noprint: - ld hl, $DF81 - ld a, [hl] - add 1 - ld [hl], a - ld c, $51 - ld [c], a + ld a, [$DF81] + inc a + ld [$DF81], a + ld [$FF51], a POP HL POP DE @@ -94,7 +245,7 @@ memtest: ld hl,memteststr call puts - ld hl, $C001 ; Write loop + ld hl, $C000 ; Write loop .wr: ld a,h xor l @@ -106,7 +257,7 @@ memtest: cp $80 jr nz, .wr - ld hl, $C001 ; Read loop + ld hl, $C000 ; Read loop .rd: ld a,h xor l @@ -127,7 +278,7 @@ memtest: ret .memfail: ; Say we failed (sadface) ; decrement hl the easy way - ld a,[hld] + dec [hl] push hl ld hl, failatstr call puts @@ -180,8 +331,8 @@ waitsw: ld a,[c] cp $0 jr z,.loop1 -.loop2: - ld a,[c] + +.loop2: ld a,[c] cp $0 jr nz,.loop2 ret @@ -340,3 +491,4 @@ puts: ret z call putc jr puts +