summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/sound/8950intf.h
diff options
context:
space:
mode:
author smf- <smf-@users.noreply.github.com>2013-05-12 16:50:16 +0000
committer smf- <smf-@users.noreply.github.com>2013-05-12 16:50:16 +0000
commitbe76c99e9c8658100f17360b2686f15e9208f40b (patch)
tree35e4ec77e20f86958aed3a41c6286599621ae7b4 /src/emu/sound/8950intf.h
parent80d4b45679fbe4851633cbc7068162d01f04353a (diff)
modernised Y8950 [smf]
Diffstat (limited to 'src/emu/sound/8950intf.h')
-rw-r--r--src/emu/sound/8950intf.h75
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;