Проблема с 13-тым прерываниме биоса

Тема в разделе "WASM.ASSEMBLER", создана пользователем 3n3m1, 31 мар 2007.

  1. 3n3m1

    3n3m1 3n3m1

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    11
    Адрес:
    Украина
    Я пишу ОСь. Пока, что 16-битная. Седня такая проблема возникла. Я ж офигел...
    Проблема со 2-ой функцие 13-того прерывания биоса, которая читает сектор. Чо-то у нее не получается...
    На вход я подал:

    DL = 0 (номер диска)
    DH =1 (номер головки)
    CH =0 (номер дорожки)
    CL =13(номер сектора)
    AL =03(число секторов)
    ES:BX=500(адрес буфера вызывающей программы)
    ES =0

    Проблема в том, что эти 3 сектора не читаются! При чем, проблема не в кривой дискете( я читал и с нее, и с файла на винте). Вмварь, боршь и мой комп не может выплнить нормально эту функцию. Кери флаг устанавливается. Пытаюсь прочитать три раза - безуспешно.

    Если кто-то знает, какие параметры я передал не правильно, подскажите, плиз :)
     
  2. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    AL - число секторов больше 0.
    AH = 02h
    CH - номер цилиндра
    CL - номер начального сектора
    DL - номер дисковода (00h-7fh гибкий диск, 80h-0ffh жесткий диск)
    Остальное верно, только es на сегмент данных должен указывать..

    Примечание:
    При использовании жестких дисков, старшие 2 бита 10-разрядного номера цилиндра помещаются в старшие два бита регистра CL

    (инф. из книги Кулакова)
     
  3. 3n3m1

    3n3m1 3n3m1

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    11
    Адрес:
    Украина
    Ну это понятно, я вообще-то все тоже самое написал. es узказывает на сегмент данных. С этим проблем нет.
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    3n3m1
    какая ошибка?
     
  5. 3n3m1

    3n3m1 3n3m1

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    11
    Адрес:
    Украина
    Сори, забыл написать, что в ah после выполниния прерывания лежит 0x20.
     
  6. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Отказ контроллера :)
     
  7. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    3n3m1
    в таких случаях обычно берутся параметры, при которых функция работает, и по-очереди заменяются на те, с которыми она работает отказывается. таким образом локализуется параметр, из-за которого возникают проблемы. это раз. во-вторых, функции кроме признака возвращают еще и код ошибки. можно поглядеть, что в нем вернулось. ну и наконец можно самому придумать какой-нибудь способ, позволяющий выяснить в чем дело. не обязательно так сразу лезть на форум и спрашивать всякую чушь..

    по теме: 1. CL=13 в hex или в dec'е? на стандартной 3.5" дискете всего 12h секторов
    2. ES=0, BX=500 - если 500h, то подозрительно близко к BDA, ты наверняка что-нибудь затираешь, если просто 500 - затираешь таблицу векторов
    3. дискета элементарно не битая?

    ps: 20h - попробуй перенести буфер в нормальную область
     
  8. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Nouzui
    У нас на лабах сброс контроллера помогал .. перед началом работы
     
  9. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    TermoSINteZ
    мне лично помог вариат "купить флеш и забыть про эти гребанные дискеты" )
     
  10. 3n3m1

    3n3m1 3n3m1

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    11
    Адрес:
    Украина
    Я понимаю, что форум предназначен не для этого поэтому по всякой фигне не обращаюсь - это первый раз, и то, потому, что, как мне казалось, слишком это бредово, что функция биоса не пашет.
    Сори, я очень не внимательный, в хексе, только что тоже об этом подумал, большое спасибо :).
    Я точно ничего не затираю 0x500-0x9FFFF - свободная область памяти.
    Я ж сказал, что тестил в основном образ дискеты, когда ни борщ ни вмварь меня не удавлетворили, я решил загрузить свою тачку с дискеты.

    Кстати, у меня была проблема: борщь воспринимает этот параметр, как синоним к 1, незнаю почему, но разработчики борща ничо до сих пор с этим не сделали...
     
  11. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    вообще-то да..
     
  12. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Все можно исправить ) Оно же опен-сорс.
     
  13. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Если с дискеты читаются несколько секторов за раз, все они должны быть на одной дорожке. А у тебя один сектор лежит в конце первой дорожки, а два других - в начале следующей.
     
  14. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Похожая тема была http://www.wasm.ru/forum/viewtopic.php?id=19660
    Также на некоторых BIOS и дисководах бывает, что при первом чтении/записи на дискету не успевает раскрутиться мотор. Поэтому при ошибке можно попробовать ещё раз.
     
  15. 0136

    0136 New Member

    Публикаций:
    0
    Регистрация:
    19 апр 2007
    Сообщения:
    112
    3n3m1
    привет! я тоже пишу ОС, начал ;) по приколу, когда нефиг делать %) скинь мне в аську 331445922 или на електронку lega@allforums.org.ua
    я эту тему тебе в принципе расскажу, поделимся опытом и идеями, кодами инфой и т.д ! буду рад !