CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

シリアルテスト

基板上に最後に残ったシリアルコントローラAm85C30のテストをやってみます。これが動けばモニタも載せられソフトデバッグも容易になります。

問題はこのデバイスが非常に高機能のうえ設定も柔軟でプログラミングがかなり必要そうなことです。今回は(というかいつも)非同期調歩式というごく限られた機能しか使わないのですが、それでも設定一つ間違うと全く動かないわけで使用事例がないか探していました。

結局本家AMDが発行した1992_Am8530H/Am85C30 Technical Manualが最も正確な訳でこれに拠ってプログラミングしてみます。

まず、最初にも戸惑ったのですが転送クロックのソースが自由に選ぶことができ、クロックマルチプレクサはこのマニュアルでは以下のように詳しく説明されています。

f:id:O3I:20201208091308j:plain

システムクロックPCLK、転送クロック入力、内部ボーレートジェネレータ、内部DPLL、外付け水晶をそれぞれ送受信の転送クロックにパッチングできるのでその設定は必須です。

マニュアルに8086系システムでのプログラミング例が載っていたのでそれを基に初期化ルーチンを作ってみました。ハード的にはチャンネルA、チャンネルBにそれぞれコントロールレジスタとデータレジスタの計4個しかレジスタが見えませんが、コントロールレジスタの一部がポインタになっており内部的には書込みレジスタ16個、読出しレジスタ11個もある複雑さでZ80-SIOuPD7201/72001Aと似ています。

f:id:O3I:20201208091335j:plain

プログラムするコマンド列は18バイトにもなります。

f:id:O3I:20201208091359j:plain

ここでちょっと危なかったのはボーレートジェネレータに設定する分周比で、計算式は以下になるのですが、

f:id:O3I:20201208095057j:plain

CPUに与えたクロック14.7456MHzでCPU内部で2分周して出力されるのは7.3728MHz。これを74HC74がさらに2分周してAm85C30のPCLKに与えられるのは3.6864MHzまで下がってしまっています。これをMY設計標準のボーレート38400bps、受信同期させるために最低限必要なクロックモード×16を代入するとTimeConstantは1。もう下がありませんでした。内部DPLLを使うという手もあったかもしれませんが初期段階での設計が甘かったようです。74HC74は剥がしちゃってもいいかもしれません。