Subversion Repositories Kolibri OS

Rev

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.