> Короткий доступ- это не прямой доступ к памяти. Есть ли такой, и если
> есть, то как он действует?
>
PIO!!!
Вот кусок кода считывающий 20-й сектор Primary канала Master устройства:
;Базовый адрес 1F0h, канал 1 - Primary
;Ожидание готовности HDD к приему команды
;Регистр номера головки/номера диска
mov dx,1F6h
; 1 0 0 1
;1, LBA/CHS, 1, Master/Slave, LBA(27-24)
mov al,11100000b
out dx,al
;Ожидать, пока диск не будет готов
;Регистр состояния/команд
mov dx,1F7h
@@WaitHDReady:
;Прочитать регистр состояния
in al,dx
;Проверить состояние сигнала BSY
test al,80h
jnz @@WaitHDReady
;Проверить состояние сигнала DRQ
test al,08h
jnz @@WaitHDReady
;Загрузить команду в регистры контроллера
;Регистр количества секторов
mov dx,1F2h
mov al,1
out dx,al
;Регистр LBA(7-0)
mov dx,1F3h
;Нужно считать 20-й сектор
mov al,20
out dx,al
;Регистр LBA(15-8)
mov dx,1F4h
mov ax,0
out dx,al
;Регистр LBA(23-16)
mov dx,1F5h
mov al,0
out dx,al
;Регистр номера головки/номера диска
mov dx,1F6h
; 1 0 0 1
;1, LBA/CHS, 1, Master/Slave, LBA(27-24)
mov al,11100000b
out dx,al
;Послать команду в контроллер
;Регистр состояния/команд
mov dx,1F7h
;Комманда ATA 20h - прочитать сектор в режиме PIO
mov al,20h
out dx,al
;Ожидать готовность данных HDD
;Регистр состояния/команд
mov dx,1F7h
@@WaitCompleet:
;Проверить готовность
in al,dx
;Состояние сигнала BSY
test al,80h
jnz @@WaitCompleet
;Состояние сигнала DRQ
test al,08h
jz @@WaitCompleet
;Принять сектор
;Настраиваем буфер приёма данных на 0000:7C00 (es:di)
xor ax,ax
mov es,ax
mov di,7C00h
;Регистр данных
mov dx,1F0h
;Число считываемых слов
mov cx,256
;Считываем сектор
rep insw
Posted via RSDN NNTP Server 1.9 gamma