某ハード互換 HDL を書き始める

主流のプロジェクトをやろうにも迷走してるので、切り換えと息抜きを兼ねてやってみる。なので、今回だけ書いて終わりかもしれない。

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 ぐらい載せられるみたい