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

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80Z�Vと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

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