{{include unfinished_page}} ,{t},{BSIZE:1 0|SIZE:100%} ,{BSIZE:0}← [[4.4 MBIOS|4.4 MSX-AUDIO MBIOS]] ,{BSIZE:0|RIGHT}[[5章 MSX-JE]] → !!4.5.1 MSX-AUDIOの概要 !1.概要  MSX-AUDIOは、MSX2のオプショナル音源として開発された音源LSIです。  このLSIは音源としてFM音源システムを採用しているため、リアルで迫力ある音作りができます。さらに、従来のFM音源LSIで使われている複合正弦波音声合成方式に加えて、ADPCMによる音声分析・合成機能を備えているため、容易に音声データの処理が可能になりました。また、この音声分析・合成回路に組み込まれているAD/DAの各変換器を単独で使うこともでき、アナログデータをもこのLSIで処理可能です。MSX-AUDIOが1個あれば、音に関するすべての処理が可能になります。 !2.特徴 *FM音源を採用し、リアルなサウンドを作ることが可能。YM3526とソフトウェアコンパチブル *モード選択により9音同時再生あるいはメロディ音6音+リズム音5音の2つのモードを選択可能 *ビブラート発振器、振幅変調発振器内蔵 *4ビットADPCM音声分析・合成回路内蔵 *複合正弦波音声合成が可能 *AD/DAコンバータ制御回路内蔵 *外部メモリとしてROM、RAMともに256Kバイト接続可能(ADPCMデータ格納あるいはCPUの補助記憶) *鍵盤スキャニングのための8ビット入出力ポート内蔵 *4ビットI/Oポート内蔵 *入出力TTLコンパチブル *Si-gate CMOS LSI *5V 単一電源 !3.FM方式の概略  FM方式とは、Frequency Modulationすなわち周波数変調の意味で、変調によって生じる高調波を楽音の合成に利用したものです。この方式は比較的簡単な回路で、非調和音も含む高い高調波成分を持つ波形を発生させることができ、しかも変調指数と高調波のスペクトル分布の対応が非常に自然であるため、自然楽器の合成音から電子楽器まで、幅広い音作りが可能ということが確認されています。  FM方式は以下の式のように4つのパラメータで表現されます。 {{chart \mathrm F = A\sin(\omega ct + I\sin \omega mt) }} // F=Asin(ωct+Isin ωmt) '''式7.8''' ここでは、Aは出力振幅、Iは変調指数、またωc、ωmはそれぞれキャリア、モジュレータの各周波数です。この7.8式は次のように表現することもできます。 {{chart \mathrm F = A[J0(I)sin\omega ct + J1(I)\{sin(\om c+\om m)t-\sin(\om c-\om m)t \} \\ \hspace{141em} +J2(I) \{ \sin(\om c+ 2\om m)t+\sin (\om c-2\om m)t+ ...... ] }} // F=A[Jo(I)sinωct + J1(I) {sin(ωc+ωm)t-sin(ωc-ωm)t} // + J2(I) {sin(ωc+2ωm)t+sin(ωc-2ωm)t+......] '''式7.9'''  ここで、Jn(I)はn次の第1種Bessel関数です。7.9式からわかるように各倍音の振幅は、変調指数のBessel関数で表現されることになり、7.8式によるFM音源は特定の楽音や効果音の合成に非常に有効となることがわかります。ただし、これでは高調波が一様に分布しないためString系の音源には不向きとなります。そこで、考え出されたのが7.10式で表されるfeedback FMという方式です。 {{chart \mathrm F = A\sin(\omega ct + \beta F) }} // F=Asin(ωct+βF) '''式7.10'''  ここでβは帰還率です。このfeedback FMでは、高調波スペクトルが鋸歯状波となりString系の音作りも可能となります。  以上のような、FM方式を実現するためには、次の3つの機能ブロックが必要です。 +ωtを発生させるphase generator (PG) +振幅Aや変調指数Iを時間関数として得るためのenvelop generator (EG) +sinテーブル (sin)  以上の3つの構成要素を組み合わせて1つのユニットとして考えると、先のFM方式は図7.37のように表すことができます。したがって、このユニット(オペレータセル:OP)の考え方を用いればFM方式の音作りは、ユニット内の周波数パラメータやEGパラメータの設定、そしてユニット間の組み合せのデータを作ればよいことになります。 {{svg 図7.37.svg,,size:680x600}} '''図7.37 ユニットセルによるFM方式の表現''' !4.ADPCM音声分析・合成の概略  MSX-AUDIOには、音声の分析・合成が簡単で音質も自然なADPCM方式と、分析はコンピュータを使った複雑な処理が必要であるが発音のためのメモリが比較的少なくてすむ複合正弦波音声合成方式の2種類の音声情報処理を備えています。ここでは、FM音源とともにこのLSIの柱であるADPCM方式による音声分析・合成について説明します。  ADPCM(Adaptive Differential Pulse Code Modulation)は、音声データと予測データとの差を、波形の推移によって柔軟に変化する量子幅(適応量子化幅)によってコード化し、音質の低下を防ぐとともに、ビット数の削減を図った音声分析・合成方式です。以下で、そのコード化およびデコードの手順について述べます。 '''1.音声分析'''  MSX-AUDIOでは8ビットのPCMデータを4ビットのADPCMデータへの変換を行っています。 +まず、音声をサンプリングレート(1.8KHz〜16KHz)ごとに8ビットのPCMデータ({{chart \mathrm X^1_n}})に変換します。 +得られたPCMデータ({{chart \mathrm X^1_n}})を256倍し、16ビットデータ({{chart \mathrm X_n}})として予測値({{chart \mathrm \hat X_n}})と比較し、その差({{chart \mathrm dn}})を求めます。予測値({{chart \mathrm \hat X_n}})の初期設定値は8000Hです。 +差分({{chart \mathrm dn}})が姓の時はADPCMデータのMSB(L4)を「0」、負のときは「1」とし、同時に差分の絶対値({{chart \mathrm |dn|}})を計算します。 +次に、この差分の絶対値({{chart \mathrm |dn|}})と量子化幅({{chart \mathrm \De_n}})との関係が、表7.82のいずれに当たるかによって、ADPCMの残り3ビットを決定します。量子化幅({{chart \mathrm \De_n}})の初期設定値は7FHです。 '''表 7.82 ADPCMコード表''' ,{t},{BSIZE:2 0} ,{c S60C},{SIZE:60|CENTER} ,{c B0},{BSIZE:0} ,{c B1},{BSIZE:0 0 1 0|CENTER} ,{c B2},{BSIZE:0 0 0 1|CENTER} ,{c B3},{BSIZE:0 0 0 1|CENTER} ,{c},{S60C|B1},{S60C},{S60C},{S60C},{S60C},{SIZE:100|RIGHT|B1},{SIZE:50|CENTER},{SIZE:100|B0} ,L{{sub 4}}{COLS:2}, ,L{{sub 3}}{ROWS:2},L{{sub 2}}{ROWS:2},L{{sub 1}} {ROWS:2},条件{ROWS:2|COLS:3|CENTER},, ,dn≧0{B1} ,dn<0 , , , , ,{c},{B1},{B1},{B2},{B2},{B2},{SIZE:100|RIGHT|B3},{SIZE:50|CENTER|B0},{SIZE:100|B0} ,0{ROWS:8} ,1{ROWS:8} ,0 ,0 ,0 , ,|dn|, <Δn/4 , , ,0 ,0 ,1 , Δn/4≦ ,|dn|, <Δn/2 , , ,0 ,1 ,0 , Δn/2≦ ,|dn|, <Δn×3/4 , , ,0 ,1 ,1 , Δn×3/4≦ ,|dn|, <Δn , , ,1 ,0 ,0 , Δn≦ ,|dn|, <Δn×5/4 , , ,1 ,0 ,1 , Δn×5/4≦ ,|dn|, <Δn×3/2 , , ,1 ,1 ,0 , Δn×3/2≦ ,|dn|, <Δn×7/4 , , ,1 ,1 ,1 , Δn×7/4≦ ,|dn|, 以上の操作で音声データからADCPMデータへのデータ変換は終わりです。 5. ADPCMのデータが得られると、次のステップの予測値({{chart \mathrm X \hat_{n+1} }})と量子化幅({{chart \mathrm \De\hat_{n+1} }})の更新を行います。 {{chart "\\mathrm \\hat X_{n+1}=(1-2\\tim L_4)\\tim(L_3+L_2/2+L_1/4+1/8)\\tim\\De_n+ \\hat X_n \\\\ \\De \\hat_{n+1} =F(L_3,L_2,L1)\\tim \\De_n"}} // X^n+1 = (1-2×L4)×(L3+L2/2+L1/4+1/8)×Δn + X^n // Δn+1 = F(L3, L2, L1)× Δn '''表7.83 量子化幅変化率''' ,{t},{BSIZE:2 0} ,{c B0},{SIZE:60|BSIZE:0|CENTER} ,{c B1},{SIZE:60|BSIZE:0 0 1 0|CENTER} ,{c},{B1},{B1},{B1},{B1},{B1},{B1|SIZE:200} ,L{{sub 3}},L{{sub 2}},L{{sub 1}},f, ,{c},{B0},{B0},{B0},{B0},{B0},{B0} ,0,0,0,0.9, ,0,0,1,0.9, ,0,1,0,0.9, ,0,1,1,0.9, ,1,0,0,1.2, ,1,0,1,1.6, ,1,1,0,2.0, ,1,1,1,2.4, 以下、1〜5の操作を各サンプリングタイムごとに繰り返すことによって、完全なADPCM方式の音声分析が得られます。 '''2.音声合成''' + 合成モードの手順は分析モードの5項で与えられる予測値・量子化幅の更新の式が、再生データを計算する式になります。つまり、予測値が再生音を与えることになります。しかしこれで得られる再生音は、サンプリング毎の段階波となり、ステップノイズの発生など音質にやや問題があります。そこで、MSX-AUDIOでは次の方法で波形をなめらかにします。 + まず、5で得られる再生値を平均化回路に通します。このことは、このシステムに一種のLow Pass Filterを挿入したことと同じになり、広域の雑音をカットすることができます。さらに、ステップノイズを軽減するために各サンプリング間をさらに50KHzで再サンプリングし、線形補完します。この様子は図7.38のようになります。 {{svg 図7.38.svg,,size:680x250}} '''図7.38 ADPCM音声合成波形''' !!4.5.2 機能概要 !1.主要機能  MSX-AUDIOの基本的構成は、FM音源、ADPCM方式音声分析・合成、外部メモリコントロール、AD/DA変換および鍵盤スキャニングのための入出力ポートです。 ''' 1.FM音源'''  FM音源部の音声形態には、9音同時発声モード、メロディ6音+リズム5音発声モードおよび複合正弦波音声合成モードの3種類があり、このいずれを使うかは、ソフトウェアで指定します。なお、このFM音源部はOPL(YM3526)と同一であり、OPLのソフトウェアがそのまま使えます。 9音同時発声モード このモードではFM音9音を同時に、かつ異音色で発音できます。このとき、リズム選択ビット(R)、音声合成ビット(CSM)はともに「0」にセットしなければなりません。 メロディ6音+リズム5音モード このモードではメロディ6音とリズム5音を同時に、かつ異音色で発音できます。発音可能なリズム音は、バスドラム、スネアドラム、タムタム、トップシンバル、ハイハット、シンバルの5種類です。 音声合成モード この場合の音声合成は複合正弦波音声合成法を指します。音声を3〜6のsin波によってシミュレートします。 ''' 2.ADPCM方式音声分析・合成'''  4ビットのADPCMで音声の分析・合成を行います。サンプリングレートは、分析時は1.8Kz〜16KHz、合成時は1.8KHz〜50KHzの範囲で自由にプログラムできます。さらに、分析結果や合成データは、外付けメモリ(RAM、ROM)、CPU側いずれでも記憶することができます。 ''' 3.外部メモリコントロール'''  この機能は主としてADPCMで分析・合成される音声データを記憶するための外部メモリをコントロールします。外付け可能なメモリは256KbitDRAM、64KbitDRAM、そしてバイト単位でアクセス可能なROMです。容量はRAM、ROMともに256Kバイトです。 ''' 4.AD/DA変換'''  ADPCM部のAD/DAの各変換器を単独で動作させることができます。ただし、このモードのときはFM音源およびADPCM音声分析・合成の動作は止まります。 ''' 5.鍵盤スキャニング'''  ミュージックキーボードを外付け可能にするための入出力各8ビットのポートです。  以上の各機能の他に、より自然な音作りを可能にするビブラート発振器、振幅変調発振器や、各種の基準信号となる長短2つのタイマを備え、ソフトウェアの負担を軽くしています。また汎用のI/Oポートが4ビット用意されています。 !2.チャンネルとスロット  MSX-AUDIOはFM音を9音(9チャンネル)発音することが可能で、1音あたり2オペレータセル持っています。ただし、オペレータセルはシステムで1つ持っているだけなので、FM9音の計算は、このオペレータセルをシリアルに18回通すことによってなされます。このオペレータセルを通す順番(スロット番号)は、レジスタ番号と対応しており、各音の発音コントロールはスロットと対応したレジスタを制御することになります。  また、F-Numberのようなチャンネルごとのデータは2つのスロットを制御します。この2つのスロット(第1、第2スロット)の関係は、FM変調モードにした場合は、第1スロットがかならず変調波に、そして第2スロットが搬送波になります。また、第1スロットはFeedbackFMのモードにも設定できます。このモード設定については「FEED BACK/CONNECTION」を参照して下さい。  表7.84はチャンネルとスロットの関係を示します。 '''表7.84 チャンネルとスロット''' ,{c C},{SIZE 30|CENTER} ,{c T},{C|COLS 3} ,{t},{BSIZE 0} ,{c},{C},{C},{C},{C},{C},{C},{C},{C},{C},{C},{C},{C},{C},{C},{C},{C},{C},{C},{O} , 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,スロット番号{BSIZE 0} , 1, 2, 3, 1, 2, 3, 4, 5, 6, 4, 5, 6, 7, 8, 9, 7, 8, 9,チャンネル番号{BSIZE 0} ,1{T},,,2{T},,,1{T},,,2{T},,,1{T},,,2{T},,,チャンネルごとに見たときのスロット番号{BSIZE 0} ,20,21,22,20,21,22,23,24,25,23,24,25,26,27,28,26,27,28,チャンネルごとのデータとレジスタの関係(例 $20〜$28){BSIZE 0} ,C0,C1,C2,C0,C1,C2,C3,C4,C5,C3,C4,C5,C6,C7,C8,C6,C7,C8,チャンネルごとのデータとレジスタの関係(例 $C0〜$C8){BSIZE 0} !3.レジスタマップ {{svg 図7.39.svg,,size:800x850}} 図7.39 MSX-AUDIOのレジスタマップ !!4.5.3 動作説明  MSX-AUDIOは、プロセッサからレジスタアレイへデータを書き込むことによって制御されます。この書き込まれたデータによって、楽音のエンベロープの形状や変調度、周波数および発音モードなどが決定されます。そして、このデータの組み合せが、ピアノやバイオリンなどの音を発生させることになります。このマニュアルでは、各レジスタの機能を主として説明し、他のブロックについては簡単な説明に留め置きます。ただし、FM音源については、「4.5.4楽音の作り方」の章で少し例を上げて説明します。 '''1.レジスタ'''  レジスタは図7.39のアドレスマップで与えられる約1Kbitsのエリアを持っています。そしてこの1Kbitsのエリアを機能毎にバイト単位でまとめ、各バイトにアドレスを割り当てます。  したがって、あるデータをMSX-AUDIO内に格納したい場合は、まずそのデータを格納するアドレスデータを指定し、次に目的のデータを送ります。ただし、同一サブアドレスを何度もアクセスする場合は、最初にアドレスを送るだけで、以後はアドレスデータを送ることなしに、データを送ることができます。  なお初期設定のときに「0」にセットされるレジスタは、以下の各レジスタの説明の項で'''*'''マークで示します。 ::TEST [$01]  このアドレスはLSIの内部動作をテストするときに使用しており、「0」以外では正常動作しません。 ■TIMER  タイマは分解能80μsのタイマ1と分解能320μsのタイマ2の2種類あります。各タイマは、始動、停止およびフラグの制御が可能です。また、タイマのフラグが立ったときは、同時にIRQ端子はLOWレベルになり、タイマインタラプトをCPUに告げます。 ::TIMER-1 [$02]  タイマ1は8ビットのプリセッタブルカウンタによるタイマであり、このカウンタのオーバーフローが生じたときに、タイマ1のフラグを立て、同時にプリセット値をロードします。  タイマ1は、通常のタイマ機能以外に複合音声合成のコントロールとしても働きます。この場合は、オーバーフローが生じたときに全スロットをKeyON(発生状態)にし、すぐさまKeyOFFとします。この操作により複合音声合成を容易に実現することができます。 ,{c S},{SIZE:50|CENTER} ,{c Q},{SIZE:40|BSIZE:1 0 1 0|CENTER} ,{c R},{BSIZE:1} ,{t},{BSIZE:0} ,{c},{S|BSIZE:0},{S|BSIZE:1 0 1 1},{Q},{Q},{Q},{Q},{Q},{Q},{S|BSIZE:1 1 1 0} ,$02,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} ,{c},,{COLS:8|BSIZE:0|LEFT} , ,Tov(ms)=(256-N{{sub 1}}×0.08 @φM=3.6MHz , ,N{{sub 1}} = D{{sub 7}}×2{{sup 7}}+D{{sub 6}}×2{{sup 6}}+ ・・・ + D{{sub 1}}×2 + D{{sub 0}} ::TIMER-2 [$03]  タイマ2もタイマ1と同様に8ビットのプリセッタブルカウンタですが、タイマ1と異なる点は、タイマ1の分解能が80μsであるのに対して、タイマ2の分解能は320μsであることです。 ,{t},{BSIZE:0} ,{c},{S|BSIZE:0},{S|BSIZE:1 0 1 1},{Q},{Q},{Q},{Q},{Q},{Q},{S|BSIZE:1 1 1 0} ,$03,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} ,{c},,{COLS:8|BSIZE:0|LEFT} ,,Tov(ms)=(256-N{{sub 2}}×0.32 @φM=3.6MHz ,,N{{sub 2}} = D{{sub 7}}×2{{sup 7}}+D{{sub 6}}×2{{sup 6}}+ ・・・ + D{{sub 1}}×2 + D{{sub 0}} ::FLAG CONTROL [$04]  このレジスタは、タイマ1、タイマ2の始動、停止、フラグ制御およびADPCM、メモリコントロールのフラグの制御を行います。なお、初期設定時はD3、D4ビットのみ「1」にセットされ、他のビットは「0」にセットされます。 ,{t},{BSIZE:0} ,{c},{S|BSIZE:0},{S|R},{S|R},{S|R},{S|R},{S|R},{S|R},{S|R},{S|R} ,$04,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} , ,IRQ RESET,MASK T1,MASK T2,MASK EOS,MASK BUF RDY, ,ST2,ST1 ,{t},{BSIZE:0} ,{c},{TOP|BSIZE:0|SIZE:50},{TOP|BSIZE:0|SIZE:150},{TOP|BSIZE:0} ,D{{sub 0}},(ST1 ),タイマ1の起動、停止を制御します。{{br}}このビットが「1」になったときに、タイマ1にプリセット値をロードしてカウントを始めます。このビットが「0」のときはタイマ1は動作しません。 ,D{{sub 1}},(ST2 ),タイマ2についてD{{sub 0}}(ST1)と同様の動作をします。 ,D{{sub 3}},(MASK BUF RDY),このビットは「1」のとき、CPUと音声分析・合成(ADPCM)、あるいは外部メモリとデータのやり取りをしている場合のデータの書き込み要求、読み出し要求をマスクします。 ,D{{sub 4}},(MASK EOS ),音声分析・合成(ADPCM)あるいは外部メモリのREAD/WRITEの終了、さらにAD変換時の変換終了を示すフラグをマスクします。 ,D{{sub 5}},(MASK T2 ),このビットが「1」のときは、タイマ2のフラグは、タイマ2の動作に関係なく、常に「2」になります。 ,D{{sub 6}},(MASK T1 ),このビットはタイマ1のフラグをマスクします。 ,D{{sub 7}},(IRQ RESET ),MSX-AUDIOの各フラグは該当するイベントが生じたときセット(「1」)され、IRQは「0」になります。この状態を解除するために用意されているのがこのビットです。このビットが「1」になると、すべてのフラグは「0」になります。ただし、特定のフラグのみセットしたいときは、MASKビットに「1」を書き込んで下さい。 ,注意 D{{sub 7}}ビットに「1」を書き込むと、フラグをリセットした後「0」にリセットされます。また、D{{sub 7}}が「1」のときはD{{sub 0}}〜D{{sub 6}}のデータは無視されます。 ::KEY BOARD IN [$05]  IN{{sub 0}}〜IN{{sub 7}}の入力ポートを示すアドレスです。したがって、このアドレスは読み出し専用です。IN{{sub 0}}〜IN{{sub 7}}がデータバスD{{sub 0}}〜D{{sub 7}}に対応します。 ,{t},{BSIZE:0} ,{c},{S|BSIZE:0},{S|BSIZE:1 0 1 1},{Q},{Q},{Q},{Q},{Q},{Q},{S|BSIZE:1 1 1 0} ,$05,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} , ,IN{{sub 7}},IN{{sub 6}},IN{{sub 5}},IN{{sub 4}},IN{{sub 3}},IN{{sub 2}},IN{{sub 1}},IN{{sub 0}} ::KEY BOARD OUT * [$06]  OUT{{sub 0}}〜OUT{{sub 7}}を示すアドレスです。このレジスタは「1」を書き込んだとき、電流をシンク(電圧0.4V以下)します。OUT{{sub 0}}〜OUT{{sub 7}}がデータバスD{{sub 0}}〜D{{sub 7}}に対応します。 ,{t},{BSIZE:0} ,{c},{S|BSIZE:0},{S|BSIZE:1 0 1 1},{Q},{Q},{Q},{Q},{Q},{Q},{S|BSIZE:1 1 1 0} ,$06,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} , ,OUT{{sub 7}},OUT{{sub 6}},OUT{{sub 5}},OUT{{sub 4}},OUT{{sub 3}},OUT{{sub 2}},OUT{{sub 1}},OUT{{sub 0}} ::START/REC/MEM DATA/REPEAT/SP-OFF/RESET * [$07]  ここでは、ADPCM音声分析・合成の軌道、外部メモリアクセスの設定などの制御をします。 ,{t},{BSIZE:0} ,{c},{S|BSIZE:0},{S|BSIZE:1 0 1 1},{Q},{Q},{Q},{Q},{Q},{Q},{S|BSIZE:1 1 1 0} ,$07,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} , ,START,REC,DATA MEMORY,REPEAT,SP-OFF, , ,RESET ,{t},{BSIZE:0} ,{c},{TOP|BSIZE:0|SIZE:50},{TOP|BSIZE:0|SIZE:150},{TOP|BSIZE:0} ,D{{sub 0}},(RESET ),外部メモリをデータ源としてADPCM音声合成を実行中に、このビットを「1」にすると、ADPCM合成回路および外部メモリコントローラは初期状態に戻ります。なお、このときREPEATビットは必ず「0」にしなくてはなりません。また、このREPEATはADPCM回路および外部メモリコントローラが暴走したときにも使えます。 ,D{{sub 3}},(SP-OFF ),このビットはSP-OFF端子と結ばれていて、D{{sub 3}}を「1」にするとSP-OFF端子は「0」にD{{sub 3}}を「0」にするとSP-OFF端子は「1」になります。ADPCM分析時、あるいはAD変換時にスピーカーを保護するコントロールとして使います。 ,D{{sub 4}},(REPEAT ),外部メモリを使ってADPCM音声合成を行っている場合、同一区間(スタートアドレスからストップアドレスまで)を何度も繰り返して合成したいときに「1」にします。 ,D{{sub 5}},(MEMORY DATA ),外部メモリをアクセスするとき、このビットを「1」にします。 ,D{{sub 6}},(REC ),ADPCM音声分析あるいはCPUから外部メモリにデータを書き込むときに「1」にします。 ,D{{sub 7}},(START ),ADPCM音声分析・合成を行うとき「1」にします。この場合、データ格納場所(CPUあるいは外部メモリ)によって開始タイミングが異なります。データ格納場所がCPUのときは、アドレス$0FをREAD/WRITEしたときから始まり、外部メモリのときはSTARTビットが「1」になったときに始まります。したがって、外部メモリアクセスのときは、STARTビットを「1」にする前に、他の全ての条件を整えておかなければなりません。また、STARTビットを「0」にするときは、先にSTARTビットを「0」にして、残りのデータをリセットします。 ::CSM/KEY BOARD SPLIT/SAMPLE/DA AD/64K/ROM * [$08]  このアドレスでは、複合正弦波音声合成モード、AD/DA変換、外部メモリのタイプ指定を制御します。 ,{t},{BSIZE:0} ,{c},{S|BSIZE:0},{S|BSIZE:1 0 1 1},{Q},{Q},{Q},{Q},{Q},{Q},{S|BSIZE:1 1 1 0} ,$08,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} , ,CSM,NOTE SEL, , ,SAMPL,DA/AD,64K,ROM ,{t},{BSIZE:0} ,{c},{TOP|BSIZE:0|SIZE:50},{TOP|BSIZE:0|SIZE:150},{TOP|BSIZE:0} ,D{{sub 0}},(ROM ),外部メモリのタイプ指定です。「0」=RAM、「1」=ROM。 ,D{{sub 1}},(64K ),外部メモリのタイプ指定です。「0」=256Kbit DRAM、「1」=64Kbit DRAM。{{br}}このビットが「1」のとき、A8アドレスの出力は意味がありません。ROMは「0」です。 ,D{{sub 2}},(DA/AD ),このビットは次のSAMPLと組み合わせて使います。「1」のときは、MO出力は$15〜$17で指定されるデータを出力し、「0」のときはSAMPLEが「1」であれば、AD変換、「0」だとMUSICを出力します。 ,D{{sub 3}},(SAMPL ),AD変換、DA変換時のタイマをイネーブルにするビットです。AD変換はこのビットを「1」にしたときから始まります。 ,D{{sub 6}},(NOTE SEL ),このビットは1オクターブ内の鍵盤分割の分離点を制御します。「0」のときはキーボードスプリットを指示するビットをFーNumberのMSBでコントロールします。この様子は次の表の通りです。F-Number/BLOCKの項を参照して下さい。 D{{sub 6}}=「0」 ,{t},{BSIZE:0|NOHEADER} ,{c D},{COLS:2|SIZE:50|CENTER|NORMAL|BGNOCOL} ,{c E},{BSIZE:0} ,{c L},{LEFT:20} ,{c},{D},,{D},,{D},,{D},,{D},,{D},,{D},,{D},,{E} ,0, ,1, ,2, ,3, ,4, ,5, ,6, ,7,,オクターブ{L|COLS:2}, ,0, ,1, ,2, ,3, ,4, ,5, ,6, ,7,,BLOCKデータ{L|COLS:2}, ,1, ,1, ,1, ,1, ,1, ,1, ,1, ,1,,F-Number MSB{L|COLS:2}, ,{c},{C},{C},{C},{C},{C},{C},{C},{C},{C},{C},{C},{C},{C},{C},{C},{C},{E} ,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,F-Number 2nd{L|COLS:2}, ,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,キーボードスプリット番号 D{{sub 6}}=「1」 ,{t},{BSIZE:0|NOHEADER} ,{c D},{COLS:2|SIZE:50|CENTER|NORMAL|BGNOCOL} ,{c E},{BSIZE:0} ,{c L},{LEFT:20} ,{c},{D},,{D},,{D},,{D},,{D},,{D},,{D},,{D},,{E} ,0, ,1, ,2, ,3, ,4, ,5, ,6, ,7,,オクターブ{L|COLS:2}, ,0, ,1, ,2, ,3, ,4, ,5, ,6, ,7,,BLOCKデータ{L|COLS:2}, ,1, ,1, ,1, ,1, ,1, ,1, ,1, ,1,,F-Number MSB{L|COLS:2}, ,{c},{C},{C},{C},{C},{C},{C},{C},{C},{C},{C},{C},{C},{C},{C},{C},{C},{E} ,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,F-Number 2nd{L|COLS:2}, ,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,キーボードスプリット番号  *定めず ,{t},{BSIZE:0} ,{c},{TOP|BSIZE:0|SIZE:50},{TOP|BSIZE:0|SIZE:150},{TOP|BSIZE:0} ,D{{sub 7}},(CSM ),「1」が設定されると、複合正弦波音声合成モードになります。このときは、全チャンネルともKey-OFF状態にしておかなければなりません。 ::START ADDRESS L/H [$09][$0A]  外部メモリのアクセス(ADPCM回路/CPU)するときの、メモリのスタート番地をL($009)、H($0A)の16ビットで与えます。ただし、ROMとRAMでは指定の方法が少し異なります。 ,{t},{BSIZE:0} ,{c},{S|BSIZE:0},{S|BSIZE:1 0 1 1},{Q},{Q},{Q},{Q},{Q},{Q},{S|BSIZE:1 1 1 0},{S|BSIZE:0},{S|BSIZE:1 0 1 1},{Q},{Q},{Q},{Q},{Q},{Q},{S|BSIZE:1 1 1 0} ,$09,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}},$0A,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} , ,START ADDRESS (L){COLS:8|BSIZE:1},,,,,,,, ,START ADDRESS (H){COLS:8|BSIZE:1},,,,,,, ,{c S},{SIZE:50|CENTER} ,{c Q},{SIZE:40|BSIZE:1 0 1 0|CENTER} ,{c R},{BSIZE:1} ■RAMの場合 1.64Kbit DRAM ,{c T},{BSIZE:1 0 0 1} ,{c U},{BSIZE:0 0 0 0|CENTER} ,{c V},{BSIZE:0 0 0 1|CENTER} ,{c},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q} ,BANK{COLS:3},,,CAS ADDRESS{COLS:9|T},,,,,,,,,RAS ADDRESS{COLS:9|T} ,2{{sup 2}},2{{sup 1}},2{{sup 0}},A{{sub 8}}{T},A{{sub 7}},A{{sub 6}},A{{sub 5}},A{{sub 4}},A{{sub 3}},A{{sub 2}},A{{sub 1}},A{{sub 0}},A{{sub 8}}{T},A{{sub 7}},A{{sub 6}},A{{sub 5}},A{{sub 4}},A{{sub 3}},A{{sub 2}},A{{sub 1}},A{{sub 0}} ,-$0A-{COLS:8|LEFT|T},,,,,,,,-$09-{COLS:8|LEFT|T},,,,,,,,{COLS:5|T} ,{c},{U},{U},{U},{U},{U},{U},{U},{U},{V},{U},{U},{U},{U},{U},{U},{U},{V},{U},{U},{U},{U} ,D{{sub 7}},D{{sub 6}},D{{sub 5}},*,D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}},D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},*,D{{sub 2}},D{{sub 1}},D{{sub 0}},0,0,0,0,0  *$0AのD{{sub 4}}と$09のD{{sub 3}}は必ず「0」でなくてはならない。 2.256Kbit DRAM ,{c},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q} ,BANK{COLS:3},,,CAS ADDRESS{COLS:9|T},,,,,,,,,RAS ADDRESS{COLS:9|T} ,2{{sup 2}},2{{sup 1}},2{{sup 0}},A{{sub 8}}{T},A{{sub 7}},A{{sub 6}},A{{sub 5}},A{{sub 4}},A{{sub 3}},A{{sub 2}},A{{sub 1}},A{{sub 0}},A{{sub 8}}{T},A{{sub 7}},A{{sub 6}},A{{sub 5}},A{{sub 4}},A{{sub 3}},A{{sub 2}},A{{sub 1}},A{{sub 0}} ,-$0A-{COLS:8|LEFT|T},,,,,,,,-$09-{COLS:8|LEFT|T},,,,,,,,{COLS:5|T} ,{c},{U},{U},{U},{U},{U},{U},{U},{U},{V},{U},{U},{U},{U},{U},{U},{U},{V},{U},{U},{U},{U} ,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}},D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}},0,0,0,0,0 ■ROMの場合 ,{c},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q} ,BANK{COLS:3},,,CAS ADDRESS{COLS:9|T},,,,,,,,,RAS ADDRESS{COLS:9|T} ,2{{sup 2}},2{{sup 1}},2{{sup 0}},A{{sub 8}}{T},A{{sub 7}},A{{sub 6}},A{{sub 5}},A{{sub 4}},A{{sub 3}},A{{sub 2}},A{{sub 1}},A{{sub 0}},A{{sub 8}}{T},A{{sub 7}},A{{sub 6}},A{{sub 5}},A{{sub 4}},A{{sub 3}},A{{sub 2}},A{{sub 1}},A{{sub 0}} ,-$0A-{COLS:8|LEFT|T},,,,,,,,-$09-{COLS:8|LEFT|T},,,,,,,,{COLS:5|T} ,{c},{U},{U},{U},{U},{U},{U},{U},{U},{V},{U},{U},{U},{U},{U},{U},{U},{V},{U},{U},{U},{U} ,*,*,*,D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}},D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}},0,0,0,0,0  *$0AのD{{sub 5}}〜D{{sub 7}}は$0Cのデータと同じでなくてはならない。 ::STOP ADDRESS L/H [$0B][$0C]  外部メモリをアクセス(ADPCM回路/CPU)するときの、メモリのストップ番地をL($0B)、H($0C)の16ビットで与えます。ただし、ROMとRAMでは指定の方法が少し異なります。 ,{t},{BSIZE:0} ,{c},{S|BSIZE:0},{S|BSIZE:1 0 1 1},{Q},{Q},{Q},{Q},{Q},{Q},{S|BSIZE:1 1 1 0},{S|BSIZE:0},{S|BSIZE:1 0 1 1},{Q},{Q},{Q},{Q},{Q},{Q},{S|BSIZE:1 1 1 0} ,$0B,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}},$0C,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} , ,STOP ADDRESS (L){COLS:8|BSIZE:1},,,,,,,, ,STOP ADDRESS (H){COLS:8|BSIZE:1},,,,,,, ,{c S},{SIZE:50|CENTER} ,{c Q},{SIZE:40|BSIZE:1 0 1 0|CENTER} ,{c R},{BSIZE:1} ■RAMの場合 1.64Kbit DRAM ,{c T},{BSIZE:1 0 0 1} ,{c U},{BSIZE:0 0 0 0|CENTER} ,{c V},{BSIZE:0 0 0 1|CENTER} ,{c},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q} ,BANK{COLS:3},,,CAS ADDRESS{COLS:9|T},,,,,,,,,RAS ADDRESS{COLS:9|T} ,2{{sup 2}},2{{sup 1}},2{{sup 0}},A{{sub 8}}{T},A{{sub 7}},A{{sub 6}},A{{sub 5}},A{{sub 4}},A{{sub 3}},A{{sub 2}},A{{sub 1}},A{{sub 0}},A{{sub 8}}{T},A{{sub 7}},A{{sub 6}},A{{sub 5}},A{{sub 4}},A{{sub 3}},A{{sub 2}},A{{sub 1}},A{{sub 0}} ,-$0C-{COLS:8|LEFT|T},,,,,,,,-$0B-{COLS:8|LEFT|T},,,,,,,,{COLS:5|T} ,{c},{U},{U},{U},{U},{U},{U},{U},{U},{V},{U},{U},{U},{U},{U},{U},{U},{V},{U},{U},{U},{U} ,D{{sub 7}},D{{sub 6}},D{{sub 5}},*,D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}},D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},*,D{{sub 2}},D{{sub 1}},D{{sub 0}},1,1,1,1,1  *$0CのD{{sub 4}}と$0BのD{{sub 3}}は必ず「0」でなくてはならない。 2.256Kbit DRAM ,{c},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q} ,BANK{COLS:3},,,CAS ADDRESS{COLS:9|T},,,,,,,,,RAS ADDRESS{COLS:9|T} ,2{{sup 2}},2{{sup 1}},2{{sup 0}},A{{sub 8}}{T},A{{sub 7}},A{{sub 6}},A{{sub 5}},A{{sub 4}},A{{sub 3}},A{{sub 2}},A{{sub 1}},A{{sub 0}},A{{sub 8}}{T},A{{sub 7}},A{{sub 6}},A{{sub 5}},A{{sub 4}},A{{sub 3}},A{{sub 2}},A{{sub 1}},A{{sub 0}} ,-$0C-{COLS:8|LEFT|T},,,,,,,,-$0B-{COLS:8|LEFT|T},,,,,,,,{COLS:5|T} ,{c},{U},{U},{U},{U},{U},{U},{U},{U},{V},{U},{U},{U},{U},{U},{U},{U},{V},{U},{U},{U},{U} ,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}},D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}},1,1,1,1,1 ■ROMの場合 ,{c},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q},{Q} ,BANK{COLS:3},,,CAS ADDRESS{COLS:9|T},,,,,,,,,RAS ADDRESS{COLS:9|T} ,2{{sup 2}},2{{sup 1}},2{{sup 0}},A{{sub 8}}{T},A{{sub 7}},A{{sub 6}},A{{sub 5}},A{{sub 4}},A{{sub 3}},A{{sub 2}},A{{sub 1}},A{{sub 0}},A{{sub 8}}{T},A{{sub 7}},A{{sub 6}},A{{sub 5}},A{{sub 4}},A{{sub 3}},A{{sub 2}},A{{sub 1}},A{{sub 0}} ,-$0C-{COLS:8|LEFT|T},,,,,,,,-$0B-{COLS:8|LEFT|T},,,,,,,,{COLS:5|T} ,{c},{U},{U},{U},{U},{U},{U},{U},{U},{V},{U},{U},{U},{U},{U},{U},{U},{V},{U},{U},{U},{U} ,*,*,*,D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}},D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}},1,1,1,1,1  *$0CのD{{sub 5}}〜D{{sub 7}}は$0Aのデータと同じでなくてはならない。 ::PRESCALE L/H [$0D][$0E]  AD変換時(ADPCM分析を含む)のサンプリングレートおよびDA変換時のサンプリングレートを指定します。サンプリングレートは次の式で与えられ、最大サンプリングレートは16KHz、最小は1.8KHzです。 {{chart \mathrm fsample = 3.6MHz/N_{PRE} }} {{chart \mathrm N_{PRE} }} はプリスケール値 {{chart \mathrm 225 \leq N_{PRE} \geq 2047 }} // fsample = 3.6MHz/N{{sub PRE}} // N{{sub PRE}}はプリスケール値 225 ≦ N{{sub PRE}} ≧ 2047 '''式7.11サンプリングレート''' ,{t},{BSIZE:0} ,{c},{S|BSIZE:0},{S|BSIZE:1 0 1 1},{Q},{Q},{Q},{Q},{Q},{Q},{S|BSIZE:1 1 1 0},{S|BSIZE:0},{S|BSIZE:1 0 1 1},{Q},{Q},{Q},{Q},{Q},{Q},{S|BSIZE:1 1 1 0} ,$0D,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}},$0E,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} , ,PRESCALE (L){COLS:8|BSIZE:1},,,,,,,, ,{COLS:5|CENTER}/,,,,,PRESCALE (H){COLS:3|BSIZE:1},, ::ADPCM-DATA [$0F]  ADPCM分析・合成をCPUと行うときは、このレジスタを介してデータのやりとりをします。また、CPUから外部メモリをアクセスするときも同様にこのレジスタをバッファとして使います。 ,{t},{BSIZE:0} ,{c},{S|BSIZE:0},{S|BSIZE:1 0 1 1},{Q},{Q},{Q},{Q},{Q},{Q},{S|BSIZE:1 1 1 0} ,$0F,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} , ,ADPCM-DATA{COLS:8|BSIZE:1},,,,,,, ,注意 ADPCM分析・合成のデータ構成 ,{c S},{SIZE:40|CENTER} ,{c Q},{SIZE:40|BSIZE:1 0 1 0|CENTER} ,{c R},{BSIZE:1} ,{c T},{BSIZE:1 0 0 1} ,{c U},{BSIZE:0|CENTER} ,{t},{BSIZE:0} ,{c},{S|BSIZE:1 0 1 1},{Q},{Q},{Q},{S|BSIZE:1 0 1 1|CENTER},{Q},{Q},{S|BSIZE:1 1 1 0},{BSIZE:0} ,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}},{ROWS:3}ADPCMのデータは左記のように、1バイトで2データを構成しており、上位4ビットがn番目のデータとすると、下位4ビットはそれに続くn+1番目のデータとなります。 ,n番目データ{COLS:4|BSIZE:0 1 0 1},,,,n+1番目データ{COLS:4|BSIZE:0 1 0 1},,,, ,L{{sub 4}}{BSIZE:0 0 1 1},L{{sub 3}}{BSIZE:0 0 1 0},L{{sub 2}}{BSIZE:0 0 1 0},L{{sub 1}}{BSIZE:0 0 1 0},L{{sub 4}}{BSIZE:0 0 1 1},L{{sub 3}}{BSIZE:0 0 1 0},L{{sub 2}}{BSIZE:0 0 1 0},L{{sub 1}}{BSIZE:0 1 1 0}, ::DELTA-N L/H [$10][$11]  ADPCM音声合成時に各サンプリング間を50KHzで線形補間するための補間係数を与えます。また、このデータは合成時のサンプリングレートを指定することになります。したがって、合成時はプリスケールデータを使用しません。 {{chart "\\mathrm \\De N=k\\tim 2^{16},\\ k= \\(\\frac{3.6MHz}{50KHz}\\)\\ /\\ \\(\\frac{3.6MHz}{fsample}\\)"}} {{chart "\\mathrm VOICE_{n,1}=VOICE_n+(Noff_n+i_n\\tim k)\\tim (VOICE_{n+1}-VOICE_n)"}} {{chart f(x)= hoge \\ hoge }} {{chart "\\mathrm \\left. \\{ 0 \\leq Noff_{n} + i_{n} \\tim k < 1 \\\\ Noff_n < k,Noff_n = Noff_{n-1} + i'_{n-1} \\tim k + k - 1"}} {{chart \mathrm \hspace{150} i'_{n-1} }} はn-1回目の最大値 // ΔN = k × 2{{sup 16}},k = ( 3.6MHz / 50KHz ) ( 3.6MHz / fsample ) // // VOICE{{sub n,1}} = VOICE{{sub n}} + (Noff{{sub n}} + i{{sub n}} × k ) × (VOICE{{sub n+1}} - VOICE{{sub n}}) // // 0 ≦ Noff{{sub n}} + i{{sub n}} × k < 1 // Noff{{sub n}} < k, Noff{{sub n}} = Noff{{sub n-1}} + i'{{sub n-1}} × k + k - 1 // i'{{sub n-1}}はn-1回目の最大値 ,{t},{BSIZE:0} ,{c},{S|BSIZE:0},{S|BSIZE:1 0 1 1},{Q},{Q},{Q},{Q},{Q},{Q},{S|BSIZE:1 1 1 0},{S|BSIZE:0},{S|BSIZE:1 0 1 1},{Q},{Q},{Q},{Q},{Q},{Q},{S|BSIZE:1 1 1 0} ,$10,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}},$11,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} , ,DELTA-N (L){COLS:8|BSIZE:1},,,,,,,, ,DELTA-N (H){COLS:8|BSIZE:1},,,,,,, ::ENVELOP CONTROL (at ADPCM) [$12]  ADPCM音声合成の出力レベルを無音から最大音256段階にボリュームコントロールをします。このデータはADPCM音声合成出力のみに有効で、MUSIC出力やDA変換に対しては無効です。 {{chart \mathrm AUDIO\ OUT = VOICE_{n} \tim EG }} // AUDIO OUT = VOICE{{sub n}} × EG ,{t},{BSIZE:0} ,{c},{S|BSIZE:0},{S|BSIZE:1 0 1 1},{Q},{Q},{Q},{Q},{Q},{Q},{S|BSIZE:1 1 1 0} ,$12,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} , ,EG-CONTROL{COLS:8|BSIZE:1},,,,,,, ::DAC-DATA [$15]〜[$17]  DA変換を行うときのデジタルデータを与えます。この3バイト13ビットのデータで以下の式で与えられるアナログ地を出力(DACを経由して)します。この場合、アドレス$15にデータを書き込んだときが取りがとなり、$15〜$17のレジスタの内容を出力します。なお、DA変換を行うときは、レジスタ$08のD{{sub 2}}(DA/AD)を「1」にする前に、必ず初期値を$15〜$17のレジスタに書いて下さい。 {{chart \mathrm \left. \{V_{OUT}=\frac{Vcc}{2}+\frac{Vcc}{4}\tim(-1+F_9+F_8\tim 2^{-1}+......+F_1 \tim 2^{-8}+F_0 \tim 2^{-9}+2^{-10})\tim 2^{-E}\\E=\overl{S}_2 \tim 2^2+\overl{S}_1\tim 2^1+\overl S_0\tim 2^0 }} {{chart \mathrm @ \hspace{10}S_0+S_1+S_2\geq 1 }} ,{c S},{SIZE:40|CENTER} ,{c Q},{SIZE:40|BSIZE:1 0 1 0|CENTER} ,{c R},{BSIZE:1} ,{c T},{BSIZE:1 0 0 1} ,{c U},{BSIZE:0|CENTER} ,{t},{BSIZE:0} ,{c},{S|U},{S|BSIZE:1 0 1 1},{Q},{Q},{Q},{Q},{Q},{Q},{S|BSIZE:1 1 1 0},{BSIZE:0} , ,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} ,$15,F{{sub 9}},F{{sub 8}},F{{sub 7}},F{{sub 6}},F{{sub 5}},F{{sub 4}},F{{sub 3}},F{{sub 2}} ,$16,F{{sub 1}},F{{sub 0}}{BSIZE:0 1 1 0},/{COLS:6|BSIZE:1 1 1 0} ,$17,/{COLS:5|BSIZE:1},,,,,S{{sub 2}},S{{sub 1}},S{{sub 0}}{BSIZE:0 1 1 0} ::I/O-CONTROL AND I/O-DATA [$18][$19]  MSX-AUDIOでは汎用I/Oポートを4ビット用意しており、このI/Oポートをコントロールするレジスタがアドレス$18と$19です。  $18はI/Oポートの入出力の方向制御ビットで、「1」のとき、ポートは出力に、「0」のときは入力になります。初期状態では「0」です。  $19はI/Oポートのデータをやりとりするレジスタです。 ,{c P},{SIZE:80|BSIZE:1|CENTER} ,{t},{BSIZE:0} ,{c},{S|U},{S|BSIZE:1 0 1 1},{Q},{Q},{Q},{P},{P},{P},{P} ,$18,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} , ,/{COLS:4},,,,I/O{{sub 3}} CTRL,I/O{{sub 2}} CTRL,I/O{{sub 1}} CTRL,I/O{{sub 0}} CTRL {{br}} ,{t},{BSIZE:0} ,{c},{S|U},{S|BSIZE:1 0 1 1},{Q},{Q},{Q},{P},{P},{P},{P} ,$19,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} , ,/{COLS:4},,,,I/O{{sub 3}} DATA,I/O{{sub 2}} DATA,I/O{{sub 1}} DATA,I/O{{sub 0}} DATA ::PCM-DATA [$1A]  AD変換実行時に、変換済みデータを格納するレジスタです。 ,{t},{BSIZE:0} ,{c},{S|BSIZE:0},{S|BSIZE:1 0 1 1},{Q},{Q},{Q},{Q},{Q},{Q},{S|BSIZE:1 1 1 0} ,$1A,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} , ,PCM-DATA{COLS:8|BSIZE:1},,,,,,, ,注意 PCMコードは2の補数です。 ::AM/VIB/FG-TYP/KSR/MULTIPLE * [$20]〜[$35]  このレジスタでは、エンベロープの形状やF-Numberで与えられる周波数データを楽音の周波数成分に見合った搬送波、変調波の周波数に変換するための倍率を制御します。 ,{c W},{SIZE:50} ,{c X},{CENTER|ROWS:2|SIZE:100} ,{c Y},{CENTER|BSIZE:0} ,{c Z},{SIZE:120|BSIZE:0|BGNOCOL|NORMAL} ,{t},{BSIZE:0} ,{c},{Z} ,{C|N} ,{C|N} ,{C|N} ,{C|N} ,{W|N|BSIZE:1 0 1 0},{W|N|BSIZE:1 0 1 0},{W|N|BSIZE:1 0 1 0},{W|N|BSIZE:1 1 1 0} ,$20〜$35,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} , ,AM{X},VIB{X},EG-TYP{X},KSR{X},MULTI{C|COLS:4|BSIZE:0 1 0 0},,, ,{c}, ,{X} ,{X} ,{X} ,{X},{C|BSIZE:0 0 1 0},{C|BSIZE:0 0 1 0},{C|BSIZE:0 0 1 0},{C|BSIZE:0 1 1 0} , , , , , ,2{{sup 3}},2{{sup 2}},2{{sup 1}},2{{sup 0}} ,{t},{BSIZE:0|NOHEADER} ,{c NC},{N|BSIZE:0} ,D{{sub 0}}〜D{{sub 3}}{{br}}(MULTIPLE){NC|SIZE:120},表7.85で与えられる倍率によって搬送波、変調波の周波数を制御します。{NC} ,例{C|SIZE:80} F-Numberに夜周波数 ωf 搬送波のMULTIPLE 1 変調波のMULTIPLE 7 F(t)=Esin(ωft+Isin(7ωft)) '''表7.85 搬送波、変調波の周波数を求めるための倍率''' ,{t},{BSIZE:0|NOHEADER} ,{c UD},{N|SIZE:80|CENTER|BSIZE:2 0 1 0} ,{c NO},{N|SIZE:80|CENTER|BSIZE:0} ,{c DD},{N|SIZE:80|CENTER|BSIZE:0 0 2 0} ,{c},{UD},{UD},{UD},{UD},{UD},{UD},{UD},{UD} ,MUL,倍率,MUL,倍率,MUL,倍率,MUL,倍率 ,{c},{NO},{NO},{NO},{NO},{NO},{NO},{NO},{NO} ,0 ,½ ,4 ,4 ,8 ,8 ,C ,12 ,1 ,1 ,5 ,5 ,9 ,9 ,D ,12 ,2 ,2 ,6 ,6 ,A ,10 ,E ,15 ,{c},{DD},{DD},{DD},{DD},{DD},{DD},{DD},{DD} ,3 ,3 ,7 ,7 ,B ,10 ,F ,15 ,{t},{BSIZE:0|NOHEADER} ,{c},{BSIZE:0|SIZE:120|TOP},{BSIZE:0},{BSIZE:0} ,D{{sub 4}}(KSR),RATEのキースケールを与えます。自然楽器では、おおむね音程が高くなるにしたがって、音の立ち上がり、立ち下がりは速くなります。この現象をシミュレーションするのがRATEのキースケールであり、表7.86の値が各々の音程に対してスピードのオフセットとして加えられます。したがって、実際のRATEはADSRに対してs設定したRATEにこのオフセットを加えたものになります。{COLS:2}, ,{r SIZE:40}, , , , ,RATE = 4 × R + Rks,RはADSRでの設定値 , , ,Rksはキースケールオフセット値 , , ,ただし R = 0の時はRATE = 0 '''表7.86 RATEのキースケール''' ,{t},{BSIZE:0|NOHEADER} ,{c UD5},{N|SIZE:40|CENTER|BSIZE:2 0 1 0} ,{c UD},{N|SIZE:70|CENTER|BSIZE:2 0 1 0} ,{c NO},{N|CENTER|BSIZE:0} ,{c DB},{N|CENTER|BSIZE:1 0 2 0} ,{c DC},{N|CENTER|BSIZE:1 0 0 0} ,{c DD},{N|CENTER|BSIZE:0 0 2 0} ,{c},{UD},{UD},{UD},{UD5},{UD},{UD},{UD5},{UD},{UD},{UD5},{UD},{UD} ,D{{sub 4}},N ,Rks, ,N ,Rks , ,N ,Rks , ,N ,Rks ,{c},{NO},{NO},{NO},{NO},{NO},{NO},{NO},{NO},{NO},{NO},{NO},{NO} ,0{ROWS:4},0 ,0 , ,4 ,1 ,,8 ,2 ,,12 ,3 , ,1 ,0 , ,5 ,1 ,,9 ,2 ,,13 ,3 , ,2 ,0 , ,6 ,1 ,,10 ,2 ,,14 ,3 , ,3 ,0 , ,7 ,1 ,,11 ,2 ,,15 ,3 ,{c},{DB},{DC},{DC},{DC},{DC},{DC},{DC},{DC},{DC},{DC},{DC},{DC} ,1{ROWS:4},0 ,0 ,,4 ,4 ,,8 ,8 ,,12 ,12 ,{c}, ,{NO},{NO},{NO},{NO},{NO},{NO},{NO},{NO},{NO},{NO},{NO} , ,1 ,1 ,,5 ,5 ,,9 ,9 ,,13 ,13 , ,2 ,2 ,,6 ,6 ,,10 ,10 ,,14 ,14 ,{c}, ,{DD},{DD},{DD},{DD},{DD},{DD},{DD},{DD},{DD},{DD},{DD} , ,3 ,3 ,,7 ,7 ,,11 ,11 ,,15 ,15 ,{t},{BSIZE:0|NOHEADER} ,{c},{BSIZE:0|SIZE:120|TOP},{BSIZE:0},{BSIZE:0} ,D{{sub 5}} (EG-TYP),持続音か減衰音かの切り替えをします。 , ,D{{sub 5}} = 0 のとき、減衰音 , ,D{{sub 5}} = 1 のとき、持続音 この発音モードの違いは、RELEASE RATEの使用法が異なっているためで、その様子を図7.40に示します。 {{svg 図7.40.svg}} '''図7.40 2種類の発音モード''' ,{t},{BSIZE:0|NOHEADER} ,{c},{BSIZE:0|SIZE:120|TOP},{BSIZE:0},{BSIZE:0} ,D{{sub 6}} (VIB),ビブラートのON/OFFスイッチです。このビットを「1」にすると、そのスロットにはビブラートがかかります。このとき周波数は6.4Hz(@φM = 3.6MHz)で、ビブラートの深さは、BDレジスタのVIB-DEPTHで決まります。 ,{t},{BSIZE:0|NOHEADER} ,{c},{BSIZE:0|SIZE:120|TOP},{BSIZE:0},{BSIZE:0} ,D{{sub 7}} (AM),振幅変調のON/OFFスイッチです。このビットが「1」にセットされたときには、そのスロットには振幅変調がかかります。振幅変調の周波数は3.7Hz(@φM = 3.6MHz)です。 ::KSL/TOTAL LEVEL * [$40]〜[$55]  トータルレベルはエンベロープジェネレータの出力に対して減衰量を加算し変調度(音色)および音量の制御をするために用いられます。また、レベルキースケール(KSL)はRATEのキースケール同様、自然楽器では音程が上がるにつれて、出力レベルは低下する傾向にあることをシミュレートするものです。 ,{c W},{SIZE:50|CENTER|BGNOCOL|NORMAL|BSIZE:1} ,{c Y},{CENTER|BSIZE:0} ,{c Z},{SIZE:80|BSIZE:0|BGNOCOL|NORMAL} ,{t},{BSIZE:0} ,{c},{Z|C},{W} ,{W} ,{W} ,{W} ,{W} ,{W} ,{W} ,{W} ,$40〜$45,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} , ,KSL{COLS:2}, ,Total Level {COLS:6},, , , , {{br}} ,$02{BGNOCOL|NORMAL} ,{t},{BSIZE:0|NOHEADER} ,{c},{BSIZE:0|SIZE:120|TOP},{BSIZE:0},{BSIZE:0} ,D{{sub 0}}〜D{{sub 5}} {{br}}(Total Level),減衰量の最小分解能は0.75dBで、最大47.25dBまで音量を絞り込むことができる。 '''表7.87 トータルレベル''' ,{c UD},{N|SIZE:80|CENTER|BSIZE:2 0 1 0} ,{c DD},{N|SIZE:80|CENTER|BSIZE:0 0 2 0} ,{t},{BSIZE:0|NOHEADER} ,{c},{UD},{UD} ,{UD} ,{UD} ,{UD} ,{UD} ,{UD} , ,D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} ,{c},{DD},{DD} ,{DD} ,{DD} ,{DD} ,{DD} ,{DD} ,減衰量 ,24dB ,12dB ,6dB ,3dB ,1.5dB ,0.75dB ,{t},{BSIZE:0|NOHEADER} ,{c},{BSIZE:0|SIZE:120|TOP},{BSIZE:0},{BSIZE:0} ,D{{sub 6}},D{{sub 7}} (KSL),レベルのキースケールを制御するビットです。キースケールのモードは、音程が上がるほどレベルは減衰し、その減衰量は、1.5dB/OCT、3dB/OCT、6dB/OCTおよび減衰無しの4種類です。 '''表7.88 キースケールの減衰量''' ,{t},{BSIZE:0|NOHEADER} ,{c UD},{N|SIZE:80|CENTER|BSIZE:2 0 1 0} ,{c NO},{N|SIZE:80|CENTER|BSIZE:0} ,{c DD},{N|SIZE:80|CENTER|BSIZE:0 0 2 0} ,{c},{UD},{UD},{UD},{UD},{UD},{UD},{UD},{UD} ,D{{sub 7}},D{{sub 6}},減衰量 ,{c},{NO},{NO},{NO},{NO},{NO},{NO},{NO},{NO} ,0 ,0 ,0 ,1 ,1 ,1.5dB/OCT ,0 ,1 ,3dB/OCT ,{c},{DD},{DD},{DD},{DD},{DD},{DD},{DD},{DD} ,1 ,1 ,6dB/OCT '''表7.89 3dB/OCTの場合の各F-Numberでの減衰量''' ,{c UD},{N|SIZE:80|CENTER|BSIZE:2 0 1 0} ,{c NO},{N|SIZE:80|CENTER|BSIZE:0} ,{c DC},{N|SIZE:80|CENTER|BSIZE:0 0 1 0} ,{t},{BSIZE:2 0 2 0|NOHEADER} ,{c},{DC},{DC},{DC},{DC},{DC},{DC},{DC},{DC},{DC} ,F-Number,0,1, 2, 3, 4, 5, 6, 7 ,OCT ,8,9,10,11,12,13,14,15 ,{c},{NO} ,{NO} ,{NO} ,{NO} ,{NO} ,{NO} ,{NO} ,{NO} ,{NO} ,0{ROWS:2}, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000 , , 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000 ,1{ROWS:2}, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000 , , 0.000, 0.075, 1.125, 1.500, 1.875, 2.250, 2.625, 3.000 ,2{ROWS:2}, 0.000, 0.000, 0.000, 0.000, 0.000, 1.125, 1.875, 2.625 , , 3.000, 3.750, 4.125, 4.500, 4.875, 5.250, 5.625, 6.000 ,3{ROWS:2}, 0.000, 0.000, 0.000, 1.875, 3.000, 4.125, 4.875, 5.625 , , 6.000, 6.750, 7.125, 7.500, 7.875, 8.250, 8.625, 9.000 ,4{ROWS:2}, 0.000, 0.000, 3.000, 4.875, 6.000, 7.125, 7.875, 8.625 , , 9.000, 9.750,10.125,10.500,10.875,11.250,11.625,12.000 ,5{ROWS:2}, 0.000, 3.000, 6.000, 7.875, 9.000,10.125,10.875,11.625 , ,12.000,12.750,13.125,13.500,13.875,14.250,14.625,15.000 ,6{ROWS:2}, 0.000, 6.000, 9.000,10.875,12.000,13.125,13.875,14.625 , ,15.000,15.750,16.125,16.500,16.875,17.250,17.625,18.000 ,7{ROWS:2}, 0.000, 9.000,12.000,13.875,15.000,16.125,16.875,17.625 ,{c},{DD},{DD},{DD},{DD},{DD},{DD},{DD},{DD},{DD} , ,18.000,18.750,19.125,19.500,19.875,20.250,20.625,21.000 単位(dB) ,注意{BGNOCOL|NORMAL} F-Numberは上位4ビットの値 1.5dB/OCTは上記の1/2倍 6dB/OCTは上記の2倍 ::ATTACK/DECAY RATE * [$60]〜[$75]  アタックレイトは音の立ち上がり時間の設定をします。また、ディケイレイトは、アタック後の減衰時間を決めます。各RATEの時間設定は表7.90のとおりです。 ,{c UD},{N|SIZE:60|CENTER} ,{c UC},{N|SIZE:60|CENTER|BSIZE:0 0 1 0} ,{c NO},{N|SIZE:60|CENTER|BSIZE:0} ,{t},{BSIZE:0|NOHEADER} ,{c},{NO},{UD|BSIZE:1 0 1 1},{UD|BSIZE:1 0 1 0},{UD|BSIZE:1 0 1 0},{UD|BSIZE:1 1 1 0},{UD|BSIZE:1 0 1 0},{UD|BSIZE:1 0 1 0},{UD|BSIZE:1 0 1 0},{UD|BSIZE:1 1 1 0} ,$60〜$75,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} , ,AR{COLS:4|CENTER|BSIZE:0 1 0 1},,,,DR{COLS:4|CENTER|BSIZE:0 1 0 0},,, ,{c},{NO},{UD|BSIZE:0 0 1 1},{UC},{UC},{UD|BSIZE:0 1 1 0},{UC},{UC},{UC},{UD|BSIZE:0 1 1 0},{NO} , ,2{{sup 3}},2{{sup 2}},2{{sup 1}},2{{sup 0}},2{{sup 3}},2{{sup 2}},2{{sup 1}},2{{sup 0}} ::SUSTIAN LEVEL/RELEASE RATE [$80]〜[$95]  サスティンレベルは、持続音の場合は、ディケイモードでの減衰がこのレベルに到達するとその後はそのレベルを保持するという変化点を指し、減衰音の場合は、ディケイモードからリリースモードへの変化点を与えます。  リリースレベルは、持続音の場合はKeyをOFFしたときに、音が消えてゆく様子を定義するRATEであり、減衰音のときはサスティンレベルの前の減衰をディケイレイトで表し、サスティンレベル後の減衰をリリースレイトで表します。 ,{c UD},{N|SIZE:60|CENTER} ,{c NO},{N|SIZE:60|CENTER|BSIZE:0} ,{t},{BSIZE:0|NOHEADER} ,{c},{NO},{UD|BSIZE:1 0 1 1},{UD|BSIZE:1 0 1 0},{UD|BSIZE:1 0 1 0},{UD|BSIZE:1 1 1 0},{UD|BSIZE:1 0 1 0},{UD|BSIZE:1 0 1 0},{UD|BSIZE:1 0 1 0},{UD|BSIZE:1 1 1 0} ,$80〜$95,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} , ,SL{COLS:4|CENTER|BSIZE:0 1 0 1},,,,RR{COLS:4|CENTER|BSIZE:0 1 0 0},,, ,{c},{NO},{UD|BSIZE:0 0 1 1},{UC},{UC},{UD|BSIZE:0 1 1 0},{UC},{UC},{UC},{UD|BSIZE:0 1 1 0},{NO} , ,24dB,12dB,6dB,3dB,2{{sup 3}},2{{sup 2}},2{{sup 1}},2{{sup 0}} {{br}} ,{t},{BSIZE:0} ,注意{CENTER|SIZE:100|BSIZE:1},D{{sub 4}}〜D{{sub 7}}(SL)がすべて「1」のときは、93dBとする。{{br}}リリースレイトの減衰時間は、ディケイ・レイトの表と同じ。{BSIZE:0}  下記のレイトは、キースケール後のレイトです。また、レイトの値を上位4ビット(RM)と下位2ビット(RL)に分割してRM-RLと表しています。RATE = RM × 4 + RL '''表7.90 各レイトでの立ち上がり、立ち下がり時間''' ,{c NO},{BSIZE:0} ,{c BD},{BSIZE:0 0 1 0} ,{c N3},{BSIZE:0|SIZE:30|RIGHT} ,{c N6},{BSIZE:0|SIZE:60|RIGHT} ,{c N10},{BSIZE:0|SIZE:100|RIGHT} ,{t},{BSIZE:2 0 2 0|NOHEADER} ,{c},{NO},{NO},{NO},{NO},{NO},{NO},{NO},{NO},{NO},{NO},{NO},{NO},{NO},{NO},{NO} ,EG ATTACK TIME{COLS:4},,,,EG DECAY TIME{COLS:4},,,,EG ATTACK TIME{COLS:4},,,,EG DECAY TIME{COLS:4},,, ,RATE [mS]{COLS:4},,,,RATE [mS]{COLS:4},,,,RATE [mS]{COLS:4},,,,RATE [mS]{COLS:4},,, ,{c},{BD},{BD},{BD},{BD},{BD},{BD},{BD},{BD},{BD},{BD},{BD},{BD},{BD},{BD},{BD} ,(@10%-90%){CENTER|COLS:8},,,,,,,,(@0dB-96dB){CENTER|COLS:7}, , , , ,, ,{c},{N3},{N3},{N10},{N6},{N3},{N3},{N10},{N6},{N3},{N3},{N10},{N6},{N3},{N3},{N10} ,15,3, 0.00,, 15,3, 0.51,, 15,3, 0.00,, 15,3, 2.40 ,15,2, 0.00,, 15,2, 0.51,, 15,2, 0.00,, 15,2, 2.40 ,15,1, 0.00,, 15,1, 0.51,, 15,1, 0.00,, 15,1, 2.40 ,15,0, 0.00,, 15,0, 0.51,, 15,0, 0.00,, 15,0, 2.40 ,14,3, 0.11,, 14,3, 0.58,, 14,3, 0.20,, 14,3, 2.74 ,14,2, 0.11,, 14,2, 0.69,, 14,2, 0.24,, 14,2, 3.20 ,14,1, 0.14,, 14,1, 0.81,, 14,1, 0.30,, 14,1, 3.84 ,14,0, 0.19,, 14,0, 1.01,, 14,0, 0.38,, 14,0, 4.80 ,13,3, 0.22,, 13,3, 1.15,, 13,3, 0.42,, 13,3, 5.48 ,13,2, 0.26,, 13,2, 1.35,, 13,2, 0.46,, 13,2, 6.40 ,13,1, 0.31,, 13,1, 1.62,, 13,1, 0.56,, 13,1, 7.68 ,13,0, 0.37,, 13,0, 2.02,, 13,0, 0.70,, 13,0, 9.60 ,12,3, 0.43,, 12,3, 2.32,, 12,3, 0.80,, 12,3, 10.96 ,12,2, 0.49,, 12,2, 2.68,, 12,2, 0.92,, 12,2, 12.80 ,12,1, 0.61,, 12,1, 3.22,, 12,1, 1.12,, 12,1, 15.36 ,12,0, 0.73,, 12,0, 4.02,, 12,0, 1.40,, 12,0, 19.20 ,11,3, 0.85,, 11,3, 4.62,, 11,3, 1.56,, 11,3, 21.92 ,11,2, 0.97,, 11,2, 5.38,, 11,2, 1.84,, 11,2, 25.56 ,11,1, 1.13,, 11,1, 6.42,, 11,1, 2.20,, 11,1, 30.68 ,11,0, 1.45,, 11,0, 8.02,, 11,0, 2.76,, 11,0, 38.36 ,10,3, 1.70,, 10,3, 9.24,, 10,3, 3.12,, 10,3, 43.84 ,10,2, 1.94,, 10,2, 10.76,, 10,2, 3.36,, 10,2, 51.12 ,10,1, 2.26,, 10,1, 12.84,, 10,1, 4.40,, 10,1, 61.36 ,10,0, 2.90,, 10,0, 16.04,, 10,0, 5.52,, 10,0, 76.72 , 9,3, 3.39,, 9,3, 18.48,, 9,3, 6.24,, 9,3, 87.68 , 9,2, 3.87,, 9,2, 21.52,, 9,2, 7.36,, 9,2, 102.24 , 9,1, 4.51,, 9,1, 25.68,, 9,1, 8.80,, 9,1, 122.72 , 9,0, 5.79,, 9,0, 32.08,, 9,0, 11.04,, 9,0, 153.44 , 8,3, 6.78,, 8,3, 36.96,, 8,3, 12.48,, 8,3, 175.36 , 8,2, 7.74,, 8,2, 43.04,, 8,2, 14.72,, 8,2, 204.48 , 8,1, 9.02,, 8,1, 51.36,, 8,1, 17.60,, 8,1, 245.44 , 8,0, 11.58,, 8,0, 64.16,, 8,0, 22.08,, 8,0, 306.88 , 7,3, 13.57,, 7,3, 73.92,, 7,3, 24.96,, 7,3, 350.72 , 7,2, 15.49,, 7,2, 86.08,, 7,2, 29.44,, 7,2, 408.96 , 7,1, 18.05,, 7,1, 102.72,, 7,1, 35.20,, 7,1, 490.88 , 7,0, 23.17,, 7,0, 128.32,, 7,0, 44.16,, 7,0, 613.76 , 6,3, 27.14,, 6,3, 147.84,, 6,3, 49.92,, 6,3, 701.44 , 6,2, 30.98,, 6,2, 172.16,, 6,2, 58.88,, 6,2, 817.92 , 6,1, 36.10,, 6,1, 205.44,, 6,1, 70.40,, 6,1, 981.76 , 6,0, 46.34,, 6,0, 256.64,, 6,0, 88.32,, 6,0, 1227.52 , 5,3, 54.27,, 5,3, 295.68,, 5,3, 99.84,, 5,3, 1402.88 , 5,2, 61.95,, 5,2, 344.32,, 5,2, 117.76,, 5,2, 1635.84 , 5,1, 72.19,, 5,1, 410.88,, 5,1, 140.80,, 5,1, 1963.52 , 5,0, 92.67,, 5,0, 513.28,, 5,0, 176.64,, 5,0, 2455.04 , 4,3, 108.54,, 4,3, 591.36,, 4,3, 193.68,, 4,3, 2805.76 , 4,2, 123.90,, 4,2, 688.64,, 4,2, 235.52,, 4,2, 3271.68 , 4,1, 144.38,, 4,1, 821.76,, 4,1, 281.60,, 4,1, 3927.04 , 4,0, 185.34,, 4,0,1026.56,, 4,0, 353.28,, 4,0, 4910.08 , 3,3, 217.81,, 3,3,1182.72,, 3,3, 399.36,, 3,3, 5611.52 , 3,2, 247.81,, 3,2,1377.28,, 3,2, 471.04,, 3,2, 6543.36 , 3,1, 288.77,, 3,1,1643.52,, 3,1, 563.20,, 3,1, 7854.08 , 3,0, 370.69,, 3,0,2053.12,, 3,0, 706.56,, 3,0, 9820.16 , 2,3, 434.18,, 2,3,2365.44,, 2,3, 798.72,, 2,3, 11223.04 , 2,2, 495.62,, 2,2,2754.56,, 2,2, 942.08,, 2,2, 13086.72 , 2,1, 577.54,, 2,1,3287.04,, 2,1,1126.40,, 2,1, 15708.16 , 2,0, 741.38,, 2,0,4106.24,, 2,0,1413.12,, 2,0, 19640.32 , 1,3, 868.35,, 1,3,4730.88,, 1,3,1597.44,, 1,3, 22446.08 , 1,2, 991.23,, 1,2,5509.12,, 1,2,1884.16,, 1,2, 26173.44 , 1,1, 1155.07,, 1,1,6574.08,, 1,1,2252.80,, 1,1, 31416.32 , 1,0, 1482.75,, 1,0,8212.48,, 1,0,2826.24,, 1,0, 39280.64 {{br}} ,{t},{BSIZE:0} ,注意{CENTER|SIZE:100|BSIZE:1},レイトが「0」の場合は、エンベロープは変化しません。{BSIZE:0} ::BLOCK/F-Number/SUS/KEY * [$A0]〜[$B8]  音程、音階を決めるデータです。F-Numberは$A0〜$A8のレジスタと$B0〜$B8のレジスタにまたがっています。 ,{c UD},{N|SIZE:60|CENTER} ,{c UC},{N|SIZE:60|CENTER|BSIZE:0 0 1 0} ,{c NO},{N|SIZE:60|CENTER|BSIZE:0} ,{t},{BSIZE:0|NOHEADER} ,{c},{NO},{UD|BSIZE:1 0 1 1},{UD|BSIZE:1 0 1 0},{UD|BSIZE:1 0 1 0},{UD|BSIZE:1 0 1 0},{UD|BSIZE:1 0 1 0},{UD|BSIZE:1 0 1 0},{UD|BSIZE:1 0 1 0},{UD|BSIZE:1 1 1 0} ,$A0〜$A8,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} , ,F-Number{COLS:8|CENTER|BSIZE:0 1 0 1},,,,,,, ,{c},{NO},{UD|BSIZE:0 0 1 1},{UC},{UC},{UD|BSIZE:0 0 1 0},{UC},{UC},{UC},{UD|BSIZE:0 1 1 0},{NO} , ,2{{sup 7}},2{{sup 6}},2{{sup 5}},2{{sup 4}},2{{sup 3}},2{{sup 2}},2{{sup 1}},2{{sup 0}} {{br}} ,{t},{BSIZE:0|NOHEADER} ,{c},{NO},{UD|BSIZE:1 0 1 1},{UD|BSIZE:1 1 1 0},{UD|BSIZE:1 1 1 0},{UD|BSIZE:1 0 1 0},{UD|BSIZE:1 0 1 0},{UD|BSIZE:1 1 1 0},{UD|BSIZE:1 0 1 0},{UD|BSIZE:1 1 1 0} ,$B0〜$B8,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} ,{c},{NO},{UD|BSIZE:1 0 0 1},{UD|BSIZE:1 1 0 0},{UD|BSIZE:1 1 1 0},{UD|BSIZE:1 0 0 1},{UD|BSIZE:1 0 0 0},{UD|BSIZE:1 1 0 0},{UD|BSIZE:1 1 0 1},{UD|BSIZE:1 1 0 1} , , , ,KEY-ON{ROWS:2},BLOCK{COLS:3},,,F-Number{COLS:2}, ,{c},{NO},{UD|BSIZE:0 0 1 1},{UD|BSIZE:0 1 1 0},{UD|BSIZE:0 1 1 0},{UD|BSIZE:0 0 1 0},{UD|BSIZE:0 0 1 0},{UD|BSIZE:0 1 1 0},{UD|BSIZE:0 0 1 0},{UD|BSIZE:0 1 1 0} , , , , ,2{{sup 2}},2{{sup 1}},2{{sup 0}},2{{sup 9}},2{{sup 8}} D{{sub 0}}〜D{{sub 7}} ==($20〜$28)==($A0〜$A8)、D{{sub 0}}($B0〜$B8) (F-Number) $A0〜$A8の8ビットと$B0〜$B8の下位==1==2ビットの計==9==10ビットでF-Numberを表します。このF-Numberは音階を与えるデータで、後述する方法でその値を決めます。 D{{sub 2}}〜D{{sub 4}} (BLOCK) オクターブ情報を与えます。 D{{sub 5}} (KEY ON) 鍵盤のON/OFFに相当するビットです。このビットを「1」にすると、そのチャンネルがONにとなり、発音します。「0」でKEY OFFです。 ■F-Number/BLOCK  MSX-AUDIOでは、必要な周波数はその周波数に応じた位相の増分を与えることにより、得ることができます。そして、この増分はF-NumberとBLOCKおよびMULTIPLE情報によって決められます。  そこで、まず希望周波数の増分を求めます。これは次式で与えられます。 {{chart \mathrm \De P= fmus \tim 2^{19}/ fsam \hspace{141em} fsam=fM/72 }} // ΔP = fmus × 2{{sup 19}} / fsam fsam = fM / 72 ,{c NB},{BSIZE:0} ,{t},{BSIZE:0} ,{c},{NB|SIZE:30},{NB},{NB|CENTER|SIZE:30},{NB} , ,fmus,:,希望周波数 , ,fsam,:,サンプリング周波数 (50KHz) , ,fM ,:,入力クロック周波数 (3.6MHz) '''式7.11 希望周波数の増分'''  これで位相の増分は求められますが、この値を管理するのはビット数が多くて大変なため、増分は1オクターブ分のデータのみとし、各オクターブに対してはその増分をシフト(2倍、4倍…)することによって求めます。これにより増分は次のように表現できます。 {{chart \mathrm \De P= 2^{B}\tim F'\tim MUL }} //ΔP = 2{{sup B}} × F' × MUL ,{c NB},{BSIZE:0} ,{t},{BSIZE:0} ,{c},{NB|SIZE:30},{NB},{NB|CENTER|SIZE:30},{NB} ,, B ,:, オクターブ情報 ,, F' ,:, 1オクターブ無いに制限した増分 ,, MUL ,:, MULTIPLEデータ '''式7.12 シフトによる位相の増分'''  7.11式、7.12式と増分(F')を10ビットで表すということから、F-NumberとBLOCKは次のように表現されます。 {{chart \mathrm F = ( fmus \tim 2^{19} / fsam ) / 2^{b-1} \hspace{141em} (@MUL = 1) }} // F = ( fmus × 2{{sup 19}} / fsam ) / 2{{sup b-1}} (@MUL = 1) ,{c NB},{BSIZE:0} ,{t},{BSIZE:0} ,{c},{NB|SIZE:30},{NB},{NB|CENTER|SIZE:30},{NB} ,, F ,:, F-Numberデータ ,, b ,:, BLOCKデータ '''式7.13 F-NumberとBLOCK''' ,{c C},{CENTER} ,{c S6},{SIZE:60} ,{c S8},{SIZE:80} ,{c S12},{SIZE:120} ,{c L},{BSIZE:0 1 0 0} ,{c LD},{BSIZE:0 1 1 0} ,{c R},{BSIZE:0 0 0 1} ,{c N},{BSIZE:0} ,{c D},{BSIZE:0 0 1 0} '''表7.91 F-Number(その1)''' ,{t},{BSIZE:2 0 2 0} ,{c},{C|LD},{C|LD},{C|LD},{C|D},{C|LD},{C|D},{C|D},{C|D},{C|D},{C|D},{C|D},{C|D},{C|D} ,音階{ROWS:2},周波数{{br}}(4oct){ROWS:2|},F-Number{ROWS:2},$B0〜$B8{COLS:2|LD},,$A0〜$A8{COLS:8} , , , ,D{{sub 1}},D{{sub 0}} ,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} ,{c},{C|L|S6},{C|L|S8},{C|L|S12},{C|N|S6},{C|L|S6},{C|N|S6},{C|N|S6},{C|N|S6},{C|N|S6},{C|N|S6},{C|N|S6},{C|N|S6},{C|N|S6} ,C# ,277.2 ,363 ,0 ,1 ,0 ,1 ,1 ,0 ,1 ,0 ,1, 1 ,D ,293.7 ,385 ,0 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0, 1 ,D# ,311.1 ,408 ,0 ,1 ,1 ,0 ,0 ,1 ,1 ,0 ,0, 0 ,E ,329.6 ,432 ,0 ,1 ,1 ,0 ,1 ,1 ,0 ,0 ,0, 0 ,F ,349.2 ,458 ,0 ,1 ,1 ,1 ,0 ,0 ,1 ,0 ,1, 0 ,F# ,370.0 ,485 ,0 ,1 ,1 ,1 ,1 ,0 ,0 ,1 ,0, 1 ,G ,392.0 ,514 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1, 0 ,G# ,415.3 ,544 ,1 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0, 0 ,A ,440.0 ,577 ,1 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0, 1 ,A# ,466.2 ,611 ,1 ,0 ,0 ,1 ,1 ,0 ,0 ,0 ,1, 1 ,B ,493.9 ,647 ,1 ,0 ,1 ,0 ,0 ,0 ,0 ,1 ,1, 1 ,C ,523.3 ,686 ,1 ,0 ,1 ,0 ,1 ,0 ,1 ,1 ,1, 0 {{br}} '''表7.92 F-Number(その2)''' ,{t},{BSIZE:2 0 2 0} ,{c},{C|LD},{C|LD},{C|LD},{C|D},{C|LD},{C|D},{C|D},{C|D},{C|D},{C|D},{C|D},{C|D},{C|D} ,音階{ROWS:2},周波数{{br}}(4oct){ROWS:2|},F-Number{ROWS:2},$B0〜$B8{COLS:2|LD},,$A0〜$A8{COLS:8} , , , ,D{{sub 1}},D{{sub 0}} ,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} ,{c},{C|L|S6},{C|L|S8},{C|L|S12},{C|N|S6},{C|L|S6},{C|N|S6},{C|N|S6},{C|N|S6},{C|N|S6},{C|N|S6},{C|N|S6},{C|N|S6},{C|N|S6} ,G ,392.0 ,514 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1, 0 ,G# ,415.3 ,544 ,1 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0, 0 ,A ,440.0 ,577 ,1 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0, 1 ,A# ,466.2 ,611 ,1 ,0 ,0 ,1 ,1 ,0 ,0 ,0 ,1, 1 ,B ,493.9 ,647 ,1 ,0 ,1 ,0 ,0 ,0 ,0 ,1 ,1, 1 ,C ,523.3 ,686 ,1 ,0 ,1 ,0 ,1 ,0 ,1 ,1 ,1, 0 ,C# ,544.4 ,727 ,1 ,0 ,1 ,1 ,0 ,1 ,0 ,1 ,1, 1 ,D ,587.3 ,770 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,1, 0 ,D# ,622.2 ,816 ,1 ,1 ,0 ,0 ,1 ,1 ,0 ,0 ,0, 0 ,E ,659.3 ,864 ,1 ,1 ,0 ,1 ,1 ,0 ,0 ,0 ,0, 0 ,F ,698.5 ,916 ,1 ,1 ,1 ,0 ,0 ,1 ,0 ,1 ,0, 0 ,F# ,740.0 ,970 ,1 ,1 ,1 ,1 ,0 ,0 ,1 ,0 ,1, 0 ::AM・BIV-DEPTH/RHYTHM * [$BD]  振幅変調(AM)、ビブラート(VIB)の深さおよびリズムモード選択と各リズム楽器のON/OFFをコントロールします。 ,{c UD},{SIZE:80|CENTER} ,{c ZZ},{SIZE:80|CENTER|BSIZE:1 0} ,{c NO},{SIZE:60|CENTER|BSIZE:0} ,{t},{BSIZE:0} ,{c},{NO},{UD|BSIZE:1 0 1 1},{UD},{UD},{ZZ},{ZZ},{ZZ},{ZZ},{UD|BSIZE:1 1 1 0} ,$BD,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} , ,AM-DEPTH,VIB-DEPTH,RHYTHM,BD,SD,TOM,TOP-CY,HH D{{sub 0}}〜D{{sub 5}} (RHYTHM) D{{sub 5}} = 「1」のとき、MSX-AUDIOはリズム音モードになり、7〜9チャンネルはリズム音のチャンネルとなります。したがって、楽音(メロディ部)は6音に制限されます。D{{sub 0}}〜D{{sub 4}}は各リズム楽音のON/OFFを制御します。このため$B6、$B7、$B8のKEY ONビットは常に「0」にしておく必要があります。また、13〜18の各スロットはリズム音と表7.93のような対応をしており、RATEなどのデータは各リズム音にマッチした値を入力しなければなりません。 '''表7.38 リズムスロットと周波数データ''' ,{t},{BSIZE:2 0} ,{c},{SIZE:80|BSIZE:0 0 1 0},{BSIZE:0 0 1 0} ,楽音,スロット ,{c},{SIZE:100|BSIZE:0},{SIZE:200|BSIZE:0} ,BD,13、16 ,SD,17 ,TOM,15 ,TOP-CYM,18 ,HH,14 D{{sub 6}} (VIB-DEPTH) ビブラートの深さは2種類あり、D{{sub 6}}=「1」のとき14セント、D{{sub 6}}=「0」のときは7セントです。 D{{sub 7}} (AM-DEPTH) 振幅変調の深さも2種類あります。 D{{sub 7}} =「1」のとき 4.8dB D{{sub 7}} =「0」のとき 1dB ::FEEDBACK/CONNECTION * [$C0]〜[$C8]  このレジスタはSelfーFeedbackの変調度およびFM変調のタイプを決めます。 ,{c UD},{SIZE:60|CENTER} ,{c ZZ},{SIZE:60|CENTER|BSIZE:1 0} ,{c NO},{SIZE:60|CENTER|BSIZE:0} ,{c BL},{SIZE:60|CENTER|BSIZE:1 1 1 0} ,{t},{BSIZE:0} ,{c},{NO},{UD|BSIZE:1 0 1 1},{ZZ},{ZZ},{BL},{ZZ},{ZZ},{ZZ},{UD|BSIZE:1} ,$C0〜$C8,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} , ,/{COLS:4|ROWS:2|BSIZE:1},,,,FEEDBACK{COLS:3|BSIZE:1 1 0 1},,,CONNECTION{ROWS:2} , , ,,,,2{{sup 2}}{BSIZE:0 0 1 0},2{{sup 1}}{BSIZE:0 0 1 0},2{{sup 0}}{BSIZE:0 0 1 0}, {{br}} D{{sub 0}}(CONNECTION) コネクションは2つのスロットの結線を制御します。データ「0」でFM変調モードとなり、データ「1」で2つのスロットが並列でサイン波の合成モードになります。 {{svg 図7.41.svg}} 図7.41 CONNECTION ,{c Z},{SIZE:120|BSIZE:0|BGNOCOL|NORMAL} ,{c X},{BSIZE:0|BGNOCOL|NORMAL} ,{t},{BSIZE 0|NOHEADER} ,{c},{Z} ,{X} , D{{sub 1}}〜D{{sub 3}}(FEEDBACK),第1スロットのフィードバックFM変調の変調度を与えます。 '''表7.94 変調度''' ,{t},{BSIZE:0|NOHEADER} ,{c UD},{N|SIZE:80|CENTER|BSIZE:2 0 1 0} ,{c DD},{N|SIZE:80|CENTER|BSIZE:0 0 2 0} ,{c},{UD|BSIZE:2 0 1 1},{UD},{UD},{UD},{UD},{UD},{UD},{UD},{UD} , ,0,1,2,3,4,5,6,7 ,{c},{DD|BSIZE:2 0 1 1},{DD},{DD},{DD},{DD},{DD},{DD},{DD},{DD} ,変調度,0,π/16,π/8,π/4,π/2,π,2π,4π !2.フェイズジェネレータ(PG)  フェイズジェネレータは必要な周波数に応じた増分を単位時間ごとにアキュムレートして位相値を得る回路です。この増分はレジスタから送られてくる周波数情報(F-Number、BLOCK、MULTIPLE)から作られます。さらに、ビブラート発信器を内蔵しているため、この発信器の出力と周波数情報とを組み合わせることにより、ビブラート効果を作り出します。 !3.エンベロープジェネレータ(EG)  エンベロープジェネレータ(以下、EG)は、ATTACK、DECAY、RELEASEの各RATE、Sustain Level、Total Levelなどでコントロールされ、音色、音量の経時変化を与えます。そして、そのダイナミックレンジは96dB(分解能0.1875dB)あります。EGは対数表示であり、また減衰量で表されます。その一般的な波形は図7.42のとおりです。この波形で特徴的なのは、アタック時は指数関数的に変化し、それ以外では直線的に変化する点です。また、アタックからディケイへの切り替えは、0dBに達したときに起こり、ディケイからサスティンへは、サスティンレベルに到達したときに起こります。そして、リリースへの移行はKeyがOFFされたときに起こります。トータルレベル、レベルキースケール、振幅変調などの効果は、その設定値をEGに加えることによりエンベロープの波形を変化させます。 {{svg 図7.42.svg}} 図7.42 エンベロープ波形 !4.オペレータ(OP)とアキュムレータ(ACC)  オペレータはFM演算を行う回路です。オペレータでは、フェイズジェネレータからの位相出力をもとに、SINの値を計算し、これにエンベロープジェネレータ出力を掛け合わせます。この結果を変調波であればオペレータの入力へ返し、楽音であればアキュムレータへ送ります。この転送を制御するのがFeedback、CONNECTIONの各データです。  アキュムレータは各チャンネルのオペレータ出力を累積加算します。さらに、この加算結果を仮数部10ビット(サインビットを含む)、指数部3ビットのオフセットバイナリへデータ変換を行い、LSBより図7.43のように出力します。 {{svg 図7.43.svg}} 図7.43 出力タイミング {{svg 図7.44.svg}} 図7.44 内部データと出力データ !5.ADPCM音声分析・合成  ここでは、音声分析・合成の方法をレジスタとのやりとりを例にしたがって説明します。 1.音声分析(AUDIO→CPU) ,{c UD},{BSIZE:0 0 1 0} ,{c S8},{SIZE:80} ,{c S10},{SIZE:120} ,{c NO},{BSIZE:0} ,{t},{BSIZE:2 0} ,{c},{UD|S8},{UD|S10},{UD|S8},{UD} ,アドレス,データ ,R/W,コメント ,{c},{NO},{NO},{NO},{NO} , , , ,○初期設定 ,$04 ,$00 ,W , 各フラグをイネーブルにする。 ,$04 ,$80 ,W , 各フラグをリセット。 ,$07 ,$C8 ,W , ADPCM分析をイネーブルとし、スピーカをOFFとする。 ,$08 ,$00 ,W , ,$0D ,$C2 ,W , サンプリングレートを8KHz(N{{sub PRE}}= 450) ,$0E ,$01 ,W , , , , ,○分析スタート ,$0F , ,R , ダミーリードにより分析開始 , , , ,○分析中 ,$0F , ,R , BUF・RDYフラグが「1」のとき、$0Fをリードして分析データを格納し、フラグリセット。「0」であればは待機。{ROWS:2} ,($04 ,$80 ,W) , , , , ,○分析終了 ,$07 ,$48 ,W , ADPCM分析終了 ,$07 ,$00 ,W , $07レジスタリセット 2.音声合成(CPU→AUDIO) ,{t},{BSIZE:2 0} ,{c},{UD|S8},{UD|S10},{UD|S8},{UD} ,アドレス,データ ,R/W,コメント ,{c},{NO},{NO},{NO},{NO} , , , ,○初期設定 ,$04 ,$00 ,W , 各フラグをイネーブルにする。 ,$04 ,$80 ,W , 各フラグをリセット。 ,$07 ,$80 ,W , ADPCM分析をイネーブルにする。 ,$08 ,$00 ,W , ,$10 ,$F6 ,W , サンプリングレートを8KHz(ΔN=10486)。 ,$11 ,$28 ,W , ,$12 ,$□□ ,W , 出力レベル設定 , , , ,○合成スタート ,$0F ,$×× ,W , ADPCMデータを$0Fに書き込むことによりスタート。 , , , ,○合成中 ,$0F ,$△△ ,W , BUF・RDYフラグが「1」のとき、$0Fに合成データを書き込み、フラグリセットする。「0」のときは待機。{ROWS:2} ,($04 ,$80 ,W) , , , , ,○合成終了 ,$07 ,$00 ,W , ADPCM合成終了 3.音声分析(AUDIO→EXT.MEMORY) ,{t},{BSIZE:2 0} ,{c},{UD|S8},{UD|S10},{UD|S8},{UD} ,アドレス,データ ,R/W,コメント ,{c},{NO},{NO},{NO},{NO} , , , ,○初期設定 ,$04 ,$08 ,W , 各フラグをイネーブルにする。 ,$04 ,$80 ,W , 各フラグをリセット。 ,$07 ,$68 ,W , ADPCM分析をイネーブルにする。 ,$08 ,$02/$00,W , RAMタイプの指定。 ,$09 ,$×× ,W , メモリのスタート番地 ,$0A ,$×× ,W ,  ,$0B ,$△△ ,W , メモリのストップ番地 ,$0C ,$△△ ,W ,  ,$OD ,$E1 ,W , サンプリングレートを16KHz(N{{sub PRE}}= 255)。 ,$0E ,$00 ,W , , , , ,○分析スタート ,$07 ,$E8 ,W , ADPCMデータを$0Fに書き込むことによりスタート。 , , , ,○分析中 , , , , EOSフラグが「1」となり、分析終了を指示するまで待機。 , , , ,○分析終了 ,$07 ,$68 ,W , ADPCM分析終了 ,$07 ,$00 ,W , $07レジスタリセット 4.音声合成(EXT.MEMORY→AUDIO) ,{t},{BSIZE:2 0} ,{c},{UD|S8},{UD|S10},{UD|S8},{UD} ,アドレス,データ ,R/W,コメント ,{c},{NO},{NO},{NO},{NO} , , , ,○初期設定 ,$04 ,$08 ,W , 各フラグをイネーブルにする。 ,$04 ,$80 ,W , 各フラグをリセット。 ,$07 ,$20/$30,W , ADPCM合成をイネーブルにする。 ,$08 ,"$00,$01,$02",W , RAMタイプの指定。 ,$09 ,$×× ,W , メモリのスタート番地 ,$0A ,$×× ,W ,  ,$0B ,$△△ ,W , メモリのストップ番地 ,$0C ,$△△ ,W ,  ,$10 ,$EC ,W , サンプリングレートを16KHz(ΔN=20972)。 ,$11 ,$51 ,W , ,$12 ,$□□ ,W , 出力レベル設定 , , , ,○合成スタート ,$07 ,$A0/$B0,W , $07のD{{sub 7}}が「1」になるのに同期して合成開始。 , , , ,○合成中 , , , , EOSフラグが「1」となり、合成終了を指示するまで待機。 ,($07 ,$00 ,W , リピートモードを解除 ) ,($07 ,$00 ,W , 合成を強制的に中止 ) , , , ,○合成終了 ,$07 ,$20 ,W , ADPCM合成終了 ,$07 ,$00 ,W , $07レジスタリセット !6.AD/DA変換  内蔵のAD/DA変換器は、FM音源やADPCM音声分析・合成以外にも単独でAD変換器、あるいはDA変換器として使うことができます。この場合の変換速度は最大サンプリングレート16KHzから最小1.8KHzまでです。 1.AD変換  MSX-AUDIOのAD変換は、音源で使用されているDA変換器を利用して行います。したがって、、このDA変換器の制限から変換可能な電圧範囲はVcc/2±Vcc/4となります。Vcc/2が中点で0、3Vcc/4が最大(127)、Vcc/4が最小(-128)の2の補数8ビットデータに変換します(変換方式は逐次比較変換)。  なお、AD変換中はミュージック出力などのDA変換器につながる機器は切り離していないと大音量を発生するなどの問題が生じます。 2.DA変換  DA変換もAD変換と同様に楽音用のDA変換器を共用します。したがって、出力電圧はVcc/2±Vcc/4となります。DA変換器は指数部3ビット、仮数部10ビット、計13ビットのデータですが、AD変換などとの対応で8ビットで処理したい場合は、$15アドレスのデータのみを可変とし、$16、$17のアドレスは一定値に固定すればバイト処理ができます。 !7.外部メモリコントロール  MSX-AUDIOではADPCM音声分析・合成部のデータファイルとして外部メモリをRAM256Kバイト、ROM256Kバイトまでアクセスできます。この外部メモリの制御、およびデータのインターフェイスを行うのが外部メモリコントロール部です。 1.RAM  RAMは64K DRAM、256K DRAMのいずれかを8個まで外付けできます。この場合、アクセスは1番目のRAMから8番目のRAMまで順に、また1個のRAM内で次の図のように、(0,0)番地から、(511,0)、(0,1)〜(511,511)とシリアルにREAD/WRITEします。したがって、RAMでのデータ処理はビット単位となり、アドレス指定は32ビット(4バイト)単位になります。  なお、RAMのリフレッシュはMSX-AUDIOにカウンタを内蔵しており、自動的にアドレス発生を行います。 {{svg 図7.45.svg}} 図7.45 RAMのアクセス 2.ROM  ROMの場合は、各アドレスにRAMと違ってMSX-AUDIOのDM出力を直接接続するのではなく、LATCHを介してROMにアドレスを入力します。また、アクセスの単位はバイト単位となり、アドレス指定は32バイト毎に設定できます。 3.メモリへのアクセス  メモリへのアクセスはADPCM実行中はMSX-AUDIOが自動的に行いますが、CPU側とデータのやりとりをする場合は、次の例にしたがってプログラミングします。 1.RAM-WRITE ,{t},{BSIZE:2 0} ,{c},{UD|S8},{UD|S10},{UD|S8},{UD} ,アドレス,データ ,R/W,コメント ,{c},{NO},{NO},{NO},{NO} , , , ,○初期設定 ,$04 ,$00 ,W , 各フラグをイネーブルにする。 ,$04 ,$80 ,W , 各フラグをリセット。 ,$07 ,$60 ,W , メモリライトモードにする。 ,$08 ,$00/$02,W , メモリのタイプ指定 ,$09 ,$×× ,W , スタートアドレス指定 ,$0A ,$×× ,W , ,$0B ,$△△ ,W , ストップアドレス指定 ,$0C ,$△△ , , , , , ,○メモリライト ,$0F ,$□□ ,W , データの書き込み。 ,$04 ,$80 ,W , BUF・RDYフラグが「1」の時データ書き込み、「0」の時は待機。EOSフラグが「1」になると書き込み終了。 , , , ,○リセット ,$07 ,$00 ,W , $07レジスタリセット 2.RAM/ROM-READ ,{t},{BSIZE:2 0} ,{c},{UD|S8},{UD|S10},{UD|S8},{UD} ,アドレス,データ ,R/W,コメント ,{c},{NO},{NO},{NO},{NO} , , , ,○初期設定 ,$04 ,$00 ,W , 各フラグをイネーブルにする。 ,$04 ,$80 ,W , 各フラグをリセット。 ,$07 ,$20 ,W , メモリライトモードにする。 ,$08 ,"$00,$01,$02",W , メモリのタイプ指定 ,$09 ,$×× ,W , スタートアドレス指定 ,$0A ,$×× ,W , ,$0B ,$△△ ,W , ストップアドレス指定 ,$0C ,$△△ , , , , , ,○メモリリード ,$0F , ,R , データの書き込み。 ,$0F , ,R , データの書き込み。 ,$0F ,$□□ ,R , データの書き込み。 ,$04 ,$80 ,W , BUF・RDYフラグが「1」の時データ書き込み、「0」の時は待機。EOSフラグが「1」になると書き込み終了。 , , , ,○リセット ,$07 ,$00 ,W , $07レジスタリセット !8.KEY BOARD IN/OUT  キーボード入力・出力はダイオードマトリックスによる鍵盤を接続するのに便利なように、入力側にプルアップ抵抗を持ち、出力側はオープンドレインとなっています。入出力は各8ビットであるため、49鍵のキーボードまで接続が可能です。また、ドライブ能力は20μsのスキャニングレートで500pFの負荷まで適用でき、汎用入出力ポートとしても利用できます。 !9.ステータス情報とインタラプト信号  MSX-AUDIOのステータス情報は、2つのタイマからのフラグとADPCM音声分析合成や外部メモリアクセス時に使われる2つのフラグ(BUF・RDY、EOS)があります。これらのフラグは、そのイベントが起こったときに「1」になります。また、不必要なフラグに対しては、マスクすることもできます。  これらのステータス情報はインタラプト信号につながっており、いずれかのフラグが「1」となったとき、インタラプト信号(IRQ)はLOWレベルになります。このインタラプト信号はオープンドレイン出力ですから、他の機器のそれとワイアードオアを取ることができます。 ,{c S},{SIZE:50|CENTER|BSIZE:0 0 1 1} ,{c Q},{SIZE:50|CENTER|BSIZE:0 0 1 0} ,{c},{Q},{Q},{Q},{Q},{Q},{S},{Q},{S} ,D{{sub 7}},D{{sub 6}},D{{sub 5}},D{{sub 4}},D{{sub 3}},D{{sub 2}},D{{sub 1}},D{{sub 0}} ,IRQ,TIMER-1,TIMER-2,EOS,BUF・RDY,/{COLS:2}, ,PCM・BSY   ,{c R},{BSIZE:0} ,{t},{BSIZE:0} ,{c},{SIZE:150|R|TOP},{R|TOP} ,D{{sub 0}}(PCM・BSY),ADPCM音声分析・合成が実行中を表します。アドレス$07のD{{sub 7}}が「1」になると、このビットも「1」になります。この信号はインタラプトは発生しません。 ,D{{sub 3}}(BUF・RDY),このビットは次の時に「1」になります。{{br}}・ADPCM音声分析      2データ分析終了時(@ADD.$07のD{{sub 5}}=0){{br}}・ADPCM音声合成      2データ合成終了時(@ADD.$07のD{{sub 5}}=0){{br}}・外部メモリライト    1データメモリライト終了時{{br}}・外部メモリリード    1データメモリリード終了時{{br}} ,D{{sub 4}}(EOS) ,ADPCM音声分析・合成実行中に、その分析・合成が終了したとき、あるいはAD/DA変換時にそのサンプリング時間が経過したときに「1」となります。 ,D{{sub 5}}(TIMER-2) ,タイマ2によるフラグです。タイマ2のセットされた時間が経過したときに「1」になります。 ,D{{sub 6}}(TIMER-1) ,タイマ1に対してD{{sub 5}}と同様の働きをします。 ,D{{sub 7}}(IRQ) ,D{{sub 3}}〜D{{sub 6}}のいずれかが「1」のとき、「1」になります。 !!4.5.4 楽音の作り方  この章ではMSX-AUDIOのオリジナル音色レジスタに、どのようなDATAを入力すると、ピアノやブラスなどの楽音を作ることができるかを説明します。 !1.音作りの考え方  FM方式での音作りの基本は、まず作りたい楽音の特徴をよく理解することです。例えば、ピアノであれば、鍵盤を押したときに、鋭い音の立ち上がりがあり、その後、押鍵を続けていれば、徐々に音が消えていくエンベロープを持っています。また、倍音の構成も立ち上がり時に多く、時が経るに連れて倍音の数は少なくなり、一定の倍音構成に近づいて行きます。  以上のような特徴をつかんだ後、FMの式でいかにして実現するかを考えます。エンベロープの特徴から出力振幅を、そして倍音構成から変調指数を決めることができます。また、倍音の構成はオペレータの周波数も関与していますから、周波数比もある程度決めることができます。このように、各楽音の特徴からFMの各パラメータをおおまかに決め、その次に音を聞きながら細部を詰めてゆくようにすれば、望み通りの音色を得ることができます。 !2.音作りの基本  FM音源とは、モジュレータによってキャリアを変調することから生じる効果を利用したものです。したがって、FMの基本式パラメータ(キャリアの出力レベル、モジュレータの出力レベル、モジュレータのフィードバックレベル、キャリアの周波数、モジュレータの周波数)を上手に扱うことにより、各楽音のピッチ、音色、音量のすべてを決めることができます。このFMの各パラメータとMSX-AUDIOのパラメータとの関係は、表7.95のとおりです。 1.FM接続(CONNECTION=0)  表7.95のFMの特徴がすべて表現できます。また、オペレータ1はそれ自体にフィードバックがかかっているので、オペレータ2との組み合わせによる高周波の出方は2段のFM接続としての効果が得られます。 2.パラレル接続(CONNECT=1)  2つのオペレータの足し算となり、オペレータ2は常にSIN波を発生させます。したがって、2つのオペレータの周波数をハーモニックにずらすことによりパイプオルガンのカプラー効果などを表現することができます。また、オペレータ1はFM接続と同様、フィードバックを持っているので高調波を出すことができます。 !3.音作りの例 '''表7.95 音作りの基本''' ,{c S},{SIZE:200} ,{c DR},{BSIZE:0 1 1 0} ,{c R},{BSIZE:0 1 0 0} ,{c D},{BSIZE:0 0 1 0} ,{t},{BSIZE:2 0} ,{c},{DR|S|CENTER},{DR|S|CENTER},{D|RIGHT},{D|CENTER},{D} ,項目,関与するパラメータ,MIN,←(音の変化)→,MAX ,{c},{DR},{R|CENTER},{D|RIGHT},{D|CENTER},{D} ,キャリアの出力レベル ,TOTAL LEVEL ,音量 小,←−−−→,音量 大 ,モジュレータの出力レベル{ROWS:2} ,(A・D・S・Rの各データ),丸い音色{ROWS:2},←−−−→{ROWS:2},明るい音色{ROWS:2} , ,(Key Scale データ){DR} , , , ,モジュレータのフィードバックレベル,FB{DR} ,普通の音色,←−−−→,鋭い音色(Noise) ,キャリアの周波数 ,MULTIPLE ,ピッチ 低,←−−−→,ピッチ高 ,モジュレータの周波数 ,(BLOCK/F-Number) ,近い倍音,←−−−→,離れた倍音 '''1.エレクトリックピアノ''' a.コネクションの選択  コネクションは「0」を設定します。ほとんどの音色はコネクションで得られます。ここでは、オペレータ1がアタック時のアクセントとリッチな高調波の両方を創り出します。 b.オペレータの周波数の決定  整数倍の高調波をすべて出すために、2つのオペレータともにMULTIPLEは「1」を使います。 c.オペレータの出力レベル  今度はモジュレータの出力を変更して音色を調整します。このとき、オペレータ1のレベルを決めるときには、低音部がまずピアノらしいリッチな高調波を得られるように設定し、それから高音にかけての変化はオペレータ1のレベルスケーリングで調整します。高音部ではほとんどSIN波になる位までレベルスケーリングする必要があります。 d.EGの設定  ここでは音量と音色のエンベロープを決めます。まず、オペレータ2はアタックを鋭く、しかもある程度長く伸びるエンベロープにします。モジュレータになるオペレータ1では立ち上がりだけ倍音が多く、後は一定にして音色変化はさせません。音量調整としてオペレータ2についてもキースケーリングをかけます。また、高音部にかけて音のシャープさを出すためには、RATEのスケーリングを行うとよいでしょう。 e.データの再調整  以上で音作りはほぼ終了ですが、EGなどのセッティングにより音色が幾分違ったものになっていきます。この場合、オペレータの出力レベルやフィードバックレベルを再調整して、最終的な音に仕立てます。例えば、金属的な響きが強すぎると思われる場合には、オペレータ1のレベルを下げます。 f.エフェクト付け  最後にエレクトリックピアノの音をより生かすために、トレモロ効果をLFOによってつけ加えます。これは内蔵の振幅変調の機能を利用してもよいですし、ソフトウェアでTOTAL LEVELの値を2〜6Hzの周期で更新(三角波で可)することも可能です。 '''2.トランペット''' a.コネクションの選択  ブラス系のコネクションも「0」です。オペレータ1のフィードバックレベルをコントロールすることにより、ブラス系の派手な音作りが可能です。 b.オペレータ出力  モジュレータであるオペレータ1のトータルレベルは$10〜$28程度の抑えめな値にし、フィードバックレベルはブライトな響きを出すために最大の「7」にします。 c.オペレータの周波数  基本的には、両方のオペレータ共に1倍にセットすればよいでしょう。 d.EG  2つのオペレータとも、ゆっくりとしたアタック音にします。そしてブラスのサウンドではモジュレータのアタックはすべてキャリアよりも遅くします。「ブァン」というブラス特有のアタックを表現するのに必要なことです。 e.キースケーリング  ゆっくりとした立ち上がりにエンベロープをセットしたため、高音部でハギレが悪くなります。このため、速いパッセージを弾いたときに不自然にならないように、レイトスケーリングを少しかけます。 f.LFO  ブラスはどんな上手なプレイヤーが吹いても、ロングトーンの場合にはピッチがほんの少し揺れてきます。これを表現するためにビブラート効果を加えます。 '''3.リズム音の作り方'''  リズム音は7、8、9のチャンネルを使って作られます。この3チャンネル6スロットで計5音のリズム音を作るわけですが、バスドラム(BD)のみは2スロットでFM音を作ります。したがって、バスドラムについては(a)〜(c)で述べたことと基本的には同一手法で創ることができます。そこで、ここでは残りの4音(ハイハット、トップシンバル、タム、ハイハット)について説明します。  MSX-AUDIOには、リズム楽器のためにホワイトノイズジェネレータと数種の周波数を合成して得られるノイズ発振器があります。このノイズ発振器は8チャンネルと9チャンネルの周波数情報(BLOCK、F-Number、MULTIPLE)より作られ、ホワイトノイズと合成することにより各リズム楽器に適した位相出力を発生して、オペレータに渡します。つまり、ここでは2つの周波数情報から4つの楽器の位相を作っていることになります。  なお、2つの設定周波数は経験的に3:1(f7CH = 3 × f8CH)が良いとされています。これで、各楽器の位相データが得られたことにより、この出力にエンベロープの情報を掛け合わせます。エンベロープは1スロットに1リズム楽器と設定されているため、メロディ楽器同様各リズム楽器の特徴をつかんだ値を各パラメータレジスタにセットします。「AM・VIB-DEPTH/RHYTHM」を参照して下さい。 ,{t},{BSIZE:1 0|SIZE:100%} ,{BSIZE:0}← [[4.4 MBIOS|4.4 MSX-AUDIO MBIOS]] ,{BSIZE:0|RIGHT}[[5章 MSX-JE]] →