051960 のスプライト情報

まずかったらこの項目はそのうち消えます。

VRAM - sprite attribute VRAM

CPU から見える RAM は基板に載ってる databus width 8bit の SRAM で、68000 から使う場合は 16bit のように見えるが、LDS,UDS で A0 を生成して切り換えているので、おそらく byte access 専用。(movep ではなく move.b が使えるのが便利なのかもしれない)

8 byte 単位で 128 個のspriteを管理できると思われる。

CPU から見える RAM は Vblank のタイミングかなにかで、定期的に 051960 に取り込まれて、ASIC 内部RAMか別の RAM へ転送されるものと思われる。このときに sort のようないらないbitは捨てて、 y position みたいなものはレンダリング途中に更新すると思われる。

offset.bit|assingment
                                          • -
0.7 enable (0:hide, 1:visible 0.6:0 priority とか sort とか link とかよばれるもの 1.7:5 size 1.4:0 charcter ROM address 16:13 2.7:0 charcter ROM address 12:5 3.7:0 配線依存 4 から 7 は先日のやつと同じ
  • priority はスプライトの優先度
  • size はスプライトのサイズ (0:16x16, 1:32x16, 2:16x32, 3:32x32, 4:64x32, 5:32x64, 6:64x64, 7:128x128)
  • charcter ROM は後で詳しく記載する
  • 配線依存は基本的に設計毎にことなる部分で、color RAM address だったり、charcter ROM bank だったり、shadow bit だったりばらばら。 offset 3 はよくばらばらにされるが、他のbitも配線を変更する場合があるらしい

(bank は sprite ではなく tile のほうでしたので削除しました)

size と charcter ROM address

size によって charcter ROM address に alignment みたいなものが発生するが、空いた bit は一見不規則に charcter ROM address が振られる。size によって変更される bit と sprite 内の offset は下記になる。

sz A10 A9  A8  A7  A6  A5  A4  A3  A2:0
                                                                                  • -
0 ca10 ca9 ca8 ca7 ca6 ca5|oy3 ox3 oy2:0 1 ca10 ca9 ca8 ca7 ca6|ox4 oy3 ox3 oy2:0 2 ca10 ca9 ca8 ca7|oy4[ca5]oy3 ox3 oy2:0 3 ca10 ca9 ca8 ca7|oy4 ox4 oy3 ox3 oy2:0 4 ca10 ca9 ca8|ox5 oy4 ox4 oy3 ox3 oy2:0 5 ca10 ca9|oy5[ca7]oy4 ox4 oy3 ox3 oy2:0 6 ca10 ca9|oy5 ox5 oy4 ox4 oy3 ox3 oy2:0 7 |oy6 ox6 oy5 ox5 oy4 ox4 oy3 ox3 oy2:0 (sz: size, ox: offset x, oy: offset y, ca: charcter ROM address)

bit 11以降は size による変更はない。