Subversion Repositories Kolibri OS

Rev

Rev 1161 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1159 hidnplayr 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
3
;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;;
4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7
 
1206 hidnplayr 8
$Revision: 1206 $
1159 hidnplayr 9
 
10
 
11
;****************************************************
12
;     поиск логических дисков на обнаруженных HDD
13
;     и занесение данных в область таблицы
14
;     автор Mario79
15
;****************************************************
16
      mov   [transfer_adress],DRIVE_DATA+0xa
17
 search_partitions_ide0:
18
      test  [DRIVE_DATA+1],byte 0x40
19
      jz   search_partitions_ide1
20
        mov   [hdbase],0x1f0
21
        mov   [hdid],0x0
22
        mov   [hdpos],1
23
      mov  [fat32part],1
24
 search_partitions_ide0_1:
25
      call  set_FAT32_variables
26
      cmp   [problem_partition],0
27
      jne   search_partitions_ide1
28
      inc   byte [DRIVE_DATA+2]
29
      call  partition_data_transfer
30
      add   [transfer_adress],100
31
      inc   [fat32part]
32
      jmp   search_partitions_ide0_1
33
 
34
 search_partitions_ide1:
35
      test  [DRIVE_DATA+1],byte 0x10
36
      jz   search_partitions_ide2
37
        mov   [hdbase],0x1f0
38
        mov   [hdid],0x10
39
        mov   [hdpos],2
40
      mov  [fat32part],1
41
 search_partitions_ide1_1:
42
      call  set_FAT32_variables
43
      cmp   [problem_partition],0
44
      jne   search_partitions_ide2
45
      inc   byte [DRIVE_DATA+3]
46
      call  partition_data_transfer
47
      add   [transfer_adress],100
48
      inc   [fat32part]
49
      jmp   search_partitions_ide1_1
50
 
51
 search_partitions_ide2:
52
      test  [DRIVE_DATA+1],byte 0x4
53
      jz   search_partitions_ide3
54
        mov   [hdbase],0x170
55
        mov   [hdid],0x0
56
        mov   [hdpos],3
57
      mov  [fat32part],1
58
 search_partitions_ide2_1:
59
      call  set_FAT32_variables
60
      cmp   [problem_partition],0
61
      jne   search_partitions_ide3
62
      inc   byte [DRIVE_DATA+4]
63
      call  partition_data_transfer
64
      add   [transfer_adress],100
65
      inc   [fat32part]
66
      jmp   search_partitions_ide2_1
67
 
68
 search_partitions_ide3:
69
      test  [DRIVE_DATA+1],byte 0x1
70
      jz   end_search_partitions_ide
71
        mov   [hdbase],0x170
72
        mov   [hdid],0x10
73
        mov   [hdpos],4
74
      mov  [fat32part],1
75
 search_partitions_ide3_1:
76
      call  set_FAT32_variables
77
      cmp   [problem_partition],0
78
      jne   end_search_partitions_ide
79
      inc   byte [DRIVE_DATA+5]
80
      call  partition_data_transfer
81
      add   [transfer_adress],100
82
      inc   [fat32part]
83
      jmp   search_partitions_ide3_1
84
 
85
end_search_partitions_ide:
86
        mov     [hdpos], 80h
87
        mov     ecx, [NumBiosDisks]
88
        test    ecx, ecx
89
        jz      end_search_partitions
90
start_search_partitions_bd:
91
        push    ecx
92
        mov     eax, [hdpos]
93
        and     [BiosDiskPartitions+(eax-80h)*4], 0
94
        mov     [fat32part], 1
95
search_partitions_bd:
96
        call    set_FAT32_variables
97
        cmp     [problem_partition], 0
98
        jne     end_search_partitions_bd
99
        mov     eax, [hdpos]
100
        inc     [BiosDiskPartitions+(eax-80h)*4]
101
        call    partition_data_transfer
102
        add     [transfer_adress], 100
103
        inc     [fat32part]
104
        jmp     search_partitions_bd
105
end_search_partitions_bd:
106
        pop     ecx
107
        inc     [hdpos]
108
        loop    start_search_partitions_bd
109
        jmp     end_search_partitions
110
 
111
partition_data_transfer:
112
     mov edi,[transfer_adress]
113
     mov esi,PARTITION_START
114
     mov ecx,(file_system_data_size+3)/4
115
     rep movsd
116
     ret
117
uglobal
118
transfer_adress dd 0
119
endg
120
partition_data_transfer_1:
121
;     cli
122
     push edi
123
     mov edi,PARTITION_START
124
     mov esi,[transfer_adress]
125
     mov ecx,(file_system_data_size+3)/4
126
     rep movsd
127
     pop  edi
128
;     sti
129
     ret
130
 
131
 end_search_partitions:
132
 
133
;PARTITION_START      dd 0x3f
134
;PARTITION_END        dd 0
135
;SECTORS_PER_FAT      dd 0x1f3a
136
;NUMBER_OF_FATS       dd 0x2
137
;SECTORS_PER_CLUSTER  dd 0x8
138
;BYTES_PER_SECTOR     dd 0x200   ; Note: if BPS <> 512 need lots of changes
139
;ROOT_CLUSTER         dd 2       ; first rootdir cluster
140
;FAT_START            dd 0       ; start of fat table
141
;ROOT_START           dd 0       ; start of rootdir (only fat16)
142
;ROOT_SECTORS         dd 0       ; count of rootdir sectors (only fat16)
143
;DATA_START           dd 0       ; start of data area (=first cluster 2)
144
;LAST_CLUSTER         dd 0       ; last availabe cluster
145
;ADR_FSINFO           dd 0       ; used only by fat32
146
;
147
;fatRESERVED          dd 0x0FFFFFF6
148
;fatBAD               dd 0x0FFFFFF7
149
;fatEND               dd 0x0FFFFFF8
150
;fatMASK              dd 0x0FFFFFFF
151
;
152
;fat_type             db 0       ; 0=none, 16=fat16, 32=fat32
153