MSXのゲームをセガ・マスターシステムで動かしてみよう

セガ・マスターシステム(SMS)は、MSXと同じZ80CPUを搭載しており、VDP(画面制御用チップ)もMSX1の上位互換となっています。

しかも、MSX規格の最低スペックをクリアする8KBのRAMも搭載しています。

それならば「MSX1用のゲームであればSMSに移植できるのでは?」と考えてしまうのも自然の流れ。

「手作業でコツコツ移植作業をし、エミュレーターで動かす」という方法もありますが、今回は以下のような目標を立ててみました。

  1. 手作業で移植するのではなく、ツールで自動的に変換したい。
  2. 実際にROMに焼いて、SMS実機で動かしたい。

また、なるべく専門的な知識がない方でも分かるように書いたつもりなので、ぜひ多くの方に楽しんでいただきたいです。


【準備編】変換ツール MSXtoSMS

ダウンロード

MSXtoSMS (ver 1.0.0.1) Download (2025/03/08 Update)

使い方


【実践編1】ツールで変換してみよう

変換可能なMSXタイトル

「ハイドライドII」をSMS用に変換してみよう

MSX用の「ハイドライドII」をSMS用に変換してみましょう。


【実践編2】SMS実機で動かしてみよう

MSXtoSMS で作成したROMイメージを、マスターシステム実機で動作させてみましょう。

必要なもの

カートリッジを作る

ROMを焼く

色々なタイトルの動作例

ハイドライド2以外にも、MSXtoSMSに同梱されている設定ファイルを使用すればさまざまなタイトルの変換が可能です。

デバッグメニュー

実行中に SMS本体のPAUSEボタン を押すと、デバッグメニューに入ります(ゲームはリセットされます)。

1P側のコントローラーでカーソルの移動やパラメーターの変更ができます。

WRITE

FMVOICE

ゲーム中のサウンドはすべてSMS内蔵のFM音源(OPLL)で演奏されます。

デフォルトでは「SCCっぽいオリジナル音色」が使われますが、変更することもできます。

※本来はPSGやSCCで鳴るはずのデータを自動変換している都合上、キーオンしたままの状態で音程変更が行われることが多いため、ピアノのような「音量が減衰する音色」は上手く発音されなかったりします。

BOOTBANK

MSXtoSMSでは、複数のタイトルを1つのEP-ROMに焼くことができるのですが(方法は【実践編3】で説明します)、「BOOTBANK」で起動バンクを指定することで、任意のタイトルをプレイすることができます。

また、表示されているタイトル名は「変換元のROMイメージのファイル名」から自動的に作られます。

EXIT

すべての設定が終わったら「EXIT」を選択してください。ゲームが再起動します。


【実践編3】設定ファイルを書いてみよう

ここから先は、「同梱の設定ファイルでは変換できないタイトルをどうしても変換したい」「ROMの改造をしたい」「キーコンフィグをしたい」というような、マニアックに楽しみたい方だけ読んでください。

また、「タイトル専用設定ファイル集」 にいくつかの設定ファイルを掲載しているので、そちらも参考にしてみてください。

設定ファイルとは

前述した通り、MSXtoSMS の書式は以下の通りとなります。

 MSXtoSMS -c <設定ファイル> -r <MSX用ROMイメージ> -o <SMS用出力ROMイメージ>

この「設定ファイル(*.conf)」とは、MSXtoSMS が「MSXのROMイメージ」を「SMSで動作するROMイメージ」に変換する際のルールを記述したテキストファイルです。

テキストファイルなので、メモ帳などのテキストエディタで作成・編集することができます。

ゼロから設定ファイルを記述するのは大変かもしれませんが、「残機を増やす」「無敵化」などの簡単な改造やキーコンフィグなどであれば、気軽に楽しめると思います。

設定ファイルのフォーマット

ここからは設定ファイルに記述できるコマンドを説明します。 ちなみに、コマンドラインで MSXtoSMS -help を実行すると簡単な説明が表示されるので、忘れたときなどに便利です。

コメント

セミコロン( ; )以降はコメントとみなされ無視されます。

【記述例】 ;--------------------------- ;GRADIUS2 Config File ;---------------------------

変換ROMイメージ指定

MSXtoSMS実行時に -r オプションで指定するMSX用ROMイメージですが、設定ファイルに記述しておくこともできます。

【書式1】 MSXROM = ROMイメージファイル

コマンドラインで何度も入力するのが面倒なときや、タイトル専用の設定ファイルに使うくらいでしょうか。

また、以下のように記述することで、複数のMSX用ROMイメージを1つのROMに焼くこともできます(メガROMは不可。16KBまたは32KBのROMに限ります)

【書式2】 MSXROM = ROMイメージファイル + ROMイメージファイル + ROMイメージファイル + ...

