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


KL5C80A12マイコンボードの製作

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

[第19回]


●ROM/RAM切換え回路とKL5C80A12のMMUの制約

KL5C80A12はZ80互換の8ビットCPUなので、直接アクセスできるメモリ空間はZ80と同じ0000〜FFFFの64KBに限られます。
しかしKL5C80A12はMMU(Memory Management Unit)を内蔵していて、その助けを借りて最大512KBの外部メモリ(物理メモリ)を0000〜FFFFの論理メモリ空間に割り付けることができます。

ところでND80Z3.5は標準の仕様では0000〜7FFFをROM、8000〜FFFFをRAMに割り当てています。
しかしZB3DOS(CP/M互換DOS)を機能させるためは0000〜FFFFをRAMにする必要があります。
そこでZB3DOSオプションの仕様として、0000〜7FFFの同じアドレス空間にシステムROMと32KBのRAMを配置し、バンク切換えの手法で、I/Oアドレス9Cにビット3=0のデータを出力するとROMが選択され、ビット3=1のデータを出力するとRAMが選択されるようにすることができます。

今回のKL5C80A12マイコンボードでは最初からスタンダードの仕様としてシステムROMとは別に512KBのRAMを実装するように考えています。
すでに書いてきましたように、このKL5C80A12マイコンボードでもZB3DOS(CP/M互換DOS)の動作テストを行いました。
そのためには当然0000〜のエリアをROMからRAMに切り換える仕組みが必要になります。
ここまで書いてきた文の流れからして、それにはKL5C80A12の内蔵MMUを利用しているはず、とお考えになるかもしれません。
ええ。
私自身もなんとか利用できないかな、と最初は考えました。
しかしなんともできませんでした。

下は今回のKL5C80A12マイコンボードのROM/RAM切換え回路です。

説明のために一部の回路を省略して簡略化しています。
175pin15のラインはI/Oアドレス9Cにビット3=0のデータを出力すると0になり、ビット3=1を出力するまでその状態が維持されます。
さらにA18とA17がともに0のときにROMが選択され、それ以外のときにRAMが選択されます。
A18=A17=0のメモリアドレスは00000〜1FFFFになります。
今回のボードはROMとしては27C1001までを搭載するように考えているため、そのROMのアドレス範囲をカバーするためにそのような回路になっています。
このとき初期状態では00000〜1FFFFはROMがアクティブになりRAMは20000〜7FFFFがアクセス可能なアドレスになります。
RAMの00000〜1FFFFはROMの「裏」に隠れていて、I/Oアドレス9Cにビット3=1のデータを出力するとROMの代わりにRAMがアクティブになります。

えー?
それってMMUを全然使ってないじゃないの?
ええ。
使ってないじゃなくて、使えないのです。
KL5C80A12のMMUについては[第5回][第6回]で説明していますが、あまり要領よく説明できませんでした。
そこで説明に使った図を下に再掲します。

KL5C80A12がソフトウェアでアクセスできる64KBのメモリ空間(0000〜FFFF)を論理メモリ空間と名付けます。
論理メモリ空間は最大でR0〜R4の5個のブロックに分けることができます。
このうちR0の下限アドレスはシステムによって0000になっていて、かつ物理メモリアドレスの00000にマッピングされています。
これはソフトウェアで変えることはできません。
それではR1の下限アドレスは、というとこれには制約はありません。
ならばR1の下限アドレスも0000にして、それを物理メモリアドレスの20000に割り当てれば、ROMとRAMのバンク切換えが外部回路無しにできてしまうではないか?

ところが、R1の下限アドレスを0000にはできないのです。
[第5回]の説明は少し舌足らずでわかりにくいかもしれません。
R1〜R4の下限アドレスを示す値としては00〜3E(ただし6ビットの値)を与えることができます(3Fは無効値)。
この値は16ビットアドレスの上位6ビットなのでA15〜A10を示します(A9〜A0は0)。
それなら下限アドレスとして0000〜F800を示すことができそうなのですが、ここで「ただし」が付け加わります。

その6ビットの値に1を加算した値が実際の論理下限アドレス値になります。
つまり実際には下限アドレスとしては0400〜FC00の範囲しか割り当てることができません。
どのように工夫してもこのMMUの仕様からは0000〜03FFの範囲はROMにしか割り当てることができません。
おそらくKL5C80A12の開発チームは組み込み用のCPUであることを強く意識していたはずで、その場合少なくとも00000〜003FFの1KBはIPLを含むROMであることがノーマルな仕様となるはずで、さらには内蔵の512バイトのRAM(アドレスはFFE00〜FFFFF)を利用することで外付けROMだけのシンプルな制御システムが実現できるはず、と考えたと思います。
まあ、制御用としては妥当な考え方なのですけれど、それを汎用として使おうとしますと、こういうことになってしまうのはいたし方のないことなのかもしれません。

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

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