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

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

[第82回]


●ファンクションコール0E(ディスクドライブセレクト)

ファンクションコール0Eは、プログラム中でデフォルトのドライブb設定します。
Eレジスタにドライブb入れて、Cレジスタに0Eを入れて、システムをコールすると、それ以後はそのbフドライブがデフォルトドライブになります。
デフォルトドライブとは、ドライブb指定しないでディスクにアクセスしたときに選択されるディスクドライブのことです。

●デフォルトドライブ

ものごとを説明するということはなかなかに難しいものです。
自分ではわかっているつもりでも、それを他人にわかってもらうためにはかなりの努力が必要です。
説明の途中で突然新しい名前を持ち出して、それを未定義のまま使ったりしますと、読者は混乱してしまいます。

私が最初に「入門CP/M」「応用CP/M」「実習CP/M」(いずれも村瀬康治著。アスキー出版局)を読んだとき、最初に面食らったのはログインディスクなる名称でした。
ログインというのは一般的にセキュリティガードのかかったサイトなどに、ユーザー名とパスワードを入力して入る、その操作のことです。

Windowsやリナックスでもデフォルトの仕様では、開始する前にパスワードの入力を求められます。
CP/Mでも1つのディスクをユーザー毎に分割して使用する、という機能があったようで、ログインディスクもそこから来た名称のようです。

●ログインディスク

ところで、ログインは英語ではLOG IN(またはLOG−IN)と書きます。
ログオン(LOG ON)とも言います。
インターネットの英和辞書では、「所定の手続きを経てコンピューターの使用を開始する」とあります。
なるほど。
実にわかりやすい説明です。

このログインのログ(LOG)とは、使用履歴のことです。
セキュリティのためや後からのデバッグのために操作履歴の記録を残すこと(またはその記録)を言います。
Windowsではイベントログという名前でシステムによって使用状況が記録されています。

しかし個人が普通に使う場合にはそういうことを意識するのは稀です。
ましてディスク装置が高価であった当時はともかくとして、今CP/Mのディスクを分割して使用するなどということは考慮する必要の無いことだと思います。

そういうことから考えますと、上記の「−CP/M」では「ログインディスク」という言葉で統一されているのですけれど、どうもログインディスクという言葉はややしっくりしないものを感じます。

ちなみにログインディスクというのは死語のようです。
インターネットで検索してもそういう言葉では出てきません(しつこく検索すれば出てくるでしょうけれど)。
そうでしょう。そうでしょう。
だから私も面食らったのです。

今は一般的にはカレントディスクと言います。
カレントディスクならわかります。
あ。
いまやMS−DOSプロンプト(コマンドプロンプト)を知らないユーザーにとっては、それも死語なのでしょうけれど。

●カレントディスク

WindowsではデフォルトではシステムのあるCドライブが最初に選択されます。
C>などと表示されます。
カレント(current)とは「現在の」とか「流通している」「流行している」という意味です。
現在選択されているディスクがカレントディスクです。
今はディスクというよりもドライブという言い方のほうがより一般的なようです。

C>D:[Enter]と操作して
D>と表示されると、現在のカレントドライブはDドライブです。

同じ用法で、
C:¥ND80Z3>
は、「カレントディレクトリはND80Z3です」と言います。

本題に戻ります。
そういうことで、当初私は「ログインディスク」なる言葉に戸惑ったのですが、それはどうやら「カレントディスク」のことらしい、ということで納得いたしました。

ところが「応用CP/M」で、今回のファンクションコール0Eの説明のところを読みましたら、デフォルトドライブなる言葉が突然出てきました。
デフォルトとは「既定の」というような意味で使われます。
こういう言葉を突然使われると、それが何か特別の意味で使われているのか、疑心暗鬼になってしまいます。

おまけに同書のファンクションコール0Eの説明では以下のように説明されていたものですから、余計に混乱してしまいました。
以下同書からの引用です(以下引用文中「ファンクション14」は「ファンクション0EH」のことです」)。

