summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--scripts/src/machine.lua12
-rw-r--r--src/devices/machine/psion_condor.cpp278
-rw-r--r--src/devices/machine/psion_condor.h75
-rw-r--r--src/mame/psion/psion3.cpp6
-rw-r--r--src/mame/psion/psion3a.cpp43
-rw-r--r--src/mame/psion/psionhc.cpp14
-rw-r--r--src/mame/psion/siena.cpp28
-rw-r--r--src/mame/psion/workabout.cpp12
8 files changed, 416 insertions, 52 deletions
diff --git a/scripts/src/machine.lua b/scripts/src/machine.lua
index 53f71fad123..cae26f7e89f 100644
--- a/scripts/src/machine.lua
+++ b/scripts/src/machine.lua
@@ -2957,6 +2957,18 @@ end
---------------------------------------------------
--
+--@src/devices/machine/psion_condor.h,MACHINES["PSION_CONDOR"] = true
+---------------------------------------------------
+
+if (MACHINES["PSION_CONDOR"]~=null) then
+ files {
+ MAME_DIR .. "src/devices/machine/psion_condor.cpp",
+ MAME_DIR .. "src/devices/machine/psion_condor.h",
+ }
+end
+
+---------------------------------------------------
+--
--@src/devices/machine/psion_ssd.h,MACHINES["PSION_SSD"] = true
---------------------------------------------------
diff --git a/src/devices/machine/psion_condor.cpp b/src/devices/machine/psion_condor.cpp
new file mode 100644
index 00000000000..f9cc6d7d494
--- /dev/null
+++ b/src/devices/machine/psion_condor.cpp
@@ -0,0 +1,278 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/******************************************************************************
+
+ Psion Condor
+
+ The Condor chip was introduced with the Series 3c and Siena for serial
+ communications. The new chip enabled serial port speeds upto 57.6K baud on
+ the Series 3c (19.2K baud on the Siena)
+
+ This is a 64 pin package and pinout is unknown, so everything needs verifying
+ if a datasheet/specification is ever found.
+
+ TODO:
+ - everything, require datasheet/specification and 3c/Siena schematic for info.
+
+******************************************************************************/
+
+#include "emu.h"
+#include "psion_condor.h"
+
+#define VERBOSE 0
+//#define LOG_OUTPUT_FUNC osd_printf_info
+#include "logmacro.h"
+
+
+DEFINE_DEVICE_TYPE(PSION_CONDOR, psion_condor_device, "psion_condor", "Psion Condor")
+
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+psion_condor_device::psion_condor_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, PSION_CONDOR, tag, owner, clock)
+ , device_serial_interface(mconfig, *this)
+ , m_txd_handler(*this)
+ , m_rxc_handler(*this)
+ , m_rts_handler(*this)
+ , m_dtr_handler(*this)
+ , m_int_handler(*this)
+ , m_cts(1)
+ , m_dsr(1)
+ , m_ri(1)
+ , m_dcd(1)
+{
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void psion_condor_device::device_start()
+{
+ save_item(NAME(m_cts));
+ save_item(NAME(m_dsr));
+ save_item(NAME(m_ri));
+ save_item(NAME(m_dcd));
+ save_item(NAME(m_uart_divisor));
+ save_item(NAME(m_uart_line_control));
+ save_item(NAME(m_int_mask));
+ save_item(NAME(m_control1));
+ save_item(NAME(m_parallel_ddr));
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void psion_condor_device::device_reset()
+{
+ m_int_mask = 0x00;
+ m_control1 = 0x00;
+}
+
+
+//**************************************************************************
+// READ/WRITE HANDLERS
+//**************************************************************************
+
+uint8_t psion_condor_device::read(offs_t offset)
+{
+ uint8_t data = 0x00;
+
+ switch (offset & 0x0f)
+ {
+ case 0x00: // UARTReceiveBufferRegister
+ //receive_register_extract();
+ //data = get_received_char();
+ LOG("%s read: UARTReceiveBufferRegister => %02x\n", machine().describe_context(), data);
+ break;
+
+ case 0x01: // UARTInterruptEnableRegister
+ LOG("%s read: UARTInterruptEnableRegister => %02x\n", machine().describe_context(), data);
+ break;
+
+ case 0x02: // UARTInterruptIdentificRegister
+ // b0 ERBF
+ // b1 ETBEI - Enable Transmit Interrupts
+ // b2 ELSI
+ // b3 EDSSI - Enable Modem Status Interrupts
+ LOG("%s read: UARTInterruptIdentificRegister => %02x\n", machine().describe_context(), data);
+ break;
+
+ case 0x05: // UARTLineStatusRegister
+ // b5 THRE
+ // b6 TEMT - Transmitter Empty
+ data |= is_transmit_register_empty() ? 0x40 : 0x00;
+ LOG("%s read: UARTLineStatusRegister => %02x\n", machine().describe_context(), data);
+ break;
+
+ case 0x06: // UARTModemStatusRegister
+ // b4 CTSLine
+ // b5 DSRLine
+ // b6 RILine
+ // b7 DCDLine
+ data |= m_cts << 4;
+ data |= m_dsr << 5;
+ data |= m_ri << 6;
+ data |= m_dcd << 7;
+ LOG("%s read: UARTModemStatusRegister => %02x\n", machine().describe_context(), data);
+ break;
+
+ case 0x08: // FifoDataRegister
+ data = m_rx_fifo.dequeue();
+ LOG("%s read: FifoDataRegister => %02x\n", machine().describe_context(), data);
+ break;
+
+ case 0x0a: // ParallelDataRegister
+ // b7 HighPowerEnable
+ LOG("%s read: ParallelDataRegister => %02x\n", machine().describe_context(), data);
+ break;
+
+ case 0x0c: // InterruptStatusRegister
+ // b0 UINT
+ // b1 RHFINT - Receive Half Full
+ // b2 RTOINT
+ // b3 THEINT - Transmit Half Empty
+ // b4 MP1INT
+ // b5 MP2INT
+ LOG("%s read: InterruptStatusRegister => %02x\n", machine().describe_context(), data);
+ break;
+
+ case 0x0e: // StatusRegister
+ // b0 RXFE - Receive FIFO Empty
+ // b1 TXFE - Transmit FIFO Empty
+ // b2 RFERR
+ // b3 RFE - Receive Framing Error
+ // b4 RPE - Receive Parity Error
+ // b5 FOVR
+ // b6 PLOCK - Phase Locked Loop Locked
+ data |= m_rx_fifo.empty() ? 0x01 : 0x00;
+ data |= m_tx_fifo.empty() ? 0x02 : 0x00;
+ data |= is_receive_framing_error() ? 0x08 : 0x00;
+ data |= is_receive_parity_error() ? 0x10 : 0x00;
+ //LOG("%s read: StatusRegister => %02x\n", machine().describe_context(), data);
+ break;
+
+ default:
+ LOG("%s read: unknown register %02x => %02x\n", machine().describe_context(), offset, data);
+ break;
+ }
+
+ return data;
+}
+
+
+void psion_condor_device::write(offs_t offset, uint8_t data)
+{
+ switch (offset & 0x0f)
+ {
+ case 0x00: // UARTTransmitterHoldingRegister / UARTDivisorLatchLSB
+ if (BIT(m_uart_line_control, 7))
+ {
+ LOG("%s write: UARTDivisorLatchLSB <= %02x\n", machine().describe_context(), data);
+ m_uart_divisor = (m_uart_divisor & 0xff00) | data;
+ }
+ else
+ {
+ LOG("%s write: UARTTransmitterHoldingRegister <= %02x\n", machine().describe_context(), data);
+ //transmit_byte(data);
+ }
+ break;
+
+ case 0x01: // UARTInterruptEnableRegister / UARTDivisorLatchMSB
+ if (BIT(m_uart_line_control, 7))
+ {
+ LOG("%s write: UARTDivisorLatchMSB <= %02x\n", machine().describe_context(), data);
+ m_uart_divisor = (m_uart_divisor & 0x00ff) | (data << 8);
+ }
+ else
+ {
+ // b0 ERBF
+ // b1 ETBEI - Enable Transmit Interrupts
+ // b2 ELSI
+ // b3 EDSSI - Enable Modem Status Interrupts
+ LOG("%s write: UARTInterruptEnableRegister <= %02x\n", machine().describe_context(), data);
+ }
+ break;
+
+ case 0x03: // UARTLineControlRegister
+ // b2 - Select Two Stop Bits
+ // b7 DLAB - Divisor Latch
+ LOG("%s write: UARTLineControlRegister <= %02x\n", machine().describe_context(), data);
+ m_uart_line_control = data;
+ set_data_frame(1, 8, PARITY_NONE, BIT(data, 2) ? STOP_BITS_2 : STOP_BITS_1);
+ break;
+
+ case 0x04: // UARTModemControlRegister
+ // b0 DTRLine1
+ // b1 RTSLine1
+ // b2 DTRLine2
+ // b3 RTSLine2
+ // b4 LOOPBACK
+ m_dtr_handler(BIT(data, 0));
+ m_rts_handler(BIT(data, 1));
+ LOG("%s write: UARTModemControlRegister <= %02x\n", machine().describe_context(), data);
+ break;
+
+ case 0x07: // UARTScratchRegister
+ LOG("%s write: UARTScratchRegister <= %02x\n", machine().describe_context(), data);
+ break;
+
+ case 0x08: // FifoDataRegister
+ LOG("%s write: FifoDataRegister <= %02x\n", machine().describe_context(), data);
+ m_tx_fifo.enqueue(data);
+ break;
+
+ case 0x09: // ControlRegister1
+ // b0 TFCLR - Transmit FIFO Clear
+ // b1 RFCLR - Receive FIFO Clear
+ // b2
+ // b3 IRSD
+ // b4 ESEL1
+ // b5 ESEL2
+ // b6 CLKEN
+ // b7 PSRST
+ LOG("%s write: ControlRegister1 <= %02x\n", machine().describe_context(), data);
+ m_control1 = data;
+ if (BIT(data, 0)) m_tx_fifo.clear();
+ if (BIT(data, 1)) m_rx_fifo.clear();
+ break;
+
+ case 0x0a: // ParallelDataRegister
+ // b7 HighPowerEnable
+ LOG("%s write: ParallelDataRegister <= %02x\n", machine().describe_context(), data);
+ break;
+
+ case 0x0b: // ParallelDataDirectionRegister
+ LOG("%s write: ParallelDataDirectionRegister <= %02x\n", machine().describe_context(), data);
+ m_parallel_ddr = data;
+ break;
+
+ case 0x0d: // InterruptMaskAndMiscRegister
+ // b0 EUINT
+ // b1 ERHFINT
+ // b2 ERTOINT
+ // b3 ETHEINT
+ // b4 PLLBP
+ // b5 EMPINT
+ // b6 RS232PORT1
+ // b7 RS232PORT2
+ LOG("%s write: InterruptMaskAndMiscRegister <= %02x\n", machine().describe_context(), data);
+ m_int_mask = data;
+ break;
+
+ case 0x0f: // ControlRegister2
+ // b0 THECLR - Clear Transmit Interrupt
+ // b1 RHFCLR - Clear Receive Interrupt
+ LOG("%s write: ControlRegister2 <= %02x\n", machine().describe_context(), data);
+ break;
+
+ default:
+ LOG("%s write: unknown register %02x <= %02x\n", machine().describe_context(), offset, data);
+ break;
+ }
+}
diff --git a/src/devices/machine/psion_condor.h b/src/devices/machine/psion_condor.h
new file mode 100644
index 00000000000..f62ae91fa91
--- /dev/null
+++ b/src/devices/machine/psion_condor.h
@@ -0,0 +1,75 @@
+// license:BSD-3-Clause
+// copyright-holders:Nigel Barnes
+/******************************************************************************
+
+ Psion Condor
+
+******************************************************************************/
+
+#ifndef MAME_MACHINE_PSION_CONDOR_H
+#define MAME_MACHINE_PSION_CONDOR_H
+
+#pragma once
+
+#include "diserial.h"
+
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> psion_condor_device
+
+class psion_condor_device : public device_t, public device_serial_interface
+{
+public:
+ psion_condor_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+
+ static constexpr feature_type unemulated_features() { return feature::COMMS; }
+
+ auto txd_handler() { return m_txd_handler.bind(); }
+ auto rxc_handler() { return m_rxc_handler.bind(); }
+ auto rts_handler() { return m_rts_handler.bind(); }
+ auto dtr_handler() { return m_dtr_handler.bind(); }
+ auto int_handler() { return m_int_handler.bind(); }
+
+ void write_rxd(int state) { }
+ void write_cts(int state) { m_cts = state; }
+ void write_dsr(int state) { m_dsr = state; }
+ void write_dcd(int state) { m_dcd = state; }
+
+ uint8_t read(offs_t offset);
+ void write(offs_t offset, uint8_t data);
+
+protected:
+ // device_t overrides
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+private:
+ devcb_write_line m_txd_handler;
+ devcb_write_line m_rxc_handler;
+ devcb_write_line m_rts_handler;
+ devcb_write_line m_dtr_handler;
+ devcb_write_line m_int_handler;
+
+ util::fifo<uint8_t, 8> m_rx_fifo;
+ util::fifo<uint8_t, 8> m_tx_fifo;
+
+ int m_cts;
+ int m_dsr;
+ int m_ri;
+ int m_dcd;
+
+ uint16_t m_uart_divisor;
+ uint8_t m_uart_line_control;
+ uint8_t m_int_mask;
+ uint8_t m_control1;
+ uint8_t m_parallel_ddr;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(PSION_CONDOR, psion_condor_device)
+
+#endif // MAME_MACHINE_PSION_CONDOR_H
diff --git a/src/mame/psion/psion3.cpp b/src/mame/psion/psion3.cpp
index aecdcfafde9..00d9c1803bc 100644
--- a/src/mame/psion/psion3.cpp
+++ b/src/mame/psion/psion3.cpp
@@ -369,6 +369,6 @@ ROM_END
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1991, psion3, 0, 0, psion3, psion3, psion3_state, empty_init, "Psion", "Series 3", MACHINE_IMPERFECT_SOUND )
-COMP( 1992, pocketbk, psion3, 0, psion3s, pocketbk, psion3_state, empty_init, "Acorn Computers", "Pocket Book", MACHINE_IMPERFECT_SOUND )
-COMP( 1994, psion3s, psion3, 0, psion3s, psion3s, psion3_state, empty_init, "Psion", "Series 3s", MACHINE_IMPERFECT_SOUND )
+COMP( 1991, psion3, 0, 0, psion3, psion3, psion3_state, empty_init, "Psion", "Series 3", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
+COMP( 1992, pocketbk, psion3, 0, psion3s, pocketbk, psion3_state, empty_init, "Acorn Computers", "Pocket Book", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
+COMP( 1994, psion3s, psion3, 0, psion3s, psion3s, psion3_state, empty_init, "Psion", "Series 3s", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
diff --git a/src/mame/psion/psion3a.cpp b/src/mame/psion/psion3a.cpp
index 3129deb527b..089c91d4854 100644
--- a/src/mame/psion/psion3a.cpp
+++ b/src/mame/psion/psion3a.cpp
@@ -8,13 +8,16 @@
- sound devices, replace fake Psion Codec device with M7542 and M7702-03
- serial ports
- fix RAM detection for 3mx
+ - 3mx speed switch using CTRL+Diamond
+ - 3c/3mx backlight using Psion+Space
+ - 3c/3mx IrDA
******************************************************************************/
#include "emu.h"
#include "machine/nvram.h"
#include "machine/psion_asic9.h"
-//#include "machine/psion_condor.h"
+#include "machine/psion_condor.h"
#include "machine/psion_ssd.h"
#include "machine/ram.h"
#include "sound/spkrdev.h"
@@ -145,7 +148,7 @@ class psion3c_state : public psion3a_base_state
public:
psion3c_state(const machine_config &mconfig, device_type type, const char *tag)
: psion3a_base_state(mconfig, type, tag)
- //, m_condor(*this, "condor")
+ , m_condor(*this, "condor")
, m_honda(*this, "honda")
{ }
@@ -155,7 +158,7 @@ protected:
virtual void machine_reset() override;
private:
- //required_device<psion_condor_device> m_condor;
+ required_device<psion_condor_device> m_condor;
required_device<psion_honda_slot_device> m_honda;
};
@@ -181,7 +184,7 @@ void psion3a_base_state::machine_start()
void psion3c_state::machine_reset()
{
- //m_asic9->io_space().install_readwrite_handler(0x0100, 0x011f, read8sm_delegate(*m_condor, FUNC(psion_condor_device::read)), write8sm_delegate(*m_condor, FUNC(psion_condor_device::write)), 0x00ff);
+ m_asic9->io_space().install_readwrite_handler(0x0100, 0x011f, read8sm_delegate(*m_condor, FUNC(psion_condor_device::read)), write8sm_delegate(*m_condor, FUNC(psion_condor_device::write)), 0x00ff);
}
@@ -458,18 +461,18 @@ void psion3c_state::psion3c(machine_config &config)
PSION_S3A_CODEC(config, m_codec).add_route(ALL_OUTPUTS, "mono", 1.00); // TODO: M7702-03
m_asic9->pcm_out().set(m_codec, FUNC(psion3a_codec_device::pcm_in));
- //PSION_CONDOR(config, m_condor);
- //m_condor->txd_handler().set(m_honda, FUNC(psion_honda_slot_device::write_txd));
- //m_condor->rts_handler().set(m_honda, FUNC(psion_honda_slot_device::write_rts));
- //m_condor->dtr_handler().set(m_honda, FUNC(psion_honda_slot_device::write_dtr));
- //m_condor->int_handler().set(m_asic9, FUNC(psion_asic9_device::eint1_w));
+ PSION_CONDOR(config, m_condor);
+ m_condor->txd_handler().set(m_honda, FUNC(psion_honda_slot_device::write_txd));
+ m_condor->rts_handler().set(m_honda, FUNC(psion_honda_slot_device::write_rts));
+ m_condor->dtr_handler().set(m_honda, FUNC(psion_honda_slot_device::write_dtr));
+ m_condor->int_handler().set(m_asic9, FUNC(psion_asic9_device::eint1_w));
// Honda expansion port
PSION_HONDA_SLOT(config, m_honda, psion_honda_devices, nullptr);
- //m_honda->rxd_handler().set(m_condor, FUNC(psion_condor_device::write_rxd));
- //m_honda->dcd_handler().set(m_condor, FUNC(psion_condor_device::write_dcd));
- //m_honda->dsr_handler().set(m_condor, FUNC(psion_condor_device::write_dsr));
- //m_honda->cts_handler().set(m_condor, FUNC(psion_condor_device::write_cts));
+ m_honda->rxd_handler().set(m_condor, FUNC(psion_condor_device::write_rxd));
+ m_honda->dcd_handler().set(m_condor, FUNC(psion_condor_device::write_dcd));
+ m_honda->dsr_handler().set(m_condor, FUNC(psion_condor_device::write_dsr));
+ m_honda->cts_handler().set(m_condor, FUNC(psion_condor_device::write_cts));
m_honda->sdoe_handler().set(m_asic9, FUNC(psion_asic9_device::medchng_w)); // TODO: verify input line
m_asic9->data_r<4>().set(m_honda, FUNC(psion_honda_slot_device::data_r));
m_asic9->data_w<4>().set(m_honda, FUNC(psion_honda_slot_device::data_w));
@@ -548,10 +551,10 @@ ROM_END
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1993, psion3a, 0, 0, psion3a, psion3a, psion3a_state, empty_init, "Psion", "Series 3a", 0 )
-COMP( 1994, pocketbk2, psion3a, 0, psion3a, pocketbk2, psion3a_state, empty_init, "Acorn Computers", "Pocket Book II", 0 )
-COMP( 1995, psion3a2, psion3a, 0, psion3a2, psion3a, psion3a_state, empty_init, "Psion", "Series 3a (2M)", 0 )
-COMP( 1995, psion3a2_de, psion3a, 0, psion3a2, psion3a_de, psion3a_state, empty_init, "Psion", "Series 3a (2M) (German)", 0 )
-COMP( 1997, psion3a2_ru, psion3a, 0, psion3a2, psion3a, psion3a_state, empty_init, "Psion", "Series 3a (2M) (Russian)", 0 )
-COMP( 1996, psion3c, 0, 0, psion3c, psion3c, psion3c_state, empty_init, "Psion", "Series 3c", 0 )
-COMP( 1998, psion3mx, 0, 0, psion3mx, psion3c, psion3mx_state, empty_init, "Psion", "Series 3mx", 0 )
+COMP( 1993, psion3a, 0, 0, psion3a, psion3a, psion3a_state, empty_init, "Psion", "Series 3a", MACHINE_SUPPORTS_SAVE )
+COMP( 1994, pocketbk2, psion3a, 0, psion3a, pocketbk2, psion3a_state, empty_init, "Acorn Computers", "Pocket Book II", MACHINE_SUPPORTS_SAVE )
+COMP( 1995, psion3a2, psion3a, 0, psion3a2, psion3a, psion3a_state, empty_init, "Psion", "Series 3a (2M)", MACHINE_SUPPORTS_SAVE )
+COMP( 1995, psion3a2_de, psion3a, 0, psion3a2, psion3a_de, psion3a_state, empty_init, "Psion", "Series 3a (2M) (German)", MACHINE_SUPPORTS_SAVE )
+COMP( 1997, psion3a2_ru, psion3a, 0, psion3a2, psion3a, psion3a_state, empty_init, "Psion", "Series 3a (2M) (Russian)", MACHINE_SUPPORTS_SAVE )
+COMP( 1996, psion3c, 0, 0, psion3c, psion3c, psion3c_state, empty_init, "Psion", "Series 3c", MACHINE_SUPPORTS_SAVE )
+COMP( 1998, psion3mx, 0, 0, psion3mx, psion3c, psion3mx_state, empty_init, "Psion", "Series 3mx", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/psion/psionhc.cpp b/src/mame/psion/psionhc.cpp
index a12be5724d9..a842b7f957d 100644
--- a/src/mame/psion/psionhc.cpp
+++ b/src/mame/psion/psionhc.cpp
@@ -68,7 +68,7 @@ private:
required_ioport_array<8> m_keyboard;
required_device<speaker_sound_device> m_speaker;
required_device_array<psion_ssd_device, 2> m_ssd;
- required_device_array<psion_module_slot_device, 3> m_exp;
+ required_device_array<psion_module_slot_device, 2> m_exp;
void palette_init(palette_device &palette);
@@ -343,8 +343,8 @@ void psionhc_state::psionhc100(machine_config &config)
m_asic2->data_w<5>().set(m_exp[1], FUNC(psion_module_slot_device::data_w));
m_asic2->data_r<6>().set(m_exp[0], FUNC(psion_module_slot_device::data_r)); // Expansion port A
m_asic2->data_w<6>().set(m_exp[0], FUNC(psion_module_slot_device::data_w));
- m_asic2->data_r<7>().set(m_exp[2], FUNC(psion_module_slot_device::data_r)); // Expansion port C
- m_asic2->data_w<7>().set(m_exp[2], FUNC(psion_module_slot_device::data_w));
+ //m_asic2->data_r<7>().set(m_exp[2], FUNC(psion_module_slot_device::data_r));
+ //m_asic2->data_w<7>().set(m_exp[2], FUNC(psion_module_slot_device::data_w));
PSION_PSU_ASIC3(config, m_asic3);
@@ -360,8 +360,6 @@ void psionhc_state::psionhc100(machine_config &config)
m_exp[0]->intr_cb().set(m_asic1, FUNC(psion_asic1_device::eint2_w));
PSION_MODULE_SLOT(config, m_exp[1], psion_hcmodule_devices, nullptr);
m_exp[1]->intr_cb().set(m_asic1, FUNC(psion_asic1_device::eint1_w));
- PSION_MODULE_SLOT(config, m_exp[2], psion_hcmodule_devices, nullptr);
- m_exp[2]->intr_cb().set(m_asic1, FUNC(psion_asic1_device::eint3_w));
SOFTWARE_LIST(config, "ssd_list").set_original("psion_ssd").set_filter("HC");
}
@@ -403,6 +401,6 @@ ROM_END
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1991, psionhc100, psionhc120, 0, psionhc100, psionhc_uk, psionhc_state, empty_init, "Psion", "HC 100", 0 )
-COMP( 1991, psionhc110, psionhc120, 0, psionhc110, psionhc_uk, psionhc_state, empty_init, "Psion", "HC 110", 0 )
-COMP( 1991, psionhc120, 0, 0, psionhc120, psionhc_uk, psionhc_state, empty_init, "Psion", "HC 120", 0 )
+COMP( 1991, psionhc100, psionhc120, 0, psionhc100, psionhc_uk, psionhc_state, empty_init, "Psion", "HC 100", MACHINE_SUPPORTS_SAVE )
+COMP( 1991, psionhc110, psionhc120, 0, psionhc110, psionhc_uk, psionhc_state, empty_init, "Psion", "HC 110", MACHINE_SUPPORTS_SAVE )
+COMP( 1991, psionhc120, 0, 0, psionhc120, psionhc_uk, psionhc_state, empty_init, "Psion", "HC 120", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/psion/siena.cpp b/src/mame/psion/siena.cpp
index ebc6d2a3afb..668309f35f4 100644
--- a/src/mame/psion/siena.cpp
+++ b/src/mame/psion/siena.cpp
@@ -9,7 +9,7 @@
#include "emu.h"
#include "machine/nvram.h"
#include "machine/psion_asic9.h"
-//#include "machine/psion_condor.h"
+#include "machine/psion_condor.h"
#include "machine/ram.h"
#include "sound/spkrdev.h"
#include "bus/psion/honda/slot.h"
@@ -34,7 +34,7 @@ public:
, m_palette(*this, "palette")
, m_keyboard(*this, "COL%u", 0U)
, m_speaker(*this, "speaker")
- //, m_condor(*this, "condor")
+ , m_condor(*this, "condor")
, m_honda(*this, "honda")
{ }
@@ -53,7 +53,7 @@ private:
required_device<palette_device> m_palette;
required_ioport_array<8> m_keyboard;
required_device<speaker_sound_device> m_speaker;
- //required_device<psion_condor_device> m_condor;
+ required_device<psion_condor_device> m_condor;
required_device<psion_honda_slot_device> m_honda;
void palette_init(palette_device &palette);
@@ -71,7 +71,7 @@ void siena_state::machine_start()
void siena_state::machine_reset()
{
- //m_asic9->io_space().install_readwrite_handler(0x0100, 0x011f, read8sm_delegate(*m_condor, FUNC(psion_condor_device::read)), write8sm_delegate(*m_condor, FUNC(psion_condor_device::write)), 0x00ff);
+ m_asic9->io_space().install_readwrite_handler(0x0100, 0x011f, read8sm_delegate(*m_condor, FUNC(psion_condor_device::read)), write8sm_delegate(*m_condor, FUNC(psion_condor_device::write)), 0x00ff);
}
@@ -225,18 +225,18 @@ void siena_state::siena(machine_config &config)
RAM(config, m_ram).set_default_size("512K").set_extra_options("1M");
NVRAM(config, "nvram", nvram_device::DEFAULT_NONE);
- //PSION_CONDOR(config, m_condor);
- //m_condor->txd_handler().set(m_honda, FUNC(psion_honda_slot_device::write_txd));
- //m_condor->rts_handler().set(m_honda, FUNC(psion_honda_slot_device::write_rts));
- //m_condor->dtr_handler().set(m_honda, FUNC(psion_honda_slot_device::write_dtr));
- //m_condor->int_handler().set(m_asic9, FUNC(psion_asic9_device::eint1_w));
+ PSION_CONDOR(config, m_condor);
+ m_condor->txd_handler().set(m_honda, FUNC(psion_honda_slot_device::write_txd));
+ m_condor->rts_handler().set(m_honda, FUNC(psion_honda_slot_device::write_rts));
+ m_condor->dtr_handler().set(m_honda, FUNC(psion_honda_slot_device::write_dtr));
+ m_condor->int_handler().set(m_asic9, FUNC(psion_asic9_device::eint1_w));
// Honda expansion port
PSION_HONDA_SLOT(config, m_honda, psion_honda_devices, "ssd");
- //m_honda->rxd_handler().set(m_condor, FUNC(psion_condor_device::write_rxd));
- //m_honda->dcd_handler().set(m_condor, FUNC(psion_condor_device::write_dcd));
- //m_honda->dsr_handler().set(m_condor, FUNC(psion_condor_device::write_dsr));
- //m_honda->cts_handler().set(m_condor, FUNC(psion_condor_device::write_cts));
+ m_honda->rxd_handler().set(m_condor, FUNC(psion_condor_device::write_rxd));
+ m_honda->dcd_handler().set(m_condor, FUNC(psion_condor_device::write_dcd));
+ m_honda->dsr_handler().set(m_condor, FUNC(psion_condor_device::write_dsr));
+ m_honda->cts_handler().set(m_condor, FUNC(psion_condor_device::write_cts));
m_honda->sdoe_handler().set(m_asic9, FUNC(psion_asic9_device::medchng_w));
m_asic9->data_r<4>().set(m_honda, FUNC(psion_honda_slot_device::data_r));
m_asic9->data_w<4>().set(m_honda, FUNC(psion_honda_slot_device::data_w));
@@ -255,4 +255,4 @@ ROM_END
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1996, siena, 0, 0, siena, siena, siena_state, empty_init, "Psion", "Siena", 0 )
+COMP( 1996, siena, 0, 0, siena, siena, siena_state, empty_init, "Psion", "Siena", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/psion/workabout.cpp b/src/mame/psion/workabout.cpp
index 902829cbe10..e949320876d 100644
--- a/src/mame/psion/workabout.cpp
+++ b/src/mame/psion/workabout.cpp
@@ -38,7 +38,7 @@ public:
, m_keyboard(*this, "COL%u", 0U)
, m_speaker(*this, "speaker")
, m_ssd(*this, "ssd%u", 1U)
- //, m_exp(*this, "exp%u", 1U)
+ //, m_exp(*this, "exp")
{ }
void workabout(machine_config &config);
@@ -59,7 +59,7 @@ private:
required_ioport_array<8> m_keyboard;
required_device<speaker_sound_device> m_speaker;
required_device_array<psion_ssd_device, 2> m_ssd;
- //required_device_array<psion_exp_slot_device, 3> m_exp;
+ //required_device<psion_exp_slot_device> m_exp;
void palette_init(palette_device &palette);
@@ -229,9 +229,7 @@ void workabout_state::workabout(machine_config &config)
PSION_SSD(config, m_ssd[1]);
m_ssd[1]->door_cb().set(m_asic9, FUNC(psion_asic9_device::medchng_w));
- //PSION_EXP_SLOT(config, m_exp[0], psion_exp_devices, nullptr);
- //PSION_EXP_SLOT(config, m_exp[1], psion_exp_devices, nullptr);
- //PSION_EXP_SLOT(config, m_exp[2], psion_exp_devices, nullptr);
+ //PSION_EXP_SLOT(config, m_exp, psion_exp_devices, nullptr);
SOFTWARE_LIST(config, "ssd_list").set_original("psion_ssd").set_filter("WA");
}
@@ -275,5 +273,5 @@ ROM_END
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1995, psionwa, 0, 0, psionwa, workabout, workabout_state, empty_init, "Psion", "Workabout", 0 )
-COMP( 1998, psionwamx, 0, 0, psionwamx, workabout, workabout_state, empty_init, "Psion", "Workabout mx", 0 )
+COMP( 1995, psionwa, 0, 0, psionwa, workabout, workabout_state, empty_init, "Psion", "Workabout", MACHINE_SUPPORTS_SAVE )
+COMP( 1998, psionwamx, 0, 0, psionwamx, workabout, workabout_state, empty_init, "Psion", "Workabout mx", MACHINE_SUPPORTS_SAVE )