EPG4のLab.

KL5C8400 DIP40変換ボードの製作 (3)

2024-11-20 04:23:56
2024-11-24 10:30:02
目次

今回はDIP40変換ボードの最初のバージョンの製作です。

手元にCPUは1つしかなく、/RFSH信号のロジックもまだ改良の余地または修正が必要だろうことから取り外せるDIPタイプのGALを使っています。慎重にw DIP40サイズの基板には収まらないので2段重ねにすることにしました。

KiCADで作成
QFP44 から DIP40に変換します。対応するピン番号をデータシートで確認して線をつなぐ作業。その際に/M1 , CLK , 5V , GND , /RFSH, /MREQ をピンヘッダで取り出せるようにしました。このピンヘッダに2段目の基板を挿します。 /RFSHはDIP40側の28PINにのみ接続しています。またQFP44側の25PIN(オリジナルのZ80では/RFSH信号)はCNFGピンとなっていてKC80モードかZ80モードを選択するピンになっています。今回はZ80モードのみを使用するのですが、念のため切り替えられるようにしました。

KiCADでレンダリングした最初の変換基板の図

プリント基板が出来上がったところ。当時1つしか持っていないCPUのはんだ付け、手が震えます。はやく見つけて追加購入したいところでした。

CPUをはんだ付けして完成した最初の変換基板

二階建て部分は基板を発注せずに手作業で作成しました。ソケットにGAL(ATF16V8)を挿します。書き換えたい時にはいったん外してライターにセットして書き込みます。写真の下段はDIP40変換ボードに挿してみたところ。

変換基板の上に差し込むRFSH信号生成回路基板の写真

いよいよ動作テストです。手元にある既存のZ80システム(DIP40のZ80仕様採用)としてはYAMAHA CX11(MSX)それとSONY HB-F1XV(MSX2+)があります。しかしいずれもソケット化していませんでした。XVのほうはソケット化する自信がないのでCX11を使うことにしますが、いきなり刺して壊したらいやなので、まずはテスト用の環境を作ることにしました。

そしてできたのがこちらのブレッドボードです。KUNINETさんの2018年のZ80の記事を参考にしました。メモリをつけないでデータ線をすべてGNDに接続するとCPUから見るとどのアドレスにアクセスしても常に00Hが読み込まれる状態になります。つまりZ80はずっとNOP命令を実行し続ける動作になります。
クロックはNE555で作成し、目視可能な速度ということで1.2Hzほどの速度設定です。アドレス線はLEDアレイに接続してカウントアップしていく様子がわかるように、またリフレッシュの際にアドレス信号(下位7ビット分)が出力されているかを確認するのに使用します。その右の3つのLEDは/RFSH, /M1, /RDのLEDです。

Z80のテスト用ブレッドボード回路。刺さっているのはZilogのZ84C0020

まずはオリジナルのZ80 CMOS版(クロックが低くても動く)ということでZ84C0020を指しています。
しかし電源を入れてみると・・・動かないw配線を何度もチェックしましたが、わからずオシロスコープのプローブを当てて確認してみたところ、リセット回路を間違えていて常にリセットボタン押し続けているかのような状況となっていました。これを修正することで動作し始めました。

調べている間、Z80のクロック入力は高い電圧を要求する[リンク1][リンク2]ということを教えていただきました。Vcc-0.6V以上とのことで5Vの場合4.4V以上必要です。これについては測定してみた結果4.6V出ていたので足りているという結論になりました。しかしこれ、もしここが原因であったとしたら、教えていただいてなかったら原因わかるのにかなりの時間がかかっていたと思いますし、その後のZ80を使った回路の製作時にいつか引掛かっていたと思います。

いよいよKL5C8400です。結論としては無事動いたのですが、はじめ電源を入れてリセットを押しても動作する様子がなく焦りました。しかし、どうやらオリジナルのZ80に比べてリセット後、動作を開始するまで少し時間がかかるようで。目視で12クロックほど、いま1.2Hzですので10秒くらいしてから動作を開始するという具合でした。通常は3.58MHzとかもっと高速に動かすので全く問題ないと思います。

KL5C8400Cを使ってブレッドボード上で動作確認

Xに貼った動いている動画

KL5C8400でリフレッシュアドレスが出ているのが確認できた時の写真です。メモリ内容00hでしばらくNOPを実行させ続けた時の物になります。左の画像を見るとアドレスのLED(10bit分)は1100010100b(=314h)で/M1と/RDがアクティブです。命令(00h)を読み込むタイミングです。そしてその直後が右。/M1と/RDともに非アクティブになり、/RFSH回路がないため赤いLEDは点灯していませんがRFSHのタイミングです。この時リフレッシュアドレスは下位7bit分の0010100(=14h)が出力されています。

