assembly x86 disk utility bootloader

assembly - Problemas personalizados del gestor de arranque



x86 disk (1)

Estoy tratando de escribir un gestor de arranque para un sistema operativo Hobby y lo tengo funcionando bien. Nada especial, solo imprime una línea de texto:

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

Estoy compilando con

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

He leído que los primeros 446 bytes son el código de arranque y los bytes 447 - 509 son la tabla de partición. Intenté entonces usar:

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

para tratar de evitar que se sobrescriba la tabla de particiones, pero todavía no hay cigarros.

Estoy usando una Mac con OSX y probando el sistema operativo con VirtualBox

Puedo ejecutar el archivo floppy.img en VBox y el código funciona bien, pero cuando trato de instalar el gestor de arranque en un disco formateado FAT 16, OSX parece que ya no puede leer la imagen del disco como si no estuviera formateado.

El mensaje exacto de la utilidad de disco es Unable to attach image "floppy.img."(No Mountable File Systems) Aunque acabo de formatear el disco con un sistema de archivos FAT 16.

Desafortunadamente, ya que esta es mi primera publicación, no puedo darte una foto.

Realmente apreciaria cualquier ayuda. La estructura del disco realmente no es mi fuerte.


Cuando usa dd , intente agregar la opción conv=notrunc . Esto lo obliga a no intentar truncar el archivo, sino a sobrescribir las partes que especificó.