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


Anmelden zum Antworten