diff m68k_to_x86.h @ 18:3e7bfde7606e

M68K to x86 translation works for a limited subset of instructions and addressing modes
author Mike Pavone <pavone@retrodev.com>
date Tue, 04 Dec 2012 19:13:12 -0800
parents 2bdad0f52f42
children 3b79cbcf6846
line wrap: on
line diff
--- a/m68k_to_x86.h	Tue Nov 27 22:54:38 2012 -0800
+++ b/m68k_to_x86.h	Tue Dec 04 19:13:12 2012 -0800
@@ -1,16 +1,46 @@
 #include <stdint.h>
+#include "68kinst.h"
+
+#define NUM_MEM_AREAS 4
+#define NATIVE_MAP_CHUNKS (32*1024)
+#define NATIVE_CHUNK_SIZE ((16 * 1024 * 1024 / NATIVE_MAP_CHUNKS)/2)
+#define INVALID_OFFSET 0xFFFF
 
 typedef struct {
-	uint32_t flags;
-	int8_t   dregs[8];
-	int8_t   aregs[8];
+	uint8_t  *base;
+	uint16_t *offsets;
+} native_map_slot;
+
+typedef struct deferred_addr {
+	struct deferred_addr *next;
+	uint8_t              *dest;
+	uint32_t             address;
+} deferred_addr;
+
+typedef struct {
+	uint32_t        flags;
+	int8_t          dregs[8];
+	int8_t          aregs[8];
+	native_map_slot *native_code_map;
+	deferred_addr   *deferred;
+	
 } x86_68k_options;
 
 typedef struct {
-	uint8_t  flags[5];
-	uint8_t  status;
-	uint16_t reserved;
-	uint32_t dregs[8];
-	uint32_t aregs[8];
+	uint8_t         flags[5];
+	uint8_t         status;
+	uint16_t        reserved;
+	uint32_t        dregs[8];
+	uint32_t        aregs[8];
+	uint32_t		target_cycle;
+	uint32_t		current_cycle;
+	uint16_t        *mem_pointers[NUM_MEM_AREAS];
+	native_map_slot *native_code_map;
+	void            *options;
 } m68k_context;
 
+uint8_t * translate_m68k(uint8_t * dst, m68kinst * inst, x86_68k_options * opts);
+uint8_t * translate_m68k_stream(uint8_t * dst, uint8_t * dst_end, uint32_t address, m68k_context * context);
+void start_68k_context(m68k_context * context, uint32_t address);
+void init_x86_68k_opts(x86_68k_options * opts);
+void init_68k_context(m68k_context * context, native_map_slot * native_code_map, void * opts);