SSブログ
English Version

SuperSimpleController(その23)VDPSG基板の改版 [OriginalCPU]

 前回の記事で自作CPUボード(Simple8Z)用に作成したサブボード(Simple8Vdpsg)でPSG(AY-3-8910)を使った自動演奏について書きましたが、Simple8Vdpsgボードがうまく動いているようなので回路図に修正部分を反映して整理しました。
 自分のためのメモの意味も込めて整理後の回路図などの情報を記録しておきたいと思います。

 初版の回路図は「SuperSimpleController(その17)TMS9918Aの接続 その2」の記事に書いていますが、今回は下記の変更を行っています。
  1. RCAジャックのフットプリントの変更
  2. DRAMのOE/タイミングの調整
  3. PSGの制御信号の見直し
  4. PSGのBポートのコネクタ出力

 4項は初耳(初目?)だと思いますが、PSGはポート毎に入力/出力の設定ができるのでA/Bの両ポート共にコネクタに出力するようにしました。
 下図が修正した回路図になります。制御のためのコネクタ部はSIMPLE8というバスに準拠しており、Z-80等のCPUでも簡単に繋がるはずです。

修正後のSimple8Vdpsgの回路図

  ★変更 2021/09/12 Ver0.03 VDPのA9/端子をGNDに接続(修正反映漏れ^^;)


 回路図の変更に伴いパターン図もアップデートしました。

Simple8Vdpsgのパターン図(グランドベタ化前)



 グランドベタ化後のトップ面とボトム面のパターン図が下図になります。

Simple8Vdpsgのパターン図(トップ面)



Simple8Vdpsgのパターン図(ボトム面)



 3Ⅾ表示した図も貼っておきます。

Simple8Vdpsg基板のCADによる3D表示



 また、今回はtwitter等で話題になっているALLPCBさんに基板製造を依頼しました。
 腹周りが2mくらいあるんじゃないかと思える太っ腹なクーポンにより初回の注文は輸送費も含めて只になります(7月に只クーポン使った人は8月にも只クーポンを貰えたらしい)

 注文時の設定画面が下図でMin Spacingに関しては、今回0.3mmで設計しmil換算では 11.8 mil(=0.3/(2.54/100))なので10milを選択しました。
 今回の設計ではビアの穴径を0.42mmにしたのでMin Hole Sizeを0.4mmにしています(CPU基板(Simple8Z)の方は高密度化のために0.3mmで設計しています)

ALLPCBでPCB製造注文時の設定例



 上記の設定値と価格との関連は未確認ですが、今回は下図の最初の行の「Order Now」ボタンを押すことで、クーポンを使った只の注文ができました。
 Order Time:2021/8/28 23:17:33 で現在(8/29 14:00)のステータスは Allpcb auditing(ALLPCBで監査中)です。
 出荷予定日は Estimated Shipping Time:2021/09/01 となっています。

ALLPCBでの注文形態選択一覧





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

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

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

 前回の記事オリジナルCPU(Simple8Z)基板用に作成したサブボード(Simple8VDPSG)に実装したPSG(AY-3-8910)機能のハードディバッグ状況について書いたようにPSGが動くようになったので、今回はPSGを使って遊んでみた内容について書いてみます。

 PSG内のレジスタ構成は下表(マイクロチップ社のデータシートからの抜粋)のようになっています。レジスタ番号は8進数の表記でなので10進表記だとR0~R15の16個のレジスタがあります。

PSG register



 PSGのClock端子にはMSXと同様にVDPのCPUCLK出力(3.579545MHz)を2分周したもの(1.7897725MHz)を入れています。ロジアナで確認したクロック波形が下図になります。

PSGのクロック波形 サンプリング:100Hz



 PSG内で更に16分周した信号を各チャンネルの音程分周比レジスタ(R0~R5)に設定された値で分周した信号がトーン信号として出力されます。

 従って各音階を出力する場合のPSGの音程分周比は下表のようになります。
 表中の青色部分が4オクターブのラの音(440Hz)で、この値から指数演算(半音分が1/12乗)して下表の値を算出しています。ある行の次の行が1オクターブ高い(2倍の周波数)行になりますが、右シフト(x0.5)した値が下の行の値と一致しない場合があるのは小数点部分を四捨五入している為です。

octド#レ#ファファ#ソ#ラ#
CC# DD# E F F# GG# AA#B
10D5C0C9D0BE70B3C0A9B0A02097308EB 086B07F207800714
206AE064E05F4059E054D050104B90475043503F903C0038A
30357032702FA02CF02A70281025D023B021B01FC01E001C5
401AC0194017D016801530140012E011D010D00FE00F000E2
500D600CA00BE00B400AA00A00097008F0087007F00780071
6006B0065005F005A00550050004C004700430040003C0039


 Web上でPSGをエミュレートしているPSG Padというサイトがあり、PSGが動作するハードウェアが無くても気軽に動作を確認することができます。

 音階データの一覧表ができたので簡単な自動演奏をしてみたいと思います。
 ネット上には著作権の関係で楽譜のデータはあまりないのですが簡単移調楽譜屋というサイトでありがたいことに著作権が消滅した民謡・童謡・クラシック等の楽曲の楽譜を入手できます。その中にサイモンとガーファンクルで有名なスカボロフェアがあったので楽譜を入手しました。この曲は意外なことにイングランド民謡だったんですね。

 PSGで自動演奏しようとする際にエンベロープパターンを使ってピアノ音のようにしようと思ったのですが、エンベロープパターンは各チャンネル独立ではなく、1パターンを3チェンネルで共有しているので上手くいきません・・
 例えば、主旋律が無音時に対旋律を鳴らすと主旋律も鳴ってしまうのです^^;。

 そこで各トーンの音量をソフトで制御することにして、各チャンネルを独立したエンベロープで鳴らせるようにしました。
 今回の自作CPUにはタイマー割込み等は無いので音符長の処理内でエンベロープも処理するようにしています。

 各チャンネルで独立したエンベロープ処理ができれば、あとは音階データをPSGに流すだけで簡単に自動演奏ができます。

 スカボロフェアの演奏例を貼っておきます。今回作成したエンベロープ処理では初期音量も変更でき、この演奏例では主旋律と対旋律をそれぞれ二通りの音量(合計4種類)で制御しています。



