;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; ;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;; ;; Distributed under terms of the GNU General Public License ;; ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; $Revision$ ;**************************************************** ; ïîèñê ëîãè÷åñêèõ äèñêîâ íà îáíàðóæåííûõ HDD ; è çàíåñåíèå äàííûõ â îáëàñòü òàáëèöû ; àâòîð Mario79 ;**************************************************** mov [transfer_adress],DRIVE_DATA+0xa search_partitions_ide0: test [DRIVE_DATA+1],byte 0x40 jz search_partitions_ide1 mov [hdbase],0x1f0 mov [hdid],0x0 mov [hdpos],1 mov [fat32part],1 search_partitions_ide0_1: call set_FAT32_variables cmp [problem_partition],0 jne search_partitions_ide1 inc byte [DRIVE_DATA+2] call partition_data_transfer add [transfer_adress],100 inc [fat32part] jmp search_partitions_ide0_1 search_partitions_ide1: test [DRIVE_DATA+1],byte 0x10 jz search_partitions_ide2 mov [hdbase],0x1f0 mov [hdid],0x10 mov [hdpos],2 mov [fat32part],1 search_partitions_ide1_1: call set_FAT32_variables cmp [problem_partition],0 jne search_partitions_ide2 inc byte [DRIVE_DATA+3] call partition_data_transfer add [transfer_adress],100 inc [fat32part] jmp search_partitions_ide1_1 search_partitions_ide2: test [DRIVE_DATA+1],byte 0x4 jz search_partitions_ide3 mov [hdbase],0x170 mov [hdid],0x0 mov [hdpos],3 mov [fat32part],1 search_partitions_ide2_1: call set_FAT32_variables cmp [problem_partition],0 jne search_partitions_ide3 inc byte [DRIVE_DATA+4] call partition_data_transfer add [transfer_adress],100 inc [fat32part] jmp search_partitions_ide2_1 search_partitions_ide3: test [DRIVE_DATA+1],byte 0x1 jz end_search_partitions_ide mov [hdbase],0x170 mov [hdid],0x10 mov [hdpos],4 mov [fat32part],1 search_partitions_ide3_1: call set_FAT32_variables cmp [problem_partition],0 jne end_search_partitions_ide inc byte [DRIVE_DATA+5] call partition_data_transfer add [transfer_adress],100 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] mov esi,PARTITION_START mov ecx,(file_system_data_size+3)/4 rep movsd ret uglobal transfer_adress dd 0 endg partition_data_transfer_1: ; cli push edi mov edi,PARTITION_START mov esi,[transfer_adress] mov ecx,(file_system_data_size+3)/4 rep movsd pop edi ; sti ret end_search_partitions: ;PARTITION_START dd 0x3f ;PARTITION_END dd 0 ;SECTORS_PER_FAT dd 0x1f3a ;NUMBER_OF_FATS dd 0x2 ;SECTORS_PER_CLUSTER dd 0x8 ;BYTES_PER_SECTOR dd 0x200 ; Note: if BPS <> 512 need lots of changes ;ROOT_CLUSTER dd 2 ; first rootdir cluster ;FAT_START dd 0 ; start of fat table ;ROOT_START dd 0 ; start of rootdir (only fat16) ;ROOT_SECTORS dd 0 ; count of rootdir sectors (only fat16) ;DATA_START dd 0 ; start of data area (=first cluster 2) ;LAST_CLUSTER dd 0 ; last availabe cluster ;ADR_FSINFO dd 0 ; used only by fat32 ; ;fatRESERVED dd 0x0FFFFFF6 ;fatBAD dd 0x0FFFFFF7 ;fatEND dd 0x0FFFFFF8 ;fatMASK dd 0x0FFFFFFF ; ;fat_type db 0 ; 0=none, 16=fat16, 32=fat32