「つまりファンクション14によって選択されたドライブが、デフォールト・ドライブとなる。新しく選択されたドライブは、当ファンクションにより再選択が行なわれるか、リブートされるまでは変化しない。」

ううう。
デフォルトドライブはカレントドライブとは違うのか?
それとも同じものなのか?
この説明の通りならば、プログラム中でファンクションコール14(0EH)を使うと、プログラム終了後は、たとえば
a>だったものがb>と表示されるようなことになるのか?
いや、それはちょっとおかしいのでは?
それともa>でこのプログラムを実行して、その中でbドライブを選択してからプログラムを終了しても、a>のままなのだが、その後に別のプログラムでデフォルトのドライブにアクセスすると、そこではbドライブが選択されてしまうのか?
疑心暗鬼であります。
おかげでほぼ半日が費えてしまいました。

結局のところ、ファンクションコール0Eはごく当たり前の機能に過ぎないことが確認できました。
どうやら、デフォルトドライブ=ログインディスク=カレントドライブであるらしいことがわかりました。
しかし。
そこにはまだ謎の部分が残りました。

どこが謎なのか?
以下少しずつ、その謎を解き明かしていくことにいたします。
なかなかに面倒なことではあります。

面倒なことといえば。
これまではCP/Mの仮モデルとしまして、ND80ZVの上のRAMエリアをそのままRAMディスクとして簡易的に使っておりました。
RAM上のアドレス8800〜B800のエリアです。
当然Aドライブのみの扱いです。
しかし。
カレントドライブを切り換える、ということになりますと。
Aドライブだけというわけにはいきませんでしょう。

●Bドライブを作る

Aドライブとは別に、せめてもうひとつ、Bドライブくらいは無いことにはお話になりません。
なかなかに面倒なことであります。

ま。面倒でもそうするしか仕方がありません。
仮システムでただでさえ窮屈だったものが、さらに窮屈になってしまいます。
早いところ、本物の仮想RAMディスクシステムに移行すればよいのですけれど。

ええ。
最初は私もそのつもりでおりました。
ですけれど。
そうすると、そこから先は「既存のND80ZVのまま改造しないで」というわけにはいかなくなります。

それに。
この先まだもう少し、ディスクに関わるファンクションコールのテストが続きます(というより、ほとんどそればっかりが続きます)。
そういうことになりますと、現行の仮システムのままのほうが、デバッグをするにも何かと便利なのです。

さらに言うならば。
この先、中日電工オリジナルのCP/M互換システムに発展させていかなければなりません(おお。壮大な計画です。本当に大丈夫か?)。
その作業も、まずは現行の仮システムの上でプロトタイプを作ってしまったほうが作業がはるかにやりやすい、ということに気が付いてしまいました。

まさにプロトタイプです。
(しかし、既存のND80ZVのままで、そこまでできてしまうとしましたら、「一体ND80ZVって何もの?」というくらい、すごいものなのだ、と素直に感動していただけるのではありませんでしょうか?)

そこで。
ファンクションコール0Eの説明に入ります前に、まず現行の仮RAMディスクを2つに分割して、AドライブとBドライブにすることにいたします。
今までAドライブだけで、言うならば「お茶を濁してした」ところを、複数のドライブをアクセスできるように、BIOSを直さなければいけません。

●RAMディスクのレイアウト

現在の仮RAMディスクのメモリマップは[第10回]で説明いたしました。
そのときの図を再掲いたします。


これを下のように変更します。


アドレス8800〜B7FFの12KBをAドライブとしていたところを、ちょうど真中で2つに分けて、8800〜9FFFの6KBをAドライブに、そしてA000〜B7FFの6KBをBドライブにします。
これにともなってディレクトリエリアも当初はTRACK0のSECTOR0〜SECTOR7の8セクタ1KBだったところを、SECTOR0〜SECTOR3の512KBとします。

今回の変更にともなってBIOSの変更が必要になりますが、ちょっと時間がなくなってしまいましたので、BIOSの変更作業につきましては次回に説明することにいたします。

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

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