mirror of
https://github.com/thewesker/RASCSI.git
synced 2025-12-20 20:31:24 -05:00
Workingish
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
#include "controllers/scsidev_ctrl.h"
|
||||
#include "gpiobus.h"
|
||||
#include "devices/scsi_host_bridge.h"
|
||||
#include "devices/scsi_nuvolink.h"
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
@@ -263,44 +264,44 @@ void FASTCALL SCSIDEV::Execute()
|
||||
#endif // RASCSI
|
||||
|
||||
// Process by command
|
||||
switch (ctrl.cmd[0]) {
|
||||
switch ((scsi_command)ctrl.cmd[0]) {
|
||||
// TEST UNIT READY
|
||||
case 0x00:
|
||||
case eCmdTestUnitReady:
|
||||
CmdTestUnitReady();
|
||||
return;
|
||||
|
||||
// REZERO
|
||||
case 0x01:
|
||||
case eCmdRezero:
|
||||
CmdRezero();
|
||||
return;
|
||||
|
||||
// REQUEST SENSE
|
||||
case 0x03:
|
||||
case eCmdRequestSense:
|
||||
CmdRequestSense();
|
||||
return;
|
||||
|
||||
// FORMAT UNIT
|
||||
case 0x04:
|
||||
case eCmdFormat:
|
||||
CmdFormat();
|
||||
return;
|
||||
|
||||
// REASSIGN BLOCKS
|
||||
case 0x07:
|
||||
case eCmdReassign:
|
||||
CmdReassign();
|
||||
return;
|
||||
|
||||
// READ(6)
|
||||
case 0x08:
|
||||
case eCmdRead6:
|
||||
CmdRead6();
|
||||
return;
|
||||
|
||||
// WRITE(6)
|
||||
case 0x0a:
|
||||
case eCmdWrite6:
|
||||
CmdWrite6();
|
||||
return;
|
||||
|
||||
// SEEK(6)
|
||||
case 0x0b:
|
||||
case eCmdSeek6:
|
||||
CmdSeek6();
|
||||
return;
|
||||
|
||||
@@ -310,116 +311,115 @@ void FASTCALL SCSIDEV::Execute()
|
||||
return;
|
||||
|
||||
// INQUIRY
|
||||
case 0x12:
|
||||
case eCmdInquiry:
|
||||
CmdInquiry();
|
||||
return;
|
||||
|
||||
// MODE SELECT
|
||||
case 0x15:
|
||||
case eCmdModeSelect:
|
||||
CmdModeSelect();
|
||||
return;
|
||||
|
||||
// MDOE SENSE
|
||||
case 0x1a:
|
||||
case eCmdModeSense:
|
||||
CmdModeSense();
|
||||
return;
|
||||
|
||||
// START STOP UNIT
|
||||
case 0x1b:
|
||||
case eCmdStartStop:
|
||||
CmdStartStop();
|
||||
return;
|
||||
|
||||
// SEND DIAGNOSTIC
|
||||
case 0x1d:
|
||||
case eCmdSendDiag:
|
||||
CmdSendDiag();
|
||||
return;
|
||||
|
||||
// PREVENT/ALLOW MEDIUM REMOVAL
|
||||
case 0x1e:
|
||||
case eCmdRemoval:
|
||||
CmdRemoval();
|
||||
return;
|
||||
|
||||
// READ CAPACITY
|
||||
case 0x25:
|
||||
case eCmdReadCapacity:
|
||||
CmdReadCapacity();
|
||||
return;
|
||||
|
||||
// READ(10)
|
||||
case 0x28:
|
||||
case eCmdRead10:
|
||||
CmdRead10();
|
||||
return;
|
||||
|
||||
// WRITE(10)
|
||||
case 0x2a:
|
||||
case eCmdWrite10:
|
||||
// WRITE and VERIFY(10)
|
||||
case eCmdWriteAndVerify10:
|
||||
CmdWrite10();
|
||||
return;
|
||||
|
||||
// SEEK(10)
|
||||
case 0x2b:
|
||||
case eCmdSeek10:
|
||||
CmdSeek10();
|
||||
return;
|
||||
|
||||
// WRITE and VERIFY
|
||||
case 0x2e:
|
||||
CmdWrite10();
|
||||
return;
|
||||
|
||||
// VERIFY
|
||||
case 0x2f:
|
||||
case eCmdVerify:
|
||||
CmdVerify();
|
||||
return;
|
||||
|
||||
// SYNCHRONIZE CACHE
|
||||
case 0x35:
|
||||
case eCmdSynchronizeCache:
|
||||
CmdSynchronizeCache();
|
||||
return;
|
||||
|
||||
// READ DEFECT DATA(10)
|
||||
case 0x37:
|
||||
case eCmdReadDefectData10:
|
||||
CmdReadDefectData10();
|
||||
return;
|
||||
|
||||
// READ TOC
|
||||
case 0x43:
|
||||
case eCmdReadToc:
|
||||
CmdReadToc();
|
||||
return;
|
||||
|
||||
// PLAY AUDIO(10)
|
||||
case 0x45:
|
||||
case eCmdPlayAudio10:
|
||||
CmdPlayAudio10();
|
||||
return;
|
||||
|
||||
// PLAY AUDIO MSF
|
||||
case 0x47:
|
||||
case eCmdPlayAudioMSF:
|
||||
CmdPlayAudioMSF();
|
||||
return;
|
||||
|
||||
// PLAY AUDIO TRACK
|
||||
case 0x48:
|
||||
case eCmdPlayAudioTrack:
|
||||
CmdPlayAudioTrack();
|
||||
return;
|
||||
|
||||
// MODE SELECT(10)
|
||||
case 0x55:
|
||||
case eCmdModeSelect10:
|
||||
CmdModeSelect10();
|
||||
return;
|
||||
|
||||
// MDOE SENSE(10)
|
||||
case 0x5a:
|
||||
case eCmdModeSense10:
|
||||
CmdModeSense10();
|
||||
return;
|
||||
|
||||
// SPECIFY (SASI only/Suppress warning when using SxSI)
|
||||
case 0xc2:
|
||||
case eCmdInvalid:
|
||||
CmdInvalid();
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
default:
|
||||
// No other support
|
||||
Log(Log::Normal, "Unsupported command received: $%02X", ctrl.cmd[0]);
|
||||
CmdInvalid();
|
||||
}
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
@@ -1390,7 +1390,9 @@ void FASTCALL SCSIDEV::CmdSendMessage10()
|
||||
}
|
||||
|
||||
// Error if not a host bridge
|
||||
if (ctrl.unit[lun]->GetID() != MAKEID('S', 'C', 'B', 'R')) {
|
||||
if ((ctrl.unit[lun]->GetID() != MAKEID('S', 'C', 'B', 'R')) &&
|
||||
(ctrl.unit[lun]->GetID() != MAKEID('S', 'C', 'N', 'L'))) {
|
||||
LOGERROR("Received CmdSendMessage10 for a non-bridge device");
|
||||
Error();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -38,6 +38,44 @@ public:
|
||||
BYTE msb[256];
|
||||
} scsi_t;
|
||||
|
||||
enum scsi_command : BYTE {
|
||||
eCmdTestUnitReady = 0x00,
|
||||
eCmdRezero = 0x01,
|
||||
eCmdResetStatistics = 0x02, // Nuvolink specific command
|
||||
eCmdRequestSense = 0x03,
|
||||
eCmdFormat = 0x04,
|
||||
eCmdSendPacket = 0x05, // Nuvolink specific command
|
||||
eCmdChangeMacAddr = 0x06, // Nuvolink specific command
|
||||
eCmdReassign = 0x07,
|
||||
eCmdRead6 = 0x08,
|
||||
eCmdSetMcastReg = 0x09, // Nuvolink specific command
|
||||
eCmdWrite6 = 0x0A,
|
||||
eCmdSeek6 = 0x0B,
|
||||
eCmdMediaSense = 0x0C, // Nuvolink specific command
|
||||
eCmdInquiry = 0x12,
|
||||
eCmdModeSelect = 0x15,
|
||||
eCmdModeSense = 0x1A,
|
||||
eCmdStartStop = 0x1B,
|
||||
eCmdRcvDiag = 0x1C,
|
||||
eCmdSendDiag = 0x1D,
|
||||
eCmdRemoval = 0x1E,
|
||||
eCmdReadCapacity = 0x25,
|
||||
eCmdRead10 = 0x28,
|
||||
eCmdWrite10 = 0x2A,
|
||||
eCmdSeek10 = 0x2B,
|
||||
eCmdWriteAndVerify10 = 0x2E,
|
||||
eCmdVerify = 0x2F,
|
||||
eCmdSynchronizeCache = 0x35,
|
||||
eCmdReadDefectData10 = 0x37,
|
||||
eCmdReadToc = 0x43,
|
||||
eCmdPlayAudio10 = 0x45,
|
||||
eCmdPlayAudioMSF = 0x47,
|
||||
eCmdPlayAudioTrack = 0x48,
|
||||
eCmdModeSelect10 = 0x55,
|
||||
eCmdModeSense10 = 0x5A,
|
||||
eCmdInvalid = 0xC2, // (SASI only/Suppress warning when using SxSI)
|
||||
};
|
||||
|
||||
public:
|
||||
// Basic Functions
|
||||
#ifdef RASCSI
|
||||
|
||||
@@ -298,6 +298,8 @@ void ListDevice(FILE *fp)
|
||||
// mount status output
|
||||
if (pUnit->GetID() == MAKEID('S', 'C', 'B', 'R')) {
|
||||
FPRT(fp, "%s", "HOST BRIDGE");
|
||||
} else if (pUnit->GetID() == MAKEID('S', 'C', 'N', 'L')) {
|
||||
FPRT(fp, "%s", "NuvoLink SC");
|
||||
} else {
|
||||
pUnit->GetPath(filepath);
|
||||
FPRT(fp, "%s",
|
||||
|
||||
Reference in New Issue
Block a user