修理したSASIポートでSxSIの力を借りてBlueSCSIを繋いでみました。BlueSCSIにはパリティを無効化する設定があり、もともとX68000+SxSIで動くという報告があったので、それの追試験と、容量の限界に対する詳しい情報についてです。
まずSxSIですが、はうさんのch30_omakeの最新版をこちらから頂き、SRAM常駐させてます。
https://t.co/yjNQHjeJJu
— はう (@Hau_oli) August 17, 2021
ファイル倉庫です。ch30_omake.sysの新しいのとかを入れております。
Xellent30実機での動作は確認済みですが、ストレージとかいろいろぶっ壊れても構わないよの人柱モードでの運用をどうか宜しくお願い致します。無保証です。
Phantom搭載機なのでfull版を入れてます。これでSASIポートに繋がったSCSIデバイスからbootできるようになりますし、SxSIのドライバなどをconfig.sysに登録しなくてもSASIポート版SCSI IOCSが利用できる状態でbootします。この状態だと起動時にSCSI IOCSが見えるからデバイスドライバはhumanのやつが利用されるのかな?
ちなみにSCSI 0番からはbootできませんでした。デバイス名も取得できず名前が一覧に出ませんでした。本来SxSIでは番号を空けずに0番から受けてく事が推奨されているので、0番が使えないのは030_omakeの制限なのかもしれません。この点については詳しく調べずに0版はDynaPortをアサインしてしまいました。これについては今回は触れませんが、SCSIに繋がるWIFIポートになります。READ/WRITEしたものがイーサーネットに出入りするので、将来的にはNeptune互換で使えるようドライバを書きたいです。
で、今回詳しく記録に残すのはハードディスクやファイルシステムの容量関係の話。SxSIやSCSIで利用できる最大サイズやファイルシステムの限界の話です。
ストレージのコピー終わり!
— とよしま (@toyoshim) February 27, 2024
SxSI運用に切り替えた。ch30 omake fullからbootしてるから、config.sysとかそのままで他のSCSIマシンでもbootできるはず。
あとSCSI0でDynaPORTを有効にしてる。出来たらネプチューン互換のドライバ用意したいな。 pic.twitter.com/me94GS34kc
SCSI IOCSの仕様的にはブロックサイズ256B/512B/1024Bがサポートされているようです。指定可能な論理アドレスサイズ×ブロックサイズでアクセス可能なHDDの範囲が決まるので、一番大きな1024Bを設定するのが良いです。BlueSCSIではファイル名で指定するのでHD1_1024.HDAみたいなファイル名になります。
またSCSIではREAD6/WRITE6/SEEK6という21bitアドレス指定のコマンドグループと、READ10/WRITE10/SEEK10という32bitアドレス指定のコマンドグループがあります。これらはSCSI IOCSではREAD/WRITE/SEEKとREADEXT/WRITEEXT/SEEKEXTとしてAPI化されているようです。動作をみた感じではアクセスする範囲に応じて必要ならEXT系を利用して*10の方のコマンドが出てきており、32bitフルにアクセスできるのではないかと思います(注1)。つまり4GB x 1024Bなので4TBまではSCSI的にはアクセス可能。
一方でファイルシステム上の制限もあります。HumanはFAT16を採用しているため、クラスタアドレスは16bitで指定できる範囲に限られます。4GBの仮想HDDに対してformatコマンドを使って最大サイズのパーティションを確保したところ、クラスタサイズは65535Bでフォーマットされました。つまりは4GBフルに使えてます。また同じイメージをSxSIのscsiformatでフォーマットしたらクラスタサイズは倍の128KBになり、これも正しく使えているため、おそらく4GB以上のディスクでもクラスタサイズが適切に大きくなって扱える可能性が高いです。軽く確認した範囲では16GBを超えると認識時にセクタサイズが大きすぎると言われてリセットになります(注2)。これも厳密には16381MBが限界だったと思います。ただ、4GBが32bitで表現できる限界なので、これを超えるとアプリケーションレベルで色々なところに弊害が出てきます。例えばディスク空き容量なんかは正しく表示できなくなります。よって、安全に使うなら4GB(MB指定だと4095MB)で使うのが無難なのかなぁ、と思います。
あと実機上での利用では関係ないですが、BlueSCSIのイメージをDiskExplorerを使ってWindowsから読み書きしようとした場合、scsiformatでフォーマットしたイメージはパラメータを調整しても読めませんでした。SCSI搭載機でformatを使って初期化したイメージはプリセットで読めているので、scsiformatは避けるのが無難かもしれません。原因は深く追っていないので、倍になったクラスタサイズのせいかもしれず、別のサイズのイメージだったら違う結果になるかもしれません。またDiskExplorerも古いソフトなので32bitの4GB制約があるかもしれないので、イメージからのデータ読み書きには4GB以下のイメージを使うのが無難でしょう(注3)。
以下、立花さんに教えてもらったLIBCのソースに含まれるSCSI.DOCを読んで判明した(というか大昔に読んだ記憶あったので思い出した?)情報です。
(注1)SCSIコマンドを発行してディスクを読むドライバはハードディスクの先頭付近に置かれているようです。なので32bitアドレス版のコマンドを使っているかどうかはフォーマットしたプログラムに依存するかもしれません。
(注2)この制約はformat.xが書き込むドライバの制限だそうで、LBAが24bitに制限された結果のようです。確かにこの実験はXVIでやっているので、format.xのドライバに依存してそうです。
また、format.xでフォーマットした際に1GB以上のHDDから起動するためには田圃さんのGOVERHD.xが利用できるそうです。自分はch30_omakeからこのパッチなしで起動できてしまっています。田圃さんのSCSI周りの数々の功績には頭が下がります。BlueSCSIも田圃さんのArdSCSinoのforkのforkです。
以下、田圃さんのコメントに基づく注釈です。
(注3)SEEKがsigned 32bitなので、2GBを超えるファイルの操作は危険が伴います。より安全を見るなら2GBが無難です。