/kernel/trunk/detect/dev_hdcd.inc |
---|
7,44 → 7,61 |
$Revision$ |
; HDD and CD search |
;****************************************************** |
; поиск приводов HDD и CD |
; автор исходного текста Кулаков Владимир Геннадьевич. |
; адаптация и доработка Mario79 |
;****************************************************** |
;**************************************************** |
;* ПОИСК HDD и CD * |
;**************************************************** |
cmp [ecx+IDE_DATA.ProgrammingInterface], 0 |
je EndFindHDD |
FindHDD: |
push ecx |
xor ebx, ebx |
inc ebx |
mov [DeviceNumber], 0 |
cmp ecx, IDE_controller_1 |
jz .find |
add bl, 5 |
add [DeviceNumber], sizeof.HD_DATA*4 |
cmp ecx, IDE_controller_2 |
jz .find |
jne @f |
add bl, 5 |
add [DeviceNumber], sizeof.HD_DATA*4 |
jmp .find |
@@: |
cmp ecx, IDE_controller_3 |
jne .find |
add bl, 10 |
;-------------------------------------- |
.find: |
mov [ChannelNumber], 1 |
mov [DiskNumber], 0 |
call FindHDD_1 |
call FindHDD_2 |
inc [DiskNumber] |
mov [DiskNumber], 1 |
call FindHDD_2 |
inc [ChannelNumber] |
dec [DiskNumber] |
call FindHDD_2 |
inc [DiskNumber] |
mov [DiskNumber], 0 |
call FindHDD_2 |
mov [DiskNumber], 1 |
call FindHDD_1 |
pop ecx |
jmp EndFindHDD |
;----------------------------------------------------------------------------- |
FindHDD_2: |
add [DeviceNumber], sizeof.HD_DATA |
call FindHDD_1 |
shl byte [ebx+DRIVE_DATA], 2 |
ret |
;----------------------------------------------------------------------------- |
FindHDD_1: |
DEBUGF 1, "K : Channel %d ",[ChannelNumber]:2 |
DEBUGF 1, "Disk %d\n",[DiskNumber]:1 |
63,9 → 80,6 |
ja .FindCD |
inc byte [ebx+DRIVE_DATA] |
movzx eax, [DeviceNumber] |
bt word [Sector512+166], 10 |
adc [eax+hd0_data.hd48], 0 |
jmp .Print_Device_Name |
;-------------------------------------- |
.FindCD: |
248,7 → 262,6 |
ChannelNumber dw ? |
; Номер диска |
DiskNumber db ? |
DeviceNumber db ? |
; Базовый адрес группы портов контроллера ATA |
ATABasePortAddr dw ? |
; Параметры ATA-команды |
/kernel/trunk/detect/sear_par.inc |
---|
13,27 → 13,27 |
xor eax, eax |
mov edx, IDE_controller_1 |
mov ax, [edx + IDE_DATA.BAR0_val] |
mov [hd0_data.hdbase], ax |
mov [hd1_data.hdbase], ax |
mov [hd0_data.hdbase], eax |
mov [hd1_data.hdbase], eax |
mov ax, [edx + IDE_DATA.BAR2_val] |
mov [hd2_data.hdbase], ax |
mov [hd3_data.hdbase], ax |
mov [hd2_data.hdbase], eax |
mov [hd3_data.hdbase], eax |
mov edx, IDE_controller_2 |
mov ax, [edx + IDE_DATA.BAR0_val] |
mov [hd4_data.hdbase], ax |
mov [hd5_data.hdbase], ax |
mov [hd4_data.hdbase], eax |
mov [hd5_data.hdbase], eax |
mov ax, [edx + IDE_DATA.BAR2_val] |
mov [hd6_data.hdbase], ax |
mov [hd7_data.hdbase], ax |
mov [hd6_data.hdbase], eax |
mov [hd7_data.hdbase], eax |
mov edx, IDE_controller_3 |
mov ax, [edx + IDE_DATA.BAR0_val] |
mov [hd8_data.hdbase], ax |
mov [hd9_data.hdbase], ax |
mov [hd8_data.hdbase], eax |
mov [hd9_data.hdbase], eax |
mov ax, [edx + IDE_DATA.BAR2_val] |
mov [hd10_data.hdbase], ax |
mov [hd11_data.hdbase], ax |
mov [hd10_data.hdbase], eax |
mov [hd11_data.hdbase], eax |
; 2. Notify the system about /hd* disks. |
; For every existing disk, call ide_disk_add with correct parameters. |
; Generate name "hdN" on the stack; this is 4 bytes including terminating zero. |