summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/kdt6.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/kdt6.cpp')
-rw-r--r--src/mame/drivers/kdt6.cpp68
1 files changed, 65 insertions, 3 deletions
diff --git a/src/mame/drivers/kdt6.cpp b/src/mame/drivers/kdt6.cpp
index 5591e90506b..9ff08adca6f 100644
--- a/src/mame/drivers/kdt6.cpp
+++ b/src/mame/drivers/kdt6.cpp
@@ -25,6 +25,7 @@
#include "sound/spkrdev.h"
#include "bus/centronics/ctronics.h"
#include "bus/psi_kbd/psi_kbd.h"
+#include "bus/rs232/rs232.h"
#include "screen.h"
#include "speaker.h"
#include "softlist.h"
@@ -41,6 +42,7 @@ public:
driver_device(mconfig, type, tag),
m_cpu(*this, "maincpu"),
m_dma(*this, "dma"),
+ m_sio(*this, "sio"),
m_crtc(*this, "crtc"),
m_page_r(*this, "page%x_r", 0), m_page_w(*this, "page%x_w", 0),
m_boot(*this, "boot"),
@@ -53,6 +55,9 @@ public:
m_beeper(*this, "beeper"),
m_beep_timer(*this, "beep_timer"),
m_centronics(*this, "centronics"),
+ m_dip_s2(*this, "S2"),
+ m_keyboard(*this, "kbd"),
+ m_rs232b(*this, "rs232b"),
m_sasi_dma(false),
m_dma_map(0),
m_status0(0), m_status1(0), m_status2(0),
@@ -92,6 +97,9 @@ public:
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
DECLARE_WRITE8_MEMBER(pio_porta_w);
+ DECLARE_WRITE_LINE_MEMBER(keyboard_rx_w);
+ DECLARE_WRITE_LINE_MEMBER(rs232b_rx_w);
+ DECLARE_WRITE_LINE_MEMBER(siob_tx_w);
protected:
virtual void machine_start() override;
@@ -100,6 +108,7 @@ protected:
private:
required_device<z80_device> m_cpu;
required_device<z80dma_device> m_dma;
+ required_device<z80sio_device> m_sio;
required_device<mc6845_device> m_crtc;
required_memory_bank_array<16> m_page_r, m_page_w;
required_memory_region m_boot;
@@ -112,6 +121,9 @@ private:
required_device<beep_device> m_beeper;
required_device<timer_device> m_beep_timer;
required_device<centronics_device> m_centronics;
+ required_ioport m_dip_s2;
+ required_device<psi_keyboard_bus_device> m_keyboard;
+ required_device<rs232_port_device> m_rs232b;
std::unique_ptr<uint8_t[]> m_ram;
std::unique_ptr<uint16_t[]> m_vram; // 10-bit
@@ -190,6 +202,10 @@ ADDRESS_MAP_END
//**************************************************************************
INPUT_PORTS_START( psi98 )
+ PORT_START("S2")
+ PORT_DIPNAME(0x01, 0x01, "SIO B") PORT_DIPLOCATION("S2:1")
+ PORT_DIPSETTING(0x00, "RS232")
+ PORT_DIPSETTING(0x01, "Keyboard")
INPUT_PORTS_END
@@ -311,6 +327,35 @@ WRITE8_MEMBER( kdt6_state::pio_porta_w )
m_centronics->write_init(BIT(data, 1));
}
+WRITE_LINE_MEMBER( kdt6_state::keyboard_rx_w )
+{
+ if (machine().phase() >= machine_phase::RESET)
+ {
+ if ((m_dip_s2->read() & 0x01) == 0x01)
+ m_sio->rxb_w(state);
+ }
+}
+
+WRITE_LINE_MEMBER( kdt6_state::rs232b_rx_w )
+{
+ if (machine().phase() >= machine_phase::RESET)
+ {
+ if ((m_dip_s2->read() & 0x01) == 0x00)
+ m_sio->rxb_w(state);
+ }
+}
+
+WRITE_LINE_MEMBER( kdt6_state::siob_tx_w )
+{
+ if (machine().phase() >= machine_phase::RESET)
+ {
+ if ((m_dip_s2->read() & 0x01) == 0x01)
+ m_keyboard->tx_w(state);
+ else
+ m_rs232b->write_txd(state);
+ }
+}
+
//**************************************************************************
// MACHINE
@@ -598,7 +643,24 @@ static MACHINE_CONFIG_START( psi98 )
MCFG_Z80SIO_ADD("sio", XTAL_16MHz / 4, 0, 0, 0, 0)
MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
- MCFG_Z80SIO_OUT_TXDB_CB(DEVWRITELINE("kbd", psi_keyboard_bus_device, tx_w))
+ MCFG_Z80SIO_OUT_TXDA_CB(DEVWRITELINE("rs232a", rs232_port_device, write_txd))
+ MCFG_Z80SIO_OUT_DTRA_CB(DEVWRITELINE("rs232a", rs232_port_device, write_dtr))
+ MCFG_Z80SIO_OUT_RTSA_CB(DEVWRITELINE("rs232a", rs232_port_device, write_rts))
+ MCFG_Z80SIO_OUT_TXDB_CB(WRITELINE(kdt6_state, siob_tx_w))
+ MCFG_Z80SIO_OUT_DTRB_CB(DEVWRITELINE("rs232b", rs232_port_device, write_dtr))
+ MCFG_Z80SIO_OUT_RTSB_CB(DEVWRITELINE("rs232b", rs232_port_device, write_rts))
+
+ MCFG_RS232_PORT_ADD("rs232a", default_rs232_devices, nullptr)
+ MCFG_RS232_RXD_HANDLER(DEVWRITELINE("sio", z80sio_device, rxa_w))
+ MCFG_RS232_DCD_HANDLER(DEVWRITELINE("sio", z80sio_device, dcda_w))
+ MCFG_RS232_DSR_HANDLER(DEVWRITELINE("sio", z80sio_device, synca_w))
+ MCFG_RS232_CTS_HANDLER(DEVWRITELINE("sio", z80sio_device, ctsa_w)) MCFG_DEVCB_XOR(1)
+
+ MCFG_RS232_PORT_ADD("rs232b", default_rs232_devices, nullptr)
+ MCFG_RS232_RXD_HANDLER(WRITELINE(kdt6_state, rs232b_rx_w))
+ MCFG_RS232_DCD_HANDLER(DEVWRITELINE("sio", z80sio_device, dcdb_w))
+ MCFG_RS232_DSR_HANDLER(DEVWRITELINE("sio", z80sio_device, syncb_w))
+ MCFG_RS232_CTS_HANDLER(DEVWRITELINE("sio", z80sio_device, ctsb_w)) MCFG_DEVCB_XOR(1)
MCFG_DEVICE_ADD("pio", Z80PIO, XTAL_16MHz / 4)
MCFG_Z80PIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
@@ -627,7 +689,7 @@ static MACHINE_CONFIG_START( psi98 )
MCFG_SOFTWARE_LIST_ADD("floppy_list", "psi98")
MCFG_PSI_KEYBOARD_INTERFACE_ADD("kbd", "hle")
- MCFG_PSI_KEYBOARD_RX_HANDLER(DEVWRITELINE("sio", z80sio_device, rxb_w))
+ MCFG_PSI_KEYBOARD_RX_HANDLER(WRITELINE(kdt6_state, keyboard_rx_w))
MCFG_PSI_KEYBOARD_KEY_STROBE_HANDLER(DEVWRITELINE("ctc2", z80ctc_device, trg1))
// 6 ECB slots
@@ -663,4 +725,4 @@ ROM_END
//**************************************************************************
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1984, psi98, 0, 0, psi98, psi98, kdt6_state, 0, "Kontron", "PSI98", MACHINE_NOT_WORKING )
+COMP( 1984, psi98, 0, 0, psi98, psi98, kdt6_state, 0, "Kontron", "PSI98", 0 )