2019年3月22日金曜日

VGS8のメモリマップを考える

ファミコンのプログラミングができる人じゃないと理解できない(ので、ブログで書いても大抵の人が理解できない)内容ですが、VGS8のメモリマップを考えました。
下表のような形です。
AddressUsage
$0000〜$00FFZero page
$0100〜$01FFStack
$0200〜$4FFFRAM
$5000〜$53FFSprite OAM (4x256)
$5400I/O port (RW): PRG Bank of $8000〜$BFFF
$5401I/O port (RW): PRG Bank of $C000〜$FFFF
$5402〜$5BFFother I/O ports (WIP)
$5C00〜$5FFFPalette
$6000〜$63FFBG nametable 0 (LT; 左上)
$6400〜$67FFBG nametable 1 (RT; 右上)
$6800〜$6BFFBG nametable 2 (LB; 左下)
$6C00〜$6FFFBG nametable 3 (RB; 右下)
$7000〜$73FFFG nametable 0 (LT; 左上)
$7400〜$77FFFG nametable 1 (RT; 右上)
$7800〜$7BFFFG nametable 2 (LB; 左下)
$7C00〜$7FFFFG nametable 3 (RB; 右下)
$8000〜$BFFFProgram 0
$C000〜$FFFFProgram 1
ゼロページとスタックはファミコンと全く同じですね。
あと、$8000以降に16KB区切りで2つのプログラムデータを置ける点もファミコンと同じです。
それ以外はかなり弄りました。

まず、最大の違いはRAMです。
ファミコンの場合、基本マッパー(mapper0)のRAM(WRAM)は$0200〜$1FFFで、$2000〜$3FFFがI/Oやミラーですが、VGS8では$0200〜$4FFFまでの19KBを丸々RAMとして使うことができます。

そして、ファミコンの場合、OAM(スプライトのメモリ)をPPU側に持っていて、RAMの任意1ページ(256バイト)をDMA転送して使うのですが、VGS8の場合、$5000〜$53FFまでの1KBがPPUのOAMにダイレクトマップされています。つまり、スプライト描画にDMA転送しなくても良いのです。スゴイ!(なお、スプライト表示数の上限はファミコンは64個 & 水平最大8個ですが、VGS8は256個 & 水平上限が無制限です)

$5400〜$5BFFはI/Oポートとしてリザーブしました。
用途はまだ考えていません。
シンプルなPPU/APUアクセスに加えて、C言語のmemmove関数相当のメモリブロック転送機能を実装する予定です。

$5C00〜$5FFFの1KBはパレットデータです。
ファミコンの場合、スプライトとBGそれぞれに2bitカラーのパレットを4個割り当てることができますが、VGS8は旧VGSの仕様を引き継いで、256色パレット1つをBG/FG/スプライトのそれぞれで共有します。つまり、VGS8の最大同時発色数はシンプルに256色となります。

$6000〜$7FFFの8KBはドカンと全部nametableです。
ファミコンはBG4スクリーン分のnametableがあって内2スクリーンは必ずミラーですが、VGS8はBG/FGそれぞれ4スクリーンフルに利用することができます。
また、FGというファミコンには無いグラフィック機能があります。
ファミコンのBGは、「すべてをスプライトの背面」or「すべてをスプライトの前面」の何れかしか表示することができませんが、VGS8では「BGは必ずスプライト背面」「FGは必ずスプライト前面」に表示する仕様です。
しかも、I/OポートでPPUへアクセスする必要が無く、OAMと同様PPUのnametableにダイレクトマップされる仕様です。

また、ファミコンの場合、バンク切り替えをするにはMMC3やMMC5といった特殊mapperを用いる必要がありますが、VGS8は標準機能としてプログラムとCHR両方のバンク切り替えをサポートしています。
ただし、コナミのグラディウス2等で使われているCHRの部分領域単位でのバンク切り替えには対応しません。この点についてはCPUの速度がファミコン比で4倍以上ある(ファミコンは1.79MHzですがVGS8は今の所8MHzにする予定です)ので、パワーでゴリ押せば大丈夫だろうと思います。

楽しくなってきた。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。

合理的ではないものを作りたい

ここ最近、実機版の東方VGSの開発が忙しくて、東方VGSの曲追加が滞っています。 東方VGS(実機版)のデザインを作りながら検討中。基本レトロUIベースですがシークバーはモダンに倣おうかな…とか pic.twitter.com/YOYprlDsYD — SUZUKI PLAN (...