KL5C8400でリフレッシュアドレスが出ているのが確認できる画像

二階建て基板を取り付けたところ。こちらでも動作を確認できました。といってもこのテストボードでは/RFSHのLEDをつける回路みたいなものでKL5C8400の動作に影響がないことが確認できたというところです。

RFSH回路を乗せたブレッドボード

ロジアナを持っていないのでオシロスコープで信号を確認、比較してみました。

まずはZilogのZ84C0020です。4chしかないので見たい信号だけチェックしています。/M1がLOWの時に/RDがLOWに、そしてHIGHになっています。この時メモリから読み込んでいます。00Hが読み込まれます。/M1がHighになるとほぼ同時に/RFSHがLOWになり2クロック分のちにLOWとなりました。
これでM1サイクルのT4まで終わり。00Hは1バイト命令のNOPなので次のクロックからは新しいM1サイクルが始まる。という感じです。

ZilogZ84C0020での信号確認

こちらはKL5C8400です。/M1がLOWの間に/RDがLOW->HIGHと動作しているところはZ84C0020と一緒です。ですが/RFSHが出ていないことが確認できました。しかし・・/RDではなく/MREQのほうを見ればよかったかも。/MREQを見ていたら/M1がHIGHになったあとにもう一度/MREQがLOWになりHIGHになるのが確認できたと思います。

KL5C8400Cでの信号確認

最後に大本命の/RFSH回路をつけた場合の信号です。Z84C0020と同じように信号が出ているのが確認できました。これは成功したのでは?とガッツポーズ。MSXに挿してみたくなる気持ちが逸ります。

KL5C8400CにRFSH回路を合わせた信号確認

前回も書きましたがこの波形を見ると/RFSHは/M1の反転でいいんじゃないか?と思えるかもしれません。しかしこれはM1サイクルが連続する波形なので毎サイクル/M1がLOWになっているだけです。反転動作にするとM1サイクルではない時に/RFSHがHIGHであるべきところ、LOWになってしまいます。

これも実験してみようと思います。2バイト命令で同じバイトが続いても問題はなさそうなものを探してみた結果、3Ehまたは18hを設定すると目的が果たせそうです。

3Ehの場合は LD A, 3Eh (1バイト目オペコード3Ehで2バイト目はAレジスタに代入する値3Eh)
18hの場合は JR 1Ah (1バイト目オペコード18hで2バイト目は相対ジャンプの値18hです。ジャンプした先でも18Hが読み込まれる)

ここでは18hを設定した場合を見てみます。まずはZilog Z84C0020を5Hzで動かした場合の波形です。まずはクロック。ちょっと間隔が狭くて数えにくいですが、M1サイクルの開始から次の開始までのクロック数がわかるような範囲でキャプチャしました。18hつまりJR eの命令を実行するのに12クロックかかっています。データシート通りです。/RFSHは/M1の直後にあり、/RFSHがアクティブな間に/MREQがアクティブになっていることが確認できます。また、2バイト目の相対ジャンプのとび先としての値18hを読み込むときはM1サイクルではないので/M1はアクティブにならないことが確認できます。この時/RFSHもアクティブになっていません。

Zilog Z84C0020 5Hz動作時、メモリは18Hをセットした時の波形。ニーモニックでJR eを実行している。M1サイクル開始の間隔を見ると12clockかかっている。

次にKawasaki KL5C8400を5Hzで動かした場合の波形を見てみます。はじめは気が付いていなかったのですが、よく数えるとこちらは10クロックで実行しています。ZilogのZ80に比べ2クロック速く実行しています!ちなみに短くなっているのは2バイト目を読み込んだ後から次のM1サイクルが始まるまでの間に見えます。他の部分の波形はZilogの物と同じタイミングに見えます。

Kawasaki KL5C8400 5Hz動作時、メモリは18Hをセットした時の波形。ニーモニックでJR eを実行している。M1サイクル開始の間隔を見ると10clockかかっている。

この2バイト命令 JR eの波形比較でKL5C8400のほうが2クロックだけ速く実行されることが確認できました。激的に速いわけではないのですが、同一クロックでも動作が速いということの片鱗が見えた気がします。すべての命令で速いわけではない(少なくともNOP命令は変わらない)ので速く実行できる命令をどれだけ使えるかによって同一クロック動作での比較でどれくらい速くなるのか変わってくるという感じです。

ところでこのブレッドボード、オシロスコープで波形を確認したりテスト動作をさせるのに便利そうです。ブレッドボードのままではいずればらばらになったり配線を壊したりするので基板にしておいてもよさそうです。次回これについて書こうと思います。

この記事を書いた人

EpicGadgets4