Ein kleines Demo-16Bit-OS
-
Genau das passierte bei mir auch. Was macht Bochs eigentlich? Simuliert es ein BIOS, dass den Bootsektor (und damit den Bootloader) nach 0x07C0:0 lädt, oder übernimmt Bochs vielleicht schon die Aufgabe des Bootloaders und erwartet einen Kernel als Image?!
Wie gesagt, ich kenne mich nicht mit aus! Ich kann es mir nur so erklären, dass er versucht das System zuladen und an zu jumpen, dabei aber in die Wallachei springt, und so den "Reboot" auslöst (darum das Blinken).
-
Also soweit ich weiß emuliert Bochs die ganze Maschine.
-
MaSTaH schrieb:
Also soweit ich weiß emuliert Bochs die ganze Maschine.
Ack, so ist es. Sprich lädt auch nur wie ein BIOS an 0x7c00 und sprignt dorthin.
-
Es muss aber an dem myOS liegen, weil mit der selben Konfiguration konnte ich z.B. eben ein auf Floppyformat abgespecktes FreeBSD laden.
-
Vielelichtauf irgendwas implementation-dependent nicht beachtet. So wie dass nicht immer an 0:7c00 gesprungen wird, sondern manchmal auch 07c0:0 (genau das hat mich mit Bochs mal einige Zeit gekostet *G*)
-
So wie dass nicht immer an 0:7c00 gesprungen wird, sondern manchmal auch 07c0:0 (genau das hat mich mit Bochs mal einige Zeit gekostet *G*)
ist doch das gleiche... 0h:7c00h = 07c00h = 07c0h:0 = 07c00h ich sehe da kein Problem
Außerdem hat Bochs ja noch diese schöne Menueconfig!
MFG
LordHoto
-
CrazyLinux schrieb:
ist doch das gleiche... 0h:7c00h = 07c00h = 07c0h:0 = 07c00h ich sehe da kein Problem
Außerdem hat Bochs ja noch diese schöne Menueconfig!
Jein, wenn man Adressen im Bootsektor benutzt (für Strings z.B.) ists garnicht mehr so das gleiche, wenn man real bei 0:0x7c00 ist, aber davon ausgeht, dass der Bootsektor bei Offset 0 anfängt
-
Was würde das für den Code bedeuten? Wie müsste ich die Zeile ändern?
mov ax, 0x07C0 ; init stack
-
TriPhoenix schrieb:
CrazyLinux schrieb:
ist doch das gleiche... 0h:7c00h = 07c00h = 07c0h:0 = 07c00h ich sehe da kein Problem
Außerdem hat Bochs ja noch diese schöne Menueconfig!
Jein, wenn man Adressen im Bootsektor benutzt (für Strings z.B.) ists garnicht mehr so das gleiche, wenn man real bei 0:0x7c00 ist, aber davon ausgeht, dass der Bootsektor bei Offset 0 anfängt
jmp 0x7c00:init <-- so kann man das auch lösen
MFG
LordHoto
-
Auf die einfachste Loesung scheinen die OS-Bastler irgendwie immer als letztes zu kommen genauso wie sich krampfhaft dieses wiederliche cli/sti beim initialisieren des Stacks haelt.
Setzt doch die Segmentregister nicht nach cs, sondern schiebt einen fixen Wert rein.
-
Komisch,
hab den quellcode neu assmebbliert.kommen immer fehler.
warum?
-
Hat sich erledigt!
-
hi!
hast du schonmal probiert mit C weiterzucoden?kannst dann TurboC verwenden, is kostenlos, ich selber arbeite grad an meinem 32bit os.
-
Also von weiterarbeiten kann keine rede sein, da ich den kernel komplett neuschreiben dürfte, um ihn 32bit arbeitend zu bekommen.
Aber nur mal so ne frage: Wieso TurboC? Ich habe Version 3.1 und der compiliert zu 16bit. Ich habe zwar schon versucht mit dem weiterzumachen, aber irgendwie definiert der das COFF-Format anders als der Flatassembler: Ich kann nicht linken.