diff --git a/src/mess/drivers/ampro.c b/src/mess/drivers/ampro.c index a5f092eda72..b43e33c2fad 100644 --- a/src/mess/drivers/ampro.c +++ b/src/mess/drivers/ampro.c @@ -18,6 +18,7 @@ of a hard drive of up to 88MB. ToDo: - (maybe) add scsi interface - Add printer +- Restore serial comms when breakage gets fixed ****************************************************************************/ @@ -28,6 +29,7 @@ ToDo: #include "machine/z80dart.h" #include "machine/serial.h" #include "machine/wd_fdc.h" +#include "machine/terminal.h" class ampro_state : public driver_device @@ -40,6 +42,7 @@ public: , m_ctc (*this, "z80ctc") , m_fdc (*this, "fdc") , m_floppy0(*this, "fdc:0") + , m_terminal(*this, TERMINAL_TAG) { } DECLARE_DRIVER_INIT(ampro); @@ -49,12 +52,16 @@ public: DECLARE_WRITE8_MEMBER(port00_w); DECLARE_READ8_MEMBER(io_r); DECLARE_WRITE8_MEMBER(io_w); + DECLARE_WRITE8_MEMBER(kbd_put); private: + UINT8 m_term_data; + bool m_status; required_device m_maincpu; required_device m_dart; required_device m_ctc; required_device m_fdc; required_device m_floppy0; + required_device m_terminal; }; /* @@ -80,13 +87,38 @@ READ8_MEMBER( ampro_state::io_r ) if (offset < 0x40) return m_ctc->read(offset>>4); else - return m_dart->ba_cd_r(space, offset>>2); + if (offset == 0x44) + { + if ((m_status) || (m_term_data)) + return 5; else return 4; + } + else + if (offset == 0x40) + { + UINT8 ret = m_term_data; + m_term_data = 0; + return ret; + } + + return m_dart->ba_cd_r(space, offset>>2); } WRITE8_MEMBER( ampro_state::io_w ) { if (offset < 0x40) m_ctc->write(offset>>4, data); + else + if (offset == 0x44) + { + if (data==1) + m_status = 1; + } + else + if (offset == 0x40) + { + m_status = 0; + m_terminal->write(space, 0, data); + } else m_dart->ba_cd_w(space, offset>>2, data); } @@ -122,9 +154,9 @@ static Z80DART_INTERFACE( dart_intf ) { 0, 0, 0, 0, - DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, tx), - DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, dtr_w), - DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, rts_w), + DEVCB_NULL,//DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, tx), + DEVCB_NULL,//DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, dtr_w), + DEVCB_NULL,//DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, rts_w), DEVCB_NULL, DEVCB_NULL, @@ -187,6 +219,16 @@ DRIVER_INIT_MEMBER( ampro_state, ampro ) membank("bankw0")->configure_entry(0, &main[0x0000]); } +WRITE8_MEMBER( ampro_state::kbd_put ) +{ + m_term_data = data; +} + +static GENERIC_TERMINAL_INTERFACE( terminal_intf ) +{ + DEVCB_DRIVER_MEMBER(ampro_state, kbd_put) +}; + static MACHINE_CONFIG_START( ampro, ampro_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu",Z80, XTAL_16MHz / 4) @@ -198,8 +240,9 @@ static MACHINE_CONFIG_START( ampro, ampro_state ) /* Devices */ MCFG_Z80CTC_ADD( "z80ctc", XTAL_16MHz / 4, ctc_intf ) MCFG_Z80DART_ADD("z80dart", XTAL_16MHz / 4, dart_intf ) - MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "serial_terminal") - MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE("z80dart", z80dart_device, rxa_w)) + MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf) + //MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "serial_terminal") + //MCFG_SERIAL_OUT_RX_HANDLER(DEVWRITELINE("z80dart", z80dart_device, rxa_w)) MCFG_TIMER_DRIVER_ADD_PERIODIC("ctc_tick", ampro_state, ctc_tick, attotime::from_hz(XTAL_16MHz / 8)) MCFG_WD1772x_ADD("fdc", XTAL_16MHz / 2)