changeset 86:3d3966c254b2

RTE doesn't crash the emulator anymore
author Mike Pavone <pavone@retrodev.com>
date Wed, 26 Dec 2012 18:20:23 -0800
parents 1db2a0b655d1
children 60b5c9e2f4e0
files m68k_to_x86.c m68k_to_x86.h runtime.S
diffstat 3 files changed, 11 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/m68k_to_x86.c	Wed Dec 26 17:50:24 2012 -0800
+++ b/m68k_to_x86.c	Wed Dec 26 18:20:23 2012 -0800
@@ -479,6 +479,9 @@
 uint8_t * get_native_address(native_map_slot * native_code_map, uint32_t address)
 {
 	address &= 0xFFFFFF;
+	if (address > 0x400000) {
+		printf("get_native_address: %X\n", address);
+	}
 	uint32_t chunk = address / NATIVE_CHUNK_SIZE;
 	if (!native_code_map[chunk].base) {
 		return NULL;
--- a/m68k_to_x86.h	Wed Dec 26 17:50:24 2012 -0800
+++ b/m68k_to_x86.h	Wed Dec 26 18:20:23 2012 -0800
@@ -2,7 +2,7 @@
 #include "68kinst.h"
 
 #define NUM_MEM_AREAS 4
-#define NATIVE_MAP_CHUNKS (32*1024)
+#define NATIVE_MAP_CHUNKS (64*1024)
 #define NATIVE_CHUNK_SIZE ((16 * 1024 * 1024 / NATIVE_MAP_CHUNKS)/2)
 #define INVALID_OFFSET 0xFFFFFFFF
 
--- a/runtime.S	Wed Dec 26 17:50:24 2012 -0800
+++ b/runtime.S	Wed Dec 26 18:20:23 2012 -0800
@@ -268,10 +268,12 @@
 	.global m68k_write_long_lowfirst
 m68k_write_long_lowfirst:
 	push %rdi
+	push %rcx
 	add $2, %edi
 	call m68k_write_word
+	pop %rcx
+	pop %rdi
 	shr $16, %ecx
-	pop %rdi
 	jmp m68k_write_word
 
 	.global m68k_write_long_highfirst
@@ -391,8 +393,8 @@
 dyn_addr_msg:
 	.asciz "Program needs dynamically calculated native address\n"
 	
-	.global m68k_native_addr
-m68k_native_addr:
+	.global m68k_native_addr_and_sync
+m68k_native_addr_and_sync:
 	call m68k_save_context
 	push %rcx
 	mov %rsi, %rdi
@@ -406,8 +408,8 @@
 	call m68k_load_context
 	ret
 
-	.global m68k_native_addr_and_sync
-m68k_native_addr_and_sync:
+	.global m68k_native_addr
+m68k_native_addr:
 	call m68k_save_context
 	push %rsi
 	mov 144(%rsi), %rdi