Загрузочний сектор в Hdd

Тема в разделе "WASM.OS.DEVEL", создана пользователем CED2011, 15 янв 2011.

  1. CED2011

    CED2011 New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2011
    Сообщения:
    8
    Есть где небудь исходник загрузчика на FASM каторий загружал ос з hdd а не с дискети?
     
  2. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    разница не велика. просто изменить в преобразовании номера сектора из LBA в CHS количество головок и секторов на дорожке. Плюс можно использовать расширенный дисковый сервис BIOS.
    А вообще вот вам: функция загрузка сектора с диска с использованием расширенного сервиса:
    Код (Text):
    1. ; Загрузка сектора EAX в буфер ES:BX (используется LBA)
    2. load_sector_lba:
    3. virtual at $$ - 0x200 ; Можно  заменить на любой другой свободный адрес памяти
    4.     .dap:
    5.     .dap_size db ?
    6.     .dap_reserved_1 db ?
    7.     .dap_count db ?
    8.     .dap_reserved_2 db ?
    9.     .dap_segment dw ?
    10.     .dap_offset dw ?
    11.     .dap_sector_index dq ?
    12.     .sizeof.dap = $ - $$
    13. end virtual
    14.     push edx si
    15.     mov [.dap_size], .sizeof.dap
    16.     mov [.dap_count], 1
    17.     xor edx, edx
    18.     mov dword[.dap_sector_index], eax
    19.     mov dword[.dap_sector_index + 4], edx
    20.     mov ax, es
    21.     mov [.dap_segment], ax
    22.     mov [.dap_offset], bx
    23.     xor al, al
    24.     mov [.dap_reserved_1], al
    25.     mov [.dap_reserved_2], al
    26.     mov ah, 0x42
    27.     mov si, .dap
    28.     mov dl, [disk_id]
    29.     int 0x13
    30.     jc disk_error
    31.     pop si edx bp
    32.     ret
    При старте начального загрузчика надо сохранить значение DL переданное BIOS в переменную disk_id.
    Если вы хоть немного разбираетесь в вопросе, то знаете куда эту процедуру надо воткнуть в загрузчике с дискеты.
    Если вас интересует загрузка без использования расширенного диска, то вот:
    Код (Text):
    1. ; Загрузка сектора AX в буфер ES:BX (используется CHS)
    2. load_sector_chs:
    3.     push ax cx dx si
    4.     xor dx, dx
    5.     div [spt]
    6.     mov cl, dl
    7.     inc cl
    8.     div [head_count]
    9.     mov dh, ah
    10.     mov ch, al
    11.     mov dl, [disk_id]
    12.     mov si, 3
    13.     mov al, 1
    14. @@:
    15.     mov ah, 2
    16.     int 0x13
    17.     jnc @f
    18.     xor ah, ah
    19.     int 0x13
    20.     dec si
    21.     jnz @b
    22.     jmp disk_error
    23. @@:
    24.     pop si dx cx ax
    25.     ret
    26. ...
    27.         ; Определение параметров загрузочного диска для адресации CHS. Нужно делать до функции загрузки
    28.         push es
    29.     mov ah, 8
    30.         mov dl, [disk_id]
    31.     int 0x13
    32.     and cl, 00111111b
    33.     xor ch, ch
    34.     mov [spt], cx
    35.     inc dh
    36.     mov [head_count], dh
    37.     pop es
    Если же хочется совсем готового примера, то посмотрите в сторону KolibriOS. У неё есть загрузчик с жёсткого диска в FAT32. Разумеется, с исходниками.
     
  3. abcd008

    abcd008 New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2009
    Сообщения:
    616
    посмотри исходники kolibri или menuet. а так разницы особой нет, просто номер диска другой. и управление передает не биос а mbr.
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Исходники бутсекторов 5ти различных ФС и МБР из исходников NT4
    Не фасм, но должны разобраться.
     
  5. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    http://svn.xskernel.org/viewvc/xskernel-current/bootload/