前回のエントリからだいぶ時間が空いてしまいました。前回似非RAMディスクのハードウェアを作ったので、今回はMSXで動かすところを書いていこうと思います。その際にDISKBIOSがなくても(FDDなしの機種でも)似非RAMディスクを作ることができたので、その方法を記載します。
前回のエントリはこちら
一般的な手順として、似非RAMディスクを使えるようにするにはMGINST.COMで似非RAM用のカーネルを似非RAMディスクに書き込む必要があります。現在似非RAMディスク関係のツールはサイバラさんの似非職人工房・非公認出張所でダウンロードできます)
MGINST.COM を実行するにはDISKBIOSのイメージが必要になります。DISKBIOSは呼び方がまちまちで、DOS1カーネル、DISKカーネル、DISKROMなどとも呼ばれるようです。
MGINST.COMは、似非RAMディスク、似非SCCディスク、MEGA-SCSIにシステムをインストールするソフトです。
インストールにはディスクROMのカーネルファイルが必要です。
カーネルファイルの作成には、KSAVER.COMを使用して下さい。
MGINST.DOCより引用
DISKBIOSが必要な理由は、オリジナルのDISKBIOSにパッチを当てることでFDDへのアクセスをRAMへのアクセスに変換しているためです。すごい技術ですよね。そのためDISK BASICからもMSX-DOSからも普通のフロッピーと同様の使い方が可能になっています。まじすごいです。
ところで私が持っているMSXはPanasonicのFS-A1でFDDがないため、DISKBIOSが載ってません。MSXのBIOSイメージはググればいくらでも転がってはいるものの、違法コピーですので使用するのはライセンス違反となります。
そこで目をつけたのが konamiman さんが開発している Nextor です。MSX-DOS2互換のOSとして開発されており、DOS2だけでなくDOS1のカーネルとしても動作するとのことです。このNextorとNextorPatcherを使って似非RAMディスクを動作させることができました。
NextorPatcherは、にがさんのHPで公開されているツールで、Nextorのカーネルにパッチを当てて似非RAMディスク対応を行うツールです。MGINST.COMで行っていたパッチをNextorカーネルに対して行うことができものだと思ってます(多分)。
さらにNextorPacherのすごいところなのですが、似非RAMディスクカーネルのイメージを作るだけでなく、カーネル+初期ディスクイメージのROMイメージを作成できてしまいます。COMMAND.COMやMSXDOS.SYSなど、必要なファイルをあらかじめROMイメージに含めることで、書き込んだらすぐにDOSが使える似非RAMディスクを構築することができます。
これはつまり、PC→MSX方向のファイル転送が可能になるということです。これでやりたかったことの半分が実現できます。似非RAMディスクを読み出して解析し、ファイルを取り出せれば双方向のやり取りも実現できそうです。
必要なもの
似非RAMディスクを作るのに必要なものは以下です。ソフトウェアは合法的に入手が可能なもののみです。
DOS1を起動させたい場合は、MSXDOS.SYS, COMMAND.COM が必要になります。これについては無料でライセンス的に問題なく入手できる方法を私は知りません。MSX FANの付録ディスクや、MSX0 付属のmicroSDカードなどから入手することができます。
- ソフトウェア
- Nextor Patcher
- Nextorカーネルイメージ
- (optional) MSXDOS.SYS, COMMAND.COM (DOSを使いたい場合)
- ハードウェア
- 似非RAMディスク
- カートリッジ リーダ・ライタ
ツール・イメージのダウンロード
それぞれ以下からダウンロードすることができます。
Nextor Patcher
にがさんのHPからダウンロード可能です。
私がダウンロードしたときは NextorPatcher.1022.zip というファイル名でした。
上記ページには以下のような注意書きが書かれていますが、NextorをDOS2として使うときの注意点であり、DOS1互換モードで使う分にはメインRAMが64KBでも動作するようです。(無改造のFS-A1でも起動しました)
注意! Nextorの運用にはマッパメモリ 128kB以上が必要。ベーシックなMAIN RAM 64kBのMSX2+以下の機種では、本体を改造してメモリを増設するか、空きスロットにマッパメモリカートリッジを装着のこと。
Nextorカーネル
Nextorカーネルは以下からダウンロードします。
上記サイトの以下のリンクからイメージをダウンロードします。
私が実行した時点では Nextor-2.1.0.MegaFlashSDSCC.2-slots.ROM というファイルがダウンロードできました。バイナリパッチを当てる関係で、他のバージョンや他のイメージは使用することはできません。必ず Nextor-2.1.0.MegaFlashSDSCC.2-slots.ROM をダウンロードしてください。
私が動作を確認した Nextor-2.1.0.MegaFlashSDSCC.2-slots.ROM のmd5とsha256のハッシュを書いておきます。
- MD5: 759f329c9dc9e3438a2b48092cdc6a93
- SHA256: 50f51530101a13660c4f73b425085f3a1b89841d75f175b93f81c6ef5001df65
NextorPatcherでイメージ作成
NextorPatcherはwineでも正常に動作します。Linuxユーザでも安心です。
NextorPatcher.1022.zip を展開すると以下のようなフォルダ構成になっています。(他にもファイル等がたくさんあります)
それぞれ以下のような意味のフォルダになってます。
- ImageROM
- 生成後のROMイメージが格納されます
- MSXFiles
- ROMに初期ファイルとして格納したい、MSXへ転送したいファイルを格納します
- NextorROM
- ダウンロードしたNextor-2.1.0.MegaFlashSDSCC.2-slots.ROMを格納します
- SaveObjectFiles
- 設定等が保存されるディレクトリです
最低限、NextorROMにNextor-2.1.0.MegaFlashSDSCC.2-slots.ROMをコピーすればOKです。
NextorPatcherを起動します。Wineを使うなら以下のように起動できます
$ wine NextorPatcher.exe
起動したらNextorRomの右にある「…」を押してNextorのイメージを選択します。
あとは「CartridgeType」を「EseRam」を選択して容量を選びます。前回512kBの似非RAMディスクを作ったので512kBを選択します。
最低限は必要な設定はここまでです。必要に応じで下部の「add」を押してROMイメージにファイルを追加することもできます。MSXDOS.SYSやCOMMAND.COMをお持ちの方はここで追加すればMSX-DOSが使用できます。
今回は試しに以下のファイルを書き込んでみました。
- MSXDOS.SYS
- COMMAND.COM
- NEXTOR.SYS
- COMMAND2.COM
メモリが足りないのでDOS2は起動しないのですが、ものは試しとDOS1, DOS2の両方のシステムファイルを格納してイメージを作りました。
設定が終わったら「CreateImage」ボタンを押してイメージを生成します。ファイル名を入力すれば「ImageROM」ディレクトリにROMイメージが作成されます。
DOSのディスクイメージなので dos.8k というファイル名で作製してみました。
ImageROMディレクトリを見てみると、256KBのROMイメージファイルが作成されていることがわかります。
$ ls -l ImageROM 合計 1664 -rw-rw-r-- 1 bucchi bucchi 262144 8月 12 15:46 dos.8K
似非RAMディスクに書き込み
FDDを持ってる人はMSX-DOSを起動し、NGINST.COMなどを使って似非RAMディスクに書き込めばOKです。
FDDがない場合はROMカートリッジリーダが必要です。以前作製したROMカートリッジリーダで書き込みを行いました。
いずれは上記も基板を起こしたりRaspberry Pi PicoでPCから簡単に制御できるようにしようと思います。
自前のpythonスクリプトを使って以下のように書き込んでみました。
>>> import cartridge
>>> cart = cartridge.Cartridge(1, 0x20, 0x21)
>>> cart.installMegaRam('dos.8k')
実機MSXで動作確認
さて、ちゃんとRAMディスクとして使えるのでしょうか・・・
流行る気持ちを抑えて電源を入れると・・・
キターー!MSX-DOSが起動しました!なつかしい・・
Main RAMが64kBしかないのでDOS2は起動しませんが、DOS1として起動させることができました!!
Disk BASICも問題なく動作しました。LOAD, SAVE などファイルに関する命令も正常に動作しました。
これで目的だったPCにバックアップしたファイルや、今後開発する予定のソフト等をMSXへ持っていくことができるようになりました!
FDDが無いMSXでも合法的な手段でファイルを扱えるようになりました。これでようやくMSXが外界とつながったことになります。
余談: ハマったところ
・・・と、結果だけ書いているのですんなり動いたように見えますが、実際はなかなかうまく動いてくれず四苦八苦していました。
最初にイメージを書き込んだ似非RAMディスクで起動させたとき、DOSは起動して喜んだのも束の間、ファイルが書き換えられないことがわかりました。
以下のように、DEL *.* を実行してもファイルが消えず、ROMディスク状態だったのです。
ROMカートリッジリーダでは書き込みはできているので、似非RAMディスク自体は間違っていないと思い込んでいて、openmsx-debugger で似非RAMディスクの書き換え処理を解析したりしていました。しかし、ソフトウェアの動作は想定通りの動作をしており、なぜ動作しないのか原因はわかりませんでした。
もうこうなったら波形を見るしかないと、ロジックアナライザで信号を確認してみたところ・・原因がわかりました。似非RAMディスクの回路が間違っていたのです。
0x4000のアドレスへの書き込み要求でトリガをかけた波形が以下です。
/WRがLowになって書き込みが実行されているにも関わらず、RAMWR(SRAMの/WR)がLowになっていません!!!
原因をよくよく調べると、/CS1, /CS12がアサートされていないではありませんか!当初、書き込み要求時でも/CS1や/CS12はアサートされると勘違いしていたのです。だってCSだもん。
以下がテクニカルハンドブックや、DataPack に記載のタイミングチャートですが、タイミングチャートをみても、CSがRead専用なんて読み取れないですよね??
Readのときしかアサートされないなら、CS は RD の点線ブロックの中に入れてよ・・。
ただ、MSX2+回路例を見ると、確かに/RDがアサートされたときだけ出力される信号になっていました。
確かに/RDと/MREQがLowの時のみ、74LS139の/GがLowになってCS0,1,2が出力されるようになっています・・・。CSじゃなくてOEとかの名前にしてくれてれば誤解しなかったのに・・。
最初の回路は、SRAMの/WRがアサートされる条件に「/CS12がLow」という条件も加えていたので、これを /SLTSL に変更することで無事に書き込めるようになりました。ちなみに、先日のエントリの回路図は修正後のものです。
安価なものですが、ロジアナ持っててよかった・・
使ってるロジアナはDreamSourceLabの今は売っていない初代DSLogicです。10年以上前に1万円くらいで買った気がします。
(2024/8/14 12:59時点)
まとめ
Nextor のROMイメージを使うことで、Disk BIOS のROMイメージを持っていなくても、合法的にMSXでファイルを扱えるようになりました。ROMカートリッジリーダが必要になるので決してハードルは低くないですが、ライセンス問題を回避しつつ、DOSやDiskBASICが使えるようになるのは非常に意味があることだと思います。
Nextor の作者の Konamiman さんをはじめ、NextorPatcherを作ったにがさん、ゆうくんさんなど、先人たちの偉業に感謝したいと思います。