Kernel wird nicht korrekt geladen
-
Noch eine Fehlerquelle koennte das "[ORG 0x2000]" sein. Die Addresse, auf die ds:si beim Aufruf der Schreibroutine zeigt ist naemlich 2000h:2024h
Mehr laesst sich imho ohne den Code des Bootstraps nicht sagen
-
Hi
Das is es auch nicht
Der Bootcode sollte eigentlich stimmen den der ist ziemlich von nem
Tut übernommen.
Früher war auch noch nie ResetDevice Funktion drinnen (int 0x13) aber
damit geht es auch nicht.[BITS 16] [ORG 0] jmp short start_code nop ; required nop ;---------------------------------------------------------------------------- ; bios parameter block ;---------------------------------------------------------------------------- osname db 'TEST ' bytespersector dw 0x200 sectorspercluster db 1 reservedsectors dw 1 numberoffats db 2 rootdirectoryentries dw 0x00E0 totalsectors dw 0x0B40 mediadescriptor db 0xF0 sectorsperfat dw 2 sectorspertrack dw 0x12 numberofheads dw 2 hiddensectors dd 0 totalsectorshuge dd 0 drivenumber db 0 reserved db 0 signature db 0x29 volumeid dd 0 volumename db 'NONAME ' filesystemtype db 'FAT12 ' ;---------------------------------------------------------------------------- ; code ;---------------------------------------------------------------------------- start_code: cli ; diable interrupts mov ax, 0x07C0 mov ds, ax ; setup ds register mov ax, 0x9000 mov es, ax ; setup a stack mov sp, 0x1FFF ; 8 kb sti ; enable interrupts mov si,bootmsg call TextOut mov si,success call TextOut jmp ResetOK ;---------------------------------------------------------------------------- ;Funktions Kernel laden ;---------------------------------------------------------------------------- ResetOK: mov al,1 mov cl,2 mov ax,0x2000 mov es,ax mov bx,0 mov ah,0x02 mov ch,0 mov dl,00h mov dh,0 int 0x13 jmp 0x2000:0x0000 ;die stelle wo der kernl gespeichert ist ;---------------------------------------------------------------------------- ;Funktions Ausgabe ;---------------------------------------------------------------------------- TextOut: cld ; direction forward lodsb ; get next character cmp al, 0 jz return mov ah, 0x0E int 0x10 jmp TextOut return: ret ;---------------------------------------------------------------------------- ;data ;---------------------------------------------------------------------------- bootmsg db 'Booting....', 13, 10, 0 success db 'Bootvorgang Erfolgreich', 13, 10, 0 times 510-($-$$) db 0 dw 0xAA55
-
Also, ich würde einfach mal behaupten du musst beim Kernel auch [ORG 0] benutzen und nicht [ORG 0x2000], weil du setzt ja später ds auf 0x2000! Probier das nochmal aus!
-
Ja, habe es gerade bei mir getestet. Mit [ORG 0] funzt es, mit [ORG 0x2000] nicht.
-
Hi
jep jetzt geht es
danke!
-
Druecke ich mich so unverstaendlich aus?
*5 Postings weiter nach oben deut*
-
Hab mal ne ganz blöde Frage, wie compiliere/linke und schreib das auf eine Diskette. Oder muss ich das gernicht compilieren.
Danke (bin Newbee)
Alexander Sulfrian
-
Den Bootloader musst du assemblieren und ggf. linken.
Bsp.: nasm boot1.asm
Danach kannst du es dann mit Programmen wie rawrite oder debug o.ä. in den ersten Sektor der Diskette, den Bootsektor, schreiben.
Danach musst du den assemblierten Kernel in die Sektoren schreiben (wieder mit einem der oben genannten Progs), die der Bootloader lädt.
[ Dieser Beitrag wurde am 19.10.2002 um 22:26 Uhr von The Monument editiert. ]
-
Hi,
also nach nasm boot1.asm hab ich eine Datei: boot1 !
Wie schreib ich die und kernel mit debug (irgendwie mit W glaub ich) auf eine Diskette an LW A. Quelltext ixt von oben übernommen. Welche Addressen muss ich einsetzen. Äh beim 2. Schreiben sagt er immer: "Schreibschutzfehler beim Schreiben auf Laufwerk A" (Nur beim schreiben des Kernels oder muss ich bootloader und kernel gleichzeitig schreiben???)Danke
Alexander Sulfrian
-
Unter www.nondot.org/sabre/os dürftest du alles finden, was du brauchst