|
|
| Посл.отвђт | Сообщен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 |