OS in C
-
Hi
Hab jetzt das so umgeschrieben, dass es am Offset 100 satrten sollte.
Allerdings bootet er jetzt nur noch und führt dann keinen Kernelcode mehr aus.
Was ist daran falsch.
Bzw. kennt wer nen Linker der nicht 1kb für ein
void main() { asm jmp 1FFFF:0000 } braucht?mov al,1 mov cl,2 mov ax,0x2000 mov es,ax mov bx,0x0100 mov ah,0x02 mov ch,0 mov dl,00h mov dh,0 int 0x13 jmp 0x2000:0x0100 ;die stelle wo der kernl gespeichert ist
-
Wenn Du 0 Sektoren einliesst, kann auch nichts ausgefuehrt werden.
Du solltest 2000h ueber ax in es kopieren, bevor Du ax fuer den int 13h setzt.
-
Okay das stimmt aber es war nicht das einzige problem.
Also das wirklcihe problem ist jetzt dass wenn ich die .com in nem
Hexeditor betrachte ist sie nichts ausser 00000....
Also brauch ich wohl nen geshceiten linker.
Kennt wer einen?
-
Der GNU gcc compiler kann IMHO binaries erstellen. Ich meine das in der Hilfe gelesen zu haben. Muss man wahrscheinlich beim Compilieren und linken angeben.
Du musst bedenken, dass du keinerlei standard libs benutzen darfst.Achso:
Der gcc erzeugt natürlich 32bit code für den protected mode. Ich hoffe dein OS läuft im Protected mode.
-
Schau dir doch wegen plain binaries mal das hier an
http://www.nondot.org/sabre/os/files/Booting/CompilingBinaryFilesUsingACompiler.pdf
-
mal ne blöde frage, sind objektdateien nicht binaries ohne header?
okay, sie sind noch nicht verlinkt, aber das wird sich ja irgendwie machen lassen..
-
Die .obj-Dateien haben AFAIK sehr wohl einen Header.
-
ja. obj Dateien haben einen Header. Man muss diese erst mit dem Linker bearbeiten, der GNU ld, hat aber Optionen um ein plain binary zu erstellen (also keine Header etc.).
-
da ich denke, das folgendes hier am besten passt, wollte ich euch fragen, was ihr hierzu meint. saugenswert?
-
Was hat das mit einem OS in C zu tun
Na egal, ich habe diese Version, die es da zum Download gibt nicht richtig zum Laufen bekommen