KL5C80A12マイコンボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
KL5C80A12はZ80互換の高速高性能8ビットマイクロコントローラです。
残念なことに数年前に生産中止になってしまいました。
しかし当社ではKL5C80A12を使った組込みマイコンボードはまだ健在です。
そのKL5C80A12を使ったND80Z3.5上位互換マイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第82回]
●KL5C80A12の怪(3)
パソコンをつくろう!のテーマといいますかそのコーナーで[第402回]〜[第407回]までKL5C80A12について書いてきましたが本当は「KL5C80A12マイコンボードの製作」のところで書くべきでした。
このところ時間に追われていてそのあたりのところを整理している余裕がなくてつい流れのままに書いてきてしまいました。
テーマ違いですのでこのままにしておくと後で整理するのが難しくなります。
ということでこんな形で「二重投稿」することにしました。
見出しを含めて丸ごとコピーです。
えっと。
やっぱりリンクは変更しないといけないでしょうねえ。
以上まるごとコピーの言い訳です。
以下はパソコンをつくろう![第404回]からの転載です。
さて今回はいよいよ問題のND80Zモニタでのステップでの誤動作です。
誤動作というよりとにかくステップ動作に入れません。
[8][0][0][0][ADRSSET][RUN]で1ステップ進んで[8][0][0][2]の表示で止まるはずのところが[8][0][0][0]の表示のままで動きません。
何かをやってはいるようで一瞬データ表示が乱れて大抵は[0][0][0][0]になります。
このときキー入力は受け付けるのですが[RUN][CONT]を入力したときだけハングアップしてしまいます。
何かおかしなことが起きていることは確かなようです。
下が割込み信号をトリガにしたロジアナの波形です。

前回の波形と比べてみると確かに異常です。
アドレス8000の3EのところでINT信号が発生しています。
問題はそのあとです。
ここで本来は3E 00を実行したあとで割込み処理に入るはずなのですが[3E]を読んだ直後に割込み処理に入っているようです。
RD信号でそれがわかります。
[3E]の次の[00]のときアドレスは8001になっているのですがRD信号がありません。
ということはCPUは3Eを読んだだけで00は読んでいないことになります。
今これを書いていて気が付きました。
それっておかしいよ!!!
CPUは命令コード3E(LD A,XX)を解読していない????
割込み処理は必ず命令実行の最後のタイミングで行なわれます。
それは割込み信号が発生したときではありません。
CPUは割込み信号が入力されると今実行中の命令の処理が終るタイミングでそれを受け付けて割込み処理に入ります。
3E 00は1つのまとまった命令です。
その頭のところで割り込みに入るわけがない…。
ひょっとすると。
このもうひとつ前のユーザー命令が実行されたときに割込みが受け付けられていたら…。
いや。そんなはずはありません。
INT信号は3Eのところでアクティブになっていますし3E 00はユーザープログラムの最初の命令です。
その前にユーザー命令はありません。
しかし現象としてはなぜかそういうことが起きているらしくそのあとスタックには8002ではなくて8000がプッシュされています。
基本的にはTK80モニタと同じ動きをするプログラムなのですがスタックアドレスとかプログラムアドレスは異なっています。
冗長になりますからND80Zモニタプログラムリストは省きますがそこに問題はありません。
なぜなら同じプログラムはND80Z3.5でも使っているのですから。
それはともかくとして。
どうもINTが発生する前に何かがおきているのでは?
そこを疑ったのでいままでトリガをSTARTポイントにしていたところをCENTERにしてINTが発生する前の波形も見えるようにしました。

あれ?
うっかりしてトリカエッジを[↓]ではなくて[↑]にしてしまいました。
まあでもINT自体が短いので(プログラムの制御がRAMからROMになったところでINTはOFFになりますから)まあ結果オーライでありましょう。
今回はWRも読めるようにしました。
PROBE24はA14だったのですがここは外しても推測できると判断してそこにWRを入れました。
波形の中に解読した値を書き込むのは面倒なので余白に適当に書き込みました。
INT直前のED 4DはRETIです。
?????
やっぱりおかしいです。
このタイミングで割込み処理に入るというのはありえないです。
可能性として考えられるとするとCPU内部のプロセスで先のINT処理(実はステップ処理の最初のエントリなので本当の割込みではないのだが)そのエントリ時に何かの命令の第一コードが読み込まれていてCPUはそのオペランドが来るのを待っている段階だとすれば3Eをオペランドだと思ってそれを読み込んだタイミングで次の割込み許可を出してしまう…。
KL5C80A12は内部で命令の先読みをやっています(前回KL5C80A12マニュアル5−10)。
かなり複雑なことをやっています。
むむむ。
はっきり言って川崎製鉄の勇み足だったのでは。
今更それを言っても何の解決にもなりません。
ロジアナで見たことによって現象がはっきりしましたが結局のところ解決には結び付きませんでした。
そうなるとここは推理するしかありません。
問題を整理してみました。
1)ND80Z3.5では問題はおきていない。
2)KL5C80ボードでもTKモニタでは正常動作する。
3)ND80Zモニタでは異常が発生する。
2)と3)に解決の糸口があるようです。
TKモニタプログラムとND80Zモニタプログラムは基本的には同じだがどこかに気がついていない違いがあるはす。
こんなときにハードウェアならばパーツをひとつずつ交換して異常個所を絞り込んでいったりします。
ならば。
ソフトウェアでもそれをやるしかない。
かくて。かくて。
泥沼の中で苦闘する毎日となったのでありました。
おお。
神よ。
こっ、これは、試練でありますかあっ。
こおいうのはもおやめてほしいなあ。
ほんと。
疲れてしまいまする。
KL5C80A12マイコンボードの製作[第82回]
2026.3.1upload
前へ
次へ
ホームページトップへ戻る