Subversion Repositories Kolibri OS

Rev

Rev 593 | Rev 1378 | Go to most recent revision | 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: 709 $
  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.       cmp   [problem_partition],0
  27.       jne   search_partitions_ide1
  28.       inc   byte [DRIVE_DATA+2]
  29.       call  partition_data_transfer
  30.       add   [transfer_adress],100
  31.       inc   [fat32part]
  32.       jmp   search_partitions_ide0_1
  33.  
  34.  search_partitions_ide1:
  35.       test  [DRIVE_DATA+1],byte 0x10
  36.       jz   search_partitions_ide2
  37.         mov   [hdbase],0x1f0
  38.         mov   [hdid],0x10
  39.         mov   [hdpos],2
  40.       mov  [fat32part],1
  41.  search_partitions_ide1_1:
  42.       call  set_FAT32_variables
  43.       cmp   [problem_partition],0
  44.       jne   search_partitions_ide2
  45.       inc   byte [DRIVE_DATA+3]
  46.       call  partition_data_transfer
  47.       add   [transfer_adress],100
  48.       inc   [fat32part]
  49.       jmp   search_partitions_ide1_1
  50.  
  51.  search_partitions_ide2:
  52.       test  [DRIVE_DATA+1],byte 0x4
  53.       jz   search_partitions_ide3
  54.         mov   [hdbase],0x170
  55.         mov   [hdid],0x0
  56.         mov   [hdpos],3
  57.       mov  [fat32part],1
  58.  search_partitions_ide2_1:
  59.       call  set_FAT32_variables
  60.       cmp   [problem_partition],0
  61.       jne   search_partitions_ide3
  62.       inc   byte [DRIVE_DATA+4]
  63.       call  partition_data_transfer
  64.       add   [transfer_adress],100
  65.       inc   [fat32part]
  66.       jmp   search_partitions_ide2_1
  67.  
  68.  search_partitions_ide3:
  69.       test  [DRIVE_DATA+1],byte 0x1
  70.       jz   end_search_partitions_ide
  71.         mov   [hdbase],0x170
  72.         mov   [hdid],0x10
  73.         mov   [hdpos],4
  74.       mov  [fat32part],1
  75.  search_partitions_ide3_1:
  76.       call  set_FAT32_variables
  77.       cmp   [problem_partition],0
  78.       jne   end_search_partitions_ide
  79.       inc   byte [DRIVE_DATA+5]
  80.       call  partition_data_transfer
  81.       add   [transfer_adress],100
  82.       inc   [fat32part]
  83.       jmp   search_partitions_ide3_1
  84.  
  85. end_search_partitions_ide:
  86.         mov     [hdpos], 80h
  87.         mov     ecx, [NumBiosDisks]
  88.         test    ecx, ecx
  89.         jz      end_search_partitions
  90. start_search_partitions_bd:
  91.         push    ecx
  92.         mov     eax, [hdpos]
  93.         and     [BiosDiskPartitions+(eax-80h)*4], 0
  94.         mov     [fat32part], 1
  95. search_partitions_bd:
  96.         call    set_FAT32_variables
  97.         cmp     [problem_partition], 0
  98.         jne     end_search_partitions_bd
  99.         mov     eax, [hdpos]
  100.         inc     [BiosDiskPartitions+(eax-80h)*4]
  101.         call    partition_data_transfer
  102.         add     [transfer_adress], 100
  103.         inc     [fat32part]
  104.         jmp     search_partitions_bd
  105. end_search_partitions_bd:
  106.         pop     ecx
  107.         inc     [hdpos]
  108.         loop    start_search_partitions_bd
  109.         jmp     end_search_partitions
  110.  
  111. partition_data_transfer:
  112.      mov edi,[transfer_adress]
  113.      mov esi,PARTITION_START
  114.      mov ecx,(file_system_data_size+3)/4
  115.      rep movsd
  116.      ret
  117. uglobal
  118. transfer_adress dd 0
  119. endg
  120. partition_data_transfer_1:
  121. ;     cli
  122.      push edi
  123.      mov edi,PARTITION_START
  124.      mov esi,[transfer_adress]
  125.      mov ecx,(file_system_data_size+3)/4
  126.      rep movsd
  127.      pop  edi
  128. ;     sti
  129.      ret
  130.  
  131.  end_search_partitions:
  132.  
  133. ;PARTITION_START      dd 0x3f
  134. ;PARTITION_END        dd 0
  135. ;SECTORS_PER_FAT      dd 0x1f3a
  136. ;NUMBER_OF_FATS       dd 0x2
  137. ;SECTORS_PER_CLUSTER  dd 0x8
  138. ;BYTES_PER_SECTOR     dd 0x200   ; Note: if BPS <> 512 need lots of changes
  139. ;ROOT_CLUSTER         dd 2       ; first rootdir cluster
  140. ;FAT_START            dd 0       ; start of fat table
  141. ;ROOT_START           dd 0       ; start of rootdir (only fat16)
  142. ;ROOT_SECTORS         dd 0       ; count of rootdir sectors (only fat16)
  143. ;DATA_START           dd 0       ; start of data area (=first cluster 2)
  144. ;LAST_CLUSTER         dd 0       ; last availabe cluster
  145. ;ADR_FSINFO           dd 0       ; used only by fat32
  146. ;
  147. ;fatRESERVED          dd 0x0FFFFFF6
  148. ;fatBAD               dd 0x0FFFFFF7
  149. ;fatEND               dd 0x0FFFFFF8
  150. ;fatMASK              dd 0x0FFFFFFF
  151. ;
  152. ;fat_type             db 0       ; 0=none, 16=fat16, 32=fat32
  153.  
  154.