ПОСТАНОВИЛИ
После многих недоразумений и разочарований мой жесткий диск наконец-то прервался. : D Это в основном сводилось к тому, что я продолжал читать регистр состояния вместо альтернативного регистра состояния. Несколько других вещей были испорчены для загрузки, но дело в том, что мой драйвер жесткого диска наконец начинает обретать форму. Теперь для других оставлю оригинальный пост.
P.S. Для дальнейшего разъяснения мне не нужно было вводить какие-либо команды сброса. Все, что я сделал, было следующее:
- Выберите устройство (не хотел уничтожать ОС Solaris на другом диске)
- очистить бит nIEN в регистре управления устройством
- выполнить команду IDENTIFY DEVICE ***
На самом деле, я не уверен, нужна ли команда IDENTIFY DEVICE, потому что я покинул лабораторию довольным, прежде чем смог протестировать код, не выполнив команду. Однако главное, что мне нужно было обязательно прочитать регистр альтернативный статус и очистить бит nIEN без необходимости сброса. BIOS, очевидно, заботится о большинстве вещей.
В настоящее время я пытаюсь написать драйвер диска для хобби-ОС, разрабатываемой в моей школе. В настоящее время у меня есть подпрограммы для чтения / записи данных в пространстве конфигурации PCI и сборочные подпрограммы для выполнения ввода / вывода порта с различными регистрами, определенными ATA / ATAPI-7. Теперь мой вопрос, в частности, как я получу жесткий диск IDE, чтобы начать генерировать прерывания? Я просматривал всю эту документацию и мне не стало ясно, что я делаю неправильно.
Может кто-нибудь объяснить, что именно заставляет жесткий диск IDE запускать прерывания? У меня уже есть подпрограмма обработки прерываний, готовая к тестированию, но мне сложно сначала получить прерывания. Можно ли это сделать с помощью программного сброса ATA?
Спасибо!
ОБНОВЛЕНИЕ: Хорошо, я смог получить вторичный канал, компакт-диск ATAPI для генерации прерываний, установив бит SRST в регистре управления устройством для мягкого сброса. Это не работает для жесткого диска на основном канале. До сих пор я заметил, что когда я устанавливаю бит SRST для жесткого диска, он устанавливает бит BSY и оставляет его установленным. Оттуда я не знаю, что делать.