参考資料:PSGのレジスタの仕様

出典:「MSX2 パーソナルコンピュータBASIC説明書」(昭和60年11月、編集:株式会社アスキー、発行:松下電器産業株式会社 情報機器部)

例と、PSG for Webで対応していない部分は省略しています。

解説

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から音を出す
B10チャンネルBから音を出す
B20チャンネルCから音を出す
B30チャンネルAからノイズを出す
B40チャンネルBからノイズを出す
B50チャンネルCからノイズを出す
B60(常に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の場合は無音となります。
B411であればエンベロープモード、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)で指定します。

エンベロープ発生器出力

[広告]