SCSIデバイスエミュレーターRaSCSIの設定方法

最終更新: 2018/03/19 11:20 (RASDRV.SYSの設定方法を追記。エディターnanoの終了方法を追記。X68000の起動ドライブ制限容量を追追記。)

先日X68000初代の修理を終えたので、改めてGIMONSさんのRaSCSIの設定をいちからやり直してみた。

ちなみに、RaSCSI(ラスカジー)とは、要するにRaspberry PiをSCSIハードディスクみたいに使えちゃう、という古くて新しいナウなガジェットである。これを導入すると、何とX68000やらFM TOWNSやらPC-9801やらでSCSI起動ドライブをRaspberry Piで代替出来てしまうのである。しかもRaspbian経由で動くのでHDDイメージをWi-Fi経由でいじくる事も可能。恐るべきレトロ未来感覚・・・(ごくり)

※SCSI(スカジー)って何ですか? と聞かれたら困るんですが、まあ要はSATAのご先祖様のIDEのもっと昔のご先祖様と考えてもらえれば。機種を超えたドライブ接続の標準規格として1980年後半から90年代前半に大流行しました。接続する各ドライブにはIDを0番から7番まで設定して接続します。7台まで数珠つなぎ(デイジーチェーン)できます。

RaSCSIはLinuxのディストリビューションであるRaspbian(ラズビアン)の上で動くため、UNIX系の操作がある程度出来る事が前提となる。まあ、ここはしょうがないので諦めて慣れましょう。

念のため本記事の前提となっている我が家の環境も書いておく。

  • Raspberry Pi 3B + 秋月の3.0A電源
  • Gamernium版変換基板 ハーフピッチD-Sub版 (お願いして分けてもらったので多分初期型?)
  • 30cmのSCSIケーブル(ハーフピッチD-Sub – フルピッチアンフェノール)
  • X68000 CZ-600C + CZ-6BE1(1MB)
  • SCSIボード CZ-6BS1

1. Raspberry Pi 3 Model BとACアダプターとMicroSDカードを買ってくる

どこかで適当に。どこでもいいと思うけど、専門店の方がいいんじゃないかなと。近所にお店があればそちらで是非。

3.0A USB出力のACアダプターも一緒に。出力が足りなくてちゃんと動作しないケースが多すぎるんで、最低限3.0Aは必須で是非。

マイクロSDカードは16GB、Class 10辺りを選択すべし。遅くても動くと思うけど、余計な不安要素は最初に潰して置いた方がいいかと。

2. RaSCSIボードを買ってくる

何種類か出ている模様。私はGamanium版を使っているので、以下の説明もGamernium版をベースにしている。適宜読み替えを。

3. Raspbian (Raspberry PiのOS)インストール

Raspberry PiをRaspbian等OSでまず動かさないとRaSCSIは動かない。つまり、RaSCSIが動作するまでにはOSが起動するまでの10秒くらい待たねばならない、ということ。実際に使う際には先に電源を入れるように。

最初にRaspbian OSイメージのダウンロード。Raspbian Stretch Liteを選択。

イメージ書き込みはRaspbian公式で推奨のソフトのEdcherをダウンロード。これでSDカードにイメージを書き込む。書き込みで進捗が進まない場合は、一回マシンを再起動して再挑戦。多分それで治るかと。

書き込んだSDカードをRaspberry Piに差して起動。

  • HDMIケーブルでモニターに差す。
  • USBキーボードを差す。

マイクロUSB電源を差すと勝手に起動する。黒い画面でログオンプロンプトが出てきたら、ID: pi, Password: raspberry でログオン。以下のWi-fi・タイムゾーン・言語の設定を行う。

$ sudo raspi-config

青い画面のメニューが出てくるので、そこから下記の設定を行う。

  • Wi-Fiの設定 (ESSID + Password)
    • 2 Network Options > N2 Wi-Fi
  • 地域・エンコーディング設定 (ja_JP.UTF-8)
    • 4 Localization Options > I1 Change Locale
  • タイムゾーン設定 (Asia/Tokyo)
    • 4 Localization Options > I2 Change Timezone
  • キーボードレイアウト  (使っているもので)
    • 4 Localization Options > I3 Change Keyboard Layout
  • 国設定 (JP)
    • 4 Localization Options > I4 Change Wi-Fi Country

