-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathLDFCB.TXT
More file actions
179 lines (115 loc) · 6.83 KB
/
LDFCB.TXT
File metadata and controls
179 lines (115 loc) · 6.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
・LSX-Dodgers
・File Control Block
・(FCB ファイルコントロールブロック) 37バイト
※CP/M互換のファイルアクセスでは36バイト
<オフセット> <サイズ> <内容>
+ 0 *1 1バイト ドライブ番号
(0:カレントドライブ,1:ドライブA
2:ドライブB,……,8:ドライブH)
+ 1 *1 8バイト 主ファイル名(残りはスペース$20を格納)
+ 9 *1 3バイト 拡張子(残りはスペース$20を格納)
+12 1バイト カレントブロック/セクタインデックス
ファイルのオープンや、検索、作成、削除の場合
セクタインデックスとして働き、それ以外の通常はカレントブロックとして働く
カレントブロックはCP/M互換のファイルアクセスで使用するファイルの先頭から現在のブロックまでのブロック数
MSX-DOSの場合、カレントブロックは2バイトで下位バイトから格納されている
+13 *2*3 1バイト 属性(アトリビュート)、ビットが1なら有効
bit7 ~ bit6:0
bit5:通常ファイル
bit4:ディレクトリ
bit3:ボリューム名
bit2:システム属性
bit1:不可視属性
bit0:書き込み禁止属性
+14 *1*2 2バイト レコードサイズ/アクセスするディレクトリのクラスタ番号+1
(カレントディレクトリの場合は0)
ファイルのオープンや、検索、作成、削除の場合、ディレクトリのクラスタ番号として働き
ランダムブロックアクセスの場合、レコードサイズとして働く。レコードサイズは1にする。
+16 *2 4バイト ファイルのサイズ(バイト単位)
下位バイトから格納されている
+20 *2 2バイト 更新年月日
+21 +20
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
Y Y Y Y Y Y Y M M M M D D D D D
\ 年-1980 /\ 月 /\ 日 /
0~99 1~12 1~31
9-15ビットが年-1980、5-8ビットが月、0-4ビットが日
+22 *2 2バイト 更新時刻
+23 +22
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
T T T T T M M M M M M S S S S S
\ 時 / \ 分 / \秒÷2/
0~23 0~59 0~29
1-15ビットが時、5-10ビットが分、0-4ビットが秒÷2
+24 *2*3 1バイト 未使用
+25 *2 1バイト ディレクトリロケーション
アクセスしているファイルのバッファ上でのディレクトリエントリの位置
+26 *2 2バイト ファイルの先頭クラスタ
下位バイトから格納されている
+28 *2*3 1バイト オープンモード
$FF:リードモード
$FE:ライトモード
$FD:デバイスディスクプリタ
その他:オープンしていない
ファイルをオープンをすると$FFとなり
ファイルに書き込みがあると$FEとなる
+29 *2*3 1バイト ディレクトリオプション
$00:ルートディレクトリ
その他:サブディレクトリ
bit7:1
bit0-6:セクタインデックス
+30 *2*3 2バイト ディレクトリポジション
アクセスしているファイルのディレクトリエントリ
のあるクラスタ番号。ルートディレクトリの場合は
論理セクタ番号
下位バイトから格納されている
+32 1バイト カレントレコード
CP/M互換のファイルアクセスで使用する現在参照中のレコード
bit7はCP/M互換ファイルアクセスから内部でMSX-DOS互換のランダムブロックアクセスが呼ばれる際にセットされる
このビットがセットされている場合はランダムレコードが3バイトとして動作する
+33 4バイト ランダムレコード
下位バイトから格納されている
ランダムブロックアクセスの場合、4バイトでCP/M互換のファイルアクセスでは3バイトで動作する
+32のカレントレコードのbit7が1の場合は3バイトで動作する
MSX-DOSの場合、レコードサイズが64未満の場合4バイトで64以上の場合は3バイトで動作する
*1 オープンする際に設定しておく部分
*2 CP/M80と異なる部分
*3 MSX-DOSと異なる部分
※FCB備考
FCB(ファイルコントロールブロック)はファイルの入出力の際に、ファイル
名などのファイル情報をメモリ上に格納している領域である。
ファイルをオープン等する際、ドライブ番号が0(カレントドライブ)の場合、
実ドライブ(1~8)に変換される。
システムコールではワイルドカードの「*」は展開されないので適当数の「?」
に展開しておくこと。
CP/M方式のファイルのアクセスは128バイト単位のレコードで処理される。
つまり1レコードは128バイトである。また、レコード0から始まり、
例えばレコード1はファイルの先頭から128バイト目から128バイト分を示す。
CP/M方式のシーケンシャルアクセスの場合、カレントブロックとカレント
レコードから計算されるレコードがアクセスされる。アクセスされると次のレコードを
指すようにカレントブロックとカレントレコードがセットされる。
カレントブロックとカレントレコードから求められるレコード番号の計算方法
アクセスされるレコード番号=カレントブロック×128+カレントレコード
ファイルのオープンではカレントレコードが0でクリアされない為、
シーケンシャルアクセスでファイルの先頭からアクセスする場合、
カレントレコードを0でクリアする必要がある。
CP/M方式のランダムアクセスの場合、ランダムレコードにセットされたレコードを
アクセスする。ランダムレコードは変化しない。
LDではランダムブロックアクセスの場合のレコードサイズは1しか指定することが
できない。1レコードは1バイトになる。
ランダムブロックアクセスのファイルアクセスではランダムレコードに
セットされたファイルポインタからHLバイト読み書きする。
ランダムレコードはアクセスされた分だけ増加する。
CP/M80の場合
・FCB 36バイト
+13 *3 1バイト 非公開
+14 *3 1バイト 0
+15 *3 1バイト レコード数
+16 *3 16バイト ファイル本体が格納されているブロックの
ブロックアドレス
MSX-DOSの場合
+14 *2 2バイト レコード・サイズ
+24 *2 1バイト デバイスID
+28 *2 2バイト 最後にアクセスしたクラスタ番号
+30 *2 2バイト ファイルの開始クラスタからの相対位置
eof