2008年10月13日月曜日

なぜPONGなのか(3)

PONGの話に戻りましょう。

実はPONGゲームはまだマイコンが普及してなかったころに作られたものです。その前の年にインテルが世界初のマイコンi4004(4bit)を発表したばかりのころ。マイコンを採用しようという概念は当然なかったでしょう。仮に採用したとしてもメモリーも高価で、たった数キロバイト程度でも使えません。

「VRAM→画面の仕組み」の力を借りずして、どうしてテレビにゲームの画面を映し出すのでしょう?これには前述のOSDの話と関係があります。

テレビはアナログの映像信号1本--時刻とともに上がったり下がったりする電圧が一組あるだけ--で面の情報を映し出します。そのためにスキャンビームが画面を走査(スキャン)するのです。最上部の左端から右端へ、右端に到達したら次の行へ。横書きノートに口述筆記をするのと同じでです。ノートと違うのは最下行に到達したら次のページにめくるのではなく、左上に戻ることです。

幸いPONGは複雑な図柄は必要ありません。画面上の1つの「行」に注目すると、一番たくさんの種類の図柄を描く場合は、①左のパドル、②左のスコア(数字2桁)、③ボール、④センターライン、⑤右のスコア、⑥右のパドルの6種類だけです。

テレビのスキャンビームが左端にあるタイミングは、信号を出す側にとって分かりきったこと。③ボールの位置にスキャンビームが到達したその瞬間、映像信号を叩き「白」を出します。ボールの横幅を過ぎたところで今度は「黒」を出します。

OSDの話ではマイコンのプログラムループでこのタイミングをとっていました。しかし実はこれらはハードウェアだけでできるのです。

ビームの水平位置を示すカウンタを、画面の左端でゼロリセットしてからカウントアップの状態にし、カウンタが出力する値をコンパレータ(比較器)で検出し、映像信号を「白」にセットします。コンパレータへのもう一方の入力値はこの場合はボールの左端の位置です。また別のコンパレータを使って、ボールの右端を検出したら「黒」をセットします。

こうして6つの要素について次々と上記と同様のことを行って1行分を映像出力します。もちろんその行にボールがなかったり、パドルがなかったりする場合は「白」の出力はしません。そのためには「ビームが何行目にいるのか」を数えるカウンタ、「ボールが何行目にいるのか」を検出するコンパレータなどが必要です。

それぞれの要素について左端、右端、上端、下端を保持しておくカウンタや一致検出のためのコンパレータなどのハードウェアが必要になります。ゲームの進行もこれらのカウンタ、コンパレータをうまく使って実現することができます。(たとえば右パドルでボールが左から右へと反射するのは、ボールの右端を覚えているカウンタが右パドルの左端を覚えているカウンタと一致したとコンパレータで検出した瞬間に、ボール用のカウンタの計数方向(上昇/下降)をひっくり返すことに他なりません。)

全体としてなんだかものすごいハードウェアの量になりそうですが、それでも当時としてはコンピュータ+メモリのほうがずっと複雑で物量も大きく、なによりも高価だった。カウンターとかコンパレータが山ほどあってもそれで済むのならまだ経済的だったのです。

0 件のコメント: