Próbuję napisać program ładujący dla systemu operacyjnego Hobby i sprawić, by działał świetnie. Nic specjalnego, po prostu drukuje wiersz tekstu:
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
Kompiluję się z
nasm -f bin loader.asm -o loader.bin
dd if=loader.bin of=floppy.img bs=512 count=1 seek=0
Przeczytałem, że pierwsze 446 bajtów to kod rozruchowy, a bajty 447 - 509 to tablica partycji. Próbowałem wtedy używając:
dd if=loader.bin of=floppy.img bs=446 count=1 seek=0
aby nie dopuścić do zastąpienia tabeli partycji, ale nadal nie cygara.
Używam komputera Mac z systemem OSX i testuję system operacyjny za pomocą VirtualBox
Mogę uruchomić dyskietkę.img w VBox i kod działa poprawnie, ale kiedy próbuję zainstalować bootloader na sformatowanym dysku FAT 16, OSX nie może już odczytać obrazu dysku, tak jakby stał się niesformatowany.
Dokładny komunikat z narzędzia dyskowego to Unable to attach image "floppy.img."(No Mountable File Systems)
Mimo że właśnie sformatowałem dysk za pomocą systemu plików FAT 16.
Niestety, ponieważ jest to mój pierwszy post, nie mogę dać ci zdjęcia.
Naprawdę doceniłbym każdą pomoc. Struktura dysku naprawdę nie jest moją mocną stroną.
Odpowiedzi:
8 dla odpowiedzi № 1Kiedy używasz dd
, spróbuj dodać conv=notrunc
opcja. Wymusza to, że nie będzie próbował obciąć pliku, ale po prostu zastąpi określone części.