Mercurial > repos > blastem
changeset 96:f894f85cf39d
Fix pc indexed addressing (probably) when used as a source
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 27 Dec 2012 21:23:55 -0800 |
parents | dd3c680c618c |
children | c7185fd840fc |
files | m68k_to_x86.c |
diffstat | 1 files changed, 17 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/m68k_to_x86.c Thu Dec 27 21:19:58 2012 -0800 +++ b/m68k_to_x86.c Thu Dec 27 21:23:55 2012 -0800 @@ -245,7 +245,7 @@ break; case MODE_PC_INDEX_DISP8: out = cycles(out, 6); - out = mov_ir(out, inst->address, SCRATCH1, SZ_D); + out = mov_ir(out, inst->address+2, SCRATCH1, SZ_D); sec_reg = (inst->src.params.regs.sec >> 1) & 0x7; if (inst->src.params.regs.sec & 1) { if (inst->src.params.regs.sec & 0x10) { @@ -280,6 +280,20 @@ if (inst->src.params.regs.displacement) { out = add_ir(out, inst->src.params.regs.displacement, SCRATCH1, SZ_D); } + switch (inst->extra.size) + { + case OPSIZE_BYTE: + out = call(out, (char *)m68k_read_byte_scratch1); + break; + case OPSIZE_WORD: + out = call(out, (char *)m68k_read_word_scratch1); + break; + case OPSIZE_LONG: + out = call(out, (char *)m68k_read_long_scratch1); + break; + } + ea->mode = MODE_REG_DIRECT; + ea->base = SCRATCH1; break; case MODE_ABSOLUTE: case MODE_ABSOLUTE_SHORT: @@ -487,9 +501,9 @@ uint8_t * get_native_address(native_map_slot * native_code_map, uint32_t address) { address &= 0xFFFFFF; - //if (address > 0x400000) { + if (address > 0x400000) { printf("get_native_address: %X\n", address); - //} + } address /= 2; uint32_t chunk = address / NATIVE_CHUNK_SIZE; if (!native_code_map[chunk].base) {