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ó.