Failed attempt at monitoring the SCSI traffic.

This commit is contained in:
akuker
2020-07-07 14:16:02 -05:00
parent c86764c6e7
commit 6fd6fdcc05
5 changed files with 602 additions and 75 deletions

View File

@@ -229,6 +229,8 @@ public:
// NULL check
BOOL FASTCALL IsSASI() const;
// SASI Check
virtual BOOL FASTCALL IsMonitor() const {return FALSE;}
// Check if this is a monitor device
// Media Operations
virtual BOOL FASTCALL Open(const Filepath& path, BOOL attn = TRUE);
@@ -399,6 +401,26 @@ public:
// MODE SELECT(6) command
};
class MONITORHD : public Disk
{
public:
// Basic Functions
MONITORHD();
// Constructor
void FASTCALL Reset();
// Reset
BOOL FASTCALL Open(const Filepath& path, BOOL attn = TRUE);
// Open
// commands
int FASTCALL Inquiry(
const DWORD *cdb, BYTE *buf, DWORD major, DWORD minor);
// INQUIRY command
BOOL FASTCALL ModeSelect(const DWORD *cdb, const BYTE *buf, int length);
// MODE SELECT(6) command
BOOL FASTCALL IsMonitor() const {return TRUE;}
};
//===========================================================================
//
// SCSI hard disk (PC-9801-55 NEC genuine /Anex86/T98Next)
@@ -701,6 +723,31 @@ private:
#endif
};
//////////===========================================================================
//////////
////////// SCSI Monitor Device (Interits SCSI device)
//////////
//////////===========================================================================
////////class SCSIMONDEV : public Disk
////////{
////////public:
//////// // Basic Functions
//////// SCSIMONDEV();
//////// // Constructor
//////// void FASTCALL Reset();
//////// // Reset
//////// BOOL FASTCALL Open(const Filepath& path, BOOL attn = TRUE);
//////// // Open
////////
//////// // commands
//////// int FASTCALL Inquiry(
//////// const DWORD *cdb, BYTE *buf, DWORD major, DWORD minor);
//////// // INQUIRY command
//////// BOOL FASTCALL ModeSelect(const DWORD *cdb, const BYTE *buf, int length);
//////// // MODE SELECT(6) command
////////};
//===========================================================================
//
// SCSI Host Bridge
@@ -933,6 +980,8 @@ public:
// SASI Check
virtual BOOL FASTCALL IsSCSI() const {return FALSE;}
// SCSI check
virtual BOOL FASTCALL IsMonitor() const {return FALSE;}
// Check to see if this is a monitor device
Disk* FASTCALL GetBusyUnit();
// Get the busy unit
@@ -1141,4 +1190,132 @@ private:
// Internal data
};
//===========================================================================
//
// SCSI Device (Interits SASI device)
//
//===========================================================================
class SCSIMONDEV : public SASIDEV
{
public:
// Internal data definition
typedef struct {
// Synchronous transfer
BOOL syncenable; // Synchronous transfer possible
int syncperiod; // Synchronous transfer period
int syncoffset; // Synchronous transfer offset
int syncack; // Number of synchronous transfer ACKs
// ATN message
BOOL atnmsg;
int msc;
BYTE msb[256];
} scsi_t;
BOOL FASTCALL IsMonitor() const {return TRUE;}
public:
// Basic Functions
#ifdef RASCSI
SCSIMONDEV();
#else
SCSIMONDEV(Device *dev);
#endif // RASCSI
// Constructor
void FASTCALL Reset();
// Device Reset
// 外部API
BUS::phase_t FASTCALL Process();
// Run
void FASTCALL SyncTransfer(BOOL enable) { scsi.syncenable = enable; }
// Synchronouse transfer enable setting
// Other
BOOL FASTCALL IsSASI() const {return FALSE;}
// SASI Check
BOOL FASTCALL IsSCSI() const {return TRUE;}
// SCSI check
private:
// Phase
void FASTCALL BusFree();
// Bus free phase
void FASTCALL Selection();
// Selection phase
void FASTCALL Execute();
// Execution phase
void FASTCALL MsgOut();
// Message out phase
void FASTCALL Error();
// Common erorr handling
// commands
void FASTCALL CmdInquiry();
// INQUIRY command
void FASTCALL CmdModeSelect();
// MODE SELECT command
void FASTCALL CmdModeSense();
// MODE SENSE command
void FASTCALL CmdStartStop();
// START STOP UNIT command
void FASTCALL CmdSendDiag();
// SEND DIAGNOSTIC command
void FASTCALL CmdRemoval();
// PREVENT/ALLOW MEDIUM REMOVAL command
void FASTCALL CmdReadCapacity();
// READ CAPACITY command
void FASTCALL CmdRead10();
// READ(10) command
void FASTCALL CmdWrite10();
// WRITE(10) command
void FASTCALL CmdSeek10();
// SEEK(10) command
void FASTCALL CmdVerify();
// VERIFY command
void FASTCALL CmdSynchronizeCache();
// SYNCHRONIZE CACHE command
void FASTCALL CmdReadDefectData10();
// READ DEFECT DATA(10) command
void FASTCALL CmdReadToc();
// READ TOC command
void FASTCALL CmdPlayAudio10();
// PLAY AUDIO(10) command
void FASTCALL CmdPlayAudioMSF();
// PLAY AUDIO MSF command
void FASTCALL CmdPlayAudioTrack();
// PLAY AUDIO TRACK INDEX command
void FASTCALL CmdModeSelect10();
// MODE SELECT(10) command
void FASTCALL CmdModeSense10();
// MODE SENSE(10) command
void FASTCALL CmdGetMessage10();
// GET MESSAGE(10) command
void FASTCALL CmdSendMessage10();
// SEND MESSAGE(10) command
// データ転送
void FASTCALL Send();
// Send data
#ifndef RASCSI
void FASTCALL SendNext();
// Continue sending data
#endif // RASCSI
void FASTCALL Receive();
// Receive data
#ifndef RASCSI
void FASTCALL ReceiveNext();
// Continue receiving data
#endif // RASCSI
BOOL FASTCALL XferMsg(DWORD msg);
// Data transfer message
scsi_t scsi;
// Internal data
};
#endif // disk_h