sprite 実装完了
昨日の状態からキャラクタ ROM とパレット RAM をつないだらわりとうまくいったので、手直しをした。そのあと sprite 単体から tilemap をつけて一通り完了。video を一通り実装したので、今回の目的は達成できたのでおしまい。
sprite 仕様関連
- キャラクタ ROM
- ROM は 4 つに別れているので、ROM の 同じ data bit 4bpp とする
- 1キャラ は 16x16 dot で、 8x8 dot の chip を 4つ並べたもので、アドレスの順に chip を下記に並べたもの
0|21|3
- -
-
- width, height の最小値は16x16で最大値は128x128. 最大時の 16x16 dot のキャラクタを下記の順番に並べ、それより小さい場合は左上を基準に描画しない。
00|08|10 18|20 28 30 38
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 上記から charcter ROM の address bit の振り方は下記から算出できる。
20:5 index[15:0] + {10'h000, offset_xf[6:4], offset_yf[6:4]} 4 offset_xf[3] 3:0 offset_yf[3:0] index: sprite map の charcter index offset_xf: sprite chip offset, x 座標で flip 時は bit 反転をする offset_yf: offset_xf の y 座標のもの
- 座標
- x 座標は 0 から 10'h3ff を持ち、 10'h140 から 10'h2bf が可視領域 (左から右)
- y 座標は 0 から 9'h1ff を持ち、 9'h17f から 9'h080 が可視領域. (下から上なので注意)