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

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

[第221回]


●ランダムファイルのFCBの説明

[第217回]でVFTST202を実行した結果つくられたランダムファイル(TEST.RAF)のFCBを、[第106回][第167回]と比較してみたところ、作成されたFCBの数や、そのエクステントaA各エクステントのレコードサイズなどは一致したのですが、データブロックを示すブロックbヘ一致しませんでした。
ブロックbェ一致しなかった理由は、ブロックbフサイズにありました。

というところまで説明をいたしました。
今回はその続きです。

それまでのテストではずっと容量の小さい仮RAMディスクが対象でしたので、ブロックbヘ1バイト8ビットでした。
FCBのブロックアローケーションエリアは16ビットのサイズですから、以前の仮RAMディスクでのFCBはたとえば下のようになります。

00 41 42 43 20 20 20 20-20 54 58 54 00 00 00 30  .ABC     TXT...0
02 03 04 05 06 07 00 00-00 00 00 00 00 00 00 00  ................

これはABC.TXTのデータがブロックbO2から07までを使ってセーブされたときの例です。
ブロックbェ1バイトなので上のように配置されます。
これに対してブロックbェ16ビット(2バイト)になると、同じケースでも下のようになります。

00 41 42 43 20 20 20 20-20 54 58 54 00 00 00 30  .ABC     TXT...0
02 00 03 00 04 00 00 00-00 00 00 00 00 00 00 00  ................

ブロックb示すのに2バイト必要ですから、FCBのブロックアローケーションエリアには8個のブロックbオか置けません。
ブロックbヘ上のように最初に下位バイト次に上位バイトの順に置かれます。
この例ではデータを保存するのにブロックbO002H、0003H、0004Hの3ブロックが使われています。

[第217回][第106回][第167回]とで、作成されたランダムファイルのFCBのブロックbェ不一致だったのは、そういうわけだったのです。

さて。
理由はわかりましたが、それでは次に[第217回]で作成されたランダムファイルのFCBのブロックbフ置かれた位置と、そのブロックbェ正しいものであるかどうかを確認してみなければなりません。

そこで、もう一度[第217回]でお見せした、ランダムファイル(TEST.RAF)のFCB部分を再掲することにいたします。



各FCBの名前部分の次(13バイト目)はエクステントbナす。
1つのFCBにはデータ部のブロックai2バイト)を記録する16バイトのエリアがあります。
したがって1つのFCBには8ブロックの情報が記入できます。
ファイルのサイズが大きくて8ブロックを越える場合には、同じファイル名のFCBが複数作成されます。
同じファイル名のFCBを区別するために、何番目のFCBかを示しているのがエクステントbナす。
ランダムアクセスファイルの場合にはレコードbノよって、飛び飛びにデータが作成されます。
そのためレコードbノよっては、少ないレコードでも複数のFCBが作成されてしまうこともあります。
レコードbニブロックaAエクステントbフ関係については[第106回]および[第107回]を参照願います。

ここではTEST.RAFのFCBは4つ作成されています。
エクステントbO0、03、07、01です。
エクステントbO0のブロックアローケーションエリアには、前から5番目の位置にブロックbO076があります。
エクステントbO3には前から3番目の位置にブロックbO073があります。
エクステントbO7には前から4番目の位置にブロックbO074があります。
エクステントbO1には前から2番目の位置にブロックbO075があります。
ブロックbヘ2バイトの16進数です。

やっと本題に戻ったところなのですが、本日も時間がなくなってしまいました。
この続きは次回にすることにいたします。

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

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