Mercurial > repos > blastem
diff m68k_core.c @ 1228:2e6dcb5c11a2
WIP support for XBAND mapper hardware
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 23 Feb 2017 00:08:37 -0800 |
parents | afa3d0a227ae |
children | 462d9770d467 |
line wrap: on
line diff
--- a/m68k_core.c Thu Feb 23 00:08:17 2017 -0800 +++ b/m68k_core.c Thu Feb 23 00:08:37 2017 -0800 @@ -617,10 +617,10 @@ m68k_options * opts = context->options; native_map_slot * native_code_map = opts->gen.native_code_map; uint32_t meta_off; - memmap_chunk const *mem_chunk = find_map_chunk(address, &opts->gen, MMAP_WRITE | MMAP_CODE, &meta_off); + memmap_chunk const *mem_chunk = find_map_chunk(address, &opts->gen, MMAP_CODE, &meta_off); if (mem_chunk) { - if ((mem_chunk->flags & (MMAP_WRITE | MMAP_CODE)) == (MMAP_WRITE | MMAP_CODE)) { - uint32_t masked = (address & mem_chunk->mask); + if (mem_chunk->flags & MMAP_CODE) { + uint32_t masked = (address - mem_chunk->start) & mem_chunk->mask; uint32_t final_off = masked + meta_off; uint32_t ram_flags_off = final_off >> (opts->gen.ram_flags_shift + 3); context->ram_code_flags[ram_flags_off] |= 1 << ((final_off >> opts->gen.ram_flags_shift) & 7); @@ -670,7 +670,7 @@ static uint8_t get_native_inst_size(m68k_options * opts, uint32_t address) { uint32_t meta_off; - memmap_chunk const *chunk = find_map_chunk(address, &opts->gen, MMAP_WRITE | MMAP_CODE, &meta_off); + memmap_chunk const *chunk = find_map_chunk(address, &opts->gen, MMAP_CODE, &meta_off); if (chunk) { meta_off += (address - chunk->start) & chunk->mask; } @@ -882,8 +882,10 @@ do { encoded = get_native_pointer(address, (void **)context->mem_pointers, &opts->gen); if (!encoded) { - map_native_address(context, address, code->cur, 2, 1); + code_ptr start = code->cur; translate_out_of_bounds(opts, address); + code_ptr after = code->cur; + map_native_address(context, address, code->cur, 2, after-start); break; } code_ptr existing = get_native_address(opts, address);