· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.ASSEMBLER —› Работа с винтом через порты???

Посл.отвђт Сообщенiе


Дата: Янв 27, 2003 19:34:43

На NASM'e пишу вот такую прогу чтоб определить имя винта серийник, геометрию и.т.д. в доке по AT винтам написано что 0xEC функция подходит ко всем IDE винтам, но замес то всего этого я получаю взведённый CF и весь буфер заполненный 0xFF в AL, кстати, тоже самое, почему это происходит?

З.Ы.: то, что это ошибка это понятно, но пробовал на разных винтах один хрен везде одно и тоже.

Bits 16
Org 0x0100
Section .data

Buffer: times 512 db 0

Section .text

Start: mov dx,0x01F6
mov al,0x00A0 ;первый винт головка 0
out dx,al

mov dx,0x01F7 ;читать Sys info
mov al,0xEC
out dx,al

mov cx,512
mov di,Buffer
mov dx,0x01F0 ;считать 512 байт в буфер
rep insb
End


Дата: Янв 27, 2003 19:40:16

Понятия не имея про винты, но советую попробывать 0x00A0 -> 0xA000, 0x01F6 -> 0xF601 и так далее. Можеть NASM little-endian не понимает?


Дата: Янв 27, 2003 23:26:01 · Поправил: Pavel

Там нужно опрашивать порт 1F7 и ждать сброса/установки определённых битов перед заданием винта, посылкой команды и получением данных, можно посмотреть, как это делает какая-нибудь утилита вроде IDEINFO, только под "форточками" это всё равно не хочет работать, как правило.

P.S. Даже исходник оказался
http://www.tech-pro.freeserve.co.uk/files/ideinfo.zip


Дата: Янв 28, 2003 12:02:02

Спасибо, кстати я даже забыл, что это Винда могла перекрыть доступ :-)


Дата: Янв 31, 2003 07:16:48

Ну считать у меня получилось, только там както всё искажено буквы в названии винта через одну стоят и серийник неверный. Да и ещё мож кто знает как через порты выполнить сброс контроллера после применения F(x) 0xE6 - остановка шпенделя винта, аналог ah=0x00 в int 0x13.


Дата: Янв 31, 2003 11:11:10

По серийному номеру я бросил исходник на wasm.ru - может, поможет ;)


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.067