Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 708 → Rev 709

/kernel/trunk/detect/biosdisk.inc
0,0 → 1,76
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Copyright (C) KolibriOS team 2008. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
; Detect all BIOS hard drives.
; diamond, 2008
 
xor cx, cx
mov es, cx
mov di, 0x9080
mov byte [es:di-1], cl
cmp [preboot_biosdisk], 1
jnz bdde
mov dl, 80h
bdds:
mov ah, 15h
push cx dx di
int 13h
pop di dx cx
jc bddc
test ah, ah
jz bddc
inc cx
mov ah, 48h
push ds
push es
pop ds
mov si, 0xA000
mov word [si], 1Eh
mov ah, 48h
int 13h
pop ds
jc bddc2
inc byte [es:0x907F]
cmp word [es:si], 1Eh
jb bddl
cmp word [es:si+1Ah], 0xFFFF
jz bddl
mov al, dl
stosb
push ds
lds si, [es:si+1Ah]
mov al, [si+6]
and al, 0xF
stosb
mov al, byte [si+4]
shr al, 4
and ax, 1
cmp word [si], 1F0h
jz @f
inc ax
inc ax
cmp word [si], 170h
jz @f
mov ax, -1
@@:
stosw
pop ds
jmp bddc2
bddl:
mov al, dl
stosb
mov al, 0
stosb
mov ax, -1
stosw
bddc2:
cmp cl, [es:0x475]
jae bdde
bddc:
inc dl
jnz bdds
bdde:
/kernel/trunk/detect/getcache.inc
1,17 → 1,6
 
$Revision: 0 $
 
 
;cache_ide0_pointer dd 0
;cache_ide0_size dd 0 ; not use
;cache_ide0_data_pointer dd 0
;cache_ide0_system_data_size dd 0 ; not use
;cache_ide0_appl_data_size dd 0 ; not use
;cache_ide0_system_data dd 0
;cache_ide0_appl_data dd 0
;cache_ide0_system_sad_size dd 0
;cache_ide0_appl_sad_size dd 0
 
pusha
 
mov eax,[pg_data.pages_free]
39,287 → 28,97
mov [cache_ide2_size],eax
mov [cache_ide3_size],eax
xor eax,eax
mov [cache_ide0_search_start],eax
mov [cache_ide0_appl_search_start],eax
mov [cache_ide1_search_start],eax
mov [cache_ide1_appl_search_start],eax
mov [cache_ide2_search_start],eax
mov [cache_ide2_appl_search_start],eax
mov [cache_ide3_search_start],eax
mov [cache_ide3_appl_search_start],eax
mov [hdd_appl_data],1 ;al
mov [cd_appl_data],1
mov cl,[DRIVE_DATA+1]
mov ch,cl
mov ch,[DRIVE_DATA+1]
mov cl,ch
and cl,11b
cmp cl,0
je .ide2
call get_cache_ide3
mov esi,cache_ide3
call get_cache_ide
.ide2:
mov cl,ch
and cl,1100b
cmp cl,0
shr cl,2
and cl,11b
je .ide1
call get_cache_ide2
mov esi,cache_ide2
call get_cache_ide
.ide1:
mov cl,ch
and cl,110000b
cmp cl,0
shr cl,4
and cl,11b
je .ide0
call get_cache_ide1
mov esi,cache_ide1
call get_cache_ide
.ide0:
mov cl,ch
and cl,11000000b
cmp cl,0
je end_get_cache
call get_cache_ide0
jmp end_get_cache
 
get_cache_ide0:
push ecx
stdcall kernel_alloc,[cache_ide0_size]
mov [cache_ide0_pointer],eax
pop ecx
mov edx,eax
shr cl,6
and cl,11b
je @f
mov esi,cache_ide0
call get_cache_ide
@@:
xor ecx,ecx
cmp [NumBiosDisks],ecx
jz .endbd
mov esi,BiosDiskCaches
.loopbd:
cmp byte [BiosDisksData+ecx*4+2],-1
jnz .contbd
mov eax,[cache_ide0_size]
shr eax,3
mov [cache_ide0_system_data_size],eax
mov ebx,eax
imul eax,7
mov [cache_ide0_appl_data_size],eax
add ebx,edx
mov [cache_ide0_data_pointer],ebx
 
cmp cl,10000000b
je .cd
mov [esi+cache_ide0_size-cache_ide0],eax
push ecx
mov eax,[cache_ide0_system_data_size]
call calculate_for_hd
add eax,[cache_ide0_pointer]
mov [cache_ide0_system_data],eax
mov [cache_ide0_system_sad_size],ecx
 
push edi
mov edi,[cache_ide0_pointer]
call clear_ide_cache
pop edi
 
mov eax,[cache_ide0_appl_data_size]
call calculate_for_hd
add eax,[cache_ide0_data_pointer]
mov [cache_ide0_appl_data],eax
mov [cache_ide0_appl_sad_size],ecx
 
