diff options
Diffstat (limited to 'src/mess/machine/tms5501.h')
-rw-r--r-- | src/mess/machine/tms5501.h | 101 |
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__ */ |