Subversion Repositories Kolibri OS

Rev

Rev 593 | Rev 750 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 593 Rev 709
Line 1... Line 1...
1
$Revision: 0 $
1
$Revision: 0 $
Line 2... Line -...
2
 
-
 
3
 
-
 
4
;cache_ide0_pointer          dd 0
-
 
5
;cache_ide0_size             dd 0   ; not use
-
 
6
;cache_ide0_data_pointer     dd 0
-
 
7
;cache_ide0_system_data_size dd 0   ; not use
-
 
8
;cache_ide0_appl_data_size   dd 0   ; not use
-
 
9
;cache_ide0_system_data      dd 0
-
 
10
;cache_ide0_appl_data        dd 0
-
 
11
;cache_ide0_system_sad_size  dd 0
-
 
12
;cache_ide0_appl_sad_size    dd 0
-
 
13
 
2
 
Line 14... Line 3...
14
    pusha
3
    pusha
15
 
4
 
16
    mov  eax,[pg_data.pages_free]
5
    mov  eax,[pg_data.pages_free]
Line 37... Line 26...
37
    mov  [cache_ide1_size],eax
26
    mov  [cache_ide1_size],eax
38
    mov  [cache_ide2_size],eax
27
    mov  [cache_ide2_size],eax
39
    mov  [cache_ide3_size],eax
28
    mov  [cache_ide3_size],eax
40
    xor  eax,eax
29
    xor  eax,eax
41
    mov  [cache_ide0_search_start],eax
30
    mov  [hdd_appl_data],1  ;al
42
    mov  [cache_ide0_appl_search_start],eax
-
 
43
    mov  [cache_ide1_search_start],eax
-
 
44
    mov  [cache_ide1_appl_search_start],eax
-
 
45
    mov  [cache_ide2_search_start],eax
-
 
46
    mov  [cache_ide2_appl_search_start],eax
-
 
47
    mov  [cache_ide3_search_start],eax
-
 
48
    mov  [cache_ide3_appl_search_start],eax
-
 
49
    mov  [hdd_appl_data],1  ;al
-
 
50
    mov  [cd_appl_data],1
31
    mov  [cd_appl_data],1
51
    
32
    
Line 52... Line 33...
52
    mov  cl,[DRIVE_DATA+1]
33
    mov  ch,[DRIVE_DATA+1]
53
    mov  ch,cl
34
    mov  cl,ch
54
    and  cl,11b
35
    and  cl,11b
55
    cmp cl,0
-
 
56
    je	.ide2
36
    je	.ide2
-
 
37
    mov  esi,cache_ide3
57
    call get_cache_ide3
38
    call get_cache_ide
58
.ide2:
39
.ide2:
59
    mov  cl,ch
40
    mov  cl,ch
60
    and  cl,1100b
41
    shr  cl,2
61
    cmp cl,0
42
    and  cl,11b
62
    je	.ide1
43
    je	.ide1
-
 
44
    mov  esi,cache_ide2
63
    call get_cache_ide2
45
    call get_cache_ide
64
.ide1:
46
.ide1:
65
    mov  cl,ch
47
    mov  cl,ch
66
    and  cl,110000b
48
    shr  cl,4
67
    cmp cl,0
49
    and  cl,11b
68
    je	.ide0
50
    je	.ide0
-
 
51
    mov  esi,cache_ide1
69
    call get_cache_ide1
52
    call get_cache_ide
70
.ide0:
53
.ide0:
71
    mov  cl,ch
54
    mov  cl,ch
72
    and  cl,11000000b
55
    shr  cl,6
73
    cmp cl,0
56
    and  cl,11b
74
    je	end_get_cache
57
    je	@f
75
    call get_cache_ide0
58
    mov  esi,cache_ide0
76
    jmp  end_get_cache
59
    call get_cache_ide
77
 
60
@@:
78
get_cache_ide0:
61
    xor ecx,ecx
79
    push  ecx
62
    cmp [NumBiosDisks],ecx
80
    stdcall kernel_alloc,[cache_ide0_size]
63
    jz  .endbd
81
    mov [cache_ide0_pointer],eax
64
    mov esi,BiosDiskCaches
82
    pop   ecx
65
.loopbd:
-
 
66
    cmp byte [BiosDisksData+ecx*4+2],-1
83
    mov  edx,eax
67
    jnz .contbd
84
    mov  eax,[cache_ide0_size]
68
    mov eax,[cache_ide0_size]
85
    shr  eax,3
-
 
86
    mov  [cache_ide0_system_data_size],eax
69
    mov [esi+cache_ide0_size-cache_ide0],eax
87
    mov  ebx,eax
-
 
88
    imul eax,7
-
 
89
    mov  [cache_ide0_appl_data_size],eax
-
 
90
    add  ebx,edx
-
 
