TD4の命令を実行できる自作CPU「Kageki」で入力される2個の数値の足し算を行ってみた。
今回の仕様
入力ポートの下位3ビットで足される数を指定し、最上位ビットを立ち上げることで決定する。
入力ポートの下位3ビットで足す数を指定し、最上位ビットを立ち下げることで決定する。
出力ポートに和を出力する。
プログラム
位置 機械語 アセンブリ言語
---------------------------------
0 00100000 FIRST: IN A
1 00001000 ADD A, 1000
2 11100000 JNC FIRST
3 01100000 SECOND: IN B
4 01011000 ADD B, 1000
5 11100111 JNC ENTER
6 11110011 JMP SECOND
7 01011000 ENTER: ADD B, 1000
8 00001111 LOOP: ADD A, 1111
9 11101100 JNC FINISH
A 01010001 ADD B, 0001
B 11111000 JMP LOOP
C 10010000 FINISH: OUT B
D 11110000 JMP FIRST
0~2番地で、足される数を読み込む。1000
を足すことで、最上位ビットは0となり、0~7の数値となる。
3~7番地で、足す数を読み込む。1000
を足すことで最上位ビットは1となるので、もう一度 1000
を足すことで0~7の数値にする。
8~B番地で、足し算を行う。一方の数から1を引き、負にならなければ他方の数に1を足す、ということを繰り返す。
C~D番地で、和を出力する。
実行結果
入力ポートに Pmod SWT、出力ポートに 1-Digit 7seg Board を接続して実行した。
Pmod SWTのスイッチは端子を左向きにしたとき左から順に1、2、3、4と並んでいるが、今回は2進数として見やすいよう、ケーブルを用いて右のスイッチから順にビット0、1、2、3に接続した。
なお、今回は10Hzのクロックを用いて実行しており、本家TD4でも実行しやすいはずである。