30
30
// various hardware
31
31
#include " machine/mc68681.h"
32
32
#include " machine/mm58274c.h"
33
- // #include "machine/ncr5385.h"
33
+ #include " machine/ncr5385.h"
34
34
#include " machine/ns32081.h"
35
35
#include " machine/ns32082.h"
36
36
#include " machine/ns32202.h"
@@ -60,7 +60,7 @@ class icm3216_state : public driver_device
60
60
, m_duart(*this , " duart%u" , 0U )
61
61
, m_serial(*this , " serial%u" , 0U )
62
62
, m_iop(*this , " iop" )
63
- // , m_scsi(*this, "scsi:7:ncr5385")
63
+ , m_scsi(*this , " scsi:7:ncr5385" )
64
64
, m_led(*this , " led%u" , 1U )
65
65
, m_boot(*this , " boot" )
66
66
{
@@ -106,7 +106,7 @@ class icm3216_state : public driver_device
106
106
required_device_array<rs232_port_device, 4 > m_serial;
107
107
108
108
required_device<z80_device> m_iop;
109
- // required_device<ncr5385_device> m_scsi;
109
+ required_device<ncr5385_device> m_scsi;
110
110
111
111
output_finder<5 > m_led;
112
112
@@ -126,7 +126,9 @@ class icm3216_state : public driver_device
126
126
enum iop_status_mask : u8
127
127
{
128
128
IOP_IID = 0x07 , // subchannel interrupt ID
129
- IOP_IRS = 0x10 , // interrupt request set
129
+ IOP_IRS = 0x10 , // interrupt request
130
+ IOP_RST = 0x20 , // scsi reset
131
+ IOP_ABT = 0x40 , // scsi abort interrupt?
130
132
IOP_BSY = 0x80 , // busy
131
133
};
132
134
@@ -254,7 +256,7 @@ void icm3216_state::iop_mem_map(address_map &map)
254
256
// c015 write 0x08
255
257
// c017 write 0x00 (after read16?, clear BSY?)
256
258
257
- // map(0xc020, 0xc02f).m(m_scsi, FUNC(ncr5385_device::map));
259
+ map (0xc020 , 0xc02f ).m (m_scsi, FUNC (ncr5385_device::map));
258
260
}
259
261
260
262
void icm3216_state::iop_pio_map (address_map &map)
@@ -328,9 +330,6 @@ void icm3216_state::icm3216(machine_config &config)
328
330
NSCSI_CONNECTOR (config, " scsi:4" , scsi_devices, nullptr , false );
329
331
NSCSI_CONNECTOR (config, " scsi:5" , scsi_devices, nullptr , false );
330
332
NSCSI_CONNECTOR (config, " scsi:6" , scsi_devices, nullptr , false );
331
- #if 1
332
- NSCSI_CONNECTOR (config, " scsi:7" , scsi_devices, nullptr , false );
333
- #else
334
333
NSCSI_CONNECTOR (config, " scsi:7" ).option_set(" ncr5385" , NCR5385).machine_config(
335
334
[this ](device_t *device)
336
335
{
@@ -341,7 +340,6 @@ void icm3216_state::icm3216(machine_config &config)
341
340
ncr5385.irq ().set (*this , FUNC (icm3216_state::iop_int<2 >));
342
341
ncr5385.dreq ().set_inputline (m_iop, INPUT_LINE_NMI);
343
342
});
344
- #endif
345
343
}
346
344
347
345
void icm3216_state::parity_select_w (u8 data)
@@ -480,15 +478,22 @@ u8 icm3216_state::iop_r()
480
478
481
479
void icm3216_state::iop_w (u8 data)
482
480
{
481
+ /*
482
+ * cmd function
483
+ * 0x00 write command pointer table (followed by address, lsb first)
484
+ * 0x01 acknowledge interrupt
485
+ * 0x02 reset i/o controller?
486
+ * 0x03 scsi reset
487
+ * 0x05 reset i/o controller?
488
+ * 0x1n start i/o subchannel n
489
+ * 0x2n abort i/o subchannel n
490
+ */
483
491
LOG (" iop_w 0x%02x (%s)\n " , data, machine ().describe_context ());
484
492
m_iop_cmd = data;
485
493
486
- if (false )
487
- {
488
- m_iop_sts |= IOP_BSY;
494
+ m_iop_sts |= IOP_BSY;
489
495
490
- iop_int<1 >(1 );
491
- }
496
+ iop_int<1 >(1 );
492
497
}
493
498
494
499
// iop interrupt vector bits
0 commit comments