Subversion Repositories Kolibri OS

Rev

Rev 2987 | Rev 3725 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2987 Rev 3555
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
2
;;                                                              ;;
3
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
3
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
4
;; Distributed under terms of the GNU General Public License    ;;
4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7
 
7
 
8
$Revision: 2987 $
8
$Revision: 3555 $
9
 
9
 
10
 
10
 
11
;****************************************************
11
;****************************************************
12
;     ïîèñê ëîãè÷åñêèõ äèñêîâ íà îáíàðóæåííûõ HDD
12
;     поиск логических дисков на обнаруженных HDD
13
;     è çàíåñåíèå äàííûõ â îáëàñòü òàáëèöû
13
;     и занесение данных в область таблицы
14
;     àâòîð Mario79
14
;     автор Mario79
15
;****************************************************
15
;****************************************************
16
        mov     [transfer_adress], DRIVE_DATA+0xa
16
        mov     [transfer_adress], DRIVE_DATA+0xa
17
 search_partitions_ide0:
17
 search_partitions_ide0:
18
        test    [DRIVE_DATA+1], byte 0x40
18
        test    [DRIVE_DATA+1], byte 0x40
19
        jz      search_partitions_ide1
19
        jz      search_partitions_ide1
20
        mov     [hdbase], 0x1f0
20
        mov     [hdbase], 0x1f0
21
        mov     [hdid], 0x0
21
        mov     [hdid], 0x0
22
        mov     [hdpos], 1
22
        mov     [hdpos], 1
23
        mov     [known_part], 1
23
        mov     [known_part], 1
24
 search_partitions_ide0_1:
24
 search_partitions_ide0_1:
25
        call    set_PARTITION_variables
25
        call    set_PARTITION_variables
26
        test    [problem_partition], 2
26
        test    [problem_partition], 2
27
        jnz     search_partitions_ide1  ; not found part
27
        jnz     search_partitions_ide1  ; not found part
28
        test    [problem_partition], 1
28
        test    [problem_partition], 1
29
        jnz     @F                      ; not found known_part
29
        jnz     @F                      ; not found known_part
30
      ;cmp   [problem_partition],0
30
      ;cmp   [problem_partition],0
31
      ;jne   search_partitions_ide1
31
      ;jne   search_partitions_ide1
32
        inc     byte [DRIVE_DATA+2]
32
        inc     byte [DRIVE_DATA+2]
33
        call    partition_data_transfer
33
        call    partition_data_transfer
34
        add     [transfer_adress], 100
34
        add     [transfer_adress], 100
35
    @@:
35
    @@:
36
        inc     [known_part]
36
        inc     [known_part]
37
        jmp     search_partitions_ide0_1
37
        jmp     search_partitions_ide0_1
38
 
38
 
39
 search_partitions_ide1:
39
 search_partitions_ide1:
40
        test    [DRIVE_DATA+1], byte 0x10
40
        test    [DRIVE_DATA+1], byte 0x10
41
        jz      search_partitions_ide2
41
        jz      search_partitions_ide2
42
        mov     [hdbase], 0x1f0
42
        mov     [hdbase], 0x1f0
43
        mov     [hdid], 0x10
43
        mov     [hdid], 0x10
44
        mov     [hdpos], 2
44
        mov     [hdpos], 2
45
        mov     [known_part], 1
45
        mov     [known_part], 1
46
 search_partitions_ide1_1:
46
 search_partitions_ide1_1:
47
        call    set_PARTITION_variables
47
        call    set_PARTITION_variables
48
        test    [problem_partition], 2
48
        test    [problem_partition], 2
49
        jnz     search_partitions_ide2
49
        jnz     search_partitions_ide2
50
        test    [problem_partition], 1
50
        test    [problem_partition], 1
51
        jnz     @F
51
        jnz     @F
52
      ;cmp   [problem_partition],0
52
      ;cmp   [problem_partition],0
