すべてのゲームを改造しよう! MSX [いつでもメモリーエディター]
きっかけ
ROM版のゲームであっても、実行中に変化するデータは、すべて本体のRAM上にあります。
そこには、自機の数、ステージ番号、ヒットポイント、所持アイテムなど、ゲームによって様々な情報が保存されていますし、それらをちょっとだけいじることで、普段はできないような遊びもできてしまいます。
現役稼働中のオンラインゲームでこのような行為は御法度ですが、MSXはもう30年前のマシンですし、完全オフラインなので誰にも迷惑をかけるわけでもありませんし、もう皆さん散々遊び尽くしたと思いますし、たまにはこういう遊び方もいいんじゃないかなーと思って、やってみました。
もちろん、エミュレーターなどを使えば簡単にできるのですが、実機でやれるのは、ちょっと楽しいです(^_^)
作り方
以下のような方針で作ってみました。
- 起動直後に、BIOSを裏RAMにコピーして、0038Hの割り込みフックを自前のルーチンに飛ぶように書き換える。
- 裏RAMを表に出し、本物のBIOSのように見せかけつつ、ゲームを起動する。
- 割り込みルーチンでは、特定のコマンドが入力されたかをチェックする(F750HからのPARM2ワークを使用)
- もしコマンドが入力された場合は、ゲームの実行を完全に停止させ、そのときのゲーム画面(VRAM)の内容をRAMに保存する
- 自前のメモリーエディターを起動する
- メモリーエディターでメモリを見たり、ちょっとだけいじったりする
- エディターを終了する場合は、保存しておいたVRAMやVDPの内容を元に戻して、何事もなかったかのようにゲームに戻る
実行ファイル
いつでもメモリーエディター(ITSUDEMO MEMORY EDITOR)
itsmemo.zip【2017/1/30 update】
- RAM64KB以上のMSX、MSX2、MSX2+、MSXturboRで動作します
- MegaFlashROM等のROMカートリッジか、ディスクドライブが必要です
- ディスク版の場合、電源を入れたままROMを差す、いわゆる「後差し」が必要なので、自己責任で行ってください
- 「MSX/MSX2/MSX2+用」 と 「turboR専用」の2種類のプログラムがあるので、環境に合わせて使ってください
準備
zipファイルの中には、以下の4つ(+おまけ2つ)のファイルがあります。
ITSMEMTR.ROM
… MSXturboR専用・ROMイメージ
ITSMEM64.ROM
… MSX(RAM64KB)/MSX2/MSX2+用・ROMイメージ
ITSMEMTR.BIN
… MSXturboR専用・bloadファイル
ITSMEM64.BIN
… MSX(RAM64KB)/MSX2/MSX2+用・bloadファイル
おまけ【2017/1/30追加】
ITSMEM6X.ROM
… MSX2/MSX2+用・SUB-ROMコール対応ROMイメージ
ITSMEM6X.BIN
… MSX2/MSX2+用・SUB-ROMコール対応bloadファイル
ROM版
ITSMEMTR.ROM
(またはITSMEM64.ROM
等)をMegaFlashROM等のROMに焼いてください
ITSMEMTR.ROM
をスロット1に、市販ゲームソフトをスロット2に入れて、本体を立ち上げてください
DISK版
ITSMEMTR.BIN
(またはITSMEM64.BIN
等)を、MSX用にフォーマットしたフロッピーディスクにコピーしておいてください(ディスクイメージではないので、ファイルとしてコピーしてください)
- 本体を起動し、DISK-BASICを立ち上げてください
- 電源を入れたまま、市販ゲームソフトをスロット1あるいはスロット2に入れてください(自己責任で)
- 本体にフロッピーディスクをセットし、BASICから
bload"ITSMEMTR.BIN",r
(または bload"ITSMEM64.BIN",r
)と入力してください
- スロット番号を聞いてくるので、ゲームソフトを入れたスロット番号を押してください

