shithub: sms

Download patch

ref: 764237f1d6ba9f85bff5196b7c5a52945d8eb76e
parent: 8c38c2248ef182ff9a1b8e5dd196eb4371d60848
author: Jean-André Santoni <jean.andre.santoni@gmail.com>
date: Sat Jul 13 13:54:43 EDT 2024

Perform 0xdb on 2 cycles

--- a/mem.c
+++ b/mem.c
@@ -39,7 +39,7 @@
 uint8_t
 z80read(uint16_t a)
 {
-	// printf("z80read %x\n", a);
+	printf("z80read %x\n", a);
 	uint16_t v;
 
 	if (a < 0x400)
@@ -63,7 +63,7 @@
 void
 z80write(uint16_t a, uint8_t v)
 {
-	// printf("z80write %x %x\n", a, v);
+	printf("z80write %x %x\n", a, v);
 	if (a < 0x8000)
 		printf("wrong z80write page 0 or 1 %x %x\n", a, v);
 	else if (a < 0xC000)
@@ -114,7 +114,7 @@
 uint8_t
 z80in(uint8_t port)
 {
-	// printf("z80in %x\n", port);
+	printf("z80in %x\n", port);
 	if (port < 0x40)
 		return 0xff;
 	else if (port >= 0x40 && port < 0x80)
@@ -137,8 +137,7 @@
 void
 z80out(uint8_t port, uint8_t v)
 {
-	// printf("z80out %x %x\n", port, v);
-
+	printf("z80out %x %x\n", port, v);
 	if (port < 0x40){
 		printf("  write to control register\n");
 		if ((port & 0x01) == 0x00)
--- a/z80.c
+++ b/z80.c
@@ -11,6 +11,7 @@
 uint16_t ix[2] = {0xFFFF, 0xFFFF};
 uint16_t pc, curpc, sp;
 int halt;
+int inplast;
 
 enum {
 	FLAGC = 0x01,
@@ -664,10 +665,10 @@
 		}
 	}
 	curpc = pc;
-	if(0)
+	if(1)
 		printf("%x AF %.2x%.2x BC %.2x%.2x DE %.2x%.2x HL %.2x%.2x IX %.4x IY %.4x\n", curpc, s[rA], s[rF], s[rB], s[rC], s[rD], s[rE], s[rH], s[rL], ix[0], ix[1]);
 	op = fetch8();
-	// printf("op: %x\n", op);
+	printf("op: %x\n", op);
 	switch(op >> 6){
 	case 1: return move(op >> 3 & 7, op & 7);
 	case 2: return alu(op >> 3 & 7, op & 7);
@@ -840,7 +841,9 @@
 	case 0xea: return jump((s[rF] & FLAGV) != 0);
 	case 0xfa: return jump((s[rF] & FLAGS) != 0);
 	case 0xcb: return bits(-1);
-	case 0xdb: s[rA] = z80in(fetch8()); return 11;
+	case 0xdb:
+		if(inplast){ s[rA] = z80in(fetch8()); inplast = 0; return 10;
+		}else{ pc--; inplast = 1; return 1; }
 	case 0xeb:
 		v = DE();
 		s[rD] = s[rH];
--