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]);
--
⑨