mov dx, base_port ; base_port - для 0 канала 0x1F0 для 1 канала 0x170
inc dx
; Настройка свойств
xor al, al
out dx, al
inc dx
; Количество секторов
mov al, 1
out dx, al
inc dx
; Указываем номер сектора (отсчёт от 0)
mov eax, 1
out dx, al
inc dx
shr eax, 8
out dx, al
inc dx
shr eax, 8
out dx, al
inc dx
shr eax, 8
and al, 0x0F ; Старшие биты для выбора устройства на канале
or al, 128 + 64 + 32 ; + 16 для 2 устройства
out dx, al
inc dx
; Команда чтения диска
mov al, 0x20
out dx, al
; Ждём готовности диска
mov cx, 65535
.wait:
in al, dx
test al, 128
jz .wait_end
loop .wait
jmp .time_out
.wait_end:
; Принимаем данные
mov di, buffer ; ES:DI - адрес буфера
mov cx, 256
rep insw
РАбота с жёстким диском через порт.
если можно укажите отдельно для IDE и S-ATA/ где вообще можно про это почитать?
Существуют два канала. На каждом максимум по два устройства. Для каждого канала свой набор из 8 портов. Для 0 канала 0x1F0 - 0x1F7, для 1 канала 0x170 - 0x177. Чтение одного сектора:
Код:
Таймаут наступит в случае если устройства не будет на канале или произойдёт ошибка (однако винчестер будет пытаться читать снова и снова).
Подробнее про ATA IDE можно прочитать на WASM: http://www.wasm.ru/article.php?article=atazen01.
Спасибо :)
Нашёл вот
http://t13.org/Documents/UploadedDocuments/docs2009/d2015r1a-ATAATAPI_Command_Set_-_2_ACS-2.pdf
и
это
мне кажется то что мне нужно (поправьте если не так
так же было найдено вот это:
http://t13.org/Documents/UploadedDocuments/docs2006/D1699r3e-ATA8_ACS_CB.pdf
http://t13.org/Documents/UploadedDocuments/project/d1153r18-ATA-ATAPI-4.pdf
http://t13.org/Documents/UploadedDocuments/Project/d1367r3-PARTIES.pdf
http://t13.org/Documents/UploadedDocuments/docs2003/e03104r0.pdf
что читать а что не стоит ?
Нашёл спецификацию 2.5 её точно прочту Ж)
3 EDD читать стоит. Используется для написание Boot Sectora
4 слишкам старое, а так читать можно.
Лучше возьми
http://www.t10.org/t13/project/d1532v1r4a-ATA-ATAPI-7.pdf
http://www.t10.org/t13/project/d1532v2r4a-ATA-ATAPI-7.pdf
http://www.t10.org/t13/project/d1532v3r4a-ATA-ATAPI-7.pdf
5 слишком специфичное.
6 Serial ATA: High Speed Serialized AT Attachment Можно не читать там все равно нечиго интересного нету. Хотя для ознакомления. SATA он эмилирует ATA и дальше ATA-ATAPI-7.
Нюансы есть.
ATA-ATAPI-8 еще в разработке.
вот только одно не понятно что есть ATA-ATAPI?
Набор команд. В спецификации что я привел там написанно.
1. Я начал читать с раздела 10 - Transport layer, ни чего ли я не пропустил?
2. Я не до конца въехал зачем всё то о чём там написанно нужно вот на пример что за Frame Information Structur? Куда эту структуру отсылать?
3. Не понятно как переводить вещи на подобе Shadow Registr Block, у меня получилось - Блок Теневого Регистра... но что-то я сомневаюсь что это так...
4. Я почитал ATA-ATAPI и ещё больше запутался, зачем нужны какие-то FISes если есть набор команд ?
Просветите что там вообще читать? Может вообще бросить это и читать только ATA-ATAPI?
FISec тебя недолжен волновать. SATA Spec 2.5 описывает как нужно делать передачу между диском и контролером. Это нужно производителям железа и тебя не должно волновать.
Хотя если ты изучаешь ACHI (AHCI) то там это есть и вполне используется.
Цитата:
Хотя если ты изучаешь ACHI (AHCI) то там это есть и вполне используется
что конкретно используется? и как (хотябы в общих чертах)
Есть такое поле FIS. Жесткий в него чегото пишет. Ты его трогать недолжен.