91
    mov  [cache_ide0_data_pointer],ebx
-
 
92
 
-
 
93
    cmp cl,10000000b
-
 
94
    je	.cd
-
 
95
    push ecx
-
 
96
    mov  eax,[cache_ide0_system_data_size]
-
 
97
    call calculate_for_hd
-
 
98
    add  eax,[cache_ide0_pointer]
-
 
99
    mov  [cache_ide0_system_data],eax
-
 
100
    mov  [cache_ide0_system_sad_size],ecx
-
 
101
 
-
 
102
    push  edi
-
 
103
    mov   edi,[cache_ide0_pointer]
-
 
104
    call  clear_ide_cache
-
 
105
    pop   edi
-
 
106
 
-
 
107
    mov  eax,[cache_ide0_appl_data_size]
-
 
108
    call calculate_for_hd
-
 
109
    add  eax,[cache_ide0_data_pointer]
-
 
110
    mov  [cache_ide0_appl_data],eax
-
 
111
    mov  [cache_ide0_appl_sad_size],ecx
-
 
112
 
-
 
113
    push  edi
-
 
114
    mov   edi,[cache_ide0_data_pointer]
-
 
115
    call  clear_ide_cache
-
 
116
    pop   edi
-
 
117
 
-
 
118
    pop  ecx
-
 
119
    ret
-
 
120
.cd:
-
 
121
    push ecx
-
 
122
    mov  eax,[cache_ide0_system_data_size]
-
 
123
    call calculate_for_cd
-
 
124
    add  eax,[cache_ide0_pointer]
-
 
125
    mov  [cache_ide0_system_data],eax
-
 
126
    mov  [cache_ide0_system_sad_size],ecx
-
 
127
 
-
 
128
    push  edi
-
 
129
    mov   edi,[cache_ide0_pointer]
-
 
130
    call  clear_ide_cache
-
 
131
    pop   edi
-
 
132
 
-
 
133
    mov  eax,[cache_ide0_appl_data_size]
-
 
134
    call calculate_for_cd
-
 
135
    add  eax,[cache_ide0_data_pointer]
-
 
136
    mov  [cache_ide0_appl_data],eax
-
 
137
    mov  [cache_ide0_appl_sad_size],ecx
-
 
138
 
-
 
139
    push  edi
-
 
140
    mov   edi,[cache_ide0_data_pointer]
-
 
141
    call  clear_ide_cache
-
 
142
    pop   edi
-
 
143
 
-
 
144
    pop  ecx
-
 
145
    ret
-
 
146
 
-
 
147
get_cache_ide1:
-
 
148
    push  ecx
-
 
149
    stdcall kernel_alloc,[cache_ide1_size]
-
 
150
    mov [cache_ide1_pointer],eax
-
 
151
    pop   ecx
-
 
152
    mov  edx,eax
-
 
153
    mov  eax,[cache_ide1_size]
-
 
154
    shr  eax,3
-
 
155
    mov  [cache_ide1_system_data_size],eax
-
 
156
    mov  ebx,eax
-
 
157
    imul eax,7
-
 
158
    mov  [cache_ide1_appl_data_size],eax
-
 
159
    add  ebx,edx
-
 
160
    mov  [cache_ide1_data_pointer],ebx
-
 
161
 
-
 
162
    cmp cl,100000b
-
 
163
    je	.cd
-
 
164
    push ecx
-
 
165
    mov  eax,[cache_ide1_system_data_size]
-
 
166
    call calculate_for_hd
-
 
167
    add  eax,[cache_ide1_pointer]
-
 
168
    mov  [cache_ide1_system_data],eax
-
 
169
    mov  [cache_ide1_system_sad_size],ecx
-
 
170
 
-
 
171
    push  edi
-
 
172
    mov   edi,[cache_ide1_pointer]
-
 
173
    call  clear_ide_cache
-
 
174
    pop   edi
-
 
175
 
-
 
176
    mov  eax,[cache_ide1_appl_data_size]
-
 
177
    call calculate_for_hd
-
 
178
    add  eax,[cache_ide1_data_pointer]
-
 
179
    mov  [cache_ide1_appl_data],eax
-
 
180
    mov  [cache_ide1_appl_sad_size],ecx
-
 
181
 
-
 
182
    push  edi
-
 
183
    mov   edi,[cache_ide1_data_pointer]
-
 
184
    call  clear_ide_cache
-
 
185
    pop   edi
-
 
186
 
-
 
187
    pop  ecx
-
 
188
    ret
-
 
189
.cd:
-
 
190
    push ecx
70
    push ecx
191
    mov  eax,[cache_ide1_system_data_size]
-
 
192
    call calculate_for_cd
-
 
193
    add  eax,[cache_ide1_pointer]
-
 
194
    mov  [cache_ide1_system_data],eax
-
 