★追記 2021/08/25
 動画付きでtwitterに投稿したメッセージを貼っておきます。
 手持ちの小型LCDモニタでは色ずれしないのにNTSC信号をキャプチャしてパソコン画面に表示すると結構色ずれしてますね・・
 中華製の超安かったキャプチャだからかなぁ~



★追記 2021/08/26
 動画を少し編集してYoutubeにアップしました。
https://www.youtube.com/watch?v=QoaBjz2VHSE



★追記 2021/08/27
 Youtubeで見つけた本物の「スカボローフェア」を貼っておきます。
 ボーカルに勝る楽器は無いということを思い知らされる気がします。すばらしぃ・・・
(中学の頃、姉が買ったサイモン&ガーファンクルのLPをよく聞いてたなぁ)

 Simon and Garfunkel - Scarborough Fair Remastered study (HQ audio)



[TOP] [ 前へ ] 連載記事 [ 次へ ]
nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

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

VDPSG基板トップ面



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

VDPSG基板ボトム面



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

昔作ったPSG基板



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

GI社製PSG



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

MicroChip社製PSG




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

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

TOKYO2020オリンピックの思い出 [日記]

 新型コロナにより1年延期した東京2020オリンピックが無事終了しました。
 今回のオリンピックはいつものオリンピックより多くの時間、テレビやネットを見て応援しました。

 鮮烈に印象に残った選手等をメモしておきます。

  1. 女子 個人ロードレース 金メダリスト:キーゼンホーファー
     最初からアタックをかけ最後まで逃げ切り、2位の選手は自分が1位と確信してゴールしていたという快挙。
     ロードレースでは通常チームで戦うようだがチームに属さず単独で参加して、アマチュア(数学者)なのにプロ選手相手に金メダルを獲得した。

     下記は本人による談話です。
    • 少ない人数で走った方が楽だから
    • 私の代表選手を疑う人たちにも感謝。あなたが間違っていることを証明できることが私のモチベーションになる。
    • 30歳になり、何かを知っている人なんていないことを学んだ。なぜなら本当に何かを知っている人は「知らない」と言うからだ。

    【リンク】

  2. 女子70キロ級柔道 銅メダリスト:タイマゾワ
     金メダルを獲得した新井千鶴選手と準決勝で対戦した試合がすごかった。関節が信じられないくらい柔らかくて関節技を堪える精神力が凄い。
     12分にも及ぶゴールデンスコア(延長戦)の末に、最後は失神して勝敗が付くという壮絶さである。

    【リンク】

  3. その他
     今回のオリンピックで卓球の面白さを改めて知った(見ていて最も面白い競技の一つだ)。私が若いころは卓球クラブというと壁に向かって一人で練習しているようななんか暗いイメージがあったw。
     しかし、近代の卓球はラケットのラバーも進化し、チキータ等の新しい技も出てきていて、持ち技の切れや対戦相手に対する戦略と順応力を競う近代スポーツという印象だ。

     また、今回から競技種目として加わったスケートボードでは選手たちが国を超えてみんな友達のようにお互いを応援する姿には感銘を覚えた。
     加えて解説者の「半端ねえっす」等の言葉遣いも新しい時代の匂いがした。この言葉はtwitter情報では「パねぇ」の丁寧語だから解説者が使ってもいいとのことだ。

    ★追記 2021/08/21
     卓球 平野選手関連のリンクを追加(TOKYO2020以前のものも含む)
     超高速攻撃型卓球がすばらしい。


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

TL866II用防塵キャップ [3D_printer]

 低価格で多機能なROM WriterであるTL886II Plusを久々に使ったところ、下図のようなエラーが発生してしまいました。
 ROMのピンとゼロプレッシャー(ZIF)ソケット間の接触不良のようでROMを何回か入れ直したらエラーが出なくなりました。

TL866IIで発生したエラー



 このROM Writerはページプリンタの上にずっと置いていたので上面に薄っすらと綿ゴミが積もったことが接触不良の一因かもしれません。

 そこでZIFソケットにゴミが積もらないようにカバーを作ってみました。

TL866IIのZIFソケット用カバー



 透明のPETGで出力し、実機に装着した様子が下の写真になります(色付きのフィラメントの方が良かったかも・・でも交換がめんどいw)

ZIFソケット用カバー装着状況



★追記 2021/08/19 {
 コネクタ部分のキャップも作ってみました。取り外し用の切り欠き(下図の下部)を下側にして装着します(逆でも問題ありませんが外観的に切り欠きが目立たない方がいい)。
 出力する際のフィラメントは柔軟性があり積層間の強度が高いPETGを推奨します。

TL866用コネクタキャップ(CAD)



 実機に装着した状態が下の写真です。
 コネクタの部分を塞ぐと放熱効果が低下しそうですが元々発熱が少ないので問題ないと思います(使用する場合は自己責任でお願いします)。

TL866用コネクタキャップ

}

 必要とする人はほとんどいないと思いますが、stlファイルを下記のリンクからダウンロードできます。商用利用以外であれば自由に使用可能です。
★Ver0.03 2021/08/19 コネクタ部のキャップを追加
★Ver0.02 2021/08/14 文字パターンを「TL886」から「TL866」に修正

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