|
どうもブログの書き込みの際、アセンブラソースやBASICリストが蹴られてしまいます。仕方がないので画像で掲載します。流れをなぞっていただいて、こうしたほうがいいのじゃないかという点があれば、ご指摘いただけたら幸いです。
なお、当初は、キー入力バッファにあるだけのデータを一気にピポパとしていましたが、USR関数で与えられた1データ分だけ音を返すようシンプルにしました。
ラベルDACは、USR関数で与えられる引数の2バイトのうち、下1バイトが格納されるワークエリアです。本来は、Math-packで使用されるF7F6Hから始まる16バイトのエリアの一部です。引数が整数で与えられることを前提とした決め打ちのアドレスです。
A1〜A4とB1〜B4はPSGの音程レジスタに与える定数です。
WTは、WAITの長さで、256回の空ループを何回繰り返すかを示します。「50」としたのは仮の数字で、R2-D2っぽいと思ったスピードにしましたw
MAINでは、まず8ビットの上4ビットを音声化し、次に下4ビットを音声化しています。
JPTBLは力づくのジャンプテーブル。0〜15のどれに相当するか判断してPSGの音程レジスタに与える定数を決めています。
TONEはPSGの2チャンネルを使って、2音を同時発声させています。
ウエイトループを挟んでレジスタ7を操作して、発声チャンネルをON/OFFしています。
1バイトのデータは、4bit+4bitの2音を「ピポ」と発声します。でも、例えばキャラクタ「3」の場合はアスキーコードが「33H」なので、「ピピ」と同じ音が続きます。
長年愛用の「MSX-DOSスーパーハンドブック」掲載のASM.COMを使って、「/B」オプション付きでオブジェクトファイルを作りました。ライブラリもリンカもない、シンプルなアセンブラで気に入っているのですが、2進数表現に対応しないのが残念です。2箇所に2進数表現でコメントを入れているのは、そういう事情です。
さて、次はエンコーダを試すBASICプログラムです。INPUT$()でコントロールコードを含む文字列を取り込んでいます。ただし改行コード(0DH)の場合は文字列の終わりと判断して、発声ルーチンに渡します。従って0DHを含む文字列は、このプログラムでは処理できません。
文字列がヌルだった場合は、プログラムを終了します。
まだデコードのハードもソフトも出来上がっていないので、果たしてうまくいきますやら?
そもそも、ソースコードを書くのが何年ぶりでしょうかね?(笑) とんでもない間違いをしているかもしれません。いや、実際に間違いだらけでした。前回から相当修正したのはヒミツですwww
もし万一、ソースをご希望の場合は、…どうやってお渡ししたらよろしいでしょうかね? lhaで圧縮してishでテキスト化すればいいのでしょうか? パソコン通信時代から進化してないのがバレましたw
|

>
- コンピュータとインターネット
>
- コンピュータ
>
- その他コンピュータ


