mirror of
https://github.com/holub/mame
synced 2025-10-06 00:54:22 +03:00
142 lines
4.2 KiB
C++
142 lines
4.2 KiB
C++
// license:BSD-3-Clause
|
|
// copyright-holders:Wilbert Pol
|
|
/***************************************************************************
|
|
|
|
a8sio.h - Atari 8 bit SIO bus interface
|
|
|
|
|
|
1 1
|
|
2 4 6 8 0 2
|
|
+-----------+
|
|
/ o o o o o o \
|
|
/ o o o o o o o \
|
|
+-----------------+
|
|
1 3 5 7 9 1 1
|
|
1 3
|
|
|
|
1 - clock in (to computer)
|
|
2 - clock out
|
|
3 - data in
|
|
4 - GND
|
|
5 - data out
|
|
6 - GND
|
|
7 - command (active low)
|
|
8 - motor
|
|
9 - proceed (active low)
|
|
10 - +5V/ready
|
|
11 - audio in
|
|
12 - +12V (A400/A800)
|
|
13 - interrupt (active low)
|
|
|
|
***************************************************************************/
|
|
|
|
#pragma once
|
|
|
|
#ifndef __A8SIO_H_
|
|
#define __A8SIO_H_
|
|
|
|
|
|
//**************************************************************************
|
|
// INTERFACE CONFIGURATION MACROS
|
|
//**************************************************************************
|
|
|
|
#define MCFG_A8SIO_SLOT_ADD(_nbtag, _tag, _def_slot) \
|
|
MCFG_DEVICE_ADD(_tag, A8SIO_SLOT, 0) \
|
|
MCFG_DEVICE_SLOT_INTERFACE(a8sio_cards, _def_slot, false) \
|
|
a8sio_slot_device::static_set_a8sio_slot(*device, _nbtag, _tag);
|
|
|
|
|
|
class a8sio_slot_device : public device_t,
|
|
public device_slot_interface
|
|
{
|
|
public:
|
|
// construction/destruction
|
|
a8sio_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
|
a8sio_slot_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
|
|
|
|
// device-level overrides
|
|
virtual void device_start();
|
|
|
|
// inline configuration
|
|
static void static_set_a8sio_slot(device_t &device, const char *tag, const char *slottag);
|
|
|
|
protected:
|
|
// configuration
|
|
const char *m_a8sio_tag;
|
|
const char *m_a8sio_slottag;
|
|
};
|
|
|
|
|
|
// device type definition
|
|
extern const device_type A8SIO_SLOT;
|
|
|
|
|
|
class device_a8sio_card_interface;
|
|
|
|
class a8sio_device : public device_t
|
|
{
|
|
public:
|
|
// construction/destruction
|
|
a8sio_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
|
a8sio_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
|
|
|
|
// inline configuration
|
|
template<class _Object> static devcb_base &set_clock_in_callback(device_t &device, _Object object) { return downcast<a8sio_device &>(device).m_out_clock_in_cb.set_callback(object); }
|
|
template<class _Object> static devcb_base &set_data_in_callback(device_t &device, _Object object) { return downcast<a8sio_device &>(device).m_out_data_in_cb.set_callback(object); }
|
|
template<class _Object> static devcb_base &set_audio_in_callback(device_t &device, _Object object) { return downcast<a8sio_device &>(device).m_out_audio_in_cb.set_callback(object); }
|
|
|
|
void add_a8sio_card(device_a8sio_card_interface *card);
|
|
device_a8sio_card_interface *get_a8sio_card();
|
|
|
|
DECLARE_WRITE_LINE_MEMBER( clock_in_w ); // pin 1
|
|
//virtual DECLARE_WRITE_LINE_MEMBER( clock_out_w ); // pin 2
|
|
DECLARE_WRITE_LINE_MEMBER( data_in_w ); // pin 3
|
|
//DECLARE_WRITE_LINE_MEMBER( data_out_wi ); // pin 5
|
|
//DECLARE_WRITE_LINE_MEMBER( command_w ); // pin 7
|
|
DECLARE_WRITE_LINE_MEMBER( motor_w ); // pin 8
|
|
//DECLARE_WRITE_LINE_MEMBER( proceed_w ); // pin 9
|
|
DECLARE_WRITE8_MEMBER( audio_in_w ); // pin 11
|
|
|
|
protected:
|
|
// device-level overrides
|
|
virtual void device_start();
|
|
virtual void device_reset();
|
|
|
|
devcb_write_line m_out_clock_in_cb; // pin 1
|
|
devcb_write_line m_out_data_in_cb; // pin 3
|
|
devcb_write8 m_out_audio_in_cb; // pin 11
|
|
|
|
device_a8sio_card_interface *m_device;
|
|
};
|
|
|
|
|
|
// device type definition
|
|
extern const device_type A8SIO;
|
|
|
|
|
|
class device_a8sio_card_interface : public device_slot_card_interface
|
|
{
|
|
friend class a8sio_device;
|
|
public:
|
|
// construction/destruction
|
|
device_a8sio_card_interface(const machine_config &mconfig, device_t &device);
|
|
virtual ~device_a8sio_card_interface();
|
|
|
|
void set_a8sio_device();
|
|
|
|
// inline configuration
|
|
static void static_set_a8sio_tag(device_t &device, const char *tag, const char *slottag);
|
|
|
|
virtual DECLARE_WRITE_LINE_MEMBER( motor_w );
|
|
|
|
public:
|
|
a8sio_device *m_a8sio;
|
|
const char *m_a8sio_tag;
|
|
const char *m_a8sio_slottag;
|
|
};
|
|
|
|
|
|
SLOT_INTERFACE_EXTERN(a8sio_cards);
|
|
|
|
#endif
|