shithub: sms

Download patch

ref: e90ba58902d0f695732b76fe86acedf3a4d1be74
parent: cda22ef3740bddcd1ae90ad5e8de1fbd70ab7242
author: Jean-André Santoni <jean.andre.santoni@gmail.com>
date: Sat Mar 7 15:50:40 EST 2026

Fix signed ix displacement

--- a/z80.c
+++ b/z80.c
@@ -127,8 +127,8 @@
 	case 11: u = ix[1]; t = 4; break;
 	case 12: u = ix[0] >> 8; t = 4; break;
 	case 13: u = ix[1] >> 8; t = 4; break;
-	case 14: u = z80read(ix[0] + fetch8()); t = 15; break;
-	case 15: u = z80read(ix[1] + fetch8()); t = 15; break;
+	case 14: u = z80read(ix[0] + (s8int)fetch8()); t = 15; break;
+	case 15: u = z80read(ix[1] + (s8int)fetch8()); t = 15; break;
 	case rHL:
 		u = z80read(HL());
 		t = 3;
@@ -364,7 +364,7 @@
 	
 	SET(a, v, t);
 	if(i >= 0){
-		a = ix[i] + fetch8();
+		a = ix[i] + (s8int)fetch8();
 		v = z80read(a);
 		t = 23;
 	}
@@ -688,7 +688,7 @@
 	case 0x64: case 0x6d: return 8;
 	case 0x70: case 0x71: case 0x72: case 0x73:
 	case 0x74: case 0x75: case 0x77:
-		z80write(ix[n] + fetch8(), s[op & 7]);
+		z80write(ix[n] + (s8int)fetch8(), s[op & 7]);
 		return 19;
 	case 0x44: case 0x4c: case 0x54: case 0x5c: case 0x7c:
 		s[op >> 3 & 7] = ix[n] >> 8;
@@ -697,7 +697,7 @@
 		s[op >> 3 & 7] = ix[n];
 		return 8;
 	case 0x46: case 0x4e: case 0x56: case 0x5e: case 0x66: case 0x6e: case 0x7e:
-		s[op >> 3 & 7] = z80read(ix[n] + fetch8());
+		s[op >> 3 & 7] = z80read(ix[n] + (s8int)fetch8());
 		return 19;
 	case 0x84: case 0x8c: case 0x94: case 0x9c:
 	case 0xa4: case 0xac: case 0xb4: case 0xbc:
@@ -715,12 +715,12 @@
 	case 0x23: ix[n]++; return 10;
 	case 0xe3: v = ix[n]; ix[n] = read16(sp); write16(sp, v); return 23;
 	case 0x24: inc(ix[n] >> 8); ix[n] += 0x100; return 8;
-	case 0x34: v = ix[n] + fetch8(); z80write(v, inc(z80read(v))); return 23;
+	case 0x34: v = ix[n] + (s8int)fetch8(); z80write(v, inc(z80read(v))); return 23;
 	case 0x25: dec(ix[n] >> 8); ix[n] -= 0x100; return 8;
-	case 0x35: v = ix[n] + fetch8(); z80write(v, dec(z80read(v))); return 23;
+	case 0x35: v = ix[n] + (s8int)fetch8(); z80write(v, dec(z80read(v))); return 23;
 	case 0xe5: push16(ix[n]); return 15;
 	case 0x26: ix[n] = ix[n] & 0xff | fetch8() << 8; return 11;
-	case 0x36: v = ix[n] + fetch8(); z80write(v, fetch8()); return 19;
+	case 0x36: v = ix[n] + (s8int)fetch8(); z80write(v, fetch8()); return 19;
 	case 0x09: return addindex(n, BC());
 	case 0x19: return addindex(n, DE());
 	case 0x29: return addindex(n, ix[n]);
--