de IBY

めざせ知識の無駄遣い

Logiris - ロジックアナライザでテトリスを遊ぶ

訳わからないタイトルですが,百聞は一見に如かず,ぜひ動画を見てください.

 

作るきっかけ

昨年 12 月,某所でジャンクのロジックアナライザを発見し,回収しました.ロジックアナライザとはオシロスコープのデジタル版のようなもので,各測定点におけるロジック(High,Low)が時間の経過とともにどのように変化するかを記録することのできる装置です.回収した状態ではプローブがなかったものの,ちょっと手を加えて動作チェックしたところ,古いものとはいえ正常に動作するようでした.ここで,動作チェックのために矩形波を入力していたところ,ロジックの切り替わりがドット絵のように見えてきたので,ここから「矩形波をうまく切り替えることでドット絵を描画できるのではないか」と考え,今回のアイディアが浮かびました.

f:id:ibv:20210328133024j:plain

回収したロジックアナライザ(HP 54620A).94年製ということで私より年上です.端子を挿す場所とチャンネルを対応付けるためにテープを貼りました.

描画の仕組み

ロジックアナライザの描画はオシロスコープとほぼ同じで,16 個の信号の中から記録を開始するきっかけ(トリガー)とする信号を選んで,その信号がトリガーを引き次第順次全てのチャンネルの信号のHi/Lowが記録されていきます.描画中は,信号の電圧がある値よりも大きければHi,低ければ Low を出します.この仕組みを使って,CH0(一番上)の信号をトリガーとして,一定時間Hi/Low を描画→一瞬 Low →再び Hi/Low にする...ということを16チャンネルで同時に行い,うまくやればドットを描画できるのではと考えました.結果として下のようなドット絵(?)をまず作ることができました.一行に16 個ドットが収まりそうだったので,16 チャンネル ×16 ドット=256 ビットの情報があれば描画データを管理できそうです.今回は uint16_t 型の長さ 16 の配列を用意して管理しました.

 

f:id:ibv:20210328145355p:plain

タイトル画面を描画してみた.LOGIRIS と書いたつもり.

ゲームを実装する

ドット絵を表示するだけだとつまらないと思い,ドットを使って簡単に実装できそうなものとしてテトリスを思い浮かべ,これを実装しようと考えました.
PIC16F887に PICKIT4 を用いてプログラムを書き込みました.下に簡略化したフローチャートを示します.図中の「画面反映」が,配列で管理されている描画データを実際にロジックアナライザの画面に描画する作業です.

f:id:ibv:20210328143002p:plain

実際には移動・回転処理の前に移動できるかチェックするフェーズがあります.

あれ?もはやテトリスだけのフローチャートじゃね?

 

コントローラからの入力は,昔の工作で使って放置されていたファミコンのIコンから取得しています.これを参考にしました.

 

ハードウェアに関しては,マイコン本体+パスコン,配線,コントローラと繋がるDINコネクタ以上に必要なものはありません.マイコンスゴイ.

実演

 動画を撮影してTwitterにあげてみました.ぜひご覧ください:

 

反省点として,コントローラの割り込み処理をうまく書くことができず,タイミングよくボタンを押さないと反応しないことがあります.常にコントローラ入力を受け付けるためには押されたボタンの取得を常に行う(=常に割り込みを行う)必要がある一方で,テトリミノを下げる処理で0.5秒毎の割り込みを使っているため,このタイミングでないと入力を受け付けられないというわけです.ちょっと工夫したら解決できそうです.

 

あと余裕があれば基板に落としてコンパクトにまとめたいですね.

 

というわけで,まだ課題が残るもののロジックアナライザでドットを描画して,テトリスを遊ぶことができました.今後とも役に立たない工作をしていきたいです.ここまで読んでいただきありがとうございました.

 

<追記>

HPのエンジニアはやはり同じようなことを既に考えついていたようだ.嗚呼:

togetter.com