cycle = 0 counts
『伝説のアーケードゲームを支えた技術』(松浦健一郎・司ゆき 著、技術評論社、ISBN 978-4-297-11554-8)という本を読んで、ナムコの『ギャラクシアン』の背景の星がハードウェアによる物だと知って、面白いと思った。
検索してみると解説はあるけど実装例がない様なので、JavaScript で眺めるだけの物を作ってみた。
判っているのは
- LFSR ― 線形帰還シフトレジスタ ― という物。
- 512×256 = 131,072 ピクセルの空間で計算する 。
- 17 ビットで周期 217-1 = 131,071 、空間の大きさと 1 違いなのがミソ。
- bit0 と bit12 の XNOR ― 否定排他的論理和 ― を、右シフトで空いた MSB に入れる。
1 1111 111- ---- ---02
の時に星が存在する。
- ---- ---p pppp p---2
の 64 通りをパレットにする。
- 座標に応じて明滅する。
判らないのは
- 512×256 ピクセルは、流れる方向とそれに垂直な方向のどちらが長辺なのか。
『ギャラクシアン』の画面は 256×224 ピクセル(の縦画面)なので、どちらでも当てはめられる。
なんとなく長辺方向に流れるんじゃないかと予想。
- 64 色のパレットの内訳。
全く不明だったので、三原色の各要素を 0x3F、0x7F、0xBF、0xFF の 4 段階にして 43 = 64 色を作った。
背景の黒も 64 色に含むのかどうか(星は 63 色までなのか)。
- X、Y 座標で明滅する方法。
とりあえず
((Y>>4)^X)&1
が 1 なら描画としてみた。
「縦 16 ピクセル毎に点滅、1 列毎にオンオフ入れ替え」。
それっぽく実装出来たかな、と思う。