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


KL5C80A12マイコンボードの製作

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

[第76回]



●新ZBK開発セットのリニューアル(11)ROM/RAM境界アドレスの移動

前回の続きです。
BASICプログラムをROM化する場合に通常のメモリ構成ではBASICプログラム(ROM)と変数データ領域(RAM)の境はアドレス$8000になります。
BASICのプログラムが$4000〜$7FFF、変数領域が$8000〜$DFFFの範囲にあるならば通常のメモリ構成つまりシステムROMが27C1001でRAMが62256の構成でBASICプログラムをROM化することができます。
BASICプログラムはシステムROM(128KB)の後半の空きエリア(64KB)に書き込みます。
そのエリアのうちの16KBの範囲をKL5C80A12のメモリバンク機能によってアドレス$4000〜$7FFFの範囲に割り当てます。
この割り当てはシステムROM内のシステムプログラムが行ないますからそれについてユーザーが特に何かをする必要はありません。

しかし前回の終わりに書いたように、場合によってはBASICプログラムが長くなって$4000〜$7FFFの範囲に収まらなくなった場合とか、逆に変数をたくさん使うような場合(たとえば配列変数の領域を大きく必要とするような場合)も出てくるかもしれません。
ZBKボードのシステムプログラムにはそういう場合のための機能も組み込まれています。
まずはBASICプログラムが大きくなってアドレス$8000を越えてしまう場合について説明をします。
この場合にはROMの領域を大きくする必要があります。
勿論BASICプログラムは大きくなるけれど変数領域はそれほど大きくする必要は無いという前提での話です。
BASICプログラム領域と変数領域の両方が同時に$8000を越えてともに大きくするということはできません。
限界はつねにBASICプログラム領域+変数領域=最大40KB($4000〜$DFFF)という条件は守る必要があります。
その条件の範囲内でBASICプログラムのサイズが大きくなるということは、逆に変数領域のためのRAMの領域は上で説明をした通常のRAM領域よりも小さくなるということになります。
ですからRAMは通常の場合の62256(32KB)を実装するという使い方になります。
BASICプログラムのほうはROM化するわけですが、システムROMの空き領域は上で書いたように64KBもありますから十分です。

さてそこで。
そのROMとRAMの境界を移動する方法です。
BASICプログラムの先頭に次のOUT文を書きます。
10 OUT 4,hh
ここでhhは$10〜$37の範囲の16進数です。
この命令文をROM化するときのBASICプログラムの先頭に書いておいてそれをそのままROM化します。
行番号10は普通にBASICプログラムを書いたときの先頭行になります。
勿論行番号を 1 にしても構いません。
BASICプログラムをROM化したときシステムがBASICプログラムの先頭で上の命令文を読むとそのhhの値によってROMとRAMの割り当てを行います。
上のほうに書いた通常の使い方の場合のROMとRAMの境界アドレスを$8000にするときのhhは$1Fです。
実は通常の使い方の場合、上記OUT文を省略するとシステムプログラムによって自動的にOUT 4,$1Fが実行される仕組みになっています。
たとえばhhの値として$1Fよりもひとつ大きい$20を指定した場合には境界アドレスは$8400になります。
さらにもうひとつ大きい値$21を指定すると境界アドレスは$8800になります。
そのようにhhの値をひとつ増やすごとに境界アドレスは$0400(つまり1KB)後方に移動します。
hhの値を$1Fから大きな値にしたときに決定される境界のアドレスを下に示します。

$1F  $8000
$20  $8400
$21  $8800
$22  $8C00
$23  $9000
$24  $9400
$25  $9800
$26  $9C00
$27  $A000
$28  $A400
$29  $A800
$2A  $AC00
$2B  $B000
$2C  $B400
$2D  $B800
$2E  $BC00
$2F  $C000
$30  $C400
$31  $C800
$32  $CC00
$33  $D000
$34  $D400
$35  $D800
$36  $DC00
$37  $E000

hh=$37はBASICのプログラムでシステムのワークエリアにデフォルトで定義されているA%〜Z%およびA$〜H$以外の変数を使用していないときに指定することができます。
現在の境界アドレスを知るにはHELPコマンドを実行します。
たとえば
HELP[Enter]
と入力したとき
TEXT 4004−9154
ヘンスウ B764−DFFF
と表示されたら、hh=$24を指定して境界アドレスを$9400に設定します。

説明の途中ですが本日も時間がなくなってしまいました。
続きは次回にいたします。

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

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