Проблемы с пользовательским загрузчиком

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

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.

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

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


person Chase Walden    schedule 13.08.2011    source источник


Ответы (1)


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

person icktoofay    schedule 13.08.2011
comment
Большое спасибо. Я бы никогда не догадался - person Chase Walden; 13.08.2011