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 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: