mikecatのアイコン画像
mikecat 2022年12月20日作成 (2022年12月20日更新) © CC BY 4+
製作品 製作品 閲覧数 686
mikecat 2022年12月20日作成 (2022年12月20日更新) © CC BY 4+ 製作品 製作品 閲覧数 686

Kageki (TD4互換機) でCWキーヤー

Kageki (TD4互換機) でCWキーヤー

自作CPU Advent Calendar 2022 20日目

TD4の命令を実行できる自作CPU「Kageki」で、パドルの操作でモールス信号を出力するやつを作ってみた。

仕様

入力ポートのビット2に短点 (左)、ビット3に長点 (右) のスイッチの信号を入力する。
(押されている→HIGH、押されていない→LOW)
出力ポートのビット0にモールス信号が出力される。
(OUT 0001OUT 1000 に置き換えればビット3に出力できる)

(ビットの表記は0-origin)

プログラム

位置 機械語 アセンブリ言語 --------------------------------- 0 00100000 FIRST: IN A 1 00000100 ADD A, 0100 2 11101010 JNC NOBOTH 3 00010000 SOUND: MOV A, B 4 10110001 WAIT: OUT 0001 5 00000001 ADD A, 0001 6 11100100 JNC WAIT 7 10110000 OUT 0000 8 01011000 ADD B, 1000 9 11110000 JMP FIRST A 01110100 NOBOTH: MOV B, 0100 B 00000100 LOOP: ADD A, 0100 C 11101110 JNC NOTON D 11110011 JMP SOUND E 01011000 NOTON: ADD B, 1000 F 11101011 JNC LOOP

動作

0番地で入力を読み込んだ後、以下の動作をする。

  • ビット2・ビット3の両方が1の場合
    1. 1番地の加算ででキャリーが発生し、2番地の条件分岐を通過する
    2. 現在のBレジスタの値を用いて信号出力処理を行う
  • ビット3 (長点) のみ1の場合
    1. 1番地の加算でAレジスタの上位2ビットは 11 となり、2番地からA番地に飛ぶ
    2. A番地でBレジスタを 0100 に設定する
    3. B番地の加算でキャリーが発生し、C番地の条件分岐を通過する
    4. Bレジスタの値 0100 を用いて信号出力処理を行う
  • ビット2 (短点) のみ1の場合
    1. 1番地の加算でAレジスタの上位2ビットは 10 となり、2番地からA番地に飛ぶ
    2. A番地でBレジスタを 0100 に設定する
    3. B番地の加算でAレジスタの上位2ビットは 11 となり、C番地からE番地に飛ぶ
    4. E番地の加算でBレジスタの値は 1100 となり、F番地からB番地に飛ぶ
    5. B番地の加算でキャリーが発生し、C番地の条件分岐を通過する
    6. Bレジスタの値 1100 を用いて信号出力処理を行う
  • ビット2・ビット3の両方が0の場合
    1. 1番地の加算でAレジスタの上位2ビットは 01 となり、2番地からA番地に飛ぶ
    2. A番地でBレジスタを 0100 に設定する
    3. B番地の加算でAレジスタの上位2ビットは 10 となり、C番地からE番地に飛ぶ
    4. E番地の加算でBレジスタの値は 1100 となり、F番地からB番地に飛ぶ
    5. B番地の加算でAレジスタの上位2ビットは 11 となり、C番地からE番地に飛ぶ
    6. E番地の加算でキャリーが発生し、F番地の条件分岐を通過する
    7. 0番地の入力の読み込みに戻る
  • 信号出力処理 (共通)
    1. 3番地でBレジスタの値をAレジスタにコピーする
    2. 4番地で信号をHIGHにする
    3. 4~6番地で、Aレジスタに1を足していき、キャリーが発生するまで待つ
    4. 7番地で信号をLOWにする
    5. 8番地でBレジスタに 1000 を加える。これは同時押し時に短点と長点を交互に出すための切り替えである
    6. 9番地で、0番地の入力の読み込みに戻る

パドル接続基板

パドル接続基板 表面 パドル接続基板 裏面

KagekiにCW用のパドルを接続するため、3.5mmステレオジャックのLをビット2、Rをビット3、GNDをVCCに接続し、ビット2とビット3をプルダウンする基板を作成した。

実行結果

入力ポートに前述のパドル接続基板を介して CW-ONE を、出力ポートに 2-way Buzzer Board を接続し、200Hz のクロックで実行した。

ここに動画が表示されます

  • mikecat さんが 2022/12/20 に 編集 をしました。 (メッセージ: 初版)
  • mikecat さんが 2022/12/20 に 編集 をしました。 (メッセージ: アドベントカレンダーのリンク忘れを修正)
ログインしてコメントを投稿する