月別アーカイブ: 2016年1月

TTL IC で自作する Atari Pong(4)

* ものは完成しているのですが、執筆が間に合っていません…

4 枚目はゲームコントロール回路、サウンド出力回路です。参考にした回路図には少し誤りがあるので、原本を参照したほうがよいかもしれません。右下の SW はゲーム開始ボタンです。

オリジナルの回路にはアンテナ入力があるのですが、役割がよくわかりません。この信号と /SRST 信号は Tr で組まれたラッチ回路の入力となっており、客が近づいたら ATTRACT モードになるという動作でいいのでしょうか?今回はこの部分も TTL IC に変更しています。また、オリジナルのオーディオ出力には DC 成分が残りますので、10uF でカップリングしています。

IC のデカップリングキャパシタですが、IC 1 列ごとに 3.3uF のタンタル C、フリップフロップに別途 0.1 uF のセラミック C を乗せています。少し足りないかとも思いましたが、この程度で十分のようです。ただし、使用した IC は半分以上 74LS なので、スタンダード 74N を使用するなら、もう少し多く載せたほうが良いかもしれません。

TTL IC で自作する Atari Pong(3)

3 枚目はボール位置のカウンタ、ボール速度の計算回路を載せています。
毎度美しくない配線ですが、このほうが後のデバッグに都合良いのです…

Pong の回路の面白いところは、上下左右に動くボールの「位置」を 74161 (同期式カウンタ…オリジナルでは Fairchild 9316 ですが) によって演算させていることです。どういう仕組みなのかというと、例えば次のフレームでのボールの縦位置は現在位置の ± N とするためには、ディスプレイの縦幅が 252 ラインなので、74161 のプリセットを 4+N (>0) とした modulo 256-(4+N) のカウンタ回路を構成します。このカウンタを水平同期信号でフリーランすると、カウンタがプリセットされるタイミングの V 位置 y(t) として y(t) = y(t-1)+N となるわけです。(説明を理解するより回路を見た方が早いでしょう)

ボールの垂直速度、水平速度は動的に変わってゆきます。垂直速度はボールがパドルに当たった位置によって変化するので、ボールの移動角 度が変わることになります。水平速度もゲームが進むにつれて高速になります。これらの工夫により、Pong というゲームは素朴ながらゲーム性が高くなっているわけです。