Mercurial > repos > blastem
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);