summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/bus/a8sio/a8sio.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/bus/a8sio/a8sio.h')
-rw-r--r--src/emu/bus/a8sio/a8sio.h141
1 files changed, 141 insertions, 0 deletions
diff --git a/src/emu/bus/a8sio/a8sio.h b/src/emu/bus/a8sio/a8sio.h
new file mode 100644
index 00000000000..ffe305ffd17
--- /dev/null
+++ b/src/emu/bus/a8sio/a8sio.h
@@ -0,0 +1,141 @@
+// 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