Subversion Repositories Kolibri OS

Rev

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