CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

TMS3631制御(4)

TMS3631を直接叩く低レベルI/Fを呼び出すアプリ寄りのルーチンを作成しています。まず音名をレジスタ設定値に変換するテーブルkeynum[]ですが今は仮に4オクターブ分のCスケールを埋め込んでありますがMIDIメッセージに対応する場合もMIDIノート番号とレジスタ値は体系が違うのでこのテーブルで変換することになります。この設定値を8チャンネル分一度にレジスタに書込むset_keynum()

8チャンネルの出力をミックスした後にDACで制御されるアンプが1個だけがあるのでこれを設定してエンベロープを発生するattack()、release()です。今は動作確認するだけなので待ちタイマで処理していますが、これではテンポも変わってしまうので正しくはインターバル割込みのタイムスロット内で増分減分処理することになります

これらを組み合わせて4オクターブ分の音階を発声するテストプログラムはこんな感じです

これにあとMIDIメッセージのパーサ、複数の発声を空きボイスに割当てるキーアサイナも組み込めばスタンドアロンの音源ユニットになります

 

MCS-51ボードをホストとして動作確認している状況です

現状1個のTMS3631にマスタクロック2.0MHzを供給していますが入力クロックの上限は2.2MHzとされているようです。ですがこのボードではジャンパポストで3.0MHzに切り替えられるのでやってみると何事もなく動作しました。空きソケットに挿入するもう1個のTMS3631には3.0MHzを与えて完全5度上、分数フィートのドローバ出力を得るようにします