Subversion Repositories Kolibri OS

Rev

Rev 3702 | Rev 3742 | 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: 3711 $
9
 
10
 
11
;****************************************************
3539 clevermous 12
;     поиск логических дисков на обнаруженных HDD
13
;     и занесение данных в область таблицы
14
;     автор Mario79
2288 clevermous 15
;****************************************************
16
        mov     [transfer_adress], DRIVE_DATA+0xa
17
 search_partitions_ide0:
18
        test    [DRIVE_DATA+1], byte 0x40
19
        jz      search_partitions_ide1
3711 clevermous 20
        mov     eax, [hd_address_table]
21
        mov     [hdbase], eax   ;0x1f0
2288 clevermous 22
        mov     [hdid], 0x0
23
        mov     [hdpos], 1
24
        mov     [known_part], 1
25
 search_partitions_ide0_1:
1410 turbanoff 26
        call    set_PARTITION_variables
2288 clevermous 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
3711 clevermous 43
        mov     eax, [hd_address_table]
44
        mov     [hdbase], eax   ;0x1f0
2288 clevermous 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
3711 clevermous 66
        mov     eax, [hd_address_table+16]
67
        mov     [hdbase], eax   ;0x170
2288 clevermous 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
3711 clevermous 89
        mov     eax, [hd_address_table+16]
90
        mov     [hdbase], eax   ;0x170
2288 clevermous 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
1410 turbanoff 122
        jnz     end_search_partitions_bd
2288 clevermous 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
1410 turbanoff 130
        add     [transfer_adress], 100
2288 clevermous 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
 
2643 clevermous 140
problem_partition db 0  ; used for partitions search
141
 
142
include  '../fs/part_set.inc'
143
 
2288 clevermous 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
 
1410 turbanoff 164
 end_search_partitions:
165