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

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

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