1chipMSXにRAMDISK その12017年02月01日 22:27

OKEIさんがNextorにさらにパッチを適用してくれたおかげで、ROMDISKがRAMDISKになりました。
OKEIさん、本当にありがとうございます。

さらに、その修正箇所を眺めていたらRAMDISKを作成するBANKを移動できる事に気が付き、今までMEGASDのバンク10h~にしか置けなかったRAMDISKをBANK38h~に移動できた。
その結果、BIOSロード機能用のBIOSの並び順がこれまでの1chipNextorMSX用のBIOSファイル+ディスクイメージという使いやすい構成に。
一番最後に配置ということで、ディスクサイズも512KBまでの任意のサイズのディスクイメージを利用できると思います。
※内蔵BIOSに組み込んだRAMディスクのサイズは512KBにしています。
あと、思いついたのでRAMディスクに書き込みノッチもつけてみた。

この数日、どんどん新しい事ができるようになって嬉しい悲鳴です。本当。
むしろテストとドキュメントが追い付かない…

とりあえず、ドキュメント無しの1chipNextorMSX RAMDISKベータ版

ドキュメント類は週末にまとめます。

追加・変更機能
・内蔵RAMディスク(512KB)実装
・起動時F9押下 RAMDISK切り離し
・動作時SHIFT+F9押下 RAMDISK書き込み可、不可切替(デフォルト書き込み可)
・一番左のLEDの意味変更
 点灯 RAMDISK有効かつ書き込み可
 消灯 RAMDISK切り離し もしくは RAMDISK書き込み禁止

BIOSロード機能用のファイル構成(960KB)
 PATCH済みNextor(128K)+MAINROM(32K)+SUBROM(16K)+FM(16K)
  +Dummy1 or KNJDRV(64K)+KANJIROM(128K)+Dummy2(64K)+DISKIMG(512KB)

DISKIMGは512KBまでの任意のサイズを設定可能。(とは言え、BIOSロードはセクタ直接読むので512KB以下のイメージ指定した場合でもセクタ上にデータあったらそのまま読んでしまいます)
DISKIMGより前のファイル構成はこれまでの1chipNextorMSXのBIOSと同じ並びなので以前のものもそのまま使えるはず。

MEGASDのメモリマップは以下のようになっています。
-- ISLTERM 600000-6FFFFF(1024KB)
-- (ROM_DISK) 600000-61FFFF( 128KB) MEGASD(ISLTERM BANK  0- 15)
-- ROM_MAIN 620000-627FFF(  32KB) MEGASD(ISLTERM BANK 16- 19)
-- ROM_EXTR 628000-62BFFF(  16KB) MEGASD(ISLTERM BANK 20- 21)
-- ROM_OPLL 62C000-62FFFF(  16KB) MEGASD(ISLTERM BANK 22- 23)
-- ROM_FRM1(SLOT0-1) 630000-63FFFF(  64KB) MEGASD(ISLTERM BANK 24- 31)
-- ROM_KANJI 640000-65FFFF( 128KB) MEGASD(ISLTERM BANK 32- 47)
-- ROM_FRM2(SLOT0-3) 660000-66FFFF(  64KB) MEGASD(ISLTERM BANK 48- 55)
-- (IMG_DISK) 670000-6EFFFF( 512KB) MEGASD(ISLTERM BANK 56-119)
-- 6F0000-6FFFFF(  64KB) MEGASD(ISLTERM BANK120-127)

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を利用している。

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

1chipNextorMSX更新 (Ver1.04)2017年02月04日 21:33

Ver1.0.4
 MegaSDにRAMDISK搭載(起動時F9で切り離し可能)
  ※RAMDISKにはNextorOSとMM(2.07k)導入済み
 
先日のベータ版とほとんど変わってません。
ドキュメントとソース同梱してます。

ダウンロードはこちら

2/11 ドキュメントの不備を修正(れふてぃさん、ご指摘ありがとうございました。)

1chipNextorMSXのOS切替2017年02月11日 19:29

1chipNextorMSX ver1.0.4にMSX-DOS2への切り替え機能を追加してみた。
起動時、F10押下でNextorではなくMSX-DOS2のROMが有効になる。
その為、SDCARDにMSXDOS2.SYSを入れておけばファームの書き換えをせずにDOS2とNextorを切り替え可能(なんちゃってデュアルブート)
※当然ですけどMSX-DOS2では内蔵ROMDISK(RAMDISK)は無効になります。

あと、ついでにMSX-DOS2の方もSDHC対応してみた。
Nextorで初期化したSDHCなら利用可能なはず(当然、第一パーティションのみ)。

ただし、SDSC/SDHCのフラグを勝手にメモリ上(FD40h)に配置してしまっているので、それが原因で問題起こるかも。(フラグの値はSDHCの時03h、SDSCの時02h)
使っても安全なアドレスって何調べればわかるんだろう?

ダウンロードはこちら

1chipNextorMSXの最新版に統合しました。

なんだか2017年02月11日 20:11

ここの所スパムコメントがひどくなっているのでコメントを確認後公開&パスワード付きに変更。

パスワードはコメントの所にもある通り半角大文字で「MSX」。