mirror of
https://github.com/akuker/RASCSI.git
synced 2024-06-12 15:29:35 +00:00
1118c344cc
* #7 Re-merge scsimon functionality with latest master. The old scsimon branch was waaaaay too out of date * #7 Re-merge scsimon functionality with latest master. The old scsimon branch was waaaaay too out of date * Added libspdlog-dev as a required package * Cleanup from master re-base * Updated to use GCC version 8, to match the raspberry pi Co-authored-by: akuker <akuker@gmail.com>
139 lines
4.0 KiB
C++
139 lines
4.0 KiB
C++
//---------------------------------------------------------------------------
|
||
//
|
||
// X68000 EMULATOR "XM6"
|
||
//
|
||
// Copyright (C) 2001-2006 PI.(ytanaka@ipc-tokai.or.jp)
|
||
// Copyright (C) 2014-2020 GIMONS
|
||
//
|
||
// [ SCSI Common Functionality ]
|
||
//
|
||
//---------------------------------------------------------------------------
|
||
|
||
#if !defined(scsi_h)
|
||
#define scsi_h
|
||
|
||
//===========================================================================
|
||
//
|
||
// SASI/SCSI Bus
|
||
//
|
||
//===========================================================================
|
||
class BUS
|
||
{
|
||
public:
|
||
// Operation modes definition
|
||
enum mode_e {
|
||
TARGET = 0,
|
||
INITIATOR = 1,
|
||
MONITOR = 2,
|
||
};
|
||
|
||
// Phase definition
|
||
enum phase_t {
|
||
busfree, // バスフリーフェーズ
|
||
arbitration, // アービトレーションフェーズ
|
||
selection, // セレクションフェーズ
|
||
reselection, // リセレクションフェーズ
|
||
command, // コマンドフェーズ
|
||
execute, // 実行フェーズ
|
||
datain, // データイン
|
||
dataout, // データアウト
|
||
status, // ステータスフェーズ
|
||
msgin, // メッセージフェーズ
|
||
msgout, // メッセージアウトフェーズ
|
||
reserved // 未使用/リザーブ
|
||
};
|
||
|
||
// Basic Functions
|
||
// 基本ファンクション
|
||
virtual BOOL FASTCALL Init(mode_e mode) = 0;
|
||
// 初期化
|
||
virtual void FASTCALL Reset() = 0;
|
||
// リセット
|
||
virtual void FASTCALL Cleanup() = 0;
|
||
// クリーンアップ
|
||
phase_t FASTCALL GetPhase();
|
||
// フェーズ取得
|
||
|
||
static phase_t FASTCALL GetPhase(DWORD mci)
|
||
{
|
||
return phase_table[mci];
|
||
}
|
||
// フェーズ取得
|
||
|
||
static const char* FASTCALL GetPhaseStrRaw(phase_t current_phase);
|
||
// Get the string phase name, based upon the raw data
|
||
|
||
// Extract as specific pin field from a raw data capture
|
||
static inline DWORD GetPinRaw(DWORD raw_data, DWORD pin_num)
|
||
{
|
||
return ((raw_data >> pin_num) & 1);
|
||
}
|
||
|
||
virtual BOOL FASTCALL GetBSY() = 0;
|
||
// BSYシグナル取得
|
||
virtual void FASTCALL SetBSY(BOOL ast) = 0;
|
||
// BSYシグナル設定
|
||
|
||
virtual BOOL FASTCALL GetSEL() = 0;
|
||
// SELシグナル取得
|
||
virtual void FASTCALL SetSEL(BOOL ast) = 0;
|
||
// SELシグナル設定
|
||
|
||
virtual BOOL FASTCALL GetATN() = 0;
|
||
// ATNシグナル取得
|
||
virtual void FASTCALL SetATN(BOOL ast) = 0;
|
||
// ATNシグナル設定
|
||
|
||
virtual BOOL FASTCALL GetACK() = 0;
|
||
// ACKシグナル取得
|
||
virtual void FASTCALL SetACK(BOOL ast) = 0;
|
||
// ACKシグナル設定
|
||
|
||
virtual BOOL FASTCALL GetRST() = 0;
|
||
// RSTシグナル取得
|
||
virtual void FASTCALL SetRST(BOOL ast) = 0;
|
||
// RSTシグナル設定
|
||
|
||
virtual BOOL FASTCALL GetMSG() = 0;
|
||
// MSGシグナル取得
|
||
virtual void FASTCALL SetMSG(BOOL ast) = 0;
|
||
// MSGシグナル設定
|
||
|
||
virtual BOOL FASTCALL GetCD() = 0;
|
||
// CDシグナル取得
|
||
virtual void FASTCALL SetCD(BOOL ast) = 0;
|
||
// CDシグナル設定
|
||
|
||
virtual BOOL FASTCALL GetIO() = 0;
|
||
// IOシグナル取得
|
||
virtual void FASTCALL SetIO(BOOL ast) = 0;
|
||
// IOシグナル設定
|
||
|
||
virtual BOOL FASTCALL GetREQ() = 0;
|
||
// REQシグナル取得
|
||
virtual void FASTCALL SetREQ(BOOL ast) = 0;
|
||
// REQシグナル設定
|
||
|
||
virtual BYTE FASTCALL GetDAT() = 0;
|
||
// データシグナル取得
|
||
virtual void FASTCALL SetDAT(BYTE dat) = 0;
|
||
// データシグナル設定
|
||
virtual BOOL FASTCALL GetDP() = 0;
|
||
// パリティシグナル取得
|
||
|
||
virtual int FASTCALL CommandHandShake(BYTE *buf) = 0;
|
||
// コマンド受信ハンドシェイク
|
||
virtual int FASTCALL ReceiveHandShake(BYTE *buf, int count) = 0;
|
||
// データ受信ハンドシェイク
|
||
virtual int FASTCALL SendHandShake(BYTE *buf, int count) = 0;
|
||
// データ送信ハンドシェイク
|
||
|
||
private:
|
||
static const phase_t phase_table[8];
|
||
// フェーズテーブル
|
||
|
||
static const char* phase_str_table[];
|
||
};
|
||
|
||
#endif // scsi_h
|