ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
当記事は2009年11月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 2011.7.5
前へ
次へ
目次へ戻る
ホームページトップへ戻る
☆またもやトラブル発生
ND80ZVの説明書作業も大詰めを迎えて、あと一息で販売開始というところまできて、最後の動作確認をしていましたら、おかしなところが出て来てしまいました。

[第97回]

●ステップ動作で異常な表示が…

今回もまたまた想定外のトラブルに遭遇してしまったお話です。
お話がどんどん横道にそれてしまって、あいかわらず脱線続きで申し訳ありません。

リモート接続プログラムの説明書を書いておりまして。
ND80Zモニタプログラムのステップ動作を、リモート接続で行う、というところを、実際にやってみて、確認してみようとしたときのことです。

ここのところ、ND80ZVはUSBで、Windows7マシンに接続しています。
それで、いつものように、まずND80ZVの電源を入れて、それからコマンドプロンプトのリモート接続プログラムをスタートさせました。
これもいつもの手順で、ND80ZVをUSB接続モードにするために、[*(I/O)][8 VF]と操作しました。
これでND80ZVがリモート接続されて、Windows7マシンのキーボード入力で、ND80ZVをリモート操作できるようになります。

ここからが、実はあとから利いてくる、重要なポイントなのですが。
「そうだ、そうだ、ステップ動作の確認をするのだから、ディップスイッチをSTEP側にするんだった」
で、ディッブスイッチをそのようにいたしました。

「そうだった。その前に、8000番地からテストプログラムも書かなくちゃ」
RAMの8000番地からテストプログラムを書くために、まずはWindows7マシンのキーボードから、[8][0][0][0][.]と入力しようといたしました。
[.]はND80ZV側では[ADRSSET]のキー入力になります。

その最初の[8]を入力した途端に、異変は起きたのでありました。
いきなり、コマンドプロンプト画面に次のような表示が現れました。

logfile nd80zlog\09081145.txt open

ND80ZVに接続しました
0001 0000 - 8A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
7F50 05E9 FF00 FFF8 FFB6 0D6C 0000 0000 0000 0000 0000 0000 FF6E 01010000 00

一瞬、「うわあ、ND80ZVが暴走してしもうたあ」と思いました。
ま。たまには、そーいうこともあるのさ。
と、ここは無理に冷静を装いつつ。
「こーいうことは、忘れてしまうに限る」と、とりあえずは無難な対応をすることに決めました。
念の為に、[Enter]キーを押してみましたら、普通に応答するようです。いつもの[WR+]として働きました。

[WR+]
0D6D 50F7 - [RD+]
0D6E 00C5 - 8000[ADRSSET]

[+]キーを入力すると[RD+]として働きました。
どうやら大丈夫そうです。
それならばということで、もう一度、[8][0][0][0][.]と入力いたしました。[.]は[ADRSSET]として働きます。

今度は大丈夫のようです。

8000 003C - 3e[WR+]
8001 3EFF - 00[WR+]
8002 00C3 - 3c[WR+]
8003 3C00 - c3[WR+]
8004 C380 - 02[WR+]
8005 0221 - 80[WR+]
8006 8000 - /r

8000番地からテストプログラムを書きました。
8000番地でAレジスタに00をセットしたあとで、8002のINC A(コード3C)で、Aレジスタを+1して、8003のJP $8002(C3 02 80)で8002に戻って、それを繰り返すという簡単なプログラムです。
プログラムを書き終わったら、次はいよいよブレイクアドレスとブレイクカウンタの設定です。
[/][r]と入力するとレジスタモードになります。

*** REGISTER mode entry ***
[ AF ] FFEA 7F50 - ra
[ brA] FFF0 0000 - 8002[WR+]
[ brC] FFF2 0000 - 32[WR+]
[ AF ] FFEA 7F50 - [RD-]
[ brC] FFF2 0032 - [RD-]
[ brA] FFF0 8002 - /0

*** REGISTER mode end ***

[r][a]と入力すると、ブレイクアドレス[brA]がセレクトされます。
ブレイクアドレスとして8002をセットしました。
ブレイクアドレスをセットすると、次はブレイクカウンタ[brC]になります。
ブレイクするまでの繰り返し回数をセットします。
今回は50回(16進数の32)をセットしました。
念の為に[−]キーで、書き込んだ内容を確認しています。[−]キーは[RD−]として働きます。
レジスタモードを終了するには、[/][0](数字キーの0です)と入力します。

いよいよ実行です。
[8][0][0][0][.]と入力してから、[r]キーを入力しました。
[.]は[ADRSSET]、[r]は[RUN]キーとして働きます。

