TD4の命令を実行できる自作CPU「Kageki」で早押しゲームを作ってみた。
今回の早押しゲーム
ビットの表記は最下位ビットを0とする0-originである。
- プレイヤー2人とスターター1人の計3人を用意する。(プレイするには、まず人脈♪)
- 入力ポートのビット1~3にそれぞれボタン (押すとHIGH、押さないとLOW) を接続する。
- プログラムを実行する。
- スターターが入力ポートのビット0に接続されたボタンを押す準備をする。
- 1人のプレイヤーが入力ポートのビット3に接続されたボタンを押す準備をする。
- もう1人のプレイヤーが入力ポートのビット2に接続されたボタンを押す準備をする。
- スターターが適当なタイミングでボタンを押し、押しっぱなしにする。
- プレイヤーは、スターターがボタンを押したら、素早くボタンを押す。
- 早くボタンを押した方のプレイヤーが勝利である。ただし、スターターがボタンを押すより早くプレイヤーがボタンを押した場合は、早くボタンを押した方のプレイヤーでない方のプレイヤーが勝利である。2人のプレイヤーが同時にボタンを押した場合は引き分けであり、勝利するプレイヤーは居ない。
- ビット3に接続されたボタンを押す方のプレイヤーが勝利した場合は、出力ポートのビット3がHIGHになる。ビット2に接続されたボタンを押す方のプレイヤーが勝利した場合は、出力ポートのビット2がHIGHになる。
プログラム
位置 機械語 アセンブリ言語
---------------------------------
0 00100000 START: IN A
1 00000100 ADD A, 0100
2 11100100 JNC NODRAW
3 11110011 DRAW: JMP DRAW
4 00000100 NODRAW: ADD A, 0100
5 11101010 JNC NO3
6 00001110 ADD A, 1110
7 11101110 JNC WIN2
8 10111000 WIN3: OUT 1000
9 11111001 END3: JMP END3
A 00000100 NO3: ADD A, 0100
B 11100000 JNC START
C 00001110 ADD A, 1110
D 11101000 JNC WIN3
E 10110100 WIN2: OUT 0100
F 11111111 END2: JMP END2
- 0番地:入力の読み込み
- 1~2番地:引き分けの判定
- 3番地:引き分けで終了
- 4~5番地:ビット3のプレイヤーが先にボタンを押したかの判定
- 6~7番地:フライングの判定
- 8~9番地:ビット3のプレイヤーが勝利で終了
- A~B番地:ビット2のプレイヤーが先にボタンを押したかの判定
- C~D番地:フライングの判定
- E~F番地:ビット2のプレイヤーが勝利で終了
実行結果
入力ポートに Pmod BTN を接続して実行した。
なお、同モジュールのボタンは、端子を左向きにして上から見たとき、右上がビット1、左下がビット2、右下がビット3である。
そのため、ボタンの位置と出力ポートの状態を表すLEDの点灯位置は逆になっている。
関連記事 (他の作者様)
-
早押し対決ゲーム - SHIROのIchigoJam日記
- 今回の仕様と同じく、2人で対戦し、合図の前にボタンを押すと相手の勝ちになる早押しゲーム。
-
「CPUの創りかた」のTD4を作った by shigobu | elchika
- TD4での早押しボタン。フライング判定は無く、単純にいずれかのビットが1になった時の入力ポートのデータが出力ポートに出力される。