summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Nigel Barnes <ngbarnes@gmail.com>2024-10-14 21:31:53 +0100
committer Nigel Barnes <ngbarnes@gmail.com>2024-10-14 21:34:00 +0100
commit49ffc90914291058b8af769d6f9cac1833a0de7c (patch)
treecd8a9dcba1266f3ffb47f3278059d93dc2753a73
parentbf463c5d066719e5a1e6ce224484a087c3808afd (diff)
bus/psion/honda: Added PC Link and Parallel Printer Link cables (not working).
bus/psion/honda/ssd.cpp: Added Honda serial port. bus/psion/module: Added Psion RS232/Parallel Module.
-rw-r--r--scripts/src/bus.lua6
-rw-r--r--src/devices/bus/psion/honda/parallel.cpp67
-rw-r--r--src/devices/bus/psion/honda/parallel.h13
-rw-r--r--src/devices/bus/psion/honda/pclink.cpp50
-rw-r--r--src/devices/bus/psion/honda/pclink.h13
-rw-r--r--src/devices/bus/psion/honda/slot.cpp10
-rw-r--r--src/devices/bus/psion/honda/ssd.cpp85
-rw-r--r--src/devices/bus/psion/honda/ssd.h43
-rw-r--r--src/devices/bus/psion/module/serpar.cpp91
-rw-r--r--src/devices/bus/psion/module/serpar.h13
-rw-r--r--src/devices/bus/psion/module/slot.cpp7
-rw-r--r--src/devices/bus/psion/module/slot.h6
12 files changed, 312 insertions, 92 deletions
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua
index 6988e9202db..b20bbf3a135 100644
--- a/scripts/src/bus.lua
+++ b/scripts/src/bus.lua
@@ -2399,6 +2399,10 @@ if (BUSES["PSION_HONDA"]~=null) then
files {
MAME_DIR .. "src/devices/bus/psion/honda/slot.cpp",
MAME_DIR .. "src/devices/bus/psion/honda/slot.h",
+ MAME_DIR .. "src/devices/bus/psion/honda/parallel.cpp",
+ MAME_DIR .. "src/devices/bus/psion/honda/parallel.h",
+ MAME_DIR .. "src/devices/bus/psion/honda/pclink.cpp",
+ MAME_DIR .. "src/devices/bus/psion/honda/pclink.h",
MAME_DIR .. "src/devices/bus/psion/honda/ssd.cpp",
MAME_DIR .. "src/devices/bus/psion/honda/ssd.h",
}
@@ -2414,6 +2418,8 @@ if (BUSES["PSION_MODULE"]~=null) then
files {
MAME_DIR .. "src/devices/bus/psion/module/slot.cpp",
MAME_DIR .. "src/devices/bus/psion/module/slot.h",
+ MAME_DIR .. "src/devices/bus/psion/module/serpar.cpp",
+ MAME_DIR .. "src/devices/bus/psion/module/serpar.h",
}
end
diff --git a/src/devices/bus/psion/honda/parallel.cpp b/src/devices/bus/psion/honda/parallel.cpp
new file mode 100644
index 00000000000..417845f92c9
--- /dev/null
+++ b/src/devices/bus/psion/honda/parallel.cpp
@@ -0,0 +1,67 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Psion Parallel Printer Link cable
+
+ TODO:
+ - dump PIC internal ROM and hook up.
+
+**********************************************************************/
+
+#include "emu.h"
+#include "parallel.h"
+
+#include "bus/centronics/ctronics.h"
+#include "cpu/pic16c62x/pic16c62x.h"
+
+
+namespace {
+
+class psion_parallel_device : public device_t, public device_psion_honda_interface
+{
+public:
+ psion_parallel_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, PSION_PARALLEL, tag, owner, clock)
+ , device_psion_honda_interface(mconfig, *this)
+ {
+ }
+
+ static constexpr feature_type unemulated_features() { return feature::PRINTER; }
+
+protected:
+ virtual void device_start() override ATTR_COLD { }
+
+ virtual void device_add_mconfig(machine_config &config) override ATTR_COLD
+ {
+ PIC16C620(config, "mcu", 9.8304_MHz_XTAL).set_disable();
+
+ CENTRONICS(config, "centronics", centronics_devices, "printer");
+ }
+
+ virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD;
+};
+
+
+//-------------------------------------------------
+// ROM( psion_parallel )
+//-------------------------------------------------
+
+ROM_START(psion_parallel)
+ ROM_REGION(0x0400, "mcu", ROMREGION_ERASEFF)
+ ROM_LOAD("pic16c620.bin", 0x0000, 0x0400, NO_DUMP)
+ROM_END
+
+//-------------------------------------------------
+// rom_region - device-specific ROM region
+//-------------------------------------------------
+
+const tiny_rom_entry *psion_parallel_device::device_rom_region() const
+{
+ return ROM_NAME(psion_parallel);
+}
+
+} // anonymous namespace
+
+
+DEFINE_DEVICE_TYPE_PRIVATE(PSION_PARALLEL, device_psion_honda_interface, psion_parallel_device, "psion_parallel", "Psion Parallel Printer Link cable")
diff --git a/src/devices/bus/psion/honda/parallel.h b/src/devices/bus/psion/honda/parallel.h
new file mode 100644
index 00000000000..cb2596c3f49
--- /dev/null
+++ b/src/devices/bus/psion/honda/parallel.h
@@ -0,0 +1,13 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+#ifndef MAME_BUS_PSION_HONDA_PARALLEL_H
+#define MAME_BUS_PSION_HONDA_PARALLEL_H
+
+#pragma once
+
+#include "slot.h"
+
+
+DECLARE_DEVICE_TYPE(PSION_PARALLEL, device_psion_honda_interface)
+
+#endif // MAME_BUS_PSION_HONDA_PARALLEL_H
diff --git a/src/devices/bus/psion/honda/pclink.cpp b/src/devices/bus/psion/honda/pclink.cpp
new file mode 100644
index 00000000000..64943554015
--- /dev/null
+++ b/src/devices/bus/psion/honda/pclink.cpp
@@ -0,0 +1,50 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Psion PC Link cable
+
+**********************************************************************/
+
+#include "emu.h"
+#include "pclink.h"
+
+#include "bus/rs232/rs232.h"
+
+
+namespace {
+
+class psion_pclink_device : public device_t, public device_psion_honda_interface
+{
+public:
+ psion_pclink_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, PSION_PCLINK, tag, owner, clock)
+ , device_psion_honda_interface(mconfig, *this)
+ , m_rs232(*this, "rs232")
+ {
+ }
+
+protected:
+ virtual void device_start() override ATTR_COLD { }
+
+ virtual void device_add_mconfig(machine_config &config) override ATTR_COLD
+ {
+ RS232_PORT(config, m_rs232, default_rs232_devices, nullptr);
+ m_rs232->rxd_handler().set(DEVICE_SELF_OWNER, FUNC(psion_honda_slot_device::write_rxd));
+ m_rs232->dcd_handler().set(DEVICE_SELF_OWNER, FUNC(psion_honda_slot_device::write_dcd));
+ m_rs232->dsr_handler().set(DEVICE_SELF_OWNER, FUNC(psion_honda_slot_device::write_dsr));
+ m_rs232->cts_handler().set(DEVICE_SELF_OWNER, FUNC(psion_honda_slot_device::write_cts));
+ }
+
+ virtual void write_txd(int state) override { m_rs232->write_txd(state); }
+ virtual void write_dtr(int state) override { m_rs232->write_dtr(state); }
+ virtual void write_rts(int state) override { m_rs232->write_rts(state); }
+
+private:
+ required_device<rs232_port_device> m_rs232;
+};
+
+} // anonymous namespace
+
+
+DEFINE_DEVICE_TYPE_PRIVATE(PSION_PCLINK, device_psion_honda_interface, psion_pclink_device, "psion_pclink", "Psion PC Link cable")
diff --git a/src/devices/bus/psion/honda/pclink.h b/src/devices/bus/psion/honda/pclink.h
new file mode 100644
index 00000000000..2feb67a7f72
--- /dev/null
+++ b/src/devices/bus/psion/honda/pclink.h
@@ -0,0 +1,13 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+#ifndef MAME_BUS_PSION_HONDA_PCLINK_H
+#define MAME_BUS_PSION_HONDA_PCLINK_H
+
+#pragma once
+
+#include "slot.h"
+
+
+DECLARE_DEVICE_TYPE(PSION_PCLINK, device_psion_honda_interface)
+
+#endif // MAME_BUS_PSION_HONDA_PCLINK_H
diff --git a/src/devices/bus/psion/honda/slot.cpp b/src/devices/bus/psion/honda/slot.cpp
index 268fa9aadaf..b0f28309215 100644
--- a/src/devices/bus/psion/honda/slot.cpp
+++ b/src/devices/bus/psion/honda/slot.cpp
@@ -112,13 +112,15 @@ void psion_honda_slot_device::write_rts(int state)
//-------------------------------------------------
// slot devices
-//#include "parallel.h"
-//#include "pclink.h"
+//#include "cyclone.h"
+#include "parallel.h"
+#include "pclink.h"
#include "ssd.h"
void psion_honda_devices(device_slot_interface &device)
{
- //device.option_add("parallel", PSION_PARALLEL); // Psion Parallel Printer Link cable
- //device.option_add("pclink", PSION_PCLINK); // Psion PC Link cable
+ //device.option_add("cyclone", PSION_HONDA_CYCLONE); // Cyclone Floppy Drive (Honda)
+ device.option_add("parallel", PSION_PARALLEL); // Psion Parallel Printer Link cable
+ device.option_add("pclink", PSION_PCLINK); // Psion PC Link cable
device.option_add("ssd", PSION_SIENA_SSD); // Psion Siena SSD Drive
}
diff --git a/src/devices/bus/psion/honda/ssd.cpp b/src/devices/bus/psion/honda/ssd.cpp
index 4fe09fa8843..07571663d7d 100644
--- a/src/devices/bus/psion/honda/ssd.cpp
+++ b/src/devices/bus/psion/honda/ssd.cpp
@@ -8,49 +8,52 @@
#include "emu.h"
#include "ssd.h"
-#include "bus/rs232/rs232.h"
+#include "bus/psion/honda/slot.h"
+#include "machine/psion_ssd.h"
-//**************************************************************************
-// DEVICE DEFINITIONS
-//**************************************************************************
-DEFINE_DEVICE_TYPE(PSION_SIENA_SSD, psion_siena_ssd_device, "psion_siena_ssd", "Psion Siena SSD Drive")
+namespace {
-
-//-------------------------------------------------
-// device_add_mconfig - add device configuration
-//-------------------------------------------------
-
-void psion_siena_ssd_device::device_add_mconfig(machine_config &config)
-{
- PSION_SSD(config, m_ssd);
- m_ssd->door_cb().set(DEVICE_SELF_OWNER, FUNC(psion_honda_slot_device::write_sdoe));
-
- RS232_PORT(config, "rs232", default_rs232_devices, nullptr);
-}
-
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// psion_siena_ssd_device - constructor
-//-------------------------------------------------
-
-psion_siena_ssd_device::psion_siena_ssd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, PSION_SIENA_SSD, tag, owner, clock)
- , device_psion_honda_interface(mconfig, *this)
- , m_ssd(*this, "ssd")
-{
-}
-
-
-//-------------------------------------------------
-// device_start - device-specific startup
-//-------------------------------------------------
-
-void psion_siena_ssd_device::device_start()
+class psion_siena_ssd_device : public device_t, public device_psion_honda_interface
{
-}
+public:
+ psion_siena_ssd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, PSION_SIENA_SSD, tag, owner, clock)
+ , device_psion_honda_interface(mconfig, *this)
+ , m_ssd(*this, "ssd")
+ , m_honda(*this, "honda")
+ {
+ }
+
+protected:
+ virtual void device_start() override ATTR_COLD { }
+
+ virtual void device_add_mconfig(machine_config &config) override ATTR_COLD
+ {
+ PSION_SSD(config, m_ssd);
+ m_ssd->door_cb().set(DEVICE_SELF_OWNER, FUNC(psion_honda_slot_device::write_sdoe));
+
+ PSION_HONDA_SLOT(config, m_honda, psion_honda_devices, nullptr);
+ m_honda->rxd_handler().set(DEVICE_SELF_OWNER, FUNC(psion_honda_slot_device::write_rxd));
+ m_honda->dcd_handler().set(DEVICE_SELF_OWNER, FUNC(psion_honda_slot_device::write_dcd));
+ m_honda->dsr_handler().set(DEVICE_SELF_OWNER, FUNC(psion_honda_slot_device::write_dsr));
+ m_honda->cts_handler().set(DEVICE_SELF_OWNER, FUNC(psion_honda_slot_device::write_cts));
+ }
+
+ virtual uint8_t data_r() override { return m_ssd->data_r(); }
+ virtual void data_w(uint16_t data) override { m_ssd->data_w(data); }
+
+ virtual void write_txd(int state) override { m_honda->write_txd(state); }
+ virtual void write_dtr(int state) override { m_honda->write_dtr(state); }
+ virtual void write_rts(int state) override { m_honda->write_rts(state); }
+
+private:
+ required_device<psion_ssd_device> m_ssd;
+ required_device<psion_honda_slot_device> m_honda;
+};
+
+} // anonymous namespace
+
+
+DEFINE_DEVICE_TYPE_PRIVATE(PSION_SIENA_SSD, device_psion_honda_interface, psion_siena_ssd_device, "psion_siena_ssd", "Psion Siena SSD Drive")
diff --git a/src/devices/bus/psion/honda/ssd.h b/src/devices/bus/psion/honda/ssd.h
index 9302c544b10..d45b8eb07eb 100644
--- a/src/devices/bus/psion/honda/ssd.h
+++ b/src/devices/bus/psion/honda/ssd.h
@@ -1,51 +1,12 @@
// license:BSD-3-Clause
// copyright-holders:Nigel Barnes
-/**********************************************************************
-
- Psion Siena SSD Drive
-
-**********************************************************************/
-
#ifndef MAME_BUS_PSION_HONDA_SSD_H
#define MAME_BUS_PSION_HONDA_SSD_H
-#include "slot.h"
-#include "machine/psion_ssd.h"
-
-
-//**************************************************************************
-// TYPE DEFINITIONS
-//**************************************************************************
-
-// ======================> psion_siena_ssd_device
-
-class psion_siena_ssd_device :
- public device_t,
- public device_psion_honda_interface
-{
-public:
- // construction/destruction
- psion_siena_ssd_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
- static constexpr feature_type unemulated_features() { return feature::COMMS; }
-
-protected:
- // device_t overrides
- virtual void device_start() override ATTR_COLD;
-
- // optional information overrides
- virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
-
- virtual uint8_t data_r() override { return m_ssd->data_r(); }
- virtual void data_w(uint16_t data) override { m_ssd->data_w(data); }
-
-private:
- required_device<psion_ssd_device> m_ssd;
-};
+#include "slot.h"
-// device type definition
-DECLARE_DEVICE_TYPE(PSION_SIENA_SSD, psion_siena_ssd_device)
+DECLARE_DEVICE_TYPE(PSION_SIENA_SSD, device_psion_honda_interface)
#endif // MAME_BUS_PSION_HONDA_SSD_H
diff --git a/src/devices/bus/psion/module/serpar.cpp b/src/devices/bus/psion/module/serpar.cpp
new file mode 100644
index 00000000000..ff3cee82253
--- /dev/null
+++ b/src/devices/bus/psion/module/serpar.cpp
@@ -0,0 +1,91 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/**********************************************************************
+
+ Psion RS232/Parallel Module
+
+**********************************************************************/
+
+#include "emu.h"
+#include "serpar.h"
+
+#include "bus/centronics/ctronics.h"
+#include "bus/rs232/rs232.h"
+#include "machine/output_latch.h"
+#include "machine/psion_asic5.h"
+
+
+namespace {
+
+class psion_serial_parallel_device : public device_t, public device_psion_module_interface
+{
+public:
+ psion_serial_parallel_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, PSION_SERIAL_PARALLEL, tag, owner, clock)
+ , device_psion_module_interface(mconfig, *this)
+ , m_asic5(*this, "asic5")
+ , m_cent_ctrl_out(*this, "cent_ctrl_out")
+ {
+ }
+
+protected:
+ // device_t overrides
+ virtual void device_start() override ATTR_COLD { };
+ virtual void device_reset() override ATTR_COLD { m_cent_ctrl_out->write(0xff); };
+
+ // optional information overrides
+ virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
+
+ virtual uint8_t data_r() override { return m_asic5->data_r(); }
+ virtual void data_w(uint16_t data) override { m_asic5->data_w(data); }
+
+private:
+ required_device<psion_asic5_device> m_asic5;
+ required_device<output_latch_device> m_cent_ctrl_out;
+};
+
+
+//-------------------------------------------------
+// device_add_mconfig - add device configuration
+//-------------------------------------------------
+
+void psion_serial_parallel_device::device_add_mconfig(machine_config &config)
+{
+ PSION_ASIC5(config, m_asic5, 1'536'000).set_mode(psion_asic5_device::PERIPHERAL_MODE); // TODO: clock derived from host
+ m_asic5->set_info_byte(0x03); // RS232 + Parallel
+ m_asic5->readpa_handler().set("cent_status_in", FUNC(input_buffer_device::read));
+ m_asic5->writepb_handler().set("cent_data_out", FUNC(output_latch_device::write));
+ m_asic5->writepc_handler().set("cent_ctrl_out", FUNC(output_latch_device::write));
+ m_asic5->txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
+ m_asic5->rts_handler().set("rs232", FUNC(rs232_port_device::write_rts));
+ m_asic5->dtr_handler().set("rs232", FUNC(rs232_port_device::write_dtr));
+ m_asic5->int_handler().set(DEVICE_SELF_OWNER, FUNC(psion_module_slot_device::intr_w));
+
+ rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, nullptr));
+ rs232.rxd_handler().set(m_asic5, FUNC(psion_asic5_device::write_rxd));
+ rs232.dcd_handler().set(m_asic5, FUNC(psion_asic5_device::write_dcd));
+ rs232.dsr_handler().set(m_asic5, FUNC(psion_asic5_device::write_dsr));
+ rs232.cts_handler().set(m_asic5, FUNC(psion_asic5_device::write_cts));
+
+ centronics_device &centronics(CENTRONICS(config, "centronics", centronics_devices, "printer"));
+ centronics.busy_handler().set("cent_status_in", FUNC(input_buffer_device::write_bit4));
+ centronics.ack_handler().set("cent_status_in", FUNC(input_buffer_device::write_bit5));
+ centronics.fault_handler().set("cent_status_in", FUNC(input_buffer_device::write_bit6));
+ centronics.perror_handler().set("cent_status_in", FUNC(input_buffer_device::write_bit7));
+
+ output_latch_device &cent_data_out(OUTPUT_LATCH(config, "cent_data_out"));
+ centronics.set_output_latch(cent_data_out);
+
+ output_latch_device &cent_ctrl_out(OUTPUT_LATCH(config, "cent_ctrl_out"));
+ cent_ctrl_out.bit_handler<4>().set("centronics", FUNC(centronics_device::write_strobe));
+ cent_ctrl_out.bit_handler<5>().set("centronics", FUNC(centronics_device::write_init));
+ cent_ctrl_out.bit_handler<6>().set("centronics", FUNC(centronics_device::write_autofd));
+ cent_ctrl_out.bit_handler<7>().set("centronics", FUNC(centronics_device::write_select_in));
+
+ INPUT_BUFFER(config, "cent_status_in");
+}
+
+} // anonymous namespace
+
+
+DEFINE_DEVICE_TYPE_PRIVATE(PSION_SERIAL_PARALLEL, device_psion_module_interface, psion_serial_parallel_device, "psion_serpar", "Psion RS232/Parallel Module")
diff --git a/src/devices/bus/psion/module/serpar.h b/src/devices/bus/psion/module/serpar.h
new file mode 100644
index 00000000000..7c434d78230
--- /dev/null
+++ b/src/devices/bus/psion/module/serpar.h
@@ -0,0 +1,13 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+#ifndef MAME_BUS_PSION_MODULE_SERPAR_H
+#define MAME_BUS_PSION_MODULE_SERPAR_H
+
+#pragma once
+
+#include "slot.h"
+
+
+DECLARE_DEVICE_TYPE(PSION_SERIAL_PARALLEL, device_psion_module_interface)
+
+#endif // MAME_BUS_PSION_MODULE_SERPAR_H
diff --git a/src/devices/bus/psion/module/slot.cpp b/src/devices/bus/psion/module/slot.cpp
index 55107f8f3ac..1388110534d 100644
--- a/src/devices/bus/psion/module/slot.cpp
+++ b/src/devices/bus/psion/module/slot.cpp
@@ -45,8 +45,8 @@ device_psion_module_interface::device_psion_module_interface(const machine_confi
psion_module_slot_device::psion_module_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, PSION_MODULE_SLOT, tag, owner, clock)
, device_single_card_slot_interface<device_psion_module_interface>(mconfig, *this)
- , m_card(nullptr)
, m_intr_cb(*this)
+ , m_card(nullptr)
{
}
@@ -101,13 +101,14 @@ void psion_module_slot_device::io_w(offs_t offset, uint8_t data)
//-------------------------------------------------
// slot devices
-//#include "rs232parallel"
-//#include "rs232ttl"
+#include "serpar.h"
void psion_hcmodule_devices(device_slot_interface &device)
{
+ device.option_add("serpar", PSION_SERIAL_PARALLEL); // Psion RS232/Parallel Module
}
void psion_mcmodule_devices(device_slot_interface &device)
{
+ device.option_add("serpar", PSION_SERIAL_PARALLEL); // Psion RS232/Parallel Module
}
diff --git a/src/devices/bus/psion/module/slot.h b/src/devices/bus/psion/module/slot.h
index 66c427dfb94..93acbebdbca 100644
--- a/src/devices/bus/psion/module/slot.h
+++ b/src/devices/bus/psion/module/slot.h
@@ -78,13 +78,13 @@ public:
void intr_w(int state) { m_intr_cb(state); }
protected:
- // device-level overrides
+ // device_t overrides
virtual void device_start() override ATTR_COLD;
- device_psion_module_interface *m_card;
-
private:
devcb_write_line m_intr_cb;
+
+ device_psion_module_interface *m_card;
};