Rev 3712 | Rev 4700 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3712 | Rev 3742 | ||
---|---|---|---|
Line 19... | Line 19... | ||
19 | ; [cache_ide[X]_system_data] |
19 | ; [cache_ide[X]_system_data] |
20 | ; or [cache_ide[x]_appl_data] - cache entries |
20 | ; or [cache_ide[x]_appl_data] - cache entries |
21 | ; |
21 | ; |
22 | ;************************************************************************** |
22 | ;************************************************************************** |
Line 23... | Line 23... | ||
23 | 23 | ||
Line 24... | Line -... | ||
24 | $Revision: 3712 $ |
- | |
25 | - | ||
26 | - | ||
27 | align 4 |
- | |
28 | write_cache: |
- | |
29 | ;----------------------------------------------------------- |
- | |
30 | ; write all changed sectors to disk |
- | |
31 | ;----------------------------------------------------------- |
- | |
32 | push eax ecx edx esi edi |
- | |
33 | - | ||
34 | ; write difference ( 2 ) from cache to hd |
- | |
35 | call calculate_cache |
- | |
36 | add esi, 8 |
- | |
37 | mov edi, 1 |
- | |
38 | write_cache_more: |
- | |
39 | cmp dword [esi+4], 2; if cache slot is not different |
- | |
40 | jne .write_chain |
- | |
41 | mov dword [esi+4], 1; same as in hd |
- | |
42 | mov eax, [esi] ; eax = sector to write |
- | |
43 | cmp eax, [PARTITION_START] |
- | |
44 | jb danger |
- | |
45 | cmp eax, [PARTITION_END] |
- | |
46 | ja danger |
- | |
47 | cmp [hdpos], 0x80 |
- | |
48 | jae @f |
- | |
49 | ; DMA write is permitted only if [allow_dma_access]=1 |
- | |
50 | cmp [allow_dma_access], 2 |
- | |
51 | jae .nodma |
- | |
52 | cmp [dma_hdd], 1 |
- | |
53 | jnz .nodma |
- | |
54 | @@: |
- | |
55 | ; Объединяем запись цепочки последовательных секторов в одно обращение к диску |
- | |
56 | cmp ecx, 1 |
- | |
57 | jz .nonext |
- | |
58 | cmp dword [esi+8+4], 2 |
- | |
59 | jnz .nonext |
- | |
60 | push eax |
- | |
61 | inc eax |
- | |
62 | cmp eax, [esi+8] |
- | |
63 | pop eax |
- | |
64 | jnz .nonext |
- | |
65 | cmp [cache_chain_started], 1 |
- | |
66 | jz @f |
- | |
67 | mov [cache_chain_started], 1 |
- | |
68 | mov [cache_chain_size], 0 |
- | |
69 | mov [cache_chain_pos], edi |
- | |
70 | mov [cache_chain_ptr], esi |
- | |
71 | @@: |
- | |
72 | inc [cache_chain_size] |
- | |
73 | cmp [cache_chain_size], 16 |
- | |
74 | jnz .continue |
- | |
75 | jmp .write_chain |
- | |
76 | .nonext: |
- | |
77 | call flush_cache_chain |
- | |
78 | mov [cache_chain_size], 1 |
- | |
79 | mov [cache_chain_ptr], esi |
- | |
80 | call write_cache_sector |
- | |
81 | jmp .continue |
- | |
82 | .nodma: |
- | |
83 | call cache_write_pio |
- | |
84 | .write_chain: |
- | |
85 | call flush_cache_chain |
- | |
86 | .continue: |
- | |
87 | danger: |
- | |
88 | add esi, 8 |
- | |
89 | inc edi |
- | |
90 | dec ecx |
- | |
91 | jnz write_cache_more |
- | |
92 | call flush_cache_chain |
- | |
93 | return_02: |
- | |
94 | pop edi esi edx ecx eax |
- | |
95 | ret |
- | |
96 | - | ||
97 | flush_cache_chain: |
- | |
98 | cmp [cache_chain_started], 0 |
- | |
99 | jz @f |
- | |
100 | call write_cache_chain |
- | |
101 | mov [cache_chain_started], 0 |
- | |
102 | @@: |
- | |
103 | ret |
- | |
104 | ;-------------------------------------------------------------------- |
- | |
105 | align 4 |
- | |
106 | find_empty_slot: |
- | |
107 | ;----------------------------------------------------------- |
- | |
108 | ; find empty or read slot, flush cache if next 10% is used by write |
- | |
109 | ; output : edi = cache slot |
- | |
110 | ;----------------------------------------------------------- |
- | |
111 | ; push ecx esi |
- | |
112 | - | ||
113 | search_again: |
- | |
114 | call calculate_cache_3 |
- | |
115 | shr ecx, 3 |
- | |
116 | search_for_empty: |
- | |
117 | inc edi |
- | |
118 | call calculate_cache_4 |
- | |
119 | jbe inside_cache |
- | |
120 | mov edi, 1 |
- | |
121 | inside_cache: |
- | |
122 | push esi |
- | |
123 | call calculate_cache_1 |
- | |
124 | cmp dword [edi*8+esi+4], 2 |
- | |
125 | pop esi |
- | |
126 | jb found_slot ; it's empty or read |
- | |
127 | dec ecx |
- | |
128 | jnz search_for_empty |
- | |
129 | call write_cache ; no empty slots found, write all |
- | |
130 | cmp [hd_error], 0 |
- | |
131 | jne found_slot_access_denied |
- | |
132 | jmp search_again ; and start again |
- | |
133 | found_slot: |
- | |
134 | call calculate_cache_5 |
- | |
135 | found_slot_access_denied: |
- | |
136 | ret |
- | |
137 | ;-------------------------------------------------------------------- |
- | |
138 | align 4 |
- | |
139 | calculate_cache: |
- | |
140 | ; 1 - IDE0 ... 4 - IDE3 |
- | |
141 | .ide0: |
- | |
142 | cmp [hdpos], 1 |
- | |
143 | jne .ide1 |
- | |
144 | cmp [hdd_appl_data], 0 |
- | |
145 | jne .ide0_appl_data |
- | |
146 | mov ecx, [cache_ide0_system_sad_size] |
- | |
147 | mov esi, [cache_ide0_pointer] |
- | |
148 | ret |
- | |
149 | .ide0_appl_data: |
- | |
150 | mov ecx, [cache_ide0_appl_sad_size] |
- | |
151 | mov esi, [cache_ide0_data_pointer] |
- | |
152 | ret |
- | |
153 | .ide1: |
- | |
154 | cmp [hdpos], 2 |
- | |
155 | jne .ide2 |
- | |
156 | cmp [hdd_appl_data], 0 |
- | |
157 | jne .ide1_appl_data |
- | |
158 | mov ecx, [cache_ide1_system_sad_size] |
- | |
159 | mov esi, [cache_ide1_pointer] |
- | |
160 | ret |
- | |
161 | .ide1_appl_data: |
- | |
162 | mov ecx, [cache_ide1_appl_sad_size] |
- | |
163 | mov esi, [cache_ide1_data_pointer] |
- | |
164 | ret |
- | |
165 | .ide2: |
- | |
166 | cmp [hdpos], 3 |
- | |
167 | jne .ide3 |
- | |
168 | cmp [hdd_appl_data], 0 |
- | |
169 | jne .ide2_appl_data |
- | |
170 | mov ecx, [cache_ide2_system_sad_size] |
- | |
171 | mov esi, [cache_ide2_pointer] |
- | |
172 | ret |
- | |
173 | .ide2_appl_data: |
- | |
174 | mov ecx, [cache_ide2_appl_sad_size] |
- | |
175 | mov esi, [cache_ide2_data_pointer] |
- | |
176 | ret |
- | |
177 | .ide3: |
- | |
178 | cmp [hdpos], 4 |
- | |
179 | jne .noide |
- | |
180 | cmp [hdd_appl_data], 0 |
- | |
181 | jne .ide3_appl_data |
- | |
182 | mov ecx, [cache_ide3_system_sad_size] |
- | |
183 | mov esi, [cache_ide3_pointer] |
- | |
184 | ret |
- | |
185 | .ide3_appl_data: |
- | |
186 | mov ecx, [cache_ide3_appl_sad_size] |
- | |
187 | mov esi, [cache_ide3_data_pointer] |
- | |
188 | ret |
- | |
189 | .noide: |
- | |
190 | push eax |
- | |
191 | mov eax, [hdpos] |
- | |
192 | sub eax, 80h |
- | |
193 | cmp byte [BiosDisksData+eax*4+2], -1 |
- | |
194 | jz @f |
- | |
195 | movzx eax, byte [BiosDisksData+eax*4+2] |
- | |
196 | imul eax, cache_ide1-cache_ide0 |
- | |
197 | add eax, cache_ide0 |
- | |
198 | jmp .get |
- | |
199 | @@: |
- | |
200 | imul eax, cache_ide1-cache_ide0 |
- | |
201 | add eax, BiosDiskCaches |
- | |
202 | .get: |
- | |
203 | cmp [hdd_appl_data], 0 |
- | |
204 | jne .bd_appl_data |
- | |
205 | mov ecx, [cache_ide0_system_sad_size-cache_ide0+eax] |
- | |
206 | mov esi, [cache_ide0_pointer-cache_ide0+eax] |
- | |
207 | pop eax |
- | |
208 | ret |
- | |
209 | .bd_appl_data: |
- | |
210 | mov ecx, [cache_ide0_appl_sad_size-cache_ide0+eax] |
- | |
211 | mov esi, [cache_ide0_data_pointer-cache_ide0+eax] |
- | |
212 | pop eax |
- | |
213 | ret |
- | |
214 | ;-------------------------------------------------------------------- |
- | |
215 | align 4 |
- | |
216 | calculate_cache_1: |
- | |
217 | ; 1 - IDE0 ... 4 - IDE3 |
- | |
218 | .ide0: |
- | |
219 | cmp [hdpos], 1 |
- | |
220 | jne .ide1 |
- | |
221 | cmp [hdd_appl_data], 0 |
- | |
222 | jne .ide0_appl_data |
- | |
223 | mov esi, [cache_ide0_pointer] |
- | |
224 | ret |
- | |
225 | .ide0_appl_data: |
- | |
226 | mov esi, [cache_ide0_data_pointer] |
- | |
227 | ret |
- | |
228 | .ide1: |
- | |
229 | cmp [hdpos], 2 |
- | |
230 | jne .ide2 |
- | |
231 | cmp [hdd_appl_data], 0 |
- | |
232 | jne .ide1_appl_data |
- | |
233 | mov esi, [cache_ide1_pointer] |
- | |
234 | ret |
- | |
235 | .ide1_appl_data: |
- | |
236 | mov esi, [cache_ide1_data_pointer] |
- | |
237 | ret |
- | |
238 | .ide2: |
- | |
239 | cmp [hdpos], 3 |
- | |
240 | jne .ide3 |
- | |
241 | cmp [hdd_appl_data], 0 |
- | |
242 | jne .ide2_appl_data |
- | |
243 | mov esi, [cache_ide2_pointer] |
- | |
244 | ret |
- | |
245 | .ide2_appl_data: |
- | |
246 | mov esi, [cache_ide2_data_pointer] |
- | |
247 | ret |
- | |
248 | .ide3: |
- | |
249 | cmp [hdpos], 4 |
- | |
250 | jne .noide |
- | |
251 | cmp [hdd_appl_data], 0 |
- | |
252 | jne .ide3_appl_data |
- | |
253 | mov esi, [cache_ide3_pointer] |
- | |
254 | ret |
- | |
255 | .ide3_appl_data: |
- | |
256 | mov esi, [cache_ide3_data_pointer] |
- | |
257 | ret |
- | |
258 | .noide: |
- | |
259 | push eax |
- | |
260 | mov eax, [hdpos] |
- | |
261 | sub eax, 80h |
- | |
262 | cmp byte [BiosDisksData+eax*4+2], -1 |
- | |
263 | jz @f |
- | |
264 | movzx eax, byte [BiosDisksData+eax*4+2] |
- | |
265 | imul eax, cache_ide1-cache_ide0 |
- | |
266 | add eax, cache_ide0 |
- | |
267 | jmp .get |
- | |
268 | @@: |
- | |
269 | imul eax, cache_ide1-cache_ide0 |
- | |
270 | add eax, BiosDiskCaches |
- | |
271 | .get: |
- | |
272 | cmp [hdd_appl_data], 0 |
- | |
273 | jne .bd_appl_data |
- | |
274 | mov esi, [cache_ide0_pointer-cache_ide0+eax] |
- | |
275 | pop eax |
- | |
276 | ret |
- | |
277 | .bd_appl_data: |
- | |
278 | mov esi, [cache_ide0_data_pointer-cache_ide0+eax] |
- | |
279 | pop eax |
- | |
280 | ret |
- | |
281 | - | ||
282 | ;-------------------------------------------------------------------- |
- | |
283 | align 4 |
- | |
284 | calculate_cache_2: |
- | |
285 | ; 1 - IDE0 ... 4 - IDE3 |
- | |
286 | .ide0: |
- | |
287 | cmp [hdpos], 1 |
- | |
288 | jne .ide1 |
- | |
289 | cmp [hdd_appl_data], 0 |
- | |
290 | jne .ide0_appl_data |
- | |
291 | mov eax, [cache_ide0_system_data] |
- | |
292 | ret |
- | |
293 | .ide0_appl_data: |
- | |
294 | mov eax, [cache_ide0_appl_data] |
- | |
295 | ret |
- | |
296 | .ide1: |
- | |
297 | cmp [hdpos], 2 |
- | |
298 | jne .ide2 |
- | |
299 | cmp [hdd_appl_data], 0 |
- | |
300 | jne .ide1_appl_data |
- | |
301 | mov eax, [cache_ide1_system_data] |
- | |
302 | ret |
- | |
303 | .ide1_appl_data: |
- | |
304 | mov eax, [cache_ide1_appl_data] |
- | |
305 | ret |
- | |
306 | .ide2: |
- | |
307 | cmp [hdpos], 3 |
- | |
308 | jne .ide3 |
- | |
309 | cmp [hdd_appl_data], 0 |
- | |
310 | jne .ide2_appl_data |
- | |
311 | mov eax, [cache_ide2_system_data] |
- | |
312 | ret |
- | |
313 | .ide2_appl_data: |
- | |
314 | mov eax, [cache_ide2_appl_data] |
- | |
315 | ret |
- | |
316 | .ide3: |
- | |
317 | cmp [hdpos], 4 |
- | |
318 | jne .noide |
- | |
319 | cmp [hdd_appl_data], 0 |
- | |
320 | jne .ide3_appl_data |
- | |
321 | mov eax, [cache_ide3_system_data] |
- | |
322 | ret |
- | |
323 | .ide3_appl_data: |
- | |
324 | mov eax, [cache_ide3_appl_data] |
- | |
325 | ret |
- | |
326 | .noide: |
- | |
327 | mov eax, [hdpos] |
- | |
328 | sub eax, 80h |
- | |
329 | cmp byte [BiosDisksData+eax*4+2], -1 |
- | |
330 | jz @f |
- | |
331 | movzx eax, byte [BiosDisksData+eax*4+2] |
- | |
332 | imul eax, cache_ide1-cache_ide0 |
- | |
333 | add eax, cache_ide0 |
- | |
334 | jmp .get |
- | |
335 | @@: |
- | |
336 | imul eax, cache_ide1-cache_ide0 |
- | |
337 | add eax, BiosDiskCaches |
- | |
338 | .get: |
- | |
339 | cmp [hdd_appl_data], 0 |
- | |
340 | jne .bd_appl_data |
- | |
341 | mov eax, [cache_ide0_system_data-cache_ide0+eax] |
- | |
342 | ret |
- | |
343 | .bd_appl_data: |
- | |
344 | mov eax, [cache_ide0_appl_data-cache_ide0+eax] |
- | |
345 | ret |
- | |
346 | ;-------------------------------------------------------------------- |
- | |
347 | align 4 |
- | |
348 | calculate_cache_3: |
- | |
349 | ; mov ecx,cache_max*10/100 |
- | |
350 | ; mov edi,[cache_search_start] |
- | |
351 | - | ||
352 | ; 1 - IDE0 ... 4 - IDE3 |
- | |
353 | .ide0: |
- | |
354 | cmp [hdpos], 1 |
- | |
355 | jne .ide1 |
- | |
356 | cmp [hdd_appl_data], 0 |
- | |
357 | jne .ide0_appl_data |
- | |
358 | mov ecx, [cache_ide0_system_sad_size] |
- | |
359 | mov edi, [cache_ide0_search_start] |
- | |
360 | ret |
- | |
361 | .ide0_appl_data: |
- | |
362 | mov ecx, [cache_ide0_appl_sad_size] |
- | |
363 | mov edi, [cache_ide0_appl_search_start] |
- | |
364 | ret |
- | |
365 | .ide1: |
- | |
366 | cmp [hdpos], 2 |
- | |
367 | jne .ide2 |
- | |
368 | cmp [hdd_appl_data], 0 |
- | |
369 | jne .ide1_appl_data |
- | |
370 | mov ecx, [cache_ide1_system_sad_size] |
- | |
371 | mov edi, [cache_ide1_search_start] |
- | |
372 | ret |
- | |
373 | .ide1_appl_data: |
- | |
374 | mov ecx, [cache_ide1_appl_sad_size] |
- | |
375 | mov edi, [cache_ide1_appl_search_start] |
- | |
376 | ret |
- | |
377 | .ide2: |
- | |
378 | cmp [hdpos], 3 |
- | |
379 | jne .ide3 |
- | |
380 | cmp [hdd_appl_data], 0 |
- | |
381 | jne .ide2_appl_data |
- | |
382 | mov ecx, [cache_ide2_system_sad_size] |
- | |
383 | mov edi, [cache_ide2_search_start] |
- | |
384 | ret |
- | |
385 | .ide2_appl_data: |
- | |
386 | mov ecx, [cache_ide2_appl_sad_size] |
- | |
387 | mov edi, [cache_ide2_appl_search_start] |
- | |
388 | ret |
- | |
389 | .ide3: |
- | |
390 | cmp [hdpos], 4 |
- | |
391 | jne .noide |
- | |
392 | cmp [hdd_appl_data], 0 |
- | |
393 | jne .ide3_appl_data |
- | |
394 | mov ecx, [cache_ide3_system_sad_size] |
- | |
395 | mov edi, [cache_ide3_search_start] |
- | |
396 | ret |
- | |
397 | .ide3_appl_data: |
- | |
398 | mov ecx, [cache_ide3_appl_sad_size] |
- | |
399 | mov edi, [cache_ide3_appl_search_start] |
- | |
400 | ret |
- | |
401 | .noide: |
- | |
402 | push eax |
- | |
403 | mov eax, [hdpos] |
- | |
404 | sub eax, 80h |
- | |
405 | cmp byte [BiosDisksData+eax*4+2], -1 |
- | |
406 | jz @f |
- | |
407 | movzx eax, byte [BiosDisksData+eax*4+2] |
- | |
408 | imul eax, cache_ide1-cache_ide0 |
- | |
409 | add eax, cache_ide0 |
- | |
410 | jmp .get |
- | |
411 | @@: |
- | |
412 | imul eax, cache_ide1-cache_ide0 |
- | |
413 | add eax, BiosDiskCaches |
- | |
414 | .get: |
- | |
415 | cmp [hdd_appl_data], 0 |
- | |
416 | jne .bd_appl_data |
- | |
417 | mov ecx, [cache_ide0_system_sad_size-cache_ide0+eax] |
- | |
418 | mov edi, [cache_ide0_search_start-cache_ide0+eax] |
- | |
419 | pop eax |
- | |
420 | ret |
- | |
421 | .bd_appl_data: |
- | |
422 | mov ecx, [cache_ide0_appl_sad_size-cache_ide0+eax] |
- | |
423 | mov edi, [cache_ide0_appl_search_start-cache_ide0+eax] |
- | |
424 | pop eax |
- | |
425 | ret |
- | |
426 | ;-------------------------------------------------------------------- |
- | |
427 | align 4 |
- | |
428 | calculate_cache_4: |
- | |
429 | ; cmp edi,cache_max |
- | |
430 | ; 1 - IDE0 ... 4 - IDE3 |
- | |
431 | .ide0: |
- | |
432 | cmp [hdpos], 1 |
- | |
433 | jne .ide1 |
- | |
434 | cmp [hdd_appl_data], 0 |
- | |
435 | jne .ide0_appl_data |
- | |
436 | cmp edi, [cache_ide0_system_sad_size] |
- | |
437 | ret |
- | |
438 | .ide0_appl_data: |
- | |
439 | cmp edi, [cache_ide0_appl_sad_size] |
- | |
440 | ret |
- | |
441 | .ide1: |
- | |
442 | cmp [hdpos], 2 |
- | |
443 | jne .ide2 |
- | |
444 | cmp [hdd_appl_data], 0 |
- | |
445 | jne .ide1_appl_data |
- | |
446 | cmp edi, [cache_ide1_system_sad_size] |
- | |
447 | ret |
- | |
448 | .ide1_appl_data: |
- | |
449 | cmp edi, [cache_ide1_appl_sad_size] |
- | |
450 | ret |
- | |
451 | .ide2: |
- | |
452 | cmp [hdpos], 3 |
- | |
453 | jne .ide3 |
- | |
454 | cmp [hdd_appl_data], 0 |
- | |
455 | jne .ide2_appl_data |
- | |
456 | cmp edi, [cache_ide2_system_sad_size] |
- | |
457 | ret |
- | |
458 | .ide2_appl_data: |
- | |
459 | cmp edi, [cache_ide2_appl_sad_size] |
- | |
460 | ret |
- | |
461 | .ide3: |
- | |
462 | cmp [hdpos], 4 |
- | |
463 | jne .noide |
- | |
464 | cmp [hdd_appl_data], 0 |
- | |
465 | jne .ide3_appl_data |
- | |
466 | cmp edi, [cache_ide3_system_sad_size] |
- | |
467 | ret |
- | |
468 | .ide3_appl_data: |
- | |
469 | cmp edi, [cache_ide3_appl_sad_size] |
- | |
470 | ret |
- | |
471 | .noide: |
- | |
472 | push eax |
- | |
473 | mov eax, [hdpos] |
- | |
474 | sub eax, 80h |
- | |
475 | cmp byte [BiosDisksData+eax*4+2], -1 |
- | |
476 | jz @f |
- | |
477 | movzx eax, byte [BiosDisksData+eax*4+2] |
- | |
478 | imul eax, cache_ide1-cache_ide0 |
- | |
479 | add eax, cache_ide0 |
- | |
480 | jmp .get |
- | |
481 | @@: |
- | |
482 | imul eax, cache_ide1-cache_ide0 |
- | |
483 | add eax, BiosDiskCaches |
- | |
484 | .get: |
- | |
485 | cmp [hdd_appl_data], 0 |
- | |
486 | jne .bd_appl_data |
- | |
487 | cmp edi, [cache_ide0_system_sad_size-cache_ide0+eax] |
- | |
488 | pop eax |
- | |
489 | ret |
- | |
490 | .bd_appl_data: |
- | |
491 | cmp edi, [cache_ide0_appl_sad_size-cache_ide0+eax] |
- | |
492 | pop eax |
- | |
493 | ret |
- | |
494 | - | ||
495 | ;-------------------------------------------------------------------- |
- | |
496 | align 4 |
- | |
497 | calculate_cache_5: |
- | |
498 | ; mov [cache_search_start],edi |
- | |
499 | ; 1 - IDE0 ... 4 - IDE3 |
- | |
500 | .ide0: |
- | |
501 | cmp [hdpos], 1 |
- | |
502 | jne .ide1 |
- | |
503 | cmp [hdd_appl_data], 0 |
- | |
504 | jne .ide0_appl_data |
- | |
505 | mov [cache_ide0_search_start], edi |
- | |
506 | ret |
- | |
507 | .ide0_appl_data: |
- | |
508 | mov [cache_ide0_appl_search_start], edi |
- | |
509 | ret |
- | |
510 | .ide1: |
- | |
511 | cmp [hdpos], 2 |
- | |
512 | jne .ide2 |
- | |
513 | cmp [hdd_appl_data], 0 |
- | |
514 | jne .ide1_appl_data |
- | |
515 | mov [cache_ide1_search_start], edi |
- | |
516 | ret |
- | |
517 | .ide1_appl_data: |
- | |
518 | mov [cache_ide1_appl_search_start], edi |
- | |
519 | ret |
- | |
520 | .ide2: |
- | |
521 | cmp [hdpos], 3 |
- | |
522 | jne .ide3 |
- | |
523 | cmp [hdd_appl_data], 0 |
- | |
524 | jne .ide2_appl_data |
- | |
525 | mov [cache_ide2_search_start], edi |
- | |
526 | ret |
- | |
527 | .ide2_appl_data: |
- | |
528 | mov [cache_ide2_appl_search_start], edi |
- | |
529 | ret |
- | |
530 | .ide3: |
- | |
531 | cmp [hdpos], 4 |
- | |
532 | jne .noide |
- | |
533 | cmp [hdd_appl_data], 0 |
- | |
534 | jne .ide3_appl_data |
- | |
535 | mov [cache_ide3_search_start], edi |
- | |
536 | ret |
- | |
537 | .ide3_appl_data: |
- | |
538 | mov [cache_ide3_appl_search_start], edi |
- | |
539 | ret |
- | |
540 | .noide: |
- | |
541 | push eax |
- | |
542 | mov eax, [hdpos] |
- | |
543 | sub eax, 80h |
- | |
544 | cmp byte [BiosDisksData+eax*4+2], -1 |
- | |
545 | jz @f |
- | |
546 | movzx eax, byte [BiosDisksData+eax*4+2] |
- | |
547 | imul eax, cache_ide1-cache_ide0 |
- | |
548 | add eax, cache_ide0 |
- | |
549 | jmp .get |
- | |
550 | @@: |
- | |
551 | imul eax, cache_ide1-cache_ide0 |
- | |
552 | add eax, BiosDiskCaches |
- | |
553 | .get: |
- | |
554 | cmp [hdd_appl_data], 0 |
- | |
555 | jne .bd_appl_data |
- | |
556 | mov [cache_ide0_search_start-cache_ide0+eax], edi |
- | |
557 | pop eax |
- | |
558 | ret |
- | |
559 | .bd_appl_data: |
- | |
560 | mov [cache_ide0_appl_search_start-cache_ide0+eax], edi |
- | |
561 | pop eax |
- | |
562 | ret |
- | |
563 | 24 | $Revision: 3742 $ |
|
564 | ;-------------------------------------------------------------------- |
25 | |
565 | align 4 |
26 | align 4 |
566 | find_empty_slot_CD_cache: |
27 | find_empty_slot_CD_cache: |
567 | ;----------------------------------------------------------- |
28 | ;----------------------------------------------------------- |