summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/bus/econet
diff options
context:
space:
mode:
author smf- <smf-@users.noreply.github.com>2014-04-14 11:50:39 +0000
committer smf- <smf-@users.noreply.github.com>2014-04-14 11:50:39 +0000
commita039e59ae2be4a92be8afae9018f481f2ff14f3e (patch)
tree280d142f4620c02e4a734f04a837485940841b18 /src/emu/bus/econet
parent51360b13702d031b1d1c764e044209d43f24a6a0 (diff)
SCSI Port using WRITELINE and DEVCB2. The slot number and SCSI ID are separate so you can for example have -harddisk1 as ID 6 and -harddisk 2 as ID 5. The HLE'd CD & HD have configuration switches to set the ID, real emulated hardware will specify the ID using it's own method. [smf]
Diffstat (limited to 'src/emu/bus/econet')
-rw-r--r--src/emu/bus/econet/e01.c90
-rw-r--r--src/emu/bus/econet/e01.h12
2 files changed, 44 insertions, 58 deletions
diff --git a/src/emu/bus/econet/e01.c b/src/emu/bus/econet/e01.c
index f5fed35d73b..be0b9ae7c32 100644
--- a/src/emu/bus/econet/e01.c
+++ b/src/emu/bus/econet/e01.c
@@ -55,9 +55,7 @@
*/
#include "e01.h"
-#include "machine/scsibus.h"
-#include "machine/scsicb.h"
-#include "machine/scsihd.h"
+#include "bus/scsi/scsihd.h"
@@ -206,17 +204,21 @@ WRITE_LINE_MEMBER( e01_device::fdc_drq_w )
WRITE_LINE_MEMBER( e01_device::scsi_bsy_w )
{
+ m_scsi_ctrl_in->write_bit1(state);
+
if (state)
{
- m_scsibus->scsi_sel_w(0);
+ m_scsibus->write_sel(0);
}
}
WRITE_LINE_MEMBER( e01_device::scsi_req_w )
{
+ m_scsi_ctrl_in->write_bit5(state);
+
if (!state)
{
- m_scsibus->scsi_ack_w(0);
+ m_scsibus->write_ack(0);
}
m_hdc_irq = !state;
@@ -240,7 +242,7 @@ static ADDRESS_MAP_START( e01_mem, AS_PROGRAM, 8, e01_device )
AM_RANGE(0xfc28, 0xfc28) AM_MIRROR(0x00c3) AM_READWRITE(network_irq_enable_r, network_irq_enable_w)
AM_RANGE(0xfc2c, 0xfc2c) AM_MIRROR(0x00c3) AM_READ_PORT("FLAP")
AM_RANGE(0xfc30, 0xfc30) AM_MIRROR(0x00c0) AM_READWRITE(hdc_data_r, hdc_data_w)
- AM_RANGE(0xfc31, 0xfc31) AM_MIRROR(0x00c0) AM_READ(hdc_status_r)
+ AM_RANGE(0xfc31, 0xfc31) AM_MIRROR(0x00c0) AM_DEVREAD("scsi_ctrl_in", input_buffer_device, read)
AM_RANGE(0xfc32, 0xfc32) AM_MIRROR(0x00c0) AM_WRITE(hdc_select_w)
AM_RANGE(0xfc33, 0xfc33) AM_MIRROR(0x00c0) AM_WRITE(hdc_irq_enable_w)
ADDRESS_MAP_END
@@ -275,11 +277,21 @@ static MACHINE_CONFIG_FRAGMENT( e01 )
MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
- MCFG_SCSIBUS_ADD(SCSIBUS_TAG)
- MCFG_SCSIDEV_ADD(SCSIBUS_TAG ":harddisk0", SCSIHD, SCSI_ID_0)
- MCFG_SCSICB_ADD(SCSIBUS_TAG ":host")
- MCFG_SCSICB_BSY_HANDLER(DEVWRITELINE(DEVICE_SELF_OWNER, e01_device, scsi_bsy_w))
- MCFG_SCSICB_REQ_HANDLER(DEVWRITELINE(DEVICE_SELF_OWNER, e01_device, scsi_req_w))
+ MCFG_DEVICE_ADD(SCSIBUS_TAG, SCSI_PORT, 0)
+ MCFG_SCSI_DATA_INPUT_BUFFER("scsi_data_in")
+ MCFG_SCSI_MSG_HANDLER(DEVWRITELINE("scsi_ctrl_in", input_buffer_device, write_bit0))
+ MCFG_SCSI_BSY_HANDLER(WRITELINE(e01_device, scsi_bsy_w)) // bit1
+ // bit 2 0
+ // bit 3 0
+ // bit 4 NIRQ
+ MCFG_SCSI_REQ_HANDLER(WRITELINE(e01_device, scsi_req_w)) // bit5
+ MCFG_SCSI_IO_HANDLER(DEVWRITELINE("scsi_ctrl_in", input_buffer_device, write_bit6))
+ MCFG_SCSI_CD_HANDLER(DEVWRITELINE("scsi_ctrl_in", input_buffer_device, write_bit7))
+ MCFG_SCSIDEV_ADD(SCSIBUS_TAG ":" SCSI_PORT_DEVICE1, "harddisk", SCSIHD, SCSI_ID_0)
+
+ MCFG_SCSI_OUTPUT_LATCH_ADD("scsi_data_out", SCSIBUS_TAG)
+ MCFG_DEVICE_ADD("scsi_data_in", INPUT_BUFFER, 0)
+ MCFG_DEVICE_ADD("scsi_ctrl_in", INPUT_BUFFER, 0)
// internal ram
MCFG_RAM_ADD(RAM_TAG)
@@ -384,7 +396,10 @@ e01_device::e01_device(const machine_config &mconfig, const char *tag, device_t
m_adlc(*this, MC6854_TAG),
m_rtc(*this, HD146818_TAG),
m_ram(*this, RAM_TAG),
- m_scsibus(*this, SCSIBUS_TAG ":host"),
+ m_scsibus(*this, SCSIBUS_TAG),
+ m_scsi_data_out(*this, "scsi_data_out"),
+ m_scsi_data_in(*this, "scsi_data_in"),
+ m_scsi_ctrl_in(*this, "scsi_ctrl_in"),
m_floppy0(*this, WD2793_TAG":0"),
m_floppy1(*this, WD2793_TAG":1"),
m_rom(*this, R65C102_TAG),
@@ -410,7 +425,10 @@ e01_device::e01_device(const machine_config &mconfig, device_type type, const ch
m_adlc(*this, MC6854_TAG),
m_rtc(*this, HD146818_TAG),
m_ram(*this, RAM_TAG),
- m_scsibus(*this, SCSIBUS_TAG ":host"),
+ m_scsibus(*this, SCSIBUS_TAG),
+ m_scsi_data_out(*this, "scsi_data_out"),
+ m_scsi_data_in(*this, "scsi_data_in"),
+ m_scsi_ctrl_in(*this, "scsi_ctrl_in"),
m_floppy0(*this, WD2793_TAG":0"),
m_floppy1(*this, WD2793_TAG":1"),
m_rom(*this, R65C102_TAG),
@@ -613,9 +631,9 @@ WRITE8_MEMBER( e01_device::network_irq_enable_w )
READ8_MEMBER( e01_device::hdc_data_r )
{
- UINT8 data = m_scsibus->scsi_data_r(space, 0);
+ UINT8 data = m_scsi_data_in->read();
- m_scsibus->scsi_ack_w(1);
+ m_scsibus->write_ack(1);
return data;
}
@@ -627,45 +645,9 @@ READ8_MEMBER( e01_device::hdc_data_r )
WRITE8_MEMBER( e01_device::hdc_data_w )
{
- m_scsibus->scsi_data_w(space, 0, data);
-
- m_scsibus->scsi_ack_w(1);
-}
-
-
-//-------------------------------------------------
-// hdc_status_r -
-//-------------------------------------------------
-
-READ8_MEMBER( e01_device::hdc_status_r )
-{
- /*
+ m_scsi_data_out->write(data);
- bit description
-
- 0 MSG
- 1 BSY
- 2 0
- 3 0
- 4 NIRQ
- 5 REQ
- 6 I/O
- 7 C/D
-
- */
-
- UINT8 data = 0;
-
- // SCSI bus
- data |= m_scsibus->scsi_msg_r();
- data |= m_scsibus->scsi_bsy_r() << 1;
- data |= m_scsibus->scsi_req_r() << 5;
- data |= m_scsibus->scsi_io_r() << 6;
- data |= m_scsibus->scsi_cd_r() << 7;
-
- // TODO NIRQ
-
- return data;
+ m_scsibus->write_ack(1);
}
@@ -675,7 +657,7 @@ READ8_MEMBER( e01_device::hdc_status_r )
WRITE8_MEMBER( e01_device::hdc_select_w )
{
- m_scsibus->scsi_sel_w(1);
+ m_scsibus->write_sel(1);
}
diff --git a/src/emu/bus/econet/e01.h b/src/emu/bus/econet/e01.h
index 98fa1306474..7d968b06408 100644
--- a/src/emu/bus/econet/e01.h
+++ b/src/emu/bus/econet/e01.h
@@ -14,15 +14,16 @@
#ifndef __E01__
#define __E01__
-#include "emu.h"
#include "econet.h"
+#include "bus/centronics/ctronics.h"
+#include "bus/scsi/scsi.h"
#include "cpu/m6502/m65c02.h"
#include "machine/6522via.h"
-#include "bus/centronics/ctronics.h"
+#include "machine/buffer.h"
+#include "machine/latch.h"
#include "machine/mc146818.h"
#include "machine/mc6854.h"
#include "machine/ram.h"
-#include "machine/scsicb.h"
#include "machine/wd_fdc.h"
class e01_device : public device_t,
@@ -86,7 +87,10 @@ protected:
required_device<mc6854_device> m_adlc;
required_device<mc146818_device> m_rtc;
required_device<ram_device> m_ram;
- required_device<scsicb_device> m_scsibus;
+ required_device<SCSI_PORT_DEVICE> m_scsibus;
+ required_device<output_latch_device> m_scsi_data_out;
+ required_device<input_buffer_device> m_scsi_data_in;
+ required_device<input_buffer_device> m_scsi_ctrl_in;
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
required_memory_region m_rom;