GIMONS DEVELOPER WORKS/RaSCSI

最終更新:2019/4/28

SCSIデバイスエミュレータ RaSCSI
-Rasperry pi As a SCSI target device emulator for X68000-

告知

Version1.4系のテストにご協力いただきありがとうございました。軽微な修正とXM6 TypeGとのソース統合を行った1.45をリリースしました。現行のRaSCSIの開発は一旦これで完了とする予定です。

はじめに

RaSCSIは過去の遺物と化したSCSIデバイス(ハードディスク,MO,CD-ROM)を仮想的に再現するエミュレータの一種です。XM6 TypeGのSCSI制御を利用して開発されました。Raspberry Pi(以下RPI)に導入することでRPIがSCSIデバイスの様に振る舞います。SCSIコネクタの代わりにRPIのGPIOを18本+GND1本を使用します。RPIをX68000(SUPER以降のSCSI機)に接続するためには専用の変換ケーブルを自作する必要があります。因みにRaSCSIはX68000と組み合わせることで様々な機能拡張を行いますが単なるSCSIハードディスクとして使用する場合はFM TOWNS等のSCSIを採用した他のレトロPCでも使用できると思います。

OVERVIEW

特徴

仮想ディスクデバイス(HDD,MO,CD)

SCSI接続のハードディスク,光磁気(MO)ディスク,CD-ROMをエミュレーションします。RPI側ではXM6で作成できるディスクイメージファイルを仮想SCSIディスクデバイスとして認識しますがX68000側には物理的なデバイスが存在しているように認識されます。version1.24からSASIについてもを正式にサポートしました。

イーサネット通信

X68000側にRaSCSIが提供するイーサーネットドライバを導入することでRPI側のブリッジデバイスを通じてTAPデバイス(仮想ネットワークI/F)を利用した通信が可能になります。X68000側のドライバはNeptune-Xのドライバと置き換えることが可能です。

リモートドライブ

X68000側にRaSCSIが提供するリモートファイルシステムドライバを導入することでRPI側のブリッジデバイスを通じてRPIのファイルシステムをそのままドライブとして認識させることができます。XM6のWindrvXMと同様の機能を実機で提供するものです。

イニシエータモード

SCSIデバイスを制御(ホスト側)するイニシエータモードを利用できます。これは物理的に接続されたSCSIハードディスク等をダンプしたりリストアしたりといった応用が可能になります。但し後で説明する直結もしくはイニシエータモードを利用できるようにした変換基板が必要です。

接続方法(変換基板編)

下記回路図を参考にご自身で作成することもできますし有償で頒布(委託販売やBOOTH等)されている方から入手して下さい。

CONVERTER LINEUP

作者も公式版としてBOOTHで有償頒布を開始しました(数に限りがありますので不定期です)。
GIMONS DEVELOPER WORKS(BOOTH)

PUBLIC VER

変換基板の回路図案 独自に変換基板を作成しようする方向けに素人ですが参考情報を記しておきます。SCSIはTTLレベルで5Vを220Ωと330Ωで分圧(パッシブターミネータの場合)することで各信号線に3V弱の電圧がかかった状態が定常状態(信号的にはネゲート)になっています。イニシエータ側もしくはターゲット側が信号をアサートする(=0V)にしようとすると両端のターミネータから合わせて5000÷220×2=45mAの電流が流れることになります(X68000のSCSIコントローラであるMB89352のデータシートを見ればシンク電流としてIol48mAとなっています)。RPIのGPIOはこのような大きなシンク電流は吸収できません。電気的に安全な接続を行うためには汎用ロジックIC等で変換基板を作る必要があります。汎用ロジックICで48mAものシンク電流に耐えるのは74LS06とか07といったオープンコレクタでハイパワータイプのものを使用します。作者は74HC541×3,74HC126×1,74HC04×1で基本的なSCSIの方向制御を行い更に74LS07×3を使ってバスをドライブする回路を組んでみたところ問題なく動作することを確認しました。他にも74LS641の派生版である74LS641-1を使用すると回路はシンプルに構成できるでしょう。ノーマル品と違ってシンク電流が48mA対応なので74LS07を使用する必要はありません。しかし入手性はそれほど良くありません。

