OSDev http://osdev.su/ |
|
Как прочитать сектор НГМД в режиме PIO http://osdev.su/viewtopic.php?f=7&t=755 |
Страница 1 из 2 |
Автор: | devel [ 15 июн 2013, 00:38 ] |
Заголовок сообщения: | Как прочитать сектор НГМД в режиме PIO |
Всем доброго времени суток. Не могу додуматься, как прочитать сектор НГМД в режиме PIO, причем использование IRQ 6 тоже исключено. Возникает следующий вопрос: "Если возникает ошибка при выполнении команды чтения сектора, из регистра данных сначала считывается сектор, заполненный нулями, или сразу передаются 7 байтов результата?". |
Автор: | Nable [ 15 июн 2013, 02:58 ] |
Заголовок сообщения: | Re: Как прочитать сектор НГМД в режиме PIO |
Какие ещё 7 байт результата, о чём ты? Считывается из регистра данных мусор, коий оттуда можно читать когда угодно и в каком угодно количестве. А о том что произошла ошибка узнать можно из статусного регистра. В общем, время читать доки или хотя бы wiki: http://wiki.osdev.org/ATA_PIO_Mode |
Автор: | SII [ 15 июн 2013, 03:17 ] |
Заголовок сообщения: | Re: Как прочитать сектор НГМД в режиме PIO |
Вообще-то НГМД -- это накопитель на гибких магнитных дисках, т.е. флоп. Не думал, что кто-то с ними ещё пытается работать ![]() |
Автор: | phantom-84 [ 15 июн 2013, 10:18 ] |
Заголовок сообщения: | Re: Как прочитать сектор НГМД в режиме PIO |
Флопповод завязан на IRQ6. Я дрова для флоппика писал очень давно, поэтому на последний вопрос точно не смогу ответить. Вроде бы корректные алгоритмы описаны в одной из книг М. Гука, уже точно не помню, в какой (может, сразу в нескольких). Я свою библиотеку прикрыл, поэтому дам временные ссылки здесь. hardware.zip hwint.zip stordevint.zip Ну и еще немного классики на всякий случай. disksubsys.zip hwprog.zip |
Автор: | devel [ 15 июн 2013, 11:54 ] |
Заголовок сообщения: | Re: Как прочитать сектор НГМД в режиме PIO |
SII писал(а): Вообще-то НГМД -- это накопитель на гибких магнитных дисках, т.е. флоп. Не думал, что кто-то с ними ещё пытается работать ![]() Да работают... Покупать хард ради тестирования загрузчика на реальном железе это уже извращенство, а для флеш дрова писать мутерно. Это уже на потом... |
Автор: | devel [ 15 июн 2013, 12:01 ] |
Заголовок сообщения: | Re: Как прочитать сектор НГМД в режиме PIO |
Nable писал(а): Какие ещё 7 байт результата, о чём ты? Считывается из регистра данных мусор, коий оттуда можно читать когда угодно и в каком угодно количестве. А о том что произошла ошибка узнать можно из статусного регистра. В общем, время читать доки или хотя бы wiki: http://wiki.osdev.org/ATA_PIO_Mode Мне для флоппика а не для харда нужно... |
Автор: | devel [ 15 июн 2013, 12:13 ] |
Заголовок сообщения: | Re: Как прочитать сектор НГМД в режиме PIO |
phantom-84 писал(а): Вроде бы корректные алгоритмы описаны в одной из книг М. Гука, уже точно не помню, в какой (может, сразу в нескольких). Да я читал его книги... Там описан алгоритм для чтения в режиме DMA и использовании IRQ6. Но дело в том, что когда бут сектор считывает драйвер файловой системы и переключается в защищенный режим, таблица прерываний не инициализирована. Единственный выход драйвера-это циклический опрос устройства. Для записи и форматирования при возникновении ошибки все понятно: выход по таймауту при записи данных в буфер FIFO. А вот для чтения я что то еще не увидел лазейки. Чтобы послать SENSE INTERRUPT STATUS, то придется сбрасывать контроллер, вследствие чего данные потеряются. Меня интересует именно фаза выполнения, а точнее что происходит если сектор не прочитан. Тут два варианта: Либо Фаза выполнения заканчивается и передаются 7 байтов(st0,st1 и прочая лабуда) или же сначала передаются нули, а потом все остальное... |
Автор: | phantom-84 [ 15 июн 2013, 12:56 ] |
Заголовок сообщения: | Re: Как прочитать сектор НГМД в режиме PIO |
devel писал(а): Да работают... Покупать хард ради тестирования загрузчика на реальном железе это уже извращенство, а для флеш дрова писать мутерно. Это уже на потом... Для тестирования "на стороне" можно использовать CD/DVD, а "на месте" - небольшой раздел харда, хотя риск повредить другие разделы конечно есть. Можно "воткнуть" старый диск в новый комп, если есть IDE-разъем, хотя конечно это не очень хороший вариант. Лично у меня есть 2 компа специально для тестирования, да и ПО, ответственное за доступ к диску, уже вполне отлажено, поэтому риск повредить данные и на рабочих компах минимальный. Тестовый комп из старого железа можно собрать бесплатно или почти бесплатно. Тестовый системник можно подключить к основному монитору параллельно с рабочим системником. И т.д., и т.п. Очень многое можно тестировать в эмуляторе. К тому же загрузчики обычно используют сервис BIOS, т.е. напрямую не работают с прерываниями.devel писал(а): Там описан алгоритм для чтения в режиме DMA и использовании IRQ6. Но дело в том, что когда бут сектор считывает драйвер файловой системы и переключается в защищенный режим, таблица прерываний не инициализирована. Единственный выход драйвера-это циклический опрос устройства. Для записи и форматирования при возникновении ошибки все понятно: выход по таймауту при записи данных в буфер FIFO. А вот для чтения я что то еще не увидел лазейки. Чтобы послать SENSE INTERRUPT STATUS, то придется сбрасывать контроллер, вследствие чего данные потеряются. Это трудно назвать веской причиной не использовать прерывания. Обычно ядро загружается/запускается раньше драйвера защищенного режима. У меня так вообще драйвер загрузочного устройства/ФС загружается загрузчиками (в том числе и первичными) вместе с ядром.
|
Автор: | devel [ 15 июн 2013, 13:31 ] |
Заголовок сообщения: | Re: Как прочитать сектор НГМД в режиме PIO |
Цитата: Можно "воткнуть" старый диск в новый комп, если есть IDE-разъем, хотя конечно это не очень хороший вариант. Лично у меня есть 2 компа специально для тестирования, да и ПО, ответственное за доступ к диску, уже вполне отлажено, поэтому риск повредить данные и на рабочих компах минимальный. Тестовый комп из старого железа можно собрать бесплатно или почти бесплатно. У меня уже есть тестовый системник, только разъемы IDE, а у меня все диски sata. Цитата: Это трудно назвать веской причиной не использовать прерывания. Обычно ядро загружается/запускается раньше драйвера защищенного режима. У меня сначала будет загружаться драйвер файловой системы защищенного режима загрузочного диска, который будет использоваться только в момент загрузки и в момент возникновения аварийных ситуаций(например слетел драйвер жесткого диска, нгмд и т.п), то есть будет частью загрузчика.
|
Автор: | phantom-84 [ 15 июн 2013, 14:20 ] |
Заголовок сообщения: | Re: Как прочитать сектор НГМД в режиме PIO |
devel писал(а): У меня уже есть тестовый системник, только разъемы IDE, а у меня все диски sata. Этим добром вся планета замусорена. Есть барахолки, есть спец. магазины, торгующие БУ-шным железом (в том числе и старьем), есть утиль (можно договориться, чтобы отложили, за символическую плату), можно дать электронное объявление, бросить клич в соц. сеть и т.д., и т.п.Цитата: У меня сначала будет загружаться драйвер файловой системы защищенного режима загрузочного диска, который будет использоваться только в момент загрузки и в момент возникновения аварийных ситуаций(например слетел драйвер жесткого диска, нгмд и т.п), то есть будет частью загрузчика. Если бы был только первый пункт, то можно было использовать для загрузки драйвер реального режима (работающий через BIOS) или вообще какой-нибудь существующий вторичный загрузчик. В необходимости второго пункта честно говоря сомневаюсь - где гарантия, что этот служебный драйвер не слетит точно также, как и основной? Почему бы изначально не использовать служебный драйвер как более надежный? Не проще ли перезапускать слетевший драйвер из оригинального образа в памяти?
|
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |