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

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第160回]


●64KBフルRAMシステム(2)

[第156回]で説明しましたように、CP/M互換DOSを完全な形で走らせるためには、ND80ZVを改造して64KBフルRAM化しなければなりません。
ND80ZVは標準では、ROM32KB、RAM32KBの構成になっています。
これを前回説明しましたように、32KBのRAMを増設して、ND80ZVモニタの起動後に(正確には、ZB3BASICの起動後に)CP/M互換DOSを起動して、その中で64KBフルRAMに切り換えます。

前回はROMとRAMを切り換える仕組みを、回路図で説明しました。
今回はもう少し具体的に、図を使って説明をいたします。

下の図はND80ZVにRAM32KBを増設したときのメモリ配置を表した図です。



図の左側はND80ZVを普通に使っているときのメモリの状態です。
I/Oアドレス9CHのビット3が0のとき、ROMが選択され、9CHのビット3が1のとき増設RAMが選択されます。
リセット後はI/Oアドレス9CHに00が出力され、ROMが選択されます。
このとき増設したRAMはメモリマップから切り離されてアクセスできません。

図の右側は9CHのビット3から1が出力されて増設RAMが選択された状態を示しています。
このときROMはメモリマップから切り離されてアクセスできません。
図では9CHのビット3だけを0、1とするのではなくて、00、FFをそれぞれ出力していますがROM、RAMを切り換えるための働きとしては、そういうことでも全く構いません。

下の図は、実際にCP/M互換DOSを起動して、ROMとRAMを切り換えるときのプログラムの流れを説明したものです。



メモリマップ後半のRAMにCP/M互換DOS(ZBDOS)をロードしたあと、ND80ZVのZB3BASIC上で JP D233 を実行して、CP/M互換DOS(ZBDOS)を起動して、そこで9CHにFFを出力してアドレス0000〜7FFFをROMからRAMに切り換えます。
アドレス0000〜7FFFがRAMになると、当然のことですが、そこにあったROMにはアクセスできなくなってしまいます。
9CHに00を出力すればROMにアクセスすることができますが、そうするとアドレス0000〜7FFFに置かれていたRAMにはアクセスすることができなくなります。

一般的にフルRAMのシステムでは、ROMはシステムの起動時に使われるだけで、OSが起動したあとはROMは切り離されて、それ以後はアクセスされることはないのが普通の考え方です。
キーボードからの入力や画面制御などの基本的なルーチンもRAM上にロードされて、それをアクセスするようにしますから、ROMをアクセスする必要が無くなるからです。

ND80ZVでのCP/M互換DOSでもそのようにするのが一般的な考え方なのですが、そうするとROMに書かれているUSB通信のプログラムやマシン語のデバッグ機能などもRAMに転送しなければなりません。
ROMに書かれているそれらのプログラムはアドレス0000〜7FFFの範囲のプログラムとして書かれていますから、それをそのまま別のアドレスにコピーして使うことはできません。
アドレス0000〜7FFFの範囲はCP/M互換DOSではシステムのためのワークエリアとユーザプログラムを置くトランジェントエリアなので、そこにはシステムプログラムを置くことはできませんから、置くならば一般的にCP/Mシステムプログラムを置くこととされているアドレスB000から後のあたりに置くことになります。
そういうことになりますと、今ROMにあって、CP/M互換DOSでも使いたいルーチンは、B000から後で動くように書き直さなくてはなりません。

でもせっかくROMに書かれているものを、別のアドレスで動くプログラムに書き直して、それをRAMにロードしてから使う、というのもなんだかなあ、という感じがします。
そこで、ND80ZVのCP/M互換DOSでは、もともとROMに書かれていてCP/M互換DOSのもとでも利用したいルーチンはROMのまま利用できるように考えました。

この図は[第158回]でお見せしました。



CP/M互換DOSのBIOSルーチンは、ROMに書かれているZB3マシン語モニタをアクセスすることで、間接的にUSBリモートプログラムを利用しています。

これって。
アドレス8000から後のRAMだけを使っていた、仮RAMディスクシステムのことじゃないの?

違うのです。
64KBフルRAMのシステムでも、コンソール入力や画面出力などはROMに書かれた基本的なルーチンをアクセスすることで実現しているのです。

でも、どうやって?

次回はその方法について、さらに具体的に説明をすることにいたします。

ワンボードマイコンでCP/Mを![第160回]
2012.6.28upload

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