Rev 425 | Rev 709 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 425 | Rev 431 | ||
---|---|---|---|
1 | $Revision: 425 $ |
1 | $Revision: 431 $ |
- | 2 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
- | 3 | ;; ;; |
|
- | 4 | ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; |
|
- | 5 | ;; Distributed under terms of the GNU General Public License ;; |
|
- | 6 | ;; ;; |
|
- | 7 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
2 | ;**************************************************** |
8 | ;**************************************************** |
3 | ; ïîèñê ëîãè÷åñêèõ äèñêîâ íà îáíàðóæåííûõ HDD |
9 | ; ïîèñê ëîãè÷åñêèõ äèñêîâ íà îáíàðóæåííûõ HDD |
4 | ; è çàíåñåíèå äàííûõ â îáëàñòü òàáëèöû |
10 | ; è çàíåñåíèå äàííûõ â îáëàñòü òàáëèöû |
5 | ; àâòîð Mario79 |
11 | ; àâòîð Mario79 |
6 | ;**************************************************** |
12 | ;**************************************************** |
7 | mov [transfer_adress],DRIVE_DATA+0xa |
13 | mov [transfer_adress],DRIVE_DATA+0xa |
8 | search_partitions_ide0: |
14 | search_partitions_ide0: |
9 | test [DRIVE_DATA+1],byte 0x40 |
15 | test [DRIVE_DATA+1],byte 0x40 |
10 | jz search_partitions_ide1 |
16 | jz search_partitions_ide1 |
11 | mov [hdbase],0x1f0 |
17 | mov [hdbase],0x1f0 |
12 | mov [hdid],0x0 |
18 | mov [hdid],0x0 |
13 | mov [hdpos],1 |
19 | mov [hdpos],1 |
14 | mov [fat32part],1 |
20 | mov [fat32part],1 |
15 | search_partitions_ide0_1: |
21 | search_partitions_ide0_1: |
16 | call set_FAT32_variables |
22 | call set_FAT32_variables |
17 | cmp [problem_partition],0 |
23 | cmp [problem_partition],0 |
18 | jne search_partitions_ide1 |
24 | jne search_partitions_ide1 |
19 | inc byte [DRIVE_DATA+2] |
25 | inc byte [DRIVE_DATA+2] |
20 | call partition_data_transfer |
26 | call partition_data_transfer |
21 | add [transfer_adress],100 |
27 | add [transfer_adress],100 |
22 | inc [fat32part] |
28 | inc [fat32part] |
23 | jmp search_partitions_ide0_1 |
29 | jmp search_partitions_ide0_1 |
24 | 30 | ||
25 | search_partitions_ide1: |
31 | search_partitions_ide1: |
26 | test [DRIVE_DATA+1],byte 0x10 |
32 | test [DRIVE_DATA+1],byte 0x10 |
27 | jz search_partitions_ide2 |
33 | jz search_partitions_ide2 |
28 | mov [hdbase],0x1f0 |
34 | mov [hdbase],0x1f0 |
29 | mov [hdid],0x10 |
35 | mov [hdid],0x10 |
30 | mov [hdpos],2 |
36 | mov [hdpos],2 |
31 | mov [fat32part],1 |
37 | mov [fat32part],1 |
32 | search_partitions_ide1_1: |
38 | search_partitions_ide1_1: |
33 | call set_FAT32_variables |
39 | call set_FAT32_variables |
34 | cmp [problem_partition],0 |
40 | cmp [problem_partition],0 |
35 | jne search_partitions_ide2 |
41 | jne search_partitions_ide2 |
36 | inc byte [DRIVE_DATA+3] |
42 | inc byte [DRIVE_DATA+3] |
37 | call partition_data_transfer |
43 | call partition_data_transfer |
38 | add [transfer_adress],100 |
44 | add [transfer_adress],100 |
39 | inc [fat32part] |
45 | inc [fat32part] |
40 | jmp search_partitions_ide1_1 |
46 | jmp search_partitions_ide1_1 |
41 | 47 | ||
42 | search_partitions_ide2: |
48 | search_partitions_ide2: |
43 | test [DRIVE_DATA+1],byte 0x4 |
49 | test [DRIVE_DATA+1],byte 0x4 |
44 | jz search_partitions_ide3 |
50 | jz search_partitions_ide3 |
45 | mov [hdbase],0x170 |
51 | mov [hdbase],0x170 |
46 | mov [hdid],0x0 |
52 | mov [hdid],0x0 |
47 | mov [hdpos],3 |
53 | mov [hdpos],3 |
48 | mov [fat32part],1 |
54 | mov [fat32part],1 |
49 | search_partitions_ide2_1: |
55 | search_partitions_ide2_1: |
50 | call set_FAT32_variables |
56 | call set_FAT32_variables |
51 | cmp [problem_partition],0 |
57 | cmp [problem_partition],0 |
52 | jne search_partitions_ide3 |
58 | jne search_partitions_ide3 |
53 | inc byte [DRIVE_DATA+4] |
59 | inc byte [DRIVE_DATA+4] |
54 | call partition_data_transfer |
60 | call partition_data_transfer |
55 | add [transfer_adress],100 |
61 | add [transfer_adress],100 |
56 | inc [fat32part] |
62 | inc [fat32part] |
57 | jmp search_partitions_ide2_1 |
63 | jmp search_partitions_ide2_1 |
58 | 64 | ||
59 | search_partitions_ide3: |
65 | search_partitions_ide3: |
60 | test [DRIVE_DATA+1],byte 0x1 |
66 | test [DRIVE_DATA+1],byte 0x1 |
61 | jz end_search_partitions_ide |
67 | jz end_search_partitions_ide |
62 | mov [hdbase],0x170 |
68 | mov [hdbase],0x170 |
63 | mov [hdid],0x10 |
69 | mov [hdid],0x10 |
64 | mov [hdpos],4 |
70 | mov [hdpos],4 |
65 | mov [fat32part],1 |
71 | mov [fat32part],1 |
66 | search_partitions_ide3_1: |
72 | search_partitions_ide3_1: |
67 | call set_FAT32_variables |
73 | call set_FAT32_variables |
68 | cmp [problem_partition],0 |
74 | cmp [problem_partition],0 |
69 | jne end_search_partitions_ide |
75 | jne end_search_partitions_ide |
70 | inc byte [DRIVE_DATA+5] |
76 | inc byte [DRIVE_DATA+5] |
71 | call partition_data_transfer |
77 | call partition_data_transfer |
72 | add [transfer_adress],100 |
78 | add [transfer_adress],100 |
73 | inc [fat32part] |
79 | inc [fat32part] |
74 | jmp search_partitions_ide3_1 |
80 | jmp search_partitions_ide3_1 |
75 | 81 | ||
76 | 82 | ||
77 | partition_data_transfer: |
83 | partition_data_transfer: |
78 | mov edi,[transfer_adress] |
84 | mov edi,[transfer_adress] |
79 | mov esi,PARTITION_START |
85 | mov esi,PARTITION_START |
80 | mov ecx,(file_system_data_size+3)/4 |
86 | mov ecx,(file_system_data_size+3)/4 |
81 | rep movsd |
87 | rep movsd |
82 | ret |
88 | ret |
83 | uglobal |
89 | uglobal |
84 | transfer_adress dd 0 |
90 | transfer_adress dd 0 |
85 | endg |
91 | endg |
86 | partition_data_transfer_1: |
92 | partition_data_transfer_1: |
87 | ; cli |
93 | ; cli |
88 | push edi |
94 | push edi |
89 | mov edi,PARTITION_START |
95 | mov edi,PARTITION_START |
90 | mov esi,[transfer_adress] |
96 | mov esi,[transfer_adress] |
91 | mov ecx,(file_system_data_size+3)/4 |
97 | mov ecx,(file_system_data_size+3)/4 |
92 | rep movsd |
98 | rep movsd |
93 | pop edi |
99 | pop edi |
94 | ; sti |
100 | ; sti |
95 | ret |
101 | ret |
96 | 102 | ||
97 | end_search_partitions_ide: |
103 | end_search_partitions_ide: |
98 | 104 | ||
99 | ;PARTITION_START dd 0x3f |
105 | ;PARTITION_START dd 0x3f |
100 | ;PARTITION_END dd 0 |
106 | ;PARTITION_END dd 0 |
101 | ;SECTORS_PER_FAT dd 0x1f3a |
107 | ;SECTORS_PER_FAT dd 0x1f3a |
102 | ;NUMBER_OF_FATS dd 0x2 |
108 | ;NUMBER_OF_FATS dd 0x2 |
103 | ;SECTORS_PER_CLUSTER dd 0x8 |
109 | ;SECTORS_PER_CLUSTER dd 0x8 |
104 | ;BYTES_PER_SECTOR dd 0x200 ; Note: if BPS <> 512 need lots of changes |
110 | ;BYTES_PER_SECTOR dd 0x200 ; Note: if BPS <> 512 need lots of changes |
105 | ;ROOT_CLUSTER dd 2 ; first rootdir cluster |
111 | ;ROOT_CLUSTER dd 2 ; first rootdir cluster |
106 | ;FAT_START dd 0 ; start of fat table |
112 | ;FAT_START dd 0 ; start of fat table |
107 | ;ROOT_START dd 0 ; start of rootdir (only fat16) |
113 | ;ROOT_START dd 0 ; start of rootdir (only fat16) |
108 | ;ROOT_SECTORS dd 0 ; count of rootdir sectors (only fat16) |
114 | ;ROOT_SECTORS dd 0 ; count of rootdir sectors (only fat16) |
109 | ;DATA_START dd 0 ; start of data area (=first cluster 2) |
115 | ;DATA_START dd 0 ; start of data area (=first cluster 2) |
110 | ;LAST_CLUSTER dd 0 ; last availabe cluster |
116 | ;LAST_CLUSTER dd 0 ; last availabe cluster |
111 | ;ADR_FSINFO dd 0 ; used only by fat32 |
117 | ;ADR_FSINFO dd 0 ; used only by fat32 |
112 | ; |
118 | ; |
113 | ;fatRESERVED dd 0x0FFFFFF6 |
119 | ;fatRESERVED dd 0x0FFFFFF6 |
114 | ;fatBAD dd 0x0FFFFFF7 |
120 | ;fatBAD dd 0x0FFFFFF7 |
115 | ;fatEND dd 0x0FFFFFF8 |
121 | ;fatEND dd 0x0FFFFFF8 |
116 | ;fatMASK dd 0x0FFFFFFF |
122 | ;fatMASK dd 0x0FFFFFFF |
117 | ; |
123 | ; |
118 | ;fat_type db 0 ; 0=none, 16=fat16, 32=fat32> |
124 | ;fat_type db 0 ; 0=none, 16=fat16, 32=fat32> |