195
    mov  [cache_ide1_system_sad_size],ecx
-
 
196
 
-
 
197
    push  edi
-
 
198
    mov   edi,[cache_ide1_pointer]
-
 
199
    call  clear_ide_cache
-
 
200
    pop   edi
71
    mov  cl,1
201
 
-
 
202
    mov  eax,[cache_ide1_appl_data_size]
-
 
203
    call calculate_for_cd
-
 
204
    add  eax,[cache_ide1_data_pointer]
-
 
205
    mov  [cache_ide1_appl_data],eax
-
 
206
    mov  [cache_ide1_appl_sad_size],ecx
-
 
207
 
-
 
208
    push  edi
-
 
209
    mov   edi,[cache_ide1_data_pointer]
-
 
210
    call  clear_ide_cache
72
    call get_cache_ide
211
    pop   edi
-
 
212
 
-
 
213
    pop  ecx
-
 
214
    ret
-
 
215
 
-
 
216
get_cache_ide2:
-
 
217
    push  ecx
-
 
218
    stdcall kernel_alloc,[cache_ide2_size]
-
 
219
    mov [cache_ide2_pointer],eax
-
 
220
    pop   ecx
73
    pop  ecx
221
    mov  edx,eax
-
 
222
    mov  eax,[cache_ide2_size]
-
 
223
    shr  eax,3
-
 
224
    mov  [cache_ide2_system_data_size],eax
-
 
225
    mov  ebx,eax
-
 
226
    imul eax,7
-
 
227
    mov  [cache_ide2_appl_data_size],eax
-
 
228
    add  ebx,edx
-
 
229
    mov  [cache_ide2_data_pointer],ebx
-
 
230
 
-
 
231
    cmp cl,1000b
-
 
232
    je	.cd
-
 
233
    push ecx
-
 
234
    mov  eax,[cache_ide2_system_data_size]
-
 
235
    call calculate_for_hd
-
 
236
    add  eax,[cache_ide2_pointer]
-
 
237
    mov  [cache_ide2_system_data],eax
-
 
238
    mov  [cache_ide2_system_sad_size],ecx
-
 
239
 
-
 
240
    push  edi
-
 
241
    mov   edi,[cache_ide2_pointer]
-
 
242
    call  clear_ide_cache
-
 
243
    pop   edi
74
.contbd:
244
 
-
 
245
    mov  eax,[cache_ide2_appl_data_size]
-
 
246
    call calculate_for_hd
-
 
247
    add  eax,[cache_ide2_data_pointer]
75
    add  esi,cache_ide1-cache_ide0
248
    mov  [cache_ide2_appl_data],eax
-
 
249
    mov  [cache_ide2_appl_sad_size],ecx
-
 
250
 
-
 
251
    push  edi
76
    inc  ecx
252
    mov   edi,[cache_ide2_data_pointer]
-
 
253
    call  clear_ide_cache
77
    cmp  ecx,[NumBiosDisks]
254
    pop   edi
78
    jb   .loopbd
255
 
-
 
256
    pop  ecx
-
 
257
    ret
-
 
258
.cd:
79
.endbd:
259
    push ecx
-
 
260
    mov  eax,[cache_ide2_system_data_size]
-
 
261
    call calculate_for_cd
-
 
262
    add  eax,[cache_ide2_pointer]
-
 
263
    mov  [cache_ide2_system_data],eax
-
 
264
    mov  [cache_ide2_system_sad_size],ecx
-
 
265
 
-
 
266
    push  edi
-
 
267
    mov   edi,[cache_ide2_pointer]
-
 
268
    call  clear_ide_cache
-
 
269
    pop   edi
-
 
270
 
-
 
271
    mov  eax,[cache_ide2_appl_data_size]
-
 
272
    call calculate_for_cd
-
 
273
    add  eax,[cache_ide2_data_pointer]
-
 
274
    mov  [cache_ide2_appl_data],eax
-
 
275
    mov  [cache_ide2_appl_sad_size],ecx
-
 
276
 
-
 
277
    push  edi
-
 
278
    mov   edi,[cache_ide2_data_pointer]
-
 
279
    call  clear_ide_cache
80
    jmp  end_get_cache
280
    pop   edi
-
 
281
 
-
 
282
    pop  ecx
-
 
283
    ret
-
 
Line 284... Line 81...
284
 
81
 
-
 
82
get_cache_ide:
-
 
83
    and  [esi+cache_ide0_search_start-cache_ide0],0
285
get_cache_ide3:
84
    and  [esi+cache_ide0_appl_search_start-cache_ide0],0
286
    push  ecx
85
    push  ecx
287
    stdcall kernel_alloc,[cache_ide3_size]
86
    stdcall kernel_alloc,[esi+cache_ide0_size-cache_ide0]
288
    mov [cache_ide3_pointer],eax
