ゼビウス ギド・スパリオの破片
かにかにクラブ
>
ゼビウス
>
ギド・スパリオの破片
ギド・スパリオを破壊すると時々赤い四角形が表示される。
プログラムミスのせいでオブジェクトROMに実装されていない画像を表示したものであるが、なぜ赤なのか、なぜ四角形なのか、を考察する。
考察というか
コジツケ
。
オブジェクト=画像パターンの事。「スプライト」と言いかえれば説明要らずの人が多いかもしれない。
事前知識・ディジタル回路関連
●電源電圧は5V
ゼビウスの基板の動作には+12Vと+5Vの電源を繋ぐが、そのうちディジタル回路に必要なのは5Vのほう。
●Lは0V、Hは5V
ディジタル回路は、入力条件・出力結果ともに電圧が低いか高いかで考える。
5Vの回路なので、
低いほうを「L」(Lowの頭文字)=0V、高いほうを「H」(Highの頭文字)=5V
、とする。
よく「ディジタルは0と1の二進数の世界」と言われるが、Lを0、Hを1、と表記を変えていると考えて問題ない。
●閾値(しきいち)は1.4V
出力結果はきちんと0Vか5Vを出すように各部品が努力するとして、入力条件がそれを守りきれてなかったらどうするか。
ある数値を境界線にして、それより低ければL、高ければHとする。
かなり大雑把に分けてディジタル回路にはTTLタイプとCMOSタイプがあり、5VのTTLの境界線は1.4Vが普通。
●LとHの他にZがある
繋がっている線の電圧がLかHかで動作するのがディジタル回路の基本だが、出力結果に「
どこにも繋がっていない状態
」を作ることができる部品がある。
その状態をハイインピーダンスと言い、
Z
と書くことが多い。
これをどう使うかというと、例えば2個のROMを直結しておいて、必ず2個のうち片方だけ出力をZにするように回路を組んでおけば、1個のROMを制御する能力しかない部品に2倍のROMを繋ぐことができる。(もちろん2つ同時には制御できない)
事前知識・カラー番号とパレット
●画像データはカラー番号で作る
画面にはカラフルな色付きの絵が表示されるが、画像データは数字(番号)のみで作られていて、それ自体には色の情報がない。
●カラー番号にパレット情報を使って着色する
パレット情報は、例えば、1は赤・2は緑・3は青、といったように番号に色を対応させておく。
そのパレットを、先ほどの画像データのカラー番号に当てはめて表示する。
同じ画像データでも、色が異なるパレットを当てはめれば、画面には色違いの画像が表示される。
●パレットの色には「透明」もある
0=透明
事前知識・ゼビウスのオブジェクトのデータ構造
●カラー番号は二進数にして各桁に分けたものの合成
十進数⇔二進数:0⇔00:1⇔01:2⇔10:3⇔11
{合成結果} = {二進数の10の桁が0でない} + {二進数の1の桁が0でない}
今回は0〜3の4色用で2枚の合成だが、8色用なら3枚を合成する。
●横16×縦16ピクセルのオブジェクトは横1×縦4ピクセルを並べたもの
●横1×縦4ピクセルを4桁の二進数と考える
4ピクセルの上から順に、二進数の1000の桁・100の桁・10の桁・1の桁、に見立てる。
上の項目の画像の、0→0・その他→1、とする。
例えば画像の真ん中あたりの、上から「0・2・0・0」の4ピクセルは「1000の桁=0・100の桁=1・10の桁=0・1の桁=0」とし、合成して「0100」と考える。
●オブジェクトROMからの読み込み順
事前知識・その他
オブジェクトの表示は、オブジェクトコントローラーが行う。
CPUがオブジェクトに関してやる事は、オブジェクトコントローラーに描いて欲しいものに必要な情報をセットするのみ。
その情報は、パターン番号・パレット番号・座標・大きさ・上下左右反転など。
のゲーム内での表示
(説明の中でパレット番号とパターン番号を単純な1から始まる連番にしているが、実際に使われている番号は違う。)
●登場〜破壊前
用意されているパターンは4種類、パレットも4種類。
パレットは、1つのパレットあたり8フレームずつ継続しながら1→2→3→4を繰り返す。
パターンは、各パレットごとに1→1→2→2→3→3→4→4と変化する。
●破壊後〜消滅
用意されているパターンは4種類。
パレットは、破壊した瞬間のものを保持し続ける。
パターンは、正常1→
異常1
→正常2→
異常2
→正常3→
異常3
→正常4→
異常4
と変化した後に消える。
予定では、正常1→正常1→正常2→正常2→正常3→正常3→正常4→正常4としてから消したかったようだ。
異常1,2,3,4はそれぞれ別々の番号だが、描画のプロセスは同一なので一括りで考える。
おまけ
/
が登場する直前の一瞬、そのオブジェクトが最後に表示した画像パターンはそのままに、パレットだけを
/
の登場アニメーションのツブツブのものに変えたものが見えるプログラムミスがある。
最後に表示したものが
だった場合はどうなるのかを示す。
異常な破片パターンで表示されるもの
●ほとんどの場合
これら4項目のうち1・3番目が特に目立つため、ファンなどの間では「赤い四角」がよく語られる。
●横16×縦12ピクセルの赤い長方形
上の段落の画像のパレット4で、たまたま破線が発生していない状態。
横16×縦16ピクセルの上部の横16×縦4ピクセルが透明。
●完全な透明
上の項目の、パレット1〜3だったバージョン。
●赤い長方形に一本または二本の青い破線または直線
上の段落の画像のパレット4で、破線または直線が発生している状態。
横16×縦16ピクセルの上部の横16×縦4ピクセルが透明。
破線または直線は(上部透明部分を除いて数えて)2段目と4段目に入る。
4段目のほうが2段目に比べて掠れやすく、横16ピクセルのうち左にいくほど掠れやすい傾向がある。
●一本または二本の青いまたは白い破線または直線
上の項目の、パレット1〜3だったバージョン。
●ごくまれに
横16×縦16ピクセルの完全な正方形。赤い。
を複数個同時に破壊すると、これが混ざることがある。
●ゲームを停止した場合
DIPSW:B-8=ON にするとゲームが停止する機能があるが、破線または直線部分はチラチラと動き続ける。
CPUを停止させても同様に動き続ける。
異常な破片パターンが似通う理由
「事前知識・ディジタル回路関連」-「LとHの他にZがある」の使用例で説明してるとおり、オブジェクトコントローラは複数のROMを切り替えて制御する能力をもっている。
ところが、
を収めてあるオブジェクトROMは1個で間に合うようにプログラムを設計し、切り替えの対になるもう片方を実装していない。
それにもかかわらず、切り替えが必要なパターン番号を指定するプログラムミスをしてしまっている。
そのことによって、オブジェクトコントローラーはLでもHでもない不安定なZを参照してなんとか描画の仕事をこなすことになる。
ここから先は完全に素人考え。きちんと勉強している人には笑われるかも。
●大半が赤で埋め立てられる理由
不安定なZとしたが、0V〜5Vの閾値が1.4VとするとHに偏りがちになると思う。
上の図のパレット4で赤になるカラー番号3で埋め立てられるのはここから来ているのではないだろうか。
●上部4段のピクセルが透明になる理由
Zに切り替わる直前までは正常なLまたはHである。
空中キャラクターの正常なオブジェクトのパターンは透明で囲んでいる関係で、オブジェクトROMから最後に読んだデータはほぼ二進数の0000である。
正常なLまたはHに繋ぐ場合は瞬時にデータは切り替わるが、Zに繋いだ場合は直前の正常な接続の余韻からややゆっくり変化するのではないだろうか。
LからHにゆっくりと変わるまでの過程が上部の透明になるカラー番号0に現れるのでは。
●不安定な破線または直線が入る理由
「事前知識・ゼビウスのオブジェクトのデータ構造」-「オブジェクトROMからの読み込み順」の図で説明する。
ROMから16個刻みで読み込んでは絵を作るを繰り返す。
Zに繋ぐことでLからHにゆっくり変わる際に、図の、31番データを読み終えた直後から32番データを読み始める直前までの間に閾値を跨いだら線が入らない。
32番データを読み始めた直後から47番データを読み終える直前なら不規則な破線が入る。
47番データを読み終えた直後から48番データを読み始める直前なら直線が入る。
●破線または直線が必ず2・4段目に入る理由
回路の配線の引き回しの関係で偶然そうなっただけではないだろうか。
配線は固定されているので、Zに繋いだ時の不安定なはずの変化のしかたも似通ったものになりやすい。
1・3段目は閾値を跨ぐタイミングが線が入らないところで安定。
4段目はやや遅れ気味、2段目はそれよりさらに遅れ気味。
●同時破壊でまれに正方形になる理由
ここまでは正常なパターンに続けて異常なパターンを描く前提で考えた説明。
同時に破壊することで、異常なパターンが2連続になることがある。
その時はHからHに、ということになるので最初から最後までずっとHになる。
©
2000-2024 KANIKANI