From c683bc7181861a24c3f561752e2f828bfe70eeff Mon Sep 17 00:00:00 2001 From: smf- Date: Sun, 7 Oct 2012 23:07:44 +0000 Subject: (MESS) Uses the IO line from the SASI bus to determine the direction of the SASI data port. This seems the most likely way the hardware works. [smf] --- src/mess/drivers/v1050.c | 26 ++++++++++++++++++++++++-- src/mess/includes/v1050.h | 6 ++++++ 2 files changed, 30 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/mess/drivers/v1050.c b/src/mess/drivers/v1050.c index 21662580d18..a502fa4b0ba 100644 --- a/src/mess/drivers/v1050.c +++ b/src/mess/drivers/v1050.c @@ -345,6 +345,28 @@ WRITE8_MEMBER( v1050_state::dvint_clr_w ) m_subcpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); } +WRITE8_MEMBER( v1050_state::sasi_data_w ) +{ + data_out = data; + + if( m_sasibus->scsi_io_r() != 0 ) + { + m_sasibus->scsi_data_w( data ); + } +} + +WRITE_LINE_MEMBER( v1050_state::sasi_io_w ) +{ + if( state != 0 ) + { + m_sasibus->scsi_data_w( data_out ); + } + else + { + m_sasibus->scsi_data_w( 0xff ); + } +} + READ8_MEMBER( v1050_state::sasi_status_r ) { /* @@ -447,7 +469,7 @@ static ADDRESS_MAP_START( v1050_io, AS_IO, 8, v1050_state ) AM_RANGE(0xb0, 0xb0) AM_READWRITE(dint_clr_r, dint_clr_w) AM_RANGE(0xc0, 0xc0) AM_WRITE(v1050_i8214_w) AM_RANGE(0xd0, 0xd0) AM_WRITE(bank_w) - AM_RANGE(0xe0, 0xe0) AM_DEVREADWRITE(SASIBUS_TAG ":host", scsicb_device, scsi_data_r, scsi_data_w) + AM_RANGE(0xe0, 0xe0) AM_WRITE(sasi_data_w) AM_DEVREAD(SASIBUS_TAG ":host", scsicb_device, scsi_data_r) AM_RANGE(0xe1, 0xe1) AM_READWRITE(sasi_status_r, sasi_ctrl_w) ADDRESS_MAP_END @@ -989,7 +1011,7 @@ static const SCSICB_interface sasi_intf = DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, - DEVCB_NULL, + DEVCB_DRIVER_LINE_MEMBER(v1050_state, sasi_io_w), DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, diff --git a/src/mess/includes/v1050.h b/src/mess/includes/v1050.h index 8166e9adcb4..90c008b74b2 100644 --- a/src/mess/includes/v1050.h +++ b/src/mess/includes/v1050.h @@ -128,6 +128,8 @@ public: DECLARE_READ8_MEMBER( videoram_r ); DECLARE_WRITE8_MEMBER( videoram_w ); DECLARE_WRITE_LINE_MEMBER( crtc_vs_w ); + DECLARE_WRITE8_MEMBER(sasi_data_w); + DECLARE_WRITE_LINE_MEMBER(sasi_io_w); DECLARE_READ8_MEMBER( sasi_status_r ); DECLARE_WRITE8_MEMBER( sasi_ctrl_w ); @@ -157,6 +159,10 @@ public: required_shared_ptr m_video_ram; // video RAM UINT8 *m_attr_ram; // attribute RAM UINT8 m_attr; // attribute latch + + // sasi state + UINT8 data_out; + TIMER_DEVICE_CALLBACK_MEMBER(v1050_keyboard_tick); TIMER_DEVICE_CALLBACK_MEMBER(sasi_ack_tick); TIMER_DEVICE_CALLBACK_MEMBER(sasi_rst_tick); -- cgit v1.2.3