PSG音源の利用
- 公開日: 2020/08/11
- 更新日: 2020/10/18
概要
General Instrument(GI)社のサウンドコントローラAY-3-8910はPSG音源[1]の一種であり、AppleIIのMockingBoard[2]を初めとして、世界各国の様々なパソコンに採用された。AY-3-8910は8ビットのI/Oポートを2つ(Port A / Port B)持っており[3]、しばしばこのI/Oポートを使ってコントローラ端子が実装された。
特に日本ではAY-3-8910のみならず、完全上位互換のFM音源コントローラであるYM2203やYM2608[4]が多くのメーカーで広く採用されたこともあり、AY-3-8910のI/Oポートをジョイスティック端子として使用したパソコンは多い。
制御方法
AY-3-8910は内部にレジスタを16持っており[5]、パソコン側ではレジスタ番号を指定して命令を送る。AY-3-8910はデータバスと(レジスタを指定するための)アドレスバスが共通であり、バスディレクション(BDIR、ピン27)、バスコントール1(BC1、ピン29)、同2(BC2、ピン28)を併用して、レジスタ指定、レジスタ読込、レジスタへの出力を行う。BDIR、BC1、BC2と機能との対応は以下の通り。
YM2203では146、YM2608では156。
BDIR |
BC2 |
BC1 |
Function |
---|---|---|---|
L |
L |
L |
Inactive (All Data/Address bus pins are High Inpedance) |
L |
H |
L |
|
H |
L |
H |
|
L |
L |
H |
Latch Address (Designate Register) |
H |
L |
L |
|
H |
H |
H |
|
L |
H |
H |
Read from Register |
H |
H |
L |
Write to Register |
なお、YM2203、YM2608ではピンの名称が以下のように変わっている。
AY-3-8910 Pin Name(pin#) |
Yamaha Pin Name |
YM2203 Pin# |
YM2608 Pin# |
---|---|---|---|
BDIR(27) |
/RD |
36 |
59 |
BC1(29) |
/WR |
35 |
58 |
BC2(28) |
A0 |
37 |
60 |
一部のパソコンでは、レジスタ番号の指定と、レジスタに送る/レジスタから読み取るデータ用としてI/Oアドレスを別個に割り当てており、一方のアドレスでレジスタを指定し、データを読み取る時は他方のアドレスを読み、データを送信する時は他方のアドレスに書き込むようになっている[6]。つまり、読み書きするI/Oアドレスに応じてBDIR、BC1、BC2の出力内容も自動的に設定される。
この方式となっているのはX1、MZ-2500、PC-9801。PC-6001、MSX、PC-8801mkIISR、SV-318/328はレジスタの読み出しと書き込みに使うI/Oアドレスが異なる(つまり音源の制御の為に用意されているI/Oアドレスは3つ)。FM-7とCPCはデータバスの入出力とBDIR/BC1/BC2を独立して行う(データバスとコントロール出力を別々のI/Oアドレスで行う)。
AY-3-8910のI/Oポートにアクセスする際に使うレジスタは$07、$0E、$0Fの3つ。それぞれの機能は以下の通り[7]。
Register# |
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
---|---|---|---|---|---|---|---|---|
$07(W) |
Set I/O Direction for port B (0=in, 1=out) |
Set I/O Direction for port A (0=in, 1=out) |
NOISE/TONE Enable (not used for controllers) |
|||||
$0E(R/W) |
PA7 |
PA6 |
PA5 |
PA4 |
PA3 |
PA2 |
PA1 |
PA0 |
$0F(R/W) |
PB7 |
PB6 |
PB5 |
PB4 |
PB3 |
PB2 |
PB1 |
PB0 |
上記テクハンWiki及び、アスキー「PC‐9800シリーズテクニカルデータブック」より