再起動を聞かれたら再起動。聞かれない場合は下記で手動にて再起動。

$ sudu shutdown -r now

SSHサーバーを有効化する。これで外部マシンから繋がるようになる。

$ sudo systemctl enable ssh
$ sudo systemctl start ssh

Raspberry PiのIPアドレスを控えておく。後ほどここに接続する。

$ /sbin/ifconfig -a

実機での作業はここまで。以降はWindows/Mac/Linux機からSSHで接続して作業する。

4. 外部マシンからの後続作業

Raspbianを直接いじくるのはめんどくさいので、これ以降はリモートで作業。Raspberry Pi 3からHDMIケーブルとUSBキーボードは外してOK。

まずSSHクライアントを入れる (WindowsだとPoderosa辺りで)。

次にSFTPクライアントを入れる (WindowsだとWinSCP辺りで)。

SSHで控えておいたIPアドレスに接続する。接続出来たら、まずOSを更新し、一旦最新にしておく。

$ sudo apt-get update;sudo apt-get -y upgrade
$ sudo apt-get install chrony

外部マシンでRaSCSIをダウンロード。「RaSCSI version xxx for RASPBIAN STRETCH 」を選択する。

圧縮ファイル内の “bin\raspberrypi\rascsi.tar.gz” をRaspberryPiにSFTPで転送する。転送後、Raspbian側でRaSCSIを伸張する。

$ tar xvzf rascsi.tar.gz

SCSI HDDイメージを作成する。作成はXM6で。XM6のインストールや操作方法は割愛。XM6を起動させ、メニューの”Tools > Make a new SCSI Fixed Disk”でSCSI HDDイメージを作成する。一旦XM6の最大値である4GB(4096MB)で作成しておいてもOK。

但し、SCSIとして利用する機種・OSによって最大値が決まっているのでそれに従いましょう。例えば、X68000でSCSI利用であればブートパーティションは1GB以内であるべきだし、更にそこにXCをインストールする場合は768MB程度に抑えておかないと途中でエラーで止まる、等々の制約があるのでそれに倣うよう。

作ったHDSファイル(以下”x68000scsi0.hds”)をSFTPでRaspbian側のrascsiディレクトリーへ転送する。転送が終わったら、基板に応じてバイナリーを選択し起動してみる。(ここではgamernium版の例)

$ gamernium/rascsi -ID0 x68000scsi0.hds

正常に起動したら以下のメッセージが出る

--
pi@raspberrypi:~/rascsi $ sudo gamernium/rascsi -ID0 x68000scsi0.hds

SCSI Target Emulator RaSCSI(*^..^*) version 1.33
Powered by XM6 TypeG Technology / Copyright (C) 2016-2018 GIMONS
Connect type : GAMERnium.com version
---+------+---------------------------------------
ID | TYPE | DEVICE STATUS
---+------+---------------------------------------
0 | SCHD | x68000scsi0.hds
---+------+---------------------------------------
pi@raspberrypi:~/rascsi $

上記がうまく動いたら、一旦Ctrl+Cで停止させる。

5. 自動起動設定

一旦うまく動いたらしめたもの 。が、このままではRaspberry Piの電源をOFFにしたらプロセスが未起動状態となり、また上記の起動を手動で行わねばならなくなる。自動で全部Ready状態にするために、下記の作業を最後に行う。

まず、RaSCSIをRaspbian上の適切な場所へ移動する。オプショナルパッケージは/optに置くのがSysV以降の習わしなのでまず移動。

$ sudo mv rascsi /opt

次に、RaSCSIのカーネルモジュールを登録する。これを行わないと初期のX68000などタイミングにシビアな機種だとエラーが連発するので、必ず行うこと。RaSCSIはまずカーネルモジュール側が起動された上で、その後にRaSCSIの本体プロセスを起動する必要があるので、順序を間違えないように。カーネルモジュール側を後に起動すると、使わずに動作してしまうため意味がない。

