changeset 306:3970006fae90

Properly handle negative displacements in Z80 core
author Mike Pavone <pavone@retrodev.com>
date Wed, 08 May 2013 23:31:19 -0700
parents a57fac5b3d65
children b6393b89a7e4
files z80_to_x86.c
diffstat 1 files changed, 1 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/z80_to_x86.c	Wed May 08 23:29:21 2013 -0700
+++ b/z80_to_x86.c	Wed May 08 23:31:19 2013 -0700
@@ -189,7 +189,7 @@
 	case Z80_IY_DISPLACE:
 		reg = opts->regs[(inst->addr_mode & 0x1F) == Z80_IX_DISPLACE ? Z80_IX : Z80_IY];
 		dst = mov_rr(dst, reg, areg, SZ_W);
-		dst = add_ir(dst, inst->ea_reg, areg, SZ_W);
+		dst = add_ir(dst, inst->ea_reg & 0x80 ? inst->ea_reg - 256 : inst->ea_reg, areg, SZ_W);
 		size = z80_size(inst);
 		if (read) {
 			if (modify) {