push edi
mov edi,[cache_ide0_data_pointer]
call clear_ide_cache
pop edi
 
mov cl,1
call get_cache_ide
pop ecx
ret
.cd:
push ecx
mov eax,[cache_ide0_system_data_size]
call calculate_for_cd
add eax,[cache_ide0_pointer]
mov [cache_ide0_system_data],eax
mov [cache_ide0_system_sad_size],ecx
.contbd:
add esi,cache_ide1-cache_ide0
inc ecx
cmp ecx,[NumBiosDisks]
jb .loopbd
.endbd:
jmp end_get_cache
 
push edi
mov edi,[cache_ide0_pointer]
call clear_ide_cache
pop edi
 
mov eax,[cache_ide0_appl_data_size]
call calculate_for_cd
add eax,[cache_ide0_data_pointer]
mov [cache_ide0_appl_data],eax
mov [cache_ide0_appl_sad_size],ecx
 
push edi
mov edi,[cache_ide0_data_pointer]
call clear_ide_cache
pop edi
 
pop ecx
ret
 
get_cache_ide1:
get_cache_ide:
and [esi+cache_ide0_search_start-cache_ide0],0
and [esi+cache_ide0_appl_search_start-cache_ide0],0
push ecx
stdcall kernel_alloc,[cache_ide1_size]
mov [cache_ide1_pointer],eax
stdcall kernel_alloc,[esi+cache_ide0_size-cache_ide0]
mov [esi+cache_ide0_pointer-cache_ide0],eax
pop ecx
mov edx,eax
mov eax,[cache_ide1_size]
mov eax,[esi+cache_ide0_size-cache_ide0]
shr eax,3
mov [cache_ide1_system_data_size],eax
mov [esi+cache_ide0_system_data_size-cache_ide0],eax
mov ebx,eax
imul eax,7
mov [cache_ide1_appl_data_size],eax
mov [esi+cache_ide0_appl_data_size-cache_ide0],eax
add ebx,edx
mov [cache_ide1_data_pointer],ebx
mov [esi+cache_ide0_data_pointer-cache_ide0],ebx
 
cmp cl,100000b
je .cd
push ecx
mov eax,[cache_ide1_system_data_size]
call calculate_for_hd
add eax,[cache_ide1_pointer]
mov [cache_ide1_system_data],eax
mov [cache_ide1_system_sad_size],ecx
 
push edi
mov edi,[cache_ide1_pointer]
call clear_ide_cache
pop edi
 
mov eax,[cache_ide1_appl_data_size]
call calculate_for_hd
add eax,[cache_ide1_data_pointer]
mov [cache_ide1_appl_data],eax
mov [cache_ide1_appl_sad_size],ecx
 
push edi
mov edi,[cache_ide1_data_pointer]
call clear_ide_cache
pop edi
 
pop ecx
ret
.cd:
push ecx
mov eax,[cache_ide1_system_data_size]
call calculate_for_cd
add eax,[cache_ide1_pointer]
mov [cache_ide1_system_data],eax
mov [cache_ide1_system_sad_size],ecx
 
push edi
mov edi,[cache_ide1_pointer]
call clear_ide_cache
pop edi
 
mov eax,[cache_ide1_appl_data_size]
call calculate_for_cd
add eax,[cache_ide1_data_pointer]
mov [cache_ide1_appl_data],eax
mov [cache_ide1_appl_sad_size],ecx
 
push edi
mov edi,[cache_ide1_data_pointer]
call clear_ide_cache
pop edi
 
pop ecx
ret
 
get_cache_ide2:
push ecx
stdcall kernel_alloc,[cache_ide2_size]
mov [cache_ide2_pointer],eax
pop ecx
mov edx,eax
mov eax,[cache_ide2_size]
shr eax,3
mov [cache_ide2_system_data_size],eax
mov ebx,eax
imul eax,7
mov [cache_ide2_appl_data_size],eax
add ebx,edx
mov [cache_ide2_data_pointer],ebx
 
cmp cl,1000b
je .cd
push ecx
mov eax,[cache_ide2_system_data_size]
call calculate_for_hd
add eax,[cache_ide2_pointer]
mov [cache_ide2_system_data],eax
mov [cache_ide2_system_sad_size],ecx
 
push edi
mov edi,[cache_ide2_pointer]
call clear_ide_cache
pop edi
 
mov eax,[cache_ide2_appl_data_size]
call calculate_for_hd
add eax,[cache_ide2_data_pointer]
mov [cache_ide2_appl_data],eax
mov [cache_ide2_appl_sad_size],ecx
 
push edi
mov edi,[cache_ide2_data_pointer]
call clear_ide_cache
pop edi
 
pop ecx
ret
.cd:
push ecx
mov eax,[cache_ide2_system_data_size]
call calculate_for_cd
add eax,[cache_ide2_pointer]
mov [cache_ide2_system_data],eax
mov [cache_ide2_system_sad_size],ecx
 
