summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/sound/bsmt2000.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/sound/bsmt2000.h')
-rw-r--r--src/devices/sound/bsmt2000.h73
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();
};