ずいぶん更新をさぼっていましたが、一応水面下では作業はしていました。65816プログラミングは全然やってませんが。例によって「ダウンロード」ページにうpしてあります。SFCGENEditorのインチキ逆アセンブル機能に問題があることがわかったのでその修正です。主にLoROMの場合の逆アセンブルの対応が不十分だった点を修正しています。DQ36のスプライトのビットマップからのインポート機能の修正はまだ半分といったところなので今回のリリースには含めませんでした。
ここからは当て推量で行った変更点についての考察?なのですが、Lunar AddressではLoROMのメモリマップ?は2パターンあり、
- 008000-6FFFFF
- 808000-FFFFFF
のRAMアドレスの変換が用意されています(参照URL)。また、永久UnderConstructionではTOを例にあげて逆汗を取り扱っていますが、この場合は後者が使用されているようです。さて、今回デバッグの際に使用したSFC版DQ12では、メモリマップは前者のようでした。TOもDQ12も共にLoROMのようですが、違いはTOはFastROM、DQ12はSlowROMだということです。さらに調べていくとこれを発見しました。
意味があまり良くわかっていない単語を読み飛ばしていくと、SlowROMとFastROMで使用するメモリマップがやはり異なるようです。どうやらこの推測で正しそうということになったので、LoROMではSlowROM/FastROMでアドレス変換を切り替えるようにしました。Lunar Addressの画面を見る限り、ExLoROMとExHiROMでまた動作が変わるようですが、またそれは対応する必要が出てきたら、ということでとりあえず放置します。
次に問題になるのが、SlowROM/FastROMの判断の部分です。以前紹介したSNES Cartrigeのサイトでは、この判断は
Value ROM speed
0 SlowROM (200ns)
3 FastROM (120ns)
と書かれていますが、実際にはSlowROMでも2だったりするものがあります(例:DQ12,FF5)。いままでは0でも3でもない場合は判断保留にしていましたが、SlowROM/FastROMの判断が65816の逆アセンブル部分の動作にも影響をおよぼすので、暫定対処として3でない場合は全部SlowROMという判断をすることにしました。
しかしつくづく思うのがHiROMのアドレス変換の容易さと、LoROMのアドレス変換の煩雑さです。自分はSNESのプログラム改造はDQ3から入ったので「アドレス変換なんて0xC00000を足したり引いたりすればいいんだろ」位にしか思っていませんでしたが、HiROMのゲームなんて実際にはごく一部なのかも知れません。なんにせよ、上記対応で不十分な場合は再度デバッグしますのでご一報を。
(22:30追記)
複数のゲームを扱う場合にリネーム対象が多く煩雑なので次回リリースでBNE2方式にならい「Settings」というフォルダの下にrommap.xmlもshortcut.xmlもpdtablesも全て置く、というように変更するつもりです。これなら、ゲームを切り替える場合に、フォルダのみを切り替えればOK、となるので管理がしやすくなるのでは、と思います。
コメント