ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
当記事は2009年11月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 2011.6.30
前へ
次へ
目次へ戻る
ホームページトップへ戻る
☆USB接続 リモートプログラム
ND80ZVはその昔のTK80と同じ動作をします。CPUはZ80ですがTK80モニタプログラムとほとんど同じプログラムが搭載されています。
しかしそれだけではありません。ND80ZVにはTK80のイメージからは想像できないほどいろいろな機能を満載しています。
そのうちの1つがUSB接続です。
ND80ZVはボード上のPIC18F14K50のUSBインターフェースを介してUSBでWindowsパソコンと接続してデータの送受信を行なうことができます。
その機能の応用の1つとして、リモートプログラムを紹介します。

[第43回]

●USB(HID)応用 リモートプログラム(3)

今回もリモートプログラムの説明です。
TK80モニタでは、DIPスイッチをステップ側にして、プログラムをRUNさせると、命令をワンステップずつ実行します。
そしてそのときの各レジスタの値を7セグメントLEDに表示させることができます。
しかし8080に比べてレジスタの数が倍以上もあるZ80では、その方法でLEDにレジスタの値を表示させるのはなかなかに手間がかかります。
ND80Zモニタでは、7セグメントLEDに表示させる代わりに、プリンタに全レジスタの値を出力することができます。
そして前回も少し説明しましたように、今回のリモートプログラムでは、プリンタに出力するようになっていたレジスタダンプをUSBを経由して、DOSプロンプト画面に表示させることができます。



上の画面は、DIPスイッチをステップ側にして、アドレス8000からRUNさせたところです。
RUNのあとは C を入力するたびに1命令ずつ実行しながらそのときのレジスタの値を表示していきます。

レジスタの値を表示させて確認するだけでしたら、それで十分なのですが、デバッグや動作テストのために、レジスタの値を途中で強制的に書き換えておいて、続きを実行させてみたい、ということがあります。

そのような場合には、レジスタモードにします。
/r を入力するとレジスタモードになって、レジスタペアをひとつずつ表示します。
メモリアドレスの表示のときと同じように、[RD+][RD−][WR+]の操作が可能です。
画面では[AF]レジスタが表示されたあと、[RD+]でレジスタペアを順に表示させています。
レジスタ名の表示の後ろにある4桁の16進数は、そのレジスタペアの値が格納されているメモリアドレスです。
その次の4桁の16進数がレジスタペアの現在の値です。
上に表示されているレジスタダンプと比べてみてください。

レジスタモードの機能を試すための例として、[PC](プログラムカウンタ)の値を書き換えています。
アドレス800Cで止まっているのですが、それを8016に書き換えました。
ちゃんと書き換わったことを確認するために、[RD−]を入力しています。
確かに8016に書き換わっています。

このようにレジスタモードでは、[RD+][RD−]で順にレジスタを表示させていくことができますが、特定のレジスタを指定して表示させることもできます。
その操作例として、[PC]が表示されている状態で /a を入力しています。

/aは逆アセンブラでしたが、レジスタモードのときは、[AF]レジスタの表示機能としてはたらきます。
現在の[AF]の値はEA50ですが、それを0000に書き換えました。

あ。
[AF]の値は、EAがAレジスタで50がF(フラグ)レジスタです。
そのことは上に表示されてされているレジスタダンプで確認することができます。
なおフラグレジスタのビットごとの内容はレジスタダンプの右側部分に表示されています。
レジスタモードを終了して普通のキー操作に戻るには /0 と入力します。



レジスタモードを終了して、普通のキー操作に戻ってから、ステップ動作の続きを実行するために、 C を入力しました。
さきほどはアドレス800Cで止まっていたのですが、[PC]の値を変更してからステップ動作を再開したために、[PC]の値が飛んで8018になっています。
[AF]レジスタの値も009Bになっています。

このプログラムは前回逆アセンブラでその一部を表示いたしました。
もう一度、その画面コピーをお見せします。

アドレス8016の命令は、FE1E (CP 1E)です。
Aレジスタと即値1Eを比較する命令です。
Aレジスタはレジスタモードで00に書き換えました。
ですからここでは00−1Eの計算が行われて、フラグが変化します(CP命令ではフラグは変化しますが、Aレジスタは変化しません)。
S(サイン)フラグとC(キャリー)フラグがセットされました。
その次の命令は、D28380 (JP NC,$8083)です。
C(キャリー)フラグがセットされていなかったら、アドレス8083にジャンプせよ、という命令です。
C(キャリー)フラグがセットされてしまいましたから、 C を入力してステップを進めると、このJP命令は無視されて、その次のアドレス801Bに進みます。
CPUをつくろう!第528回(2010.6.18upload)を再編集

ワンボードマイコンをつくろう![第43回]
2011.6.30upload

前へ
次へ
目次へ戻る
ホームページトップへ戻る