OSDev

для всех
Текущее время: 21 авг 2018, 15:23

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: 15 июн 2013, 00:38 

Зарегистрирован: 15 июн 2013, 00:36
Сообщения: 8
Всем доброго времени суток. Не могу додуматься, как прочитать сектор НГМД в режиме PIO, причем использование IRQ 6 тоже исключено. Возникает следующий вопрос: "Если возникает ошибка при выполнении команды чтения сектора, из регистра данных сначала считывается сектор, заполненный нулями, или сразу передаются 7 байтов результата?".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 июн 2013, 02:58 

Зарегистрирован: 26 мар 2012, 17:32
Сообщения: 208
Какие ещё 7 байт результата, о чём ты? Считывается из регистра данных мусор, коий оттуда можно читать когда угодно и в каком угодно количестве. А о том что произошла ошибка узнать можно из статусного регистра.
В общем, время читать доки или хотя бы wiki: http://wiki.osdev.org/ATA_PIO_Mode


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 июн 2013, 03:17 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1346
Откуда: Зеленоград
Вообще-то НГМД -- это накопитель на гибких магнитных дисках, т.е. флоп. Не думал, что кто-то с ними ещё пытается работать :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 июн 2013, 10:18 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1197
Флопповод завязан на IRQ6. Я дрова для флоппика писал очень давно, поэтому на последний вопрос точно не смогу ответить. Вроде бы корректные алгоритмы описаны в одной из книг М. Гука, уже точно не помню, в какой (может, сразу в нескольких). Я свою библиотеку прикрыл, поэтому дам временные ссылки здесь.
hardware.zip
hwint.zip
stordevint.z​ip

Ну и еще немного классики на всякий случай.
disksubsys.z​ip
hwprog.zip


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 июн 2013, 11:54 

Зарегистрирован: 15 июн 2013, 00:36
Сообщения: 8
SII писал(а):
Вообще-то НГМД -- это накопитель на гибких магнитных дисках, т.е. флоп. Не думал, что кто-то с ними ещё пытается работать :)

Да работают... Покупать хард ради тестирования загрузчика на реальном железе это уже извращенство, а для флеш дрова писать мутерно. Это уже на потом...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 июн 2013, 12:01 

Зарегистрирован: 15 июн 2013, 00:36
Сообщения: 8
Nable писал(а):
Какие ещё 7 байт результата, о чём ты? Считывается из регистра данных мусор, коий оттуда можно читать когда угодно и в каком угодно количестве. А о том что произошла ошибка узнать можно из статусного регистра.
В общем, время читать доки или хотя бы wiki: http://wiki.osdev.org/ATA_PIO_Mode

Мне для флоппика а не для харда нужно...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 июн 2013, 12:13 

Зарегистрирован: 15 июн 2013, 00:36
Сообщения: 8
phantom-84 писал(а):
Вроде бы корректные алгоритмы описаны в одной из книг М. Гука, уже точно не помню, в какой (может, сразу в нескольких).

Да я читал его книги... Там описан алгоритм для чтения в режиме DMA и использовании IRQ6. Но дело в том, что когда бут сектор считывает драйвер файловой системы и переключается в защищенный режим, таблица прерываний не инициализирована. Единственный выход драйвера-это циклический опрос устройства. Для записи и форматирования при возникновении ошибки все понятно: выход по таймауту при записи данных в буфер FIFO. А вот для чтения я что то еще не увидел лазейки. Чтобы послать SENSE INTERRUPT STATUS, то придется сбрасывать контроллер, вследствие чего данные потеряются. Меня интересует именно фаза выполнения, а точнее что происходит если сектор не прочитан. Тут два варианта: Либо Фаза выполнения заканчивается и передаются 7 байтов(st0,st1 и прочая лабуда) или же сначала передаются нули, а потом все остальное...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 июн 2013, 12:56 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1197
devel писал(а):
Да работают... Покупать хард ради тестирования загрузчика на реальном железе это уже извращенство, а для флеш дрова писать мутерно. Это уже на потом...
Для тестирования "на стороне" можно использовать CD/DVD, а "на месте" - небольшой раздел харда, хотя риск повредить другие разделы конечно есть. Можно "воткнуть" старый диск в новый комп, если есть IDE-разъем, хотя конечно это не очень хороший вариант. Лично у меня есть 2 компа специально для тестирования, да и ПО, ответственное за доступ к диску, уже вполне отлажено, поэтому риск повредить данные и на рабочих компах минимальный. Тестовый комп из старого железа можно собрать бесплатно или почти бесплатно. Тестовый системник можно подключить к основному монитору параллельно с рабочим системником. И т.д., и т.п. Очень многое можно тестировать в эмуляторе. К тому же загрузчики обычно используют сервис BIOS, т.е. напрямую не работают с прерываниями.

