# HG changeset patch # User Mike Pavone # Date 1356672235 28800 # Node ID f894f85cf39d71c5c1abe41d235318c4a4ef7039 # Parent dd3c680c618c4af6e60db138f3eaa29cd4682425 Fix pc indexed addressing (probably) when used as a source diff -r dd3c680c618c -r f894f85cf39d m68k_to_x86.c --- 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) {