summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author goldnchild <48141308+goldnchild@users.noreply.github.com>2025-02-22 07:44:16 -0800
committer GitHub <noreply@github.com>2025-02-23 02:44:16 +1100
commit72daadc756865385c14e1502b5ec73ed7efe821a (patch)
tree474f2a427a1443ab32c4b790faea2fe168d67547
parent93b81fed4b31d9aa3b9e227cfdb83d5b7a066b44 (diff)
bus/centronics: Added a skeleton Epson RX-80 printer device to allow the CPU ROM to be debugged. (#13391)
-rw-r--r--scripts/src/bus.lua2
-rw-r--r--src/devices/bus/centronics/ctronics.cpp2
-rw-r--r--src/devices/bus/centronics/epson_rx80.cpp171
-rw-r--r--src/devices/bus/centronics/epson_rx80.h19
4 files changed, 194 insertions, 0 deletions
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua
index c28d003849a..5c4273ea593 100644
--- a/scripts/src/bus.lua
+++ b/scripts/src/bus.lua
@@ -3304,6 +3304,8 @@ if (BUSES["CENTRONICS"]~=null) then
MAME_DIR .. "src/devices/bus/centronics/epson_lx800.h",
MAME_DIR .. "src/devices/bus/centronics/epson_lx810l.cpp",
MAME_DIR .. "src/devices/bus/centronics/epson_lx810l.h",
+ MAME_DIR .. "src/devices/bus/centronics/epson_rx80.cpp",
+ MAME_DIR .. "src/devices/bus/centronics/epson_rx80.h",
MAME_DIR .. "src/devices/bus/centronics/nec_p72.cpp",
MAME_DIR .. "src/devices/bus/centronics/nec_p72.h",
MAME_DIR .. "src/devices/bus/centronics/nlq401.cpp",
diff --git a/src/devices/bus/centronics/ctronics.cpp b/src/devices/bus/centronics/ctronics.cpp
index 018b585d3ab..953ff945728 100644
--- a/src/devices/bus/centronics/ctronics.cpp
+++ b/src/devices/bus/centronics/ctronics.cpp
@@ -122,6 +122,7 @@ device_centronics_peripheral_interface::~device_centronics_peripheral_interface(
#include "epson_ex800.h"
#include "epson_lx800.h"
#include "epson_lx810l.h"
+#include "epson_rx80.h"
#include "nec_p72.h"
#include "printer.h"
#include "digiblst.h"
@@ -139,6 +140,7 @@ void centronics_devices(device_slot_interface &device)
device.option_add("lx800", EPSON_LX800);
device.option_add("lx810l", EPSON_LX810L);
device.option_add("ap2000", EPSON_AP2000);
+ device.option_add("rx80", EPSON_RX80);
device.option_add("p72", NEC_P72);
device.option_add("printer", CENTRONICS_PRINTER);
device.option_add("digiblst", CENTRONICS_DIGIBLASTER);
diff --git a/src/devices/bus/centronics/epson_rx80.cpp b/src/devices/bus/centronics/epson_rx80.cpp
new file mode 100644
index 00000000000..0dd75a00a04
--- /dev/null
+++ b/src/devices/bus/centronics/epson_rx80.cpp
@@ -0,0 +1,171 @@
+// license:BSD-3-Clause
+// copyright-holders:Golden Child
+/***************************************************************************
+
+ Epson RX-80 Dot Matrix printer (skeleton)
+
+ Main CPU is a UPD7810 running at 11 MHz.
+ 8K of mask ROM (marked EPSON M64200CA)
+ uses 256 bytes of ram inside upd7810, no external ram chips
+ has a limited line buffer of 137 bytes maximum from ff00 to ff88,
+ used for character buffer as well as during graphic print operation.
+ 137 bytes is approximate maximum line length during condensed print.
+
+*****************************************************************************/
+
+#include "emu.h"
+#include "epson_rx80.h"
+
+#include "cpu/upd7810/upd7810.h"
+
+
+namespace {
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+class epson_rx80_device : public device_t, public device_centronics_peripheral_interface
+{
+public:
+ // construction/destruction
+ epson_rx80_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ static constexpr feature_type unemulated_features() { return feature::PRINTER; }
+
+ /* Centronics stuff */
+ virtual void input_init(int state) override;
+ virtual void input_strobe(int state) override;
+ virtual void input_data0(int state) override { if (state) m_centronics_data |= 0x01; else m_centronics_data &= ~0x01; }
+ virtual void input_data1(int state) override { if (state) m_centronics_data |= 0x02; else m_centronics_data &= ~0x02; }
+ virtual void input_data2(int state) override { if (state) m_centronics_data |= 0x04; else m_centronics_data &= ~0x04; }
+ virtual void input_data3(int state) override { if (state) m_centronics_data |= 0x08; else m_centronics_data &= ~0x08; }
+ virtual void input_data4(int state) override { if (state) m_centronics_data |= 0x10; else m_centronics_data &= ~0x10; }
+ virtual void input_data5(int state) override { if (state) m_centronics_data |= 0x20; else m_centronics_data &= ~0x20; }
+ virtual void input_data6(int state) override { if (state) m_centronics_data |= 0x40; else m_centronics_data &= ~0x40; }
+ virtual void input_data7(int state) override { if (state) m_centronics_data |= 0x80; else m_centronics_data &= ~0x80; }
+
+protected:
+ virtual void device_start() override ATTR_COLD;
+ virtual void device_reset() override ATTR_COLD;
+
+ virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
+ virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
+ virtual ioport_constructor device_input_ports() const override ATTR_COLD;
+
+ virtual bool supports_pin35_5v() override { return true; }
+
+private:
+ uint8_t centronics_data_r(offs_t offset) { return m_centronics_data; };
+
+ void epson_rx80_mem(address_map &map) ATTR_COLD;
+
+ required_device<upd7810_device> m_maincpu;
+
+ uint8_t m_centronics_data;
+};
+
+//-------------------------------------------------
+// ROM( epson_rx80 )
+//-------------------------------------------------
+
+ROM_START( epson_rx80 )
+ ROM_REGION(0x2000, "maincpu", 0) // 8K rom for upd7810
+ ROM_LOAD("rx80_2764.bin", 0x0000, 0x2000, CRC(5206104a) SHA1(3e304f5331181aedb321d3db23a9387e3cfacf0c))
+ROM_END
+
+
+//-------------------------------------------------
+// rom_region - device-specific ROM region
+//-------------------------------------------------
+
+const tiny_rom_entry *epson_rx80_device::device_rom_region() const
+{
+ return ROM_NAME( epson_rx80 );
+}
+
+
+//-------------------------------------------------
+// ADDRESS_MAP( epson_rx80_mem )
+//-------------------------------------------------
+
+void epson_rx80_device::epson_rx80_mem(address_map &map)
+{
+ map(0x0000, 0x1fff).rom().region("maincpu", 0);
+ map(0xd800, 0xd800).r(FUNC(epson_rx80_device::centronics_data_r));
+}
+
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void epson_rx80_device::device_add_mconfig(machine_config &config)
+{
+ upd7810_device &upd(UPD7810(config, m_maincpu, 11000000)); // 11 Mhz
+ upd.set_addrmap(AS_PROGRAM, &epson_rx80_device::epson_rx80_mem);
+
+}
+
+
+//-------------------------------------------------
+// INPUT_PORTS( epson_rx80 )
+//-------------------------------------------------
+
+INPUT_PORTS_START( epson_rx80 )
+INPUT_PORTS_END
+
+
+//-------------------------------------------------
+// input_ports - device-specific input ports
+//-------------------------------------------------
+
+ioport_constructor epson_rx80_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( epson_rx80 );
+}
+
+
+//-------------------------------------------------
+// epson_rx80_device - constructor
+//-------------------------------------------------
+
+epson_rx80_device::epson_rx80_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ device_t(mconfig, EPSON_RX80, tag, owner, clock),
+ device_centronics_peripheral_interface(mconfig, *this),
+ m_maincpu(*this, "maincpu")
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void epson_rx80_device::device_start()
+{
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void epson_rx80_device::device_reset()
+{
+}
+
+/***************************************************************************
+ Centronics
+***************************************************************************/
+
+void epson_rx80_device::input_strobe(int state)
+{
+}
+
+void epson_rx80_device::input_init(int state)
+{
+}
+
+} // anonymous namespace
+
+// GLOBAL
+DEFINE_DEVICE_TYPE_PRIVATE(EPSON_RX80, device_centronics_peripheral_interface, epson_rx80_device, "epson_rx80", "Epson RX-80")
diff --git a/src/devices/bus/centronics/epson_rx80.h b/src/devices/bus/centronics/epson_rx80.h
new file mode 100644
index 00000000000..c47668a2934
--- /dev/null
+++ b/src/devices/bus/centronics/epson_rx80.h
@@ -0,0 +1,19 @@
+// license:BSD-3-Clause
+// copyright-holders:Golden Child
+/**********************************************************************
+
+ Epson RX-80 dot matrix printer emulation (skeleton)
+
+**********************************************************************/
+
+#ifndef MAME_BUS_CENTRONICS_EPSON_RX80_H
+#define MAME_BUS_CENTRONICS_EPSON_RX80_H
+
+#pragma once
+
+#include "ctronics.h"
+
+// device type declaration
+DECLARE_DEVICE_TYPE(EPSON_RX80, device_centronics_peripheral_interface)
+
+#endif // MAME_BUS_CENTRONICS_EPSON_RX80_H