53
      ;jne   search_partitions_ide2
53
      ;jne   search_partitions_ide2
54
        inc     byte [DRIVE_DATA+3]
54
        inc     byte [DRIVE_DATA+3]
55
        call    partition_data_transfer
55
        call    partition_data_transfer
56
        add     [transfer_adress], 100
56
        add     [transfer_adress], 100
57
    @@:
57
    @@:
58
        inc     [known_part]
58
        inc     [known_part]
59
        jmp     search_partitions_ide1_1
59
        jmp     search_partitions_ide1_1
60
 
60
 
61
 search_partitions_ide2:
61
 search_partitions_ide2:
62
        test    [DRIVE_DATA+1], byte 0x4
62
        test    [DRIVE_DATA+1], byte 0x4
63
        jz      search_partitions_ide3
63
        jz      search_partitions_ide3
64
        mov     [hdbase], 0x170
64
        mov     [hdbase], 0x170
65
        mov     [hdid], 0x0
65
        mov     [hdid], 0x0
66
        mov     [hdpos], 3
66
        mov     [hdpos], 3
67
        mov     [known_part], 1
67
        mov     [known_part], 1
68
 search_partitions_ide2_1:
68
 search_partitions_ide2_1:
69
        call    set_PARTITION_variables
69
        call    set_PARTITION_variables
70
        test    [problem_partition], 2
70
        test    [problem_partition], 2
71
        jnz     search_partitions_ide3
71
        jnz     search_partitions_ide3
72
        test    [problem_partition], 1
72
        test    [problem_partition], 1
73
        jnz     @F
73
        jnz     @F
74
      ;cmp   [problem_partition],0
74
      ;cmp   [problem_partition],0
75
      ;jne   search_partitions_ide3
75
      ;jne   search_partitions_ide3
76
        inc     byte [DRIVE_DATA+4]
76
        inc     byte [DRIVE_DATA+4]
77
        call    partition_data_transfer
77
        call    partition_data_transfer
78
        add     [transfer_adress], 100
78
        add     [transfer_adress], 100
79
    @@:
79
    @@:
80
        inc     [known_part]
80
        inc     [known_part]
81
        jmp     search_partitions_ide2_1
81
        jmp     search_partitions_ide2_1
82
 
82
 
83
 search_partitions_ide3:
83
 search_partitions_ide3:
84
        test    [DRIVE_DATA+1], byte 0x1
84
        test    [DRIVE_DATA+1], byte 0x1
85
        jz      end_search_partitions_ide
85
        jz      end_search_partitions_ide
86
        mov     [hdbase], 0x170
86
        mov     [hdbase], 0x170
87
        mov     [hdid], 0x10
87
        mov     [hdid], 0x10
88
        mov     [hdpos], 4
88
        mov     [hdpos], 4
89
        mov     [known_part], 1
89
        mov     [known_part], 1
90
 search_partitions_ide3_1:
90
 search_partitions_ide3_1:
91
        call    set_PARTITION_variables
91
        call    set_PARTITION_variables
92
        test    [problem_partition], 2
92
        test    [problem_partition], 2
93
        jnz     end_search_partitions_ide
93
        jnz     end_search_partitions_ide
94
        test    [problem_partition], 1
94
        test    [problem_partition], 1
95
        jnz     @F
95
        jnz     @F
96
      ;cmp   [problem_partition],0
96
      ;cmp   [problem_partition],0
97
      ;jne   end_search_partitions_ide
97
      ;jne   end_search_partitions_ide
98
        inc     byte [DRIVE_DATA+5]
98
        inc     byte [DRIVE_DATA+5]
99
        call    partition_data_transfer
99
        call    partition_data_transfer
100
        add     [transfer_adress], 100
100
        add     [transfer_adress], 100
101
    @@:
101
    @@:
102
        inc     [known_part]
102
        inc     [known_part]
103
        jmp     search_partitions_ide3_1
103
        jmp     search_partitions_ide3_1
