summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--.gitattributes4
-rw-r--r--src/emu/bus/centronics/dsjoy.c48
-rw-r--r--src/emu/bus/centronics/dsjoy.h47
-rw-r--r--src/emu/bus/centronics/image.c140
-rw-r--r--src/emu/bus/centronics/image.h58
5 files changed, 297 insertions, 0 deletions
diff --git a/.gitattributes b/.gitattributes
index 779f21510c1..19aa0f03426 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -658,6 +658,10 @@ src/emu/bus/centronics/covox.c svneol=native#text/plain
src/emu/bus/centronics/covox.h svneol=native#text/plain
src/emu/bus/centronics/ctronics.c svneol=native#text/plain
src/emu/bus/centronics/ctronics.h svneol=native#text/plain
+src/emu/bus/centronics/dsjoy.c svneol=native#text/plain
+src/emu/bus/centronics/dsjoy.h svneol=native#text/plain
+src/emu/bus/centronics/image.c svneol=native#text/plain
+src/emu/bus/centronics/image.h svneol=native#text/plain
src/emu/bus/comx35/clm.c svneol=native#text/plain
src/emu/bus/comx35/clm.h svneol=native#text/plain
src/emu/bus/comx35/eprom.c svneol=native#text/plain
diff --git a/src/emu/bus/centronics/dsjoy.c b/src/emu/bus/centronics/dsjoy.c
new file mode 100644
index 00000000000..c8e77cad655
--- /dev/null
+++ b/src/emu/bus/centronics/dsjoy.c
@@ -0,0 +1,48 @@
+// license:MAME
+// copyright-holders:smf
+
+#include "dsjoy.h"
+
+const device_type DEMPA_SHINBUNSHA_JOYSTICK = &device_creator<dempa_shinbunsha_joystick_device>;
+
+dempa_shinbunsha_joystick_device::dempa_shinbunsha_joystick_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ device_t(mconfig, DEMPA_SHINBUNSHA_JOYSTICK, "Dempa Shinbunsha Joystick", tag, owner, clock, "dempa_shinbunsha_joystick", __FILE__),
+ device_centronics_peripheral_interface( mconfig, *this ),
+ m_lptjoy(*this, "lptjoy"),
+ m_data(0xff),
+ m_perror(1)
+{
+}
+
+void dempa_shinbunsha_joystick_device::device_start()
+{
+ save_item(NAME(m_data));
+ save_item(NAME(m_perror));
+}
+
+void dempa_shinbunsha_joystick_device::update_perror()
+{
+ int perror = (~m_data & ~m_lptjoy->read() & 0x3f) == 0;
+
+ if (m_perror != perror)
+ {
+ m_perror = perror;
+
+ output_perror(perror);
+ }
+}
+
+static INPUT_PORTS_START( dempa_shinbunsha_joystick )
+ PORT_START("lptjoy")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_NAME("LPT Joystick Right") PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT) PORT_NAME("LPT Joystick Left") PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_NAME("LPT Joystick Up") PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_NAME("LPT Joystick Down") PORT_8WAY PORT_PLAYER(1)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_NAME("LPT Joystick Button 2") PORT_PLAYER(1)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("LPT Joystick Button 1") PORT_PLAYER(1)
+INPUT_PORTS_END
+
+ioport_constructor dempa_shinbunsha_joystick_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( dempa_shinbunsha_joystick );
+}
diff --git a/src/emu/bus/centronics/dsjoy.h b/src/emu/bus/centronics/dsjoy.h
new file mode 100644
index 00000000000..72d02de9228
--- /dev/null
+++ b/src/emu/bus/centronics/dsjoy.h
@@ -0,0 +1,47 @@
+// license:MAME
+// copyright-holders:smf
+/***************************************************************************
+
+ Dempa Shinbunsha Joystick
+
+***************************************************************************/
+
+#ifndef __CENTRONICS_DSJOY_H__
+#define __CENTRONICS_DSJOY_H__
+
+#pragma once
+
+#include "ctronics.h"
+
+class dempa_shinbunsha_joystick_device : public device_t,
+ public device_centronics_peripheral_interface
+{
+public:
+ // construction/destruction
+ dempa_shinbunsha_joystick_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start();
+ virtual ioport_constructor device_input_ports() const;
+
+ virtual DECLARE_WRITE_LINE_MEMBER( input_data0 ) { if (state) m_data |= 0x01; else m_data &= ~0x01; update_perror(); }
+ virtual DECLARE_WRITE_LINE_MEMBER( input_data1 ) { if (state) m_data |= 0x02; else m_data &= ~0x02; update_perror(); }
+ virtual DECLARE_WRITE_LINE_MEMBER( input_data2 ) { if (state) m_data |= 0x04; else m_data &= ~0x04; update_perror(); }
+ virtual DECLARE_WRITE_LINE_MEMBER( input_data3 ) { if (state) m_data |= 0x08; else m_data &= ~0x08; update_perror(); }
+ virtual DECLARE_WRITE_LINE_MEMBER( input_data4 ) { if (state) m_data |= 0x10; else m_data &= ~0x10; update_perror(); }
+ virtual DECLARE_WRITE_LINE_MEMBER( input_data5 ) { if (state) m_data |= 0x20; else m_data &= ~0x20; update_perror(); }
+
+private:
+ required_ioport m_lptjoy;
+
+ void update_perror();
+
+ UINT8 m_data;
+ int m_perror;
+};
+
+// device type definition
+extern const device_type DEMPA_SHINBUNSHA_JOYSTICK;
+
+#endif
diff --git a/src/emu/bus/centronics/image.c b/src/emu/bus/centronics/image.c
new file mode 100644
index 00000000000..9005bcce212
--- /dev/null
+++ b/src/emu/bus/centronics/image.c
@@ -0,0 +1,140 @@
+#include "emu.h"
+#include "image.h"
+
+//**************************************************************************
+// CENTRONICS PRINTER DEVICE
+//**************************************************************************
+
+// device type definition
+const device_type CENTRONICS_PRINTER_IMAGE = &device_creator<centronics_printer_image_device>;
+
+/*****************************************************************************
+ PRINTER INTERFACE
+*****************************************************************************/
+const struct printer_interface centronics_printer_config =
+{
+ DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, centronics_printer_image_device, printer_online)
+};
+
+static MACHINE_CONFIG_FRAGMENT( centronics_printer )
+ MCFG_PRINTER_ADD("printer")
+ MCFG_DEVICE_CONFIG(centronics_printer_config)
+MACHINE_CONFIG_END
+
+
+/***************************************************************************
+ IMPLEMENTATION
+***************************************************************************/
+//-------------------------------------------------
+// centronics_printer_image_device - constructor
+//-------------------------------------------------
+
+centronics_printer_image_device::centronics_printer_image_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, CENTRONICS_PRINTER_IMAGE, "Centronics Printer", tag, owner, clock, "centronics_printer", __FILE__),
+ device_centronics_peripheral_interface( mconfig, *this )
+{
+}
+//-------------------------------------------------
+// machine_config_additions - device-specific
+// machine configurations
+//-------------------------------------------------
+
+machine_config_constructor centronics_printer_image_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( centronics_printer );
+}
+
+/*-------------------------------------------------
+ printer_online - callback that
+ sets us busy when the printer goes offline
+-------------------------------------------------*/
+
+WRITE_LINE_MEMBER(centronics_printer_image_device::printer_online)
+{
+ output_perror(!state);
+}
+
+void centronics_printer_image_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+{
+ switch (id)
+ {
+ case TIMER_ACK:
+ output_ack(param);
+
+ if (param == FALSE)
+ {
+ /* data is now ready, output it */
+ m_printer->output(m_data);
+
+ /* ready to receive more data, return BUSY to low */
+ timer_set(attotime::from_usec(7), TIMER_BUSY, FALSE);
+ }
+ break;
+
+ case TIMER_BUSY:
+ m_busy = param;
+ output_busy(m_busy);
+
+ if (param == TRUE)
+ {
+ /* timer to turn ACK low to receive data */
+ timer_set(attotime::from_usec(10), TIMER_ACK, FALSE);
+ }
+ else
+ {
+ /* timer to return ACK to high state */
+ timer_set(attotime::from_usec(5), TIMER_ACK, TRUE);
+ }
+ }
+}
+
+void centronics_printer_image_device::device_start()
+{
+ m_owner = dynamic_cast<centronics_device *>(owner());
+
+ /* get printer device */
+ m_printer = subdevice<printer_image_device>("printer");
+
+ /* register for state saving */
+ save_item(NAME(m_strobe));
+ save_item(NAME(m_data));
+ save_item(NAME(m_busy));
+}
+
+void centronics_printer_image_device::device_reset()
+{
+ m_busy = FALSE;
+ output_busy(m_busy);
+ output_fault(1);
+ output_ack(1);
+}
+
+/*-------------------------------------------------
+ centronics_strobe_w - signal that data is
+ ready
+-------------------------------------------------*/
+
+WRITE_LINE_MEMBER( centronics_printer_image_device::input_strobe )
+{
+ /* look for a high -> low transition */
+ if (m_strobe == TRUE && state == FALSE && m_busy == FALSE)
+ {
+ /* STROBE has gone low, data is ready */
+ timer_set(attotime::zero, TIMER_BUSY, TRUE);
+ }
+
+ m_strobe = state;
+}
+
+
+/*-------------------------------------------------
+ centronics_prime_w - initialize and reset
+ printer (centronics mode)
+-------------------------------------------------*/
+
+WRITE_LINE_MEMBER(centronics_printer_image_device::input_init)
+{
+ /* reset printer if line is low */
+ if (state == FALSE)
+ device_reset();
+}
diff --git a/src/emu/bus/centronics/image.h b/src/emu/bus/centronics/image.h
new file mode 100644
index 00000000000..0c6ab85abec
--- /dev/null
+++ b/src/emu/bus/centronics/image.h
@@ -0,0 +1,58 @@
+#pragma once
+
+#ifndef __CENTRONICS_PRINTER_H__
+#define __CENTRONICS_PRINTER_H__
+
+#include "ctronics.h"
+#include "imagedev/printer.h"
+
+// ======================> centronics_printer_image_device
+
+class centronics_printer_image_device : public device_t,
+ public device_centronics_peripheral_interface
+{
+public:
+ // construction/destruction
+ centronics_printer_image_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // optional information overrides
+ virtual machine_config_constructor device_mconfig_additions() const;
+
+ virtual DECLARE_WRITE_LINE_MEMBER( input_strobe );
+ virtual DECLARE_WRITE_LINE_MEMBER( input_data0 ) { if (state) m_data |= 0x01; else m_data &= ~0x01; }
+ virtual DECLARE_WRITE_LINE_MEMBER( input_data1 ) { if (state) m_data |= 0x02; else m_data &= ~0x02; }
+ virtual DECLARE_WRITE_LINE_MEMBER( input_data2 ) { if (state) m_data |= 0x04; else m_data &= ~0x04; }
+ virtual DECLARE_WRITE_LINE_MEMBER( input_data3 ) { if (state) m_data |= 0x08; else m_data &= ~0x08; }
+ virtual DECLARE_WRITE_LINE_MEMBER( input_data4 ) { if (state) m_data |= 0x10; else m_data &= ~0x10; }
+ virtual DECLARE_WRITE_LINE_MEMBER( input_data5 ) { if (state) m_data |= 0x20; else m_data &= ~0x20; }
+ virtual DECLARE_WRITE_LINE_MEMBER( input_data6 ) { if (state) m_data |= 0x40; else m_data &= ~0x40; }
+ virtual DECLARE_WRITE_LINE_MEMBER( input_data7 ) { if (state) m_data |= 0x80; else m_data &= ~0x80; }
+ virtual DECLARE_WRITE_LINE_MEMBER( input_init );
+
+ DECLARE_WRITE_LINE_MEMBER( printer_online );
+
+protected:
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
+
+private:
+
+ enum
+ {
+ TIMER_ACK,
+ TIMER_BUSY
+ };
+
+ int m_strobe;
+ UINT8 m_data;
+ int m_busy;
+
+ printer_image_device *m_printer;
+};
+
+// device type definition
+extern const device_type CENTRONICS_PRINTER_IMAGE;
+
+#endif