電子趣味の部屋

電子系のガジェットやアプリ開発等の趣味の話題を書いてます

MSXで遊ぶ! BASICプログラムのROM化

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"というファイル名で保存しました。

編集前(test1.bin)


編集後(test1.rom)

実際に動かしてみる

作成したROMファイル(test1.rom)をエミュレータ(blueMSX)で動かしてみました。

無事にBASICプログラムが実行されています。

Mega Flash ROMに書き込んで実機で動かそうと思いましたが、リセットを繰り返すばかりで上手く実行できませんでした。これに関して、もう少し調査が必要そうです。