summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/scsi/acb4070.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/scsi/acb4070.c')
-rw-r--r--src/devices/bus/scsi/acb4070.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/devices/bus/scsi/acb4070.c b/src/devices/bus/scsi/acb4070.c
new file mode 100644
index 00000000000..1503272b55c
--- /dev/null
+++ b/src/devices/bus/scsi/acb4070.c
@@ -0,0 +1,63 @@
+// license:BSD-3-Clause
+// copyright-holders:smf
+/*
+ * ACB4070 + RLL drive
+ *
+ */
+
+#include "acb4070.h"
+
+// device type definition
+const device_type ACB4070 = &device_creator<acb4070_device>;
+
+acb4070_device::acb4070_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : scsihd_device(mconfig, ACB4070, "ACB4070", tag, owner, clock, "acb4070", __FILE__)
+{
+}
+
+#define ACB4070_CMD_WRITE_DATA_BUFFER ( 0x13 )
+#define ACB4070_CMD_READ_DATA_BUFFER ( 0x14 )
+
+#define TRANSFERLENGTH_DATA_BUFFER 0x0400
+
+void acb4070_device::ExecCommand()
+{
+ switch( command[ 0 ] )
+ {
+ case ACB4070_CMD_WRITE_DATA_BUFFER:
+ m_phase = SCSI_PHASE_DATAOUT;
+ m_status_code = SCSI_STATUS_CODE_GOOD;
+ m_transfer_length = TRANSFERLENGTH_DATA_BUFFER;
+ break;
+
+ case ACB4070_CMD_READ_DATA_BUFFER:
+ m_phase = SCSI_PHASE_DATAIN;
+ m_status_code = SCSI_STATUS_CODE_GOOD;
+ m_transfer_length = TRANSFERLENGTH_DATA_BUFFER;
+ break;
+
+ case T10SPC_CMD_MODE_SELECT_6:
+ m_phase = SCSI_PHASE_DATAOUT;
+ m_status_code = SCSI_STATUS_CODE_GOOD;
+ m_transfer_length = SCSILengthFromUINT8( &command[ 4 ] );
+ break;
+
+ default:
+ scsihd_device::ExecCommand();
+ break;
+ }
+}
+
+void acb4070_device::WriteData( UINT8 *data, int dataLength )
+{
+ switch( command[ 0 ] )
+ {
+ case T10SPC_CMD_MODE_SELECT_6:
+ adaptec_sense_t *sense=(adaptec_sense_t *) data;
+ int tracks=(sense->cylinder_count[0]<<8)+sense->cylinder_count[1];
+ int capacity=(tracks * sense->head_count * 17);
+ logerror("Tracks=%d, Heads=%d sec/track=%d\n",tracks,sense->head_count,sense->sectors_per_track);
+ logerror("Setting disk capacity to %d blocks\n",capacity);
+ break;
+ }
+}