mame/src/emu/machine/ctronics.h
Miodrag Milanovic 97c3d0cb39 - removed need for *_dev.lst files [Miodrag Milanovic]
- 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
2012-02-23 14:19:37 +00:00

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__ */