Lowlevel
Lowlevel => OS-Design => Thema gestartet von: BugBott am 19. September 2004, 22:17
-
Hallo Leute,
ich bin vor ein paar Monaten auf das LowLevel-Magazin gestoßen und dachte mir cool.... gut zu wissen! :-)
Ich hab mir die Tuts durchgelesen, ausprobiert u.s.w.
Der Beispiel-Kernel schreibt nun "Hallo bei BugOS 0.1" auf den Bildschirm und startet bei Tastendruck den Rechner neu! (Reife Leistung, wa?) :-)
Nun,
wie gehts nun eigentlich weiter?
Also, meine Diskette vermute ich mal ist nicht mit irgendeinem FS formatiert, oder?
(per rawrite kopiert)
Der Kernel bräuchte doch nun eine Dateisystem-Funktionalität, oder?
Oder braucht die schon der Bootloader weil der ja den Kernel /floppy/kernel oder a:\kernel (oder halt ähnliches) laden soll... ?
Jetzt wäre eine Shell Sinnvoll....
Aber vorher ein Tastatur -Treiber...?
(Brauch ich den zwingend?)
Also kurz:
Ich weiß gerade nicht wie es weiter gehen soll....
Hätte jemand ein paar Infos für mich ?
THX im vorraus....
-
kommt drauf an was du machen willst wenn du nen RMode OS machen willst kannst du das auf die Bios Int`s aufbauen. Bei nem PMODE OS musst du die ganzen Treiber bauen. Am Anfang würd ich vorschlagen das du dich erstma ganz "simpel" um Ein und Ausgaben kümmerst, dann kommen schon die Ideen.
-
Servus lobmann,
Ganz "simpel" anfangen ist gut,
Du hättest nicht zufällig gerade Lust die unterschiede zwischen RealMode und ProtectedMode anzureißen?
Oder nur mal schnell verklickern welche INT's für Ein- und Ausgaben zuständig sind?
Ich hab Zuhause ne Liste von INT's was die machen u.s.w.
Aber das ist Tonnenweise Material,... nur damit nen Ansatz hab wo in der Doku ich suchen muss.
Wär mir ne grosse Hilfe! Danke
-
Naja der gravierenste Unterschied is wohl die Adressierung. Im RM wird über Segment(16-BIT):offset(16-BIT) adressiert daraus ergibt sich eine 20-BIT Adresse, am besten nochma in einem Assembler Buch nachlesen. Im Rmode kann deshalb nur 1 MB adressiert werden.
Naja der PMode wurde halt erstma so erweitert das man jetz 4 GB Speicher adressieren kann, sowie einiges an Schutzmechanismen(Ring 0-3), vorraussetzung für Multitasking(TSS-Segment), und so weiter, lies am besten mal TeeJay`s Tut.
Beispiel für ein Rmode OS ist z.B. DOS, PMode : Linux, Windows.
Was nochbwichtig ist zu erwähnen ist das die INT`s nur im RMode funktionieren, im PMode musst du das alles selber machen.
-
also ich baue mein OS von grund (Real Mode) auf auf, d.h. es dauert zwar ein bisschen, bis man etwas großes hat, dafür hat man aber oft erfolge, und es wird nicht so schnell langweilig. andere bauen ihr OS gleich im Protection Mode auf, weil sie dann nicht so viel zeit beim Real Mode "verschwenden". dafür ist es aber auch schwerer und es dauert, bis man etwas vorzuzeigen hat. jeder hat seine methode!
-
Jo, Servus,
ich arbeite nun erstmal im RM, und versuche gerade verzweifelt einen INT-Handler (War das nu eigentlich der richtige Begriff?) selbst zu bauen.
Stoße aber auf Probleme:
Der Code:
_int0x21:
_int0x21_ser0x01: ; funktion 0x01
cmp al, 0x01 ; funktion 0x01 angefragt?
jne _int0x21_end ; nächste Routine checken
_int0x21_ser0x01_start:
lodsb ; nächstes Byte laden
or al, al ; 0-Byte?
jz _int0x21_ser0x01_end
mov ah, 0x0E ; BIOS Teletype
mov bh, 0x00 ; Page 0
mov bl, 0x07 ; Text-Attribute
int 0x10 ; BIOS-Call
jmp _int0x21_ser0x01_start
_int0x21_ser0x01_end:
jmp _int0x21_end
_int0x21_end:
iret
push dx
push es
xor ax, ax
mov es, ax
cli
mov word [es:0x21*4], _int0x21 ; Pointer auf den Handler
mov [es:0x21*4+2], cs ; Pointer auf CS
sti
pop es
pop dx
füge ich wo ein?
Ich hab versucht den Code vor "start:" zu setzten, auch nach "start:",aber
wenn ich den int ausführe/aufrufe geschieht nichts....
Anstelle meiner Ausgabe (die mache ich so):
msg db "irgendwas"
mov si, msg
mov al,0x01
int 0x21h
hab ich nur einen leeren Bildschirm.
Wie Ihr seht ist fast nur Copy & Paste, deswegen wundert mich es das es nit funzt.
Und an dieser Stelle frag ich mich nun, "Wie könnte ich sowas Debuggen?"
Geht das überhaupt?
THX,
BB
-
Du könntest mit Msgs die du "manuell" also ohne Ints ausgibst, testen bis wohin du kommst ;)
-
ich glaube, es liegt daran, dass du
msg db "irgendwas"
vor das
mov si, msg
mov al,0x01
int 0x21h
gemacht hast. wenn nähmlich das program von oben nach unten ausgeführt wird, dann findet der Prozessor "irgendwas", weil ja das "msg db" nicht mit eingebaut wird, und probiert das auszuführen, und das geht net, also stürzt er ab.
so
jmp marke
msg db "irgendwas"
marke:
mov si, msg
mov al,0x01
int 0x21h
müsste es gehen. musste mal ausprobieren.