作業としてはまず、rascsidrv.koをカーネルモジュールの配置場所にコピーする。下記カーネルモジュールのPathである「4.9.59-v7+」はバージョン番号であり、RaspberryPiの更新で数値が変わると思うので、適宜読み替えを。

$ cd /opt/rascsi/gamernium
$ sudo cp rascsidrv.ko /lib/modules/4.9.59-v7+
$ sudo nano /etc/modules

/etc/modulesに下記を末尾に追加して保存する。この記事ではGNU nanoというスクリーンエディターを指定しているのだが、終了するときは “Ctrl+X”を押して、保存するかと聞かれるので “Y” を押せばOK。

rascsidrv

カーネルモジュール間の依存を解決する。

$ sudo depmod -a
$ sudo nano /etc/modules-load.d/rascsidrv.conf

rascsidrv.confを新規作成し、下記を一行だけ書いて保存する。

rascsidrv

これでカーネルモジュール側の作業は完了。最後に、RaSCSI本体の起動スクリプトを作る。この作業でカーネルモジュール側の起動→RaSCSI本体の起動の順で自動起動することになる。

$ cd /etc/systemd/system/
$ sudo nano rascsi.service

rascsi.serviceを新規作成し、下記をコピペする。

[Unit]
Description=RaSCSI
After=syslog.target

[Service]
Type=simple
WorkingDirectory=/opt/rascsi
ExecStart=/usr/bin/sudo gamernium/rascsi -ID0 x68000scsi0.hds
TimeoutStopSec=5
StandardOutput=null

[Install]
WantedBy = multi-user.target

上記を保存したら、systemctlに認識されるようになるので、rascsiプロセスを自動起動に設定する。

$ sudo systemctl enable rascsi

終わったので、再起動してみる。

$ sudo shutdown -r now

再起動後にプロセスが自動起動しているか確認する。SSHで再接続し、下記を叩いて表示が出ることを確認する。出ない場合は正常起動していないので、上記設定を再確認。

$ cd /opt/rascsi/gamernium
$ ./rasctl -l
---+------+---------------------------------------
 ID | TYPE | DEVICE STATUS
 ---+------+---------------------------------------
 0 | SCHD | x68000scsi0.hds
 ---+------+---------------------------------------

6. X68000等に接続してみる

ここから先はFM TOWNSだったりPC-9801だったりと各者各様で良いかと思うので具体的には割愛。SCSIコネクターに接続し、先にRaspberry Piの電源を入れて10秒くらい待って、マシンを起動すれば、(ある場合は)RaSCSIボード上のランプが光ってマシン上でDevice ID: 0として認識する。あとはOSのインストール等々、通常のSCSI HDDとして煮るなり焼くなり好きにするが良い。

更に、X68000だけの特別追加機能として、イーサネット機能及びホストファイルシステム(ホスト機でSCSIドライブをネットワークドライブとしてマウントできる機能)等がある。詳しくは付属ドキュメントの”doc/x68k.txt”を参照のこと。多分ここで書くよりそちらを参照した方が良い。というかこの2018年に実機でSCSI使える人ならそんなこと書かなくても分かるでしょ! (が、あとで書くかも)→下に書きました

7. X68000からRaspberryPiを丸見えにする

結局書いてしまった・・・ということで続き。RaSCSIにはX68000専用に二つの機能が提供されている。ひとつがRaspberryPiのEthernet機能を使わせてもらうネットワークデバイスドライバー”RASETHER.SYS”、もうひとつがRaspberryPiのファイルシステムを直接参照できるファイルシステムドライバー”RASDRV.SYS”。

前者は実際問題として古くさいソフトウェアを使うことになるためセキュリティー的に疑問なのでここでは取り扱わず、安全な後者の解説に留める。

この後者”RASDRV.SYS”であるが、下記の設定でX68000からRaspbianの中身を参照できる。ので、あとはRaspbian側とWindowsやらMacやらとSFTP辺りでファイルをやりとりできれば、何と稼働中のX68000とリアルタイムでファイル連携が出来るのである。何という万能感。X68000とのファイルのやりとりのためにSCSIのMOドライブを繋いでおく時代は遂に終わったのです(いや、とはいえ便利なので残しておいた方がいい気もする・・・)。

