Subversion Repositories Kolibri OS

Rev

Rev 2288 | Rev 2643 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2288 clevermous 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
2455 mario79 3
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
2288 clevermous 4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7
 
8
$Revision: 2455 $
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:
1410 turbanoff 25
        call    set_PARTITION_variables
2288 clevermous 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
1410 turbanoff 118
        jnz     end_search_partitions_bd
2288 clevermous 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
1410 turbanoff 126
        add     [transfer_adress], 100
2288 clevermous 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
 
1410 turbanoff 156
 end_search_partitions:
157