FFF0 8002 - 8000[ADRSSET]
8000 003E - r [RUN]

すると、あっという間にアドレス8002の命令が50回実行され、ブレイクして下のようなレジスタダンプリストが表示されました。

A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
3220 05E9 FF00 FFF8 FFB6 8003 0000 0000 0000 0000 0000 0000 FF44 00100000 00
n [CONT]
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
3220 05E9 FF00 FFF8 FFB6 8002 0000 0000 0000 0000 0000 0000 FF5F 00100000 00
n [CONT]
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
3320 05E9 FF00 FFF8 FFB6 8003 0000 0000 0000 0000 0000 0000 FF6F 00100000 00
n [CONT]
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
3320 05E9 FF00 FFF8 FFB6 8002 0000 0000 0000 0000 0000 0000 FF38 00100000 00
n [CONT]
A F  B C  D E  H L   SP   PC   IX   IY  A'F' B'C' D'E' H'L' I R  SZ H PNC BRC
3420 05E9 FF00 FFF8 FFB6 8003 0000 0000 0000 0000 0000 0000 FF50 00100000 00

その後は、[n]キーを入力する度に1ステップずつ実行されて、レジスタダンプが行われます。
[n]キーは[CONT]キー(TK80の[RET]キー)を入力したことになります。

最初はいきなり変な表示が出てしまったものですから、いささかびっくりしたのですけれど、そのあとは特におかしいところもなく、まともに動作してくれているようです。
むむ。
やっぱり、最初のアレは、なにかちょっとだけ誤動作しただけだったんだ。
早いところ、忘れてしまいましょお。
で。
終了することにいたしました。

[RD+]
8004 2002 - [RD+]
8005 0280 - ^E
0000 00C3 - 
ndremote.exeを終了しました
logfile closed at Wed Sep 08 11:53:41 2010

無事終了いたしました。
と、思ったのですが…。
な。なんと。
ND80ZVの7セグメントLEDのアドレス表示部に、05C0という不可解な表示が出ておりました。

リモート接続を終了したときに、ハードウェアリセットをリモートで行う回路があればよかったのですが、PIC18F14K50の端子にその余裕がなかったものですから、リモート接続の終了時にはND80ZVに、[0][0][0][0][ADRSSET][RUN] を送って、ソフトウェア的にリセットするようにしてあります。
ですから、リモート接続を終了すると、ND80ZVのLEDには00000000が表示されて、リセット直後と同じ状態になります。

というはずなのですが、それが、00000000の表示にはならないで、05C0xxxxというわけのわからない表示になってしまったのです。

うむむ。
やっぱり、おかしい。

念の為にもう一度、リモート接続して動作確認をしてみましたところ、一番最初に出た、あの、いきなりブレイクしてしまったような、レジスタダンプ表示は出ないようになったのですけれど、リモート接続を終了すると、ND80ZVの7セグメントLEDの表示は、必ず05C0xxxxになってしまうのです。

ディップスイッチをSTEP側にした状態でリモート接続を終了すると、ND80ZVのLED表示は00000000にならずに、必ず05C0xxxxになってしまうことが確認できました。
しかし、その状態からでも、ふたたびUSB接続の手続きをすることは、支障なくできました。

ディップスイッチをSTEP側にして、リモート接続を終了すると必ずLED表示が05C0xxxxになる、ということから考えて、それは単なる誤動作などではなくて、どこかにその原因があることは多分間違いないことだと思います。
でも、その原因はどうやって追求したらよいのでしょう?
なにしろ、さっぱり、心当たりがないものですから、途方に暮れてしまいます。

まあ。実用上は特にこれというほどの差し障りがあるわけでもない、のでありますから。

「ディップスイッチがSTEPの状態のときに、リモート接続を終了すると、ND80ZVのLEDには05C0xxxxと表示されますが、あ、え…と、これは、プログラムの都合でこういう表示が出るのでありまして、仕方が無い、あ、いえ、そうではなくて、ああ、誤動作ではありませんから、気にしないようにしてください。
あ、…と、それからひょっとすると、リモート接続したときに、いきなりブレイクしたような表示が出る、かもしれませんが、全然大丈夫ですから、気にしないでください」

なんて、説明書に注記して、
「これにて一件落着」
にしてしまおうとも思ったのですけれど。

まことにもって、因果な性分でありまして。
どうにも気になって、その原因を追求せずには、いられないのですよねえ。
だめだあ。
また説明書作業がストップしてしまうぅ。
CPUをつくろう!第608回(2010.9.12upload)を再編集

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

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