1chipMSXにRAMDISK その22017年02月03日 21:36

前エントリの通り1chipMSXのMEGASDにRAMDISKを内蔵したけど、その際の覚書

MEGASDのバンク01h~0FhにNextorのROMを配置した場合、
バンク10h~FATフォーマットのディスクイメージを配置すると、そのイメージがROMDISKとしてシステムに認識される。
OKEIさんによる解析の結果、標準のNextorのROMは、ディスクへの書き込みルーチンがない事が判明しており、イメージは必然的に読み取り専用=ROMDISKとなる。
これまたOKEIさんがNextorのROMに書き込みルーチンを追加してくれたおかげで、ディスクイメージが読み書き可能となり、RAMDISK化が実現した。

RAMDISKの配置位置はバンク10h~で固定となる。
ただし、こちらもNexotrのROM内のバンク指定箇所(ベースアドレス)を書き換えることでディスクの開始バンクを変更できる。

その際のバンクの指定方法に注意が必要。
これが似非RAMであれば、読み取り時はバンク番号そのまま、書き込み時はバンク番号+80hとなる。
※1Mbyteのメモリ空間にアクセスできる似非RAMのバンク番号は01h~7Fhなので、最上位ビットを1にすると書き込みできるイメージ。

ただし、1chipMSXの場合は後述の理由により読込、書込共にバンク番号+80hにしなければならないらしい。

なぜ最上位ビットを1にするかというと、MEGASDのバンク指定時に40h~7Fh(Byteでいうと01xxxxxx)を指定するとMMC/SDへのアクセスモードに、60h~6Fh(Byteでいうと0110xxxx)を指定するとEPCSへのアクセスモードになってしまうから。
実際、RAMDISKをバンク38hに移動した際、バンクのベースアドレスとしてそのまま38hを指定した場合、ファイルエントリは読めているようだが、Nextor.sysの読み込みには失敗した。バンク切り替えで40h以降にアクセスした際MMC/SDモードに変更してしまったことが原因と考えられる
ディスクの先頭64KBだけ読めてるんだと思う。
最上位ビットを立ててB8hと指定したら正常動作した。

ちなみに、バンク10hから256KBのRAMDISKを配置した場合、利用バンクは10h~2Fhとなり、この場合は読込のベースアドレスに10h、書き込みのベースアドレスに90h指定しても動作する。
もちろん、読込のベースアドレスを90hとしても動作した。
※はじめ読込、書込両方90hに変更した場合うまく動いていなかったと思ったんだけど勘違い。
※改めて書き換え行ったらきちんと動いていた。なんかおかしな値指定していたらしい。

ということで、ディスクイメージをバンク38hから配置している1chipNextorMSXのRAMDISK版は、バンク指定はB8hを利用している。

※と、いろいろ書いているけど、調べてから実装したのではなく、動いてから改めてソース確認して理由を理解したのでメモ。結構感覚(思いつき)でコード組んでます。<-あまりよくない。

コメント

_ OKEI ― 2017年02月04日 19:55

Bank 40h-7FhってMegaSDのレジスタですよね。
忘れてた。

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※投稿には管理者が設定した質問に答える必要があります。

名前:
メールアドレス:
URL:
次の質問に答えてください:
答えは「MSX」です。

コメント:

トラックバック

このエントリのトラックバックURL: http://miyako.asablo.jp/blog/2017/02/03/8349507/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。