/* Internal MMIO state and API. */ #ifndef FX_EMU_CORE_MMIO_INTERNAL_H #define FX_EMU_CORE_MMIO_INTERNAL_H #include "eps6800.h" #include "mmio_layout.h" #include #include struct cpu_state; struct kbd_state; struct lcd_state; struct timer_state; typedef bool (*mmio_debug_access_callback)( void *user, uint32_t linear_address, uint8_t *value, bool write, bool before ); struct mmio_state { enum eps_variant variant; uint8_t regs[MMIO_REG_COUNT]; uint8_t ram_wbk[MMIO_WBK_COUNT]; /* Mapped into 0x25-0x3F if WBK=1 */ uint8_t ram[MMIO_RAM_COUNT]; struct cpu_state *cpu; struct kbd_state *kbd; struct lcd_state *lcd; struct timer_state *timer; mmio_debug_access_callback debug_access; void *debug_access_user; uint32_t debug_access_suppression; }; void mmio_connect_peripherals_state( struct mmio_state *state, struct kbd_state *kbd, struct lcd_state *lcd, struct timer_state *timer ); void mmio_connect_cpu_state(struct mmio_state *state, struct cpu_state *cpu); void mmio_set_debug_access_callback_state( struct mmio_state *state, mmio_debug_access_callback callback, void *user ); void mmio_suppress_debug_access_state(struct mmio_state *state, bool suppress); void mmio_bad_read_byte_state(struct mmio_state *state, uint8_t addr); void mmio_bad_write_byte_state(struct mmio_state *state, uint8_t addr); uint8_t mmio_read_byte_state(struct mmio_state *state, uint8_t addr); void mmio_write_byte_state(struct mmio_state *state, uint8_t addr, uint8_t byte); void mmio_write_byte_internal_state(struct mmio_state *state, uint8_t addr, uint8_t byte); uint8_t mmio_read_byte_internal_state(struct mmio_state *state, uint8_t addr); void mmio_post_id_state(struct mmio_state *state, uint8_t addr); void mmio_sync_extended_fsr_result_state(struct mmio_state *state, uint8_t addr, uint8_t result); void mmio_carry_propagate_state(struct mmio_state *state, uint8_t addr); void mmio_borrow_propagate_state(struct mmio_state *state, uint8_t addr); void mmio_init_state(struct mmio_state *state, enum eps_variant variant); void mmio_reset_state(struct mmio_state *state); void mmio_trace_snapshot_state( const struct mmio_state *state, uint8_t *regs_out, uint8_t *ram_wbk_out, uint8_t *ram_out ); #endif /* FX_EMU_CORE_MMIO_INTERNAL_H */