復活!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
前へ
次へ
ホームページトップへ戻る