ターゲットモード(HDD,MO,CD等)をサポートする変換基板の回路図例です。

CONVERTER TARGET

ターゲットモード(HDD,MO,CD等)、イニシエータモード(ホスト機能)をサポートする変換基板の回路図例です。GPIOを三つ多く使用します。全ての74LS641-1の方向制御をRaSCSI側から制御します。

CONVERTER FULLSPEC



独自の変換基板を有償で頒布する方へ 変換基板を有償で頒布する場合は下記の条件に従う限り作者に許諾を得る必要はありません。重要なことは基板を購入したユーザーに十分な情報を提供することと心得て下さい。

1.頒布価格
基板製作費 + パーツ費用 + 運送費 +(社会通念上一般的な)手数料。

2.回路図の公開
購入者に回路図を提供して下さい。基板頒布と同時もしくは別途ホームページからのダウンロード等手段は自由です。

3.X68000実機での検証結果の公開
X68000実機環境の動作検証は必須とします。実機が手に入らない場合はX68000ユーザーの方に検証の協力をお願いしてもよいでしょう。動作検証は起動確認以外に書き込みや負荷テストをお願いします。検証結果は使用した環境やと共に公開して下さい

接続方法(直結編)

警告! GPIOとSCSIの電気的仕様の違いから直結はリスクが伴います。電気的に安全な接続を行うには変換基板を使用しなければなりません。このリスクを理解できない人は諦めましょう。あなたのX68000は恐らく大丈夫ですがRaspberry Piには想定外の負荷が掛かります。想定外の負荷というのは変換基板のところで説明するシンク電流です。直結だとターミネータが無いので22mA程度のシンク電流が発生しますがGPIOの最大ドライブ能力を超えるのでシンク電流が少なくて0V付近までドライブできていないでしょう。ちなみに数ヶ月の間RaSCSIを動作させていますが今のところ故障には至っていません。故障したとしても高価な物ではありませんので消耗品とお考え下さい。


ケーブル結線図
Raspberry Pi(GPIO)<=> 接続(変換)ケーブル <=> (外部SCSIコネクタ) X68000

PIN ASSIGN
SCSIコネクタ側のGNDを可能な限り多く(できれば8本)引き出してRPI側のGNDに接続すると安定するようです。

ケーブル製作例
CABLE EXAMPLE
材料は40ピンMILコネクタ、セントロニクス50ピンのオス、フラットケーブルを使用しました。フラットケーブルは30cm以内にしておいたほうがいいです(これ以上の長さで実績はありません)。SCSIコネクタはX68030やXVI Compactはハーフサイズのオス(リボンタイプ)でその他のSCSI機はフルサイズのオスになるでしょう。写真の様に変換アダプタを使うのもありです。GPIPピンは綺麗に並んで無い上にアプリの作り上飛び飛びのピンを使っているのでどちらで結線を調整するかは悩ましいところ。私はSCSIコネクタ側は普通に半田付けして結線はMIL側で一本づつ確認しながら圧着していきました。

直結基板例
DIRECT LINK
直結基板というものもあります。基本的に直結ケーブルと同じですが電気的に安定しやすいのかSCSIケーブルを使っても問題なさそうです。

動作環境(RPI)

以下の動作環境で動作します。

Raspberry Pi

Raspberry Pi 3 Model B を推奨します。
Raspberry Pi 2 Model B,Raspberry Pi 3 Model B+でも動作すると考えられます。
Raspberry Pi Zero/ZeroWでも動作しますが不安定な場合があります。

対応OS

RASPBIAN STRETCHで開発およびテストしています。sudo apt-get update及びsudo apt-get upgradeで最新にしています。このドキュメントを記述している時点でのカーネルバージョンは"Linux raspberrypi 4.14.79-v7+"です。RaSCSIはSCSI信号をGPIOを利用して制御しているので可能な限り低レイテンシーの状態で使用する必要があります。したがってCUIモードで利用することを推奨します。更に不要なサービスは極力停止して下さい。

