Mercurial > repos > blastem
view m68k_to_x86.h @ 103:a71544cd01ea
Don't pre-emptively translate code at interrupt vectors as some PD ROMs have these pointing at junk. Need some kind of heuristic for detecting garbage if I'm going to translate them ahead of time by default.
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 27 Dec 2012 22:48:54 -0800 |
parents | dd3c680c618c |
children | 94a65fb4e1c7 |
line wrap: on
line source
#include <stdint.h> #include "68kinst.h" #define NUM_MEM_AREAS 4 #define NATIVE_MAP_CHUNKS (64*1024) #define NATIVE_CHUNK_SIZE ((16 * 1024 * 1024 / NATIVE_MAP_CHUNKS)/2) #define INVALID_OFFSET 0xFFFFFFFF typedef struct { uint8_t *base; int32_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; uint8_t *cur_code; uint8_t *code_end; } x86_68k_options; typedef struct { uint8_t flags[5]; uint8_t status; uint16_t reserved; uint32_t dregs[8]; uint32_t aregs[9]; uint32_t target_cycle; //cycle at which the next synchronization or interrupt occurs uint32_t current_cycle; uint32_t sync_cycle; uint32_t int_cycle; uint32_t int_num; uint16_t *mem_pointers[NUM_MEM_AREAS]; void *next_context; uint16_t value; 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(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); void m68k_reset(m68k_context * context);