まず、RaSCSIの配布パッケージに含まれている “bin/x68k/RASDRV.SYS”を何とかRaspbianに設定したHDイメージ “x68000scsi0.hds”の中に持って行く。MOを繋いでいればMO経由で普通に “A:\SYS” 辺りにコピーすれば良いのだが、ここではMO無しでもいけちゃう方法を解説する。但しWindows限定になるので注意。

まず、これまでに設定した”x68000scsi0.hds”を一旦Windowsに持ってくる(強引)。持ってくる際には、下記のファイルをSFTPで一旦Windowsにコピーする。ファイルサイズが大きいので気長に待とう。

/opt/rascsi/x68000scsi0.hds

次に、このイメージを直接操作出来るソフトウェア”Disk Explorer”を入手して展開し、上記のHDSイメージファイルを開く。

http://hp.vector.co.jp/authors/VA013937/editdisk/

開けたら、RaSCSIの配布ファイルに含まれている “bin/x68k/RASDRV.SYS” をx68000scsi0.hdsの好きな場所にドラッグ&ドロップでコピーする。とりあえずここは “\SYS\RASDRV.SYS” としてコピーしたことにしておく。そしてDisk Exploerを終了。これでHDイメージに無事 “RASDRV.SYS” ドライバーを格納出来た。

さて、これをRaspbianに戻すのだが、戻す際にはRaSCSIを一旦止めてやらないと絶賛稼働中なのでマズい。まずSSHでRaspbianに入り、RaSCSIを止める。

$ sudo systemctl stop rascsi

次に、 RaSCSI側が新しいドライブとして認識出来るよう、ブリッジデバイスをSCSI ID: 1で追加登録してやる。

$ cd /etc/systemd/system/
$ sudo nano rascsi.service

下記の “-ID1 BRIDGE” の部分を追記して保存する。

[Unit]
Description=RaSCSI
After=syslog.target

[Service]
Type=simple
WorkingDirectory=/opt/rascsi
ExecStart=/usr/bin/sudo gamernium/rascsi -ID0 x68000scsi0.hds -ID1 BRIDGE
TimeoutStopSec=5
StandardOutput=null

[Install]
WantedBy = multi-user.target

保存し終わったら、UNIXデーモン(サービス)のリロードを行う。(これは “rascsi.service” を書き換えたタイミングでだけ実施すればOK)。

$ sudo systemctl daemon-reload

準備OK。RaSCSIを起動してやる。

$ sudo systemctl start rascsi

上記が全て終わったら、RaspberryPi側の準備は完了。最後にX68000側の設定をちょっとだけ行う。Human68Kを起動して “A:\config.sys” を開く。

A:\>ed config.sys

下記の行を “DEVICE=” の最後の行に追加する。

DEVICE    = \SYS\RASDRV.SYS

書き終わったら “ESC → E”で保存。その後にX68000のリセットボタンを押して再起動。起動時のログにD:ドライブが追加された、という下記のようなメッセージが出れば成功。

RaSCSI FileSystem Driver version 1.21
ドライブD:を登録しました

あとは起動完了後にDドライブを覗いてみれば・・・あら不思議、X68000からRaspberryPiの全てが見える!!

あとは、RaspberryPiに向けてSFTPでファイルを “/home/pi” 辺りに転送してやれば、X68000からは “D:\home\pi” で参照出来る訳です。無線でX68000とファイルのやりとりが出来るなんて21世紀は何て素晴らしいんでしょう!!!

ちなみに、Raspbianのルートから公開したくない場合は、”config.sys” の設定で下記のように記載すれば “/home/pi” の直下が “D:” ドライブの直下として見えるので、そのようにしても良いだろう。いやむしろそうした方が良いかもしれない。お好み・用途に応じて。

DEVICE  = \SYS\RASDRV.SYS /home/pi

それではお宅のレトロマシンの幸せなSCSIライフを!!!