Rev 5852 | Rev 6842 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5852 | Rev 6464 | ||
---|---|---|---|
Line 3... | Line 3... | ||
3 | ;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
5 | ;; ;; |
5 | ;; ;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 7... | Line 7... | ||
7 | 7 | ||
Line 8... | Line 8... | ||
8 | $Revision: 5852 $ |
8 | $Revision: 6464 $ |
Line 9... | Line 9... | ||
9 | 9 | ||
10 | ; HDD and CD search |
10 | ; HDD and CD search |
Line 44... | Line 44... | ||
44 | ;----------------------------------------------------------------------------- |
44 | ;----------------------------------------------------------------------------- |
45 | FindHDD_2: |
45 | FindHDD_2: |
46 | add [DeviceNumber], sizeof.HD_DATA |
46 | add [DeviceNumber], sizeof.HD_DATA |
47 | shl byte [ebx+DRIVE_DATA], 2 |
47 | shl byte [ebx+DRIVE_DATA], 2 |
48 | FindHDD_1: |
48 | FindHDD_1: |
49 | DEBUGF 1, "K : Channel %d ",[ChannelNumber]:2 |
49 | DEBUGF 1, "K : Channel %d ",[ChannelNumber]:1 |
50 | DEBUGF 1, "Disk %d\n",[DiskNumber]:1 |
50 | DEBUGF 1, "Disk %d\n",[DiskNumber]:1 |
51 | push ebx ecx |
51 | push ebx ecx |
52 | call ReadHDD_ID |
52 | call ReadHDD_ID |
53 | pop ecx ebx |
53 | pop ecx ebx |
54 | cmp [DevErrorCode], 7 |
54 | cmp [DevErrorCode], 7 |
Line 84... | Line 84... | ||
84 | add [ebx+DRIVE_DATA], byte 2 |
84 | add [ebx+DRIVE_DATA], byte 2 |
85 | ;-------------------------------------- |
85 | ;-------------------------------------- |
86 | .Print_Device_Name: |
86 | .Print_Device_Name: |
87 | pushad |
87 | pushad |
88 | pushfd |
88 | pushfd |
89 | - | ||
90 | xor ebx, ebx |
- | |
91 | mov bx, [ChannelNumber] |
89 | movzx ebx, [ChannelNumber] |
92 | dec ebx |
90 | dec ebx |
93 | shl ebx, 1 |
91 | shl ebx, 1 |
94 | add bl, [DiskNumber] |
92 | add bl, [DiskNumber] |
95 | shl ebx, 1 |
93 | shl ebx, 1 |
96 | - | ||
97 | call calculate_IDE_device_values_storage |
94 | call calculate_IDE_device_values_storage |
98 | ;-------------------------------------- |
95 | ;-------------------------------------- |
99 | .copy_dev_name: |
96 | .copy_dev_name: |
100 | mov esi, Sector512+27*2 |
97 | mov esi, Sector512+27*2 |
101 | mov edi, dev_name |
98 | mov edi, dev_name |
Line 243... | Line 240... | ||
243 | ;----------------------------------------------------------------------------- |
240 | ;----------------------------------------------------------------------------- |
244 | uglobal |
241 | uglobal |
245 | ; Стандартные базовые адреса каналов 1 и 2 |
242 | ; Стандартные базовые адреса каналов 1 и 2 |
246 | StandardATABases dw ?, ? ; 1F0h, 170h |
243 | StandardATABases dw ?, ? ; 1F0h, 170h |
247 | ; Номер канала |
244 | ; Номер канала |
248 | ChannelNumber dw ? |
245 | ChannelNumber db ? |
249 | ; Номер диска |
246 | ; Номер диска |
250 | DiskNumber db ? |
247 | DiskNumber db ? |
251 | DeviceNumber db ? |
248 | DeviceNumber db ? |
252 | ; Базовый адрес группы портов контроллера ATA |
249 | ; Базовый адрес группы портов контроллера ATA |
253 | ATABasePortAddr dw ? |
250 | ATABasePortAddr dw ? |
Line 289... | Line 286... | ||
289 | SendCommandToHDD: |
286 | SendCommandToHDD: |
290 | ; Проверить значение кода режима |
287 | ; Проверить значение кода режима |
291 | cmp [ATAAddressMode], 1 |
288 | cmp [ATAAddressMode], 1 |
292 | ja @@Err2 |
289 | ja @@Err2 |
293 | ; Проверить корректность номера канала |
290 | ; Проверить корректность номера канала |
294 | mov bx, [ChannelNumber] |
291 | movzx ebx, [ChannelNumber] |
295 | cmp bx, 1 |
292 | dec ebx |
296 | jb @@Err3 |
- | |
297 | - | ||
298 | cmp bx, 2 |
293 | cmp ebx, 1 |
299 | ja @@Err3 |
294 | ja @@Err3 |
300 | ; Установить базовый адрес |
295 | ; Установить базовый адрес |
301 | dec bx |
- | |
302 | shl bx, 1 |
296 | shl ebx, 1 |
303 | movzx ebx, bx |
- | |
304 | mov ax, [ebx+StandardATABases] |
297 | mov ax, [ebx+StandardATABases] |
305 | mov [ATABasePortAddr], ax |
298 | mov [ATABasePortAddr], ax |
306 | ; Ожидание готовности HDD к приему команды |
299 | ; Ожидание готовности HDD к приему команды |
307 | ; Выбрать нужный диск |
300 | ; Выбрать нужный диск |
308 | mov dx, [ATABasePortAddr] |
301 | mov dx, [ATABasePortAddr] |
Line 447... | Line 440... | ||
447 | ;* ChannelNumber - номер канала (1 или 2); * |
440 | ;* ChannelNumber - номер канала (1 или 2); * |
448 | ;* DiskNumber - номер диска (0 или 1). * |
441 | ;* DiskNumber - номер диска (0 или 1). * |
449 | ;************************************************* |
442 | ;************************************************* |
450 | DeviceReset: |
443 | DeviceReset: |
451 | ; Проверить корректность номера канала |
444 | ; Проверить корректность номера канала |
452 | mov bx, [ChannelNumber] |
445 | movzx ebx, [ChannelNumber] |
453 | cmp bx, 1 |
446 | dec ebx |
454 | jb @@Err3_2 |
- | |
455 | - | ||
456 | cmp bx, 2 |
447 | cmp ebx, 1 |
457 | ja @@Err3_2 |
448 | ja @@Err3_2 |
458 | ; Установить базовый адрес |
449 | ; Установить базовый адрес |
459 | dec bx |
- | |
460 | shl bx, 1 |
450 | shl ebx, 1 |
461 | movzx ebx, bx |
- | |
462 | mov dx, [ebx+StandardATABases] |
451 | mov dx, [ebx+StandardATABases] |
463 | mov [ATABasePortAddr], dx |
452 | mov [ATABasePortAddr], dx |
464 | ; Выбрать нужный диск |
453 | ; Выбрать нужный диск |
465 | add dx, 6 ;адрес регистра головок |
454 | add dx, 6 ;адрес регистра головок |
466 | mov al, [DiskNumber] |
455 | mov al, [DiskNumber] |