TD4の命令を実行できる自作CPU「Kageki」でアップダウンカウンタを作ってみた。
仕様
以下、ビットの表記は0-originである。
- 現在のカウント値を出力ポートに出力する。
- 入力ポートのビット2が0で、ビット3が0から1になったら、カウント値を1増やす。
- 入力ポートのビット3が0で、ビット2が0から1になったら、カウント値を1減らす。
プログラム
位置 機械語 アセンブリ言語
---------------------------------
0 10010000 DISP: OUT B
1 00100000 WAIT: IN A
2 00001100 ADD A, 1100
3 11100101 JNC CHECK
4 11110001 JMP WAIT
5 00100000 CHECK: IN A
6 00001000 ADD A, 1000
7 11101010 JNC NOTUP
8 01010001 ADD B, 0001
9 11110000 JMP DISP
A 00000100 NOTUP: ADD A, 0100
B 11100101 JNC CHECK
C 01011111 ADD B, 1111
D 11110000 JMP DISP
0番地で、カウント値を出力ポートに出力する。
1番地~4番地で、入力ポートのビット2とビット3がともに0になるまで待機する。
5番地~7番地で、入力ポートのビット3が1かをチェックする。
8番地~9番地で、(入力ポートのビット3が1だったので)カウント値に1を加算し、表示処理に移る。
A番地~B番地で、入力ポートのビット2が1かをチェックする。(このとき、ビット3のチェック処理によりAレジスタのビット3は1になっている)
C番地~D番地で、(入力ポートのビット2が1だったので)カウント値から1を減算し、表示処理に移る。
実行結果
入力ポートに Pmod BTN モジュールを、出力ポートに 1-Digit 7seg Board を接続して実行した。