Autor Thema: Real Mode Adressen -> PMode Adressen  (Gelesen 7577 mal)

chr15

  • Beiträge: 279
    • Profil anzeigen
    • http://www.clinux.de.vu
Gespeichert
« am: 02. March 2004, 16:15 »
Kann man die Real Mode Adressen in Protected-Flat-Mode Adressen umwandeln?
Z.B. denke ich da an die Interrupt Vektoren. Wie kann man die im Protected Mode benutzen? Und wie schreibt man die Adresse der Funktionen in die Vektoren? Normal schreibt man die ja immer [lo(ofs)],[hi(ofs)],[lo(seg)],[hi(seg)]. Schreibt man die flachen 32Bit Adressen einfach so darein? bytes : [0,1,2,3]
Oder gibt es für den Protected Mode eine ganz andere Lösung um Funktionen mit Interrupts aufzurufen(Hardwareinterrupts, wie Drüchen einer Taste an der Tastatur)???

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #1 am: 02. March 2004, 16:18 »
Im Protected Mode gibt es die sogenannte Interrupt Descriptor Table (IDT).
Dort werden wie in der GDT Descriptoren eingetragen.

Diese Descriptoren zeigen dann auf den jeweiligen Interrupt-Handler.
----------------------
Redakteur bei LowLevel

chr15

  • Beiträge: 279
    • Profil anzeigen
    • http://www.clinux.de.vu
Gespeichert
« Antwort #2 am: 02. March 2004, 16:28 »
Und wie verändert/verwaltet man die?
Für die Verwendung der tastatur wäre es mir wichtig.

mwoidt

  • Beiträge: 14
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 02. March 2004, 18:20 »
Schau dir mal http://www.fh-zwickau.de/doc/prmo/pmtutor/text/ an. Ist sehr umfangreich. Aber wenn du keine Lust hast dir alles durchzulesen:
Interrupts stehen in der IDT
Segmente in der           GDT
Manipulieren lässt sich das ganze auf verschiedene Weisen. Bevor du in den PM wechselst musst du die beiden Tabellen ja eh anlegen. Ich hab als einfache Lösung es so gemacht, dass der erste Eintrag der GDT auf das Segment der GDT zeigt damit ich sie später einfach manipulieren kann (ist bestimmt eine blöde Lösung aber funzt ;))
Die Adresse funzen im PM etwas anders. Da schreibst du keine Adressen in die Register sondern sogenannte Selektoren, die weiderrum auf Deskriptoren in der GDT bzw. LDT stehen. In diesen Tabellen steht dann die Startadresse des Segments. Das wird dann aber Hardwaremäßig alles gemacht. Und um eine RM Adresse in eine flache Adresse umzuwandeln (wie deu sie im Deskriptor benötigen wirst) musst du einfach folgendes machen:

RM-Adresse:                  Segment:Offset
Physikalische Adresse = Segment*16+Offset

chr15

  • Beiträge: 279
    • Profil anzeigen
    • http://www.clinux.de.vu
Gespeichert
« Antwort #4 am: 03. March 2004, 20:57 »
Danke!
Die Infos auf dieser Homepage sind genau das, wonach ich schon immer gesucht habe. (Leider nur ein bisschen schwer :-( aber das werde auch ich kapieren )

 

Einloggen