Subversion Repositories Kolibri OS

Rev

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]