やっと音を鳴らすことができた。
いろいろ試しながら、最終的にできた回路。
若干の不満は残っているものの想定通りの動作はするようになった。
回路の挙動を確認するため、いつものI/Oボードに追加で作ったスイッチボード、何年か前のトラ技の付録基板のロジックチェッカを駆使して動作確認をする。
ちゃんとしたロジアナが欲しい。
最初にできた回路をチェックして、回路を変えたり追加したりするたびこんな感じで挙動の確認。
回路の挙動を見ながらデータシートの方もチェックする。
AY-3-8910のデータシートのタイミングの図。
元の回路は、「H」「L」の信号だけ見ればいくつか間違いがあるものの理屈はあっているようだが、タイミングまで考慮して回路を見ると動くかどうか怪しい感じ。
いろいろ試しながら回路を検討した結果、冒頭の回路図に至る。
細かいところは飛ばして、大まかにいうと、データの読み込みタイミングに影響がありそうなので、74HC245は撤去。
チップセレクト代わりの/A9はアドレス切り替わりとAY-3-9810のバスコントロール(BDIR,BC1)の切り替わりタイミングが重なってうまく動かないようなので、/A9はGND固定。
代わりに、アドレスが指定されていないタイミングではバスコントロールはINACTIVEとなるように74HC02を追加。
INACTIVE状態ではデータバスはハイインピーダンスとなるので、74HC245を撤去したことでの影響はなし。
クロックは手抜きするため多出力オシレータにおきかえ。
16MHzを4分周すれば4MHzで本の通りの音程データでいけるけど、秋月で売ってなかったので、秋月にあった14.31818MHzのものを8分周してMSXの仕様に合わせた。
ICソケットを使っているので同シリーズの違う周波数に変えられるし、ディップスイッテで設定を変えられるのでクロック周波数を変えて試すことができる。
74HC02をうまく使えば74HC04も不要になりそうだが、取り外しが面倒なのと検討用に追加した回路で74HC04を使っているのでこのままにした。
さて、実際にポケコンにつないで音を鳴らしてみる。
アセンブラなんて何年ぶりだろう。20年以上前か。
ポケコン活用研究1に載っているリストを打ち込んで音が鳴ることを確認。
ORG 100H START: LD IX,R00 LD B,16 LD C,0 FLG: LD A,C OUT (24H),A LD A,(IX) OUT (25H),A INC C INC IX DJNZ FLG RET R00: DB 0DEH R01: DB 02H R02: DB 7BH R03: DB 01H R04: DB 3FH R05: DB 01H R06: DB 00H R07: DB 0F8H R08: DB 09H R09: DB 09H R0A: DB 08H R0C: DB 90H R0D: DB 01H R0E: DB 00H R0F: DB 00H
レジスタの値をいろいろ変えて動作を確認できるようにBASICでも試してみる。
10 PRINT "PSG TEST" 20 RA=0:RD=0 30 PRINT "Now RegAdd=";RA 40 INPUT "RegAdd ";RA 50 INPUT "RegData ";RD 60 PRINT "OUTPUT RA=";RA;" RD=";RD 70 OUT &H24,RA 80 OUT &H25,RD 95 FOR I=0 TO 500:NEXT 100 PRINT "READ "; INP &H26 110 PRINT 120 GOTO 30
たしかPC-G801~803あたりまではBASICで直接I/Oアドレス指定の入出力はできずマシン語の準備が必要だったはず。
どのタイミングか知らないけどBASICからI/Oできるようになって楽になったものだ。
BASICのプログラムは、RegAddでレジスタを指定して、RegDataで値を入力。
それをPSGに送って、少し間をおいてPSGから値を読み込むようになっている。
いろいろ値を変えて音が変化するのを確認できる。
最後に出来上がった基板。
ブレッドボードで試作してから基板に組めばもう少しきれいにできそうなのだが、同じものを2回も組むのは面倒なので直接ユニバーサル基板に組む。
手持ちのブレッドボードでは間に合わなかったてのもあるけど。
結果、74HC245の跡地にジャンパー8本。
74HC02の追加スペースがなかったので、小型基板を使って無理やり実装。
まあ何とか音を鳴らすことができたので、ポケコン活用研究1に載っているサンプルプログラムを入れてみたいところだが、打ち込みが面倒だな。
音階データをMSX仕様に直さないといけないけど、そこはググってデータがあったのでそのデータに置き換えれば良さそう。
問題は当時のポケコンは3MHzで動いていたけど、PC-G850VSは8MHzで動いていること。音の長さをどうやって調整するか。
PC-G803を手に入れたから、そっちで動かせばいいか。