Subversion Repositories Kolibri OS

Rev

Rev 3702 | Rev 3742 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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