diff options
Diffstat (limited to 'src/mame/drivers/kdt6.cpp')
-rw-r--r-- | src/mame/drivers/kdt6.cpp | 68 |
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 ) |