動作環境(X68000)

以下の動作環境で動作します。

X68000

SUPER以降のSCSI機を推奨します。SCSIボードを増設した機種でも動作実績があります。
初代,ACE,EXPERT,PRO等のSASI機ではSASIハードディスクエミュレーションのみが使用できます。SxSIについてはあまり動作確認していませんので動作報告いただけると助かります。因みにパリティは使っていないのでパリティ回路を付加する必要はありません。

対応OS

イーサーネット機能、リモートドライブ機能はHumanのデバイスドライバのみを提供しますので全機能を利用するためにはHuman3.02を推奨します。SCSIストレージだけであればNetBSD等でも問題ないでしょう。

ディスクイメージ

RaSCSI自体がX68000エミュレータであるXM6 TypeGの派生物です。従ってディスクイメージの作成はXM6 TypeGの「ツール」メニューから行うことを前提としています。もちろん下記の仕様に従えばdd等で空のイメージファイルを作成することも可能です。

SCSI ハードディスク

HDSファイル形式(拡張子HDS/HDN/HDI/NHD/HDA)
ファイルサイズは10MB以上4095MB以下の範囲で任意のサイズ(但し512バイト単位)。
拡張子が"HDN"の場合はPC9800シリーズのPC-9801-55ボード向けのNEC純正ハードディスクエミュレーションを行います。INQUIRYやMODE SENSEで返却される情報に違いがあります。拡張子が"HDI","NHD"の場合はそれぞれPC98エミュレータであるAnex86及びT98NextのSCSIハードディスクイメージを使用するものです。HDNの時と同様に一部の情報がNEC用に変換されます(Thansk savaさん)。
拡張子が"HDA"の場合はMacintosh向けAPPLE純正ハードディスクエミュレーションを行います。INQUIRY及びMODE SENSEで返却される情報に違いがあります。

SASI ハードディスク

HDFファイル形式(拡張子HDF)
ファイルサイズは10441728バイト、20748288バイト、41496576バイトのいずれか(それぞれ10MBドライブ、20MBドライブ、40MBドライブに対応)を推奨します。256バイト単位であれば10M~512Mの任意のファイルサイズがマウント可能です。

SCSI 光磁気(MO)ディスク

MOSファイル形式(拡張子MOS)
ファイルサイズは次の4種類のいずれか。
128MBタイプ (127398912バイト)
230MBタイプ (228518400バイト)
540MBタイプ (533248000バイト)
640MBタイプ (635600896バイト)
128MB,230MB,540MBは512バイト/セクタ、640MBは2048バイト/セクタになります。

SCSI CD-ROM

ISOファイル形式(拡張子ISO、ISO9660ベタイメージ)
モード1(2048バイト/セクタ)で、データのみ格納されたファイルとRAW形式で記録されたファイルの両方に対応しています。

ダウンロード

RaSCSI(version 1.45)
RaSCSIのRPI側プログラム及びX68000用各ドライバとドキュメントです。各プログラムのソースコードもアーカイブに含まれます。
RaSCSI version 1.45のダウンロード(1,048,974 bytes)

動作検証情報

GIMONSが動作検証した基板に関する情報です。

それぞれの基板製作者のホームページからX68000以外での動作実績が公開されていることがありますのでご確認下さい。

RaSCSI Version
1.44p1

基板作者 タイプ モデル RPI ターゲット 起動(READ) 複写(READ/WRITE) フォーマット RASDRV 負荷テスト
GIMONS DEVELOPER WORKS ダイレクトリンク Version1.0 3B PRO(SASI) DiskBench
Compact(SCSI) DiskBench
GIMONS DEVELOPER WORKS フルスペック Version1.0 3B PRO(SASI) DiskBench
Compact(SCSI) DiskBench
あいぼむプロダクツ フルスペック RaSCSI Adapter 3B PRO(SASI) DiskBench
Compact(SCSI) DiskBench
GAMERnium.com フルスペック RaSCSI EX 3B PRO(SASI) DiskBench
Compact(SCSI) DiskBench
@naka_mobile版 フルスペック 基板番号ND161B 3B PRO(SASI) DiskBench
Compact(SCSI) DiskBench
Project M.P.S フルスペック RaSCSI Zero
アンフェーノル
ハーフピッチ版
ZeroW PRO(SASI)
コネクタ変換経由
DiskBench
Compact(SCSI) DiskBench


