diff options
Diffstat (limited to 'z80_to_x86.h')
-rw-r--r-- | z80_to_x86.h | 56 |
1 files changed, 44 insertions, 12 deletions
diff --git a/z80_to_x86.h b/z80_to_x86.h index 48cc942..fefa836 100644 --- a/z80_to_x86.h +++ b/z80_to_x86.h @@ -21,14 +21,29 @@ enum { ZF_NUM }; +typedef void (*z80_run_fun)(void * context); + typedef struct { - uint8_t * cur_code; - uint8_t * code_end; - uint8_t *ram_inst_sizes; - deferred_addr * deferred; + cpu_options gen; + code_ptr save_context_scratch; + code_ptr load_context_scratch; + code_ptr native_addr; + code_ptr retrans_stub; + code_ptr do_sync; + code_ptr read_8; + code_ptr write_8; + code_ptr read_8_noinc; + code_ptr write_8_noinc; + code_ptr read_16; + code_ptr write_16_highfirst; + code_ptr write_16_lowfirst; + code_ptr read_io; + code_ptr write_io; + uint32_t flags; int8_t regs[Z80_UNUSED]; -} x86_z80_options; + z80_run_fun run; +} z80_options; typedef struct { void * native_pc; @@ -51,23 +66,40 @@ typedef struct { uint32_t int_cycle; native_map_slot * static_code_map; native_map_slot * banked_code_map; - void * options; + z80_options * options; void * system; uint8_t ram_code_flags[(8 * 1024)/128/8]; uint32_t int_enable_cycle; uint16_t pc; + uint32_t int_pulse_start; + uint32_t int_pulse_end; + uint8_t breakpoint_flags[(16 * 1024)/sizeof(uint8_t)]; + uint8_t * bp_handler; + uint8_t * bp_stub; + uint8_t * interp_code[256]; + uint8_t reset; + uint8_t busreq; + uint8_t busack; } z80_context; void translate_z80_stream(z80_context * context, uint32_t address); -void init_x86_z80_opts(x86_z80_options * options); -void init_z80_context(z80_context * context, x86_z80_options * options); -uint8_t * z80_get_native_address(z80_context * context, uint32_t address); -extern uint8_t * z80_get_native_address_trans(z80_context * context, uint32_t address) asm("z80_get_native_address_trans"); -z80_context * z80_handle_code_write(uint32_t address, z80_context * context) asm("z80_handle_code_write"); -extern void z80_run(z80_context * context) asm("z80_run"); +void init_z80_opts(z80_options * options, memmap_chunk const * chunks, uint32_t num_chunks, uint32_t clock_divider); +void init_z80_context(z80_context * context, z80_options * options); +code_ptr z80_get_native_address(z80_context * context, uint32_t address); +code_ptr z80_get_native_address_trans(z80_context * context, uint32_t address); +z80_context * z80_handle_code_write(uint32_t address, z80_context * context); void z80_reset(z80_context * context); void zinsert_breakpoint(z80_context * context, uint16_t address, uint8_t * bp_handler); void zremove_breakpoint(z80_context * context, uint16_t address); +void z80_run(z80_context * context, uint32_t target_cycle); +void z80_assert_reset(z80_context * context, uint32_t cycle); +void z80_clear_reset(z80_context * context, uint32_t cycle); +void z80_assert_busreq(z80_context * context, uint32_t cycle); +void z80_clear_busreq(z80_context * context, uint32_t cycle); +uint8_t z80_get_busack(z80_context * context, uint32_t cycle); +void z80_adjust_cycles(z80_context * context, uint32_t deduction); +//to be provided by system code +void z80_next_int_pulse(z80_context * z_context); #endif //Z80_TO_X86_H_ |