Ich habe ein Problem mit meinem selbstgeschriebendem Bootloader!



  • Hallo! 😃 Ich weiß, dass ich der Troll früher war, aber jetzt ist es anders! Ich habe vor 5 Monaten "gemerkt", dass man keine C++ Biblotheken in einem selbstgeschriebendem OS benutzen kann. Ich habe eure Räte befolgt und habe mir osdev und lowlevel mal so durchgelesen. Nebenbei habe ich Assembler(NASM) gelernt. Um ehrlich zu sein: Wenn ich auf meine alte Beiträge schaue, lache ich mich tod, weil ich kann mir nicht vortsellen, wie blöd ich war! 😉 Naja, aber kommen wir zur Sache: Ich habe eine Tutorial in Lowlevel gefunden, wie man seinem Bootloader in NASM schreibt. Ich selbst kann ein Bootloader von alleine aus schreiben(ohne scheiß), aber trotzdem ladet er den Kernel nicht, obwohl ich den die Anweisung gebe, um die Sektoren im Diskettenabbild nach einer Datei, die mit 0x1000 anfängt, abzusuchen. Ich habe es mit QEMU gestartet, und es ladet. Aber der eigentliche Kernel kommt nicht raus. So sieht der Bootloader aus:

    org 0x7C00
    
    start:
    cli                  ; Keine Interrupts verwenden!
    mov ax, 0x9000       ; Adresse des Stack speichern
    mov ss, ax           ; Stackadresse festlegen
    mov sp, 0            ; Stackpointer auf 0 setzen
    sti                  ; Jetzt lassen wir wieder Interrupts zu
    
    mov [bootdriv], dl   ; Bootlaufwerk merken
    
    call load            ; "Kernel" laden
    
    mov ax, 0x1000       ; 0x1000 ist die Speicheradresse unserer Shell
    mov es, ax
    mov ds, ax
    push ax
    mov ax, 0
    push ax
    retf 
    
    bootdriv db 0         ; Das Bootlaufwerk
    
    ; Mit dieser Funktion laden wir unsere Shell vom Bootlaufwerk
    load:
    push ds
    mov ax, 0
    mov dl, [bootdriv]
    int 13h
    pop ds
    jc load
    
    load1:
    mov ax,0x1000
    mov es,ax
    mov bx, 0
    mov ah, 2
    mov al, 5
    mov cx, 2
    mov dx, 0
    int 13h
    jc load1
    retn
    
    times 512-($-$$)-2 db 0
    dw 0AA55h
    

    der kernel:

    mov ax, 0x1000
    mov es,ax
    mov ds, ax
    
    mov ah, 0Eh
    mov al, 'd'
    int 10h
    

    und ich habe eine datei namens image.asm erstellt, die die zwei asm Dateien zusammenfasst.

    sie lautet so:

    %include "boot.asm"
    %include "kernel.asm"
    

    alles compliert wunderbar, ....
    hoffentlich könnt ihr mir helfen und mit sagen, warum es nicht bootet. wo der fehler bei boot.asm liegt!



  • Hast du dir dein Programm schon mal im Debugger angeschaut?
    An welcher Stelle geht dein Programm bzw. der IP zum Ausgabeteil über?

    Und ich würde auch ruhig mal etwas mutigere Ausgaben versuchen, sowas wie

    mov ah,0eh
    mov al,01
    int 10h
    mov al,03
    int 10h
    mov al,04
    int 10h
    

    oder
    ..."Gratulation, du Knalltüte!!!!!
    Hast du es endlich geschafft? - Mannomann, ich kann es noch gar nicht glauben!!!!! --- ohjemineh ojeh....das darf doch alles nicht wahr sein....-
    das bild ich mir doch nur ein, oder etwa nicht??
    Ich kanns nicht fassen, träum ich, oder wach ich? Hab ich mir das eben nur eingebildet (J/N)?



  • Nein das bildest du dir es nicht ein! Das bin ich wirklich. Nein, überprüft habe ich garnicht. Bzw.: Dieses "Programm" kann ich nicht ausführen und es als .exe Datei speichern, den ich bin Linux User geworden und dort kommt immer .bin raus. Ich meine, warum es nicht bootet obwohl ich es so programmiert habe, dass es eigentlich booten soll, wenn ich die Datei Boot.bin und kernel.bin zusammen tue. Ich habe eine andere Strategie versucht und habe

    cat boot.bin kernel.bin > os.img
    

    im Terminal eingegeben und trotdem: Es ladet sich, aber es kommt nichts raus. Eigentlich sollte es starten, weil ich im Bootloader so einen Befehl programmiert habe, dass es zu einer Datei in der Diskette(oder .img Datei) suchen, die den Wert 0x1000 am Anfang hat. Also warum startet es trotzdem nicht? Ich habe es doch Schritt nach Schritt Lowlevel gefolgt und nix!

    Allgemein: Ich habe einen Freund, der will mit mir ein OS schreiben.(Hab mal in einem Beiträg wohl erwännt, Da wo steht, wo ich für B ein compiler suche). Alter, er wusste vor 5 monaten nicht mal, was ein compiler ist! Ich habe ihm schon längst aufgegeben und mache was eigenes. Er aber meint: „Das OS wird dreißig Tage laufen, und dannach muss ers kaufen...“. Alter, er ist ja voll blöd. Ich sage nur eins: Er ist Träumer, ich wars auch aber jetzt bin ich anständig.



  • Ich habe es herausgefunden! Durch diese wunderbare Internet Seite: http://www.henkessoft.de/OS_Dev/OS_Dev1.htm#mozTocId10971 Ein paar Kapitel später steht, dass ich noch, damit es booten,

    times 512 - ($-$$) hlt
    

    brauche!" Und es hat echt gebootet!



  • Durch diese wunderbare Internet Seite: http://www.henkessoft.de/OS_Dev/OS_Dev1.htm#mozTocId10971

    Das geht runter wie Öl. 😉


Anmelden zum Antworten