標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第528回]

●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に進みます。

2010.6.18upload

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