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 35... | Line 35... | ||
35 | mov eax,[esi] ; eax = sector to write |
35 | mov eax,[esi] ; eax = sector to write |
36 | cmp eax,[PARTITION_START] |
36 | cmp eax,[PARTITION_START] |
37 | jb danger |
37 | jb danger |
38 | cmp eax,[PARTITION_END] |
38 | cmp eax,[PARTITION_END] |
39 | ja danger |
39 | ja danger |
- | 40 | cmp [hdpos], 0x80 |
|
- | 41 | jae @f |
|
40 | ; DMA write is permitted only if [allow_dma_access]=1 |
42 | ; DMA write is permitted only if [allow_dma_access]=1 |
41 | cmp [allow_dma_access], 2 |
43 | cmp [allow_dma_access], 2 |
42 | jae .nodma |
44 | jae .nodma |
43 | cmp [dma_hdd], 1 |
45 | cmp [dma_hdd], 1 |
44 | jnz .nodma |
46 | jnz .nodma |
- | 47 | @@: |
|
45 | ; ¡ê¥¤¨ï¥¬ § ¯¨áì 楯®çª¨ ¯®á«¥¤®¢ ⥫ìëå ᥪâ®à®¢ ¢ ®¤® ®¡à 饨¥ ª ¤¨áªã |
48 | ; ¡ê¥¤¨ï¥¬ § ¯¨áì 楯®çª¨ ¯®á«¥¤®¢ ⥫ìëå ᥪâ®à®¢ ¢ ®¤® ®¡à 饨¥ ª ¤¨áªã |
46 | cmp ecx, 1 |
49 | cmp ecx, 1 |
47 | jz .nonext |
50 | jz .nonext |
48 | cmp dword [esi+8+4], 2 |
51 | cmp dword [esi+8+4], 2 |
49 | jnz .nonext |
52 | jnz .nonext |
Line 58... | Line 61... | ||
58 | mov [cache_chain_size], 0 |
61 | mov [cache_chain_size], 0 |
59 | mov [cache_chain_pos], edi |
62 | mov [cache_chain_pos], edi |
60 | mov [cache_chain_ptr], esi |
63 | mov [cache_chain_ptr], esi |
61 | @@: |
64 | @@: |
62 | inc [cache_chain_size] |
65 | inc [cache_chain_size] |
63 | cmp [cache_chain_size], 64 |
66 | cmp [cache_chain_size], 16 |
64 | jnz .continue |
67 | jnz .continue |
65 | jmp .write_chain |
68 | jmp .write_chain |
66 | .nonext: |
69 | .nonext: |
67 | call flush_cache_chain |
70 | call flush_cache_chain |
68 | mov [cache_chain_size], 1 |
71 | mov [cache_chain_size], 1 |
Line 172... | Line 175... | ||
172 | .ide2_appl_data: |
175 | .ide2_appl_data: |
173 | mov ecx,[cache_ide2_appl_sad_size] |
176 | mov ecx,[cache_ide2_appl_sad_size] |
174 | mov esi,[cache_ide2_data_pointer] |
177 | mov esi,[cache_ide2_data_pointer] |
175 | ret |
178 | ret |
176 | .ide3: |
179 | .ide3: |
- | 180 | cmp [hdpos],4 |
|
- | 181 | jne .noide |
|
177 | cmp [hdd_appl_data],0 |
182 | cmp [hdd_appl_data],0 |
178 | jne .ide3_appl_data |
183 | jne .ide3_appl_data |
179 | mov ecx,[cache_ide3_system_sad_size] |
184 | mov ecx,[cache_ide3_system_sad_size] |
180 | mov esi,[cache_ide3_pointer] |
185 | mov esi,[cache_ide3_pointer] |
181 | ret |
186 | ret |
182 | .ide3_appl_data: |
187 | .ide3_appl_data: |
183 | mov ecx,[cache_ide3_appl_sad_size] |
188 | mov ecx,[cache_ide3_appl_sad_size] |
184 | mov esi,[cache_ide3_data_pointer] |
189 | mov esi,[cache_ide3_data_pointer] |
185 | ret |
190 | ret |
- | 191 | .noide: |
|
- | 192 | push eax |
|
- | 193 | mov eax,[hdpos] |
|
- | 194 | sub eax,80h |
|
- | 195 | cmp byte [BiosDisksData+eax*4+2], -1 |
|
- | 196 | jz @f |
|
- | 197 | movzx eax,byte [BiosDisksData+eax*4+2] |
|
- | 198 | imul eax,cache_ide1-cache_ide0 |
|
- | 199 | add eax,cache_ide0 |
|
- | 200 | jmp .get |
|
- | 201 | @@: |
|
- | 202 | imul eax,cache_ide1-cache_ide0 |
|
- | 203 | add eax,BiosDiskCaches |
|
- | 204 | .get: |
|
- | 205 | cmp [hdd_appl_data],0 |
|
- | 206 | jne .bd_appl_data |
|
- | 207 | mov ecx,[cache_ide0_system_sad_size-cache_ide0+eax] |
|
- | 208 | mov esi,[cache_ide0_pointer-cache_ide0+eax] |
|
- | 209 | pop eax |
|
- | 210 | ret |
|
- | 211 | .bd_appl_data: |
|
- | 212 | mov ecx,[cache_ide0_appl_sad_size-cache_ide0+eax] |
|
- | 213 | mov esi,[cache_ide0_data_pointer-cache_ide0+eax] |
|
- | 214 | pop eax |
|
- | 215 | ret |
|
186 | ;-------------------------------------------------------------------- |
216 | ;-------------------------------------------------------------------- |
187 | align 4 |
217 | align 4 |
188 | calculate_cache_1: |
218 | calculate_cache_1: |
189 | ; lea esi,[edi*8+HD_CACHE] |
219 | ; lea esi,[edi*8+HD_CACHE] |
190 | ; 1 - IDE0 ... 4 - IDE3 |
220 | ; 1 - IDE0 ... 4 - IDE3 |
Line 217... | Line 247... | ||
217 | ret |
247 | ret |
218 | .ide2_appl_data: |
248 | .ide2_appl_data: |
219 | mov esi,[cache_ide2_data_pointer] |
249 | mov esi,[cache_ide2_data_pointer] |
220 | ret |
250 | ret |
221 | .ide3: |
251 | .ide3: |
- | 252 | cmp [hdpos],4 |
|
- | 253 | jne .noide |
|
222 | cmp [hdd_appl_data],0 |
254 | cmp [hdd_appl_data],0 |
223 | jne .ide3_appl_data |
255 | jne .ide3_appl_data |
224 | mov esi,[cache_ide3_pointer] |
256 | mov esi,[cache_ide3_pointer] |
225 | ret |
257 | ret |
226 | .ide3_appl_data: |
258 | .ide3_appl_data: |
227 | mov esi,[cache_ide3_data_pointer] |
259 | mov esi,[cache_ide3_data_pointer] |
228 | ret |
260 | ret |
- | 261 | .noide: |
|
- | 262 | push eax |
|
- | 263 | mov eax,[hdpos] |
|
- | 264 | sub eax,80h |
|
- | 265 | cmp byte [BiosDisksData+eax*4+2], -1 |
|
- | 266 | jz @f |
|
- | 267 | movzx eax,byte [BiosDisksData+eax*4+2] |
|
- | 268 | imul eax,cache_ide1-cache_ide0 |
|
- | 269 | add eax,cache_ide0 |
|
- | 270 | jmp .get |
|
- | 271 | @@: |
|
- | 272 | imul eax,cache_ide1-cache_ide0 |
|
- | 273 | add eax,BiosDiskCaches |
|
- | 274 | .get: |
|
- | 275 | cmp [hdd_appl_data],0 |
|
- | 276 | jne .bd_appl_data |
|
- | 277 | mov esi,[cache_ide0_pointer-cache_ide0+eax] |
|
- | 278 | pop eax |
|
- | 279 | ret |
|
- | 280 | .bd_appl_data: |
|
- | 281 | mov esi,[cache_ide0_data_pointer-cache_ide0+eax] |
|
- | 282 | pop eax |
|
- | 283 | ret |
|
- | 284 | ||
229 | ;-------------------------------------------------------------------- |
285 | ;-------------------------------------------------------------------- |
230 | align 4 |
286 | align 4 |
231 | calculate_cache_2: |
287 | calculate_cache_2: |
232 | ; add esi,HD_CACHE+65536 |
288 | ; add esi,HD_CACHE+65536 |
233 | ; 1 - IDE0 ... 4 - IDE3 |
289 | ; 1 - IDE0 ... 4 - IDE3 |
Line 260... | Line 316... | ||
260 | ret |
316 | ret |
261 | .ide2_appl_data: |
317 | .ide2_appl_data: |
262 | mov eax,[cache_ide2_appl_data] |
318 | mov eax,[cache_ide2_appl_data] |
263 | ret |
319 | ret |
264 | .ide3: |
320 | .ide3: |
- | 321 | cmp [hdpos],4 |
|
- | 322 | jne .noide |
|
265 | cmp [hdd_appl_data],0 |
323 | cmp [hdd_appl_data],0 |
266 | jne .ide3_appl_data |
324 | jne .ide3_appl_data |
267 | mov eax,[cache_ide3_system_data] |
325 | mov eax,[cache_ide3_system_data] |
268 | ret |
326 | ret |
269 | .ide3_appl_data: |
327 | .ide3_appl_data: |
270 | mov eax,[cache_ide3_appl_data] |
328 | mov eax,[cache_ide3_appl_data] |
271 | ret |
329 | ret |
- | 330 | .noide: |
|
- | 331 | mov eax,[hdpos] |
|
- | 332 | sub eax,80h |
|
- | 333 | cmp byte [BiosDisksData+eax*4+2], -1 |
|
- | 334 | jz @f |
|
- | 335 | movzx eax,byte [BiosDisksData+eax*4+2] |
|
- | 336 | imul eax,cache_ide1-cache_ide0 |
|
- | 337 | add eax,cache_ide0 |
|
- | 338 | jmp .get |
|
- | 339 | @@: |
|
- | 340 | imul eax,cache_ide1-cache_ide0 |
|
- | 341 | add eax,BiosDiskCaches |
|
- | 342 | .get: |
|
- | 343 | cmp [hdd_appl_data],0 |
|
- | 344 | jne .bd_appl_data |
|
- | 345 | mov eax,[cache_ide0_system_data-cache_ide0+eax] |
|
- | 346 | ret |
|
- | 347 | .bd_appl_data: |
|
- | 348 | mov eax,[cache_ide0_appl_data-cache_ide0+eax] |
|
- | 349 | ret |
|
272 | ;-------------------------------------------------------------------- |
350 | ;-------------------------------------------------------------------- |
273 | align 4 |
351 | align 4 |
274 | calculate_cache_3: |
352 | calculate_cache_3: |
275 | ; mov ecx,cache_max*10/100 |
353 | ; mov ecx,cache_max*10/100 |
276 | ; mov edi,[cache_search_start] |
354 | ; mov edi,[cache_search_start] |
Line 311... | Line 389... | ||
311 | .ide2_appl_data: |
389 | .ide2_appl_data: |
312 | mov ecx,[cache_ide2_appl_sad_size] |
390 | mov ecx,[cache_ide2_appl_sad_size] |
313 | mov edi,[cache_ide2_appl_search_start] |
391 | mov edi,[cache_ide2_appl_search_start] |
314 | ret |
392 | ret |
315 | .ide3: |
393 | .ide3: |
- | 394 | cmp [hdpos],4 |
|
- | 395 | jne .noide |
|
316 | cmp [hdd_appl_data],0 |
396 | cmp [hdd_appl_data],0 |
317 | jne .ide3_appl_data |
397 | jne .ide3_appl_data |
318 | mov ecx,[cache_ide3_system_sad_size] |
398 | mov ecx,[cache_ide3_system_sad_size] |
319 | mov edi,[cache_ide3_search_start] |
399 | mov edi,[cache_ide3_search_start] |
320 | ret |
400 | ret |
321 | .ide3_appl_data: |
401 | .ide3_appl_data: |
322 | mov ecx,[cache_ide3_appl_sad_size] |
402 | mov ecx,[cache_ide3_appl_sad_size] |
323 | mov edi,[cache_ide3_appl_search_start] |
403 | mov edi,[cache_ide3_appl_search_start] |
324 | ret |
404 | ret |
- | 405 | .noide: |
|
- | 406 | push eax |
|
- | 407 | mov eax,[hdpos] |
|
- | 408 | sub eax,80h |
|
- | 409 | cmp byte [BiosDisksData+eax*4+2], -1 |
|
- | 410 | jz @f |
|
- | 411 | movzx eax,byte [BiosDisksData+eax*4+2] |
|
- | 412 | imul eax,cache_ide1-cache_ide0 |
|
- | 413 | add eax,cache_ide0 |
|
- | 414 | jmp .get |
|
- | 415 | @@: |
|
- | 416 | imul eax,cache_ide1-cache_ide0 |
|
- | 417 | add eax,BiosDiskCaches |
|
- | 418 | .get: |
|
- | 419 | cmp [hdd_appl_data],0 |
|
- | 420 | jne .bd_appl_data |
|
- | 421 | mov ecx,[cache_ide0_system_sad_size-cache_ide0+eax] |
|
- | 422 | mov edi,[cache_ide0_search_start-cache_ide0+eax] |
|
- | 423 | pop eax |
|
- | 424 | ret |
|
- | 425 | .bd_appl_data: |
|
- | 426 | mov ecx,[cache_ide0_appl_sad_size-cache_ide0+eax] |
|
- | 427 | mov edi,[cache_ide0_appl_search_start-cache_ide0+eax] |
|
- | 428 | pop eax |
|
- | 429 | ret |
|
325 | ;-------------------------------------------------------------------- |
430 | ;-------------------------------------------------------------------- |
326 | align 4 |
431 | align 4 |
327 | calculate_cache_4: |
432 | calculate_cache_4: |
328 | ; cmp edi,cache_max |
433 | ; cmp edi,cache_max |
329 | ; 1 - IDE0 ... 4 - IDE3 |
434 | ; 1 - IDE0 ... 4 - IDE3 |
Line 356... | Line 461... | ||
356 | ret |
461 | ret |
357 | .ide2_appl_data: |
462 | .ide2_appl_data: |
358 | cmp edi,[cache_ide2_appl_sad_size] |
463 | cmp edi,[cache_ide2_appl_sad_size] |
359 | ret |
464 | ret |
360 | .ide3: |
465 | .ide3: |
- | 466 | cmp [hdpos],4 |
|
- | 467 | jne .noide |
|
361 | cmp [hdd_appl_data],0 |
468 | cmp [hdd_appl_data],0 |
362 | jne .ide3_appl_data |
469 | jne .ide3_appl_data |
363 | cmp edi,[cache_ide3_system_sad_size] |
470 | cmp edi,[cache_ide3_system_sad_size] |
364 | ret |
471 | ret |
365 | .ide3_appl_data: |
472 | .ide3_appl_data: |
366 | cmp edi,[cache_ide3_appl_sad_size] |
473 | cmp edi,[cache_ide3_appl_sad_size] |
367 | ret |
474 | ret |
- | 475 | .noide: |
|
- | 476 | push eax |
|
- | 477 | mov eax,[hdpos] |
|
- | 478 | sub eax,80h |
|
- | 479 | cmp byte [BiosDisksData+eax*4+2], -1 |
|
- | 480 | jz @f |
|
- | 481 | movzx eax,byte [BiosDisksData+eax*4+2] |
|
- | 482 | imul eax,cache_ide1-cache_ide0 |
|
- | 483 | add eax,cache_ide0 |
|
- | 484 | jmp .get |
|
- | 485 | @@: |
|
- | 486 | imul eax,cache_ide1-cache_ide0 |
|
- | 487 | add eax,BiosDiskCaches |
|
- | 488 | .get: |
|
- | 489 | cmp [hdd_appl_data],0 |
|
- | 490 | jne .bd_appl_data |
|
- | 491 | cmp edi,[cache_ide0_system_sad_size-cache_ide0+eax] |
|
- | 492 | pop eax |
|
- | 493 | ret |
|
- | 494 | .bd_appl_data: |
|
- | 495 | cmp edi,[cache_ide0_appl_sad_size-cache_ide0+eax] |
|
- | 496 | pop eax |
|
- | 497 | ret |
|
- | 498 | ||
368 | ;-------------------------------------------------------------------- |
499 | ;-------------------------------------------------------------------- |
369 | align 4 |
500 | align 4 |
370 | calculate_cache_5: |
501 | calculate_cache_5: |
371 | ; mov [cache_search_start],edi |
502 | ; mov [cache_search_start],edi |
372 | ; 1 - IDE0 ... 4 - IDE3 |
503 | ; 1 - IDE0 ... 4 - IDE3 |
Line 399... | Line 530... | ||
399 | ret |
530 | ret |
400 | .ide2_appl_data: |
531 | .ide2_appl_data: |
401 | mov [cache_ide2_appl_search_start],edi |
532 | mov [cache_ide2_appl_search_start],edi |
402 | ret |
533 | ret |
403 | .ide3: |
534 | .ide3: |
- | 535 | cmp [hdpos],4 |
|
- | 536 | jne .noide |
|
404 | cmp [hdd_appl_data],0 |
537 | cmp [hdd_appl_data],0 |
405 | jne .ide3_appl_data |
538 | jne .ide3_appl_data |
406 | mov [cache_ide3_search_start],edi |
539 | mov [cache_ide3_search_start],edi |
407 | ret |
540 | ret |
408 | .ide3_appl_data: |
541 | .ide3_appl_data: |
409 | mov [cache_ide3_appl_search_start],edi |
542 | mov [cache_ide3_appl_search_start],edi |
410 | ret |
543 | ret |
- | 544 | .noide: |
|
- | 545 | push eax |
|
- | 546 | mov eax,[hdpos] |
|
- | 547 | sub eax,80h |
|
- | 548 | cmp byte [BiosDisksData+eax*4+2], -1 |
|
- | 549 | jz @f |
|
- | 550 | movzx eax,byte [BiosDisksData+eax*4+2] |
|
- | 551 | imul eax,cache_ide1-cache_ide0 |
|
- | 552 | add eax,cache_ide0 |
|
- | 553 | jmp .get |
|
- | 554 | @@: |
|
- | 555 | imul eax,cache_ide1-cache_ide0 |
|
- | 556 | add eax,BiosDiskCaches |
|
- | 557 | .get: |
|
- | 558 | cmp [hdd_appl_data],0 |
|
- | 559 | jne .bd_appl_data |
|
- | 560 | mov [cache_ide0_search_start-cache_ide0+eax],edi |
|
- | 561 | pop eax |
|
- | 562 | ret |
|
- | 563 | .bd_appl_data: |
|
- | 564 | mov [cache_ide0_appl_search_start-cache_ide0+eax],edi |
|
- | 565 | pop eax |
|
- | 566 | ret |
|
Line 411... | Line 567... | ||
411 | 567 | ||
412 | ;-------------------------------------------------------------------- |
568 | ;-------------------------------------------------------------------- |
413 | align 4 |
569 | align 4 |
414 | find_empty_slot_CD_cache: |
570 | find_empty_slot_CD_cache: |