SMSで実行する際には デバッグメニューの「BOOTBANK」から起動するタイトルを切り替えてください。

【記述例】 ;***** MSX用ROM ***** MSXROM = E:\MSX\rom\PACMAN.ROM + E:\MSX\rom\WARPWARP.ROM + E:\MSX\rom\DRUAGA.ROM

行の連結

行の末尾に '\' を記述すると、次の行と連結した1行として処理されます。

【記述例】 ;***** MSX用ROM ***** MSXROM = \ E:\MSX\rom\PACMAN.ROM + \ E:\MSX\rom\WARPWARP.ROM + \ E:\MSX\rom\DRUAGA.ROM

ROMタイプの指定

変換元となるMSX版タイトルのROMタイプを指定します。

【書式】 ROMTYPE = 種類

【記述例】 ;***** ROM TYPE ***** ROMTYPE = 2   ;MEGAROM KONAMI with SCC

ROMの内容を手動で修正する

ROMイメージのデータを修正します。指定したアドレスから連続したデータを書き込みます。

【書式】 PATCH = 先頭アドレス , データ , データ , ...

MSX→SMSへのコンバートが行われた後にデータを上書きしますが、先頭アドレスについては以下のように 変換前のMSX版ROMイメージのアドレス で指定します。

アドレスに 0000-3FFF を指定することで、MSXtoSMSシステムプログラムの内容を書き換えることも可能です。

【GRADIUS2.conf での記述例】 ;***** PATCH ***** PATCH = 545C,F5,F1     ;VDPアクセスタイミング調整 PATCH = BD86,00        ;隠しコマンド入力有効

ROMの内容を自動的に修正する(VDPポート変更)

【書式】 PATCH = VDPPORT

MSXでVDPにアクセスする場合、本来であれば0006Hと0007Hを参照してI/Oポート番号を取得すべきなのですが、横着をして直値(98H、99H)を設定しているタイトルも多く存在します。

この1行を書くと、ROM全体を検索し、直値(98H、99H)でVDPにアクセスしている部分をSMS用のポート番号(BEH、BFH)に書き換えます。

SMSで画面が正しく表示されない場合はこれを試してみてください。

ROMの内容を自動的に修正する(PSG無効化)

【書式】 PATCH = PSGDISABLE

サウンドやジョイスティック端子へのアクセスにBIOSをを使用していないタイトルを MSXtoSMS で変換すると、「SMSでは未使用のI/Oポート」に対してアクセスを続けることになります。

特に問題にならないことも多いのですが、この1行を書くと、ROM全体を検索し、PSGのI/Oポート(A0H~A2H)にアクセスしている部分を無効化します。

SMSで実行が完全に停止してしまうような場合はこれを試してみてください。

ROMの内容を自動的に修正する(キーボード無効化)

【書式】 PATCH = KEYDISABLE

BIOSを使用せずにキーボードからの入力を取得しようとしているタイトルを MSXtoSMS で変換すると、キーの入力待ちなどで先に進まなくなることがあります。

この1行を書くと、ROM全体を検索し、キーボードのI/Oポート(A8H~ABH)にアクセスしている部分を無効化します。

SMSで実行が完全に停止してしまうような場合は、これを試してみてください。

ROMの内容を自動的に修正する(開始アドレス変更)

【書式】 PATCH = PAGE2START

MSXのROM版ゲームの多くは4000H(PAGE1)にマッピングされるのですが、中には8000H(PAGE2)にマッピングされるタイトルも存在しており、 そのようなタイトルを MSXtoSMS で変換すると、開始時にいきなりフリーズしてしまいます。

この1行を書くと、SMSで実行する際に、プログラムを4000H(PAGE1)と8000H(PAGE2)の両方にマッピングします。

SMSで「SEGA MARKIII」のロゴの後にすぐ停止してしまうような場合は、これを試してみてください。

FM音源音色指定

サウンドを鳴らす場合のFM音源の音色を指定します。音色番号については デバッグメニューの「FMVOICE」の説明を参照してください。

【書式】 FMVOICE = 音色番号

一時的に変更したい場合はデバッグメニューの「FMVOICE」が便利ですが、変更した状態でROMに焼いてしまいたい場合はこちらの設定を使用してください。

【記述例】 ;***** FM VOICE ***** FMVOICE = 7     ;Trumpet

SCC制御用ワークエリア指定

SCCを搭載しているコナミのタイトルにおいて、内部的に使用しているSCC用のワークエリアのアドレスを指定します。

【書式】 SCCWORK = RAMアドレス

コナミのSCC使用タイトルについては、MSXtoSMSシステムプログラム側でリアルタイムにSCC用のデータをFM音源用のデータに変換してサウンドを鳴らしているのですが、その際、各タイトルが使用しているSCC用のワークエリアをウオッチしています。

