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


KL5C80A12マイコンボードの製作

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

[第75回]



●新ZBK開発セットのリニューアル(10)BASICプログラムのROM化

5日ぶりの更新になってしまいました。
当テーマもやっと終盤になってきましたが、実はもうひとつどうしてもやっておきたいテーマがあって、このところそちらのほうの作業に傾注していましたので、なかなかホームページの更新にまで手が回らなかったのです。
そちらのほうもやっと軌道に乗ってきましたので、当テーマが一段落しましたらそちらについてもご披露申し上げる予定でおります。

さて。
ここ何回かBASICプログラムをシステムROMに書いてそれを実行するということについて書きました。
その仕組みについて簡単に説明をしておきます。
ZBKボードのメモリマップについては[第23回]で説明をしています。
下はそこで説明をするのに使ったメモリマップです。

システムプログラムは27C1001(128KB)に書き込まれていますが実際に使用しているのは半分の64KB(27C512相当)だけで残りの半分は空いています。
その空いているところにユーザーのBASICプログラムを書くことができます。
その仕組みです。
BASICプログラムを開発中はZBKボード上にはRAMの628128(128KB)を実装します。
実際に必要なのは64KBなのですがそういうサイズのRAMはないので一般的な628128を使います(もっともこのRAMもDIPタイプのものは生産中止されて久しいため近年は入手困難になっています)。
それはともかくとして、下はRAM上でBASICプログラムを作成するときのメモリマップです。

ROMに書き込まれているシステムプログラムはアドレス0000〜3FFFの16KBにメモリバンク切換えによって多重に配置されています。
残りの4000〜FFFFの48KBはRAMに割り当てられています(628128の残りの領域は通常は使われません)。
BASICプログラムはアドレス4000から後方に作成されていきます。
その一方でBASICプログラムで定義して使用する変数はアドレスDFFFから前方に配置されていきます。
作成するBASICプログラムと使用する変数が多くなるとRAM上のどこかでぶつかってしまうことになりますが余程大きなプログラムでない限りはその心配はまずないと考えてよいと思います。
因みにND80Z3.5やND8080などのBASICシステムもこのメモリマップに似ています。
ND80Z3.5やND8080などのBASICシステムではシステムROMは27C256を使っていて0000〜7FFFの32KBのエリアに多重化しないで配置されています。
ユーザーのBASICプログラムはアドレス8000〜FFFFの32KBに置かれたRAM62256に作成されます。
上のマップと同じようにしてBASICプログラムはアドレス8000から後方に向かって作成され、変数エリアはDFFFから前方に向かって作成されていきます。
いずれの場合もこのマップではBASICプログラムも変数エリアもともにRAM上に作成されます。
そのうちのBASICプログラム部分はROM化することも可能ですが変数エリアはRAMである必要があります。
BASICプログラムをROM化する場合にROMに書き込んだBASICプログラムをRAMにコピーしてから起動するという方法も考えられます。
それが一般的な考え方だと思いますがその場合には電源投入からBASICプログラムが実際に起動するまでに一定の時間がかかります。
またRAMに転送されたプログラムが何らかの原因で暴走したりするとプログラムが破壊されてしまう可能性があって、そうした場合には再ロードするための時間が必要になります。
そんな面倒なことをしなくてももっと簡便な方法があります。
下はZBKボードでBASICプログラムをROM化した場合の「通常」のメモリマップです。

この場合RAMはND80Z3.5などと同様に62256を実装します。
アドレス8000〜FFFFがRAMエリアになります。
そのうちの8000〜DFFFがBASICの変数領域となります。
システムROMに書き込まれたBASICプログラムはROM上でアドレス4000〜7FFFに割り当てられます。
変数エリア(最大24KB)に比べてBASICプログラムのエリアが最大で16KBと少し小さくなりますが普通のプログラムならばこのくらいのサイズでもまずまず収まると思います。
ND80Z3.5などのZB3BASICも同じですがZBKボード用のV3BASICもメモリ上では中間言語に変換して圧縮した状態で書き込まれますから実際に必要とされるメモリサイズはその分小さくて済みます。
ですから普通はこういう使い方で問題なく使えることがほとんどだと思います。
しかし中にはプログラムが意外に大きくなってアドレス8000を越えてしまうという場合や逆に大きな配列を使うために変数領域としてアドレス8000を越えてしまうという場合も出てくるかも知れません。
RAMとして628128を実装してRAM上でBASICプログラムを作成している段階ではそれでもBASICプログラム領域と変数領域がぶつかってしまわない限り問題はありません。
しかしそういうプログラムは上で説明したような使い方ではROM化できないことになります。
もちろんそういう場合のための対策も考えてあります。

本日は時間がなくなってしまいましたので、その場合の方法については次回に説明をすることにいたします。

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

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