# HG changeset patch # User Michael Pavone # Date 1461809450 25200 # Node ID ce9df7a5fdf28cab79b3457072f36605d6e9f89a # Parent 1f09994e92c5974e7f28abf6266fb98d56d6fb20 Fix changes made to get_instruction_start and map_native_address to cope with being able to translate at odd addresses. diff -r 1f09994e92c5 -r ce9df7a5fdf2 m68k_core.c --- a/m68k_core.c Tue Apr 26 23:13:37 2016 -0700 +++ b/m68k_core.c Wed Apr 27 19:10:50 2016 -0700 @@ -586,6 +586,7 @@ if (address >= opts->gen.memmap[i].start && address < opts->gen.memmap[i].end) { //calculate the lowest alias for this address address = opts->gen.memmap[i].start + ((address - opts->gen.memmap[i].start) & opts->gen.memmap[i].mask); + break; } } @@ -602,7 +603,7 @@ chunk = address / NATIVE_CHUNK_SIZE; offset = address % NATIVE_CHUNK_SIZE; } - return address*2; + return address; } void map_native_address(m68k_context * context, uint32_t address, code_ptr native_addr, uint8_t size, uint8_t native_size) @@ -649,8 +650,8 @@ } uint32_t offset = address % NATIVE_CHUNK_SIZE; native_code_map[chunk].offsets[offset] = native_addr-native_code_map[chunk].base; - for(address++,size-=2; size; address++,size-=2) { - address &= opts->gen.address_mask >> 1; + for(address++,size-=1; size; address++,size-=1) { + address &= opts->gen.address_mask; chunk = address / NATIVE_CHUNK_SIZE; offset = address % NATIVE_CHUNK_SIZE; if (!native_code_map[chunk].base) {