主流のプロジェクトをやろうにも迷走してるので、切り換えと息抜きを兼ねてやってみる。なので、今回だけ書いて終わりかもしれない。
main CPU memory map と RAM の配置
memory address assignment
SRAM 00000h-3ffffh CPU ROM
SRAM 40000h-43fffh CPU RAM
FPGA c0000h-c03ffh spritemap
FPGA c8000h-c8bffh palette for tilemap
FPGA cc000h-ccbffh palette for spritemap
DRAM d0000h-d3fffh tilemap1
DRAM d8000h-dbfffh tilemap2
???? e0000h-effffh sound ram; shared to sound CPU
SRAM ffff0h-fffffh ROM; needed for reset startup
DRAM xxxxxx-xxxxxx tile/sprite charcter
- 容量の都合で今回も CPU ROM, RAM は高速 SRAM に割り振り。
- 0x4000 byte なら無理に FPGA に押し込んで CPU ROM に flash を割り当てれば SRAM を開けることが出来る。
- 容量を食う tilemap とキャラクタは DRAM 行き。
- sound ram が困りもの。この領域のデータが全てZ80と共有となっている。
- Z80 には ROM が割り当ててないので、main CPU がこの RAM にプログラムコードを転送してから起動する仕組み。(メガドラもおなじだったはず)
- このサイズで自由に使える RAM はないので保留。
- SRAM の容量は余ってるんで、切り換えしたらパフォーマンスが落ちるんだろうな。
- 他雑多で容量が少ないのは FPGA 内部 RAM に割り当てる。
video tilemap
- 2レイヤ。
- 2つ並列に動いているようだが、今回の実装では順番に処理する。
- scroll 専用 RAM がなく、レジスタが1つあるだけ。スコアなどのパラメータは描画途中にレジスタを書き換える、家庭用8bitゲーム方式。これぐらい立派なシステムだとライン毎に専用RAMがあるのが普通なのに。
sprite
- ZOOM なし (重要)
- RAM の余裕がないのでラインバッファにする
- キャラクタは 1MB ぐらい載せられるみたい