KL5C80A12マイコンボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
KL5C80A12はZ80互換の高速高性能8ビットマイクロコントローラです。
残念なことに数年前に生産中止になってしまいました。
しかし当社ではKL5C80A12を使った組込みマイコンボードはまだ健在です。
そのKL5C80A12を使ったND80Z3.5上位互換マイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第86回]
●KL5C80A12のSTEP問題解決!
このところずっとND80KL86ボードのND80ZモードでのSTEPの異常動作について書いてきました。
カメレオンロジアナでその現象は確認できたのですがなぜそのような異常な動作をするのかという原因理由を解明するところまでは至りませんでした。
ただ異常動作の原因を追求していく過程でキー入力ルーチンなどのエントリアドレスをRAMに置いていたところをROMプログラムに変更したところ異常動作をしなくなることがわかりましたので原因は不明なままそのようにプログラムを変更することで問題解決ということにいたしました。
内心面白くないのですけれどねえ。
まあしかしそこを追求してみたってある意味時間の無駄という気もしましたし、きっとあれだ、川崎製鉄のチョンボだわさ、というあたりでけりをつけることにしました。
が。
やっぱりなんとなく面白くありません。
頭の隅にもやもやしたものがひっかかっています。
INT信号はハード回路で発生させています。
プログラムがRAM上で実行されていてその命令のM1フェーズのときにINT信号が出力されます。
ROMのプログラムが実行されているときにはINTは出力されません。
その仕組みによってRAMのプログラムをステップ実行させることができます。
そうなると。
キー入力プログラムなどのエントリ部分をRAMに置いていたら(その実体はJMP命令です)そこでINT信号が出力されるはずではないか。
その疑問については異常動作の解明にとりかかったかなり早い段階で気がついていました。
しかしそれならそれはロジアナで確認できるはずです。
キー入力待ちのときでもINTが発生するはずなのに[RUN]キーを押したときにはじめてINT信号のトリガがかかります。
へんだなあ。
なぜキー入力プログラムへのJMP命令をRAMに置いているのにINTが発生しないのだろう?
先に[8][0][0][0][ADRSSET]までキー入力しておいてからロジアナをスタートさせます。
ロジアナはそこでINT信号が発生するのを待っています(ずっとスタンバイ状態のままです)。
そこで[RUN]を押すとロジアナがINT信号をトリガにしてデータをキャッチし波形が表示されます。
今にして思うともう近いところまで来ていたのでした。
解決の糸口は掴んでいたのに。
気が付きませんでした。
あと一歩。
進んで追求すべきでありました。
で。
たまたまコーヒーを飲んでいましたら。
やっぱりそこはいくらなんでもおかしいぞお。
ふとそんな思いがわいてきました。
そもそもなぜND80Z3.5では問題にならないのか。
今まではND80KL86ボードで確認をしてきました。
大元に戻ってND80Z3.5で確認をしてみたらどうなるか?
そこで。
ND80Z3.5でも同じことをロジアナで確認してみました。
ところが。
こんなことになってしまいました。

おいおいおい。
INTがハンパな形で一杯出力されています。
これでは観測になりません。
M1がかなり幅広く出力されているようです。
うむむむむ。
ずっと昔の初期のND80Zからこのハード、ソフトでやってきていましたからINT波形について気にしたこともありませんでした。
RAMセレクトとM1がちょいと重なっているようです。
するとM1の始めのところでINTが出力されてしまいます。
やっぱりKL5C80A12とZ80ではかなり信号出力のタイミングが異なっているようです。
これでよいのか?
これでよいのだ。

[出典]Zilog inc. Z80 UsersManual
INT信号は命令の最後のマシンサイクルの最後のクロックの立ち上がりエッジで認識されます。
なのでINT信号そのものはレベルです。
少なくとも最長命令クロックの間レベルである必要があります。
またEI命令が実行されていて割り込みが受け付け可能であることが必要です。
それなら大丈夫です。
EI命令は[RUN][CONT]キーを入力したときしか実行されません。
そしてその直後にRAMのユーザープログラムが実行されるのでそこでINT信号が発生します。
INT信号によって割込み処理(STEP動作)が行なわれたあとキー入力チェックルーチンに戻りますがそのときには割り込みが受け付けできない状態(DI状態)ですからキー入力ルーチンへのエントリがRAMに置かれていてもINTは発生しません。
Z80なら大丈夫だということが確認できました。
あれ?
確かKL5C80A12のINTはレベルではなくてエッジだったはず。
内蔵の割込みコントローラがそれをさばいていた…。
むむむむむ。
そのあたりに異常動作の原因が?
KL5C80A12マイコンボードの製作[第86回]
2026.3.3upload
前へ
ホームページトップへ戻る