Subversion Repositories Kolibri OS

Rev

Rev 1378 | Rev 2288 | 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: 1410 $
  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  [known_part],1
  24.  search_partitions_ide0_1:
  25.       call  set_PARTITION_variables
  26.       test  [problem_partition],2
  27.       jnz   search_partitions_ide1      ; not found part
  28.       test  [problem_partition],1
  29.       jnz   @F                          ; not found known_part
  30.       ;cmp   [problem_partition],0
  31.       ;jne   search_partitions_ide1
  32.       inc   byte [DRIVE_DATA+2]
  33.       call  partition_data_transfer
  34.       add   [transfer_adress],100
  35.     @@:
  36.       inc   [known_part]
  37.       jmp   search_partitions_ide0_1
  38.  
  39.  search_partitions_ide1:
  40.       test  [DRIVE_DATA+1],byte 0x10
  41.       jz   search_partitions_ide2
  42.         mov   [hdbase],0x1f0
  43.         mov   [hdid],0x10
  44.         mov   [hdpos],2
  45.       mov  [known_part],1
  46.  search_partitions_ide1_1:
  47.       call  set_PARTITION_variables
  48.       test  [problem_partition],2
  49.       jnz   search_partitions_ide2
  50.       test  [problem_partition],1
  51.       jnz   @F
  52.       ;cmp   [problem_partition],0
  53.       ;jne   search_partitions_ide2
  54.       inc   byte [DRIVE_DATA+3]
  55.       call  partition_data_transfer
  56.       add   [transfer_adress],100
  57.     @@:
  58.       inc   [known_part]
  59.       jmp   search_partitions_ide1_1
  60.  
  61.  search_partitions_ide2:
  62.       test  [DRIVE_DATA+1],byte 0x4
  63.       jz   search_partitions_ide3
  64.         mov   [hdbase],0x170
  65.         mov   [hdid],0x0
  66.         mov   [hdpos],3
  67.       mov  [known_part],1
  68.  search_partitions_ide2_1:
  69.       call  set_PARTITION_variables
  70.       test  [problem_partition],2
  71.       jnz   search_partitions_ide3
  72.       test  [problem_partition],1
  73.       jnz   @F
  74.       ;cmp   [problem_partition],0
  75.       ;jne   search_partitions_ide3
  76.       inc   byte [DRIVE_DATA+4]
  77.       call  partition_data_transfer
  78.       add   [transfer_adress],100
  79.     @@:
  80.       inc   [known_part]
  81.       jmp   search_partitions_ide2_1
  82.  
  83.  search_partitions_ide3:
  84.       test  [DRIVE_DATA+1],byte 0x1
  85.       jz   end_search_partitions_ide
  86.         mov   [hdbase],0x170
  87.         mov   [hdid],0x10
  88.         mov   [hdpos],4
  89.       mov  [known_part],1
  90.  search_partitions_ide3_1:
  91.       call  set_PARTITION_variables
  92.       test  [problem_partition],2
  93.       jnz   end_search_partitions_ide
  94.       test  [problem_partition],1
  95.       jnz   @F
  96.       ;cmp   [problem_partition],0
  97.       ;jne   end_search_partitions_ide
  98.       inc   byte [DRIVE_DATA+5]
  99.       call  partition_data_transfer
  100.       add   [transfer_adress],100
  101.     @@:
  102.       inc   [known_part]
  103.       jmp   search_partitions_ide3_1
  104.  
  105. end_search_partitions_ide:
  106.         mov     [hdpos], 80h
  107.         mov     ecx, [NumBiosDisks]
  108.         test    ecx, ecx
  109.         jz      end_search_partitions
  110. start_search_partitions_bd:
  111.         push    ecx
  112.         mov     eax, [hdpos]
  113.         and     [BiosDiskPartitions+(eax-80h)*4], 0
  114.         mov     [known_part], 1
  115. search_partitions_bd:
  116.         call    set_PARTITION_variables
  117.         test    [problem_partition],2
  118.         jnz     end_search_partitions_bd
  119.         test    [problem_partition],1
  120.         jnz     @F
  121.         ;cmp     [problem_partition], 0
  122.         ;jne     end_search_partitions_bd
  123.         mov     eax, [hdpos]
  124.         inc     [BiosDiskPartitions+(eax-80h)*4]
  125.         call    partition_data_transfer
  126.         add     [transfer_adress], 100
  127.     @@:
  128.         inc     [known_part]
  129.         jmp     search_partitions_bd
  130. end_search_partitions_bd:
  131.         pop     ecx
  132.         inc     [hdpos]
  133.         loop    start_search_partitions_bd
  134.         jmp     end_search_partitions
  135.  
  136. partition_data_transfer:
  137.      mov edi,[transfer_adress]
  138.      mov esi,PARTITION_START                    ;start of file_system_data
  139.      mov ecx,(file_system_data_size+3)/4
  140.      rep movsd
  141.      ret
  142. uglobal
  143. transfer_adress dd 0
  144. endg
  145. partition_data_transfer_1:
  146. ;     cli
  147.      push edi
  148.      mov edi,PARTITION_START
  149.      mov esi,[transfer_adress]
  150.      mov ecx,(file_system_data_size+3)/4
  151.      rep movsd
  152.      pop  edi
  153. ;     sti
  154.      ret
  155.  
  156.  end_search_partitions:
  157.  
  158.