Nextor 3.0.0 はまだベータ版である。 この報告は Nextor 3.0.0 Beta2 で確かめたものである。「できていること」「できていないこと」、「6. Nextor 3.0.0 Beta2 での注意」に挙げたことはもちろん、挙げていないことも、今後の Nextor の更新で直ったり変わったりすることがある。
1. MEGA-SCSI について
MEGA-SCSI は 似非職人工房 の SCSI カートリッジである。SCSI コントローラ(富士通 MB89352A、以下 SPC)と、カーネルを入れる SRAM を持つ。
- SRAM は 8KB 単位のバンク切り替えで見える。ノーマル版は ASCII8 型、SCC 付き版は SCC 型(コナミ)のバンク切り替え
- カーネル(元は MSX-DOS2 ベース)は ROM ではなく SRAM に入っている。そのため、フラッシュ ROM の書き換えなしで、別のカーネルを入れられる
- SRAM はモデルによって 128KB〜1024KB。カーネルの後ろの SRAM を「似非 RAM ディスク」として A: ドライブに割り当てている(この版の Nextor ではまだ使えない。今後サポートする予定)
- SPC は 4000h〜5FFFh にしか出せない(6000h〜7FFFh への書き込みはバンク切り替えになるため)
Nextor 2 / 3 のどちらにも MEGA-SCSI のドライバはなかった。Nextor 3 からはドライバが本体とは別に作られるようになったので、今回は Nextor 3 用として作った。
2. 作ったもの
| ファイル | 内容 |
|---|---|
NXMS_A8.ROM | ノーマル版用の Nextor 3 ROM イメージ(128KB) |
NXMS_SCC.ROM | SCC 付き版用の Nextor 3 ROM イメージ(128KB) |
NXMSINST.COM | インストーラ。SRAM の先頭 128KB に ROM イメージを書き込み、照合する。バックアップと復元もできる |
- ROM イメージは、Nextor 3.0.0 Beta2 のカーネル(base ファイル)にドライバを加えたもの。手順は Nextor 付属の mknexrom と同じ
- SRAM 128KB にちょうど収まる大きさにしてある。SRAM がそれより大きくても、書き換えるのは先頭 128KB だけ。確かめたのは 128KB と 1024KB だが、256KB / 512KB でも問題ないはずである
3. ドライバの仕組み
3.1 SPC の扱い
SPC は 4000h〜5FFFh にしか出せないので、ドライバのバンクを前半(4000h〜5FFFh)と後半(6000h〜7FFFh)に分けた。
- 前半: Nextor とのやりとり(問い合わせ、読み書きの受付、文字列)。SPC には触らない
- 後半: SPC を操作するコードをすべて置く。SPC を 4000h〜5FFFh に出している間は前半が見えないので、割り込みを止めて後半のコードだけで動く
- データの受け渡しは page 1 以外(スタックなど)を使う
SCSI の手順(選択、コマンドの送り方、ステータスとメッセージの受け取り)は、元の MEGA-SCSI BIOS を解析して、それと同じにした。
3.2 読み込みと書き込み
依頼人からの注文は「読み込みはできる限り速く、書き込みは安全に」だった。動画プレイヤーのように、ディスクから連続して読むソフトを想定している。オリジナルの MEGA-SCSI(MSX-DOS2 カーネルベース)では、昔の HDD や MO は問題ないが、SCSI2SD や SCSI2CF への書き込みで問題が出ていた。
- 読み込み: 1 セクタの先頭で SPC の FIFO にデータが来るのを待ち、あとは 512 バイトを待ちなしで一気に読む(LDI を 512 個並べた「疑似 DMA」)。元の BIOS と同じく、待ちはハードウェアが入れる
- 書き込み: 8 バイトごとに FIFO が 空になる のを待つ。元の BIOS は「満杯でない」ことしか見ていなかったので、遅い機器(SCSI2SD、SCSI2CF)では 8 バイトの FIFO があふれることがあると考えた
3.3 機器の検出
- 起動時に SCSI バスをリセットし、ID 0〜6 に INQUIRY を送って機器を探す(LUN 0 のみ)。見つけた機器の名前を表示する
- 容量は READ CAPACITY で調べ、読み書きは READ(10) / WRITE(10)。セクタ番号は 32 ビットなので、SCSI2SD の設定で 2GB を超える容量にしても使える
- 取り外しできる機器はメディアの有無を確かめる
3.4 ハングしないための上限
実機で、SCSI 機器がつながっていない、または電源が入っていないと、起動時の検出で止まることが分かった。SPC の状態を待つループに終わりがなかったためである。
- 待ちのループすべてに上限を付けた
- 選択が終わらないとき(バスが応答しないとき)は「SCSI bus not responding」と表示して、検出を打ち切る
4. インストーラ NXMSINST
NXMSINST イメージ [/B[:バックアップ]] [/S:スロット] NXMSINST /B[:バックアップ] [/S:スロット]
- MEGA-SCSI を探し、機種(ノーマル版 / SCC 付き版)とイメージが合っているかを確かめてから書き込む
/Bを付けたときだけ、書き込む前に SRAM の先頭 128KB をファイルに保存する。同じ名前のファイルがあれば上書きするかを聞く- 書き込み中は DOS が使えないので、イメージを先にメモリに読み込む。マッパー RAM が足りない分は VRAM の後半 64KB を使う(Nextor の下ではマッパー RAM の空きが少ないため)
- 書き込んだら照合して、画面に「DONE」(緑)または「WRITE ERROR」(赤)を出し、リセットボタンを待つ
実機で直したこと
- ノーマル版が見つからない: 別の DOS で起動していて MEGA-SCSI のカーネルが動いていないと、リセット直後のバンクの状態になっていて、識別用の文字列が見えない。自動で探すために別のスロットにも書き込んでみたところ、エミュレータで本体の内蔵 ROM に触れてしまったので、自動での探索はやめた。代わりに
/S:スロットでスロットを指定できるようにし、指定したスロットでは SPC があるかを必ず確かめるようにした。SRAM が空でも書き込める - 画面が緑一色になる: 書き込みが一瞬で終わるので、メッセージを読む前に画面が緑一色になっていた。SCREEN 0 では VDP の R#7 の上位 4 ビットが文字の色なので、そのまま緑を書くと文字が消えていた。文字の色を残して背景だけを緑 / 赤にし、説明は確認(Y/N)の前に出すようにした
- バックアップの扱い: 当初は必ずバックアップを取り、既存のファイルは上書きしなかった。試験を繰り返すと邪魔になり、フロッピーに 128KB の空きがないこともあるので、
/Bを付けたときだけ取り、上書きは確認するようにした
5. 確かめたこと
実機(Panasonic FS-A1ST + SCSI2SD V4、2GB)
| 機種 | 確かめたこと |
|---|---|
| SCC 付き版 1024KB | インストール、SCSI2SD からの起動、Z80 / R800 での読み書き(720KB のフロッピーのイメージを 5 回コピーし、内容が一致)、CALL FDISK でのメディアの認識 |
| ノーマル版 1024KB | /S:1 でのインストール、720KB のファイルの読み書き(Z80 / R800) |
| 共通 | SCSI 機器の電源を切った状態でも起動が止まらない |
エミュレータ(openMSX、FS-A1ST)
- ノーマル版 128KB / 1024KB、SCC 付き版 1024KB の 3 構成で、インストールと復元(バックアップと書き込み前の SRAM の一致、書き込んだ内容の照合、128KB 以降に触れていないこと)
- 3 構成で、SCSI ハードディスクのイメージから起動し、300KB のファイルをコピーして比較
6. Nextor 3.0.0 Beta2 での注意
MEGA-SCSI のドライバではなく、Nextor 3.0.0 Beta2 のカーネルやほかのドライバの動きである。Beta 版なので、今後変わる可能性がある。
6.1 ドライブの割り当て
Nextor 3 では、起動時にメディアがある機器から先にドライブ名が割り当てられるようである。MegaFlashROM SCC+ SD(Nextor 3 用ドライバ)では、SD スロット 2 つと ROM ディスクのドライブ名が、SD カードの有無で次のように変わった。
| スロット 1 | スロット 2 | A: | B: | C: |
|---|---|---|---|---|
| なし | なし | ROM ディスク | スロット 1 | スロット 2 |
| あり | あり | スロット 1 | スロット 2 | ROM ディスク |
| あり | なし | スロット 1 | ROM ディスク | スロット 2 |
| なし | あり | スロット 2 | ROM ディスク | スロット 1 |
- 起動ドライブ(A:)が変わるので、AUTOEXEC.BAT が実行されないことがある。基本的なプログラムを入れた ROM ディスクは常に A: であるのが望ましい
- 同じドライバでは、デバイス番号の順番も Nextor 2 用から変わっていた(Nextor 2: 1 = ROM ディスク、2 / 3 = SD スロット。Nextor 3: 1 / 2 = SD スロット、3 = ROM ディスク)。デバイス番号から SD スロットを決めているソフトは、Nextor 3 で動かなくなる。順番を固定するか選べるようにしてほしいと、Nextor の Issue #262 で報告した
6.2 Nextor 2 のカートリッジを認識しない
Nextor 3 のカーネルが起動すると、同時に挿した Nextor 2 のカートリッジにはドライブが割り当てられない。
- SCC 付き MEGA-SCSI(Nextor 3)をスロット 1、似非SDisk(Nextor 2.1.0 Alpha)をスロット 2 に挿すと、SCSI2SD の Nextor 3 から起動したが、似非SDisk にはドライブがなかった。起動時に似非SDisk の初期化メッセージは出ていた
- MSX-DOS / MSX-DOS2 のドライブ(本体のフロッピーなど)は Nextor 3 でも使える。Nextor 2 では MSX-DOS / MSX-DOS2 のドライブを使えたので、下位互換が一つ減った形である
7. できていること・できていないこと
できていること
- ノーマル版、SCC 付き版で Nextor 3 が動く
- SCSI ID 0〜6 の機器の検出、読み書き、32 ビットのセクタ番号
- 速さ優先の読み込みと、安全側の書き込み
- SCSI 機器がなくても起動が止まらない
- インストーラによる書き込み、照合、バックアップ、復元
できていないこと・確かめていないこと
- 元の MEGA-SCSI カーネルでフォーマットしたディスクの互換性(Nextor の
CALL FDISKで作り直す前提) - 似非 RAM ディスク。SRAM の空きを、起動ドライブ(A:)になる SRAM ディスクとして使えるようにする予定
- 元のカーネルのそのほかの機能(CALL 命令など)
- SPC を直接操作するソフトのための仕組み(元のカーネル用のソフトは動かない)
- Nextor 2 用のドライバ
- 実機での SRAM 128KB / 256KB / 512KB の版、
CALL FDISKでの実際のフォーマット、2GB を超える容量、SCSI2SD 以外の機器(HDD、MO、SCSI2CF)、FS-A1ST 以外の機種
8. 権利
- Nextor は Konamiman(Néstor Soriano)氏の作品で、MSX-DOS は MSX Licensing Corporation の著作物である。ROM イメージには Nextor 3.0.0 Beta2 のカーネルが入っているので、Nextor の使用条件(配布物に同梱、商用利用は不可)に従う
- MEGA-SCSI は 似非職人工房 の製品である。元のカーネル(MSX-DOS2 を含む)は配布物に入れていない