Master Ever Driveで自作のプログラムを起動させようとしたときに気づいたこと。

MasterEverDriveはセガマスターシステム用フラッシュカートリッジです。
SDCARDに実行バイナリをセーブしてMasterEverDriveにセットすると
セガマスターシステムで実行させることができます。もちろんセガマークⅢでも
実行可能です。

広告
広告1




なぜか実行結果が様々

自作のプログラムをいろいろマークⅢで動かしてみたときに、
動くもの(ごみが出るもの含む)、起動すらしないものと分かれているのが
不思議でした。
少なくともセガロゴまでは同じプログラムなのだから起動すらしないのは
おかしいのです。
また、実機では動くのにエミュレータでは起動しないこともありました。

MasterEverDriveの動作不良の原因は?

MasterEverDriveはマスターシステムのエミュレータ用ROMファイルを
実行するようになっています。
しかしマスターシステム用ROMファイルにはNESファイルのようなヘッダーが
存在しません。
そうするとEverDriveはバイナリの何からROM情報をとるのでしょうか?

ハードは海外製

よくよく考えるとハードは海外のものなので、バイナリの判断は
海外版マスターシステムに合わせてあるのが当然です。
海外版マスターシステムではセキュリティとカートリッジの情報を記録するための
情報をROMに焼きこむ必要があります。
(この辺はEnri’s Home Pageから参照)
ただし、日本版のマスターシステムではマークⅢ時代のROMを実行させるために
このフォーマットは無視されるので実行可能です。

実際、これでいくつかのバイナリがエミュレータで実行するようになりました。
しかし、バイナリサイズが大きいものには相変わらず動作しないものが
ありました。

セガマークⅢカートリッジにもある、マッパー。

もう一つ動かない原因としてマッパーが考えられます。
セガマスターシステムのマッパーはファミコンと違い基本的にROMサイズの
違いのみで大きく1Mbitまでと2MBitを超えるマッパーとに分かれます。
どちらのマッパーで動作させるか、EverDriveが間違った可能性があります。

ヘッダー情報のないROMファイルから何を判断しているのかと考えたときに
「バイナリサイズがROMサイズに合ってない」
のが問題なのではないか?と考えました。
バイナリを出力するリンカに、一番近いROMのサイズにパディングを加える機能を追加して
試したところ、見事に実機で動作しました。

広告
広告1




シェアする

  • このエントリーをはてなブックマークに追加

フォローする

広告
広告1