Привет всем. Вообщем, пишу свою собственную ос (как ново так вот, нужно написать загрузчик PE файлов, написал... для начала\проверки под реальный... вставляю этот код в свою os.am (protected 32b) (понятно с изменением регистров и пр....) не читает... хмм... отрубаю прерывания cli (и добовляю в начале ресет винта (чего в реальном режиме не делал))... читает бутсектор, больше ничего (второй\третий\пр. раз\разы в смысле ничего не читает)... что за бред ? смотрю где зависает (у меня в ОСь встроенная поддержка GDB удаленной отладки)... оказывается что тут: Код (Text): ;disable hdd interrupts mov edx,hddPort+206h mov al,2 out dx,al ;wait for bsy=1 mov edx,hddPort+7 .wait: in al,dx test al,80h jnz .wait ;<- виснет тут ! Поясните плиз ! Все прерывания 8e00h (типа "ловушка") но это и не важно, ведь я их отрубаю через APIC/Hdd port 3f6h...
Я, конечно, не специалист, но у меня возникло смутное подозрение, что контроллер просто хочет сказать тебе что-то важное, а ты ему рот затыкаешь Хорошо бы проверить другие флаги регистра состояния.
Не обращай особого внимания на мои слова, но у меня была похожая ситуация, когда код работы с винтом, работающий в дос, перестал работать в вин, так как тама, естественно, запрещена работа прикладного приложения с портами жд. Посмотри карту i/o или что-то в этом роде.
Спасибо всем я уже разобрался, в очередной раз подвела конченная дока по контроллеру прерываний (не в тот порт отсылал EOI)... Однако запретить прерывания от винта я так и не смог (ни через APIC ни через hdd порт 3f6h...) вот гон....