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