Чтение данных CD из программы начальной загрузки

Тема в разделе "WASM.BEGINNERS", создана пользователем l_inc, 27 сен 2006.

  1. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Я этот вопрос уже около года назад здесь задавал. На него никто удовлетворительно не ответил, а я с тех пор ничуть не поумнел.
    Итак. Программа начальной загрузки. Прочитать данные с винта - нет проблем: вторая функция прерывания 13h BIOS'а делает все нахаляву. Та же фишка с чтением оптического диска (пусть каким угодно значением загадить регистр dl) не проходит. Вопрос в том, можно ли прочитать данные с оптического диска, используя средства BIOS (а именно его прерывания). И если да, то как? Если нельзя, то надо понимать, что придется использовать порты ввода вывода. Опять таки: как? И есть ли стандарты общие для всех абсолютно приводов (Blu-Ray не считается) в духе: записать такое-то слово в такой-то порт и с такого-то порта можно уже читать данные, расположенные на диске? Причем это будет работать для приводов всех фирм и серий.
    P.S. Использовать драйвер DOS, пожалуйста, не предлагать за отсутствием самого DOS'a (повторяю: программа начальной загрузки). К тому же хотелось бы уложиться в первый сектор дабы не дозакачивать с магнитного диска в память свои куски (это я к тому, что если вдруг все-таки поступит предложение использовать драйвер).
     
  2. ECk

    ECk Member

    Публикаций:
    0
    Регистрация:
    9 апр 2004
    Сообщения:
    454
    Адрес:
    Russia
    Порты контроллера используй, опроси порты на предмет определения девайса на них, затем если это АТАПИ девайс, работай с ним как с АТАПИ. Если скази - то или документацию вендорскую читай или никак (общих стандартов нет).
     
  3. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Определение девайса разве не BIOS должен был за меня выполнить еще до того, как загрузит мой код в оперативную память? Не хотелось бы выполнять лишнюю работу, и, как я уже писал, неплохо бы уложиться в один сектор. Возможно по поводу "будет работать для приводов всех фирм и серий" я немного загнул. Я имел ввиду только те приводы, которые работают через IDE-контроллер (SCSI меня не интересует) (можно даже только те, которые не поддерживают RAID: насколько я понимаю такие IDE управляются расширением BIOS, написанным специально для работы с RAID и тут будет еще куча геморроя, IMHO). Кроме того, я, все-таки, -- чайник, и поэтому хотелось бы увидеть не общие комментарии, а небольшой кусочек кода, включающий в себя:
    1) получение наиболее полной информации о расположении привода средствами BIOS
    2) на основе полученной информации использование in, out для чтения с опт. диска.
    Таким образом, IMHO, можно сэкономить на объеме кода, не опрашивая все порты.
    P.S. А есть ли стандарты для данного частного случая?
     
  4. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Похоже в этом году тоже не повезет :'(
    Даосы, вы где все подевались? Это ж вроде не так сложно. BIOS то ведь это делает, когда дисковод оптических дисков, как First Boot Device указан.
    Ну хоть пошлите меня нафиг, кто-нибудь. А то пялюсь тут уже сутки на свой вопрос и никакой реакции. Даже число просмотров сообщения почти не растет. :'( :'( :'(
     
  5. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Через BIOS с ATAPI работать не получится.
    Как я уже написал низзя такого сделать... в общем случае.
    Есть EDD BIOS (Extended Disk Drive) в котором чисто теоретически предусмотрена возможность работы с CD.
    Поддерживается он практически на всех современных материнках но работа с СД там опциональная, и мне не известен ни один БИОС который бы её поддерживал...
    www.t13.org - стандарты ATA/ATAPI и EDD BIOS

    Примеров всяких по инету куча - поищи в Google например.
     
  6. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Т.е. я так понял, что BIOS сам легко определяет привод (и показывает его в табличке во время загрузки) читает с диска (CD или DVD), например во время загрузки с него, а рядовому пользователю средства в качестве прерываний не предоставляет не то что для чтения с компакта, а даже для определения адреса порта, по которому к нему обращаться надо, даже не скажет к какому IDE он подключен. Так что ли?
    Спасибо за хоть какую-то ссылку! Буду потихоньку разбираться. Но, тем не менее, все еще в ожидании новых советов.
    THX
     
  7. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    Так посмотри его в дизассемблере? Я так в свое время вытащил из него работу со знакогенератором обычным debug.com.
     
  8. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.347
    Зачем в дизасме, если даже исходники есть с комментариями и прочим... Поискать только надо :)
     
  9. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Были у меня исходники BIOS, да еще и с коментариями. Потратил два-три дня их перелопачивание в поисках работы с приводом и ни к чему определенному не пришел, не проработав и десятой части того что там было. Причем на панели задач 10-15 окон блокнота с различными модулями исходников, и с каждым новым вызовом процедуры или просто переходом приходилось лезть в новое окно, если повезет, или открывать еще одно, если не повезет.
    Не представляю, каких усилий требует переработка исходников в дизассемблере!!! Который к тому же не всегда правильно показывает код.
     
  10. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    Правильно, исходники не всегда удобно смотреть ;) Я немного неудачно выразился - я имел в виду комбинацию отладчика (например, брейк на доступ к портам IN/OUT) и дизассемблера.

    Т.е. трассировать вызов функи которая ... которая делает что-то полезное с CD. По идее, можно даже как-то загрузить эту часть кода на выполнение отдельно от самого BIOS..
     
  11. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    А документацию почитать не судьба?
    Я конечно понимаю что пошариться отладчиком по BIOS'у это дзенно, но когда есть документация на железо это IMHO не самый быстрый и лёгкий путь...
     
  12. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Меня этот вопрос тоже интересовал, но до практики я так и не дошел. Поэтому однозначного ответа не дам, но...

    Как я понимаю, CD-ROM -- тоже IDE устройство, как и винчестер. Попробуй вызвать ф-ию 8 прерывания 0x13 -- она сообщает информацию о геометрии винта (с трансляцией) и помимо нее в dl возвращает количество IDE-устройств, как я понял. Так ты точно сможешь узнать №, под которым CD-ROM виден (или не виден). Если CD все же виден -- неплохо бы выяснить, с какой ошибкой происходит вызов чтения -- номер ошибки возвращается в ah, значения можно посмотреть в таблице.

    Это, конечно, не помощь, но м.б. хотя бы наведет...
     
  13. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Так... вернемся к нашим (моим) баранам.
    To Mika0x65
    Проверил Ваше предложение. Функция возвращает только количество винтов. У меня получилась вот такая табличка результатов выполнения восьмой функции для входных значений dl 80h, 81h, 82h, 83h
    80h: ah = 00; bl = FF; dh = FE; dl = 02 (у меня действительно два винта)
    81h: ah = 00; bl = FF; dh = FE; dl = 02
    82h: ah = 01; bl = FF; dh = FE; dl = 82
    83h: ah = 01; bl = FF; dh = FE; dl = 83
    Т.е. способ не прокатывает.
    Allgemein
    Решил попробовать через порты ввода-вывода по протоколу PIO согласно одной из местных статей. Но прога не проходит цикл проверки готовности к приему данных из устройства после отправки команды чтения (т.е. данные все время не готовы)
    Код (Text):
    1. mov  dx,01f7h
    2. m4:
    3. in   al,dx
    4. test al,08h
    5. jz   m4
    Кроме того в 01F1h выставляется код ошибки 04h (ECC circuitry error). Ну и собственно вопрос: почему?
     
  14. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Я, конечно, не ожидал получить ответ в первые десять секунд, но прошло уже трое суток, и тема имеет серьезные перспективы попасть на страницы, куда заглядывают только в поисках ответа на собственный вопрос, и остаться не закрытой. :'(
    Я уверен, что многие знают ответ на вопрос. Где вы, люди?
     
  15. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    Через БИОС работать с СД низзя. Не зря же под досом сначала грузится драйвер СД (блочное устройство - кстати подебагь - здесь быстрее найдешь как с сд работать по портам) а затем грузится транслятор файловой системы (как загнул! :) ) MSCDEX.

    Когда ты грузишься с сд, БИОС эмулирует привод (дисковвод А или жесткий диск С для загрузчика, который находится в сец.области диска). Но по прежнему доступа к остальному диску БИОС не предоставляет.
     
  16. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Ultrin Faern
    Так... спасибо. Насчет спец. области: она определена статически или как определить ее адрес?
    Для начала неплохо бы просто организовать продолжение загрузки с диска после работы моего загрузчика на дискете.
    А что по поводу PIO? Почему не работает (13 пост)?
     
  17. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    Насчет PIO не знаю. Единственное предположение - а разве СД по усолчанию в PIO работает? Контроллер сначала попросить нужно, чтобы он в этот режим перешел (а може это все и чепуха).

    Какой адрес?!!! Ты в Неро загрузочные диски создвавал?!! Загрузчик - это всего лишь специфический формат (а точнее одна сессия) диска. И эмуляция создается ТОЛЬКО при загрузке с диска - иначе ничего нет.
     
  18. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Не... Не создавал.
    В смысле как это? Если я открою в WinHex содержимое диска, я там разве не обнаружу кода загрузчика (я понимаю, что он не будет там в виде файла boot.img оформлен)? Т.е. вопрос в том, с каких адресов диска (или вообще откуда) BIOS берет данные для своей эмуляции?
     
  19. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
  20. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Y_Mur
    Круто. Супер. Огромное спасибо. Может теперь тема наконец за два года закроется...