diff options
Diffstat (limited to 'src/devices/sound/bsmt2000.h')
-rw-r--r-- | src/devices/sound/bsmt2000.h | 73 |
1 files changed, 32 insertions, 41 deletions
diff --git a/src/devices/sound/bsmt2000.h b/src/devices/sound/bsmt2000.h index 6f720478f90..e0c9fbabaec 100644 --- a/src/devices/sound/bsmt2000.h +++ b/src/devices/sound/bsmt2000.h @@ -14,6 +14,7 @@ #pragma once #include "cpu/tms32010/tms32010.h" +#include "dirom.h" //************************************************************************** @@ -25,7 +26,7 @@ class bsmt2000_device : public device_t, public device_sound_interface, - public device_rom_interface + public device_rom_interface<32> { public: typedef device_delegate<void ()> ready_callback; @@ -34,71 +35,61 @@ public: bsmt2000_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // inline configuration helpers - void set_ready_callback(ready_callback callback) { m_ready_callback = callback; } - template <class FunctionClass> void set_ready_callback(const char *devname, void (FunctionClass::*callback)(), const char *name) - { - set_ready_callback(ready_callback(callback, name, devname, static_cast<FunctionClass *>(nullptr))); - } - template <class FunctionClass> void set_ready_callback(void (FunctionClass::*callback)(), const char *name) - { - set_ready_callback(ready_callback(callback, name, nullptr, static_cast<FunctionClass *>(nullptr))); - } + template <typename... T> void set_ready_callback(T &&... args) { m_ready_callback.set(std::forward<T>(args)...); } // public interface uint16_t read_status(); void write_reg(uint16_t data); void write_data(uint16_t data); - void tms_io_map(address_map &map); - void tms_program_map(address_map &map); + void tms_io_map(address_map &map) ATTR_COLD; + void tms_program_map(address_map &map) ATTR_COLD; protected: // device-level overrides - virtual const tiny_rom_entry *device_rom_region() const override; - virtual void device_add_mconfig(machine_config &config) override; - virtual void device_start() override; - virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; // device_sound_interface overrides - virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; + virtual void sound_stream_update(sound_stream &stream) override; // device_rom_interface overrides - virtual void rom_bank_updated() override; + virtual void rom_bank_pre_change() override; + + TIMER_CALLBACK_MEMBER(deferred_reset); + TIMER_CALLBACK_MEMBER(deferred_reg_write); + TIMER_CALLBACK_MEMBER(deferred_data_write); public: // internal TMS I/O callbacks - DECLARE_READ16_MEMBER( tms_register_r ); - DECLARE_READ16_MEMBER( tms_data_r ); - DECLARE_READ16_MEMBER( tms_rom_r ); - DECLARE_WRITE16_MEMBER( tms_rom_addr_w ); - DECLARE_WRITE16_MEMBER( tms_rom_bank_w ); - DECLARE_WRITE16_MEMBER( tms_left_w ); - DECLARE_WRITE16_MEMBER( tms_right_w ); + uint16_t tms_register_r(); + uint16_t tms_data_r(); + uint16_t tms_rom_r(); + void tms_rom_addr_w(uint16_t data); + void tms_rom_bank_w(uint16_t data); + void tms_left_w(uint16_t data); + void tms_right_w(uint16_t data); private: - // timers - enum - { - TIMER_ID_RESET, - TIMER_ID_REG_WRITE, - TIMER_ID_DATA_WRITE - }; - // configuration state ready_callback m_ready_callback; // internal state sound_stream * m_stream; required_device<tms32015_device> m_cpu; - uint16_t m_register_select; - uint16_t m_write_data; - uint16_t m_rom_address; - uint16_t m_rom_bank; - int16_t m_left_data; - int16_t m_right_data; + uint16_t m_register_select; + uint16_t m_write_data; + uint16_t m_rom_address; + uint16_t m_rom_bank; + int16_t m_left_data; + int16_t m_right_data; bool m_write_pending; + emu_timer * m_deferred_reset; + emu_timer * m_deferred_reg_write; + emu_timer * m_deferred_data_write; - DECLARE_READ_LINE_MEMBER( tms_write_pending_r ); + int tms_write_pending_r(); }; |