セガ・マスターシステム(SMS)は、MSXと同じZ80CPUを搭載しており、VDP(画面制御用チップ)もMSX1の上位互換となっています。
しかも、MSX規格の最低スペックをクリアする8KBのRAMも搭載しています。
それならば「MSX1用のゲームであればSMSに移植できるのでは?」と考えてしまうのも自然の流れ。
「手作業でコツコツ移植作業をし、エミュレーターで動かす」という方法もありますが、今回は以下のような目標を立ててみました。
また、なるべく専門的な知識がない方でも分かるように書いたつもりなので、ぜひ多くの方に楽しんでいただきたいです。
MSXtoSMS (ver 1.0.0.1) Download (2025/03/08 Update)
MSXtoSMS -c <設定ファイル> -r <MSX用ROMイメージ> -o <SMS用出力ROMイメージ>
【記述例】 MSXtoSMS -c conf\NORMAL.conf -r PACMAN.ROM -o PACMAN.SMS
【記述例】 MSXtoSMS -c conf\files\GRADIUS.conf -r GRADIUS.ROM -o GRADIUS.SMS
MSX用の「ハイドライドII」をSMS用に変換してみましょう。
MSXtoSMS -c conf\files\HYDLIDE2.conf -r HYDLIDE2.ROM -o HYDLIDE2.SMS
「ハイドライドII」はメガROMを使用しているため、専用の設定ファイル「HYDLIDE2.conf」を使用しましたが、メガROM以外の通常のタイトルであれば以下のように「NORMAL.conf」を使用することで変換できます。
MSXtoSMS -c conf\NORMAL.conf -r MAPPY.ROM -o MAPPY.SMS
MSXtoSMS で作成したROMイメージを、マスターシステム実機で動作させてみましょう。
ハイドライド2以外にも、MSXtoSMSに同梱されている設定ファイルを使用すればさまざまなタイトルの変換が可能です。
実行中に SMS本体のPAUSEボタン を押すと、デバッグメニューに入ります(ゲームはリセットされます)。
1P側のコントローラーでカーソルの移動やパラメーターの変更ができます。
例えば「ハイドライドII」のデバッグには以下のアドレスが便利です
E020 …「現在のLIFEの100の位」が格納されています。ここに1を書き続けることでLIFEが100以下になりません。
E028 …「現在のMAGICの100の位」が格納されています。ここに1を書き続けることでMAGICが100以下になりません。
E02C …「現在のFORTHの値」が格納されています。ここに64(10進数で100)を書き続けることで常にFORTHが最大になります。
ゲーム中のサウンドはすべてSMS内蔵のFM音源(OPLL)で演奏されます。
デフォルトでは「SCCっぽいオリジナル音色」が使われますが、変更することもできます。
※本来はPSGやSCCで鳴るはずのデータを自動変換している都合上、キーオンしたままの状態で音程変更が行われることが多いため、ピアノのような「音量が減衰する音色」は上手く発音されなかったりします。
MSXtoSMSでは、複数のタイトルを1つのEP-ROMに焼くことができるのですが(方法は【実践編3】で説明します)、「BOOTBANK」で起動バンクを指定することで、任意のタイトルをプレイすることができます。
また、表示されているタイトル名は「変換元のROMイメージのファイル名」から自動的に作られます。
すべての設定が終わったら「EXIT」を選択してください。ゲームが再起動します。
ここから先は、「同梱の設定ファイルでは変換できないタイトルをどうしても変換したい」「ROMの改造をしたい」「キーコンフィグをしたい」というような、マニアックに楽しみたい方だけ読んでください。
また、「タイトル専用設定ファイル集」 にいくつかの設定ファイルを掲載しているので、そちらも参考にしてみてください。
前述した通り、MSXtoSMS の書式は以下の通りとなります。
MSXtoSMS -c <設定ファイル> -r <MSX用ROMイメージ> -o <SMS用出力ROMイメージ>
この「設定ファイル(*.conf)」とは、MSXtoSMS が「MSXのROMイメージ」を「SMSで動作するROMイメージ」に変換する際のルールを記述したテキストファイルです。
テキストファイルなので、メモ帳などのテキストエディタで作成・編集することができます。
ゼロから設定ファイルを記述するのは大変かもしれませんが、「残機を増やす」「無敵化」などの簡単な改造やキーコンフィグなどであれば、気軽に楽しめると思います。
ここからは設定ファイルに記述できるコマンドを説明します。 ちなみに、コマンドラインで MSXtoSMS -help を実行すると簡単な説明が表示されるので、忘れたときなどに便利です。
セミコロン( ; )以降はコメントとみなされ無視されます。
【記述例】 ;--------------------------- ;GRADIUS2 Config File ;---------------------------
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
変換元となるMSX版タイトルのROMタイプを指定します。
【書式】 ROMTYPE = 種類
【記述例】 ;***** ROM TYPE ***** ROMTYPE = 2 ;MEGAROM KONAMI with SCC
ROMイメージのデータを修正します。指定したアドレスから連続したデータを書き込みます。
【書式】 PATCH = 先頭アドレス , データ , データ , ...
MSX→SMSへのコンバートが行われた後にデータを上書きしますが、先頭アドレスについては以下のように 変換前のMSX版ROMイメージのアドレス で指定します。
アドレスに 0000-3FFF を指定することで、MSXtoSMSシステムプログラムの内容を書き換えることも可能です。
【GRADIUS2.conf での記述例】 ;***** PATCH ***** PATCH = 545C,F5,F1 ;VDPアクセスタイミング調整 PATCH = BD86,00 ;隠しコマンド入力有効
【書式】 PATCH = VDPPORT
MSXでVDPにアクセスする場合、本来であれば0006Hと0007Hを参照してI/Oポート番号を取得すべきなのですが、横着をして直値(98H、99H)を設定しているタイトルも多く存在します。
この1行を書くと、ROM全体を検索し、直値(98H、99H)でVDPにアクセスしている部分をSMS用のポート番号(BEH、BFH)に書き換えます。
SMSで画面が正しく表示されない場合はこれを試してみてください。
【書式】 PATCH = PSGDISABLE
サウンドやジョイスティック端子へのアクセスにBIOSをを使用していないタイトルを MSXtoSMS で変換すると、「SMSでは未使用のI/Oポート」に対してアクセスを続けることになります。
特に問題にならないことも多いのですが、この1行を書くと、ROM全体を検索し、PSGのI/Oポート(A0H~A2H)にアクセスしている部分を無効化します。
SMSで実行が完全に停止してしまうような場合はこれを試してみてください。
【書式】 PATCH = KEYDISABLE
BIOSを使用せずにキーボードからの入力を取得しようとしているタイトルを MSXtoSMS で変換すると、キーの入力待ちなどで先に進まなくなることがあります。
この1行を書くと、ROM全体を検索し、キーボードのI/Oポート(A8H~ABH)にアクセスしている部分を無効化します。
SMSで実行が完全に停止してしまうような場合は、これを試してみてください。
【書式】 PATCH = PAGE2START
MSXのROM版ゲームの多くは4000H(PAGE1)にマッピングされるのですが、中には8000H(PAGE2)にマッピングされるタイトルも存在しており、 そのようなタイトルを MSXtoSMS で変換すると、開始時にいきなりフリーズしてしまいます。
この1行を書くと、SMSで実行する際に、プログラムを4000H(PAGE1)と8000H(PAGE2)の両方にマッピングします。
SMSで「SEGA MARKIII」のロゴの後にすぐ停止してしまうような場合は、これを試してみてください。
サウンドを鳴らす場合のFM音源の音色を指定します。音色番号については デバッグメニューの「FMVOICE」の説明を参照してください。
【書式】 FMVOICE = 音色番号
一時的に変更したい場合はデバッグメニューの「FMVOICE」が便利ですが、変更した状態でROMに焼いてしまいたい場合はこちらの設定を使用してください。
【記述例】 ;***** FM VOICE ***** FMVOICE = 7 ;Trumpet
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」にデフォルトで表示するアドレスを指定します。
【書式】 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:両方)
ROMTYPEが1~3のメガROMタイトルにおいて、MSX版の8KBバンク形式をSMS版の16KBバンク形式に変換する際のルールを定義します。
【書式1】 EXTBANK = 8KBバンク番号 + 8KBバンク番号
【書式2】 EXTBANK = 8KBバンク番号 + 8KBバンク番号 : 8KBバンク番号 + 8KBバンク番号 , 8KBバンク番号 + 8KBバンク番号 , ...
「メガROMを自分で変換してみたい」という方以外は使用する必要がありません(逆に言えば、メガROMを変換するには必須の項目となります)。
とても面倒でわかりにくいですし、説明するのも大変なのですが、どうしても知りたい方は 「設定ファイルの EXTBANK の書き方」をご覧ください。