TD4の命令を実行できる自作CPU「Kageki」で電子オルガンっぽい何かを作ってみた。
仕様
入力ポートの各ビットにHIGHを入力すると、HIGHを入力したビットによって異なる周波数の信号を出力ポートのビット1 (0-origin) に出力する。
音階は保証しない。
プログラム
場所 機械語 アセンブリ言語
-------------------------------
0 00100000 IN A
1 00001000 ADD A, 1000
2 11100100 JNC NO3
3 11111100 JMP BEEP
4 00000100 NO3: ADD A, 0100
5 11100111 JNC NO2
6 11111100 JMP BEEP
7 00000010 NO2: ADD A, 0010
8 11101010 JNC NO1
9 11111100 JMP BEEP
A 00000001 NO1: ADD A, 0001
B 11100000 JNC START
C 10110010 BEEP: OUT 0010
D 01011000 WAIT: ADD B, 1000
E 11101101 JNC WAIT
F 10110000 OUT 0000
解説
0番地で、入力ポートを読み込む。
1番地~B番地で、HIGHのビットの判定をする。立っているビットによってここの判定に費やすクロック数が変わるため、出力がLOWとなる時間が変わり、出力信号の周波数が変わる。
C番地~F番地で、出力ポートにHIGHを出力する。
実行結果
入力ポートに Pmod BTN を、出力ポートに 2-way Buzzer Board を接続し、10kHzのクロックで実行した。
出力ポートのビット1は 2-way Buzzer Board の manual 端子(音声信号入力)に接続される。