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);