Dual-84 CPUボード

共立電子のネット通販にて売り切り終了 550円で投げられていた TMPZ84C015BFC-8 が実装されたボードです。クリスタルは 19.6608MHz システムクロックは 1/2 なので、9.8304MHz で動作するボードです。表面には CPU と ROM のソケットがあります。クロック周波数的には少しオーバークロックですかね。

裏面には SRAM CY62256NLL-70SNXC という SRAM が実装されていました。Z80のメモリアクセスのタイミング的には大丈夫かなと思います。

とりあえず BASIC が動けばいいやというところですが、ブレッドボードに貼り付けたかったので。ヘッダピンが下向きに出ているのを逆向きに付けなおしました。クロック周波数は RC2014 などで使われている 7.3738MHz(クリスタルは倍の 14.7456MHz) に交換しました。この周波数だと一応実装されているCPUの定格内なことと、シリアル通信でシステムクロックをSIOで 1/64 分周すれば CTC を使わずに 115.2kbps の速度が出せます。

CPUボードはブレッドボードに貼り付けボスを使って固定。シリアルインタフェースは秋月の FT232RL のモジュールを使用しました。これは6ピンソケットのシリアルインタフェースでもいけます。TXD/RXD と RTS/CTS をクロス接続しています。DTR/DCD 端子は使わないのですが、SIO の動作には必要なので自分自身で折り返し接続です。SIO のクロックはシステムクロックのピンから  7.3738MHz を供給します。9600bps などのボーレートで通信する場合は CTC の出力からクロックを供給します。(後で紹介するサンプルは 9600bpsの例をコーディングしています)

HALT 端子にLEDと電流制限抵抗を接続して HLAT したことが分かるように。

リセットボタンのタクトスイッチ、PIO A/B にTD62083 シンクドライバを接続し、その先にアノードコモンの8桁LED基板を接続しました。

電源スイッチは、FT232RL の USB ケーブル抜き差しが面倒だったので付けました。最近の Teraterm は USB が抜けてシリアルが切れても USB させば自動復旧するので、スイッチは必須ではないですかね。

開発環境は、VSCode に TASM_Assembler プラグインを入れただけです。このプラグインのディレクトリに TASM.EXE が入っています。面倒なので開発するフォルダに EXE と TAB ファイルをコピーして使っています。build.bat を作っておけば CTRL + SHIFT + B でビルドしてくれます。コマンドラインは

TASM -80 -fff -s D84CPU-CP-BASIC.asm D84CPU-CP-BASIC.hex

という感じで -80 はターゲットが Z80、-fff は空いた領域を 0xFF で埋める。-s はシンボルリストも作成する。後はソースファイル名とhexファイル名を build.bat に記述する感じです。

BASIC は http://searle.x10host.com/index.html Grant Searle さんが 移植したものです。レトロコンピューティングではスタンダードな BASIC です。

ただ、BASIC の入出力のシリアル通信はマシンごとに違うため各自用意する必要があります。オリジナルは 68B50 のシリアルチップなので流用できません。Z80 SIO用を書かねばなりません。AKI-80 用に公開されているものでいいのですが、ここは頑張って自分で用意しました。

クロックを CTC で分周し、SIOのボーレート 9600bps 版のソースは https://github.com/ngc6589/Z80Learning/blob/main/D84CPU-CP-BASIC.asm に置いてます。SIO は送受信ともステータスアフェクトベクタを使用した割り込み制御にし、Z80 の割り込みモードはモード2です。受信のハードフロー制御もいれてあるので、Teraterm からプログラムの貼り付けもTeratermのディレイ設定なしでいけてます。

今回は BASIC が動けばよかったのでこれ以上のことは予定なしですが、本来ならモニタROMを用意するのがいいかなと思います。手持ちにモニタROM付きボードなどもあるので、この CPU ボードは一旦ここまでということにします。