ワークエリアのアドレスはタイトルごとに異なっており、プログラムを解析しなければわからないのですが、 RAM8KBで動作するSCC対応タイトルは「F1スピリット」「グラディウス2」「王家の谷 エルギーザの封印」「パロディウス」の4タイトルだけ …だと思うので、それについてはこちらで解析済となります。 MSXtoSMS同梱の設定ファイル(conf\files以下)にアドレスが記述されているので、通常は意識しなくて良いです。

【GRADIUS2.conf での記述例】 ;***** SCC WORK ***** SCCWORK = E1B0     ;このタイトルがSCC制御用に使用しているワークアドレス

キーコンフィグ

SMSのゲームパッドの入力を、MSXのキーボード入力に変換します。

また、「+」で複数のキーを並べることで、「同時入力」を表すことができます。

【書式1】 KEYCONF = SMSキー , MSXキー

【書式2】 KEYCONF = SMSキー+SMSキー+... , MSXキー

【書式3】 KEYCONF = SMSキー , MSXキー+MSXキー+...

【書式4】 KEYCONF = SMSキー+SMSキー+... , MSXキー+MSXキー+...

【注1】SMSキーの同時入力は 1Pと2Pの入力を混在させることはできません。

【注2】変換処理はVBLANK割り込み(1/60秒)ごとに行われます。それまでは値が変化することはありません。

指定できるSMSキー

指定できるMSXキー

【GRADIUS2.conf での記述例】コンティニューと隠しコマンド(ポーズ中に LARS18TH と入力)に対応 ;***** KEY CONFIG ***** KEYCONF = 1PBTN_2,   [F5]     ;1Pの2ボタンで[F5]キー(コンティニュー) ;2Pコントローラーで隠しコマンド入力 KEYCONF = 2PBTN_1,                [F1] ;2Pの1ボタンで[F1]キー(ポーズ) KEYCONF = 2PBTN_2+2PPAD_U,         [L] ;2Pの↑を押しながら2Pの2ボタンで[L] KEYCONF = 2PBTN_2+2PPAD_U+2PPAD_R, [A] ;2Pの↗を押しながら2Pの2ボタンで[A] KEYCONF = 2PBTN_2+2PPAD_R,         [R] ;2Pの→を押しながら2Pの2ボタンで[R] KEYCONF = 2PBTN_2+2PPAD_R+2PPAD_D, [S] ;2Pの↘を押しながら2Pの2ボタンで[S] KEYCONF = 2PBTN_2+2PPAD_D,         [1] ;2Pの↓を押しながら2Pの2ボタンで[1] KEYCONF = 2PBTN_2+2PPAD_D+2PPAD_L, [8] ;2Pの↙を押しながら2Pの2ボタンで[8] KEYCONF = 2PBTN_2+2PPAD_L,         [T] ;2Pの←を押しながら2Pの2ボタンで[T] KEYCONF = 2PBTN_2+2PPAD_L+2PPAD_U, [H] ;2Pの↖を押しながら2Pの2ボタンで[H] KEYCONF = 2PBTN_2,            [RETURN] ;2Pの2ボタンで[RETURN]キー(決定)

デバッグメニュー用WRITEアドレス初期設定

デバッグメニューの「WRITE」にデフォルトで表示するアドレスを指定します。

【書式】 MEMEDIT1~4 = WRITEアドレス , データ , 初期状態

デバッグメニューで毎回設定するのは意外と面倒なので、デフォルトの値をROMに焼いておけるようにしました。

【GRADIUS2.conf での記述例】 ;***** DEBUG MENU ***** MEMEDIT1 = E200, 99, OFF     ;残機(01-99) MEMEDIT2 = E446, 01, OFF     ;メタリオン状態 MEMEDIT3 = E400, 02, OFF     ;無限シールド MEMEDIT4 = F0F5, 0C, OFF     ;SLOT2 (04:夢大陸 08:ガリウス 0C:両方)

8KBバンク形式から16KBバンク形式への変換情報

ROMTYPEが1~3のメガROMタイトルにおいて、MSX版の8KBバンク形式をSMS版の16KBバンク形式に変換する際のルールを定義します。

【書式1】 EXTBANK = 8KBバンク番号 + 8KBバンク番号

【書式2】 EXTBANK = 8KBバンク番号 + 8KBバンク番号 : 8KBバンク番号 + 8KBバンク番号 , 8KBバンク番号 + 8KBバンク番号 , ...

「メガROMを自分で変換してみたい」という方以外は使用する必要がありません(逆に言えば、メガROMを変換するには必須の項目となります)。

とても面倒でわかりにくいですし、説明するのも大変なのですが、どうしても知りたい方は 「設定ファイルの EXTBANK の書き方」をご覧ください。


DEEP! P6!/MSX! に戻る