104
 
104
 
105
end_search_partitions_ide:
105
end_search_partitions_ide:
106
        mov     [hdpos], 80h
106
        mov     [hdpos], 80h
107
        mov     ecx, [NumBiosDisks]
107
        mov     ecx, [NumBiosDisks]
108
        test    ecx, ecx
108
        test    ecx, ecx
109
        jz      end_search_partitions
109
        jz      end_search_partitions
110
start_search_partitions_bd:
110
start_search_partitions_bd:
111
        push    ecx
111
        push    ecx
112
        mov     eax, [hdpos]
112
        mov     eax, [hdpos]
113
        and     [BiosDiskPartitions+(eax-80h)*4], 0
113
        and     [BiosDiskPartitions+(eax-80h)*4], 0
114
        mov     [known_part], 1
114
        mov     [known_part], 1
115
search_partitions_bd:
115
search_partitions_bd:
116
        call    set_PARTITION_variables
116
        call    set_PARTITION_variables
117
        test    [problem_partition], 2
117
        test    [problem_partition], 2
118
        jnz     end_search_partitions_bd
118
        jnz     end_search_partitions_bd
119
        test    [problem_partition], 1
119
        test    [problem_partition], 1
120
        jnz     @F
120
        jnz     @F
121
        ;cmp     [problem_partition], 0
121
        ;cmp     [problem_partition], 0
122
        ;jne     end_search_partitions_bd
122
        ;jne     end_search_partitions_bd
123
        mov     eax, [hdpos]
123
        mov     eax, [hdpos]
124
        inc     [BiosDiskPartitions+(eax-80h)*4]
124
        inc     [BiosDiskPartitions+(eax-80h)*4]
125
        call    partition_data_transfer
125
        call    partition_data_transfer
126
        add     [transfer_adress], 100
126
        add     [transfer_adress], 100
127
    @@:
127
    @@:
128
        inc     [known_part]
128
        inc     [known_part]
129
        jmp     search_partitions_bd
129
        jmp     search_partitions_bd
130
end_search_partitions_bd:
130
end_search_partitions_bd:
131
        pop     ecx
131
        pop     ecx
132
        inc     [hdpos]
132
        inc     [hdpos]
133
        loop    start_search_partitions_bd
133
        loop    start_search_partitions_bd
134
        jmp     end_search_partitions
134
        jmp     end_search_partitions
135
 
135
 
136
problem_partition db 0  ; used for partitions search
136
problem_partition db 0  ; used for partitions search
137
 
137
 
138
include  '../fs/part_set.inc'
138
include  '../fs/part_set.inc'
139
 
139
 
140
partition_data_transfer:
140
partition_data_transfer:
141
        mov     edi, [transfer_adress]
141
        mov     edi, [transfer_adress]
142
        mov     esi, PARTITION_START            ;start of file_system_data
142
        mov     esi, PARTITION_START            ;start of file_system_data
143
        mov     ecx, (file_system_data_size+3)/4
143
        mov     ecx, (file_system_data_size+3)/4
144
        rep movsd
144
        rep movsd
145
        ret
145
        ret
146
uglobal
146
uglobal
147
transfer_adress dd 0
147
transfer_adress dd 0
148
endg
148
endg
149
partition_data_transfer_1:
149
partition_data_transfer_1:
150
;     cli
150
;     cli
151
        push    edi
151
        push    edi
152
        mov     edi, PARTITION_START
152
        mov     edi, PARTITION_START
153
        mov     esi, [transfer_adress]
153
        mov     esi, [transfer_adress]
154
        mov     ecx, (file_system_data_size+3)/4
154
        mov     ecx, (file_system_data_size+3)/4
155
        rep movsd
155
        rep movsd
156
        pop     edi
156
        pop     edi
157
;     sti
157
;     sti
158
        ret
158
        ret
159
 
159
 
160
 end_search_partitions:
160
 end_search_partitions: