解説
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)の値
チャンネルAの場合、R1を上位4ビット、R0を下位8ビットとする12ビットの値F(CT×256+FT)を考えたとき、
F=TP であり、F=fclock÷(16×fT)なので、
fclock(正確には1,789,772.5)÷16÷fT(希望する周波数)
の値(1〜4095)の下位8ビットをR0に、上位4ビットをR1に設定すればよい。チャンネルB、Cも同様。
これは、矩形波の高低の変化を何クロックごとに行うかを指定していることになり、レジスタ値は周波数とは逆数の関係になる。
つまり、大きな値を指定するほど周波数が下がり、低い音が出る。
ノイズ周波数の設定(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)で指定します。
エンベロープ発生器出力
