mirror of
https://github.com/holub/mame
synced 2025-10-04 16:34:53 +03:00

- enforced short names for slot card devices - updated validation, romverify and listxml output accordingly - slotoptions now also contain shortnames so it's possible to link slot option and device
166 lines
5.8 KiB
C++
166 lines
5.8 KiB
C++
/***************************************************************************
|
|
|
|
Centronics printer interface
|
|
|
|
***************************************************************************/
|
|
|
|
#ifndef __CTRONICS_H__
|
|
#define __CTRONICS_H__
|
|
|
|
#include "imagedev/printer.h"
|
|
|
|
/***************************************************************************
|
|
TYPE DEFINITIONS
|
|
***************************************************************************/
|
|
// ======================> device_centronics_peripheral_interface
|
|
|
|
class device_centronics_peripheral_interface : public device_slot_card_interface
|
|
{
|
|
public:
|
|
device_centronics_peripheral_interface(const machine_config &mconfig, device_t &device);
|
|
virtual ~device_centronics_peripheral_interface();
|
|
public:
|
|
virtual void write(UINT8 data) { m_data = data; }
|
|
virtual UINT8 read() { return m_data; }
|
|
|
|
virtual void strobe_w(UINT8 state) { m_strobe = state; }
|
|
virtual void init_prime_w(UINT8 state) { m_init = state; }
|
|
virtual void autofeed_w(UINT8 state) { m_auto_fd = state; }
|
|
|
|
virtual UINT8 ack_r() { return m_ack;}
|
|
virtual UINT8 busy_r(){ return m_busy; }
|
|
virtual UINT8 pe_r() { return m_pe;}
|
|
virtual UINT8 not_busy_r() { return !m_busy; }
|
|
virtual UINT8 vcc_r() { return TRUE; }
|
|
virtual UINT8 fault_r() { return m_fault; }
|
|
virtual void set_line(int line, int state) { if (state) m_data |= 1 << line; else m_data &= ~(1 << line); }
|
|
protected:
|
|
UINT8 m_strobe;
|
|
UINT8 m_busy;
|
|
UINT8 m_ack;
|
|
UINT8 m_auto_fd;
|
|
UINT8 m_pe;
|
|
UINT8 m_fault;
|
|
UINT8 m_init;
|
|
UINT8 m_data;
|
|
};
|
|
|
|
// ======================> centronics_interface
|
|
struct centronics_interface
|
|
{
|
|
devcb_write_line m_out_ack_cb;
|
|
devcb_write_line m_out_busy_cb;
|
|
devcb_write_line m_out_not_busy_cb;
|
|
};
|
|
|
|
// ======================> centronics_device
|
|
class centronics_device : public device_t,
|
|
public centronics_interface,
|
|
public device_slot_interface
|
|
{
|
|
public:
|
|
// construction/destruction
|
|
centronics_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
|
virtual ~centronics_device();
|
|
|
|
DECLARE_WRITE8_MEMBER( write ) { if (m_dev) m_dev->write(data); }
|
|
DECLARE_READ8_MEMBER( read ) { return (m_dev) ? m_dev->read() : 0x00; }
|
|
|
|
/* access to the individual bits */
|
|
DECLARE_WRITE_LINE_MEMBER( d0_w ) { if (m_dev) m_dev->set_line(0, state); }
|
|
DECLARE_WRITE_LINE_MEMBER( d1_w ) { if (m_dev) m_dev->set_line(1, state); }
|
|
DECLARE_WRITE_LINE_MEMBER( d2_w ) { if (m_dev) m_dev->set_line(2, state); }
|
|
DECLARE_WRITE_LINE_MEMBER( d3_w ) { if (m_dev) m_dev->set_line(3, state); }
|
|
DECLARE_WRITE_LINE_MEMBER( d4_w ) { if (m_dev) m_dev->set_line(4, state); }
|
|
DECLARE_WRITE_LINE_MEMBER( d5_w ) { if (m_dev) m_dev->set_line(5, state); }
|
|
DECLARE_WRITE_LINE_MEMBER( d6_w ) { if (m_dev) m_dev->set_line(6, state); }
|
|
DECLARE_WRITE_LINE_MEMBER( d7_w ) { if (m_dev) m_dev->set_line(7, state); }
|
|
|
|
DECLARE_WRITE_LINE_MEMBER( strobe_w ) { if (m_dev) m_dev->strobe_w(state); }
|
|
DECLARE_WRITE_LINE_MEMBER( init_prime_w ) { if (m_dev) m_dev->init_prime_w(state); }
|
|
DECLARE_WRITE_LINE_MEMBER( autofeed_w ) { if (m_dev) m_dev->autofeed_w(state); }
|
|
|
|
DECLARE_READ_LINE_MEMBER( ack_r ) { return (m_dev) ? m_dev->ack_r() : 0;}
|
|
DECLARE_READ_LINE_MEMBER( busy_r ){ return (m_dev) ? m_dev->busy_r() : 1; }
|
|
DECLARE_READ_LINE_MEMBER( pe_r ) { return (m_dev) ? m_dev->pe_r() : 0;}
|
|
DECLARE_READ_LINE_MEMBER( not_busy_r ) { return (m_dev) ? m_dev->not_busy_r() : 0; }
|
|
DECLARE_READ_LINE_MEMBER( vcc_r ) { return (m_dev) ? m_dev->vcc_r() : 0; }
|
|
DECLARE_READ_LINE_MEMBER( fault_r ) { return (m_dev) ? m_dev->fault_r() : 0; }
|
|
|
|
void out_ack(UINT8 param) { m_out_ack_func(param); }
|
|
void out_busy(UINT8 param) { m_out_busy_func(param); }
|
|
void out_not_busy(UINT8 param) { m_out_not_busy_func(param); }
|
|
|
|
protected:
|
|
// device-level overrides
|
|
virtual void device_config_complete();
|
|
virtual void device_start();
|
|
private:
|
|
device_centronics_peripheral_interface *m_dev;
|
|
|
|
devcb_resolved_write_line m_out_ack_func;
|
|
devcb_resolved_write_line m_out_busy_func;
|
|
devcb_resolved_write_line m_out_not_busy_func;
|
|
};
|
|
|
|
// device type definition
|
|
extern const device_type CENTRONICS;
|
|
|
|
// ======================> centronics_printer_device
|
|
|
|
class centronics_printer_device :
|
|
public device_t,
|
|
public device_centronics_peripheral_interface
|
|
{
|
|
public:
|
|
// construction/destruction
|
|
centronics_printer_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
|
|
|
// optional information overrides
|
|
virtual machine_config_constructor device_mconfig_additions() const;
|
|
// for printer
|
|
DECLARE_WRITE_LINE_MEMBER(printer_online);
|
|
|
|
void ack_callback(UINT8 param);
|
|
void busy_callback(UINT8 param);
|
|
|
|
// optional centronics overrides
|
|
virtual void strobe_w(UINT8 state);
|
|
virtual void init_prime_w(UINT8 state);
|
|
virtual UINT8 read() { return 0x00; }
|
|
protected:
|
|
// device-level overrides
|
|
virtual void device_start();
|
|
virtual void device_reset();
|
|
virtual void device_config_complete() { m_shortname = "centronics_printer"; }
|
|
private:
|
|
printer_image_device *m_printer;
|
|
centronics_device *m_owner;
|
|
};
|
|
// device type definition
|
|
extern const device_type CENTRONICS_PRINTER;
|
|
|
|
SLOT_INTERFACE_EXTERN(centronics_printer);
|
|
|
|
/***************************************************************************
|
|
DEVICE CONFIGURATION MACROS
|
|
***************************************************************************/
|
|
|
|
#define MCFG_CENTRONICS_ADD(_tag, _intf, _slot_intf, _def_slot, _def_inp) \
|
|
MCFG_DEVICE_ADD(_tag, CENTRONICS, 0) \
|
|
MCFG_DEVICE_CONFIG(_intf) \
|
|
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp) \
|
|
|
|
#define MCFG_CENTRONICS_PRINTER_ADD(_tag, _intf) \
|
|
MCFG_CENTRONICS_ADD(_tag, _intf, centronics_printer, "printer", NULL) \
|
|
|
|
|
|
/***************************************************************************
|
|
DEFAULT INTERFACES
|
|
***************************************************************************/
|
|
|
|
extern const centronics_interface standard_centronics;
|
|
|
|
|
|
#endif /* __CTRONICS_H__ */
|