NES 2.0 submappers

nesdev wiki で最近更新されている文書です。そこには古い規格では表現できないために、やっつけで実装された仕様たちの行き場を求めてさまよっている姿がありました。

http://wiki.nesdev.com/w/index.php/NES_2.0_submappers

ここでは自分が解釈した内容とコメントを書こうと思います。

MMC1

MMC1 への配線のバリエーションは多く、互換性のないものもたくさんあります。

さらに MMC1 のマイナーバージョンによってライトプロテクトの仕様が異なるため、マネーゲームラーメンマンがちゃんと動かないらしい。クソゲーだから動かなくてもいいです。

MMC3

ライトプロテクトの仕様が異なる MMC6 についてどうするかと書かれています(MMC6 は日本のゲームにはないので理解しづらいかも)。TQROM や TLSROM のような配線の違いはまとめるつもりはないのでしょうか?

Hardwirired mirroring をサポートするって事は MMC3 より前にできた、namco の 108, 109 をここにまとめるのでしょうか?

mapper 034, 071, 232, 078

なじみのない NES ソフトなのでよくわかりません。

VRC2, VRC4

VRC4 につながれるアドレスバスはソフトによってバラバラで、5通りあるのに、互換性のないマッパー番号が一緒になってるとか無茶苦茶でなんとかしようよという話。

VRC4 はVRC2 から IRQ カウンタ, Work RAM レジスタ, 変なCPUレジスタを追加しただけだし、VRC2 への配線もアドレスバスはバラバラにされている。

ここの曲者は2つあって、VRC4 では $c000-$dfff が変則的可変領域に変更された点と Work RAM レジスタの使用不使用の話。前者 VRC2 は固定領域なのでベクタに $c000-$dfff を置いたときに動かなくなり、後者はレジスタがあっても使ってないソフトがある点。

Namco 129/163/175/340

129 は仕様がよくわからん、 163 の音源は配線された抵抗値がバラバラ、175/340 を使っている一部のソフトは 163/175/340 兼用可能になっている点。

AxROM,CxROM,UNROM

汎用ロジックICで作られた簡素なメモリコントローラでのバス衝突をどうするか考えているみたい。 AOROM, ANROM, AMROM でバス衝突の仕様が違うらしい。なんじゃこりゃ。

mapper 032

nametable レジスタがあるものの、使わない配線がされているソフトが1本ある。

総評

基本的に今のエミュレータの仕様で9割のソフトは動くし、やっつけごまかしでなんとかなってるので、そこまで精度を上げる必要があるのかが問題。
エミュレータだといいんだけど、実機にフィードバックしたいとなると問題になるけどこれもやらないひとが9割だからどーでもいいといえばどーでもいい。

私は1割の人間と言うことで、マイペースにやろうと思います。

個人的に思ってもしかすると議論は済んでるかもしれないのは iNES header の H/V フラグが雑すぎるので、 H,V,mapper control の3つに分類、 trainer は廃止、 $6000-$7fff の RAM はデフォルトなしで、カートリッジ RAM の容量を明確化すること、でしょうか。

RAM の容量は悩ましくて、複数のRAMを持つ場合はどうするのという点があります。例として 163 のゲームは、内部RAM or 外部RAMのどっちをバッテリーバックアップするのかとか。