RaSCSI version 1.34
4/26 にリリースされた RaSCSI version 1.34 では NetBSD対応パッチがマージされました。
2019/2/13追記: RaSCSI のページが http://retropc.net/gimons/rascsi/ に移転したのでリンク更新しました
#RaSCSI version 1.34をリリースしました。
— GIMONS (@kugimoto0715) 2018年4月26日
rasdump改良(安定性が向上とボードID指定可能)
HDNとHDIで256バイト/セクターに対応(試験的)
NetBSD対応パッチのマージ(暫定的)
ダウンロードはいつものとこです。https://t.co/bEEKoPzek8
— GIMONS (@kugimoto0715) 2018年4月26日
今回からSTRETCH用のみとなります。
どうしてもJESSIE版が必要であればコンパイルしてください。
実は去年の 6月ぐらいに Raspberry Pi 3 MODEL B を買ってからずっと放置していたのですが、NetBSD対応が入ったということで GW中の課題として試してみました。
買ったまま放置してたもの①
— Izumi Tsutsui (@tsutsuii) 2018年4月30日
ラズパイ3 本体(日本製) pic.twitter.com/kVrrcQLOnd
買ったまま放置してたもの③
— Izumi Tsutsui (@tsutsuii) 2018年4月30日
RaSCSI 変換基板×2 pic.twitter.com/8LOJsaMkCV
結論からいうと NetBSD/evbarm 上でもあっさり動きました。
手順まとめ
とりあえず NetBSD/evbarm 8.0_RC1 な Raspberry Pi 3B で RaSCSI をゴソゴソしてみる pic.twitter.com/9UDbtKRc6e
— Izumi Tsutsui (@tsutsuii) 2018年5月1日
手順としては以下(わざわざ NetBSD で動かそうと思うようなある程度わかっている人向け)
- どうにかして Raspberry Pi で NetBSD/evbarm が起動するSDカードを用意する
えびじゅんさんのSDイメージを使うのがとりあえず簡単です - カーネルコンフィグに
options INSECURE
を追加してカーネルを作り直す options INSECURE
付きで作り直したカーネルで再起動
起動用DOSパーティションに .bin なカーネルを入れるとか手順がありますがそのへんは別途- RaSCSI version 1.34 をダウンロードして展開
標準の/usr/bin/unzip
でも解凍可能 rascsi134/doc/rascsi.txt
の説明をちゃんと読む- 使用する接続方法(直結 or 各種変換基板)に合わせて
rascsi134/src/raspberrypi/gpiobus.h
の「接続方法定義の選択」のコメントアウトを適宜修正 make
によりビルド- 生ディスクイメージを拡張子 .hds で用意
- ./rascsi -id0 [ディスクイメージファイル].hds で起動
options INSECURE
options INSECURE
が必要というのは @LabDrunker さんの情報です。
はい。カーネル側はINSECUREオプションを追加するだけです。RaSCSI側はgpiobus.cppのbase変数の変更に加えて、ctapdriver.cppも少しだけ手直しが必要です。後ほど整理してどこかにアップロードします。
— 「この世界の片隅に」はいいぞ (@LabDrunker) 2018年2月24日
options INSECURE
が無いカーネル (NetBSD/evbarm のデフォルトではついていない) で rascsi
を起動すると以下のように怒られます。
Error : Initializing
一筋縄では行かないか pic.twitter.com/MPXSrsYjWu
— Izumi Tsutsui (@tsutsuii) 2018年5月1日
options INSECURE
が指定されると、カーネルとしてはグローバル変数 securelevel
の値が変化します。securelevel
の値とデバイスアクセス関連については src/sys/secmodel/securelevel/secmodel_securelevel.c
あたりのコードを参照してください(手抜き)。
RaSCSI コマンド起動オプション
デーモン本体として rascsi
コマンドと、外部からの制御用の rasctl
コマンドとでは SCSI ID指定やイメージファイル指定のオプション体系が異なります。ちゃんとドキュメントを読んでから試さないとオプションを間違えていろいろ怒られることになるので注意しましょう……。
んー。今度はなんだろう pic.twitter.com/g2L5asdP5m
— Izumi Tsutsui (@tsutsuii) 2018年5月1日
ちゃんとマニュアルを読みながら照合しろと怒られそう pic.twitter.com/UqTTObFgHy
— Izumi Tsutsui (@tsutsuii) 2018年5月1日
行けたっぽい? pic.twitter.com/E5Ut6r8Jrg
— Izumi Tsutsui (@tsutsuii) 2018年5月1日
RaSCSI on OMRON LUNA
とりあえずのテストで RaSCSI + GAMERnium版変換基板(初版 GMN-03)を初代LUNAにつないでテストするとこれもあっさり動きました。
RaSCSI + NetBSD/luna68k bootloader ではちゃんとプローブされた。 pic.twitter.com/gvcOCMyAoQ
— Izumi Tsutsui (@tsutsuii) 2018年5月1日
RaSCSI + NetBSD/luna68k 8.0_RC1 GENERIC カーネルでもデバイス検出は問題なし pic.twitter.com/IUiUJVQfnv
— Izumi Tsutsui (@tsutsuii) 2018年5月1日
NetBSD/luna68k 8.0_RC1 カーネルでの RaSCSI ドライブの dd での読み出しも問題なし。速度は SCSI1 なのでオーバーヘッド込みならそれくらいか、という感じ pic.twitter.com/pAj9XjOf7z
— Izumi Tsutsui (@tsutsuii) 2018年5月1日
SCSI mode selece コマンド
初代LUNAのブートPROM(というか、内蔵のファームウェア)は SCSI起動時に mode select コマンドを発行するのですが、よくある IDE-SCSI 変換内蔵の HDDではこの mode select コマンドをサポートしておらず、結果として初代LUNAでは起動できない、という問題がありました。
LUNAでSSD(というかIDE-SCSI変換)からブートしようとすると
— Izumi Tsutsui (@tsutsuii) 2012年7月22日
>g
Scsi disk mode select error!!
Scsi disk mode select error!!
Boot failure ..
>
と怒られる。ディスクの種類なのか容量なのか
SCSI チャレンジ pic.twitter.com/fza2z4kk2H
— Izumi Tsutsui (@tsutsuii) 2016年11月30日
ダメでしたヽ(`Д´#)ノ ムキー!! pic.twitter.com/JlF1QSQfKv
— Izumi Tsutsui (@tsutsuii) 2016年11月30日
メルコ製の DSC-GT40T という IDE-SCSI 変換と思われる外付けドライブでも初代 LUNA の起動に必要な SCSI mode select コマンドには対応していませんでした(´・ω・`) pic.twitter.com/4O0KYwPDGX
— Izumi Tsutsui (@tsutsuii) 2017年3月18日
一方、 RaSCSI はちゃんと mode select コマンドにも対応しているようで、 LUNAのファームウェアからの起動も問題なく可能でした。
RaSCSI + OMROM 初代LUNA 起動テスト。SCSI mode select command もサポートしているということなのか、ファームからのブートローダー読み出しから 4.4BSD-Alpha カーネルのデバイス認識まで問題なく起動する。すばらしいのひとことです…… pic.twitter.com/Eh07DhfaPH
— Izumi Tsutsui (@tsutsuii) 2018年5月1日
rascsi
を -DDISK_LOG
のオプション付きでビルドすると、ホスト側から飛んできた SCSIコマンドのログが一通り表示されるようになります。なので、「謎マシンが謎コマンドを送ってくる!」という場合も RaSCSI があれば調査可能です。
LUNA のブートPROM の "x" コマンドでブートローダーを読み出した時に飛んできたコマンドの RaSCSI のログ出力はこんな感じです。
SCSI Target Emulator RaSCSI(*^..^*) version 1.34
Powered by XM6 TypeG Technology / Copyright (C) 2016-2018 GIMONS
Connect type : GAMERnium.com version
Peripheral address : 0x3f000000
---+------+---------------------------------------
ID | TYPE | DEVICE STATUS
---+------+---------------------------------------
5 | SCHD | DK312-1-BSD.hds
---+------+---------------------------------------
セレクションフェーズ ID=5 (デバイスあり)
コマンドフェーズ
コマンド $00
コマンド $00
コマンド $00
コマンド $00
コマンド $00
コマンド $00
実行フェーズ コマンド$00
TEST UNIT READYコマンド
ステータスフェーズ
メッセージインフェーズ
バスフリーフェーズ
セレクションフェーズ ID=5 (デバイスあり)
コマンドフェーズ
コマンド $12
コマンド $00
コマンド $00
コマンド $00
コマンド $24
コマンド $00
実行フェーズ コマンド$12
INQUIRYコマンド
データインフェーズ
ステータスフェーズ
メッセージインフェーズ
バスフリーフェーズ
セレクションフェーズ ID=5 (デバイスあり)
コマンドフェーズ
コマンド $15
コマンド $00
コマンド $00
コマンド $00
コマンド $0C
コマンド $00
実行フェーズ コマンド$15
MODE SELECTコマンド
データアウトフェーズ
ステータスフェーズ
メッセージインフェーズ
バスフリーフェーズ
セレクションフェーズ ID=5 (デバイスあり)
コマンドフェーズ
コマンド $08
コマンド $00
コマンド $00
コマンド $00
コマンド $01
コマンド $00
実行フェーズ コマンド$08
READ(6)コマンド レコード=000000 ブロック=1
データインフェーズ
ステータスフェーズ
メッセージインフェーズ
バスフリーフェーズ
セレクションフェーズ ID=5 (デバイスあり)
コマンドフェーズ
コマンド $08
コマンド $00
コマンド $00
コマンド $10
コマンド $03
コマンド $00
実行フェーズ コマンド$08
READ(6)コマンド レコード=000010 ブロック=3
データインフェーズ
ステータスフェーズ
メッセージインフェーズ
バスフリーフェーズ
[... 以下 READ(6)コマンドの繰り返し ...]
おまけ
ちなみに、イニシエータモードが無い変換基板であっても、USB-SCSI 変換があれば実HDDからイメージ吸い出しも RPI 上で完結できますが、今となっては実HDD並みに入手が難しいかも。
とりあえず USB-SCSI 変換で Raspberry Pi に DK312 をつないで直接読み出し。いろいろ不穏な音を立てているが…… pic.twitter.com/WXaqcwK1E9
— Izumi Tsutsui (@tsutsuii) 2018年5月1日
カッ カッ カッ カッ カッ カッ……
— Izumi Tsutsui (@tsutsuii) 2018年5月1日
ガリッ!!!
ガコン!!
……
カキン カッ カッ カッ
などという不穏な音がしまくっている
何度も心臓に悪い音とリードエラーに見舞われながらも、ドライブの向きを変えたりしながらリトライして5回目に全領域読み出し成功。ふぅ…… pic.twitter.com/w0G54HezU6
— Izumi Tsutsui (@tsutsuii) 2018年5月1日
なお、USB-SCSI変換の SCSI側を RaSCSIにつないで USB側を Raspberry Pi 自身につなぐという哲学的な操作も特に問題なく動くようです。
なお、GAMERnium版の変換基板の場合は TERM POWER は供給されない (パターンはあるが FUSE とダイオードが実装されていない) ようなので、 USB-SCSI変換を使用する場合は TERM POWER 用の 5V電源をつないでやる必要があります。
あいぼむ版の変換基板では TERM POWER 用の部品も実装されていて TERM POWER ON/OFF のスイッチもついていますが、ラズパイの 5V電源容量的には外から 5V供給したほうがよいかも? (あいぼむ版の細かい動作については未確認です)
おまけ 2
LUNA の SCSIチップは実は富士通SPC (MB89352) で X680x0 と同じです。なので、テストとしてはあまりうれしくないかな、ということで SPARCstation20 (SCSI チップは NCR53C94系) でもざっとテストしてみました。が、こちらは問題ありのようでした。
RaSCSI + SPARCstation もちょっとだけ試してみたところ、boot PROM とカーネルの device probe は OK だけれども、カーネルでディスクアクセスするといろいろとエラーが。タイミングの問題か、タグキューイングコマンド関連か pic.twitter.com/AF66ssltBx
— Izumi Tsutsui (@tsutsuii) 2018年5月1日
このあたりはまたぼちぼち調べたいと思います。