Проблемы с пользовательским загрузчиком - PullRequest
8 голосов
/ 13 августа 2011

Я пытаюсь написать загрузчик для Hobby OS и он отлично работает.Ничего особенного, просто печатает строку текста:

BITS 16
ORG 0

start: jmp main


OEM         db "Test OS "           
BytesPerSector:     DW 512
SectorsPerCluster:  DB 1
ReservedSectors:    DW 1
NumberOfFATs:   DB 2
RootEntries:    DW 224
TotalSectors:   DW 2880
Media:      DB 0xf8  
SectorsPerFAT:  DW 9
SectorsPerTrack:    DW 18
HeadsPerCylinder:   DW 2
HiddenSectors:  DD 0
TotalSectorsBig:    DD 0
DriveNumber:        DB 0
Unused:         DB 0
ExtBootSignature:   DB 0x29
SerialNumber:   DD 0xa0a1a2a3
VolumeLabel:    DB "HOBBY  OS  "
FileSystem:         DB "FAT12   "



main:
    ;Adjust code Seg.
    cli
    mov ax, 0x07c0
    mov ds, ax
    mov es, ax
    mov fs, ax
    mov gs, ax
    ;Set up Stack
    mov ax, 0x0000
    mov ss, ax
    mov sp, 0xFFFF
    sti

    mov si, msg
    call print

print:

    .charLoop:

        lodsb
        or al,al
        jz .done
        mov ah, 0x0E
        int 0x10
    .done
        ret

msg db "Hello World",13,10,0

Я компилирую с

nasm -f bin loader.asm -o loader.bin
dd if=loader.bin of=floppy.img bs=512 count=1 seek=0

Я прочитал, что первые 446 байтов - это загрузочный код, а байты 447 - 509 - этотаблица разделов.Затем я попытался использовать:

dd if=loader.bin of=floppy.img bs=446 count=1 seek=0

, чтобы попытаться предотвратить перезапись таблицы разделов, но при этом не использовать сигары.

Я использую Mac с OSX и тестирую ОС с VirtualBox

Я могу запустить floppy.img в VBox, и код работает нормально, но когда я пытаюсь установить загрузчик на диск, отформатированный в FAT 16, OSX больше не может читать образ диска, как если бы он стал неформатированным.

Точное сообщение об отсутствии утилиты на диске: Unable to attach image "floppy.img."(No Mountable File Systems) Несмотря на то, что я только что отформатировал диск с файловой системой FAT 16.

К сожалению, поскольку это мой первый пост, я не могу датьВы картинка.

Я был бы очень признателен за любую помощь.Структура диска на самом деле не моя сильная сторона.

1 Ответ

8 голосов
/ 13 августа 2011

Когда вы используете dd, попробуйте добавить параметр conv=notrunc.Это заставляет его не пытаться усечь файл, а просто перезаписать указанные вами части.

...