comparison z80_to_x86.c @ 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
comparison
equal deleted inserted replaced
305:a57fac5b3d65 306:3970006fae90
187 break; 187 break;
188 case Z80_IX_DISPLACE: 188 case Z80_IX_DISPLACE:
189 case Z80_IY_DISPLACE: 189 case Z80_IY_DISPLACE:
190 reg = opts->regs[(inst->addr_mode & 0x1F) == Z80_IX_DISPLACE ? Z80_IX : Z80_IY]; 190 reg = opts->regs[(inst->addr_mode & 0x1F) == Z80_IX_DISPLACE ? Z80_IX : Z80_IY];
191 dst = mov_rr(dst, reg, areg, SZ_W); 191 dst = mov_rr(dst, reg, areg, SZ_W);
192 dst = add_ir(dst, inst->ea_reg, areg, SZ_W); 192 dst = add_ir(dst, inst->ea_reg & 0x80 ? inst->ea_reg - 256 : inst->ea_reg, areg, SZ_W);
193 size = z80_size(inst); 193 size = z80_size(inst);
194 if (read) { 194 if (read) {
195 if (modify) { 195 if (modify) {
196 //dst = push_r(dst, SCRATCH1); 196 //dst = push_r(dst, SCRATCH1);
197 dst = mov_rrdisp8(dst, SCRATCH1, CONTEXT, offsetof(z80_context, scratch1), SZ_W); 197 dst = mov_rrdisp8(dst, SCRATCH1, CONTEXT, offsetof(z80_context, scratch1), SZ_W);