メモリマッピング

SNESの仮想メモリ空間について説明します。

バス

バス(bus)とは、コンピュータの内外で各回路がデータをやり取りするための共通経路を指す言葉です。SNESには8ビット幅のデータバスが1つと、2つのアドレスバスがあります。アドレスバスはそれぞれアドレスバスA, Bと呼ばれます。

  1. データバス
    8ビット幅で、データのやり取りをするために使用します。データバスに値が書き込まれていないときに読み込むと、最後にバスに書き込まれた値が代わりに返ります。これはオープンバスと呼ばれます。
ラインカートリッジ拡張
D01911
D12012
D22113
D32214
D45015
D55116
D65217
D75318
  1. アドレスバスA
    24ビット幅で、読み込み/書き込みライン(/RDおよび/WR)と、2つの補助ラインを併用します。このバスはカートリッジとWRAMの両方に接続されます。
ラインカートリッジラインカートリッジ
A017A1439
A116A1540
A215A1641
A314A1742
A413A1843
A512A1944
A611A2045
A710A2146
A89A2247
A98A2348
A107/RD23
A116/WR54
A1237/CART49
A1338/WRAM32
  1. アドレスバスB
    8ビット幅で、読み込み/書き込みライン(/PARDおよび/PAWR)と併用します。
    このバスはカートリッジと拡張ポートだけではなく、WRAM, PPU1, PPU2, APUにも接続されています。PPUやAPUとの通信はこのバスを通して行います。
ラインカートリッジ拡張
PA0281
PA1592
PA2293
PA3604
PA4305
PA5616
PA637
PA7348
/PARD410
/PAWR359

メモリマップ

アドレスバスAにはLoROMやHiROMなどの異なる種類のカートリッジが配置されます。カートリッジは/CART信号がアクティブなときにだけ反応し、また、アドレスバスA, Bどちらの信号にも反応できますが、片方は無視されます。同様に、拡張ポートにデバイスが接続された場合には、アドレスバスBのマップされていないレジスタに反応します。
WRAMは/WRAM信号がアクティブなときはアドレスバスAに配置され、同時にレジスタ$2180 - $2183を通じてアドレスバスBに配置されます。
APUはアドレスバスBの$40 - $7F(CPUからは$2140 - $217F)に配置され、PPU1および2はアドレスバスBの$00 - $3F(CPUからは$2100 - $213F)に配置されます。
これらを総合すると、次のようなメモリマップが導かれます。なお、この表における「速度」の列は、その領域に対するメモリアクセス速度を表します。
マスタークロックの周波数はNTSCでは21.47727MHz、PALでは21.28137MHzで、CPUの内部動作サイクルは常に6マスターサイクルとなります。
Fastメモリアクセスは6マスターサイクル(3.58MHz/ 3.55MHz)、Slowメモリアクセスは8マスターサイクル(2.68MHz/ 2.66MHz)、XSlowメモリアクセスは12マスターサイクル(1.79MHz/ 1.77MHz)の時間をそれぞれ要します。

バンクアドレス速度マッピング
$00 - $3F$0000 - $1FFFSlowアドレスバスA + /WRAM (ミラーバンク: $7E)
$2000 - $20FFFastアドレスバスA
$2100 - $21FFFastアドレスバスB
$2200 - $3FFFFastアドレスバスA
$4000 - $41FFXSlow内部CPUレジスタ[*1]
$4200 - $43FFFast内部CPUレジスタ[*1]
$4400 - $5FFFFastアドレスバスA
$6000 - $7FFFSlowアドレスバスA
$8000 - $FFFFSlowアドレスバスA + /CART
$40 - $7D$0000 - $FFFFSlowアドレスバスA + /CART
$7E - $7F$0000 - $FFFFSlowアドレスバスA + /WRAM
$80 - $BF$0000 - $1FFFSlowアドレスバスA + /WRAM (ミラーバンク: $7E)
$2000 - $20FFFastアドレスバスA
$2100 - $21FFFastアドレスバスB
$2200 - $3FFFFastアドレスバスA
$4000 - $41FFXSlow内部CPUレジスタ[*1]
$4200 - $43FFFast内部CPUレジスタ[*1]
$4400 - $5FFFFastアドレスバスA
$6000 - $7FFFSlowアドレスバスA
$8000 - $FFFFSlow/ Fast[*2]アドレスバスA + /CART
$C0 - $FF$0000 - $FFFFSlow/ Fast[*2]アドレスバスA + /CART

補注
[1] 内部CPUレジスタ用のアドレスはアドレスバスAの外にあり、CPUはデータバスを無視する。
[2] CPUレジスタ $420D のビット0がセットされているときはFast、クリアされている場合はSlowとなる。

LoROMメモリマップ

