RCA CDP1802 COSMACを動かしてみた(7) 音を出してみる編

前回の記事でCPUボードが完成してプログラムローダーから入力したプログラムを実行できるところまで確認しました。

このあと書籍では入門用アプリケーションとして電子オルガンが紹介されていますので、これも試してみます。

今回製作したCPUボードにはQという出力端子がありますが、その出力にはエミッタフォロア回路が入っていてスピーカーを直接駆動することができます。ここからプログラムで音をだしてみようという試みです。まずは50Ω程度の抵抗を介してスピーカーを取り付けました。

cosmac_speaker1.jpg

サンプルプログラムとしてQをセット、リセットしてパルスを作り、パルスを発生するタイミングをトグルスイッチで制御することで音程を作ります。

サンプルプログラムは簡単です。

0000-        1      *
0000- 2 * Oscillator program 2 for COSMAC
0000- 3 * SB-Assembler
0000- 4 *
0000- 5 .CR 1802
0000- 6 .OR $0000
0000- 7 *
0000-F8 31 8 ( 2) START LDI #$31 $31->D
0002-A5 9 ( 2) PLO 5 D->R(5).0
0003-E5 10 ( 2) SEX 5 5->X
0004-6A 11 ( 2) LOOP1 INP 2 BUS->M(R(5))
0005-05 12 ( 2) LDN 5 M(R(5))->D
0006-A3 13 ( 2) PLO 3 D->R(3).0
0007-23 14 ( 2) LOOP2 DEC 3 R(3)-1
0008-83 15 ( 2) GLO 3 R(3).0->D
0009-3A 07 16 ( 2) BNZ LOOP2 IF D!=0 LOOP2
000B-7B 17 ( 2) SEQ 1->Q
000C-7A 18 ( 2) REQ 0->Q
000D-30 04 19 ( 2) BR LOOP1
000F- 20
000F- 21 .EN

このプログラムを間違えないようにトグルスイッチで入力していきます。私は1回めはどこか間違えてしまったようでうまく動きませんでしたが、もう一度入力しなおしたら動きました。

プログラムを実行させると、トグルスイッチに応じて、高い音から低い音まで音が鳴ります。でもあまりきれいな音ではありません。パルス幅がCPUの1命令分しかないので尖ってしまうからでしょう。

そこでパルスが方形波になるように少し工夫を加えています。

0000-        1      *
0000- 2 * Oscillator program 3 for COSMAC
0000- 3 * SB-Assembler
0000- 4 *
0000- 5 .CR 1802
0000- 6 .OR $0000
0000- 7 *
0000-F8 31 8 ( 2) START LDI #$31 $31->D
0002-A5 9 ( 2) PLO 5 D->R(5).0
0003-E5 10 ( 2) SEX 5 5->X
0004-6A 11 ( 2) LOOP1 INP 2 BUS->M(R(5))
0005-05 12 ( 2) LDN 5 M(R(5))->D
0006-A3 13 ( 2) PLO 3 D->R(3).0
0007-23 14 ( 2) LOOP2 DEC 3 R(3)-1
0008-83 15 ( 2) GLO 3 R(3).0->D
0009-3A 07 16 ( 2) BNZ LOOP2 IF D!=0 LOOP2
000B-31 10 17 ( 2) BQ LOOP3 IF Q=0 LOOP3
000D-7B 18 ( 2) SEQ 1->Q
000E-30 04 19 ( 2) BR LOOP1
0010- 20
0010-7A 21 ( 2) LOOP3 REQ 0->Q
0011-30 04 22 ( 2) BR LOOP1
0013- 23
0013- 24 .EN

ループが複雑になっていますが、Qが0だったら1にして、1だったら0にするということで、デューティ比を1対1にしています。

実際に動作している動画です。

これでプログラムで音がでることはわかりましたので、オルガンの鍵盤にあたる入力回路をCPUボードに接続すれば、電子オルガンができます。そちらは次回の記事で。

コメントする