Subversion Repositories Kolibri OS

Rev

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