LoROMモデルではバスのA15ピンおよびA23ピンはROMに接続されず、また、バスのA16~A22ピンがROMのA15~A21ピンに接続されます。
ROMに接続されないA15ピンは、通常/CARTピンおよび/WRピンと組み合わされ、A15ピンがHighのときにROMを、A15ピンがLowのときにSRAMを選択します。
したがって、LoROMモデルでは原則としてバスの下位バンクにはROMがマッピングされません。その分、大容量SRAMを搭載することが可能です。
アドレスピンが最大22ビットであることから分かる通り、ROM容量は最大4MBです。
LoROMモデルの標準的なメモリマッピングは次のようになります。

バンクアドレスマッピングミラーバンク
$00 - $3F$0000 - $1FFF下位RAM$7E
$2000 - $2FFFI/Oポート (PPU1, APU)$80 - $BF
$3000 - $3FFFI/Oポート (SFX, DSPなど)$80 - $BF
$4000 - $41FFI/Oポート (PAD)$80 - $BF
$4200 - $5FFFI/Oポート (PPU2, DMAなど)$80 - $BF
$6000 - $7FFF(予約)$80 - $BF
$8000 - $FFFFMode 20 ROM$80 - $BF
$40 - $6F$0000 - $7FFFMode 20 ROM
MAD-1チップの場合は未割当
$C0 - $EF
$8000 - $FFFFMode 20 ROM$C0 - $EF
$70 - $7D$0000 - $7FFFMode 20 SRAM (448KB)$F0 - $FD
$8000 - $FFFFMode 20 ROM$F0 - $FD
$7E$0000 - $FFFF拡張RAM$00 - $3F
$7F$0000 - $FFFF拡張RAM
$80 - $BF$0000 - $FFFFバンク$00 - $3Fのミラー$00 - $3F
$C0 - $EF$0000 - $FFFFバンク$40 - $6Fのミラー$40 - $6F
$F0 - $FD$0000 - $FFFFバンク$70 - $7Dのミラー$70 - $7D
$FE - $FF$0000 - $7FFFMode 20 SRAM (64KB)
$8000 - $FFFFMode 20 ROM

HiROMメモリマップ

HiROMモデルでは、バスのA0からA21ピンがそのままの順序でROMに接続され、64KBバンクをリニアにアクセスすることができます。
A22ピンおよびA23ピンはROMに接続されません。
アドレスピンが最大22ビットであることから分かる通り、ROM容量は最大4MBです。
HiROMモデルの標準的なメモリマッピングは次のようになります。

バンクアドレスマッピングミラーバンク
$00 - $2F$0000 - $1FFF下位RAM$7E
$2000 - $20FF未割当$80 - $AF
$2100 - $21FFI/Oポート (PPU1, APU)$80 - $AF
$2200 - $2FFF未割当$80 - $AF
$3000 - $3FFFI/Oポート (SFX, DSPなど)$80 - $AF
$4000 - $40FFI/Oポート (PAD)$80 - $AF
$4100 - $41FF未割当$80 - $AF
$4200 - $44FFI/Oポート (PPU2, DMAなど)$80 - $AF
$4500 - $5FFF未割当$80 - $AF
$6000 - $7FFF(予約)$80 - $AF
$8000 - $FFFFMode 21 ROM ($C0 - $EFから)$80 - $AF
$30 - $3F$0000 - $1FFF下位RAM$7E
$2000 - $20FF未割当$B0 - $BF
$2100 - $21FFI/Oポート (PPU1, APU)$B0 - $BF
$2200 - $2FFF未割当$B0 - $BF
$3000 - $3FFFI/Oポート (SFX, DSPなど)$B0 - $BF
$4000 - $40FFI/Oポート (PAD)$B0 - $BF
$4100 - $41FF未割当$B0 - $BF
$4200 - $44FFI/Oポート (PPU2, DMAなど)$B0 - $BF
$4500 - $5FFF未割当$B0 - $BF
$6000 - $7FFFMode 21 SRAM (128KB)$B0 - $BF
$8000 - $FFFFMode 21 ROM ($F0 - $FFから)$B0 - $BF
$40 - $7D$0000 - $FFFFMode 21 ROM$C0 - $FD
$7E$0000 - $1FFF下位RAM$00 - $3F
$2000 - $7FFF上位RAM
$8000 - $FFFF拡張RAM
$7F$0000 - $FFFF拡張RAM
$80 - $BF$0000 - $FFFFバンク$00 - $3Fのミラー$00 - $3F
$C0 - $FF$0000 - $FFFFMode 21 ROM

ExHiROMメモリマップ

