Помогите разобраться с bootloader'om

Тема в разделе "WASM.ASSEMBLER", создана пользователем bloodman, 29 ноя 2005.

  1. bloodman

    bloodman New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2005
    Сообщения:
    7
    пишу свой загрузчик (тот который в MBR потом запишется) , так вот не влез он у меня в отведенное место (512 - 66 байт в первом секторе) и решил я разбить его на 2 части . Первая загружает вторую из второго сектора сразу в адрес 0000:0600 (так должен поступать загрузчик) ,ну а вторая собственно делает все остальное (смотрит диски , записывает их загрузчик по адресу 0000:7с00 ) и у меня возникла проблема smile Первая часть вроде нормально отрабатывает , а вот вторая нивкакую , в ней с самого начала должно выводится сообщение (Loader started) но вместо него крякозябры и соотв. ,ничего путного не делается , такое ощущение что первая программа не туда прыгает в конце(т.е. не в 0000:0600 а куда то еще ) но опытным путем быыло установлено что все же туда , поэтому я вообще не могу понять в чем дело :dntknw: помогите плиз
     
  2. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    bloodman

    Если не пихать столько строк и массивов заполненных нулями в загрузчик, то ему и одного сектора вполне хватит. Кроме того int13, в том виде в котором он используется здесь, не позволяет читать данные за пределами первых 8Гб. Нужно либо использовать расширения int13, либо читать сектора через порты. Правда у второго способа есть масса недостатков: позволяет читать только первые 128Гб, может не работать со всякими RAID и SATA.
     
  3. bloodman

    bloodman New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2005
    Сообщения:
    7
    Я вроде считал , что даже и без нулей не влезет , код копирования вре равно же останется , а в этом секторе еще и таблица разделов ( -66 байт) ... мне про 8гб не важно -учебное задание , но вот что с прогой творится просто непонятно , вроде все правильно в TurboDebug'ере тож работает (всмысле сообщения и т.д. запись по адресу 0000:0600 убивает винду :) ) ...
     
  4. bloodman

    bloodman New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2005
    Сообщения:
    7
    вообщем разобрался вроде , можете тему удалять .

    Дело было наверно в том что я в WinHex менял файл виртуального диска VMWare а он нааверно был занят поэтому мне WH говорил что все заменил а на самом деле все осталось по прежнему , ну и + перешел на FASM а был TASM -)



    P.S. Black_mirror пасиб за помощь -)
     
  5. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035


    boot16.asm



    Если удалить из этого файла таблицу параметров fat32 диска, то освободится 89 байт в дополнение к тем 35, что остаются свободными в конце сектора. Если же перейти к задаче чтения загрузочного сектора логического диска, то можно выкинуть имя файла, который нужно загрузить, процедуру read_cluster, и практически всё, что идет после метки load_drive. Кроме проверки типа раздела нужно добавить проверку признака "загрузочный" (если это делать в process_part, то в load_part этот признак нужно поместить в стек), а после метки load_drive изменить адрес загрузки сектора, а также добавить команду передачи управления считаному сектору. Как можно заметить, кода здесь убирается намного больше чем добавляется.
     
  6. bloodman

    bloodman New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2005
    Сообщения:
    7
    так ваш загрузчик под загрузочный сектор, а мой в MBR , у мя нету вообще таблицы , только таблица разделов после загрузчика , но её все равно не удалить :)