mirror of
https://github.com/holub/mame
synced 2025-07-02 16:49:22 +03:00
psi98: Hook up serial ports, mark driver as working
This commit is contained in:
parent
2db9dcd363
commit
2a4b6dd7db
@ -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 )
|
||||
|
Loading…
Reference in New Issue
Block a user