ExHiROMモデルは、4MBのROMチップに加え、最大4MBの追加のROMチップを搭載することができます。
バスのA22ピンは依然としてROMに接続されませんが、A23ピンはカートリッジ基板上の2つのROMチップのどちらをアクティブにするかを選択するために使用されます。
A23ピンがHighのとき、ROM1が選択され、Loのとき、ROM2が選択されます。また、ROM1はFastROMにすることができますが、ROM2はSlowROMに制限されます。
ただし、メモリマップの関係上、カートリッジヘッダはROM2に置かれ、また、ROM2の末尾2バンクの各々下位32KB(物理アドレス$7E:0000 - 7FFF および $7F:0000 - 7FFF)はアクセスすることができません。
ROM2の末尾2バンクの各々上位32KB(物理アドレス$7E:8000 - FFFF および $7F:8000 - FFFF)はバスのバンク$3Eおよび$3Fにマッピングされます。
ExHiROMモデルの標準的なメモリマッピングは次のようになります。

バンクアドレスマッピングミラーバンク
$00 - $2F$0000 - $1FFF下位RAM$7E
$2000 - $20FF未割当$80 - $AF
$2100 - $21FFI/Oポート (PPU1, APU)$80 - $AF
$2200 - $2FFF未割当$80 - $AF
$3000 - $3FFFI/Oポート (SFX, DSPなど)$80 - $AF
$4000 - $40FFI/Oポート (PAD)$80 - $AF
$4100 - $41FF未割当$80 - $AF
$4200 - $44FFI/Oポート (PPU2, DMAなど)$80 - $AF
$4500 - $5FFF未割当$80 - $AF
$6000 - $7FFF(予約)$80 - $AF
$8000 - $FFFFMode 25 ROM2$40 - $6F
$30 - $3F$0000 - $1FFF下位RAM$7E
$2000 - $20FF未割当$B0 - $BF
$2100 - $21FFI/Oポート (PPU1, APU)$B0 - $BF
$2200 - $2FFF未割当$B0 - $BF
$3000 - $3FFFI/Oポート (SFX, DSPなど)$B0 - $BF
$4000 - $40FFI/Oポート (PAD)$B0 - $BF
$4100 - $41FF未割当$B0 - $BF
$4200 - $44FFI/Oポート (PPU2, DMAなど)$B0 - $BF
$4500 - $5FFF未割当$B0 - $BF
$6000 - $7FFFMode 25 SRAM (128KB)$B0 - $BF
$8000 - $FFFFMode 25 ROM2$70 - $7D
$40 - $7D$0000 - $FFFFMode 25 ROM2
$7E$0000 - $1FFF下位RAM$00 - $3F
$2000 - $7FFF上位RAM
$8000 - $FFFF拡張RAM
$7F$0000 - $FFFF拡張RAM
$80 - $BF$0000 - $7FFFバンク$00 - $3Fのミラー$00 - $3F
$8000 - $FFFFMode 25 ROM1$C0 - $FF
$C0 - $FF$0000 - $FFFFMode 25 ROM1

ExLoROMメモリマップ

ExLoROMモデルは非標準のマッピングです。ExHiROMと同様、4MBのROMチップに加え、最大4MBの追加のROMチップを搭載することができます。
バスのA15ピンは依然としてROMに接続されませんが、A23ピンはカートリッジ基板上の2つのROMチップのどちらをアクティブにするかを選択するために使用されます。
A23ピンがHighのとき、ROM1が選択され、Loのとき、ROM2が選択されます。また、ROM1はFastROMにすることができますが、ROM2はSlowROMに制限されます。
ただし、メモリマップの関係上、カートリッジヘッダはROM2に置かれ、また、ROM2の最後のバンク(物理アドレス$7F:0000 - FFFF)はアクセスすることができません。
ExLoROMモデルの標準的なメモリマッピングは次のようになります。

バンクアドレスマッピングミラーバンク
$00 - $3F$0000 - $1FFF下位RAM$7E
$2000 - $2FFFI/Oポート (PPU1, APU)$80 - $BF
$3000 - $3FFFI/Oポート (SFX, DSPなど)$80 - $BF
$4000 - $41FFI/Oポート (PAD)$80 - $BF
$4200 - $5FFFI/Oポート (PPU2, DMAなど)$80 - $BF
$6000 - $7FFF(予約)$80 - $BF
$8000 - $FFFFMode 26 ROM2
$40 - $6F$0000 - $7FFFMode 26 ROM2?
$8000 - $FFFFMode 26 ROM2
$70 - $7D$0000 - $7FFFMode 26 SRAM (448KB)$F0 - $FD
$8000 - $FFFFMode 26 ROM2
$7E$0000 - $FFFF拡張RAM$00 - $3F
$7F$0000 - $FFFF拡張RAM
$80 - $BF$0000 - $7FFFバンク$00 - $3Fのミラー$00 - $3F
$8000 - $FFFFMode 26 ROM1
$C0 - $EF$0000 - $FFFFMode 26 ROM1?
$8000 - $FFFFMode 26 ROM1
$F0 - $FF$0000 - $7FFFMode 26 SRAM (512KB)
$F0 - $FF$8000 - $FFFFMode 26 ROM1