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

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

[第395回]


●Zドライブはランダムアクセス不可

前回、前々回に書くつもりでいて忘れておりました。
ランダムREAD、ランダムWRITEはZドライブには使えません。
CP/Mのランダムアクセスファイルはディレクトリセクタに置いたFCBエリアをレコードアクセスキーの置き場所として使います。
しかしZドライブはWindowsのフォルダでもあるために、ファイルのコントロールはWindowsの制御下にあります。
当然Zドライブに置かれたファイルにアクセスするにはWindowsのファイルアクセスルールに従わなければなりません。
これはシーケンシャルアクセスについても同じことなので、CP/MのセクタREAD、セクタWRITEではZドライブにあるファイルにアクセスすることはできません。
それではどうやっているのかといいますと、CP/M互換DOS側のセクタREAD、セクタWRITEに合わせて、Windows側で128バイトのデータをシーケンシャルにREAD、WRITEしているのです。
仮想FDDの場合にはセクタREAD、セクタWRITEの前にトラックaAセクタbフ指定を行ないます。
ですがZドライブではそういうことは不要なので、そこは省いてしまって、ただWindows側に「次の128バイトだよ」というサインを出して、READ、WRITEをしています。
もちろん、そこのところを工夫すれば、ランダムアクセスにも対応できてしまうのですけれど、あえてそこまで作る必要はないのではと判断しましたので、Zドライブに対してはランダムアクセスのために特別の処理は組み込みませんでした。
ですのでZドライブ上でランダムREAD、ランダムWRITEを実行してもただのシーケンシャルREAD、シーケンシャルWRITEとしてしか働きません。

●ファンクション28H(空きを00で埋めるランダムライト)

このフアンクションもまだ確認していませんでした。
ファンクション28Hは[第229回][第232回]で説明をしています。
そこではテストプログラムVFTST205を作りました。
VFTST205はVFTST202のファンクション22Hをコールしているところをファンクション28Hコールに置き換えたものです。
それにならって今回は[第393回]で作ったVFTST20Bのファンクション22Hコールをファンクション28Hコールに置き換えてVFTST20Cを作りました。
実行にあたっては[第229回][第232回]のときと同じ考え方で、ファンクション22Hの実行結果と比較できるように、今回は別の仮想ドライブ(Bドライブ)をクリアして、そこにTEST.RAFを新規作成しました。
以下に行なったテストは基本的には[第229回][第232回]のときのテストと同じことをしていますので、詳しい説明につきましては[第229回][第232回]を参照してください。

最初に
ERASE B.VFD[Enter]
を実行してB仮想ドライブを削除しました。
仮想FDDをクリアするにはこれが一番簡単な方法です。
それからZB3DOSを起動します。


/CPM[Enter]
と入力してCP/M互換DOSモードにエントリすると、Bドライブが自動作成されます。
VFTST20C.COMとRAFTDOUT.COMをZドライブからコピーします。
VFTST20B.COM、VFTST21.COMを実行したあとならばレコードcfータはそのまま残っているはずですから、RAFTDOUT.COMをコピーすることも実行することも必要はないのですが、後で作成されるTEST.RAFのセクタb、C仮想ドライブと同じになるようにするために、RAFTDOUT.COMもコピーしておきます。

念のためにRAFTDOUT.COMも実行しておいてから、VFTST20C.COMを実行します。
VFTST20C TEST.RAF[Enter]
と入力します。

TEST.RAFが作成されました。
DIRコマンドで確認しています。


ここからはVFDUMPでの確認です。
ZB3[Enter]
でCP/M互換モードを終わったあと
/EXIT[Entsr]
でZB3DOSを終了します。

VFDUMP[Enter]
と入力するとドライブ名の入力を要求されますから
B[Enter]
と入力します。
セクタbニして 0 を入力します。
ディレクトリが表示されました。

[第232回]ではTEST.RAFの2番目のエクステントのブロックbヘ0003でしたが、今回のテストでは0004になっています。
ブロック0004の先頭のセクタはbU4です。
セクタ64から順に表示させてみます。
まず64、65、66を表示させました。
セクタ66にデータ01A2が書かれています。


続いてセクタ67、68、69を表示させました。
セクタ69にデータ01A5が書かれています。
その間の64、65、67、68は00で埋められています。


比較のためにC仮想ドライブのTEST.RAFも同じように表示させてみます。


セクタ66にデータ01A2が書かれていますが、その前の64、65には何も書かれていなくて、フォーマットされたときのまま、E5が書かれています。


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

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