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


KL5C80A12マイコンボードの製作

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

[第6回]


●MMU(2)

前回は論理ベースアドレス(または境界アドレス)について説明をしました。
今回は物理ベースアドレスです。
物理ベースアドレスは論理ベースアドレスとの関係で計算によって求めます。
そのことを下図の参考例で考えてみます。

論理ブロックR2が下限アドレスA000、上限アドレスBFFFの範囲に設定されていることとします。
そしてこの範囲に物理メモリブロックの76000〜77FFFを割り当てることにします。
このとき物理ベースアドレスは76000になるような感じがしますが、そうではありません。
図のように6C000になります。
これはMMUによって以下の計算が行なわれるからです。
論理メモリアドレスと物理ベースアドレスを加算したものが物理メモリアドレスになります。

この計算を満足する物理ベースアドレスは次の計算で求められます。

物理ベースアドレス=論理ベースアドレスに割り当てたい物理アドレス−論理ベースアドレス

上の例に当てはめると、

物理ベースアドレス=76000−A000=6C000

のように求められます。
物理ベースアドレスは上の図にあるように、論理ベースアドレスを割り当てたい物理アドレスに重ね合わせたときの論理アドレスの0000の位置にある物理アドレスになっています。

●マキシマムモードで内蔵RAMを使う設定では論理メモリマップに穴が開く理由

前回、マキシマムモードで内蔵RAMをR4領域に割り当てると、アドレスFC00〜FDFFの範囲がメモリのない領域になってしまいます、と書きました。
その理由を説明します。

論理メモリブロックR1〜R4の開始アドレス(論理ベースアドレス)の上位6ビット(A15〜A10)は論理ベースレジスタBBR1〜BBR4に、その6ビットの値を−1した値として格納します([第5回])。
このときR1〜R4の開始アドレス(論理ベースアドレス)の下位10ビット(A〜A)はすべて0として扱われます。
下位10ビット(A〜A)が0ということは0000、0400、0800、0C00、…、F800、FC00ということですから1KB単位のアドレスになります。
内蔵RAMはFFE00〜FFFFFの512バイトで、これをR4ブロックに割り当てる場合、本来ならばR4の論理ベースアドレスはFE00にしたいところですが、上の1KB単位という条件のため、設定できません。
一番近いアドレスでもFC00になってしまいます。

ところが物理メモリのFFC00〜FFDFFには実メモリがありませんから、その範囲はメモリのない領域になってしまいます。
このときひとつ前の論理ブロックR3にはFC00〜FDFFの範囲を割り当てることができません。
前回説明しました通り、R3の終わりのアドレスはその上位のR4の開始アドレス(論理ベースアドレス)によって決定されますから、R4の開始アドレス(論理ベースアドレス)としてFC00を指定すると、R3の終わりのアドレスはFBFFに決定されてしまうからです。
もちろんFC00〜FDFFに穴が開くのを承知の上で、そのようにして内蔵RAMを使うことはできますが、マキシマムモードでFC00〜FDFFに穴が開かないような設定をするためには、前回書きましたように、BBR4に3Fを設定することでR4を消滅させて(内蔵RAMは使わないで)、FFFFまでの範囲をR3に割り当てて、外部RAMを使うしかありません。

[2018.2.4追記]
この時点では上のように考えたのですが、よく考えてみますと「メモリのない領域」というのは実際には存在しなくて、穴が空くと思われるところには実メモリのイメージが存在することになると思います。

KL5C80A12マイコンボードの製作[第6回]
2016.12.21upload
2018.2.4追記

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