Subversion Repositories Kolibri OS

Rev

Rev 2455 | Rev 3539 | 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: 2643 $
  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. problem_partition db 0  ; used for partitions search
  137.  
  138. include  '../fs/part_set.inc'
  139.  
  140. partition_data_transfer:
  141.         mov     edi, [transfer_adress]
  142.         mov     esi, PARTITION_START            ;start of file_system_data
  143.         mov     ecx, (file_system_data_size+3)/4
  144.         rep movsd
  145.         ret
  146. uglobal
  147. transfer_adress dd 0
  148. endg
  149. partition_data_transfer_1:
  150. ;     cli
  151.         push    edi
  152.         mov     edi, PARTITION_START
  153.         mov     esi, [transfer_adress]
  154.         mov     ecx, (file_system_data_size+3)/4
  155.         rep movsd
  156.         pop     edi
  157. ;     sti
  158.         ret
  159.  
  160.  end_search_partitions:
  161.  
  162.