スーパーファミコンのメモリマッピングメモ 備考録とエトセトラ
スーパーファミコンは、カートリッジの種類によって、メモリの使い方が微妙に異なっていたりします。
今回は、そんなメモリマッピングについての、備考録。
勢いでテキトウに書いているので、なんか間違いあるかも。
メモリマップドI/O
詳しい解説はWikipediaでも眺めてもらうとして。
要は、周辺装置との通信を、メモリの特定のアドレスを読み書きするだけでできるようにする仕組みのことです。
ここでいう周辺装置というのは、「ACアダプタ」や「AVケーブル」等のことではなく、「PPU」や、「APU」等の、MPU(5A22, 65816チップ)に接続されている機器のことです。 ある程度ゲーミングPC等に詳しい人であれば、「GPU」のようなものと捉えてもらって良いと思います。
ただこれ、単純にMPUの命令だけを見ると、本当にメモリに値を代入したり、メモリから値を拾ったりしているだけなので、パッと見何しているのかわかりにくいです。 スーパーファミコンには、これがいっぱいあります(スーパーファミコンに限った話でもありませんが)。全部使い倒すのは、なかなか至難の業です。 処理をマクロ化するとか、ライブラリ化するとか、うまく隠蔽しないと、かる~く死ぬるよ?
で、ROMイメージのメモリ割り当てに関する見やすい資料が無かったので、手元にある資料から、パッと見でわかる表を書きました。
ROMのマップタイプ種別によって、ROMで示しているエリアがSRAMやRAMになったりと、多少変わりますが、おおよそこれに従います。
①で示す場所は、すべてのバンクにおいて$7E:0000~$7E:1FFFのミラーになっています。 つまり、$7E:0000 と、$3F:0000 と、$00:0000 は同じ値を読み書きします。
カートリッジRAM
カートリッジ上に実装されているRAMです。いわゆるSRAM。
カートリッジのバッテリーがない場合は、ただのRAM扱いです。電源消したらデータが消えます。 おきのどくですが以下略
Rom Type | I/O Address |
---|---|
LoROM | $70:0000 ~ $7D:FFFF |
HiROM | $30:6000 ~ $3F:7FFF |
ExLoROM | $B0:6000 ~ $BF:FFFF |
ExHiROM | $B0:6000 ~ $BF:FFFF |
余談1 : SA-1 チップのメモリマッピング
めっちゃ特殊です。上記図には当てはまりません。
特に、SA-1 RAM へアクセスするI/O回りが、他のカートリッジのソレとかなり違います。
また、カートリッジ側のチップ(SA-1 チップ)と、SNES側のチップ(5A22)から見たメモリマッピングが微妙に違うため、これまた厄介です。 命令セットが一緒なので、SA-1で動いている場所をちゃんと把握しないと、いらぬ不具合を生みます。
更に余談
そんなわけで、こいつを実機でカンタンに動かせるチョットアレなブツは、今のところありません。
テキトーなカートリッジからSA-1チップひっぺがして、ICにデータ焼いて、カートリッジ基盤作って盛り込むというのが、おそらくいまのところ実機でHomebrewできる唯一の手段です。
チップ搭載のカートリッジ自体は、けっこうな数が出てるので、中古ショップでマイナータイトルを探せば、わりと安価で入手できます。
余談2 : SuperFX チップのメモリマッピング
SNES側チップ(5A22)から見たメモリマップは、キホンLoROMなんですけど、ROMイメージのメモリマッピングが特殊。
キホン的に $00:8000 ~ $3F:FFFF にROMイメージがマッピングされますが、 $40:0000 ~ $5F:FFFF に、HiROMのようにミラーがマッピングされています。
このメモリマッピングの関係上、SuperFX採用ROMの上限サイズは、2MBytesだと言われています。
($80:8000 ~ $BF:FFFF および $C0:0000 ~ $FF:FFFF は、CPU ROM という謎エリアになってて、たぶん使えません)
(カートリッジの回路通せば、5A22でのみアクセス可能なROM読み込みとして機能する可能性はある?よく知りません。そもそもピンあまってんの?)
他にも、Backup RAM とかのI/Oマップとかもあったりします。あ、やっぱりけっこう違うね。
更に余談
このチップに関しては、対応するチョットアレなブツがあるので、Homebrewを実機で手軽に起動できます。
ただし、チップを搭載したカートリッジが必要です。
ただ、これが厄介なことに、カートリッジ毎に微妙にバージョンアップしているので、期待した動作をするかどうかはカートリッジに搭載したチップ次第です。
いちばん良いのは、ヨッシーアイランド(GSU2-SP1)を入手することだと思いますが、ヘタなショップだとプレミアついてて高いです。
また、このGSU2-SP1チップはヨッシーアイランドでしか採用されてません。入手難度はやや高です。
スターフォックスやワイルドトラックスのチップはバージョンが古い(GSU1)ので、本来の性能の半分程度しか出ない(らしい)です。