使い方
エディタ起動
ゲーム中に以下のコマンドで「いつでもメモリーエディター」が起動します。
[CTRL] + [SHIFT] + [GRAPH]
… いつでもメモリーエディター起動
[CAPS] + [CTRL] + [SHIFT] + [GRAPH]
… いつでもメモリーエディター起動(シャドウモード)
※通常起動で画面が壊れてしまうようなゲームタイトルの場合、シャドウモードを試してみてください。画面は見えませんが、裏ではエディターが起動しているので、コマンド等は有効になります
コマンド
エディターで使えるコマンドは6種類です。
アドレスやデータは、すべて16進数で入力してください。アドレスは4桁、データは2桁固定です。
入力を途中でキャンセルする場合は、ESC または BS を押してください。
- S … [SET MEMORY] … メモリーに値をセットします。アドレスを入力した後、セットしたい値を入力して RETURN を押してください。RETURN の代わりに SPACE を押すと連続したアドレスにデータをセットできます。
- F … [FIX MEMORY] … メモリーに値を固定します。特定のアドレスに、毎フレームこの値をセットします。一箇所しか設定できませんが、一度設定すると本体をリセットするまで有効になります。設定をクリアするには、Fコマンドに入った後、アドレスやデータ入力を途中でキャンセルしてください。
- D … [DUMP MEMORY] … メモリーをダンプします。64バイトずつ表示します。
- C … [COLOR CHANGE] … テキストの色を変更します。ゲームでのパレット設定が引き継がれるので、見にくい場合はこのコマンドを実行してください。
- Q … [QUIT] … エディターを終了し、ゲームに戻ります。
- T … [TURBO MODE] … 実行中に、CPUをR800またはZ80に切り替えます【turboR専用】

バージョンごとの違い
ITSMEM64(MSX/MSX2/MSX2+版)
- 起動時にBIOSをRAMにコピーして書き換えるため、少しだけ時間がかかります。
- 4000H-6000Hのメモリーはエディター本体が使用するため、RAM64KBをフルに使っているタイトルはうまく動かない場合があります。
- RAMとSUB-ROMが同じ基本スロットにあるMSX2/MSX2+(A1やF1シリーズ)は、変更されたBIOSからSUB-ROMが呼び出されると止まってしまうので、MSX1用のタイトルでも動かないものがあります。
【2017/1/30追記】 強引にSUB-ROM制御を入れた ITSMEM6X
を作ってみました。運がよければ動くかもしれないので、試してみてください。
ITSMEMTR(turboR専用版)
- CPU切り替えコマンド(Tコマンド)が使えます
- エディター本体はマッパーRAMの隠れたメモリ上に置かれるので、デフォルトの64KBはすべてアプリケーションが使用できます
- DRAMモードを使用しているので、変更されたBIOSは通常のBIOSと同等に扱われるため、SUB-ROMを使用しているタイトルも問題なく動作します。
最後に
アイデアの段階では、どこまでできるか全く分からなかったのですが、予想よりもいい感じになりました。
同じ方法で、完全に別のアプリ(きちんとしたデバッガーとか)を起動することもできますが、実際は割り込みのタイミングでしか止められませんし、本格的なデバッグをするのは難しいと思います。
ちなみに、エディターからゲームに復帰する時、VDPを元の状態に戻しているのですが、VDPの値はリードすることができないので、RAMに保存してある値を見ています。そのため、RAMに値をバックアップせずにVDPを変更しているタイトルは、エディターからゲームに戻ると画面が乱れてしまいます(ハイドライド3の周辺色とか)。そういうタイトルのために「シャドウモード」を入れました。画面を見なくてもなんとなくわかるように、音を変えたりしています。ただ、本当に苦肉の策です(^_^;)
また、目指したのは「コナミの10倍カートリッジ」なので、データをサーチしたり、レジスタを見たり、もっとガンガンいじりたい人は、エミュレーターでということで…(^_^;)
あと、MSXでの開発の約束事は完全に無視しているので、環境によって動いたり動かなかったりするのはご了承ください!
ご意見・ご質問は twitter で @tiny_yarou まで、よろしくお願いします。
動画
DEEP! P6! DEEP! MSX! に戻る