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: |