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


KL5C80A12マイコンボードの製作

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

[第3回]


●メモリマップ

KL5C80A12がアクセスできるメモリ範囲はいかにも半端な感じがします。
メモリマップとしては00000〜FFFFFの1MBのメモリ空間に実メモリを配置できるように見えるのですが、アドレスラインはA0〜A18の19本しかありません。
1MBをアクセスするにはA0〜A19の20本のアドレスラインが必要なので、それが1本足りないということは、最大で512KBの実メモリしかアクセスできないということになります。

KL5C80A12には2つのメモリアクセスモードがあります。
ひとつはノーマルモードで、もうひとつはマキシマムモードです。

KL5C80A12は高速アクセスできる512byteのRAMを内蔵しています。
それはよいのですが、上図のように1MBのメモリ領域の中間にアクセスできない穴が空いてしまっています。
これはアドレスラインが1本足りないことに起因します。
ノーマルモードではマップの前半と後半の2つの領域に分断され、それぞれ最大128KBしかアクセスできません。
ROM1個、RAM1個という普通の使い方ですと、図左のようにROMとRAMを配置することになります。
マキシマムモードでは外部メモリは1MBの前半00000〜7FFFFにしか配置することはできません。
この範囲にROMとRAMを置くことになります。
マキシマムモードはA0〜A18までのアドレス線を普通に使います。
ですから図右のように配置したROMとRAMはアドレスの上位ラインをデコードしてROMセレクト、RAMセレクトを作ることでアクセスします。
ノーマルモードではA18、A17がそれぞれM1CS_、M0CS_というメモリセレクト信号として出力されます。
M1CS_をRAMセレクト、M0CS_をROMセレクトとして使いますからアドレスデコード回路は不要になります。

ノーマルモードとマキシマムモードの指定はMODE1(pin26)とMODE0(pin27)に入力する信号(電圧値)によって行なわれます。
ノーマルモードはMODE1(pin26)=1、MODE0(pin27)=1を指定し、マキシマムモードはMODE1(pin26)=1、MODE0(pin27)=0を指定します。
なお’01’はKL5C80A12専用のデバッグ装置(バグファインダ)を接続するモードで’00’は禁止です。
バグファインダがいかなるものであるかについては私は知りません。

●ノーマルモードかマキシマムモードか

初代ND80KやZBKシリーズでは回路が簡単になるという理由でノーマルモードを採用しました。
しからば新ND80Kはいずれを採用すべきか?
ここは思案のしどころでありました。
ことはRAMの選択に関係していることがはっきりしてきました。
新ND80KもCP/M互換DOSが動くことを前提に設計します。
CP/M互換DOSモードではアドレス0000にはRAMを置く必要があります。
と同時に、リセット後は0番地からスタートしますからその場合には0000はROMでなければなりません。
この背反する条件をクリアするために、ND80Z3.5などでは同じ0000番地台に置いたROMとRAMをバンク切換えという手法を使って切り換えてアクセスしています。

バンク切換えなら、KL5C80A12にはMMU(Memory Management Unit)があるのだから、それを使えばよいではないか?
ところがKL5C80A12のバンク切換えのシステムでは、Z80CPUがアクセスできる0000〜FFFFの「論理空間」の0000番地は実メモリを配置する「物理空間」の00000に固定されているのです。
これはどういうことかといいますと、仮に物理空間の00000〜1FFFFにROMを置き、20000〜3FFFFにRAMを置いたとして、起動時にはROMをアクセスし、その後にマップを切り換えて20000〜のRAMを論理空間の0000〜に置く、ということが許されないのです。
論理空間の0000に置くことができるのは物理空間の00000に置いたROMに限られているからです。
つまりKL5C80A12のバンク切換えのルールではノーマルモードでもマキシマムモードでもRAMを0000番地にすることはできません(KL5C80A12のバンク切換えについては後ほど詳しく説明します)。
結局KL5C80A12でもND80Z3.5などと同じ手法によってROMとRAMを切り換えて使うしかありません。
そういうことになりますと、ノーマルモードでは128KBのRAM、628128を2個使って、1個はE0000〜に置き、もう1個は00000〜のROMの裏に置くことになります。
マキシマムモードでは628128を2〜4個使って、そのうちの1個を00000〜のROMの裏に置くか、512KBのRAM、628512を00000〜に置いて、その一部をROMの裏に置くかのいずれかの選択をすることになります。
DIPタイプのRAMとしては628128も628512もすでに生産中止になっていて流通市場から調達するしかありません。
628512はちょっと入手困難です。
するとマキシマムモードでフルRAMの最大構成にするためには628128を4個実装することになります。
いや、それはさすがにちょっと…。
628128も628512も面実装タイプなら入手は容易で、しかもコスト的にも有利なのですけれど…。
う?
面実装のRAM?

次回に続きます。

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

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