ファミリーコンピューター ROMカセット マッパー3
グラディウスやゲゲゲの鬼太郎で使用 PRG ROMは32KB、 CHR ROMが通常32KBで4バンクするROMカートリッジになります。 CHR ROM(CGデータ)は8KBまでなので マッパー3タイプのCHR ROMは4バンク(8KB×4)の構成になります。 マッパー3のバンク切り替えとプロテクト HC161はカウンタ機能を使用せずデータセットのみになり HC161のA〜Dのデータ入力がそのままQA〜QDに出力されます。 CHR ROMのバンク切り替えはこのHC161がROM領域の$8000−$FFFFに バンクキーデータを書き込む事によって切り替わるのですが /ROMSEL=0($8000−$FFFFをアクセス)になった瞬間 バンクキーデータとROMデータの2つのデータバスが衝突する様になっています。 これはファミリーコンピューターの/ROMSELとR//Wの信号が連動されていない事を利用しています。 バンクキーデータはHC161のQCが1にならないとPA12が0に固定、 QDが1にならないとPA10が0に固定されます(一応CHRデータが読めなくなるプロテクト) Bit7:− Bit6:− Bit5:1(QC=1にする) Bit4:1(QD=1にする) Bit3:− Bit2:− Bit1:バンク#D1 Bit0:バンク#D0 このバンクキーデータをROM領域の$8000−$FFFFに書き込む訳ですが、 そのアドレスにあるPRG ROMデータも同じでなければCHR ROMのバンク切り替えが行われないようになっています。 例えばPRG ROMの$8000の内容が$30とします $8000に$30と書き込むとCHR ROMはバンク#0に切り替わります ただしPRG ROMのデータとバンクキーデータが同じといっても全てのデータバスを見ている訳では無いので データのBit5、4とBit1、0が同じなら切り替わります この場合バンクキーデータが$F0でも切り替わります。 <例>グラディウス 8ACE:30 32 31 33 $8ACE−$8AD1に上記のようなROMデータが置かれています(キーデータが順番に並んでいません) バンク#00を選択するには$8ACEに$30を書き込めばCHR データ$0000−$1FFFがバンク#00になります バンク#01を選択するには$8AD0に$31を書き込めばCHR データ$0000−$1FFFがバンク#01になります バンク#02を選択するには$8ACFに$32を書き込めばCHR データ$0000−$1FFFがバンク#02になります バンク#03を選択するには$8AD1に$33を書き込めばCHR データ$0000−$1FFFがバンク#03になります また$8000に$30を書き込んだ場合はCPU側からは8000:30、ROMカセットからは8000:52の2つのデータとなり CHRは正しくバンク切り替えされません。
ダイオードが無いタイプCN−04(ダイナマイトボウル、クォース) バンクキーデータのBit5−4を1にする必要が無いと思います マイクロチップに繫がっているタイプがありダイオードの有無が不明 フリップルが通常のROMでダイオードが無いタイプの様です。<例>クォース FF70:30 31 32 33 ここを見て$FF70−$FF73に書き込みをしているので ダイオードがあるタイプと同じ方法でアクセスしている事が分かります。
ダイオードの向きが違うタイプ ダイオードの向きが1つだけ反対に向いているタイプで バンクキーデータが$30−$33ではなく、$10−$13になっています。 古いグラディウスタイプのマッパーのカセットでこのタイプのソフトを載せて起動すると 正確にCHR ROMが切り替わることが出来ません。<例>算数4年けいさんゲーム 80F8:10 11 12 13 ここに、それぞれのバンクキーダータを書き込むとCHR ROMが切り替わります。
Home へ戻る