KL5C80A12マイコンボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
KL5C80A12はZ80互換の高速高性能8ビットマイクロコントローラです。
残念なことに数年前に生産中止になってしまいました。
しかし当社ではKL5C80A12を使った組込みマイコンボードはまだ健在です。
そのKL5C80A12を使ったND80Z3.5上位互換マイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第12回]
●なんとも気持ちの悪い誤動作
やっとのことで2回目の試作基板の動作テストにかかったところ誤動作してしまい、どうしたものか思案中です、と前回書きました。
なんとも気持ちの悪い誤動作で、それをクリアするのにこの週末の丸2日をしっかり費やしてしまいました。
1回目の試作は追加配線でスパゲッティ状態なのですが、誤動作せずにしっかり動いています。
ZB3DOS(CP/M互換DOS)も動きます。
定番のMBASICでSTARTREKを実行するところまで正常動作することを確認済みです。
そのスパゲッティ配線を直して作成したのが2回目の試作基板です。
当然まともに動作すると期待してしまいます。
ところがその期待は見事に裏切られてしまいました。
ZB3DOSどころか、やっと動いたのはTK−80モニタだけというお粗末な結果です。
ND80Zモニタに切り換えますと、なんとのっけからキー入力を受け付けてくれません。
いや。
それはあまりにおかしいじゃないの。
TK−80モニタもND80Zモニタも5×5キーの入力とLED表示のところはどちらも同じプログラムなのだから、これはありえない誤動作です。
ひょっとするとROMが不良だったりするのか、と思って書き直してみたり別のROMに交換してみたりしましたが一向に誤動作は直りません。
むむ。面妖な?
考えたって理屈も何もない感じなので、埒が明きません。
何かしないことには先に進めません。
というわけで、以前に書いたROMを引っ張り出してきてあれこれ交換して試していましたら。
あれ?動くじゃないの?
まともに動作するROMがみつかりました。
誤動作するROMと誤動作しないROMはどこが違うのか?
中身を比較してみたら何かがわかるかも。
いやいやいや。
本当は比較以前に、そもそもおかしいのですよね。
だって誤動作するROMもしないROMも1回目の試作基板ではまともに動いてしまうのですから。
ま、しかし、ROMのどこかに違いがあるはずで(それはそのはずです)、それが今回の基板のどこかに前回の回路と異なるところがあって、そこにひっかかってしまうということなのかも。
ま、しかし。今この段階で基板のどこが違うかを考えるのはなかなかに大変です。
それで、とにかく2つのROMを比較してみることにしました。
そうしましたら、なんと。
2つのROMを比較してみましたら、一番先頭のKL5C80A12のメモリバンクの設定のところで、MMU(メモリマネジメントユニット)のR3の物理ベースレジスタに、もとはF0を設定していたところを70に変更しているだけということが判明しました。
なんじゃそれは?
全然わからんぞう。
ですよねえ。
ですけれど重複を避けるため申し訳ありません。
KL5C80A12のMMUについては、[第3回]〜[第6回]をお読みください。
あ。
私の書き方が悪いせいもありますけれとでKL5C80A12のMMUの仕組みはなかなかに理解しづらいところがあります。
それで[第6回]ではマキシマムモードではメモリマップに穴が空くなどと書いてしまいましたが、今考えてみますと穴が空くのではなくて、そこはイメージになるのだと思います。
それで。
F0と70とはなにかということなのですが。
当初はノーマルモードの設定をしていて、そのときの物理メモリアドレスの一番上位の64KB(F0000〜FFFFF)のRAMを論理メモリマップに割り当てる(実際はその後半の32KB、つまりF8000〜FFFFFを8000〜FFFFに割り当てる)と考えていたところを、マキシマムモードに変更して、その場合の物理メモリの最上位の64KB(70000〜7FFFF)のRAMを論理メモリマップに割り当てる(実際はその後半の32KB、つまり78000〜7FFFFを8000〜FFFFに割り当てる)ように改めました。
そのF0と70なのです。
今回の試作基板ではどうやらそこのところがなんだか問題のようで、F0ならばよいのだが70に設定するとND80Zモニタがハングアップしてしまうという、なんとも理解しがたい現象にぶち当たってしまったのでした。
とにかく再度書きますが、どちらに設定しても、1回目の試作基板なら正常動作するのです。
それが今回の試作基板では70に設定するとまともに動くのはTK−80モニタだけでND80Zモニタではキー入力を受け付けてくれません。
なんだか暴走してしまうように見えます。
しかしF0に設定するとND80Zモニタでもキー入力を受け付けるようになります。
しかし、しかし。
それではなおさらおかしいのです。
F0ということはそもそもマキシマムモードでは存在しない物理メモリアドレスを指定することになります。
本来は70が正しいはずです。
しかしF0でも正常に動作するということから考えると。
F0000を指定しようとする場合アドレスの最上位はA19になりますがKL5C80A12にはA19はありません。
A18〜A0しか出力されません。
ということはF0を指定したって、70を指定したって出力されるアドレスは同じ7XXXXになるはず。
すると、同じはずなのに、F0ならよくてなぜ70だとこけるのか?(むしろその逆のほうがまだわかるような気がするが)。
こういうわけの分からぬ誤動作に直面しますと、もう頭をかきむしって、思わず「わけがわからん!」と叫びたくなってしまいます。
かくて2日間というもの、五里夢中でもがくことになったのでありました。
むむむ。
これはやっぱり悪霊のたたりなのか?
あるいは。
神の与えたもうた試練なのでありますか?
ええい。面倒なり。
とりあえず。
悪霊退散−ん!
塩でも豆でもまいてやるぞお!
KL5C80A12マイコンボードの製作[第12回]
2018.2.4upload
前へ
次へ
ホームページトップへ戻る