summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author smf- <smf-@users.noreply.github.com>2012-10-07 12:04:20 +0000
committer smf- <smf-@users.noreply.github.com>2012-10-07 12:04:20 +0000
commita03e62136c8e1f1b60ea6e64d4b32e0bc4c7c5d7 (patch)
tree428d30ac6d2a5a9bad4d63002ab343fa529fd34d
parent2b322a3585ada05b7529925112fd6810ded0278e (diff)
changed rmnimbus to use DEVCB & added a callback for ACK. (nw)
-rw-r--r--src/emu/machine/scsibus.c4
-rw-r--r--src/emu/machine/scsicb.c1
-rw-r--r--src/emu/machine/scsicb.h4
-rw-r--r--src/mess/drivers/bullet.c2
-rw-r--r--src/mess/drivers/rmnimbus.c9
-rw-r--r--src/mess/drivers/v1050.c2
-rw-r--r--src/mess/includes/rmnimbus.h10
-rw-r--r--src/mess/machine/abc_hdc.c2
-rw-r--r--src/mess/machine/abc_xebec.c2
-rw-r--r--src/mess/machine/d9060.c2
-rw-r--r--src/mess/machine/e01.c2
-rw-r--r--src/mess/machine/lux4105.c2
-rw-r--r--src/mess/machine/rmnimbus.c60
13 files changed, 63 insertions, 39 deletions
diff --git a/src/emu/machine/scsibus.c b/src/emu/machine/scsibus.c
index 917d5278bc8..df0d526d213 100644
--- a/src/emu/machine/scsibus.c
+++ b/src/emu/machine/scsibus.c
@@ -491,9 +491,6 @@ void scsibus_device::scsi_out_line_change_now(UINT8 line, UINT8 state)
if(m_scsicb != NULL)
{
- if(m_scsicb->line_change_cb!=NULL)
- m_scsicb->line_change_cb(this, line,state);
-
switch (line)
{
case SCSI_LINE_BSY: m_scsicb->out_bsy_func(state); break;
@@ -502,6 +499,7 @@ void scsibus_device::scsi_out_line_change_now(UINT8 line, UINT8 state)
case SCSI_LINE_IO: m_scsicb->out_io_func(state); break;
case SCSI_LINE_MSG: m_scsicb->out_msg_func(state); break;
case SCSI_LINE_REQ: m_scsicb->out_req_func(state); break;
+ case SCSI_LINE_ACK: m_scsicb->out_ack_func(state); break;
case SCSI_LINE_RESET: m_scsicb->out_rst_func(state); break;
}
}
diff --git a/src/emu/machine/scsicb.c b/src/emu/machine/scsicb.c
index cf1bd938f33..ef0176b23d7 100644
--- a/src/emu/machine/scsicb.c
+++ b/src/emu/machine/scsicb.c
@@ -24,6 +24,7 @@ void scsicb_device::device_start()
out_io_func.resolve(_out_io_func, *this);
out_msg_func.resolve(_out_msg_func, *this);
out_req_func.resolve(_out_req_func, *this);
+ out_ack_func.resolve(_out_ack_func, *this);
out_rst_func.resolve(_out_rst_func, *this);
}
diff --git a/src/emu/machine/scsicb.h b/src/emu/machine/scsicb.h
index a8ef6c2118d..e9ce219b945 100644
--- a/src/emu/machine/scsicb.h
+++ b/src/emu/machine/scsicb.h
@@ -25,14 +25,13 @@
struct SCSICB_interface
{
- void (*line_change_cb)(device_t *, UINT8 line, UINT8 state);
-
devcb_write_line _out_bsy_func;
devcb_write_line _out_sel_func;
devcb_write_line _out_cd_func;
devcb_write_line _out_io_func;
devcb_write_line _out_msg_func;
devcb_write_line _out_req_func;
+ devcb_write_line _out_ack_func;
devcb_write_line _out_rst_func;
};
@@ -49,6 +48,7 @@ public:
devcb_resolved_write_line out_io_func;
devcb_resolved_write_line out_msg_func;
devcb_resolved_write_line out_req_func;
+ devcb_resolved_write_line out_ack_func;
devcb_resolved_write_line out_rst_func;
UINT8 scsi_data_r();
diff --git a/src/mess/drivers/bullet.c b/src/mess/drivers/bullet.c
index 9df93d29a08..9481ced2530 100644
--- a/src/mess/drivers/bullet.c
+++ b/src/mess/drivers/bullet.c
@@ -1040,13 +1040,13 @@ WRITE_LINE_MEMBER( bulletf_state::req_w )
static const SCSICB_interface scsi_intf =
{
- NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(bulletf_state, req_w),
+ DEVCB_NULL,
DEVCB_NULL
};
diff --git a/src/mess/drivers/rmnimbus.c b/src/mess/drivers/rmnimbus.c
index 99322ead502..f3caccf4847 100644
--- a/src/mess/drivers/rmnimbus.c
+++ b/src/mess/drivers/rmnimbus.c
@@ -86,7 +86,14 @@ static const msm5205_interface msm5205_config =
static const SCSICB_interface scsibus_config =
{
- &nimbus_scsi_linechange
+ DEVCB_DRIVER_LINE_MEMBER(rmnimbus_state, nimbus_scsi_bsy_w),
+ DEVCB_NULL,
+ DEVCB_DRIVER_LINE_MEMBER(rmnimbus_state, nimbus_scsi_cd_w),
+ DEVCB_DRIVER_LINE_MEMBER(rmnimbus_state, nimbus_scsi_io_w),
+ DEVCB_DRIVER_LINE_MEMBER(rmnimbus_state, nimbus_scsi_msg_w),
+ DEVCB_DRIVER_LINE_MEMBER(rmnimbus_state, nimbus_scsi_req_w),
+ DEVCB_NULL,
+ DEVCB_NULL
};
static const centronics_interface nimbus_centronics_config =
diff --git a/src/mess/drivers/v1050.c b/src/mess/drivers/v1050.c
index e2a0c7ba9b4..71468e32d72 100644
--- a/src/mess/drivers/v1050.c
+++ b/src/mess/drivers/v1050.c
@@ -986,7 +986,7 @@ static const floppy_interface v1050_floppy_interface =
static const SCSICB_interface sasi_intf =
{
- NULL,
+ DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
diff --git a/src/mess/includes/rmnimbus.h b/src/mess/includes/rmnimbus.h
index 482b99b2f3a..b8b72534208 100644
--- a/src/mess/includes/rmnimbus.h
+++ b/src/mess/includes/rmnimbus.h
@@ -264,8 +264,6 @@ extern const wd17xx_interface nimbus_wd17xx_interface;
/* SASI harddisk interface */
#define SCSIBUS_TAG "scsibus"
-void nimbus_scsi_linechange(device_t *device, UINT8 line, UINT8 state);
-
/* Masks for writes to port 0x400 */
#define FDC_DRIVE0_MASK 0x01
#define FDC_DRIVE1_MASK 0x02
@@ -305,7 +303,7 @@ void nimbus_scsi_linechange(device_t *device, UINT8 line, UINT8 state);
#define HDC_RESET_MASK 0x01
#define HDC_SEL_MASK 0x02
#define HDC_IRQ_MASK 0x04
-#define HDC_IRQ_ENABLED(state) ((state->m_nimbus_drives.reg410_out & HDC_IRQ_MASK) ? 1 : 0)
+#define HDC_IRQ_ENABLED() ((m_nimbus_drives.reg410_out & HDC_IRQ_MASK) ? 1 : 0)
#define SCSI_ID_NONE 0x80
@@ -463,4 +461,10 @@ public:
DECLARE_WRITE8_MEMBER(nimbus_via_write_portb);
DECLARE_WRITE_LINE_MEMBER(nimbus_via_irq_w);
DECLARE_WRITE_LINE_MEMBER(nimbus_ack_w);
+ DECLARE_WRITE_LINE_MEMBER(nimbus_scsi_bsy_w);
+ DECLARE_WRITE_LINE_MEMBER(nimbus_scsi_cd_w);
+ DECLARE_WRITE_LINE_MEMBER(nimbus_scsi_io_w);
+ DECLARE_WRITE_LINE_MEMBER(nimbus_scsi_msg_w);
+ DECLARE_WRITE_LINE_MEMBER(nimbus_scsi_req_w);
+ void nimbus_scsi_linechange( UINT8 mask, UINT8 state );
};
diff --git a/src/mess/machine/abc_hdc.c b/src/mess/machine/abc_hdc.c
index b87ed3808b4..c4f0905dd62 100644
--- a/src/mess/machine/abc_hdc.c
+++ b/src/mess/machine/abc_hdc.c
@@ -93,7 +93,7 @@ static const z80_daisy_config daisy_chain[] =
static const SCSICB_interface sasi_intf =
{
- NULL,
+ DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
diff --git a/src/mess/machine/abc_xebec.c b/src/mess/machine/abc_xebec.c
index 53e385a050a..ad06013376d 100644
--- a/src/mess/machine/abc_xebec.c
+++ b/src/mess/machine/abc_xebec.c
@@ -86,7 +86,7 @@ static const z80_daisy_config daisy_chain[] =
static const SCSICB_interface sasi_intf =
{
- NULL,
+ DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
diff --git a/src/mess/machine/d9060.c b/src/mess/machine/d9060.c
index ce2e9d0f409..fd99118e63d 100644
--- a/src/mess/machine/d9060.c
+++ b/src/mess/machine/d9060.c
@@ -148,13 +148,13 @@ WRITE_LINE_MEMBER( base_d9060_device::req_w )
static const SCSICB_interface sasi_intf =
{
- NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DEVICE_LINE_MEMBER("^^", base_d9060_device, req_w),
+ DEVCB_NULL,
DEVCB_NULL
};
diff --git a/src/mess/machine/e01.c b/src/mess/machine/e01.c
index 91ee7a87d07..93afd48e00e 100644
--- a/src/mess/machine/e01.c
+++ b/src/mess/machine/e01.c
@@ -285,13 +285,13 @@ WRITE_LINE_MEMBER( e01_device::scsi_req_w )
static const SCSICB_interface scsi_intf =
{
- NULL,
DEVCB_DEVICE_LINE_MEMBER("^^", e01_device, scsi_bsy_w),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DEVICE_LINE_MEMBER("^^", e01_device, scsi_req_w),
+ DEVCB_NULL,
DEVCB_NULL
};
diff --git a/src/mess/machine/lux4105.c b/src/mess/machine/lux4105.c
index c7bb5f50c9a..8a2c496f43c 100644
--- a/src/mess/machine/lux4105.c
+++ b/src/mess/machine/lux4105.c
@@ -66,13 +66,13 @@ WRITE_LINE_MEMBER( luxor_4105_device::sasi_req_w )
static const SCSICB_interface sasi_intf =
{
- NULL,
DEVCB_DEVICE_LINE_MEMBER("^^", luxor_4105_device, sasi_bsy_w),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DEVICE_LINE_MEMBER("^^", luxor_4105_device, sasi_io_w),
DEVCB_NULL,
DEVCB_DEVICE_LINE_MEMBER("^^", luxor_4105_device, sasi_req_w),
+ DEVCB_NULL,
DEVCB_NULL
};
diff --git a/src/mess/machine/rmnimbus.c b/src/mess/machine/rmnimbus.c
index 1d089dd00bf..ec922ecafa9 100644
--- a/src/mess/machine/rmnimbus.c
+++ b/src/mess/machine/rmnimbus.c
@@ -2456,47 +2456,61 @@ static void hdc_drq(running_machine &machine)
}
}
-void nimbus_scsi_linechange(device_t *device, UINT8 line, UINT8 state)
+WRITE_LINE_MEMBER( rmnimbus_state::nimbus_scsi_bsy_w )
{
- rmnimbus_state *drvstate = device->machine().driver_data<rmnimbus_state>();
- UINT8 mask = 0;
- UINT8 last = 0;
+ nimbus_scsi_linechange( HDC_BSY_MASK, state );
+}
- switch (line)
- {
- case SCSI_LINE_REQ : mask=HDC_REQ_MASK; break;
- case SCSI_LINE_CD : mask=HDC_CD_MASK; break;
- case SCSI_LINE_IO : mask=HDC_IO_MASK; break;
- case SCSI_LINE_BSY : mask=HDC_BSY_MASK; break;
- case SCSI_LINE_MSG : mask=HDC_MSG_MASK; break;
- }
+WRITE_LINE_MEMBER( rmnimbus_state::nimbus_scsi_cd_w )
+{
+ nimbus_scsi_linechange( HDC_CD_MASK, state );
+}
- last=drvstate->m_nimbus_drives.reg410_in & mask;
+WRITE_LINE_MEMBER( rmnimbus_state::nimbus_scsi_io_w )
+{
+ nimbus_scsi_linechange( HDC_IO_MASK, state );
+}
+
+WRITE_LINE_MEMBER( rmnimbus_state::nimbus_scsi_msg_w )
+{
+ nimbus_scsi_linechange( HDC_MSG_MASK, state );
+}
+
+WRITE_LINE_MEMBER( rmnimbus_state::nimbus_scsi_req_w )
+{
+ nimbus_scsi_linechange( HDC_REQ_MASK, state );
+}
+
+void rmnimbus_state::nimbus_scsi_linechange( UINT8 mask, UINT8 state )
+{
+ UINT8 last = 0;
+
+ last=m_nimbus_drives.reg410_in & mask;
if(state)
- drvstate->m_nimbus_drives.reg410_in|=mask;
+ m_nimbus_drives.reg410_in|=mask;
else
- drvstate->m_nimbus_drives.reg410_in&=~mask;
+ m_nimbus_drives.reg410_in&=~mask;
- if(HDC_IRQ_ENABLED(drvstate) && ((~drvstate->m_nimbus_drives.reg410_in & HDC_INT_TRIGGER)==HDC_INT_TRIGGER))
- set_disk_int(device->machine(),1);
+ if(HDC_IRQ_ENABLED() && ((~m_nimbus_drives.reg410_in & HDC_INT_TRIGGER)==HDC_INT_TRIGGER))
+ set_disk_int(machine(),1);
else
- set_disk_int(device->machine(),0);
+ set_disk_int(machine(),0);
- if(line==SCSI_LINE_REQ)
+ if( mask == HDC_REQ_MASK )
{
if (state==0)
{
- if(((drvstate->m_nimbus_drives.reg410_in & HDC_CD_MASK)==HDC_CD_MASK) && (last!=0))
+ if(((m_nimbus_drives.reg410_in & HDC_CD_MASK)==HDC_CD_MASK) && (last!=0))
{
- drvstate->m_nimbus_drives.drq_ff=1;
- hdc_drq(device->machine());
+ m_nimbus_drives.drq_ff=1;
+ hdc_drq(machine());
}
}
else
{
- drvstate->m_scsibus->scsi_ack_w(1);
+ m_scsibus->scsi_ack_w(1);
}
}
}