diff options
author | 2013-05-12 16:50:16 +0000 | |
---|---|---|
committer | 2013-05-12 16:50:16 +0000 | |
commit | be76c99e9c8658100f17360b2686f15e9208f40b (patch) | |
tree | 35e4ec77e20f86958aed3a41c6286599621ae7b4 /src/emu/sound/8950intf.h | |
parent | 80d4b45679fbe4851633cbc7068162d01f04353a (diff) |
modernised Y8950 [smf]
Diffstat (limited to 'src/emu/sound/8950intf.h')
-rw-r--r-- | src/emu/sound/8950intf.h | 75 |
1 files changed, 48 insertions, 27 deletions
diff --git a/src/emu/sound/8950intf.h b/src/emu/sound/8950intf.h index 52677f28ab8..1a61cec78ce 100644 --- a/src/emu/sound/8950intf.h +++ b/src/emu/sound/8950intf.h @@ -3,35 +3,52 @@ #ifndef __8950INTF_H__ #define __8950INTF_H__ -#include "devlegcy.h" +#include "emu.h" -struct y8950_interface -{ - devcb_write_line m_handler_cb; - devcb_read8 m_keyboardread_cb; - devcb_write8 m_keyboardwrite_cb; - devcb_read8 m_portread_cb; - devcb_write8 m_portwrite_cb; -}; +#define MCFG_Y8950_IRQ_HANDLER(_devcb) \ + devcb = &y8950_device::set_irq_handler(*device, DEVCB2_##_devcb); + +#define MCFG_Y8950_KEYBOARD_READ_HANDLER(_devcb) \ + devcb = &y8950_device::set_keyboard_read_handler(*device, DEVCB2_##_devcb); -DECLARE_READ8_DEVICE_HANDLER( y8950_r ); -DECLARE_WRITE8_DEVICE_HANDLER( y8950_w ); +#define MCFG_Y8950_KEYBOARD_WRITE_HANDLER(_devcb) \ + devcb = &y8950_device::set_keyboard_write_handler(*device, DEVCB2_##_devcb); -DECLARE_READ8_DEVICE_HANDLER( y8950_status_port_r ); -DECLARE_READ8_DEVICE_HANDLER( y8950_read_port_r ); -DECLARE_WRITE8_DEVICE_HANDLER( y8950_control_port_w ); -DECLARE_WRITE8_DEVICE_HANDLER( y8950_write_port_w ); +#define MCFG_Y8950_IO_READ_HANDLER(_devcb) \ + devcb = &y8950_device::set_io_read_handler(*device, DEVCB2_##_devcb); + +#define MCFG_Y8950_IO_WRITE_HANDLER(_devcb) \ + devcb = &y8950_device::set_io_write_handler(*device, DEVCB2_##_devcb); class y8950_device : public device_t, - public device_sound_interface, - public y8950_interface + public device_sound_interface { public: y8950_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - ~y8950_device() { global_free(m_token); } - // access to legacy token - void *token() const { assert(m_token != NULL); return m_token; } + // static configuration helpers + template<class _Object> static devcb2_base &set_irq_handler(device_t &device, _Object object) { return downcast<y8950_device &>(device).m_irq_handler.set_callback(object); } + template<class _Object> static devcb2_base &set_keyboard_read_handler(device_t &device, _Object object) { return downcast<y8950_device &>(device).m_keyboard_read_handler.set_callback(object); } + template<class _Object> static devcb2_base &set_keyboard_write_handler(device_t &device, _Object object) { return downcast<y8950_device &>(device).m_keyboard_write_handler.set_callback(object); } + template<class _Object> static devcb2_base &set_io_read_handler(device_t &device, _Object object) { return downcast<y8950_device &>(device).m_io_read_handler.set_callback(object); } + template<class _Object> static devcb2_base &set_io_write_handler(device_t &device, _Object object) { return downcast<y8950_device &>(device).m_io_write_handler.set_callback(object); } + + DECLARE_READ8_MEMBER( read ); + DECLARE_WRITE8_MEMBER( write ); + + DECLARE_READ8_MEMBER( status_port_r ); + DECLARE_READ8_MEMBER( read_port_r ); + DECLARE_WRITE8_MEMBER( control_port_w ); + DECLARE_WRITE8_MEMBER( write_port_w ); + + void _IRQHandler(int irq); + void _timer_handler(int c,attotime period); + void _y8950_update_request(); + unsigned char _Y8950PortHandler_r(); + void _Y8950PortHandler_w(unsigned char data); + unsigned char _Y8950KeyboardHandler_r(); + void _Y8950KeyboardHandler_w(unsigned char data); + protected: // device-level overrides virtual void device_config_complete(); @@ -39,17 +56,21 @@ protected: virtual void device_stop(); virtual void device_reset(); + virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); + // sound stream update overrides virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples); + private: // internal state - void *m_token; -public: - devcb_resolved_write_line m_handler; - devcb_resolved_read8 m_keyboardread; - devcb_resolved_write8 m_keyboardwrite; - devcb_resolved_read8 m_portread; - devcb_resolved_write8 m_portwrite; + sound_stream * m_stream; + emu_timer * m_timer[2]; + void * m_chip; + devcb2_write_line m_irq_handler; + devcb2_read8 m_keyboard_read_handler; + devcb2_write8 m_keyboard_write_handler; + devcb2_read8 m_io_read_handler; + devcb2_write8 m_io_write_handler; }; extern const device_type Y8950; |