SSブログ
English Version

SuperSimpleController(その21)PSG(AY-3-8910A)の動作確認 [OriginalCPU]

 前回の記事オリジナルCPU(Simple8Z)基板用に作成したVDP(TMS9918),PSG(AY-3-8910)及びシリアル通信(MC68B50)を搭載したサブボード(Simple8VDPSG)のVDP機能が動いたことを書いたので今回はPSGの動作確認についてメモしておきます。

 このPSGはVDPSG基板を10cmx10cmにした場合、空きスペースが生じるので急遽付け足した機能で、ブレッドボード上での動作は未確認な状態でプリント基板化しています。

 PSGのA9/にはHC138からのPSGSEL/(PSGセレクト信号)を入れて、CPU基板からのRD/、WR/信号をPSGSEL/とANDしてPSGのBDIRBC1に接続しています。
 BC2にはA0を接続していてどうにかなるだろうと思っていました(マニュアルをじっくり見ての検討をしていなかった^^;)

BDIRBC2BC1
 PSGRD/   A0   PSGWR/ 


 PSGのバスコントロールは下表のように柔軟な設計になっていて(かえって紛らわしい)赤枠で囲んだ状態を使用して制御しようと思いました。

PSG Bus Control Function Table



 具体的なI/Oアドレスと制御方法は下表のような想定です。

No.addressRD/WRFunction
121HRead read from PSG 
220HWrite latch address
321HWrite write to PSG


 しかし、プリント基板の電源を入れてモニタでPSGのレジスタ設定しても全く動きません(設定したレジスタ値も読めません)^^;
 PSGへのクロックやコントロール信号は想定した通りに出ています・・・

 データシートをまじめに見て確認した結果、2つの問題があることが判りました。


【問題点と対策】
  1. コントロール信号
     上記の「PSG Bus Control Function Table」を見るとBDIR,BC2,BC1が111の場合、LATCH ADDRESSの状態になります。この状態はPSGアクセス時以外でも発生するので不要なLATCH ADDRESSが発生してしまいます。

     ネット上でPSGを接続した回路例を探してみると、ほとんどの例がパラレルI/Oに接続してBUS CONTROLをソフト制御するようになっていました。しかし、回路を簡略化するためにもPSGを直接I/O命令で制御したいものです
     WR/,RD/,A0の三つの信号で制御することにするとWR/とRD/はHC138でアドレスディコードしたPSGSEL/信号とANDするのでPSGアクセス以外では変化しませんが、A0の値は常に変化します。上記の「PSG Bus Control Function Table」からINACTIVEの状態をすべて列挙すると

    No.BDIRBC2BC1Function
    1000 INACTIVE 
    2010 INACTIVE 
    3101 INACTIVE 

    となり、1,2のパターンを使ってBC2にA0を割り振るとA0はDon't careになり、PSGアクセス時以外で変化しても問題無くなります。
     PSGへのRDとWR信号をアクティブハイにすればPSGアクセス時以外では0になります。

     INACTIVE以外のBUS CONTROLを列挙したものが下表です。read/writeは1パターンしかないので下表の1,2のパターンは採用で決定で、LATCH ADDRESSは4のパターンを採用するとBDIRの値が"write to PSG"と同じになり辻褄が合うようになります。

    No.BDIRBC2BC1Function
    1011 read from PSG 
    2110 write to PSG 
    3001 latch address 
    4100 latch address 
    5111 latch address 

     結果としてPSGへのコントロール信号の接続は

    BDIRBC2BC1
     PSGWR   A0   PSGRD 

    となり、具体的なI/Oアドレスと制御方法は冒頭に書いたものと同様で下表のようになります。

    No.addressRD/WRFunction
    121HRead read from PSG 
    220HWrite latch address
    321HWrite write to PSG


  2. PSGのアクセスタイミング
     PSGへのアドレスラッチとデータ書込みタイミングを下図に示します。
     これを見るとBUS CONTROL自体が80系CPUにおける書込み信号(WR信号)でBUS CONTROLがINACTIVEに変化する際にDATAバス上のデータを取り込むようです。
     しかし現状の回路ではBUS CONTROLがINACTIVEになった時点でDATAバス上のデータも変化してしまいます。


    PSG Latch Address Timing


    PSG Write Data Timing


     対処としてはPSGSEL/に接続していたPSGのA9/をGNDへ接続するように変更し、「SuperSimpleController(その20)TMS9918Aの接続 その5」の記事で対処したR1レジスタでアドレス指定するI/Oライト命令を使うことでBUS CONTROLがINACTIVEになった後も1クロック分、データバス上の書込みデータが保持されるようになります。

     以上の対処により、PSGのレジスタへの書込み/読込みができるようになり、トーン音やノイズ音が出力可能になりました。


【プリント基板の改造】

 上記内容で改造したプリント基板の写真を貼っておきます。

 最初に改造後のプリント基板のトップ面です。PSGはなんとGI社製です。最初はAliExpressさんから購入した超安価@65円(送料別)を使っていましたが、動かなかったので40年程前に作った基板から抜き取り差し換えています。
 上記の改造後はAliExpressさんから購入したマイクロチップ社製のもの(本物かどうかは疑わしい)でも動作しました。
 未使用のゲートの入力ピンは両面でベタグランドにサーマルパッドで4点接続されているのでICのピンを折り曲げて丸ピンソケットで接続しています。

VDPSG基板トップ面



 改造後のVDPSG基板のボトム面が下の写真です。今回はPSG部分をブレッドボードで確認せずにプリント基板にしたので結構ジャンパー線が飛び交っています。
 PSGRD/とPSGWR/を反転して正論理にする際に、未使用のインバータ(HCT04)が1個しかなかったのでDRAMのリード信号のタイミング調整用に使っていた2個のインバータを未使用のアンドゲート(HC32)と入れ替えたことがジャンパー線が多くなった要因の一つです。

VDPSG基板ボトム面



 上記のGI社製PSGを抜き取った基板もおまけに貼っておきます。

昔作ったPSG基板



 抜き取ったGI社製PSG(40年程前に亜土電子で購入したもの)の写真も貼っておきます。

GI社製PSG



 AliExpressさんから購入した格安PSGの写真も・・・

MicroChip社製PSG




[TOP] [ 前へ ] 連載記事 [ 次へ ]

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー