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