Mercurial > repos > blastem
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); |