Nextor OS2016年12月17日 10:37

Nextor Basic
れふてぃさんにお声がけいただき、1ChipMSXのDISKBIOSのサイズ変更に挑戦中。

64KB→128KBということで、スロットに収まらないからバンク切り替え必須だよなぁ…内部でメガロム増設みたいなことするのかなぁとか考えながら調べてみることに。

とりあえず、話の元の某パッチ当ての権威の方のサイトをみてターゲットはNextorということを確認し、続いてNextorのサイトをのぞいてみると、普通に8Kバンク版のRomイメージが置いてあった。
1ChipMSXの内部に接続されているMegaSD(megasd.vhd)ってバンクとか似非RAM(というかMegaSCSI)と似たような構造だよね(多分)、ってことで8Kバンクのイメージならバンク切り替えはあんまり気にしなくてもいいんじゃないかと思い、とりあえず作ってみることに。

以下、HRA!氏の改造ファームでの話(オリジナルも多分ほとんど同じ動き)。
まず、1ChipMSXのブートシーケンスだけど
1・スロット3-3のページ0および3にマップされているiplrom.vhdが起動し、SD→内部の順にBIOSを検索する(注1)
2・BIOSがあったら、それをスロット3-2のページ1および2にマップされているMegaSD(megasd.vhd)に書き込み行う
3・MegaSDへの書き込みは、実際には1ChipMSXのSDRAMへの書き込みになるため、アドレスは&H600000~に用意したBIOSがそのままロードされる形になる(注2)。
4・各スロットはSDRAMにアドレス固定でマップされているので、3の書き込み後BIOSに正常にアクセスできるようになる

といった感じになっている(と思われる)。
アドレスに関してはソースの中に記述があり
	-- ISLTERM			600000-6FFFFF(1024KB)
	-- 				600000-60FFFF(  64KB) MEGASD(ISLTERM BANK 0-  7)
	-- 	ROM_MAIN		610000-617FFF(  32KB) MEGASD(ISLTERM BANK 8- 11)
	-- 	ROM_EXTR		618000-61BFFF(  16KB) MEGASD(ISLTERM BANK12- 13)
	-- 	ROM_OPLL		61C000-61FFFF(  16KB) MEGASD(ISLTERM BANK14- 15)
	-- 	ROM_KANJI		620000-63FFFF( 128KB) MEGASD(ISLTERM BANK16- 31)
	-- 	ROM_FRM1(SLOT0-1)	640000-64FFFF(  64KB) MEGASD(ISLTERM BANK32- 39)
	-- 	ROM_FRM2(SLOT0-3)	650000-65FFFF(  64KB) MEGASD(ISLTERM BANK40- 47)

こんな感じ。
DISKROMは600000-60FFFF( 64KB)の位置にロードされる。
で、DISKROMを128KBにするにはロードされる位置をその分ずらせばいいと考えた。

	-- ISLTERM			600000-6FFFFF(1024KB)
	-- 				600000-61FFFF( 128KB) MEGASD(ISLTERM BANK 0- 15)
	-- 	ROM_KANJI		620000-63FFFF( 128KB) MEGASD(ISLTERM BANK16- 31)
	-- 	ROM_MAIN		640000-647FFF(  32KB) MEGASD(ISLTERM BANK32- 35)
	-- 	ROM_EXTR		648000-64BFFF(  16KB) MEGASD(ISLTERM BANK36- 37)
	-- 	ROM_OPLL		64C000-64FFFF(  16KB) MEGASD(ISLTERM BANK38- 39)
	-- 	ROM_FRM1(SLOT0-1)	650000-65FFFF(  64KB) MEGASD(ISLTERM BANK40- 47)

こうなるようにコード修正し、それに合わせたBIOSイメージファイルを準備する。
※アドレス指定がめんどくさくなるのでBIOSの順番は入れ替え。

この構成で
DISKBIOS(64K)+ダミー(0埋ファイル)(64K)+KANJIROM(128K)+MAINROM(32K)+SUBROM(16KB)+FMBIOS(16K)
というBIOSイメージを作成し、SDから起動することを確認した。
その後、
Nextor-2.0.4.StandaloneASCII8.rom(128K)+KANJIROM(128K)+MAINROM(32K)+SUBROM(16KB)+FMBIOS(16K)
というBIOSイメージを作成し、SDから読み込ませたところ、とりあえずNextorBASICが起動することが確認できた。
(BIOSはMSX2の物。2+のBIOS利用する場合は最後に64KBにサイズ調整した漢字ドライバ追加した上でSUBROMの書き換え必須)
で、CALL FDISKでPartitionningToolが起動することも確認できた。

ただ、SDカードにはアクセスできないし、スロットも全く反応しなくなった…
NextorOSのファイルを読み込ませる手段がないのでDOSの起動までは確認とれない。
でも、パッチ当ての権威の方のサイトを見るにNextorBIOSに何らかのパッチを当てる必要ありそうだからこれでいいのかな?

とここまでやって、れふてぃさんの検証待ち。


注1:SDカードからのBIOS読み込みはセクタを直接読んでいるらしく、ファイル名は何でもいいし、一度書き込んだ後消しても普通に読み込み成功する。
   この動作のおかげでサイズの大きいBIOS→小さなBIOSの順でテストを行うと先に書き込んだBIOSの残骸のせいで思わぬ動作をすることがしばしば。
   同じサイズのBIOSを入れ替えて確認する分には問題起きないだろうけど、そうでなければ念のため0埋めした大きなファイルで明示的にクリアしながら作業するの推奨。

注2:HRA!氏のファームの場合、ファームに埋め込むBIOSイメージは圧縮されているため、SDからはリニアに読み込まれるけど、ファームからの読み込みの場合は展開処理が入る。
   この圧縮は2+BIOS(漢字ドライバの分256KBより大きくなる)を利用する際サイズを抑えるための手法と思われる。
   海外のKDLなんかは未圧縮306KBのBIOSをファームに埋め込んで最後尾48KBを32Kと16Kに分割、それぞれ64Kに拡張してからメモリ上にロードしている(それぞれページ1からマップされるように前後に00(かFFかわからないけど)を埋めている)