2011-10-14 23:38:50 +02:00
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
;; ;;
|
2012-03-13 17:51:57 +01:00
|
|
|
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
|
2011-10-14 23:38:50 +02:00
|
|
|
;; Distributed under terms of the GNU General Public License ;;
|
|
|
|
;; ;;
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
|
|
|
|
;**************************************************************************
|
|
|
|
;
|
|
|
|
; [cache_ide[X]_pointer]
|
|
|
|
; or [cache_ide[X]_data_pointer] first entry in cache list
|
|
|
|
;
|
|
|
|
; +0 - lba sector
|
|
|
|
; +4 - state of cache sector
|
|
|
|
; 0 = empty
|
|
|
|
; 1 = used for read ( same as in hd )
|
|
|
|
; 2 = used for write ( differs from hd )
|
|
|
|
;
|
|
|
|
; [cache_ide[X]_system_data]
|
|
|
|
; or [cache_ide[x]_appl_data] - cache entries
|
|
|
|
;
|
|
|
|
;**************************************************************************
|
|
|
|
|
|
|
|
$Revision$
|
|
|
|
|
|
|
|
align 4
|
|
|
|
find_empty_slot_CD_cache:
|
|
|
|
;-----------------------------------------------------------
|
|
|
|
; find empty or read slot, flush cache if next 10% is used by write
|
|
|
|
; output : edi = cache slot
|
|
|
|
;-----------------------------------------------------------
|
|
|
|
.search_again:
|
|
|
|
call cd_calculate_cache_3
|
|
|
|
.search_for_empty:
|
|
|
|
inc edi
|
|
|
|
call cd_calculate_cache_4
|
|
|
|
jbe .inside_cache
|
|
|
|
mov edi, 1
|
|
|
|
.inside_cache:
|
|
|
|
call cd_calculate_cache_5
|
|
|
|
ret
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
clear_CD_cache:
|
|
|
|
pusha
|
|
|
|
.ide0:
|
|
|
|
xor eax, eax
|
|
|
|
cmp [cdpos], 1
|
|
|
|
jne .ide1
|
|
|
|
mov [cache_ide0_search_start], eax
|
|
|
|
mov ecx, [cache_ide0_system_sad_size]
|
|
|
|
mov edi, [cache_ide0_pointer]
|
|
|
|
call .clear
|
|
|
|
mov [cache_ide0_appl_search_start], eax
|
|
|
|
mov ecx, [cache_ide0_appl_sad_size]
|
|
|
|
mov edi, [cache_ide0_data_pointer]
|
|
|
|
jmp .continue
|
|
|
|
.ide1:
|
|
|
|
cmp [cdpos], 2
|
|
|
|
jne .ide2
|
|
|
|
mov [cache_ide1_search_start], eax
|
|
|
|
mov ecx, [cache_ide1_system_sad_size]
|
|
|
|
mov edi, [cache_ide1_pointer]
|
|
|
|
call .clear
|
|
|
|
mov [cache_ide1_appl_search_start], eax
|
|
|
|
mov ecx, [cache_ide1_appl_sad_size]
|
|
|
|
mov edi, [cache_ide1_data_pointer]
|
|
|
|
jmp .continue
|
|
|
|
.ide2:
|
|
|
|
cmp [cdpos], 3
|
|
|
|
jne .ide3
|
|
|
|
mov [cache_ide2_search_start], eax
|
|
|
|
mov ecx, [cache_ide2_system_sad_size]
|
|
|
|
mov edi, [cache_ide2_pointer]
|
|
|
|
call .clear
|
|
|
|
mov [cache_ide2_appl_search_start], eax
|
|
|
|
mov ecx, [cache_ide2_appl_sad_size]
|
|
|
|
mov edi, [cache_ide2_data_pointer]
|
|
|
|
jmp .continue
|
|
|
|
.ide3:
|
|
|
|
mov [cache_ide3_search_start], eax
|
|
|
|
mov ecx, [cache_ide3_system_sad_size]
|
|
|
|
mov edi, [cache_ide3_pointer]
|
|
|
|
call .clear
|
|
|
|
mov [cache_ide3_appl_search_start], eax
|
|
|
|
mov ecx, [cache_ide3_appl_sad_size]
|
|
|
|
mov edi, [cache_ide3_data_pointer]
|
|
|
|
.continue:
|
|
|
|
call .clear
|
|
|
|
popa
|
|
|
|
ret
|
|
|
|
.clear:
|
|
|
|
shl ecx, 1
|
|
|
|
cld
|
|
|
|
rep stosd
|
|
|
|
ret
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
align 4
|
|
|
|
cd_calculate_cache:
|
|
|
|
; 1 - IDE0 ... 4 - IDE3
|
|
|
|
.ide0:
|
|
|
|
cmp [cdpos], 1
|
|
|
|
jne .ide1
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide0_appl_data
|
|
|
|
mov ecx, [cache_ide0_system_sad_size]
|
|
|
|
mov esi, [cache_ide0_pointer]
|
|
|
|
ret
|
|
|
|
.ide0_appl_data:
|
|
|
|
mov ecx, [cache_ide0_appl_sad_size]
|
|
|
|
mov esi, [cache_ide0_data_pointer]
|
|
|
|
ret
|
|
|
|
.ide1:
|
|
|
|
cmp [cdpos], 2
|
|
|
|
jne .ide2
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide1_appl_data
|
|
|
|
mov ecx, [cache_ide1_system_sad_size]
|
|
|
|
mov esi, [cache_ide1_pointer]
|
|
|
|
ret
|
|
|
|
.ide1_appl_data:
|
|
|
|
mov ecx, [cache_ide1_appl_sad_size]
|
|
|
|
mov esi, [cache_ide1_data_pointer]
|
|
|
|
ret
|
|
|
|
.ide2:
|
|
|
|
cmp [cdpos], 3
|
|
|
|
jne .ide3
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide2_appl_data
|
|
|
|
mov ecx, [cache_ide2_system_sad_size]
|
|
|
|
mov esi, [cache_ide2_pointer]
|
|
|
|
ret
|
|
|
|
.ide2_appl_data:
|
|
|
|
mov ecx, [cache_ide2_appl_sad_size]
|
|
|
|
mov esi, [cache_ide2_data_pointer]
|
|
|
|
ret
|
|
|
|
.ide3:
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide3_appl_data
|
|
|
|
mov ecx, [cache_ide3_system_sad_size]
|
|
|
|
mov esi, [cache_ide3_pointer]
|
|
|
|
ret
|
|
|
|
.ide3_appl_data:
|
|
|
|
mov ecx, [cache_ide3_appl_sad_size]
|
|
|
|
mov esi, [cache_ide3_data_pointer]
|
|
|
|
ret
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
align 4
|
|
|
|
cd_calculate_cache_1:
|
|
|
|
; 1 - IDE0 ... 4 - IDE3
|
|
|
|
.ide0:
|
|
|
|
cmp [cdpos], 1
|
|
|
|
jne .ide1
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide0_appl_data
|
|
|
|
mov esi, [cache_ide0_pointer]
|
|
|
|
ret
|
|
|
|
.ide0_appl_data:
|
|
|
|
mov esi, [cache_ide0_data_pointer]
|
|
|
|
ret
|
|
|
|
.ide1:
|
|
|
|
cmp [cdpos], 2
|
|
|
|
jne .ide2
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide1_appl_data
|
|
|
|
mov esi, [cache_ide1_pointer]
|
|
|
|
ret
|
|
|
|
.ide1_appl_data:
|
|
|
|
mov esi, [cache_ide1_data_pointer]
|
|
|
|
ret
|
|
|
|
.ide2:
|
|
|
|
cmp [cdpos], 3
|
|
|
|
jne .ide3
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide2_appl_data
|
|
|
|
mov esi, [cache_ide2_pointer]
|
|
|
|
ret
|
|
|
|
.ide2_appl_data:
|
|
|
|
mov esi, [cache_ide2_data_pointer]
|
|
|
|
ret
|
|
|
|
.ide3:
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide3_appl_data
|
|
|
|
mov esi, [cache_ide3_pointer]
|
|
|
|
ret
|
|
|
|
.ide3_appl_data:
|
|
|
|
mov esi, [cache_ide3_data_pointer]
|
|
|
|
ret
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
align 4
|
|
|
|
cd_calculate_cache_2:
|
|
|
|
; 1 - IDE0 ... 4 - IDE3
|
|
|
|
.ide0:
|
|
|
|
cmp [cdpos], 1
|
|
|
|
jne .ide1
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide0_appl_data
|
|
|
|
mov eax, [cache_ide0_system_data]
|
|
|
|
ret
|
|
|
|
.ide0_appl_data:
|
|
|
|
mov eax, [cache_ide0_appl_data]
|
|
|
|
ret
|
|
|
|
.ide1:
|
|
|
|
cmp [cdpos], 2
|
|
|
|
jne .ide2
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide1_appl_data
|
|
|
|
mov eax, [cache_ide1_system_data]
|
|
|
|
ret
|
|
|
|
.ide1_appl_data:
|
|
|
|
mov eax, [cache_ide1_appl_data]
|
|
|
|
ret
|
|
|
|
.ide2:
|
|
|
|
cmp [cdpos], 3
|
|
|
|
jne .ide3
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide2_appl_data
|
|
|
|
mov eax, [cache_ide2_system_data]
|
|
|
|
ret
|
|
|
|
.ide2_appl_data:
|
|
|
|
mov eax, [cache_ide2_appl_data]
|
|
|
|
ret
|
|
|
|
.ide3:
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide3_appl_data
|
|
|
|
mov eax, [cache_ide3_system_data]
|
|
|
|
ret
|
|
|
|
.ide3_appl_data:
|
|
|
|
mov eax, [cache_ide3_appl_data]
|
|
|
|
ret
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
align 4
|
|
|
|
cd_calculate_cache_3:
|
|
|
|
; mov ecx,cache_max*10/100
|
|
|
|
; mov edi,[cache_search_start]
|
|
|
|
|
|
|
|
; 1 - IDE0 ... 4 - IDE3
|
|
|
|
.ide0:
|
|
|
|
cmp [cdpos], 1
|
|
|
|
jne .ide1
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide0_appl_data
|
|
|
|
mov edi, [cache_ide0_search_start]
|
|
|
|
ret
|
|
|
|
.ide0_appl_data:
|
|
|
|
mov edi, [cache_ide0_appl_search_start]
|
|
|
|
ret
|
|
|
|
.ide1:
|
|
|
|
cmp [cdpos], 2
|
|
|
|
jne .ide2
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide1_appl_data
|
|
|
|
mov edi, [cache_ide1_search_start]
|
|
|
|
ret
|
|
|
|
.ide1_appl_data:
|
|
|
|
mov edi, [cache_ide1_appl_search_start]
|
|
|
|
ret
|
|
|
|
.ide2:
|
|
|
|
cmp [cdpos], 3
|
|
|
|
jne .ide3
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide2_appl_data
|
|
|
|
mov edi, [cache_ide2_search_start]
|
|
|
|
ret
|
|
|
|
.ide2_appl_data:
|
|
|
|
mov edi, [cache_ide2_appl_search_start]
|
|
|
|
ret
|
|
|
|
.ide3:
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide3_appl_data
|
|
|
|
mov edi, [cache_ide3_search_start]
|
|
|
|
ret
|
|
|
|
.ide3_appl_data:
|
|
|
|
mov edi, [cache_ide3_appl_search_start]
|
|
|
|
ret
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
align 4
|
|
|
|
cd_calculate_cache_4:
|
|
|
|
; cmp edi,cache_max
|
|
|
|
; 1 - IDE0 ... 4 - IDE3
|
|
|
|
.ide0:
|
|
|
|
cmp [cdpos], 1
|
|
|
|
jne .ide1
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide0_appl_data
|
|
|
|
cmp edi, [cache_ide0_system_sad_size]
|
|
|
|
ret
|
|
|
|
.ide0_appl_data:
|
|
|
|
cmp edi, [cache_ide0_appl_sad_size]
|
|
|
|
ret
|
|
|
|
.ide1:
|
|
|
|
cmp [cdpos], 2
|
|
|
|
jne .ide2
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide1_appl_data
|
|
|
|
cmp edi, [cache_ide1_system_sad_size]
|
|
|
|
ret
|
|
|
|
.ide1_appl_data:
|
|
|
|
cmp edi, [cache_ide1_appl_sad_size]
|
|
|
|
ret
|
|
|
|
.ide2:
|
|
|
|
cmp [cdpos], 3
|
|
|
|
jne .ide3
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide2_appl_data
|
|
|
|
cmp edi, [cache_ide2_system_sad_size]
|
|
|
|
ret
|
|
|
|
.ide2_appl_data:
|
|
|
|
cmp edi, [cache_ide2_appl_sad_size]
|
|
|
|
ret
|
|
|
|
.ide3:
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide3_appl_data
|
|
|
|
cmp edi, [cache_ide3_system_sad_size]
|
|
|
|
ret
|
|
|
|
.ide3_appl_data:
|
|
|
|
cmp edi, [cache_ide3_appl_sad_size]
|
|
|
|
ret
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
align 4
|
|
|
|
cd_calculate_cache_5:
|
|
|
|
; mov [cache_search_start],edi
|
|
|
|
; 1 - IDE0 ... 4 - IDE3
|
|
|
|
.ide0:
|
|
|
|
cmp [cdpos], 1
|
|
|
|
jne .ide1
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide0_appl_data
|
|
|
|
mov [cache_ide0_search_start], edi
|
|
|
|
ret
|
|
|
|
.ide0_appl_data:
|
|
|
|
mov [cache_ide0_appl_search_start], edi
|
|
|
|
ret
|
|
|
|
.ide1:
|
|
|
|
cmp [cdpos], 2
|
|
|
|
jne .ide2
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide1_appl_data
|
|
|
|
mov [cache_ide1_search_start], edi
|
|
|
|
ret
|
|
|
|
.ide1_appl_data:
|
|
|
|
mov [cache_ide1_appl_search_start], edi
|
|
|
|
ret
|
|
|
|
.ide2:
|
|
|
|
cmp [cdpos], 3
|
|
|
|
jne .ide3
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide2_appl_data
|
|
|
|
mov [cache_ide2_search_start], edi
|
|
|
|
ret
|
|
|
|
.ide2_appl_data:
|
|
|
|
mov [cache_ide2_appl_search_start], edi
|
|
|
|
ret
|
|
|
|
.ide3:
|
|
|
|
cmp [cd_appl_data], 0
|
|
|
|
jne .ide3_appl_data
|
|
|
|
mov [cache_ide3_search_start], edi
|
|
|
|
ret
|
|
|
|
.ide3_appl_data:
|
|
|
|
mov [cache_ide3_appl_search_start], edi
|
|
|
|
ret
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
;align 4
|
|
|
|
;calculate_linear_to_real:
|
|
|
|
; shr eax, 12
|
|
|
|
; mov eax, [page_tabs+eax*4]
|
|
|
|
; and eax, 0xFFFFF000
|
|
|
|
; ret
|