Номера дисков с точки зрения BIOS и Int 13h

Тема в разделе "WASM.ASSEMBLER", создана пользователем ZorG, 10 май 2007.

  1. ZorG

    ZorG New Member

    Публикаций:
    0
    Регистрация:
    10 май 2007
    Сообщения:
    6
    Уважаемые! У меня такой вопрос: я так понимаю, что номера HDD, для прерывания Int 13H следует расценивать как:
    80h - Primary Master
    81h - Primary Slave
    82h - Secondary Master
    81h - Secondary Slave

    Так это или нет. И второй вопрос, случайно ни кто не в курсе как ОС узнает с какого диска она загружена? Иными словами: как программно узнать с какого диска был прочитан и загружен в память MBR или Boot Record. Очень надеюсь на вашу помощь!
     
  2. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Первым идёт тот, с которого загрузились, потом - в этом порядке.
     
  3. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    ZorG
    мыщъх неоднократно сталкивался с тем, что BIOS нумерует диски как бог на душу положит, особенно если воткнуть скази или другой изврат. рядом со мной стоит епошка, которая незавсимо от спосба включения дисков нумеруют их так, чтобы не образовывалось "дыр", т.е. если воткнуть один лишь Secondary Slave он будет все равно 80h.

    загрузочный диск BIOS помещает в регистр dl (раскури сорцы загрузчика из линуха)

    Vov4ick
    не понял. то есть если я вызывл загрузочное меню (обычно вызывается по ecs по время поста), и загрузился с другого диска - он что ли будет 80h?! пробовал на разных авардах и ами - ни фига подобного. да и почему вообще нумерация дисков должна измениться?!
     
  4. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    kaspersky
    Встречный вопрос: откуда MBR знает, с какого диска грузить систему? :derisive: Он грузит загрузочный сектор с диска 80h, то есть с первого (нулевого). А тот также работает с 80h.
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Vov4ick
    как было сказано в dl номер диска, вот и BR знает с какого диска загружено.
    Или ты имеешь в виду с какого диска BIOS считывает MBR? Тут уже зависит от BIOS'a и его настроек, мало ли как извернутся можно :P
     
  6. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    Vov4ick
    вот фрагмент одного загрузчика.
    ; V2_OS boot sector
    ; Copyright (C) 1999 V2_Lab
    ; Copyright (C) 2000 V2_OS Kernel Coders Team
    bits 16
    org 7c00h

    cli
    xor bx, bx
    mov ds, bx
    mov ss, bx
    mov sp, 7bfeh

    [ski]
    ; Save boot disk
    mov [BootDisk], dl

    как видишь, BIOS передает номер устройства в регистре DL, который и должен использовать загрузчик, чтобы грузится правильно. я видел пару BIOS'ом написанных специально для тупых загрузчиков, которые всегда грузились с 80h и потому там в Setup'е была опиция, называющая "ротация дисков", которая всегда подставляла любой загрузочный диск как 80h, но это уже экзотика. и загрузчик нужно писать правильно ;)

    во многих BIOS'ах если во время поста нажать на esc, появится меню выбора загрузочного устройства, позволяющее грузить систему с любого диска из всех имеющихся. очень удобная штука ;)
     
  7. Ultrin Faern

    Ultrin Faern New Member

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

    Возможно dl, это не переданный параметр, а "остатки" от последних команд
    ....
    mov dl, drive
    int 13h
    jmp 7C00:0
     
  8. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Ральф Браун по этому поводу пишет:

    Я это понимаю как то, что в dl будет лежать номер драйва, с которого произошла загрузка. Да и загрузчик FreeBSD на это ориентируется.
     
  9. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    Сколько раз с этим сталкивался, фигня получалась такая:
    При загрузке биос ищет винт с корректным MBR. Корректный mbr это тот mbr, в конце сектора которого содержится магическая цифра 55ААh, вроде бы. Если примари мастер под эту тему не подходит, берётсмя следующий подключенный к системе винт. Если загрузчик данного винта удовлетворяет данному условию, то ему присваивается номер 80h, остальные винты нумеруются по порядку. Возможно это не всегда именно так, но я видел такое. Так как по лигике вещей, прежде чем передать управление загрузчику жесткого диска он (загрузчик) должен быть проверен на валидность. В противном случае на экране появляются две известные строчки большыми буквами.
     
  10. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    Ultrin Faern

    Код (Text):
    1. Ни в одной документации по MBR не написано, что в dl передается номер диска, с которго грузятся. Как отрицание этого могу сказать, например, что активный раздел обозначается флагом 80h не случайно - это номер диска для загрузки. И я видел коды MBR, которые используют этот номер для дальнейшей работы (хотя это наверное и есть старые загрузчики).
    Возможно ты неверно понял код этих мбр, либо это быле нестандартные скажем прямо тупые мбр. Ибо где ты видел, что по смещению 1beh к примеру в mbr, стояло 81h или выше ?
    У тебя в системе может быть куча винтов и все активные с установленным данным байтом. Судя по логике такой mbr должен был бы уже сойти с ума.
    Поверь, это просто совпадение. а 80h к твоему сведению это букава А. не напоминает ли тебе это начало слова Active ?

    Мой совет тебе, разберись в MBR, ибо сказочки рассказываешь.

    в регистр DL всегда содержится номер жесткого диска, ибо его в дальнейшем использует нормальный мбр или загрузчик ос.
     
  11. ZorG

    ZorG New Member

    Публикаций:
    0
    Регистрация:
    10 май 2007
    Сообщения:
    6
    Нифига себе полемика разрослась :) Короче я пришел к выводу, что нужно провести тупо эксперимент :) Щас стартану Bochs в дебаг-моде и погляжу, чего там MBR откуда берет, по результатам отпишусь

    Не, лениво мне стало в дебаге ковыряцца, вот чего я надыбал в MBR от Microsoft:

    Код (Text):
    1.         mov si,(offset tab) + org_delta  ;partition table
    2.         mov bl,4                         ;number of table entries
    3. next:
    4.         cmp byte ptr[si],80h             ;is this a bootable entry?
    5.         je boot                          ;yes
    6.         cmp byte ptr[si],0               ;no, is boot indicator zero?
    7.         jne bad                          ;no, it must be x"00" or x"80" to be valid
    8.         ...
    9. boot:
    10.         mov dx,[si]                      ;head and drive to boot from
    11.         mov cx,[si+2]                    ;cyl, sector to boot from
    12.         mov bp,si                        ;save table entry address to pass to partition boot record
    Из строчки mov dx,[si] становится ясно - номер диска берется из MBR, а поскольку там может быть только 0х80 или 0х00, загрузка будет всегда происходить с HDD под номером 0х80. Стало быть предположение о том, что BIOS сам переномерует диски в момент загрузки не лишено смысла.

    ЗЫ: В BOCHS я всетаки залез - действительно, зачение DL читается из MBR.
     
  12. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    Число 80h - если это и буква "А" (облом щас смотреть) то только русская. Я не думаю что MBR россияне проектировали :)))
     
  13. ZorG

    ZorG New Member

    Публикаций:
    0
    Регистрация:
    10 май 2007
    Сообщения:
    6
    Не поленился :) 0x80 это код знака подчеркивания "_" и в 1251 и в 886 кодировках :)
     
  14. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Не знаю чё-ты там не поленился, но 0x80 это 'А' (русская) в cp866-ru.
    Курим Bios Boot Specification - там написано
    Дык так делает большинство BIOS'ов.
    То что написал ZorG - это порядок нумерации, а не фиксированные номера.
    Т.е. это не значит что Primary Slave будет 0x81, если нету Primary Master - он будет 0x80.
     
  15. ZorG

    ZorG New Member

    Публикаций:
    0
    Регистрация:
    10 май 2007
    Сообщения:
    6
    Простой эксперимент: создаем на диске файл с единственной русской буквой "А". Открываем в FARе по F3 и переключаем в HEX-mode - видим 0xС0. В FARе кодировка DOS и есть 866.

    Что на это возразишь?
     
  16. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    то что в cp866 80h это русская буква 'А'.
     
  17. ZorG

    ZorG New Member

    Публикаций:
    0
    Регистрация:
    10 май 2007
    Сообщения:
    6
    Прошу прощения уважаемые :) Кодировка стояла Win (1251) виноват, каюсь :)
     
  18. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    Так а результат полемики?

    Номер диска выигрывает со счетом 2:1, так как

    Голоса за номер диска:
    1) Судя по исходникам MBR это все-таки номер диска (плюс следующие байты с номерами сектора\цилиндра\головки очень даже подходят для быстрой загрузки регистов для int 13 и чтения BOOT) а не русская буква
    2) Жесткие диски нумеруются начиная с 80h, а это точно не обозначение "активного диска" (не у кого нет диска "А" в русской кодировке) :)

    Голос за обозначение "активный":
    1) В русской кодировке число 80h является заглавной буквой "А".
     
  19. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Товарищи, что вы спорите, проверить не судьба? Сколько видал BIOS'ов везде первый - тот, с котороко загрузился. Иначе не заработают ни MBR с BOOT'ом, ни DOS.
     
  20. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    Код (Text):
    1. Число 80h - если это и буква "А" (облом щас смотреть) то только русская. Я не думаю что MBR россияне проектировали :)))
    Я хрен ево знает чья, мож я не на 100% прав, говорю из собственного опыта. Но какие то странные логические привязки отседова вытекают если чесна.