M72 sprite

この記事もそのうちこっそり消えるかもしれません。

attribute RAM

CPU から見える RAM は 0x200 word x 16 bit。4 word 毎に記載し、0x80 個の attribute を持つことが出来る。sprite renderer に描画処理用の RAM を別に持ち、転送開始レジスタ (main CPU port address 0x0004) を write すると CPU 書き込み用 RAM から描画処理用の RAM へ転送されて、画面が更新される。

offset.bit
                                • -
0.8:0 y position 1.15:0 charcter ROM starting address 20:5 2.15:14 x size 2.13:12 y size 2.11 x flip 2.10 y flip 2.3:0 color RAM address 7:4 3.9:0 x position
  • size は 16 << size となり、16,32,64,128 の 4 通り。
  • 原点からの offset は 0 から 127 の 7bit で構成される。(x,yで2つ)
  • charcter ROM starting address から offset に応じて charcter ROM の address が更新される。051960 とは異なり、 charcter ROM address にも carry が影響する点にから starting とした。

レンダリング途中は offset x, offset y からアドレスを算出するが、下記のように bit 連接してから加算する。

  20:11   10:8   7:5   4   3:0
                                                          • -
9'h00 ox6:4 oy6:4 ox3 oy3:0 ca20:11 ca10:8 ca7:5 0 4'h0 ox:offset x, oy:offset y ca:charcter ROM starting address

flip 時の offset 反転は size によって異なる。size 16 なら bit3:0, size 32 なら bit:4:0 となる。

charcter data と ROM

data は 8x4 bit で構成されて、 offset x 2:0 に応じて bit が選択される。offset 0 なら bit7, offset 7 なら bit0 と msb から左から右へ画素が選択される。

ROM は 8bit の ROM 4 つを1グループとし、4つとも address が共有され、32bit となる。

color RAM と charcter data

各レイヤの透過状況を調べ、描画するレイヤの color RAM address 7:4 と charcter data (4bit) を取得し、 color RAM の address とする。color RAM から得られた data を D/A 変換してモニタへ出力する。

color RAM は 8x3 bit で構成され、 5x3bit だけが使われる(?)。address は下記で構成される。

8   7:4   3:0
                          • -
l cl7:4 cd3:0 l:layer (0:tile, 1:sprite), cl:color RAM address cd:charcter data