From 1c35fc11b7855b180ccfa74aba909832abca0ae8 Mon Sep 17 00:00:00 2001 From: Dirk Best Date: Thu, 9 Nov 2017 23:55:56 +0100 Subject: einstein: Fix centronics port Printing now works. --- src/mame/drivers/einstein.cpp | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/mame/drivers/einstein.cpp b/src/mame/drivers/einstein.cpp index 2b8e2a531ff..bc15d0a1835 100644 --- a/src/mame/drivers/einstein.cpp +++ b/src/mame/drivers/einstein.cpp @@ -23,6 +23,7 @@ #include "machine/clock.h" #include "machine/i8251.h" #include "machine/ram.h" +#include "machine/rescap.h" #include "machine/timer.h" #include "machine/wd_fdc.h" #include "machine/z80ctc.h" @@ -72,6 +73,7 @@ public: m_ram(*this, RAM_TAG), m_psg(*this, IC_I030), m_centronics(*this, "centronics"), + m_strobe_timer(*this, "strobe"), m_bios(*this, "bios"), m_bank1(*this, "bank1"), m_bank2(*this, "bank2"), @@ -101,6 +103,8 @@ public: DECLARE_WRITE_LINE_MEMBER(write_centronics_busy); DECLARE_WRITE_LINE_MEMBER(write_centronics_perror); DECLARE_WRITE_LINE_MEMBER(write_centronics_fault); + DECLARE_WRITE_LINE_MEMBER(ardy_w); + TIMER_DEVICE_CALLBACK_MEMBER(strobe_callback); protected: virtual void machine_start() override; @@ -118,6 +122,7 @@ private: required_device m_ram; required_device m_psg; required_device m_centronics; + required_device m_strobe_timer; required_memory_region m_bios; required_memory_bank m_bank1; required_memory_bank m_bank2; @@ -224,21 +229,35 @@ WRITE8_MEMBER(einstein_state::drsel_w) CENTRONICS ***************************************************************************/ -WRITE_LINE_MEMBER(einstein_state::write_centronics_busy) +WRITE_LINE_MEMBER( einstein_state::write_centronics_busy ) { m_centronics_busy = state; } -WRITE_LINE_MEMBER(einstein_state::write_centronics_perror) +WRITE_LINE_MEMBER( einstein_state::write_centronics_perror ) { m_centronics_perror = state; } -WRITE_LINE_MEMBER(einstein_state::write_centronics_fault) +WRITE_LINE_MEMBER( einstein_state::write_centronics_fault ) { m_centronics_fault = state; } +WRITE_LINE_MEMBER( einstein_state::ardy_w ) +{ + if (state) + { + m_centronics->write_strobe(1); + m_strobe_timer->adjust(attotime::from_double(TIME_OF_74LS123(RES_K(10), CAP_N(1)))); + } +} + +TIMER_DEVICE_CALLBACK_MEMBER( einstein_state::strobe_callback ) +{ + m_centronics->write_strobe(0); +} + /*************************************************************************** INTERRUPTS @@ -532,7 +551,7 @@ static MACHINE_CONFIG_START( einstein ) MCFG_DEVICE_ADD(IC_I063, Z80PIO, XTAL_X002 / 2) MCFG_Z80PIO_OUT_INT_CB(INPUTLINE(IC_I001, INPUT_LINE_IRQ0)) MCFG_Z80PIO_OUT_PA_CB(DEVWRITE8("cent_data_out", output_latch_device, write)) - MCFG_Z80PIO_OUT_ARDY_CB(DEVWRITELINE("centronics", centronics_device, write_strobe)) + MCFG_Z80PIO_OUT_ARDY_CB(WRITELINE(einstein_state, ardy_w)) MCFG_Z80PIO_IN_PB_CB(DEVREAD8("user", einstein_userport_device, read)) MCFG_Z80PIO_OUT_PB_CB(DEVWRITE8("user", einstein_userport_device, write)) MCFG_Z80PIO_OUT_BRDY_CB(DEVWRITELINE("user", einstein_userport_device, brdy_w)) @@ -583,6 +602,8 @@ static MACHINE_CONFIG_START( einstein ) MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics") + MCFG_TIMER_DRIVER_ADD("strobe", einstein_state, strobe_callback) + /* uart */ MCFG_DEVICE_ADD(IC_I060, I8251, 0) -- cgit v1.2.3