Rev 4700 | Rev 5363 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4700 | Rev 4711 | ||
---|---|---|---|
Line 3... | Line 3... | ||
3 | ;; Copyright (C) KolibriOS team 2004-2013. All rights reserved. ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2013. All rights reserved. ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
5 | ;; ;; |
5 | ;; ;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 7... | Line 7... | ||
7 | 7 | ||
Line 8... | Line 8... | ||
8 | $Revision: 4700 $ |
8 | $Revision: 4711 $ |
9 | 9 | ||
10 | search_partitions: |
10 | search_partitions: |
11 | push ecx |
11 | push ecx |
Line 41... | Line 41... | ||
41 | ; 2a. /hd0: exists if mask 0x40 in [DRIVE_DATA+1] is set, |
41 | ; 2a. /hd0: exists if mask 0x40 in [DRIVE_DATA+1] is set, |
42 | ; data: hd0_data, |
42 | ; data: hd0_data, |
43 | ; number of partitions: [DRIVE_DATA+2] |
43 | ; number of partitions: [DRIVE_DATA+2] |
44 | test [DRIVE_DATA+1], byte 0x40 |
44 | test [DRIVE_DATA+1], byte 0x40 |
45 | jz @f |
45 | jz @f |
46 | DEBUGF 1, "K : HD0\n" |
- | |
- | 46 | ||
47 | push 'hd0' |
47 | push 'hd0' |
48 | mov eax, esp ; name |
48 | mov eax, esp ; name |
49 | mov edx, hd0_data |
49 | mov edx, hd0_data |
50 | call ide_disk_add |
50 | call ide_disk_add |
51 | mov [DRIVE_DATA+2], al |
51 | mov [DRIVE_DATA+2], al |
Line 55... | Line 55... | ||
55 | ; 2b. /hd1: exists if mask 0x10 in [DRIVE_DATA+1] is set, |
55 | ; 2b. /hd1: exists if mask 0x10 in [DRIVE_DATA+1] is set, |
56 | ; data: hd1_data, |
56 | ; data: hd1_data, |
57 | ; number of partitions: [DRIVE_DATA+3] |
57 | ; number of partitions: [DRIVE_DATA+3] |
58 | test [DRIVE_DATA+1], byte 0x10 |
58 | test [DRIVE_DATA+1], byte 0x10 |
59 | jz @f |
59 | jz @f |
60 | DEBUGF 1, "K : HD1\n" |
- | |
- | 60 | ||
61 | push 'hd1' |
61 | push 'hd1' |
62 | mov eax, esp |
62 | mov eax, esp |
63 | mov edx, hd1_data |
63 | mov edx, hd1_data |
64 | call ide_disk_add |
64 | call ide_disk_add |
65 | mov [DRIVE_DATA+3], al |
65 | mov [DRIVE_DATA+3], al |
Line 69... | Line 69... | ||
69 | ; 2c. /hd2: exists if mask 4 in [DRIVE_DATA+1] is set, |
69 | ; 2c. /hd2: exists if mask 4 in [DRIVE_DATA+1] is set, |
70 | ; data: hd2_data, |
70 | ; data: hd2_data, |
71 | ; number of partitions: [DRIVE_DATA+4] |
71 | ; number of partitions: [DRIVE_DATA+4] |
72 | test [DRIVE_DATA+1], byte 4 |
72 | test [DRIVE_DATA+1], byte 4 |
73 | jz @f |
73 | jz @f |
74 | DEBUGF 1, "K : HD2\n" |
- | |
- | 74 | ||
75 | push 'hd2' |
75 | push 'hd2' |
76 | mov eax, esp |
76 | mov eax, esp |
77 | mov edx, hd2_data |
77 | mov edx, hd2_data |
78 | call ide_disk_add |
78 | call ide_disk_add |
79 | mov [DRIVE_DATA+4], al |
79 | mov [DRIVE_DATA+4], al |
Line 83... | Line 83... | ||
83 | ; 2d. /hd3: exists if mask 1 in [DRIVE_DATA+1] is set, |
83 | ; 2d. /hd3: exists if mask 1 in [DRIVE_DATA+1] is set, |
84 | ; data: hd3_data, |
84 | ; data: hd3_data, |
85 | ; number of partitions: [DRIVE_DATA+5] |
85 | ; number of partitions: [DRIVE_DATA+5] |
86 | test [DRIVE_DATA+1], byte 1 |
86 | test [DRIVE_DATA+1], byte 1 |
87 | jz @f |
87 | jz @f |
88 | DEBUGF 1, "K : HD3\n" |
- | |
- | 88 | ||
89 | push 'hd3' |
89 | push 'hd3' |
90 | mov eax, esp |
90 | mov eax, esp |
91 | mov edx, hd3_data |
91 | mov edx, hd3_data |
92 | call ide_disk_add |
92 | call ide_disk_add |
93 | mov [DRIVE_DATA+5], al |
93 | mov [DRIVE_DATA+5], al |
Line 97... | Line 97... | ||
97 | ; 2e. /hd4: exists if mask 0x40 in [DRIVE_DATA+6] is set, |
97 | ; 2e. /hd4: exists if mask 0x40 in [DRIVE_DATA+6] is set, |
98 | ; data: hd4_data, |
98 | ; data: hd4_data, |
99 | ; number of partitions: [DRIVE_DATA+7] |
99 | ; number of partitions: [DRIVE_DATA+7] |
100 | test [DRIVE_DATA+6], byte 0x40 |
100 | test [DRIVE_DATA+6], byte 0x40 |
101 | jz @f |
101 | jz @f |
102 | DEBUGF 1, "K : HD4\n" |
- | |
- | 102 | ||
103 | push 'hd4' |
103 | push 'hd4' |
104 | mov eax, esp ; name |
104 | mov eax, esp ; name |
105 | mov edx, hd4_data |
105 | mov edx, hd4_data |
106 | call ide_disk_add |
106 | call ide_disk_add |
107 | mov [DRIVE_DATA+7], al |
107 | mov [DRIVE_DATA+7], al |
Line 111... | Line 111... | ||
111 | ; 2f. /hd5: exists if mask 0x10 in [DRIVE_DATA+6] is set, |
111 | ; 2f. /hd5: exists if mask 0x10 in [DRIVE_DATA+6] is set, |
112 | ; data: hd5_data, |
112 | ; data: hd5_data, |
113 | ; number of partitions: [DRIVE_DATA+8] |
113 | ; number of partitions: [DRIVE_DATA+8] |
114 | test [DRIVE_DATA+6], byte 0x10 |
114 | test [DRIVE_DATA+6], byte 0x10 |
115 | jz @f |
115 | jz @f |
116 | DEBUGF 1, "K : HD5\n" |
- | |
- | 116 | ||
117 | push 'hd5' |
117 | push 'hd5' |
118 | mov eax, esp |
118 | mov eax, esp |
119 | mov edx, hd5_data |
119 | mov edx, hd5_data |
120 | call ide_disk_add |
120 | call ide_disk_add |
121 | mov [DRIVE_DATA+8], al |
121 | mov [DRIVE_DATA+8], al |
Line 125... | Line 125... | ||
125 | ; 2g. /hd6: exists if mask 4 in [DRIVE_DATA+6] is set, |
125 | ; 2g. /hd6: exists if mask 4 in [DRIVE_DATA+6] is set, |
126 | ; data: hd6_data, |
126 | ; data: hd6_data, |
127 | ; number of partitions: [DRIVE_DATA+9] |
127 | ; number of partitions: [DRIVE_DATA+9] |
128 | test [DRIVE_DATA+6], byte 4 |
128 | test [DRIVE_DATA+6], byte 4 |
129 | jz @f |
129 | jz @f |
130 | DEBUGF 1, "K : HD6\n" |
- | |
- | 130 | ||
131 | push 'hd6' |
131 | push 'hd6' |
132 | mov eax, esp |
132 | mov eax, esp |
133 | mov edx, hd6_data |
133 | mov edx, hd6_data |
134 | call ide_disk_add |
134 | call ide_disk_add |
135 | mov [DRIVE_DATA+9], al |
135 | mov [DRIVE_DATA+9], al |
Line 139... | Line 139... | ||
139 | ; 2h. /hd7: exists if mask 1 in [DRIVE_DATA+6] is set, |
139 | ; 2h. /hd7: exists if mask 1 in [DRIVE_DATA+6] is set, |
140 | ; data: hd7_data, |
140 | ; data: hd7_data, |
141 | ; number of partitions: [DRIVE_DATA+10] |
141 | ; number of partitions: [DRIVE_DATA+10] |
142 | test [DRIVE_DATA+6], byte 1 |
142 | test [DRIVE_DATA+6], byte 1 |
143 | jz @f |
143 | jz @f |
144 | DEBUGF 1, "K : HD7\n" |
- | |
- | 144 | ||
145 | push 'hd7' |
145 | push 'hd7' |
146 | mov eax, esp |
146 | mov eax, esp |
147 | mov edx, hd7_data |
147 | mov edx, hd7_data |
148 | call ide_disk_add |
148 | call ide_disk_add |
149 | mov [DRIVE_DATA+10], al |
149 | mov [DRIVE_DATA+10], al |
Line 153... | Line 153... | ||
153 | ; 2i. /hd8: exists if mask 0x40 in [DRIVE_DATA+11] is set, |
153 | ; 2i. /hd8: exists if mask 0x40 in [DRIVE_DATA+11] is set, |
154 | ; data: hd8_data, |
154 | ; data: hd8_data, |
155 | ; number of partitions: [DRIVE_DATA+12] |
155 | ; number of partitions: [DRIVE_DATA+12] |
156 | test [DRIVE_DATA+11], byte 0x40 |
156 | test [DRIVE_DATA+11], byte 0x40 |
157 | jz @f |
157 | jz @f |
158 | DEBUGF 1, "K : HD8\n" |
- | |
- | 158 | ||
159 | push 'hd8' |
159 | push 'hd8' |
160 | mov eax, esp ; name |
160 | mov eax, esp ; name |
161 | mov edx, hd8_data |
161 | mov edx, hd8_data |
162 | call ide_disk_add |
162 | call ide_disk_add |
163 | mov [DRIVE_DATA+12], al |
163 | mov [DRIVE_DATA+12], al |
Line 167... | Line 167... | ||
167 | ; 2j. /hd9: exists if mask 0x10 in [DRIVE_DATA+11] is set, |
167 | ; 2j. /hd9: exists if mask 0x10 in [DRIVE_DATA+11] is set, |
168 | ; data: hd9_data, |
168 | ; data: hd9_data, |
169 | ; number of partitions: [DRIVE_DATA+13] |
169 | ; number of partitions: [DRIVE_DATA+13] |
170 | test [DRIVE_DATA+11], byte 0x10 |
170 | test [DRIVE_DATA+11], byte 0x10 |
171 | jz @f |
171 | jz @f |
172 | DEBUGF 1, "K : HD9\n" |
- | |
- | 172 | ||
173 | push 'hd9' |
173 | push 'hd9' |
174 | mov eax, esp |
174 | mov eax, esp |
175 | mov edx, hd9_data |
175 | mov edx, hd9_data |
176 | call ide_disk_add |
176 | call ide_disk_add |
177 | mov [DRIVE_DATA+13], al |
177 | mov [DRIVE_DATA+13], al |
Line 181... | Line 181... | ||
181 | ; 2k. /hd10: exists if mask 4 in [DRIVE_DATA+11] is set, |
181 | ; 2k. /hd10: exists if mask 4 in [DRIVE_DATA+11] is set, |
182 | ; data: hd10_data, |
182 | ; data: hd10_data, |
183 | ; number of partitions: [DRIVE_DATA+14] |
183 | ; number of partitions: [DRIVE_DATA+14] |
184 | test [DRIVE_DATA+14], byte 4 |
184 | test [DRIVE_DATA+14], byte 4 |
185 | jz @f |
185 | jz @f |
186 | DEBUGF 1, "K : HD10\n" |
- | |
- | 186 | ||
187 | push 'hd10' |
187 | push 'hd10' |
188 | mov eax, esp |
188 | mov eax, esp |
189 | mov edx, hd10_data |
189 | mov edx, hd10_data |
190 | call ide_disk_add |
190 | call ide_disk_add |
191 | mov [DRIVE_DATA+9], al |
191 | mov [DRIVE_DATA+9], al |
Line 195... | Line 195... | ||
195 | ; 2l. /hd11: exists if mask 1 in [DRIVE_DATA+11] is set, |
195 | ; 2l. /hd11: exists if mask 1 in [DRIVE_DATA+11] is set, |
196 | ; data: hd11_data, |
196 | ; data: hd11_data, |
197 | ; number of partitions: [DRIVE_DATA+15] |
197 | ; number of partitions: [DRIVE_DATA+15] |
198 | test [DRIVE_DATA+11], byte 1 |
198 | test [DRIVE_DATA+11], byte 1 |
199 | jz @f |
199 | jz @f |
200 | DEBUGF 1, "K : HD11\n" |
- | |
- | 200 | ||
201 | push 'hd11' |
201 | push 'hd11' |
202 | mov eax, esp |
202 | mov eax, esp |
203 | mov edx, hd11_data |
203 | mov edx, hd11_data |
204 | call ide_disk_add |
204 | call ide_disk_add |
205 | mov [DRIVE_DATA+15], al |
205 | mov [DRIVE_DATA+15], al |
Line 252... | Line 252... | ||
252 | inc esi |
252 | inc esi |
253 | cmp esi, [NumBiosDisks] |
253 | cmp esi, [NumBiosDisks] |
254 | jnz .bdloop |
254 | jnz .bdloop |
255 | pop ecx ecx ; restore stack after name |
255 | pop ecx ecx ; restore stack after name |
256 | .nobd: |
256 | .nobd: |
257 | DEBUGF 1, "K : jmp end_search_partitions\n" |
- | |
258 | jmp end_search_partitions |
257 | jmp end_search_partitions |
259 | ;----------------------------------------------------------------------------- |
258 | ;----------------------------------------------------------------------------- |
260 | ; Helper procedure for search_partitions, adds one IDE disk. |
259 | ; Helper procedure for search_partitions, adds one IDE disk. |
261 | ; For compatibility, number of partitions for IDE disks is kept in a separate |
260 | ; For compatibility, number of partitions for IDE disks is kept in a separate |
262 | ; variable, so the procedure returns number of partitions. |
261 | ; variable, so the procedure returns number of partitions. |