MSXでBASICプログラムをROM化して遊びたいと思って調べてたところ、手順を書いたページがありました。
MSX Datapack3章 カートリッジソフトの作成法
このページのBASICプログラムのROM化の方法に書いてあるIDの作成をそのままBASIC画面で実行するとメモリの内容が書き変わってしまい、なかなか上手くいきませんでした。
要はBASICのテキスト格納先頭アドレスを8021Hにして、先頭の32バイトを書き換えれば良いことが分かり、一度8000H〜BFFFHで保存してPC上でバイナリエディタで書き換えてれば成功しました。
このやり方の手順を紹介します。
BASICのROM化方法
BASICプログラムを用意する
今回は例として1から10を表示する簡単なプログラムを作成して、"test1.bas"というファイル名で保存しました。
10 FOR I=1 TO 10 20 PRINT I 30 NEXT
save "test1.bas"
BASICのテキスト格納先頭アドレスを変更してバイナリを保存
BASICのテキスト格納先頭アドレスを8021Hに変える。
POKE &HF676,&H21:POKE &HF677,&H80:POKE &H8020,0:NEW
これは必ず1行で実行してください。
保存したBASICプログラムをロード
load "test1.bas"
BSAVE形式で8000H〜BFFFHを保存する
今回は"test1.bin"というファイル名で保存しました。
bsave "test1.bin",&h8000,&hbfff
PC上でバイナリを編集
保存したBSAVE形式のファイルをPC上の適当なバイナリエディタを使用して編集します。
ここで行うことは2点です。
・BSAVE形式のヘッダ部分(先頭から7バイト)を削除する
・ID部分(BSAVE形式のヘッダ部分削除後の先頭から32バイト)を下の値に書き換える
41 42 00 00 00 00 00 00 20 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 アドレスの00,01,08,09以外はすべて00です。
今回は編集後のファイルを"test1.rom"というファイル名で保存しました。
実際に動かしてみる
作成したROMファイル(test1.rom)をエミュレータ(blueMSX)で動かしてみました。
無事にBASICプログラムが実行されています。
Mega Flash ROMに書き込んで実機で動かそうと思いましたが、リセットを繰り返すばかりで上手く実行できませんでした。これに関して、もう少し調査が必要そうです。