summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/machine/tms5501.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/machine/tms5501.h')
-rw-r--r--src/mess/machine/tms5501.h101
1 files changed, 101 insertions, 0 deletions
diff --git a/src/mess/machine/tms5501.h b/src/mess/machine/tms5501.h
new file mode 100644
index 00000000000..2ab13c9bd21
--- /dev/null
+++ b/src/mess/machine/tms5501.h
@@ -0,0 +1,101 @@
+/*********************************************************************
+
+ tms5501.h
+
+ TMS 5501 code
+
+*********************************************************************/
+
+#ifndef __TMS5501_H__
+#define __TMS5501_H__
+
+
+/***************************************************************************
+ DEVICE CONFIGURATION MACROS
+***************************************************************************/
+
+#define MCFG_TMS5501_ADD(_tag, _clock, _intrf) \
+ MCFG_DEVICE_ADD(_tag, TMS5501, _clock) \
+ MCFG_DEVICE_CONFIG(_intrf)
+
+#define TMS5501_INTERFACE(name) \
+ const tms5501_interface (name) =
+
+
+/***************************************************************************
+ TYPE DEFINITIONS
+***************************************************************************/
+
+typedef void (*tms5501_interrupt_cb)(device_t &device, int intreq, UINT8 vector);
+#define TMS5501_IRQ_CALLBACK(name) void name(device_t &device, int intreq, UINT8 vector)
+
+
+// ======================> tms5501_interface
+
+struct tms5501_interface
+{
+ devcb_read8 m_pio_read_cb; // PIO read
+ devcb_write8 m_pio_write_cb; // PIO write
+ tms5501_interrupt_cb m_interrupt_cb; // interrupt callback
+};
+
+// ======================> tms5501_device
+
+class tms5501_device : public device_t,
+ public tms5501_interface
+{
+public:
+ // construction/destruction
+ tms5501_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ DECLARE_READ8_MEMBER( read );
+ DECLARE_WRITE8_MEMBER( write );
+ DECLARE_WRITE_LINE_MEMBER( set_pio_bit_7 );
+ DECLARE_WRITE_LINE_MEMBER( set_sensor );
+
+protected:
+ // device-level overrides
+ virtual void device_config_complete();
+ virtual void device_start();
+ virtual void device_reset();
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
+
+public:
+ int find_first_bit(int value);
+ void field_interrupts();
+ void timer_decrementer(UINT8 mask);
+ void timer_reload(int timer);
+
+ static const device_timer_id TIMER_DECREMENTER = 0;
+
+ // internal registers
+ UINT8 m_status; // status register
+ UINT8 m_command; // command register, bits 1-5 are latched
+
+ UINT8 m_sio_rate; // SIO configuration register
+ UINT8 m_sio_input_buffer; // SIO input buffer
+ UINT8 m_sio_output_buffer; // SIO output buffer
+
+ UINT8 m_pio_input_buffer; // PIO input buffer
+ UINT8 m_pio_output_buffer; // PIO output buffer
+
+ UINT8 m_interrupt_mask; // interrupt mask register
+ UINT8 m_pending_interrupts; // pending interrupts register
+ UINT8 m_interrupt_address; // interrupt vector register
+
+ int m_sensor; // sensor input
+
+ // internal timers
+ UINT8 m_timer_counter[5];
+ emu_timer * m_timer[5];
+
+ // PIO callbacks
+ devcb_resolved_read8 m_pio_read_func;
+ devcb_resolved_write8 m_pio_write_func;
+};
+
+
+// device type definition
+extern const device_type TMS5501;
+
+#endif /* __TMS5501_H__ */