mirror of
https://github.com/holub/mame
synced 2025-05-23 06:08:48 +03:00
102 lines
2.9 KiB
C++
102 lines
2.9 KiB
C++
/*********************************************************************
|
|
|
|
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__ */
|