Загрузка первого байта первого сектора

Тема в разделе "WASM.OS.DEVEL", создана пользователем Antoniosis, 7 авг 2010.

  1. Antoniosis

    Antoniosis New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2010
    Сообщения:
    12
    Здравствуйте уважаемые программисты! :)
    Решил поставить небольшой эксперимент: написал бесконечный цикл (всего 3 байта), откомпилировал и с помощью хекс эдитора убрал все до самой первой команды, затем поместил этот машинный код в первые ячейки дискеты.
    По идее после окончания деятельности BIOS, ЦП должен зачитать первые байты и зависнуть. Но ничего не получается :dntknw:( эксперимент не удался... Для меня это важный эксперимент для понимания.
    Подскажите пожалуйста в чем дело?
     
  2. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    В конце бутсектора должна присутствовать загрузочная сигнатура 0x55, 0xAA.
     
  3. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Я на днях выложу новую версию MBR-загрузчика (Alter 2). Хотите потестировать?
     
  4. Antoniosis

    Antoniosis New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2010
    Сообщения:
    12
    с удовольствием! )
     
  5. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Проблема разрешилась успешно?
    ОК:-D Выложу ссылку здесь или можешь скинуть мне в личку свое мыло. Ориентировочно в понедельник.
     
  6. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    Фантом_84, можешь прокомментировать преимущества твоего MBR в сравнении со стандартным? Код хотелось бы увидеть, но можно и словами
     
  7. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Основная фишка предназначена конечно для юзеров, но в первой и во второй версии есть отличная фишка и для разработчиков (во второй обновленная). Есть еще самая первая "хакерская" версия "только для пользователей", которая "гуляет" вместе с пояснениями где-то по этому форуму. У меня есть очень короткие пояснения для внутреннего использования в виде html-страницы. Приеду домой - выложу. Плюс у нас есть майская спецификация на стадии прочтений - кое-что процитирую.
     
  8. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Open source не обещаю - пользуйтесь дизассемблерами :-D
     
  9. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Загрузчик уже давно не "оригинальный". Переписан еще в первой версии. Вторая версия отличается от первой прежде всего поддержкой новой спецификации для разработчиков, которая позволяет делать универсальные первичные загрузчики разделов, способные располагаться не только в начале раздела, но и в начале диска. Вот выдержки из последней спецификации (Rev. 3 A):
     
  10. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Alter 2.

    Установщик не предлагаю, т.к. тестируется именно загрузчик. Тестировать можете смело, т.к. он уже прошел основные тестовые испытания. Самое главное (не считая настройки конечно), найти оптимальный момент начала удерживания клавиши на конкретном компьютере, т.к. некоторые BIOS не позволяют начинать удерживать клавишу слишком рано. Держать лучше до появления логотипа загружаемой системы. На случай, если клавиша Alt сильно "заюзана" самим BIOS, или просто для примитивной защиты клавиши можно менять или расширять их число. Та самая 8 в описании - это фактически флаг, идентифицирующий клавишу. Если использовать значение 0xFF, то для активизации альтернативного загрузочного раздела можно пользоваться всеми упр. клавишами (Alt, Ctrl, Shift). Данная возможность поддерживается с самой первой "хакерской" версии. Загрузчик работает и со старыми дисками. Загрузчик выполняет одну дополнительную проверку на соответствие диска текущей "трехмерной" геометрии BIOS, которая в дальнейшем может быть из него изъята. Но она выполняется не всегда.

    Не хочу напоминать, но все-таки будьте осторожны при записи загрузчика на диск. Не повредите таблицу разделов. Сначала просто запишите загрузчик на диск и убедитесь, что все продолжает работать также, как и работало прежде. Если вы не вполне уверены в своих действиях, не следует менять активный раздел. Просто укажите номер альтернативного раздела (1-4) в байте перед таблицей разделов, а перед эти байтом впишите 8 или 0xFF. Не используйте данный загрузчик, если у вас в MBR находится нестандартный загрузчик. Если будут возникать проблемы, выложу эмуляторы для загрузки с флоппика и CD, не требующие записи загрузчика на жесткий диск.

    Мне будет полезна любая информация о результатах тестирования и использования загрузчика.
     
  11. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Новые возможности для пользователей:

    Загрузка с альтернативного загрузочного раздела, когда удерживается клавиша Alt (или другая управляющая клавиша(ы)). Alter использует два байта MBR для специальных целей:

    Имя/Смещение
    keyflags/444
    Описание
    Битовый набор, который определяет клавиши для активации расширенного режима (8 - любая клавиша Alt).

    Имя/Смещение
    magicnumber/445
    Описание
    Номер альтернативного загрузочного раздела или ноль. Значения 1-4 используются для первичных разделов. Значения 5-255 зарезервированы для дополнительных разделов.

    Режимы работы (keyflags/magicnumber):
    0/0 - обычный режим (новые возможности отключены).
    0/X - обычный режим с сохранением номера альтернативного загрузочного раздела.
    X/0 - зарезервировано для интерактивного режима (сейчас эквивалентно обычному режиму).
    X/X - расширенный режим (новые возможности включены).

    Новые возможности для разработчиков:

    Поддержка "Secondary Loader Boot Specification Rev.3". Данная спецификация описывает следующий интерфейс между MBR-загрузчиком (stage 0) и первичным загрузчиком (stage 1):
    DS:SI - указатель на дескриптор загрузочного раздела (если байт по адресу 7DFFh содержит 88h).
    DL - номер загрузочного диска.
    DH - номер загрузочного раздела или ноль (если байт по адресу 7DFFh содержит 88h).

    Новая ссылка: alter-2.bin (440 байт)
     
  12. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Думаю, уже можно спросить, кто-нибудь тестировал и если да, то каков результат?

    Просьба к модераторам порезать тему, начиная с поста #3, или на этом форуме такое не практикуется?
     
  13. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    Думаю имею смысл после старта загрузчика надо написать на экран "Press shortcut to ..." и ждать секунды 3. Тогда выбрать момент для нажатия клавиши будет очень просто.
     
  14. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Это вариант. Но во-первых некоторые используют alter для запуска скрытой системы, а во-вторых потеря нескольких секунд при старте кого-то может не устроить - alter вообще не тратит время на ожидание ввода, при этом пока не было случаев, чтобы вообще невозможно было успеть нажать клавишу перед тем, как alter выполняет опрос клавиатуры - тут дело действительно в приспосабливании к конкретному компьютеру - хозяин компа подходящий момент может улавливать безошибочно, если конечно не забывает про необходимость нажатия на клавишу.
     
  15. Toxasoft

    Toxasoft New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    188
    Здраствуйте у мня такой вопрос вскочил по поводу загрузки.

    Я разбираюсь с Protected mode и скачал на Васме со статьи "Прерывания в защищенном режиме" и модифицировал.
    Но он не хочет грузить больше 1кб с дискеты....
    Как Исправить проблему? (может ли это быть из-за того что я тестирую через Virtual Box)

    Вот кусок кода:
    Код (Text):
    1. init:
    2.     ; очистка экрана
    3.     mov  ax,3
    4.     int  10h
    5.  
    6.     ; иинициализация RM-сегментов и стека
    7.     mov  ax, cs
    8.     mov  ds, ax
    9.     mov  es, ax
    10.     mov  ss, ax
    11.     mov  sp, start
    12.     mov  bp, sp
    13.     ; сие безобразие никак не умещается в пределы одного сектора (512 байт)...
    14.     ; поэтому подгрузим остальные сектора в память
    15.     mov  ah, 2  ; AH = Function                          : Read sectors
    16.     mov  al, 50 ; AL = Number of sectors to read (1-128) : 10 ( с запасом ;-) )
    17.     xor  ch, ch ; CH = Cylinder number (0-1023)          : 0
    18.     mov  cl, 1  ; CL = Sector number (1-17)              : 2
    19.     xor  dx, dx ; DH = Head number (0-15)                : 0
    20.         ; DL = Drive number (0-A:, 1-B:)         : 0 (A:)
    21.     mov  bx, start
    22.     int  13h
    23.     jnc  continue_loading
    24.  
    25.     ; ошибка чтения. покажем сообщение и грохнем процессор
    26.     jmp display_read_error
    27. read_error db 'e',7, 'r',7, 'r',7, 'o',7, 'r',7
    28. read_err_l dw $-read_error
    29. display_read_error:
    30.     mov  ax, 0B800h
    31.     mov  es, ax
    32.     xor  di, di
    33.     mov  si, read_error
    34.     mov  cx, word [read_err_l]
    35.     rep  movsb
    36.     jmp  $
    37.  
    38.  
    39. ends: rb 510-(ends-start)
    40. db 055h, 0aah
     
  16. Vic3Dexe

    Vic3Dexe New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2009
    Сообщения:
    53
    Какую ошибку возвращает? 1к = 2 сектора, должно грузить как минимум до конца трека (у стандартной 1.44М 18 секторов на трек).
     
  17. Toxasoft

    Toxasoft New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2010
    Сообщения:
    188
    У мня ошибки не выдает просто не догружает.
    И это явно видно так-как у мня Ансиай таблица стоит в самом конце, и если программа больше 1кб то некоторые(иногда все) буквы не печатаются...
     
  18. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    А где можно скачать эту спецификацию. Я просто такой еще не видел.
     
  19. Vic3Dexe

    Vic3Dexe New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2009
    Сообщения:
    53
    Если ты просишь 50 секторов, а грузит только 2, то должен быть код ошибки, cf=1, ax = фолткод (или ah? не помню). Если cf=0, то все у тебя догружается, но или не туда или не то.
    Как определно start? Проверь пересечение границ сегмента, также разбей по трекам и читай их по отдельности. У меня чтение всего сразу работало в вмвари и куему, но на реальной машине биос упорно не желал читать больше трека за раз.
     
  20. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Естественно, ты ее не видел. Это спецификация загрузки моей оси и другого самозагружаемого софта, который делаю я и еще 3 человека. Сейчас спецификация описывает не только интерфейс между дисковым загрузчиком и ядром ОС/вторичным загрузчиком/другим самозагружаемым софтом, но еще и интерфейс между MBR-загрузчиком и первичным загрузчиком. Суть последнего раскрыта в приведенных выкладках.