最終更新:2017/12/3

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

はじめに

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ハードディスク等をダンプしたりリストアしたりといった応用が可能になります。但し後で説明する直結もしくはイニシエータモードを利用できるようにした変換基板が必要です。

接続方法(変換基板編)

最近では主にTwitter界隈を通じてRaSCSI用の変換基板を作成していただいている方々がいらっしゃいます。秋葉原で委託販売されてますので何とか手に入れて下さい。それなりのリスク覚悟で直結する人は下の接続方法(直結編)を参考にしてください。

家電のKENCHAN 同人ハード(キット)がオススメです

CONVERTER LINEUP

変換基板の回路図案 独自に変換基板を作成しようする方向けに素人ですが参考情報を記しておきます。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等)をサポートする変換基板の回路図例です。この回路図をベースに開発された変換基板が多数存在します(GAMERnium.com版等)。

CONVERTER TARGET

ターゲットモード(HDD,MO,CD等)に加えイニシエータモード(ホスト機能)をサポートする変換基板の回路図例です。イニシエータモードを制御するためにGPIOを一つ多く使用します。また方向制御を反転させるために74LS86が必要になります。現在この回路図をベースとした変換基板は存在しません。

CONVERTER INITIATOR

ターゲットモード(HDD,MO,CD等)、イニシエータモード(ホスト機能)、モニターモード(SCSI信号の監視)をサポートする変換基板の回路図例です。GPIOを三つ多く使用します。全ての74LS641-1の方向制御をRaSCSI側から制御します。現在この回路図をベースとした変換基板は存在しません。専用のドライバICを用いたあいぼむ版がこれに近い構成です。

CONVERTER FULLSPEC

接続方法(直結編)

警告! 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やZeroでも動作すると考えられます。ピンアサインを独自に変更しRaspberry Pi 1で動作させたという報告もあります。

対応OS

RASPBIAN JESSIE及びSTRETCHで開発およびテストしています。sudo apt-get update及びsudo apt-get upgradeで最新にしています。このドキュメントを記述している時点でのカーネルバージョンはLinux raspberrypi 4.9.35-v7+(JESSIE),Linux raspberrypi 4.9.59-v7+(STRETCH)です。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ドライブに対応)。

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.32)
RaSCSIのRPI側プログラム及びX68000用各ドライバとドキュメントです。各プログラムのソースコードもアーカイブに含まれます。RASPBIANがJESSIEとSTRETCHでカーネルドライバに互換性が無くなったのでそれぞれの環境でコンパイルしたものを用意しました。
RaSCSI version 1.32 for RASPBIAN STRETCHのダウンロード(1,075,741 bytes)
RaSCSI version 1.32 for RASPBIAN JESSIEのダウンロード(1,076,378 bytes)

参考情報

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

スクリーンショット

ディスク一杯
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

履歴

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

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

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

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

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

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

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

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

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

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

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

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



[EOF]