2021-10-11 23:16 — asano
カテゴリー:
TMPZ84C015にはA7RFという出力があって、リフレッシュアドレスが8ビットになっているのですが、そうなるとR
レジスタの動きはどうなるのだろうという疑問が出てきます。ならば現物で確認するのが一番、というわけでAKI-80を引っ張り出して動かしてみることにしました。
いずれEMILY Boardにつなげてみたいということでそれを意識した配置にしています。
でもまずは上記の疑問を解決したいということで最低限の配線しかしていません。
- 電源はAKI-80から直接引き出してφ2.1のDCジャックを付けました。
- CTCのCh.0をボーレートジェネレータにするためにZC/T0をRXCA, TXCA, RXCB, TXCBに接続しました。
- RXDA, TXDA, RXDB, TXDBをTTL-232R用のコネクタに引き出しました。
AKI-80はコネクタも取り付けられた状態で出てきたものでそのまま使えると思ったのですが、CTCの分周比を計算するために水晶の周波数を確認しようとしたところ何と欠品していました。ROMの容量を決めるジャンパも未搭載でした。
どうも用途に応じて変更する可能性のある箇所を後回しにしていたようです。
CPUとRAMはTMPZ84C015BF-12, CXK58257AM-70Lが載っているのでゴールドの12MHz版キットと思われます。24,576MHzの水晶を載せて12.288MHz動作ができますが、以下の理由で19.6608MHz水晶を載せました。
- 12.288MHz動作で70nsのRAMだとRAMから命令フェッチできない
- 19.6608MHz水晶なら手持ちがある
いつものようにUniversal Monitorの上でRAMにテストプログラム書いて試す予定なのでRAM上のプログラムを実行できないのは困ります。
ソフトウェアのほうはZ80SIO用のコンソールドライバにCTCの初期化を追加しただけで簡単に動作しました。
それでは本題のR
レジスタのテストです。
R
レジスタを0x78(ビット6から7への繰上がりの手前)にセットしNOP
の連続を実行して繰り上げさせ- ブレークポイントでとめて
R
レジスタの内容を確認する
多数のNOP
を実行させているのはモニタ内で繰上りが発生しないようにするためです。
R
レジスタをセットするような命令はないので、目的のアドレスに制御が移ったときに目的の値になるように補正して事前にセットしています。ブレークのときもブレークと同時に
R
レジスタの保存はできないので、後で保存した値からブレーク時にはいくつだったかを補正(逆算)して表示しています。これらの「補正」は既知のZ80の動作に基づいて行なっているので、ここで繰上りが発生するとTMPZ84C015の動作ではなく補正ルーチンの動作を見てしまいます。
もしR
レジスタが8ビットでカウントしているなら17ではなく97になるはずなのでカウントは7ビットでカウントしているようですね。他のパターンもいろいろ試してみましたがカウントは下7ビットのみでした。
Z80CPUのコアはそのままでA7RFはコア外にカウンタを追加したようですね。
もし動作が違っていたらTMPZ84C015の識別をして補正ルーチンも分岐させる必要が出てくるところでした。
コメントを追加