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


KL5C80A12マイコンボードの製作

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

[第77回]



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

前回はBASICプログラムをROM化するときにBASICプログラムが大きくなってアドレス$8000を越えてしまう場合について説明をしました。
今回はその逆の場合で、BASICプログラムはそれほど大きくはないが大きな配列を使う必要があるなどの理由で変数領域が$8000よりも前まで割り当てられてしまうという場合について説明をします。
BASICプログラムをROM化する場合にはシステムROMの空き領域が64KBもありますからハードウェア上の問題はありませんでした。
しかし変数領域はRAM上に割り当てられますから$8000よりも前の領域もRAMである必要があります。
もともとBASICプログラムを開発する時点では$4000〜$FFFFの範囲はRAMである必要があります。
そこでZBKボードシステムでは、BASICプログラムを開発する段階ではZBKボードにRAMとして628128(128KB)を実装することで$4000〜$FFFFの範囲をRAM領域にします。
BASICプログラムの開発が完了してそのプログラムをROM化したら、通常はBASICプログラムも変数領域もそれほど大きくなることは稀なので、前回説明しましたようにZBKボード上の628128を62256に交換します。
しかし今回は変数領域が大きくて$8000よりも前のアドレスにまで割り当てられてしまうという場合ですからBASICプログラムをROM化したあともプログラムの開発時と同じようにZBKボードには628128を実装したままにします。
そのようにすることで62256を実装した場合にはROMにしか割り当てられなかった$4000〜$7FFFの範囲もRAM領域にすることが可能になります。
なおこのことはZBKボードについて当てはまることで、ND80KL/86やND80KL/86US(ともにKL5C80A12版)の場合には最初からボード上にRAMとして81C5128(512KB)を実装していますから、RAMについての考慮は不要です。

ROMとRAMの境界を移動する方法については前回説明しました。
BASICプログラムの先頭に次のOUT文を書きます。
10 OUT 4,hh
ここでhhは$10〜$37の範囲の16進数です。
この命令文をROM化するときのBASICプログラムの先頭に書いておいてそれをそのままROM化します。
行番号10は普通にBASICプログラムを書いたときの先頭行になります。
勿論行番号を 1 にしても構いません。
BASICプログラムをROM化したときシステムがBASICプログラムの先頭で上の命令文を読むとそのhhの値によってROMとRAMの割り当てを行います。
前回はBASICプログラムのサイズが$8000を越えて大きい場合についての説明でしたからhhの値は$1F〜$37(その場合の境界のアドレスは$8000〜$DFFF)の範囲について説明をしました。
今回はその逆の場合ですから境界のアドレスが$8000から前に移動するような使い方についての説明になります。
前回書きましたように通常の使い方の場合のROMとRAMの境界アドレスを$8000にするときのhhは$1Fです。
hhの値として$1Fよりもひとつ小さい$1Eを指定した場合には境界アドレスは$7C00になります。
さらにもうひとつ小さい値$1Dを指定すると境界アドレスは$7800になります。
そのようにhhの値をひとつ小さくするごとに境界アドレスは$0400(つまり1KB)前方に移動します。
hhの値を$1Fから小さな値にしたときに決定される境界のアドレスを下に示します。

$1F  $8000
$1E  $7C00
$1D  $7800
$1C  $7400
$1B  $7000
$1A  $6C00
$19  $6800
$18  $6400
$17  $6000
$16  $5C00
$15  $5800
$14  $5400
$13  $5000
$12  $4C00
$11  $4800
$10  $4400

hh=$10はBASICプログラムエリアとして$4000〜$43FFの1KBしか割り当てられませんから非常に小さなプログラムの場合になります。
これはあくまでそれほど大きな変数領域が必要な場合の設定ですからたとえBASICプログラムがうんと小さい場合でも変数領域もそれほど大きくなくて$8000よりも後ろのアドレスに収まるのでしたらあえてここまで小さな値を指定する必要はまったくありません。
そういう場合でしたら前回書きましたように標準的な境界アドレスとして$8000を指定する(BASICプログラムの先頭でのOUT文は省略してRAMは62256を実装する)ということで構いません。
参考までに[第72回]でテストに使ったIOTESTプログラムがどのくらいのサイズなのかを確認してみます。
BASICプログラムと変数領域のサイズを知るにはHELPコマンドを実行します。



TEXT 4004−417B
ヘンスウ DFFB−DFFF
と表示されました。
IOTESTプログラムは4004〜417B(約380バイト)です。
なお4000〜4003はシステムのための領域です。

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

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