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

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

[第151回]


●大きなランダムファイルを作る

ここまでがんばって一気に飛ばして片付けてきました。
あ。皆様は1日に1回ずつお読みいただいておりますが、実はこのところテスト作業を一気に進めてきましたので、12〜3回分を3日ほどで片付けてしまいました。
かなりのスピードです。

それで。
ランダムファイルにつきましては、テストの手順もありまして、とりあえず1バイトのレコードbフみを使って、小さなランダムファイルを使ってテストをしてきました。

ところで。
CP/M2.2のテストをしておりましたときには、[第106回]で、2バイトのレコードb使って大きなランダムファイルを作成しました。
今回のCP/M互換DOSでのテストでは、その作業は後回しにしてここまできました。
相当にホネな作業であることが予測されたからです。

しかし。
今や、とうとう、といいますか、ついに、といいますか、それに取りかかる時が来てしまいました。

なんと大げさな、とお思いかもしれませんが、決して大げさではありませんです。
事実、大変なことなのですよ。
どの位大変なことなのかということを認識していただくためには、[第107回]をもう一度じっくりお読みいただくのがよろしいかと思います。
そこでは[第106回]で作成した2バイト(16ビット)のレコード番号をキーにして、それに対応するレコードを書き込んでランダムファイルを作成しました。

ランダムファイルはそれまでにも作成してきましたが、それとどこがどのように異なっているのかにつきましては、ディレクトリに作成されたランダムファイルのFCBを見ていただきますと、一目瞭然、ご納得いただけることと思います。

[第107回]でテスト作業を行なったあとの、Aドライブのディレクトリエリアのメモリダンプです。

a>^D
end of CP/M
>dm 8800,88ff
8800  00 46 54 53 54 32 30 2D-32 43 4F 4D 00 00 00 02  .FTST20-2COM....
8810  01 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
8820  00 54 45 53 54 20 20 20-20 52 41 46 00 00 00 48  .TEST    RAF...H
8830  00 00 00 00 00 00 00 00-05 00 00 00 00 00 00 00  ................
8840  00 54 45 53 54 20 20 20-20 52 41 46 03 00 00 28  .TEST    RAF...(
8850  00 00 00 00 02 00 00 00-00 00 00 00 00 00 00 00  ................
8860  00 54 45 53 54 20 20 20-20 52 41 46 07 00 00 37  .TEST    RAF...7
8870  00 00 00 00 00 00 03 00-00 00 00 00 00 00 00 00  ................
8880  00 54 45 53 54 20 20 20-20 52 41 46 01 00 00 20  .TEST    RAF... 
8890  00 00 00 04 00 00 00 00-00 00 00 00 00 00 00 00  ................
88A0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
88B0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
88C0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
88D0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
88E0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
88F0  E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5  ................
>

今まで普通に扱ってきましたファイルのFCBは1つでした。
ところが、ここで作成されたランダムファイルTEST.RAFのFCBは、なんと4つもあります。
1つだけならなんとかなるけれど…(って、1つだけでも、大変な作業が必要なのですよお)。
なんと4つもできてしまうなんて、一体どうすればよいのお?
といいますのが正直なご感想かと。
4つのFCBを区別しておりますのは、先頭から13バイト目のエクステント(EXTENT)bナす。
そこを見ますと上から順に、00、03、07、01です(全然、順じゃありませんし、しかも歯抜けです)。
エクステントにつきましては[第106回][第107回]で説明をしております。

そして[第107回]での説明によりますと、実は最初に作成されたレコードは、1番目のFCB(エクステントbO0)ではなくて、2番目のFCB(エクステントbO3)に属するレコードなのですね。
ああ。そんな順不同なFCBをどのようにして作成するのでありましょうか。
ねえ。思わずため息が出てしまいますでしょう。

まあ。
こういうプログラムが書けるようになりますと、一人前以上であります。
掛け値無しに上級者でありましょう。

前回までの検証で、FCBが1つに収まるランダムファイルの作成につきましては、うまくいきました。
FCBが2つ以上になる場合につきましても、一応は考えてプログラム(ZBDOS)を作成してあります。
はたして、一発でうまくいきますかどうか(こんな複雑なものが一発でうまくいくわけはありませぬ)。

ともかくは[第106回][第107回]でやりました通りにテストを行なってみることにしました。
以下はそのように実行したログファイルです。

logfile nd80zlog\06031750.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - 
*** nd80z3 basic ****
>/sv bdos88-dfb.bin,8800,dfff
5800(22528)bytes saved
>/ld fille5.bin,8100
loading FILLE5.BIN ...0010(16)bytes loaded,from 8100 to 810F
>jp 8100
>cm d25b
D25B 02-03
D25C 03-07
D25D 00-
D25E 0B-05
D25F 00-
D260 0F-1f
D261 00-
>cm 8300
8300 26-a2
8301 0F-01
8302 22-b5
8303 27-03
8304 29-9e
8305 0E-00
8306 11-44
8307 12-00
8308 16-b6
8309 03-03
830A 0D-a7
830B FF-01
830C 07-9f
830D 07-00
830E 07-9a
830F 07-00
8310 F6-b3
8311 89-03
8312 C1-a5
8313 E1-01
8314 77-98
8315 C3-00
8316 DD-47
8317 C5-00
8318 78-42
8319 B7-00
831A CA-ff
831B 9F-ff
831C C5-
>/ld ftst20-2.bin,8100
loading FTST20-2.BIN ...00a9(169)bytes loaded,from 8100 to 81A8
>jp d233

A>save 1 ftst20-2.com
A>

念のために今まで作業したRAMの内容を、仮RAMディスクとCP/M互換DOSを含めて保存しました。
/sv bdos88−dfb.bin,8800,dfff[Enter]
の実行です。
そのあとFILLE5.BINを実行して、仮RAMディスクをフォーマット(クリア)しました。

今回の作業のために、[第105回]で説明しましたように、1ブロックのセクタ数を今までの4セクタから8セクタに変更しました。
そのためにディスクパラーメータを書き換えました。
cm d25b[Enter]と入力して行なった作業です。

[第106回]では、2バイトのレコードb扱えるように変更したテストプログラムFTST20−2.COMを作成しました。
そのテストプログラムを実行するために、2バイト長のレコードu\を作成しました。
今回も同じレコードu\を作成しました。
cm 8300[enter]と入力して行なった作業です。

そのように準備してから、[第107回]でFTST20−2.COMを実行しました。
今回も同じように、FTST20−2.BINを8100H〜にロードしてからCP/M互換DOSを起動して、AドライブにFTST20−2.COMの名前でセーブしました。

さて。
いよいよ、実行です。
ftst20−2 test.raf[Enter]
と入力しましたら。

A>ftst20-2 test.raf
read error(hidread)
write error(2)
read error(hidread)
write error(2)
write error(2)

リモート接続を終了しました
logfile closed at Sun Jun 03 17:55:27 2012

おおお。
とんでもないエラーです。
これは尋常ではありませぬ。
なんと。
USB通信のエラーが発生してしまいました。

だから。
そんなに簡単に行くわけはなかったのですよお。

ちょいと長くなってしまいましたので、この続きは次回にすることにいたします。

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

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