Subversion Repositories Kolibri OS

Rev

Rev 837 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                                                              ;;
  3. ;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;;
  4. ;; Distributed under terms of the GNU General Public License    ;;
  5. ;;                                                              ;;
  6. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  7.  
  8. $Revision: 848 $
  9.  
  10.  
  11. ;****************************************************
  12. ;     ïîèñê ëîãè÷åñêèõ äèñêîâ íà îáíàðóæåííûõ HDD
  13. ;     è çàíåñåíèå äàííûõ â îáëàñòü òàáëèöû
  14. ;     àâòîð Mario79
  15. ;****************************************************
  16.       mov   [transfer_adress],DRIVE_DATA+0xa
  17.  search_partitions_ide0:
  18.       test  [DRIVE_DATA+1],byte 0x40
  19.       jz   search_partitions_ide1
  20.         mov   [hdbase],0x1f0
  21.         mov   [hdid],0x0
  22.         mov   [hdpos],1
  23.       mov  [fat32part],1
  24.  search_partitions_ide0_1:
  25.       call  set_FAT32_variables
  26.  
  27.       cmp   [problem_partition],0
  28.       jne   search_partitions_ide1
  29.       inc   byte [DRIVE_DATA+2]
  30.       call  partition_data_transfer
  31.       add   [transfer_adress],100
  32.       inc   [fat32part]
  33.       jmp   search_partitions_ide0_1
  34.  
  35.  search_partitions_ide1:
  36.       test  [DRIVE_DATA+1],byte 0x10
  37.       jz   search_partitions_ide2
  38.         mov   [hdbase],0x1f0
  39.         mov   [hdid],0x10
  40.         mov   [hdpos],2
  41.       mov  [fat32part],1
  42.  search_partitions_ide1_1:
  43.       call  set_FAT32_variables
  44.       cmp   [problem_partition],0
  45.       jne   search_partitions_ide2
  46.       inc   byte [DRIVE_DATA+3]
  47.       call  partition_data_transfer
  48.       add   [transfer_adress],100
  49.       inc   [fat32part]
  50.       jmp   search_partitions_ide1_1
  51.  
  52.  search_partitions_ide2:
  53.       test  [DRIVE_DATA+1],byte 0x4
  54.       jz   search_partitions_ide3
  55.         mov   [hdbase],0x170
  56.         mov   [hdid],0x0
  57.         mov   [hdpos],3
  58.       mov  [fat32part],1
  59.  search_partitions_ide2_1:
  60.       call  set_FAT32_variables
  61.       cmp   [problem_partition],0
  62.       jne   search_partitions_ide3
  63.       inc   byte [DRIVE_DATA+4]
  64.       call  partition_data_transfer
  65.       add   [transfer_adress],100
  66.       inc   [fat32part]
  67.       jmp   search_partitions_ide2_1
  68.  
  69.  search_partitions_ide3:
  70.       test  [DRIVE_DATA+1],byte 0x1
  71.       jz   end_search_partitions_ide
  72.         mov   [hdbase],0x170
  73.         mov   [hdid],0x10
  74.         mov   [hdpos],4
  75.       mov  [fat32part],1
  76.  search_partitions_ide3_1:
  77.       call  set_FAT32_variables
  78.       cmp   [problem_partition],0
  79.       jne   end_search_partitions_ide
  80.       inc   byte [DRIVE_DATA+5]
  81.       call  partition_data_transfer
  82.       add   [transfer_adress],100
  83.       inc   [fat32part]
  84.       jmp   search_partitions_ide3_1
  85.  
  86. end_search_partitions_ide:
  87.         mov     [hdpos], 80h
  88.         mov     ecx, [NumBiosDisks]
  89.         test    ecx, ecx
  90.         jz      end_search_partitions
  91. start_search_partitions_bd:
  92.         push    ecx
  93.         mov     eax, [hdpos]
  94.         and     [BiosDiskPartitions+(eax-80h)*4], 0
  95.         mov     [fat32part], 1
  96. search_partitions_bd:
  97.         call    set_FAT32_variables
  98.         cmp     [problem_partition], 0
  99.         jne     end_search_partitions_bd
  100.         mov     eax, [hdpos]
  101.         inc     [BiosDiskPartitions+(eax-80h)*4]
  102.         call    partition_data_transfer
  103.         add     [transfer_adress], 100
  104.         inc     [fat32part]
  105.         jmp     search_partitions_bd
  106. end_search_partitions_bd:
  107.         pop     ecx
  108.         inc     [hdpos]
  109.         loop    start_search_partitions_bd
  110.         jmp     end_search_partitions
  111.  
  112. partition_data_transfer:
  113.      mov edi,[transfer_adress]
  114.      mov esi,PARTITION_START
  115.      mov ecx,(file_system_data_size+3)/4
  116.      rep movsd
  117.      ret
  118. uglobal
  119. transfer_adress dd 0
  120. endg
  121. partition_data_transfer_1:
  122. ;     cli
  123.      push edi
  124.      mov edi,PARTITION_START
  125.      mov esi,[transfer_adress]
  126.      mov ecx,(file_system_data_size+3)/4
  127.      rep movsd
  128.      pop  edi
  129. ;     sti
  130.      ret
  131.  
  132.  end_search_partitions:
  133.  
  134. ;PARTITION_START      dd 0x3f
  135. ;PARTITION_END        dd 0
  136. ;SECTORS_PER_FAT      dd 0x1f3a
  137. ;NUMBER_OF_FATS       dd 0x2
  138. ;SECTORS_PER_CLUSTER  dd 0x8
  139. ;BYTES_PER_SECTOR     dd 0x200   ; Note: if BPS <> 512 need lots of changes
  140. ;ROOT_CLUSTER         dd 2       ; first rootdir cluster
  141. ;FAT_START            dd 0       ; start of fat table
  142. ;ROOT_START           dd 0       ; start of rootdir (only fat16)
  143. ;ROOT_SECTORS         dd 0       ; count of rootdir sectors (only fat16)
  144. ;DATA_START           dd 0       ; start of data area (=first cluster 2)
  145. ;LAST_CLUSTER         dd 0       ; last availabe cluster
  146. ;ADR_FSINFO           dd 0       ; used only by fat32
  147. ;
  148. ;fatRESERVED          dd 0x0FFFFFF6
  149. ;fatBAD               dd 0x0FFFFFF7
  150. ;fatEND               dd 0x0FFFFFF8
  151. ;fatMASK              dd 0x0FFFFFFF
  152. ;
  153. ;fat_type             db 0       ; 0=none, 16=fat16, 32=fat32
  154.  
  155.