-
Notifications
You must be signed in to change notification settings - Fork 6
/
LDDPB.TXT
160 lines (100 loc) · 4.7 KB
/
LDDPB.TXT
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
・LSX-Dodgers
・DPB(ドライブパラメータブロック) 32バイト
<オフセット> <サイズ> <内容>
+$00 *2*3 2バイト FAT領域のセクタ単位でのサイズ(DPB_FATLN)
0の場合はこのドライブは使われていない。
+$02 *2 2バイト 1セクタ読み込みルーチンの実行アドレス(DPB_DRD)
+$04 *2 2バイト 1セクタ書き込みルーチンの実行アドレス(DPB_DWT)
+$06 *3 1バイト メディアバイト(DPB_FATID)
$FF: 2D (320KB)
$FD: 2D (360KB)
$FB: 2DD (640KB)
$F9: 2DD (720KB)
$F9: 2HC (1.2MB)
$FE: 2HD (1.25MB)
$F0: 2HQ (1.44MB)
$FA: RAMディスク
$F8: ハードディスク
※通常、FATの先頭に書き込まれている。旧バージョンではメディアバイトでメディアを判別していたが、現バージョンはBPBで判別しているので重要ではない。
BPBを使用しない場合はFATの先頭がメディアバイトと同じがチェックして同じなら有効なディスクと判断している。
+$07 *2*3 1バイト 1クラスタの論理セクタ数(DPB_SECPCL)
1,2,4,8,16,32,64,128のみ可
※通常は1セクタが512バイトなので、アロケーションユニットサイズは最大64Kになる。
+$08 2バイト 総クラスタ数(DPB_MAXCL)
(使用出来ない0クラスタと1クラスタを含む)
+$0A 1バイト フロッピーディスクのモード(DPB_FDMODE)
$FF:2D/2DD
$FE:2HD
※内蔵フロッピーディスクドライバ専用。他のデバイスでは自由に使ってよい。
$0B *2*3 1バイト ルートディレクトリ領域の論理セクタ数(DPB_DIRSCNT)
+$0C *3 1バイト フロッピーディスクのシリンダ数(DPB_MAXCYL)
※内蔵フロッピーディスクドライバ専用。他のデバイスでは自由に使ってよい。
+$0D *3 1バイト フロッピーディスクの1トラックのセクタ数(DPB_MAXSEC)
※内蔵フロッピーディスクドライバ専用。他のデバイスでは自由に使ってよい。
+$0E *3 1バイト FAT領域の先頭論理セクタ番号(DPB_FATPS)
+$0F *2*3 1バイト FAT情報と論理セクタのサイズ(DPB_BPS)
bit7:予備FAT領域
1:使用する
0:使用しない
bit5:FAT16
1:FAT16
0:FAT12
bit2-bit0: 論理セクタのサイズ(最大1KB)
1:256バイト
2:512バイト
4:1024バイト
+$10 *3 2バイト ルートディレクトリ領域の先頭論理セクタ番号(DPB_DIRPS)
+$12 *2 1バイト デバイス情報(DPB_DEVICE)
bit7:FDモード切り替え(2D(2DD)/2HD)
1:フロッピーディスクのFDモードを切り替える
0:フロッピーディスクのFDモードを切り替えない
bit5:BIOS Parameter Block読み取り
1:BPBからDPBを作成する
0:BPBからDPBを作成しない
bit3-bit0:デバイス番号
$05:G-RAM
$06:EMM
$07:フロッピー
$09:ハードディスク
$0B:B-RAM/EMEM
$0C:CMOS
$0D:DISK
$0E:ROM DISK
$0F:RAM FILE
+$13 1バイト デバイスドライバ内におけるユニット番号(DPB_UNITNO)
+$14 2バイト データ格納領域の先頭論理セクタ番号(DPB_ADDCL)
(使用出来ない0クラスタと1クラスタ分ずらす:2 × 1クラスタの論理セクタ数)
+$16 *2 4バイト 未使用
+$1A 2バイト カレントディレクトリのクラスタ番号(DPB_SDIR)
0の場合はルートディレクトリ
+$1C 4バイト デバイスの名前(DPB_NAME)
*2 L-os Angelesと異なる部分
*3 BPBからDPBを作成する場合は設定不要
※DPB備考
バージョン1.30から+$07及び+$0Fの仕様が変わりました。
バージョン1.33からFAT16に対応するためいくつかの仕様が変わりました。
DPBの構造はCP/M80ともMSX-DOSとも異なっています。
+$02 1セクタ読み込みルーチンの引数と戻り値
;READ SECTOR
;in
; IX : DPB
; B : number of sectors to read
; CDE : sector number
; HL : memory address
;out
; CF : 0=no error,1=error
; CDE : next sector
; HL : next address
+$04 1セクタ書き込みルーチンの引数と戻り値
;WRITE SECTOR
;in
; IX : DPB
; B : number of sectors to write
; CDE : sector number
; HL : memory address
;out
; CF : 0=no error,1=error
; CDE : next sector
; HL : next address
※CDEで24ビットとして扱いますが、そのデバイスがサイズが小さくて16ビットしか扱わない場合はCの値は無視しても良いですし、8ビットしか扱わない場合はDも無視して良いです。
eof