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.