push edi
mov edi,[cache_ide2_pointer]
call clear_ide_cache
pop edi
 
mov eax,[cache_ide2_appl_data_size]
call calculate_for_cd
add eax,[cache_ide2_data_pointer]
mov [cache_ide2_appl_data],eax
mov [cache_ide2_appl_sad_size],ecx
 
push edi
mov edi,[cache_ide2_data_pointer]
call clear_ide_cache
pop edi
 
pop ecx
ret
 
get_cache_ide3:
push ecx
stdcall kernel_alloc,[cache_ide3_size]
mov [cache_ide3_pointer],eax
pop ecx
mov edx,eax
mov eax,[cache_ide3_size]
shr eax,3
mov [cache_ide3_system_data_size],eax
mov ebx,eax
imul eax,7
mov [cache_ide3_appl_data_size],eax
add ebx,edx
mov [cache_ide3_data_pointer],ebx
 
cmp cl,10b
je .cd
push ecx
mov eax,[cache_ide3_system_data_size]
mov eax,[esi+cache_ide0_system_data_size-cache_ide0]
call calculate_for_hd
add eax,[cache_ide3_pointer]
mov [cache_ide3_system_data],eax
mov [cache_ide3_system_sad_size],ecx
add eax,[esi+cache_ide0_pointer-cache_ide0]
mov [esi+cache_ide0_system_data-cache_ide0],eax
mov [esi+cache_ide0_system_sad_size-cache_ide0],ecx
 
push edi
mov edi,[cache_ide3_pointer]
mov edi,[esi+cache_ide0_pointer-cache_ide0]
call clear_ide_cache
pop edi
 
mov eax,[cache_ide3_appl_data_size]
mov eax,[esi+cache_ide0_appl_data_size-cache_ide0]
call calculate_for_hd
add eax,[cache_ide3_data_pointer]
mov [cache_ide3_appl_data],eax
mov [cache_ide3_appl_sad_size],ecx
add eax,[esi+cache_ide0_data_pointer-cache_ide0]
mov [esi+cache_ide0_appl_data-cache_ide0],eax
mov [esi+cache_ide0_appl_sad_size-cache_ide0],ecx
 
push edi
mov edi,[cache_ide3_data_pointer]
mov edi,[esi+cache_ide0_data_pointer-cache_ide0]
call clear_ide_cache
pop edi
 
327,25 → 126,25
ret
.cd:
push ecx
mov eax,[cache_ide3_system_data_size]
mov eax,[esi+cache_ide0_system_data_size-cache_ide0]
call calculate_for_cd
add eax,[cache_ide3_pointer]
mov [cache_ide3_system_data],eax
mov [cache_ide3_system_sad_size],ecx
add eax,[esi+cache_ide0_pointer-cache_ide0]
mov [esi+cache_ide0_system_data-cache_ide0],eax
mov [esi+cache_ide0_system_sad_size-cache_ide0],ecx
 
push edi
mov edi,[cache_ide3_pointer]
mov edi,[esi+cache_ide0_pointer-cache_ide0]
call clear_ide_cache
pop edi
 
mov eax,[cache_ide3_appl_data_size]
mov eax,[esi+cache_ide0_appl_data_size-cache_ide0]
call calculate_for_cd
add eax,[cache_ide3_data_pointer]
mov [cache_ide3_appl_data],eax
mov [cache_ide3_appl_sad_size],ecx
add eax,[esi+cache_ide0_data_pointer-cache_ide0]
mov [esi+cache_ide0_appl_data-cache_ide0],eax
mov [esi+cache_ide0_appl_sad_size-cache_ide0],ecx
 
push edi
mov edi,[cache_ide3_data_pointer]
mov edi,[esi+cache_ide0_data_pointer-cache_ide0]
call clear_ide_cache
pop edi
 
/kernel/trunk/detect/sear_par.inc
1,6 → 1,6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
82,6 → 82,31
inc [fat32part]
jmp search_partitions_ide3_1
 
end_search_partitions_ide:
mov [hdpos], 80h
mov ecx, [NumBiosDisks]
test ecx, ecx
jz end_search_partitions
start_search_partitions_bd:
push ecx
mov eax, [hdpos]
and [BiosDiskPartitions+(eax-80h)*4], 0
mov [fat32part], 1
search_partitions_bd:
call set_FAT32_variables
cmp [problem_partition], 0
jne end_search_partitions_bd
mov eax, [hdpos]
inc [BiosDiskPartitions+(eax-80h)*4]
call partition_data_transfer
add [transfer_adress], 100
inc [fat32part]
jmp search_partitions_bd
end_search_partitions_bd:
pop ecx
inc [hdpos]
loop start_search_partitions_bd
jmp end_search_partitions
 
partition_data_transfer:
mov edi,[transfer_adress]
103,7 → 128,7
; sti
ret
 
end_search_partitions_ide:
end_search_partitions:
 
;PARTITION_START dd 0x3f
;PARTITION_END dd 0