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

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

[第222回]


●ランダムファイルのFCBの説明(その2)

前回はランダムファイル(TEST.RAF)のブロックアローケーションエリアに書かれたブロック�bノついて少し説明をしたあたりで終わってしまいました。
今回はその続きです。

1つのFCBのブロックアローケーションエリアは16バイトで、以前の仮RAMディスクではブロック�bェ8ビット1バイトの数でしたので、そこには16個のブロック�b�置くことができました。
今検証作業を進めている仮想FDDシステムではブロック�bヘ16ビット2バイトの数ですから、そこには8個のブロック�bェ置かれることになります。

さてここからがちょいとややこしいことになるのですが、
最初のエクステント(エクステント�bO0)はランダムファイルの第1ブロックから第8ブロックが置かれる場所であり、次のエクステント(エクステント�bO1)は第9ブロックから第16ブロックが置かれる場所になります。
さらにその次のエクステント(エクステント�bO2)には第17ブロックから第24ブロックが置かれる場所になります。
以下同様です。

各ブロックにはそれぞれ16のセクタが入ります。
CP/Mでは1セクタが1レコードですから、1ブロックには16レコードが入ります。
そこでランダムファイルのFCBのブロックアローケーションエリアをレコードに注目してみます。

すると各エクステントに割り付けられるレコード�bヘ下のようになります。
各枠はブロックアローケーションに置かれる8個のブロックを示していて、その枠の中の数値はそのブロックの先頭のレコード�bニ最終のレコード�bナす。
枠に色がついているものがありますが、それについてはあとで説明をします。

エクステント�bO0
レコード�bO000〜007F
0000
000F
0010
001F
0020
002F
0030
003F
0040
004F
0050
005F
0060
006F
0070
007F

エクステント�bO1
レコード�bO080〜00FF
0080
008F
0090
009F
00A0
00AF
00B0
00BF
00C0
00CF
00D0
00DF
00E0
00EF
00F0
00FF


エクステント�bO2
レコード�bO100〜017F

エクステント�bO3
レコード�bO180〜01FF
0180
018F
0190
019F
01A0
01AF
01B0
01BF
01C0
01CF
01D0
01DF
01E0
01EF
01F0
01FF


エクステント�bO4
レコード�bO200〜027F

エクステント�bO5
レコード�bO280〜02FF

エクステント�bO6
レコード�bO300〜037F

エクステント�bO7
レコード�bO380〜03FF
0380
038F
0390
039F
03A0
03AF
03B0
03BF
03C0
03CF
03D0
03DF
03E0
03EF
03F0
03FF


今回の説明では使わない、エクステント�bO2、04、05、06はレコード�bフ枠表示を省略しました。

さて、次はここに作成されるレコードの�bナす。
もとになるレコード番号表は[第106回]で作成しました。

そのレコード�bェ上の各エクステントの何番目にあてはまるかを調べて、レコード�bフうしろに記入しました。
�bV−4はエクステント�bVの4番目のブロックを示します。

01A2 �bR−3
03B5 �bV−4
009E �bP−2
0044 �bO−5
03B6 �bV−4
01A7 �bR−3
009F �bP−2
009A �bP−2
03B3 �bV−4
01A5 �bR−3
0098 �bP−2
0047 �bO−5
0042 �bO−5
FFFF

レコード�bフ後に書かれた数値は出現した順に、
�bR−3
�bV−4
�bP−2
�bO−5
の4個のみであることがわかります。
さきほどの色のついた枠はその4個を示しています。

ここでまた前回もお見せしたランダムファイルのFCB部分のダンプリストを再掲します。



TEST.RAFのディレクトリはセクタ�bP7(10進数)ですが、その1つ前(セクタ�bP6)を見ると、最後にVFTST202.COMのFCBがあります。
そのブロックアローケーションエリアにはブロック�bO072Hがあります。
実はそれよりも若いブロック�bヘ全て使用されていて、また�bV3以降のブロックは未使用であることがわかっています。
ですからVFTST202の実行によって作成されるデータファイルはブロック�bV3以降を使用することになります。

そこでさきほどの出現した順に書いたエクステント�aAブロック位置に、作成される順にブロック�b�書き入れると下のようになります。

�bR−3 ブロック�bV3
�bV−4 ブロック�bV4
�bP−2 ブロック�bV5
�bO−5 ブロック�bV6

これを上のFCBのダンプリストと比較してみてください。
ぴったり一致していることがわかります。
また前回の終わりに書いた次の文にも一致しています。

エクステント�bO0のブロックアローケーションエリアには、前から5番目の位置にブロック�bO076があります。
エクステント�bO3には前から3番目の位置にブロック�bO073があります。
エクステント�bO7には前から4番目の位置にブロック�bO074があります。
エクステント�bO1には前から2番目の位置にブロック�bO075があります。

なおエクステント�bO0だけは出現する順に関係なく、必ず最初に作成されます。

自分の頭ではわかっているのですけれど、なかなか要領良く説明することができません。
[第103回]でも同様のことについて説明していますので、そちらも参照していただければ、と思います。

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

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