devel писал(а):
Там описан алгоритм для чтения в режиме DMA и использовании IRQ6. Но дело в том, что когда бут сектор считывает драйвер файловой системы и переключается в защищенный режим, таблица прерываний не инициализирована. Единственный выход драйвера-это циклический опрос устройства. Для записи и форматирования при возникновении ошибки все понятно: выход по таймауту при записи данных в буфер FIFO. А вот для чтения я что то еще не увидел лазейки. Чтобы послать SENSE INTERRUPT STATUS, то придется сбрасывать контроллер, вследствие чего данные потеряются.
Это трудно назвать веской причиной не использовать прерывания. Обычно ядро загружается/запускается раньше драйвера защищенного режима. У меня так вообще драйвер загрузочного устройства/ФС загружается загрузчиками (в том числе и первичными) вместе с ядром.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 июн 2013, 13:31 

Зарегистрирован: 15 июн 2013, 00:36
Сообщения: 8
Цитата:
Можно "воткнуть" старый диск в новый комп, если есть IDE-разъем, хотя конечно это не очень хороший вариант. Лично у меня есть 2 компа специально для тестирования, да и ПО, ответственное за доступ к диску, уже вполне отлажено, поэтому риск повредить данные и на рабочих компах минимальный. Тестовый комп из старого железа можно собрать бесплатно или почти бесплатно.
У меня уже есть тестовый системник, только разъемы IDE, а у меня все диски sata.

Цитата:
Это трудно назвать веской причиной не использовать прерывания. Обычно ядро загружается/запускается раньше драйвера защищенного режима.
У меня сначала будет загружаться драйвер файловой системы защищенного режима загрузочного диска, который будет использоваться только в момент загрузки и в момент возникновения аварийных ситуаций(например слетел драйвер жесткого диска, нгмд и т.п), то есть будет частью загрузчика.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 июн 2013, 14:20 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1197
devel писал(а):
У меня уже есть тестовый системник, только разъемы IDE, а у меня все диски sata.
Этим добром вся планета замусорена. Есть барахолки, есть спец. магазины, торгующие БУ-шным железом (в том числе и старьем), есть утиль (можно договориться, чтобы отложили, за символическую плату), можно дать электронное объявление, бросить клич в соц. сеть и т.д., и т.п.

Цитата:
У меня сначала будет загружаться драйвер файловой системы защищенного режима загрузочного диска, который будет использоваться только в момент загрузки и в момент возникновения аварийных ситуаций(например слетел драйвер жесткого диска, нгмд и т.п), то есть будет частью загрузчика.
Если бы был только первый пункт, то можно было использовать для загрузки драйвер реального режима (работающий через BIOS) или вообще какой-нибудь существующий вторичный загрузчик. В необходимости второго пункта честно говоря сомневаюсь - где гарантия, что этот служебный драйвер не слетит точно также, как и основной? Почему бы изначально не использовать служебный драйвер как более надежный? Не проще ли перезапускать слетевший драйвер из оригинального образа в памяти?


Последний раз редактировалось phantom-84 15 июн 2013, 14:22, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB