Bios Interrupts im PM nutzen ?!
-
Hallöle
Jo. Denk ma ihr habt den Titel gelesen... _ da gibts eigentlich ned viel mehr hinzuzufügen-> kann ich des irgendwie machen dass die Bios-INTs im Protected Mode noch verfügbar sind ? Oder wie macht ihr das eigentlich...also diejenigen die ein OS programmen...Hab erst damit angefangen und bei mir kommen grad so die ersten Anfängerfragen auf-eben auch diese.
Und...hm ich hoffe ihr erlaubts mir noch ne Frage zu stellen - möchte gerne meine eigenen Segmente im PM über die GDT anzulegen, meinen Kernel von Diskette in eines laden und dann über einen FAR-Jump an diese (Segment-)Adresse meines Kernels vom Bootloader aus (ebenfalls auf Diskette, im Bootsektor) springen. Ich hoffe das haut alles so hin wie ich mir das vorstelle nur weiß ich nicht wo ich meine Segmente in den Hauptspeicher schreiben soll...nicht dass ich da z.B. irgendwelche Bios-Daten überschreibe (evtl. die Interruptroutinen) oder die Auslagerungsdaten der Grafikkarte oder so...-> kann ich da unbesorgt Segmente nach Vergnügen im Ram verteilen ? Ich schätz mal nicht.
Naja is a bisserl länger geworden
Wäre halt Xtremst nett wenn mir da jemand Bescheid geben könnteGreetz
Xzibit
-
Xzibit schrieb:
...kann ich des irgendwie machen dass die Bios-INTs im Protected Mode noch verfügbar sind ? Oder wie macht ihr das eigentlich...also diejenigen die ein OS programmen...
Es gibt sowas wie Virtual-8086-Mode. Das ist ein Untermode des Protected-Mode. Damit lassen sich Real-Mode programme (also auch interrupts usw.) problemlos im Protected-Mode ausführen. Dafür musst du evtl. aber noch einen Virtual8086-Monitor schreiben... Wenn du's genauer wissen willst, dann lies dir die entsprechenden Abschnitte im Intel Manual, OS-FAQ (englisch) und frag dann halt konkret, wenn du was nicht verstehst. Aber das ist definitiv nichts für Anfänger. Du solltest dich zuerst mal mit dem Protected-Mode an sich beschäftigen.
Xzibit schrieb:
Und...hm ich hoffe ihr erlaubts mir noch ne Frage zu stellen
Zwei Fragen auf einmal? Wo gibts denn sowas? Ich dachte das Tageslimit läge bei einer Frage... Also vergebe ich gleich mal nen Platzverweis :p
Xzibit schrieb:
...nur weiß ich nicht wo ich meine Segmente in den Hauptspeicher schreiben soll...nicht dass ich da z.B. irgendwelche Bios-Daten überschreibe (evtl. die Interruptroutinen) oder die Auslagerungsdaten der Grafikkarte oder so...-> kann ich da unbesorgt Segmente nach Vergnügen im Ram verteilen ? Ich schätz mal nicht.
Zuerst mal ein guter Tipp: Schreib nicht deinen eigenen Bootloader, sondern nimm Grub für den Job. Du bist dann gleich im Protected-Mode und es wird kein so gefrickel im Bootloader...
Andernfalls würd ich schon im Bootloader in den Protected-Mode gehen, dann den Kernel in den RAM laden und dann über die 1Mb kopieren (danach ist garantiert kein BIOS). Ansonsten, sollte man in die folgenden Bereiche auf jeden Fall nicht schreiben:
0-0x100: IVT
00400-004FF: BIOS Datenbereich
0xA0000-0xFFFFF: VideoRAM und BIOSAlles andere is imho dir überlassen, aber 100%tig sicher bin ich mir da auch nicht mehr und lass mich gern eines besseren belehren.
-
Yeah vielen Dank für die schnelle und präzise Antwort bluecode!
Nur wenn du sagst "Du solltest dich zuerst mal mit dem Protected-Mode an sich beschäftigen."...ähm ja gerne nur ich weiß halt net wirklich mit was genau ich mich da beschäftigen sollte. Stehe noch relativ am Anfang und habe mir erst ein Tutorial dazu durchgelesen wie man in den PM schaltet. Nur wie weiter ? Adressbildung, IDT, Register...? Könntest du mir da evtl. was empfehlen - also was genau und wo ich weitermachen soll ? Ich würd halt gerne mal ein eigenes OS schreiben (also Tutto-kompletti ohne jegliche Hilfsmittel und ohne nicht von mir selbst geschriebenen Code-> mich interessiert des halt brennend wie so was funktioniert und will jede Einzelheit genau wissen und mal wirklich selber programmiert haben)-des war schon immer ein großer Traum von mirDanke nochmals
Xzibit
-
Da habe ich nur noch 2 Anmerkungen zu machen:
1. Fuer die Interrupts kann man auch schnell mal in den RealMode zurueckwechseln, da braucht's nicht unbedingt den V86.
In den FAQ gibt's uebrigens noch ein recht brauchbares Tutorial zum PM und was damit so zu tun hat...
2. Meine persoenliche Meinung, die hier auch ueberhaupt nicht zur Diskussion steht: Mit Grub kann man sich viel leichter verfrickeln als mit jedem noch so schlimm dahingehunzten selbstgeschriebenen Mini-Bootloader.
-
Nobuo T schrieb:
2. Meine persoenliche Meinung, die hier auch ueberhaupt nicht zur Diskussion steht
: Mit Grub kann man sich viel leichter verfrickeln als mit jedem noch so schlimm dahingehunzten selbstgeschriebenen Mini-Bootloader.
Ich spreche auch nur aus meiner Erfahrung heraus... und ich wüsste nicht wo man sich bei Grub verfrickeln kann, aber das wirst du mir sicher noch erklären :p
Xzibit schrieb:
"Du solltest dich zuerst mal mit dem Protected-Mode an sich beschäftigen."... ähm ja gerne...
Das war net bös gemeint, aber imho ist es kein Thema für einen Anfänger
Xzibit schrieb:
nur ich weiß halt net wirklich mit was genau ich mich da beschäftigen sollte. Stehe noch relativ am Anfang und habe mir erst ein Tutorial dazu durchgelesen wie man in den PM schaltet.
Das zu tun kann schonmal nicht verkehrt sein. Dann erfährst du gleich was über die GDT, Deskriptoren, etc. und die neue Art der Adressierung. Danach würd ich dir empfehlen erstmal ein paar Funktionen zu schreiben, mit Hilfe derer man Textausgabe im Protected-Mode machen kann. Danach kannst dir mal die IDT näher ansehen. Zuerstmal nur mit den Prozessorexceptions und mit Softwareinterrupts spielen (Also, zB Textausgabe bei Division durch 0 [Interrupt 0], etc.), danach dann evtl. die externen Interrupts aktivieren, die PIC (Programmable Interrupts Controller) reprogrammieren und dann ein bisschen mit dem Timer-IRQ (IRQ0) (evtl. auch mal den PIC = Programmable Intervall Timer reprogrammieren) und dem Keyboard-Controller (Auf IRQ des Keyboard-Controller reagieren und den Tastaturcode auslesen, dann evtl. den ASCII-code - falls vorhanden - der Taste ausgeben) spielen. Danach kannst dich mal an Paging wagen, damit wird noch eine Stufe bei der Adressumwandlung eingebaut... Danach vllt. Hardware/Software Multitasking... Ich hab jetzt bestimmt was wichtiges vergessen
, aber mir fällt grad sonst nixmehr ein (so für die ersten paar Jahre
)
Noch nen Tipp, falls auch du nicht Assembler mit der Muttermilch eingesogen hast: Versuch bei deinem OS möglichst schnell <insert name of your favorite language here> zu verwenden. Aber das ist nur meine persöhnliche Meinung, das kann ja jeder Handhaben wie er will, aber ich find das (os)dev in C++ schneller als in Assembler geht
Xzibit schrieb:
Ich würd halt gerne mal ein eigenes OS schreiben (also Tutto-kompletti ohne jegliche Hilfsmittel und ohne nicht von mir selbst geschriebenen Code-> mich interessiert des halt brennend wie so was funktioniert und will jede Einzelheit genau wissen und mal wirklich selber programmiert haben)-des war schon immer ein großer Traum von mir
Willkommen im Club
-
Kleiner Schreibfehler :
"PIC = Programmable Intervall Timer reprogrammieren"
muss
"PIT = Programmable Intervall Timer reprogrammieren"heissen.
@Xzibit
Auch wenn du dein eigenes OS schreiben möchtest, musst du nicht unbedingt "Das Rad neu erfinden".
-
Ja was will ma da noch groß sagen ? DANKE