changeset 988:ce9df7a5fdf2

Fix changes made to get_instruction_start and map_native_address to cope with being able to translate at odd addresses.
author Michael Pavone <pavone@retrodev.com>
date Wed, 27 Apr 2016 19:10:50 -0700
parents 1f09994e92c5
children d70000fdff0b
files m68k_core.c
diffstat 1 files changed, 4 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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) {