virtual void initialize() { }
virtual void release();
+
+ virtual void clear_sound_in_source(int bank);
+ // this function may be before (or after) initialize().
+ virtual int add_sound_in_source(int rate, int samples, int channels);
+ // this function may be before (or after) initialize().
+ virtual int release_sound_in_source(int bank);
+ virtual bool is_sound_in_source_exists(int bank);
+ virtual int increment_sound_in_passed_data(int bank, double passed_usec);
+ virtual int get_sound_in_buffers_count();
+ virtual int get_sound_in_samples(int bank);
+ virtual int get_sound_in_rate(int bank);
+ virtual int get_sound_in_channels(int bank);
+ // this function may be before (or after) initialize().
+ virtual int16_t* get_sound_in_buf_ptr(int bank);
+
+ virtual int write_sound_in_buffer(int bank, int32_t* src, int samples);
+ // Add sampled values to sample buffer;value may be -32768 to +32767.
+ // this function may be before (or after) initialize().
+ virtual int get_sound_in_latest_data(int bank, int32_t* dst, int expect_channels);
+ virtual int get_sound_in_data(int bank, int32_t* dst, int expect_samples, int expect_rate, int expect_channels);
+ virtual void set_high_pass_filter_freq(int freq, double quality) { } // If freq < 0 disable HPF.
+ virtual void set_low_pass_filter_freq(int freq, double quality) { } // If freq <= 0 disable LPF.
virtual void update_config() {}
virtual void save_state(FILEIO* state_fio) {}
// z80 daisy chain
virtual void set_context_intr(DEVICE* device, uint32_t bit) {}
virtual void set_context_child(DEVICE* device) {}
+ virtual DEVICE *get_context_child()
+ {
+ return NULL;
+ }
// interrupt device to device
virtual void set_intr_iei(bool val) {}
{
return false;
}
- virtual bool bios_ret_z80(uint16_t PC, pair_t* af, pair_t* bc, pair_t* de, pair_t* hl, pair_t* ix, pair_t* iy, uint8_t* iff1) {
+ virtual bool bios_ret_z80(uint16_t PC, pair32_t* af, pair32_t* bc, pair32_t* de, pair32_t* hl, pair32_t* ix, pair32_t* iy, uint8_t* iff1) {
return false;
}
// misc
event_manager = device;
}
virtual int get_event_manager_id();
+ virtual bool is_primary_cpu(DEVICE* device);
+ virtual void update_extra_event(int clock);
virtual void register_event(DEVICE* device, int event_id, double usec, bool loop, int* register_id);
virtual void register_event_by_clock(DEVICE* device, int event_id, uint64_t clock, bool loop, int* register_id);
virtual void cancel_event(DEVICE* device, int register_id);
virtual void mix(int32_t* buffer, int cnt) {}
virtual void set_volume(int ch, int decibel_l, int decibel_r) {} // +1 equals +0.5dB (same as fmgen)
virtual void set_device_name(const _TCHAR *format, ...);
- virtual void out_debug_log(const char *fmt, ...);
- virtual void force_out_debug_log(const char *fmt, ...);
// debugger
// DEBUGGER is enabled by default.
+ virtual bool is_cpu();
+ virtual bool is_debugger();
+ virtual bool is_debugger_available();
virtual void *get_debugger();
virtual uint32_t get_debug_prog_addr_mask();
virtual uint32_t get_debug_data_addr_mask();
+ virtual uint64_t get_debug_data_addr_space();
virtual void write_debug_data8(uint32_t addr, uint32_t data);
virtual uint32_t read_debug_data8(uint32_t addr);
virtual void write_debug_data16(uint32_t addr, uint32_t data);
virtual void write_debug_io32(uint32_t addr, uint32_t data);
virtual uint32_t read_debug_io32(uint32_t addr);
virtual bool write_debug_reg(const _TCHAR *reg, uint32_t data);
- virtual void get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
+ virtual uint32_t read_debug_reg(const _TCHAR *reg);
+ virtual bool get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
virtual int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
-
+/*
+ These functions are used for debugging non-cpu device
+ Insert debugger between standard read/write functions and these functions for checking breakpoints
+
+ void DEVICE::write_data8(uint32_t addr, uint32_t data)
+ {
+ if(debugger != NULL && debugger->now_device_debugging) {
+ // debugger->mem = this;
+ // debugger->mem->write_via_debugger_data8(addr, data)
+ debugger->write_via_debugger_data8(addr, data);
+ } else {
+ this->write_via_debugger_data8(addr, data);
+ }
+ }
+ void DEVICE::write_via_debugger_data8(uint32_t addr, uint32_t data)
+ {
+ // write memory
+ }
+*/
+ virtual void write_via_debugger_data8(uint32_t addr, uint32_t data);
+ virtual uint32_t read_via_debugger_data8(uint32_t addr);
+ virtual void write_via_debugger_data16(uint32_t addr, uint32_t data);
+ virtual uint32_t read_via_debugger_data16(uint32_t addr);
+ virtual void write_via_debugger_data32(uint32_t addr, uint32_t data);
+ virtual uint32_t read_via_debugger_data32(uint32_t addr);
+ virtual void write_via_debugger_data8w(uint32_t addr, uint32_t data, int* wait);
+ virtual uint32_t read_via_debugger_data8w(uint32_t addr, int* wait);
+ virtual void write_via_debugger_data16w(uint32_t addr, uint32_t data, int* wait);
+ virtual uint32_t read_via_debugger_data16w(uint32_t addr, int* wait);
+ virtual void write_via_debugger_data32w(uint32_t addr, uint32_t data, int* wait);
+ virtual uint32_t read_via_debugger_data32w(uint32_t addr, int* wait);
+ virtual void write_via_debugger_io8(uint32_t addr, uint32_t data);
+ virtual uint32_t read_via_debugger_io8(uint32_t addr);
+ virtual void write_via_debugger_io16(uint32_t addr, uint32_t data);
+ virtual uint32_t read_via_debugger_io16(uint32_t addr);
+ virtual void write_via_debugger_io32(uint32_t addr, uint32_t data);
+ virtual uint32_t read_via_debugger_io32(uint32_t addr);
+ virtual void write_via_debugger_io8w(uint32_t addr, uint32_t data, int* wait);
+ virtual uint32_t read_via_debugger_io8w(uint32_t addr, int* wait);
+ virtual void write_via_debugger_io16w(uint32_t addr, uint32_t data, int* wait);
+ virtual uint32_t read_via_debugger_io16w(uint32_t addr, int* wait);
+ virtual void write_via_debugger_io32w(uint32_t addr, uint32_t data, int* wait);
+ virtual uint32_t read_via_debugger_io32w(uint32_t addr, int* wait);
+ virtual void out_debug_log(const char *fmt, ...);
+ virtual void force_out_debug_log(const char *fmt, ...);
+
// misc
const _TCHAR *get_lib_common_vm_version(void);