スクリーンショット

ディスク一杯
SCSI IDは0-7まで自由にアサインできます。通常PC本体がイニシエータでIDを付けるので実質7台までです。
DRIVES

起動ディスク
ブートデバイスとしても利用できますぞ。

BOOT

DSKBENCH
ベンチマークも中々の数値を叩き出します。物理HDDと遜色ないでしょ(SCSI1だけど)。
DSKBENCH

FM TOWNSⅡでも使えた
X68000のために開発したけどFM TOWNSでも普通に使えちゃった。
TOWNS

ラズパイのファイルをそのまま使う
実機なのにWindrvXM気分が味わえるRASDRVの威力。
RASDRV

イーサネット接続もでるぜ
X68000からRPIにTELNET中。Neptune-Xはもういらないや
RASETHER

参考情報

SCSIフラットケーブルの信号線
PIN ASSIGN2
SCSIフラットケーブルで結線したRaSCSI戦士からいただいた情報です。

履歴

2019/4/28 Version1.45を公開(XM6 TypeGとのソース統合,SELECT時のビジー解除待ちにタイムアウトを設定)

2019/3/22 Version1.44p1を公開(rasdumpの安定性向上)

2019/3/12 Version1.44を公開(性能改善、RPI Zero/wでの安定性向上、HD0~16指定の対応)

2019/2/17 動作検証情報を追加

2019/2/16 Version1.43を公開(SASIのフォーマット不具合とPC98純正55での起動不具合の解消)

2019/2/11 Version1.42を公開(SASI機、遅いSCSI機、RASDRVの安定化、その他修正多数)

2019/2/4 Version1.41を公開(SASI $C2 SPECIFYコマンドの処理を修正)

2019/2/3 Version1.40を公開(カーネルモジュール廃止、その他修正多数)

2018/12/11 ターゲット&イニシエータ回路図削除(ややこしいので)

2018/4/26 Version1.34を公開(rasdump改良,HDNとHDIで256バイト/セクターを試験的に解放、NetBSD対応パッチのマージ)

2018/2/10 Version1.33を公開(GAMERnium.comフルスペック版対応,タイミング修正)

2017/12/3 Version1.32を公開(PC98向けサポート強化,タイミング改良,フルスペック版バイナリ追加,その他バグ修正)

2017/9/5 Version1.31を公開(イニシエータモード対応,RASDRV改良)

2017/7/1 Version1.30を公開(PC-9801-55用純正NEC HD対応,Macintosh用Apple純正 HD対応)

2017/6/25 Version1.26を公開(PC98向け55ボード対応拡充,MAC対応実験)

2017/6/18 Version1.25L10を公開(RASPBIANのcpuinfo仕様変更への緊急対応)

2017/6/18 Version1.25を公開(転送エラー処理とRST信号の受信処理を修正)

2017/6/17 Version1.24を公開(カーネルドライバによる安定性向上)

2017/5/21 Version1.23を公開(PC98向け55ボード対応実験,SASIハードディスク対応実験,@132syncさん版,tomcatさん版変換基板用バイナリ追加)

2017/5/1 Version1.22を公開(ATN信号受信時の処理を修正,ENABLE信号の出力追加,変換基板用のSCSI制御論理の追加 *再コンパイル必要)

2017/4/10 Version1.21を公開(不要コードの削除,ピンアサイン変更対応,ACTIVE信号の出力追加,ホストファイルシステムのバグ修正)

2017/4/09 「電気的に安全な接続方法の考察」に回路図案を追記

2017/3/23 「電気的に安全な接続方法の考察」等を追記



[EOF]