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

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

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

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

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

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

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

1
0000- 1      *0000- 2      * Oscillator program 2 for COSMAC0000- 3      * SB-Assembler0000- 4      *0000- 5            .CR 18020000- 6            .OR $00000000- 7      *0000-F8 31   8 ( 2) START  LDI #$31    $31->D0002-A5      9 ( 2)        PLO 5       D->R(5).00003-E5     10 ( 2)        SEX 5       5->X0004-6A     11 ( 2) LOOP1  INP 2       BUS->M(R(5))0005-05     12 ( 2)        LDN 5       M(R(5))->D0006-A3     13 ( 2)        PLO 3       D->R(3).00007-23     14 ( 2) LOOP2  DEC 3       R(3)-10008-83     15 ( 2)        GLO 3       R(3).0->D0009-3A 07  16 ( 2)        BNZ LOOP2   IF D!=0 LOOP2000B-7B     17 ( 2)        SEQ         1->Q000C-7A     18 ( 2)        REQ         0->Q000D-30 04  19 ( 2)        BR LOOP1000F- 20000F- 21             .EN

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

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

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

1
0000- 1      *0000- 2      * Oscillator program 3 for COSMAC0000- 3      * SB-Assembler0000- 4      *0000- 5            .CR 18020000- 6            .OR $00000000- 7      *0000-F8 31   8 ( 2) START  LDI #$31    $31->D0002-A5      9 ( 2)        PLO 5       D->R(5).00003-E5     10 ( 2)        SEX 5       5->X0004-6A     11 ( 2) LOOP1  INP 2       BUS->M(R(5))0005-05     12 ( 2)        LDN 5       M(R(5))->D0006-A3     13 ( 2)        PLO 3       D->R(3).00007-23     14 ( 2) LOOP2  DEC 3       R(3)-10008-83     15 ( 2)        GLO 3       R(3).0->D0009-3A 07  16 ( 2)        BNZ LOOP2   IF D!=0 LOOP2000B-31 10  17 ( 2)        BQ LOOP3    IF Q=0 LOOP3000D-7B     18 ( 2)        SEQ         1->Q000E-30 04  19 ( 2)        BR LOOP10010- 200010-7A     21 ( 2) LOOP3  REQ         0->Q0011-30 04  22 ( 2)        BR LOOP10013- 230013- 24             .EN

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

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

https://youtu.be/lT78AJuX3FE?si=5FcHTCOGyJX4MeGO

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

Hugo で構築されています。
テーマ StackJimmy によって設計されています。