|
■ PSGと1ビットサウンドポート
MSXには、PSG(Programmable Sound Generator)と呼ばれる音源チップのほかに、PPIポート(I/OアドレスAAH)の第7ビットが「1ビットサウンドポート」として使用されている。 この1ビットサウンドポートは、もっぱらカセットI/Fの出力に使用されるほか、BEEP音の発声にも使用されている。 また、カセットI/Fの入力は、PSGの#14レジスタの第7ビットを通じて行われる。なお、カセットI/Fの入力には3kHzのローパスフィルタが入っている(ん?書いていて気づいたが、カセットI/Fの高速モードで「1」を表す際、4800Hzのパルスがあるんじゃが、いいのか?まあ、3kHzでチョン切れるわけではないが、だいぶ減衰することにはなろうな。)。 アスキー出版の「MSXテクニカル・ハンドブック」には、カセットI/Fから取り込んだ音を1ビットサウンドポートから出力するプログラム例が掲載されている。 BIOSを使っている関係でビットレートは不明であるが、量子化ビット数は1ビットである。1ビットの量子化でもビットレートさえ高速であれば、ある程度の音階は再現可能である。 音質は、高音部が詰まった音に、エレキギターを弾く方ならお馴染みのエフェクタ「FUZZ」をかけたジャリジャリした感じを思わせる。これは、前述の3kHzのローパスフィルタの影響及び、波形が「0」か「1」かの矩形波に近くなる結果であろう。 ま、こういうものでも、とりあえず「1ビットPCM」と呼んでよかろう。決していちびっているわけではない。 以下、オンライン版テクハンから引用(少し編集)。 リンク:1.4 1ビットサウンドポートのアクセス この1ビットサウンドポートをアクセスするために、次に示すBIOSルーチンが用意されています。 ● CHGSND (0135H/MAIN) 入力:A←ON/OFF指定(0=OFF, 0以外=ON) 出力:--- 機能:Aレジスタに0を入れてこのルーチンをコールするとサウンドポートのビットをOFFにし、0以外の値を入れてコールするとサウンドポートのビットをONにする。 リスト5.2 1ビットサウンドポートを利用してカセットテープの音声を再生する。 ;=================================================== ; List 5.2 Read from cassette tape ; Set music tape into tape-recorder ; and run this program. ; Then your MSX will replay it. ;=================================================== STMOTR EQU 00F3H RDPSG EQU 0096H CHGSNG EQU 0135H BREAKX EQU 00B7H ORG 0B000H START: LD A,1 ;motor on CALL STMOTR LBL01: LD A,14 ;register 14 CALL RDPSG ;read PSG AND 80H ;check CSAR CALL CHGSNG ;change SOUND PORT CALL BREAKX ;check Ctrl-STOP JR NC,LBL01 XOR A ;stop motor CALL STMOTR RET END (↑表示の都合で、全角スペースを使ってます。適宜半角にしてね。) サンプル音はただいま鋭意準備中(・∀・)ええ〜い♪ 上のリストでは取り込んだ音声データをすぐに1ビットサウンドポートに出力しているが、「音声取り込みプログラム」 と 「音声再生プログラム」に分けて、1ビットサンプリングデータをファイル渡しすれば、なんとなく「PCM録音・再生システム」っぽく見えてくるでしょ?ファイルのつくり方が問題だけどね。 というわけで、本日ここまで。 |
全体表示





