相互移植で問題になりそうなのは、以下のような点です。
RAMについては、MSXは最低でも8KBが保障されていますが、SG-1000は0C000H-0C3FFHまでの1KBしかありません。
SG→MSXの移植ではほとんど問題にはならないと思いますが、MSX→SGの移植では、この点が大きなネックとなります。
また、SGのROMカートリッジは0000Hからマッピングされますが、MSXはそこにはBIOSがあるので、SG→MSXの場合はなんとかしなくてはなりません。
同じVDPですが、アクセスするためのポート番号が異なっています。
MSXは(基本的に)98Hと99H、SGはBEHとBFHになります。
ただ、こちらは機械的に置き換えればなんとかなりそうです。
MSXはAY-3-8910、SG-1000はSN76489。スペックは似ていても全く異なります。
そのうえ、サウンドドライバはソフトごとに全く異なるので、各々対応する必要があります。
MSXはPSGがジョイスティック用インターフェースも兼ねていますが、SGは別になっています。
こちらも、そのまま移植すれば良いというわけにはいきません。
まず、少し前にMSXで作ったイースのデモ
があったので、それをSGに移植してみることにしました。
自作なのでプログラムソースもありますし、使用していたワークエリアも少なかったので、
機械的にVDPのポートを変更し、BIOSを使っていたキー入力部分を書き換えてアセンブルしたところ、
エミュレーター上ではありますが、あまりにも簡単に、サクっと動きました。
ちなみにこの後、サウンドドライバの移植をしたのですが、これはかなり大変でした。
自分で書いたプログラムじゃなければ挫折していたと思います…。
ただ、ワークエリアをあまり使わない小規模なソフトのMSX→SGの移植は(サウンドを除いては)それほど難しくない、ということがわかりました。
イースを移植したことで、最低限どこを修正すれば良いかはわかってきたので、ダメ元で、自動的にプログラムを修正するツールを作ってみることにしました。
完璧に動かすのは無理だとしても、例えば市販されているソフトのタイトル画面が他機種で出たりしたら、それだけでも間違いなく ワクワク すると思ったので。
方針はこんな感じで進めました。
MSX(64K)またはMSX2以降の、MSX-DOS上で動作します。
MSX-DOSの入ったディスクに、このツールと、SG-1000用のバイナリーファイルを入れておいてください。
DOSを起動した後、コマンドラインで
SG2MSX ROMファイル -最終アドレス /オプション
と入力すると、そのROMファイルをメモリにロードし、パッチを当てたうえで実行しようとします。
最終アドレス
SG2MSX WBOY.SG -5000 /VCIM
上のほうでも書きましたが、SG→MSXと違って、MSX→SGへの移植はなかなかハードルが高く、まとめると以下のような違いがあります。
ということで、同じCPU・同じVDPを搭載しているといえども、MSX用に開発したソフトをSG-1000へ移植するには、それなりに手作業による修正が必要となります。
しかし、「セガマークIII」「マスターシステム」は、SG-1000の上位互換を保ちつつ、RAMが8KB搭載されており、しかも0000H-BFFFHまでのROMにアクセスすることができます。
このスペックなら MSXのタイトルがそのまま動くのではないか?
…ということで、0000H-3FFFHにMSXのBIOSを移植し、VDPポート、音源チップ、コントローラー入力などを変更することで、MSXのROMタイトルをそのまま動かすことにチャレンジしてみました。
動きました!