ファミリーコンピューター 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 へ戻る