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

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

[第141回]


●ファンクションコール18H(ログインベクトルの取り出し)、19H(ログインディスクbフ取り出し)

ファンクションコール18Hと19Hについては[第90回]でテストをしました。
そこでも書きましたようにログインディスクというのは、今では耳慣れない言葉になってしまいました。
今でしたらカレントドライブ、カレントディスクと言ったほうがわかりやすいと思います。

CP/M2.2では最大16台のディスクを接続することができました。
ディスクドライブはA〜Pの名前をつけて識別します。
そしてそのAドライブ〜Pドライブをビット0〜ビット15までの各ビットに順に割り当てた16ビットの値がログインベクトルです。

あるドライブに1回でもアクセスすると、ログインベクトルの、そのドライブに対応するビットが1になります。
これはドライブがフロッピーディスクであった場合には必要な機能だったかもしれませんが、RAMディスクではおそらく不要だと思います。
ですからこの機能はなくてもいい、とも思ったのですが。

まあ。しかし。
ひょっとするとアプリケーションが参照していたりして。
ですから、互換性維持のために。
面倒くさいのですけれど、作ることにいたしました。

あ。
ファンクションコール19H(ログインディスクbフ取り出し)は、簡単そのものです。
要するにカレントドライブbゲットすればよいだけですから、何の問題もありません。

両ファンクションコールのテストプログラムは、[第90回]でFTST10−5を作って、それでテストをしました。
今回も同じテストをしてみます。

テストの過程を画像に撮れませんでしたので、ログファイルで説明をいたします。

logfile nd80zlog\05310853.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - 
*** nd80z3 basic ****
>jp d233

A>dir
A: FTST10-2 COM : SEARCH   COM : CMP      COM : FTST9    COM
A: FTST7    COM : FTST8    COM : FTEST2   COM : FTST10-5 COM
A: FTEST4   COM : COPY     COM : FNC0BT2  COM
A>ftst10-5
drvno.?0
0001
00
FTST10-2.COM
SEARCH.COM
CMP.COM
FTST9.COM
FTST7.COM
FTST8.COM
FTEST2.COM
FTST10-5.COM
FTEST4.COM
COPY.COM
FNC0BT2.COM
end
drvno.?b
0003
01
FNC0BT2.COM
FNC0BT1.COM
FNC0BT.COM
FNC06T2.COM
FNC0304T.COM
end
drvno.?a
0003
00
FTST10-2.COM
SEARCH.COM
CMP.COM
FTST9.COM
FTST7.COM
FTST8.COM
FTEST2.COM
FTST10-5.COM
FTEST4.COM
COPY.COM
FNC0BT2.COM
end
drvno.?
A>end of ZBDOS
>0000 00C3 - 
リモート接続を終了しました
logfile closed at Thu May 31 08:55:25 2012

ftst10−5[Enter]
と入力して、
drvno.?
の表示に、最初は’0’を入力し、次に’b’を入力し、最後に’a’を入力しました。
表示されたディレクトリの内容は異なっていますが、ログインベクトル、ログインディスクbヘ、 [第90回]でFTST10−5を実行したときと同じように表示されました。
ここも、クリアということでよろしいでしょう。

●ファンクションコール1CH(ライトプロテクトセット)、1DH(R/Oベクトルの取り出し)

ファンクションコール1CHと1DHは[第91回]でテストをしました。
ファンクションコール1CHはカレントドライブにライトプロテクトをかけてリードオンリーにします。
R/Oベクトルは上で説明しましたログインベクトルと同じ形式の16ビットの値で、リードオンリーになっているドライブに対応するビットが1になります。

ファンクションコール1DHは、そのR/Oベクトルの値をHLレジスタに入れてリターンします。

[第91回]ではファンクションコール1CHをテストするFTST11と、ファンクションコール1DHをテストするFTST12を作りました。

今回はそのFTST11とFTST12を使って、[第91回]で行なったのと同じテストを行ないました。

下はそのテストを行なったときのログファイルです。

logfile nd80zlog\05311504.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - 
*** nd80z3 basic ****
>jp d233

A>dir
A: FTST10-2 COM : SEARCH   COM : FTST11   COM : FTST9    COM
A: FTST7    COM : FTST8    COM : FTST12   COM : FTST10-5 COM
A: FNC0BT2  COM
A>ftst11

A>ftst12
0001

A>save 1 test.txt
err
A>b:
B>a:ftst11

B>a:ftst12
0003

B>save 1 test.txt
err
B>a:ftst12
0003

B>end of ZBDOS
>0000 00C3 - 
リモート接続を終了しました
logfile closed at Thu May 31 15:05:41 2012

もう何回も書いておりますように仮RAMディスクはサイズがうんと小さいので、すぐにディスクフルになってしまいます。
そこでFTST11.COMとFTST12.COMをセーブするために、いくつかのファイルを削除してから、両ファイルをセーブしました。
このログファイルはそのようにして、両ファイルをセーブしたあとで行なった作業の記録です。

A>の表示でFTST11を実行したあとでFTST12を実行したところ、
0001
と表示されました。
FTST12はROベクトルを読んで16進4桁で表示します。
FTST11の実行によってカレントドライブ(A:)がリードオンリーに設定されましたから、ROベクトルのビット0が1になりました。

そのことを確かめるために適当なファイル名でセーブしてみました。
save 1 test.txt[Enter]の実行です。
すると err が表示されました。
なにしろ超特急でプログラムを書いていますから、まだエラーメッセージは整理していません。
ですから、ただ err としか表示されませんが、これはAドライブが「書き込み禁止」のため、ファイルがセーブできなかったことを示しています。

なおCP/M2.2では、こういう場合にはエラーメッセージを表示したあと、そこでポーズします。
これはフロッピーディスクを交換するなどの作業を想定しているためと思われます。
そのあとで何かキーを入力すると、システムがリブートします。
しかしRAMディスクのシステムではそのような動作は余り意味がありません。

そこでCP/M互換DOSでは、err表示後リブートは行なわず、そのままシステムに戻るようにしてあります。
上のログファイルの最後のほうで、B>の表示でも save1test.txt[Enter]を実行していて、そこでも err が表示されていますが、そのあともB>が表示され、またそのあとで再度実行したFTST12でも、0003と表示されていることで、リブートが行なわれていないことがわかると思います。
リブートが行なわれると全てのディスクのライトプロテクトは解除され、カレントドライブはAドライブになります。

今回のテストによって、AドライブとBドライブがリードオンリーに設定され、読み出したROベクトルのビット0とビット1が1になった(=0003)ことから、ファンクションコール18Hと19Hが正しく機能していることが確認できました。

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

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