From 20204e795d54fb0758a79f0abd5fb443c0178a54 Mon Sep 17 00:00:00 2001 From: Joshua Wise Date: Thu, 3 Apr 2008 05:38:14 -0400 Subject: [PATCH] Add an instruction tester to the test ROM. --- FPGABoy.ise | Bin 229752 -> 229744 bytes GBZ80Core.v | 2 +- rom.asm | 98 ++++++++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 88 insertions(+), 12 deletions(-) diff --git a/FPGABoy.ise b/FPGABoy.ise index 06b8ca4b0d1efd142d6cffefedce33343bab4605..7374a59cd31cd716c2382202c3d8e45f6af8f992 100644 GIT binary patch delta 43020 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 YhSI=qMpMPY9ih~+QgTzV5vRf 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 LZv4n3cI5njy`z$; diff --git a/GBZ80Core.v b/GBZ80Core.v index 0f0496e..e125225 100644 --- a/GBZ80Core.v +++ b/GBZ80Core.v @@ -289,7 +289,7 @@ module GBZ80Core( `INSN_stack_HL: wdata <= registers[`REG_L]; endcase end - 2: begin /* TWIDDLE OUR FUCKING THUMBS! */ end + 2: begin /* Twiddle thumbs. */ end 3: begin `EXEC_NEWCYCLE; `EXEC_INC_PC; diff --git a/rom.asm b/rom.asm index 640c2b0..02f095b 100644 --- a/rom.asm +++ b/rom.asm @@ -1,25 +1,32 @@ SECTION "a",HOME + main: - ld c, $51 + ld c, $51 ; Note that we are alive. ld a, $FF ld [c],a - ld sp,$DFFF - ld hl,text + ld sp, $DFFF + + ld hl, signon call puts call memtest + + call insntest + call waitsw + jp main -text: +signon: db $0D,$0A,$1B,"[1mFPGABoy Diagnostic ROM",$1B,"[0m",$0D,$0A,0 +; Memory tester: writes h ^ l to all addresses from C000 to DF80. memtest: ld hl,memteststr call puts - ld hl, $C000 + ld hl, $C000 ; Write loop .wr: ld a,h xor l @@ -31,7 +38,7 @@ memtest: cp l jp nz, .wr - ld hl, $C000 + ld hl, $C000 ; Read loop .rd: ld a,h xor l @@ -47,11 +54,11 @@ memtest: cp l jp nz, .rd - ld hl, testokstr + ld hl, testokstr ; Say we're OK call puts ret -.memfail: - @ decrement hl the easy way +.memfail: ; Say we failed (sadface) + ; decrement hl the easy way ld a,[hld] push hl ld hl, failatstr @@ -66,14 +73,14 @@ memtest: 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: + +puthex: ; Put two hex nibbles to the serial console. push af rra rra @@ -92,6 +99,7 @@ puthex: call putc ret +; Wait for switches to be flipped on and off again. waitsw: ld hl,waitswstr call puts @@ -115,6 +123,74 @@ waitsw: waitswstr: db "Diagnostic ROM complete; flip switches to nonzero and then to zero to reset.",$0D,$0A,0 +; Core instruction basic acceptance tests. +insntest: + ld hl, .insnteststr + call puts + + ; Test PUSH and POP. + ld b, $12 + ld c, $34 + ld d, $56 + ld e, $78 + push bc + pop de + ld hl, .pushpopfail + ld a, d + cp b + jp nz,.fail + ld a, e + cp c + jp nz,.fail + + ; Test ALU (HL). + ld hl, .ff + ld a, $FF + xor [hl] + ld hl, .xorhlfail + jp nz, .fail + + ; Test CP. + ld hl, .cpfail + ld a, $10 + ld b, $20 + cp b + jp nc,.fail + ld a, $20 + ld b, $10 + cp b + jp c,.fail + + ; Test CPL + ld hl, .cplfail + ld a, $55 + ld b, $AA + cpl + cp b + jp nz,.fail + + ld hl, .ok + call puts + ret +.fail: + call puts + ret +.insnteststr: + db "Testing instructions... ",$0 +.pushpopfail: + db "PUSH/POP test failed.",$0D,$0A,0 +.ff: + db $FF +.xorhlfail: + db "XOR [HL] test failed.",$0D,$0A,0 +.cpfail: + db "CP test failed.",$0D,$0A,0 +.cplfail: + db "CPL test failed.",$0D,$0A,0 +.ok: + db "OK!",$0D,$0A,0 + +; Serial port manipulation functions. putc: push af ld b, 0 -- 2.39.2