現在地

TMPZ84C015のRレジスタ


テーマ:

カテゴリー:

TMPZ84C015にはA7RFという出力があって、リフレッシュアドレスが8ビットになっているのですが、そうなるとRレジスタの動きはどうなるのだろうという疑問が出てきます。ならば現物で確認するのが一番、というわけでAKI-80を引っ張り出して動かしてみることにしました。


いずれEMILY Boardにつなげてみたいということでそれを意識した配置にしています。

でもまずは上記の疑問を解決したいということで最低限の配線しかしていません。

  1. 電源はAKI-80から直接引き出してφ2.1のDCジャックを付けました。
  2. CTCのCh.0をボーレートジェネレータにするためにZC/T0RXCA, TXCA, RXCB, TXCBに接続しました。
  3. 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レジスタのテストです。


やっていることは次のとおりです。

  1. Rレジスタを0x78(ビット6から7への繰上がりの手前)にセットし
  2. NOPの連続を実行して繰り上げさせ
  3. ブレークポイントでとめてRレジスタの内容を確認する

多数のNOPを実行させているのはモニタ内で繰上りが発生しないようにするためです。

G(o)コマンドでは目的のアドレスにジャンプすると同時にRレジスタをセットするような命令はないので、目的のアドレスに制御が移ったときに目的の値になるように補正して事前にセットしています。
ブレークのときもブレークと同時にRレジスタの保存はできないので、後で保存した値からブレーク時にはいくつだったかを補正(逆算)して表示しています。
これらの「補正」は既知のZ80の動作に基づいて行なっているので、ここで繰上りが発生するとTMPZ84C015の動作ではなく補正ルーチンの動作を見てしまいます。

もしRレジスタが8ビットでカウントしているなら17ではなく97になるはずなのでカウントは7ビットでカウントしているようですね。他のパターンもいろいろ試してみましたがカウントは下7ビットのみでした。

Z80CPUのコアはそのままでA7RFはコア外にカウンタを追加したようですね。

もし動作が違っていたらTMPZ84C015の識別をして補正ルーチンも分岐させる必要が出てくるところでした。

参考文献・関連図書: 
AKI-80ゴールドキット・AKI-80シルバーキット説明書, 秋月電子通商.
TMPZ84C015Aデータシート, Toshiba.

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 行と段落は自動的に折り返されます。
※ コメントは原則公開です。個別のご相談などは「ご意見・ご要望」からお願いします。