From f26748f71f3f39de15a1c07f95c15f8c4481f452 Mon Sep 17 00:00:00 2001
From: Joshua Wise <joshua@rebirth.joshuawise.com>
Date: Fri, 4 Apr 2008 02:10:58 -0400
Subject: [PATCH] Yay. Fix retcc. Comparing against an x value - great idea, or
 greatest idea?

---
 FPGABoy.ise | Bin 229884 -> 229884 bytes
 GBZ80Core.v |   6 ++----
 rom.asm     |   7 ++-----
 3 files changed, 4 insertions(+), 9 deletions(-)

diff --git a/FPGABoy.ise b/FPGABoy.ise
index b09f3837ef1027e88526812c8eda91499b2c5638..1d807e94bddb9631ff953512bd9ebefdfa15a801 100644
GIT binary patch
delta 5532
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
EKc6-)egFUf

delta 5532
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

diff --git a/GBZ80Core.v b/GBZ80Core.v
index cd7f4d1..3cd46e3 100644
--- a/GBZ80Core.v
+++ b/GBZ80Core.v
@@ -401,7 +401,7 @@ module GBZ80Core(
 					end
 				endcase
 			end
-			`INSN_RET: begin
+			`INSN_RET,`INSN_RETCC: begin
 				case (cycle)
 				0:	begin
 						rd <= 1;
@@ -409,8 +409,6 @@ module GBZ80Core(
 					end
 				1:	begin	// SPECIAL CASE: cycle does NOT increase linearly with ret!
 						`EXEC_INC_PC;
-						if (opcode != `INSN_RETCC)
-							$stop;
 						case (opcode[4:3])	// cycle 1 is skipped if we are not retcc
 						`INSN_cc_NZ:	if (registers[`REG_F][7]) begin `EXEC_NEWCYCLE; end
 						`INSN_cc_Z:		if (~registers[`REG_F][7]) begin `EXEC_NEWCYCLE; end
@@ -794,7 +792,7 @@ module GBZ80Core(
 			end
 			`INSN_RET,`INSN_RETCC: begin
 				case (cycle)
-				0:	if (opcode != `INSN_RETCC)
+				0:	if (opcode[0])	// i.e., not RETCC
 						cycle <= 1;	// Skip cycle 1; it gets incremented on the next round.
 				1: begin /* Nothing need happen here. */ end
 				2:	registers[`REG_PCL] <= rdata;
diff --git a/rom.asm b/rom.asm
index aa070ff..d650855 100644
--- a/rom.asm
+++ b/rom.asm
@@ -212,7 +212,7 @@ insntest:
 .cplfail:
 	db "CPL",0
 .testfailed:
-	db "test failed.",$0D,$0A,0
+	db " test failed.",$0D,$0A,0
 .ok:
 	db "OK!",$0D,$0A,0
 
@@ -233,9 +233,6 @@ puts:
 	ld a, [hli]
 	ld b, $00
 	cp b
-	jr z, .done
+	ret z
 	call putc
 	jr puts
-.done:
-	ret
-	
-- 
2.43.0