87
    mov [esi+cache_ide0_pointer-cache_ide0],eax
289
    pop   ecx
88
    pop   ecx
290
    mov  edx,eax
89
    mov  edx,eax
291
    mov  eax,[cache_ide3_size]
90
    mov  eax,[esi+cache_ide0_size-cache_ide0]
292
    shr  eax,3
91
    shr  eax,3
293
    mov  [cache_ide3_system_data_size],eax
92
    mov  [esi+cache_ide0_system_data_size-cache_ide0],eax
294
    mov  ebx,eax
93
    mov  ebx,eax
295
    imul eax,7
94
    imul eax,7
296
    mov  [cache_ide3_appl_data_size],eax
95
    mov  [esi+cache_ide0_appl_data_size-cache_ide0],eax
297
    add  ebx,edx
96
    add  ebx,edx
Line 298... Line 97...
298
    mov  [cache_ide3_data_pointer],ebx
97
    mov  [esi+cache_ide0_data_pointer-cache_ide0],ebx
299
 
98
 
300
    cmp cl,10b
99
    cmp cl,10b
301
    je	.cd
100
    je	.cd
302
    push ecx
101
    push ecx
303
    mov  eax,[cache_ide3_system_data_size]
102
    mov  eax,[esi+cache_ide0_system_data_size-cache_ide0]
304
    call calculate_for_hd
103
    call calculate_for_hd
305
    add  eax,[cache_ide3_pointer]
104
    add  eax,[esi+cache_ide0_pointer-cache_ide0]
Line 306... Line 105...
306
    mov  [cache_ide3_system_data],eax
105
    mov  [esi+cache_ide0_system_data-cache_ide0],eax
307
    mov  [cache_ide3_system_sad_size],ecx
106
    mov  [esi+cache_ide0_system_sad_size-cache_ide0],ecx
308
 
107
 
309
    push  edi
108
    push  edi
Line 310... Line 109...
310
    mov   edi,[cache_ide3_pointer]
109
    mov   edi,[esi+cache_ide0_pointer-cache_ide0]
311
    call  clear_ide_cache
110
    call  clear_ide_cache
312
    pop   edi
111
    pop   edi
313
 
112
 
314
    mov  eax,[cache_ide3_appl_data_size]
113
    mov  eax,[esi+cache_ide0_appl_data_size-cache_ide0]
Line 315... Line 114...
315
    call calculate_for_hd
114
    call calculate_for_hd
316
    add  eax,[cache_ide3_data_pointer]
115
    add  eax,[esi+cache_ide0_data_pointer-cache_ide0]
317
    mov  [cache_ide3_appl_data],eax
116
    mov  [esi+cache_ide0_appl_data-cache_ide0],eax
318
    mov  [cache_ide3_appl_sad_size],ecx
117
    mov  [esi+cache_ide0_appl_sad_size-cache_ide0],ecx
Line 319... Line 118...
319
 
118
 
320
    push  edi
119
    push  edi
321
    mov   edi,[cache_ide3_data_pointer]
120
    mov   edi,[esi+cache_ide0_data_pointer-cache_ide0]
322
    call  clear_ide_cache
121
    call  clear_ide_cache
323
    pop   edi
122
    pop   edi
324
 
123
 
325
    pop  ecx
124
    pop  ecx
326
    ret
125
    ret
327
.cd:
126
.cd:
Line 328... Line 127...
328
    push ecx
127
    push ecx
329
    mov  eax,[cache_ide3_system_data_size]
128
    mov  eax,[esi+cache_ide0_system_data_size-cache_ide0]
330
    call calculate_for_cd
129
    call calculate_for_cd
331
    add  eax,[cache_ide3_pointer]
130
    add  eax,[esi+cache_ide0_pointer-cache_ide0]
Line 332... Line 131...
332
    mov  [cache_ide3_system_data],eax
131
    mov  [esi+cache_ide0_system_data-cache_ide0],eax
333
    mov  [cache_ide3_system_sad_size],ecx
132
    mov  [esi+cache_ide0_system_sad_size-cache_ide0],ecx
334
 
133
 
335
    push  edi
134
    push  edi
336
    mov   edi,[cache_ide3_pointer]
135
    mov   edi,[esi+cache_ide0_pointer-cache_ide0]
Line 337... Line 136...
337
    call  clear_ide_cache
136
    call  clear_ide_cache
338
    pop   edi
137
    pop   edi
339
 
138
 
340
    mov  eax,[cache_ide3_appl_data_size]
139
    mov  eax,[esi+cache_ide0_appl_data_size-cache_ide0]
Line 341... Line 140...
341
    call calculate_for_cd
140
    call calculate_for_cd
342
    add  eax,[cache_ide3_data_pointer]
141
    add  eax,[esi+cache_ide0_data_pointer-cache_ide0]