не читается сектор. предпологаю что неправильно посылаю пакет. но где ошибка - ума не приложу. устройство устанавливает бит BSY и все, не идет никуда ._.
Код:
mov edi, packetCommand
xor eax, eax
mov ecx, 12
rep stosb
mov [packetCommand], byte 0xA8
mov dword [packetCommand+2], 10000000h ;16й сектор
mov dword [packetCommand+6], 01000000h ;читать 1 сектор
mov [packetSize], 12
call sendDataPacket
посыл команды и пакета
Код:
sendDataPacket:
pusha
; Послать ATA-команду передачи пакетной команды
mov [ATAFeatures],0
mov [ATASectorsCount],0
mov [ATASectorNumber],0
; Загрузить размер передаваемого блока
mov AX,[CDBlockSize]
mov [ATACylinder],AX
mov [ATAHead],0
mov [ATACommand],0A0h
call sendCommandToHDD
cmp [devErrorCode],0 ;проверить код ошибки
jne .error
xor eax, eax
mov al, [channel]
shl eax, 2
mov dx, [basePort+eax]
add dx, 7
mov ecx, 0xFFF
@@:
dec ecx
jz .error
in AL,DX
test AL,80h ;состояние сигнала BSY
jnz @b
test AL,1 ;состояние сигнала ERR
jnz @b
test AL,08h ;состояние сигнала DRQ
jz @b
sub dx, 7
movzx ecx, [packetSize]
shr ecx, 1
mov esi, packetCommand
xchg bx, bx
@@:
rep outsw
add dx, 7
mov ecx, 0xFFF
@@:
dec ecx
jz .error
in AL,DX
test AL,80h ;состояние сигнала BSY
jnz @b
test AL,1 ;состояние сигнала ERR
jnz @b
test AL,08h ;состояние сигнала DRQ
jz @b
mov edi, CDDataBuf
movzx ecx, [CDBlockSize]
shr ecx, 1
sub dx, 7
rep insw
mov [devErrorCode], 0
popa
ret
.error:
mov [devErrorCode], 1
popa
ret
sendCommandToHDD работает 100%, ибо я с этой же процедуриной и лоток сидирома вытаскивал, и с жестака ось грузил. собсно не могу только получить ответ от устройства, но лоток открыть могу.