0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【PoC】ブロックをパチパチと、FCのタイル描画処理を手作業で再現

Posted at

ファミコン(FC)では、ゲーム画面を構成する最小単位として、タイル(tile)と呼ばれる8×8ドットの小さなグラフィックブロックが使われています。マップ、キャラクター、HUD、テキストなど、あらゆるゲーム要素は、このタイルを複数組み合わせることで表現されています。

この8×8ドットのタイルは、本質的には8×8の行列であり、各要素が1ピクセルに対応します。ROM上では、1つのタイルは2枚の8×8ビットのビットプレーンで構成され、合計16バイトの容量を占めます。

mario_face_bytes = 'c0 f8 40 40 20 78 00 c0 00 00 e0 f8 fc f8 f0 c0'

0xc0 [1 1 0 0 0 0 0 0]          0x00 [0 0 0 0 0 0 0 0]
0xf8 [1 1 1 1 1 0 0 0]          0x00 [0 0 0 0 0 0 0 0]
0x40 [0 1 0 0 0 0 0 0]          0xe0 [1 1 1 0 0 0 0 0]
0x40 [0 1 0 0 0 0 0 0]          0xf8 [1 1 1 1 1 0 0 0]
0x20 [0 0 1 0 0 0 0 0]          0xfc [1 1 1 1 1 1 0 0]
0x78 [0 1 1 1 1 0 0 0]          0xf8 [1 1 1 1 1 0 0 0]
0x00 [0 0 0 0 0 0 0 0]          0xf0 [1 1 1 1 0 0 0 0]
0xc0 [1 1 0 0 0 0 0 0]          0xc0 [1 1 0 0 0 0 0 0]

この2つのビットプレーンは、「後の平面を2倍して前の平面に加える」というルールに従って合成され、最終的に0〜3の値を持つ4値の行列に変換されます。この数値はそれぞれ、対応するピクセルの色を表します。

[2 2 0 0 0 0 0 0]
[2 2 2 2 2 0 0 0]
[1 3 1 0 0 0 0 0]
[1 3 1 1 1 0 0 0]
[1 1 3 1 1 1 0 0]
[1 3 3 3 3 0 0 0]
[1 1 1 1 0 0 0 0]
[3 3 0 0 0 0 0 0]

今回は、いわゆるレゴ風の組み立てブロックを使って、FCのタイル描画処理を実際に手で再現してみました。本動画は、そのProof of Concept(PoC)としての試みになります。

……とはいえ、7行目の前半でうっかり色を間違えて配置してしまいました。こうしたルール通りに機械的に進める作業は、やはりコンピューターのほうが得意ですね。

ちなみに、この1×1サイズのブロックは回転対称の形をしているため、わずかに角度がずれただけでも並びが歪んで見えてしまいます。几帳面な人にはちょっとしたストレスかもしれません。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?