diff options
author | 2012-10-07 12:04:20 +0000 | |
---|---|---|
committer | 2012-10-07 12:04:20 +0000 | |
commit | a03e62136c8e1f1b60ea6e64d4b32e0bc4c7c5d7 (patch) | |
tree | 428d30ac6d2a5a9bad4d63002ab343fa529fd34d | |
parent | 2b322a3585ada05b7529925112fd6810ded0278e (diff) |
changed rmnimbus to use DEVCB & added a callback for ACK. (nw)
-rw-r--r-- | src/emu/machine/scsibus.c | 4 | ||||
-rw-r--r-- | src/emu/machine/scsicb.c | 1 | ||||
-rw-r--r-- | src/emu/machine/scsicb.h | 4 | ||||
-rw-r--r-- | src/mess/drivers/bullet.c | 2 | ||||
-rw-r--r-- | src/mess/drivers/rmnimbus.c | 9 | ||||
-rw-r--r-- | src/mess/drivers/v1050.c | 2 | ||||
-rw-r--r-- | src/mess/includes/rmnimbus.h | 10 | ||||
-rw-r--r-- | src/mess/machine/abc_hdc.c | 2 | ||||
-rw-r--r-- | src/mess/machine/abc_xebec.c | 2 | ||||
-rw-r--r-- | src/mess/machine/d9060.c | 2 | ||||
-rw-r--r-- | src/mess/machine/e01.c | 2 | ||||
-rw-r--r-- | src/mess/machine/lux4105.c | 2 | ||||
-rw-r--r-- | src/mess/machine/rmnimbus.c | 60 |
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); } } } |