einstein: Fix centronics port

Printing now works.
master
Dirk Best 2017-11-09 23:55:56 +01:00
parent 32b0ea94de
commit 1c35fc11b7
1 changed files with 25 additions and 4 deletions

View File

@ -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<ram_device> m_ram;
required_device<ay8910_device> m_psg;
required_device<centronics_device> m_centronics;
required_device<timer_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)