解説
PSGの音の発生装置と音量の制御装置は3チャンネルに独立していますので、別々に指定することができます。ただし、ノイズの発生装置とエンベロープの発生装置は各チャンネルで共用します。
レジスタ
PSGに用意されているレジスタは次のとおりです。
R0,R1 チャンネルAの周波数を2つのレジスタを使って指定する。
R2,R3 チャンネルBの周波数を2つのレジスタを使って指定する。
R4,R5 チャンネルCの周波数を2つのレジスタを使って指定する。
R6 ノイズ周波数を指定する。
R7 各チャンネルから音を出すかどうかを指定する。
R8,R9,R10 チャンネルA、B、Cのそれぞれの音量を指定する。L0〜L3を0にすると無音に、15にすると最大の音量になります。エンベロープの指定をするときは、Mを1にします。
R11,12 エンベロープの周期を2つのレジスタを使って指定する。
R13 エンベロープ形状を指定する。
周波数の設定(R0〜R5)
TP=fclock÷(16×fT) CT+FT÷256=TP÷256
fclock:1.78977MHz
fT:出力周波数
FT:FTA(R0)の値
CT:CTA(R1)の値
ノイズ周波数の設定(R6)
NP=fclock÷(16×fN)
fclock:1.78977MHz
fN:ノイズ周波数(Hz)
NP:R6のNPに設定する値
チャンネルの設定(R7)
使用したいチャンネルに対応するビットを0にする。
B0(LSB) | 0 | チャンネルAから音を出す |
B1 | 0 | チャンネルBから音を出す |
B2 | 0 | チャンネルCから音を出す |
B3 | 0 | チャンネルAからノイズを出す |
B4 | 0 | チャンネルBからノイズを出す |
B5 | 0 | チャンネルCからノイズを出す |
B6 | 0 | (常に0) |
B7(MSB) | 1 | (常に1) |
音量設定(R8〜R10)
音量設定には大きさが一定のものと、時間的に変化するエンベロープモードとがあります。エンベロープモードを指定している場合はさらにエンベロープ形状とその周期を指定します。
B0(LSB) | × | 音量を0〜15の範囲(ビット列0000〜1111)で指定する。0の場合は無音となります。 |
B1 | × | 音量を0〜15の範囲(ビット列0000〜1111)で指定する。0の場合は無音となります。 |
B2 | × | 音量を0〜15の範囲(ビット列0000〜1111)で指定する。0の場合は無音となります。 |
B3 | × | 音量を0〜15の範囲(ビット列0000〜1111)で指定する。0の場合は無音となります。 |
B4 | 1 | 1であればエンベロープモード、0であればB3〜B0で決まる音量となります。 |
B5 | × | (使わない) |
B6 | × | (使わない) |
B7(MSB) | × | (使わない) |
エンベロープ周期の設定(R11、R12)
EP=fclock÷256fE CT+FT÷256=EP÷256
fclock:1,78977MHz
FT:FT(R11)に設定する値
CT:FT(R12)に設定する値
エンベロープ形状の設定(R13)
エンベロープ形状はレジスタR13の下位4ビット(E3〜E0)へ0〜15(ビット列0000〜1111)で指定します。