復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第457回]
●メモリバンクの設定
前回はZ8S180のメモリバンクについて説明をしました。
Z8S180では0000〜FFFFのメモリアドレスを下図のように2つのコモンエリアと1つのバンクエリアに分割して割り当てることができます。
メモリバンクを設定するにはZ8S180の内蔵I/OレジスタCBAR(コモンバンクエリアレジスタ、I/Oアドレス003AH)にコモンエリアとバンクエリアの境界アドレスを指定します。
下にその具体例を示します。
CBARの上位4ビットでコモンエリア1の下限アドレスを示し、下位4ビットでバンクエリアの下限アドレスを示します。
それぞれ4ビットですから0〜Fの数値しか示すことができません。
この数は16ビットのアドレスのうち上位4ビットを示します。
16ビットのアドレスの下位12ビットは000になります。
つまりメモリバンクの境界は、0000、1000、2000、…、E000、F000の16通りしか指定できません。
上図左はコモンエリア0が0000〜2FFF、バンクエリアが3000〜BFFF、コモンエリア1がC000〜FFFFというように割り当てた例です。
このように割り当てるにはCBARにC3Hを書き込みます。
図中はリセット後のメモリバンクでコモンエリア0はなく(つまりバンクエリアの下限は0000)、コモンエリア1がF000〜FFFFになります。
このときCBARの値はF0Hになります。
図右はE−80ミニコンでのメモリバンクの割り当てです。
リセット後と同じくコモンエリア0はなく、バンクエリアが0000〜7FFFでコモンエリア1が8000〜FFFFになります。
このように割り当てるにはCBARに80Hを書き込みます。
●内蔵I/Oレジスタについて
Z8S180の内蔵I/Oレジスタについては[第314回]で簡単に説明をしています。
Z8S180ではI/Oアドレスもメモリアドレスと同じ16ビットに拡張されていますから、0000〜FFFFの範囲のI/Oアドレスをアクセスすることができます。
とは言っても普通はそんなに沢山のI/Oをアクセスすることはまず考えられませんから、これは内蔵I/Oレジスタのために拡張された機能だと考えてもよいのではと思います。
Z8S180の内蔵I/Oレジスタのアドレスはデフォルトでは0000〜003Fに割り当てられています。
内蔵I/Oレジスタをアクセスするには上位8ビットのアドレスも指定(A8〜A15を00にする)しなければなりませんから、[第314回]での説明にありますように、そのための拡張命令を使ってアクセスします。
しかし今まで8080やZ80で使ってきたようにアドレスA0〜A7のみをデコードする普通のやり方でI/Oを配置した場合には、その外部I/Oには今まで通りのIN命令、OUT命令を使ってアクセスすることができます。
たとえばE−80ミニコンの82C55はI/OアドレスE0〜EFに割り当てています。
その82C55にアクセスするには普通に
IN A,(E0)
とか
OUT (E3),A
のようにして構いません。
実はこのとき実際にはI/OアドレスXXE0、XXE3に対してI/O命令が実行されています。
それで全く構わないのですが、そのような旧来の8080やZ80のI/Oアドレス回路では、アドレス00〜3Fには外部にI/Oを割り当てることができません。
このことは時として、Z80のハードとソフトをそのまま利用して、CPUのみをZ8S180に置き換えようとする場合に障害になる可能性があります。
そこでそのような場合でもできるだけ問題を回避できるようにとの配慮だと思いますが、設定によって内蔵I/Oレジスタのアドレスは、デフォルトの0000〜003F以外に、0040〜007F、0080〜00BF、00C0〜00FFにすることもできるようになっています。
E−80ミニコンではI/OアドレスとしてはE0〜FFしか使っていませんから、デフォルトの設定のままでなんら問題はありませんし、外部にI/Oを拡張した場合でも40〜DFの範囲のI/Oアドレスを自由に使うことができますから、それで十分だと思います。
説明の途中ですが、本日も時間がなくなってしまいました。
続きは次回にいたします。
ワンボードマイコンでCP/Mを![第457回]
2013.8.13upload
前へ
次へ
ホームページトップへ戻る