PSG(SN76489コンパチ)


SC−3000/SG−1000ではSN76489を搭載していたのですが、
MARKIIIではVDP315−5124に内蔵されています。動作クロックは3.579MHz
トーンジェネレータ3つとノイズジェネレータ1つの計4声
内蔵レジスタは8つあります。

  I/Oポート
ポート07FHを使用します(出力専用)
07FH:PSGレジスタ

制御方法
マーク(内蔵レジスタ 8個)
000:トーンジェネレータA
001:アッテネータA
010:トーンジェネレータB
011:アッテネータB
100:トーンジェネレータC
101:アッテネータC
110:ノイズジェネレータ
111:ノイズジェネレータアッテネータ

音量の設定
各チャンネルのアッテネータに音量データ(4ビット)を設定します。
d7  :1
d6〜4:マーク(ChA=001、ChB=011、ChC=101、Noise=111)
d3〜0:音量(0000で最大音量、1111でオフ)

チャンネルAの音量を最大にするには、 1001000Bになるので ポート07FHに090Hを出力します。
チャンネルAの音量OFFの場合、 10011111Bで09FHになります

周波数の設定(トーンジェネレータ)
各チャンネルのトーンジェネレータに周波数データ(10ビット)を設定します

d7:1
d6〜4:マーク(ChA=000、ChB=010、ChC=100、Noise=110)
d3:周波数d3
d2:周波数d2
d1:周波数d1
d0:周波数d0

d7:0
d6:0
d5:周波数d9
d4:周波数d8
d3:周波数d7
d2:周波数d6
d1:周波数d5
d0:周波数d4

周波数データの求め方
F=3.579533/32*D
F:周波数、D:周波数データ、3.575933:クロック数
近似値で求めるしかないので
D=11860/F
440Hzの周波数ならD=111860/440=254.227272...
254として10Bitの二進数で表すと”0011111110B”
チャンネルAに設定する場合
10001110B、00001111Bになり、08EH,00FHの順に出力します。

周波数の設定(ノイズジェネレータ)
d7  :11
d6〜4:マーク(110)
d3  :0
d2  :ノイズフィードバックコントロール(0:周期ノイズ、1:ホワイトノイズ)
d1〜0:周期コントロール

周期コントロール
00:FC/512
01:FC/1024
10:FC/2048
11:トーンジェネレータCの周波数
FC=3.575933

周波数テーブル
     
d1d2d3d4d5
C 0355H01AAH00D5H006AH
C+ 0324H0193H00C9H0064H
D 02F8H017CH00BEH005FH
D+ 02CDH0167H00B3H0059H
E 02A5H0152H00A9H0054H
F 027FH0140H00A0H0050H
F+ 025CH012EH0097H004BH
G 023AH011DH008EH0047H
G+ 0219H010DH0086H0043H
A03F8H01FCH00FEH007FH003FH
A+03BCH01E0H00F0H0078H 
B038DH01C4H00E2H0071H 
 

MARK IIIのコーナへ
Home へ戻る