SuperSimpleController(その25)ALLPCBのUSELESSコンテストに入賞 [OriginalCPU]
中華系の格安プリント基板製造業者の一つであるALLPCBさんで "Useless" Design Competition を開催していたので応募してみました。ALLPCBさんでは初登録者への無料クーポン(送料も含めて基板製造が無料)の提供などのサービスがあり、一度基板製造を依頼してみてはいかがでしょうか?
コンテストの結果ですが、拙作のオリジナル8bit CPUが「めっちゃ面白い賞」に選ばれました(^^)/
英語ですが応募内容も貼っておきます。
*Reference video
https://www.youtube.com/watch?v=LzoIbzHgR4k
*Reference fig
[TOP] [ 前へ ] 連載記事 [ 次へ ]
コンテストの結果ですが、拙作のオリジナル8bit CPUが「めっちゃ面白い賞」に選ばれました(^^)/
ALLPCB "Useless" Design Competition Result |
|
英語ですが応募内容も貼っておきます。
Original architecture 8-bit CPU board consisting of 13 DIP ICs ### Project background ### I like to use DIP ICs to run old CPUs such as Z80. One of my design policies is to use as few chips as possible. It's completely useless, but this time I made the CPU itself using DIP ICs. ### Design policy ### * An 8-bit CPU with a 16-bit address bus. * Use only DIP type logic ICs and memory ICs (GAL can be used). * Minimize the number of ICs used. * Implement the CPU functions and the memory required for the CPU to operate on one board. ### CPU configuration ### In order to reduce the number of ICs used, the machine language implementation method was a microprogram method using ROM. In addition, the ALU (Arithmetic and Logic Unit) function has been realized by using a large-capacity ROM(32Mbit) as a look-up table in order to realize addition, subtraction, logical operation and bit shift arithmetic processing. Two general-purpose registers (R0, R1) are implemented, and the output of these two registers is also used as the input of the ALU. Implemented a conditional jump instruction that refers to the zero flag and carry flag output from the ALU. In addition, the carry flag is also used as the input of the ALU, and the carry correspondence processing of arithmetic operations and bit shift instructions is also implemented. Furthermore, it has an I/O space independent of the 64K bytes memory space, and by adding a connector for I/O, it is easy to connect an external interface. ### Outcome ### * The CPU function was realized using only 13 DIP ICs and mounted on one board (11 ICs can be seen in the photo, but 2 ICs are mounted on the back of the board). * I made an assembler for this CPU using the macro function of the macro assembler (M80, L80) for CP/M. * By connecting a small board for serial communication to the external interface connector, I have developed a monitor program that can operate the memory and download the executable file. * I created a 16-bit addition, subtraction, multiplication and division operation in machine language, and created a calculator program that can execute formulas in reverse Polish notation. ### Difficulties and solutions ### * When creating microcode to implement machine language, it is difficult to create binary data directly, so I created an environment to convert microcode instructions into bit data using the macro function of the macro assembler. * Furthermore, when implementing complex machine language such as call instructions, even microcode instructions are inefficient, so I created microcode by writing using microcode mnemonics with a higher degree of abstraction. However, I manually converted the microcode mnemonics to microcode instructions. * To facilitate microcode debugging, I used the PIC24FJ64 to enable external clocking. By controlling the reset and clock with PIC24FJ64, it is possible to stop processing and step operation at the specified location of the microcode. |
*Reference video
https://www.youtube.com/watch?v=LzoIbzHgR4k
*Reference fig
Fig. 1 |
|
Fig. 2 |
|
Fig. 3 |
|
Fig. 4 |
|
Fig. 5 |
|
[TOP] [ 前へ ] 連載記事 [ 次へ ]
SuperSimpleController(その24)VDPSG基板の改版その2 [OriginalCPU]
前回の記事で書いたように自作CPUボード(Simple8Z)用に作成したサブボード(Simple8Vdpsg)の修正版のプリント基板がALLPCBさんから2021/09/04に届きました。手配したのが2021/08/28 23時なのでかなり速いですね^^
出来栄えは下の写真のように特に問題ないものでした(久々に緑色の基板です)
無料クーポン使用時のソルダーレジストの色は緑か白の2択のようです。
送料も込みで無料というALLPCBさんの太っ腹なクーポンサービスはありがたいですね(どういうビジネスモデルなのか心配になってしまいます)
プリント基板は短期間で製造してもらったのですが、RCAジャックが見つからず共立エレショップさんから再購入したこと等もあり部品の取付が遅くなりました^^;
自分自身のメモの意味合いも込めて部品取り付け後の写真を貼っておきます。
RCAジャックのフットプリントを今回修正していますが問題無くピッタリ入りました^^
下の写真がボトム面になります。修正箇所の反映が一カ所漏れていたのでジャンパー線が1本発生してしまいましたorz
今後のこともあるので再発防止策も検討しておきたいと思います。
今回は目立たないようにジャンパー線の色を基板の色に合わせました。
13個のDIP ICで構成される自作のオリジナルCPU(Simple8Z)と連結した状態が下の写真です。
部品実装が終って試験プログラムを動かしてみるとVDP(TMS9918)の表示のみならずPSG(AY-3-8910)も動作しませんorz
PSG側は回路図の机上確認でPSGのA9/ピンをGND接続に変更するという修正が漏れていたことに気が付き、ボトム面の写真のように基板を修正して動作するようになりました。
VDP側は表示が不安定な状態で下の写真のような表示になってしまいます。
参考に画面表示が安定した際の表示例も貼っておきます。
表示するテキストコードはVRAMに概ね書けていますが、キャラクタの表示色を指定するカラーテーブルがうまく設定できていないような状態に見えます。
カラーテーブルをモニタのOUT命令を使って設定するとうまく表示するようになったりするのでDRAMへの書込み動作が不安定な状態のようです。
カラーテーブル設定時のDRAMのRAS/,CAS/,WE/等の信号をざっと確認して見ると下図のような状態で想定通りのように見えます。
NG原因が判らないのでDRAM(uPD41464-10)のライトサイクルの各タイミングが規格を満たしているか測定した結果が下図になります。
図中の青色文字が規格値(アクセスタイム100nsの場合)で茶色と赤色の文字が測定値です。ロジアナのサンプリングは40MHzなので時間分解能は25nsになります。
2ヶ所ある赤色の星マーク部が規格を満たしていない箇所です。
tRCDは最大50nsとなっていますがデータシートに注意書きがあり、この値はアクセスタイム100nsを保証する場合の値であり、この値よりも大きい場合、アクセスタイムはtCAC(Access time from CAS/)に依存すると書かれています。tCACは最大50nsなので今回の場合は問題ありません。
もう一つのNG箇所であるtRWLは純粋に規格を満たしていないので、これが原因で不安定な表示になっているものと推測されます。
対処するにはRAS/信号を遅らせるかWE/信号を早める必要があります。後者の対処をすることにし、もともとHCT245の遅延時間対応のために付けていたWE/信号を遅延する部分が過剰だったのでCRの遅延を無くすためにC12を取り外して動作確認したところ表示が安定するようになりました(図中のMWR/信号はVDPから出力されるR/W信号です)
★変更 2021/09/16 R3を削除すると不安定になるので残すように変更
★追記 2021/09/16 {
上図の回路変更でR3も削除するように書いていましたが、実際にR3をショート状態にしたところ画面表示が不安定になったのでR3は残すように変更しました。パターン上はC12のみ削除するようにしたいと思います。
尚、下図のロジアナでの測定時はR3がある状態で測定しています。
}
安定動作時のDRAMライトタイミング図も貼っておきます。tRWLは50nsになり、規格を満たすようになりました。
★追記 2021/09/15
ハードディバッグ時の写真を貼っておきます。
フッククリップは高級品の方が使い易そうなのですが結構高いので安価なものを使っています。
ラジオペンチで先端のピンを整形しながら使っています。
周りの状況はあまりにも混沌としているので写せませんw
★追記 2021/09/21
タイミング調整可能なようにC12のパターンは残すこととし、修正版をVer0.03としてALLPCBさんの太っ腹クーポンを使って9/20に製造依頼しました。
★追記 2021/09/25
今回はALLPCBさんに9/20に製造依頼してなんと9/25の朝に届きました。
パッケージに書いてあるように SO QUICK です^^
今回も6枚入っていました。
★追記 2021/09/27
製造と配達の工程記録を貼っておきます。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
ALLPCBさんから届いたプリント基板 |
|
出来栄えは下の写真のように特に問題ないものでした(久々に緑色の基板です)
無料クーポン使用時のソルダーレジストの色は緑か白の2択のようです。
送料も込みで無料というALLPCBさんの太っ腹なクーポンサービスはありがたいですね(どういうビジネスモデルなのか心配になってしまいます)
Simple8Vdpsgプリント基板(トップ面) |
|
Simple8Vdpsgプリント基板(ボトム面) |
|
プリント基板は短期間で製造してもらったのですが、RCAジャックが見つからず共立エレショップさんから再購入したこと等もあり部品の取付が遅くなりました^^;
自分自身のメモの意味合いも込めて部品取り付け後の写真を貼っておきます。
RCAジャックのフットプリントを今回修正していますが問題無くピッタリ入りました^^
Simple8Vdpsg基板(トップ面) |
|
下の写真がボトム面になります。修正箇所の反映が一カ所漏れていたのでジャンパー線が1本発生してしまいましたorz
今後のこともあるので再発防止策も検討しておきたいと思います。
今回は目立たないようにジャンパー線の色を基板の色に合わせました。
Simple8Vdpsg基板(ボトム面) |
|
13個のDIP ICで構成される自作のオリジナルCPU(Simple8Z)と連結した状態が下の写真です。
CPUボード(Simple8Z)とサブボード(Simple8Vdpsg)の連結 |
|
部品実装が終って試験プログラムを動かしてみるとVDP(TMS9918)の表示のみならずPSG(AY-3-8910)も動作しませんorz
PSG側は回路図の机上確認でPSGのA9/ピンをGND接続に変更するという修正が漏れていたことに気が付き、ボトム面の写真のように基板を修正して動作するようになりました。
VDP側は表示が不安定な状態で下の写真のような表示になってしまいます。
NG状態の画面表示例 |
|
参考に画面表示が安定した際の表示例も貼っておきます。
参考)安定動作時の画面表示例 |
|
表示するテキストコードはVRAMに概ね書けていますが、キャラクタの表示色を指定するカラーテーブルがうまく設定できていないような状態に見えます。
カラーテーブルをモニタのOUT命令を使って設定するとうまく表示するようになったりするのでDRAMへの書込み動作が不安定な状態のようです。
カラーテーブル設定時のDRAMのRAS/,CAS/,WE/等の信号をざっと確認して見ると下図のような状態で想定通りのように見えます。
DRAMライト時のタイミング(NG時) ロジアナサンプリング:40MHz |
|
NG原因が判らないのでDRAM(uPD41464-10)のライトサイクルの各タイミングが規格を満たしているか測定した結果が下図になります。
図中の青色文字が規格値(アクセスタイム100nsの場合)で茶色と赤色の文字が測定値です。ロジアナのサンプリングは40MHzなので時間分解能は25nsになります。
DRAMライトサイクルのタイミング確認結果 |
|
2ヶ所ある赤色の星マーク部が規格を満たしていない箇所です。
tRCDは最大50nsとなっていますがデータシートに注意書きがあり、この値はアクセスタイム100nsを保証する場合の値であり、この値よりも大きい場合、アクセスタイムはtCAC(Access time from CAS/)に依存すると書かれています。tCACは最大50nsなので今回の場合は問題ありません。
もう一つのNG箇所であるtRWLは純粋に規格を満たしていないので、これが原因で不安定な表示になっているものと推測されます。
対処するにはRAS/信号を遅らせるかWE/信号を早める必要があります。後者の対処をすることにし、もともとHCT245の遅延時間対応のために付けていたWE/信号を遅延する部分が過剰だったのでCRの遅延を無くすためにC12を取り外して動作確認したところ表示が安定するようになりました(図中のMWR/信号はVDPから出力されるR/W信号です)
tRCDタイミングの修正箇所 |
|
★追記 2021/09/16 {
上図の回路変更でR3も削除するように書いていましたが、実際にR3をショート状態にしたところ画面表示が不安定になったのでR3は残すように変更しました。パターン上はC12のみ削除するようにしたいと思います。
尚、下図のロジアナでの測定時はR3がある状態で測定しています。
}
安定動作時のDRAMライトタイミング図も貼っておきます。tRWLは50nsになり、規格を満たすようになりました。
DRAMライト時のタイミング(OK時) ロジアナサンプリング:40MHz |
|
★追記 2021/09/15
ハードディバッグ時の写真を貼っておきます。
フッククリップは高級品の方が使い易そうなのですが結構高いので安価なものを使っています。
ラジオペンチで先端のピンを整形しながら使っています。
周りの状況はあまりにも混沌としているので写せませんw
ハードディバッグ時の状況 |
|
★追記 2021/09/21
タイミング調整可能なようにC12のパターンは残すこととし、修正版をVer0.03としてALLPCBさんの太っ腹クーポンを使って9/20に製造依頼しました。
Vdpsg基板の修正 |
|
★追記 2021/09/25
今回はALLPCBさんに9/20に製造依頼してなんと9/25の朝に届きました。
パッケージに書いてあるように SO QUICK です^^
今回も6枚入っていました。
早々に届いたプリント基板 |
|
★追記 2021/09/27
製造と配達の工程記録を貼っておきます。
No. | Process | Time(GMT+8) |
---|---|---|
1 | Cutting | 2021-09-20 T21:30 |
2 | First Drilling | 2021-09-20 T21:46 |
3 | Copper Plating | 2021-09-21 T01:25 |
4 | Panel Plating | 2021-09-21 T03:09 |
5 | Dry Film Coating | 2021-09-21 T05:01 |
6 | Circuit Inspection | 2021-09-21 T05:49 |
7 | Etching | 2021-09-21 T05:49 |
8 | Etching Inspection | 2021-09-21 T05:59 |
9 | Solder Mask | 2021-09-21 T05:59 |
10 | Solder Mask Positioning | 2021-09-22 T09:20 |
11 | Solder Mask Positioning Inspection | 2021-09-22 T11:27 |
12 | Silk Screen | 2021-09-22 T11:28 |
13 | Surface Finishing | 2021-09-22 T15:14 |
14 | Testing | 2021-09-22 T16:09 |
15 | Profiling | 2021-09-22 T20:22 |
16 | FQC | 2021-09-22 T21:52 |
17 | Final Inspection | 2021-09-22 T21:52 |
18 | Packing | 2021-09-23 T00:43 |
Time Operation 2021-09-23 12:00:00 Shipment picked up 2021-09-23 15:41:00 Processed at ZHEJIANG PROVINCE-CHN 2021-09-23 16:19:00 Departed Facility in ZHEJIANG PROVINCE-CHN 2021-09-23 16:30:30 Clearance processing complete at EAST CHINA AREA-CHN 2021-09-23 19:10:00 Arrived at Sort Facility EAST CHINA AREA-CHN 2021-09-24 01:20:00 Processed at EAST CHINA AREA-CHN 2021-09-24 01:44:00 Departed Facility in EAST CHINA AREA-CHN 2021-09-24 09:59:00 Transferred through NARITA-JPN 2021-09-24 10:06:02 Customs status updated 2021-09-24 11:59:00 Clearance processing complete at TOKYO-JPN 2021-09-24 13:10:00 Processed at TOKYO-JPN 2021-09-24 13:32:00 Departed Facility in TOKYO-JPN 2021-09-24 14:19:00 Arrived at Delivery Facility in YOKOHAMA-JPN 2021-09-24 16:01:00 Forwarded for delivery 2021-09-25 07:06:00 Forwarded for delivery 2021-09-25 09:40:00 Delivered - Signed for by
[TOP] [ 前へ ] 連載記事 [ 次へ ]
SuperSimpleController(その23)VDPSG基板の改版 [OriginalCPU]
前回の記事で自作CPUボード(Simple8Z)用に作成したサブボード(Simple8Vdpsg)でPSG(AY-3-8910)を使った自動演奏について書きましたが、Simple8Vdpsgボードがうまく動いているようなので回路図に修正部分を反映して整理しました。
自分のためのメモの意味も込めて整理後の回路図などの情報を記録しておきたいと思います。
初版の回路図は「SuperSimpleController(その17)TMS9918Aの接続 その2」の記事に書いていますが、今回は下記の変更を行っています。
4項は初耳(初目?)だと思いますが、PSGはポート毎に入力/出力の設定ができるのでA/Bの両ポート共にコネクタに出力するようにしました。
下図が修正した回路図になります。制御のためのコネクタ部はSIMPLE8というバスに準拠しており、Z-80等のCPUでも簡単に繋がるはずです。
★変更 2021/09/18 Ver0.03 VDPのA9/端子をGNDに接続(修正反映漏れ^^;),C12:100pF->0pF
回路図の変更に伴いパターン図もアップデートしました。
グランドベタ化後のトップ面とボトム面のパターン図が下図になります。
3Ⅾ表示した図も貼っておきます。
また、今回は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で設計しています)
上記の設定値と価格との関連は未確認ですが、今回は下図の最初の行の「Order Now」ボタンを押すことで、クーポンを使った只の注文ができました。
Order Time:2021/8/28 23:17:33 で現在(8/29 14:00)のステータスは Allpcb auditing(ALLPCBで監査中)です。
出荷予定日は Estimated Shipping Time:2021/09/01 となっています。
★追記 2021/09/22
製造依頼したプリント基板は9/4に届きました。ALLPCBさんでは毎月送料込みでの無料クーポンが発行されるようで9月分も発行されました。
また、ALLPCBさんのサイトで今回のプリント基板製造工程の時刻が結構詳しく確認できたので貼っておきます。
★追記 2021/09/23
DHLでの配達記録も参考に貼っておきます。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
自分のためのメモの意味も込めて整理後の回路図などの情報を記録しておきたいと思います。
初版の回路図は「SuperSimpleController(その17)TMS9918Aの接続 その2」の記事に書いていますが、今回は下記の変更を行っています。
- RCAジャックのフットプリントの変更
- DRAMのOE/タイミングの調整
- PSGの制御信号の見直し
- PSGのBポートのコネクタ出力
4項は初耳(初目?)だと思いますが、PSGはポート毎に入力/出力の設定ができるのでA/Bの両ポート共にコネクタに出力するようにしました。
下図が修正した回路図になります。制御のためのコネクタ部はSIMPLE8というバスに準拠しており、Z-80等のCPUでも簡単に繋がるはずです。
修正後のSimple8Vdpsgの回路図 |
|
回路図の変更に伴いパターン図もアップデートしました。
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での注文形態選択一覧 |
|
★追記 2021/09/22
製造依頼したプリント基板は9/4に届きました。ALLPCBさんでは毎月送料込みでの無料クーポンが発行されるようで9月分も発行されました。
また、ALLPCBさんのサイトで今回のプリント基板製造工程の時刻が結構詳しく確認できたので貼っておきます。
No. | Process | Time(GMT+8) |
---|---|---|
1 | Cutting | 2021-08-30 T11:22 |
2 | First Drilling | 2021-08-30 T12:50 |
3 | Copper Plating | 2021-08-30 T18:41 |
4 | Panel Plating | 2021-08-30 T22:53 |
5 | Dry Film Coating | 2021-08-30 T23:30 |
6 | Circuit Inspection | 2021-08-31 T00:59 |
7 | Etching | 2021-08-31 T00:59 |
8 | Etching Inspection | 2021-08-31 T01:07 |
9 | Solder Mask | 2021-08-31 T01:08 |
10 | Solder Mask Positioning | 2021-08-31 T02:13 |
11 | Solder Mask Positioning Inspection | 2021-08-31 T03:35 |
12 | Silk Screen | 2021-08-31 T03:36 |
13 | Surface Finishing | 2021-08-31 T07:10 |
14 | Testing | 2021-08-31 T08:43 |
15 | Profiling | 2021-08-31 T10:45 |
16 | FQC | 2021-08-31 T13:07 |
17 | Final Inspection | 2021-08-31 T13:14 |
18 | Packing | 2021-08-31 T17:00 |
★追記 2021/09/23
DHLでの配達記録も参考に貼っておきます。
Time Operation 2021-09-01 13:34:00 Shipment picked up 2021-09-01 16:58:00 Processed at ZHEJIANG PROVINCE-CHN 2021-09-01 17:12:00 Departed Facility in ZHEJIANG PROVINCE-CHN 2021-09-01 17:19:04 Clearance processing complete at EAST CHINA AREA-CHN 2021-09-01 19:51:00 Arrived at Sort Facility EAST CHINA AREA-CHN 2021-09-02 00:27:00 Processed at EAST CHINA AREA-CHN 2021-09-02 01:22:00 Departed Facility in EAST CHINA AREA-CHN 2021-09-02 04:10:02 Customs status updated 2021-09-02 18:30:06 Customs status updated 2021-09-03 11:24:00 Arrived at Sort Facility TOKYO-JPN 2021-09-03 12:27:00 Clearance processing complete at TOKYO-JPN 2021-09-03 13:31:00 Processed at TOKYO-JPN 2021-09-03 13:33:00 Departed Facility in TOKYO-JPN 2021-09-03 14:12:00 Arrived at Delivery Facility in YOKOHAMA-JPN 2021-09-03 14:47:00 Forwarded for delivery 2021-09-04 07:15:00 Forwarded for delivery 2021-09-04 10:08:00 Delivered - Signed for by
[TOP] [ 前へ ] 連載記事 [ 次へ ]
SuperSimpleController(その22)PSG(AY-3-8910A)の動作確認 その2 [OriginalCPU]
前回の記事でオリジナルCPU(Simple8Z)基板用に作成したサブボード(Simple8VDPSG)に実装したPSG(AY-3-8910)機能のハードディバッグ状況について書いたようにPSGが動くようになったので、今回はPSGを使って遊んでみた内容について書いてみます。
PSG内のレジスタ構成は下表(マイクロチップ社のデータシートからの抜粋)のようになっています。レジスタ番号は8進数の表記でなので10進表記だとR0~R15の16個のレジスタがあります。
PSGのClock端子にはMSXと同様にVDPのCPUCLK出力(3.579545MHz)を2分周したもの(1.7897725MHz)を入れています。ロジアナで確認したクロック波形が下図になります。
PSG内で更に16分周した信号を各チャンネルの音程分周比レジスタ(R0~R5)に設定された値で分周した信号がトーン信号として出力されます。
従って各音階を出力する場合のPSGの音程分周比は下表のようになります。
表中の青色部分が4オクターブのラの音(440Hz)で、この値から指数演算(半音分が1/12乗)して下表の値を算出しています。ある行の次の行が1オクターブ高い(2倍の周波数)行になりますが、右シフト(x0.5)した値が下の行の値と一致しない場合があるのは小数点部分を四捨五入している為です。
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] [ 前へ ] 連載記事 [ 次へ ]
PSG内のレジスタ構成は下表(マイクロチップ社のデータシートからの抜粋)のようになっています。レジスタ番号は8進数の表記でなので10進表記だとR0~R15の16個のレジスタがあります。
PSG register |
|
PSGのClock端子にはMSXと同様にVDPのCPUCLK出力(3.579545MHz)を2分周したもの(1.7897725MHz)を入れています。ロジアナで確認したクロック波形が下図になります。
PSGのクロック波形 サンプリング:100MHz |
|
PSG内で更に16分周した信号を各チャンネルの音程分周比レジスタ(R0~R5)に設定された値で分周した信号がトーン信号として出力されます。
従って各音階を出力する場合のPSGの音程分周比は下表のようになります。
表中の青色部分が4オクターブのラの音(440Hz)で、この値から指数演算(半音分が1/12乗)して下表の値を算出しています。ある行の次の行が1オクターブ高い(2倍の周波数)行になりますが、右シフト(x0.5)した値が下の行の値と一致しない場合があるのは小数点部分を四捨五入している為です。
oct | ド | ド# | レ | レ# | ミ | ファ | ファ# | ソ | ソ# | ラ | ラ# | シ |
---|---|---|---|---|---|---|---|---|---|---|---|---|
C | C# | D | D# | E | F | F# | G | G# | A | A# | B | |
1 | 0D5C | 0C9D | 0BE7 | 0B3C | 0A9B | 0A02 | 0973 | 08EB | 086B | 07F2 | 0780 | 0714 |
2 | 06AE | 064E | 05F4 | 059E | 054D | 0501 | 04B9 | 0475 | 0435 | 03F9 | 03C0 | 038A |
3 | 0357 | 0327 | 02FA | 02CF | 02A7 | 0281 | 025D | 023B | 021B | 01FC | 01E0 | 01C5 |
4 | 01AC | 0194 | 017D | 0168 | 0153 | 0140 | 012E | 011D | 010D | 00FE | 00F0 | 00E2 |
5 | 00D6 | 00CA | 00BE | 00B4 | 00AA | 00A0 | 0097 | 008F | 0087 | 007F | 0078 | 0071 |
6 | 006B | 0065 | 005F | 005A | 0055 | 0050 | 004C | 0047 | 0043 | 0040 | 003C | 0039 |
Web上でPSGをエミュレートしているPSG Padというサイトがあり、PSGが動作するハードウェアが無くても気軽に動作を確認することができます。
音階データの一覧表ができたので簡単な自動演奏をしてみたいと思います。
ネット上には著作権の関係で楽譜のデータはあまりないのですが簡単移調楽譜屋というサイトでありがたいことに著作権が消滅した民謡・童謡・クラシック等の楽曲の楽譜を入手できます。その中にサイモンとガーファンクルで有名なスカボロフェアがあったので楽譜を入手しました。この曲は意外なことにイングランド民謡だったんですね。
PSGで自動演奏しようとする際にエンベロープパターンを使ってピアノ音のようにしようと思ったのですが、エンベロープパターンは各チャンネル独立ではなく、1パターンを3チェンネルで共有しているので上手くいきません・・
例えば、主旋律が無音時に対旋律を鳴らすと主旋律も鳴ってしまうのです^^;。
そこで各トーンの音量をソフトで制御することにして、各チャンネルを独立したエンベロープで鳴らせるようにしました。
今回の自作CPUにはタイマー割込み等は無いので音符長の処理内でエンベロープも処理するようにしています。
各チャンネルで独立したエンベロープ処理ができれば、あとは音階データをPSGに流すだけで簡単に自動演奏ができます。
スカボロフェアの演奏例を貼っておきます。今回作成したエンベロープ処理では初期音量も変更でき、この演奏例では主旋律と対旋律をそれぞれ二通りの音量(合計4種類)で制御しています。
再生できない場合、ダウンロードは🎵こちら
★追記 2021/08/25
動画付きでtwitterに投稿したメッセージを貼っておきます。
手持ちの小型LCDモニタでは色ずれしないのにNTSC信号をキャプチャしてパソコン画面に表示すると結構色ずれしてますね・・
中華製の超安かったキャプチャだからかなぁ~
13個のDIP ICを使ったオリジナル8bit CPUを検討中
— skyriver (@wcinp) August 25, 2021
サブ基板に実装したPSGが動いたので自動演奏して遊んでみた
著作権が消滅したイングランド民謡であるスカボロフェア(なんと意外ですね)を演奏してみたよhttps://t.co/8kJ08CzbO9#Simple8Z #VDPSG #AY38910 #OriginalCPU #自作CPU pic.twitter.com/Vu1ehlyuBt
★追記 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] [ 前へ ] 連載記事 [ 次へ ]
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のBDIRとBC1に接続しています。
BC2にはA0を接続していてどうにかなるだろうと思っていました(マニュアルをじっくり見ての検討をしていなかった^^;)
PSGのバスコントロールは下表のように柔軟な設計になっていて(かえって紛らわしい)赤枠で囲んだ状態を使用して制御しようと思いました。
具体的なI/Oアドレスと制御方法は下表のような想定です。
しかし、プリント基板の電源を入れてモニタでPSGのレジスタ設定しても全く動きません(設定したレジスタ値も読めません)^^;
PSGへのクロックやコントロール信号は想定した通りに出ています・・・
データシートをまじめに見て確認した結果、2つの問題があることが判りました。
【問題点と対策】
【プリント基板の改造】
上記内容で改造したプリント基板の写真を貼っておきます。
最初に改造後のプリント基板のトップ面です。PSGはなんとGI社製です。最初はAliExpressさんから購入した超安価@65円(送料別)を使っていましたが、動かなかったので40年程前に作った基板から抜き取り差し換えています。
上記の改造後はAliExpressさんから購入したマイクロチップ社製のもの(本物かどうかは疑わしい)でも動作しました。
未使用のゲートの入力ピンは両面でベタグランドにサーマルパッドで4点接続されているのでICのピンを折り曲げて丸ピンソケットで接続しています。
改造後のVDPSG基板のボトム面が下の写真です。今回はPSG部分をブレッドボードで確認せずにプリント基板にしたので結構ジャンパー線が飛び交っています。
PSGRD/とPSGWR/を反転して正論理にする際に、未使用のインバータ(HCT04)が1個しかなかったのでDRAMのリード信号のタイミング調整用に使っていた2個のインバータを未使用のアンドゲート(HC32)と入れ替えたことがジャンパー線が多くなった要因の一つです。
上記のGI社製PSGを抜き取った基板もおまけに貼っておきます。
抜き取ったGI社製PSG(40年程前に亜土電子で購入したもの)の写真も貼っておきます。
AliExpressさんから購入した格安PSGの写真も・・・
[TOP] [ 前へ ] 連載記事 [ 次へ ]
このPSGはVDPSG基板を10cmx10cmにした場合、空きスペースが生じるので急遽付け足した機能で、ブレッドボード上での動作は未確認な状態でプリント基板化しています。
PSGのA9/にはHC138からのPSGSEL/(PSGセレクト信号)を入れて、CPU基板からのRD/、WR/信号をPSGSEL/とANDしてPSGのBDIRとBC1に接続しています。
BC2にはA0を接続していてどうにかなるだろうと思っていました(マニュアルをじっくり見ての検討をしていなかった^^;)
BDIR | BC2 | BC1 |
---|---|---|
PSGRD/ | A0 | PSGWR/ |
PSGのバスコントロールは下表のように柔軟な設計になっていて(かえって紛らわしい)赤枠で囲んだ状態を使用して制御しようと思いました。
PSG Bus Control Function Table |
|
具体的なI/Oアドレスと制御方法は下表のような想定です。
No. | address | RD/WR | Function |
---|---|---|---|
1 | 21H | Read | read from PSG |
2 | 20H | Write | latch address |
3 | 21H | Write | write to PSG |
しかし、プリント基板の電源を入れてモニタでPSGのレジスタ設定しても全く動きません(設定したレジスタ値も読めません)^^;
PSGへのクロックやコントロール信号は想定した通りに出ています・・・
データシートをまじめに見て確認した結果、2つの問題があることが判りました。
【問題点と対策】
- コントロール信号
上記の「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. BDIR BC2 BC1 Function 1 0 0 0 INACTIVE 2 0 1 0 INACTIVE 3 1 0 1 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. BDIR BC2 BC1 Function 1 0 1 1 read from PSG 2 1 1 0 write to PSG 3 0 0 1 latch address 4 1 0 0 latch address 5 1 1 1 latch address
結果としてPSGへのコントロール信号の接続は
BDIR BC2 BC1 PSGWR A0 PSGRD
となり、具体的なI/Oアドレスと制御方法は冒頭に書いたものと同様で下表のようになります。
No. address RD/WR Function 1 21H Read read from PSG 2 20H Write latch address 3 21H Write write to PSG
- 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] [ 前へ ] 連載記事 [ 次へ ]