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


KL5C80A12マイコンボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
KL5C80A12はZ80互換の高速高性能8ビットマイクロコントローラです。
残念なことに数年前に生産中止になってしまいました。
しかし当社ではKL5C80A12を使った組込みマイコンボードはまだ健在です。
そのKL5C80A12を使ったND80Z3.5上位互換マイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第8回]


●最上位4ビットの表示(2)

前回は下の表示のところまでお見せしました。


今回はもう少し続きを見ていただきましょう。

[0]を入力しました。

前回と同様、このあとで行なった操作については後ほど説明しますので、今は内緒ということにしておきます。

前回と同様、今入力した[0]がアドレス表示部の最上位桁に表示されました。

途中の操作の写真は省略しますが、このあと[0][0][0][0][ADRS SET]と入力すると、下の写真になります。

ROMのアドレス00000の値が表示されています。
ここはR0ブロックの範囲で、物理メモリマップと論理メモリマップでアドレスが一致していますから、別に不思議でも何でもありませんが。

こうすると、どうでしょう。
[2][0][0][0][ADRS SET]と入力しました。

論理アドレスの2000は前回のマップでR3ブロックですから、RAMのF2000に当たるところです。

それにもかかわらず、最上位桁の表示が示す通りにROMの02000がアクセスされています。
いうなればマジックです。
[READ INC]を押しました。


もう一度[READ INC]を押しました。

表示されたメモリ内容は、
02000 C3
02001 B2
02002 21
です。
本当にその通りかどうか確かめてみます。

ROMの中身のその部分をND80Z3.5を使って表示させてみました。

logfile nd80zlog\12232013.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - 
*** nd80z3 basic ****
ndwr2h.bin loaded,from E23F to E535
>/ld ndkrom1d.bin,0000
loading NDKROM1D.BIN ...8000(32768)bytes loaded,from 0000 to 7FFF
>dm@2000,202f
2000  C3 B2 21 C3 3C 22 C3 30-2B C3 AA 2E C3 3D 2C C3  テイ!テ<"テ0+テェ.テ=,テ
2010  4A 31 C3 33 2A C3 06 31-C3 E8 2D C3 3F 23 C3 AE  J1テ3*テ.1テ.-テ?#テョ
2020  2D C3 0A 2F C3 85 29 C3-0B 30 C3 4F 38 C3 FB 2F  -テ./テ.)テ.0テO8テ./
>/exit
0000 00C3 - 
リモート接続を終了しました
logfile closed at Fri Dec 23 20:14:48 2016

確かに、その通りの値になっています。

アドレス表示部の5桁のアドレスはCPUの外部に接続した実際の物理メモリアドレスを示していることがご理解いただけたかと思います。

さて、それでは上の説明でとりあえず内緒にしておりました、どのようにしてアドレスの最上位桁を設定したのか、という操作の説明です。

実は、その昔にND80ZUのために用意したキーシールが沢山残っているので、それをND80ZV、ND80Z3.5、ND8080にも利用しています。

ND80ZモニタではTK−80のキー機能のほかに沢山の機能を持たせています。
0〜Fのキーの左下に印刷してある機能は[*(I/O)]キーを押したあと続けてそのキーを押すことで実行されます。
しかしその中にはND80ZUでは使っていた機能で、ND80ZV以後では使わなくなった機能もあります。
今回はそのような使わなくなったキー機能に、アドレスの最上位桁を入力する仕組みを割り当てました。
[*(I/O)]キーに続けて[5]と入力することで、データ表示部の最下位桁に表示されている値が、アドレスの最上位桁にセットされます。
[*(I/O)][5]はW16(2716WRITER)に割り当てられていましたが、今は2716も2732も2764も、その時代ではなくなりましたから、[*(I/O)][5]、[*(I/O)][6]、[*(I/O)][7]には今は何も割り当てられていません。
今回はそこを利用しました。
ちなみに[*(I/O)][8]はもともとはカセットテープレコーダにデータ、プログラムをSAVEしたあと、それをベリファイするためのキーだったのですが、今はZB3BASICの起動のために使っています。

さて。
[*(I/O)][5]に新しくプログラムを組み込んだために、アドレスの5桁目に数値を表示することができるようになりました(実際には今まで8桁の表示だったところを9桁の表示にするためのプログラム変更も必要です)。
しかし、そのようにすれば[READ INC]や[READ DEC]や[WRITE INC]で、その5桁が示す外部メモリを直接アクセスできるようになるのか、といいますと、そんなことができたらそれこそマジックです。
そんなに簡単なものではありません。
[*(I/O)][5]に組み込んだプログラムと9桁表示プログラムは、単にアドレス表示LEDの5桁目に置数し、それを表示することができるだけで、それによってその5桁が示す物理アドレスに直接アクセスできるようになるわけではありません。
そのようにするにはこのところ説明をしてきましたMMUの仕組みを利用するしかありません。
ちょいと面倒なプログラムを組み込むことになります。

そのあたりのことについては次回に説明いたします。

KL5C80A12マイコンボードの製作[第8回]
2016.12.24upload

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