Autor Thema: Arbeiten im 1024x768x16 Graphikmodus  (Gelesen 8500 mal)

svler

  • Beiträge: 18
    • Profil anzeigen
Gespeichert
« am: 15. March 2004, 18:42 »
Hi,

ich arbeite im 1024x768x16 Grafikmodus und im PMode. Wollte jetzt ganz normal mit dem int 10h und einer kleinen routine dazu einen String ausgeben. Das funktioniert auch prächtig, jedoch führt das 13,10 am Ende des Strings nicht dazu, dass ich eine Zeile weiter nach unten "rutsche". Meine Frage wäre wie ich am besten Text ausgeben kann? Und ich kann außerdem nur Pixel malen wenn ich die Adresse 0xA000 verwende. Überall wird jedoch gesagt im PMode wäre es 0xB8000. Könnte es vielleicht sein, dass ich nicht richtig im PMode bin ?

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #1 am: 15. March 2004, 19:20 »
Kann sein das ich mich da vertuhe aber ich glaube im pmode kannst du int 10h nich benutzen weil es ein BIOS Interrupt ist.
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

svler

  • Beiträge: 18
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 15. March 2004, 19:55 »
Ja,

das hatte ich auch gehört. Aber als ich es einfach mal ausprobiert hab' hats funktioniert. Deshalb ja auch die Frage ob der PMode vielleicht nicht richtig funktioniert?

Danke schon mal

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #3 am: 15. March 2004, 20:44 »
Also hast du das ganze mit assembler gemacht vermute ich dann dürfte das mit dem Pmode wirklich nich geklappt haben. Wodrans gelegen hat keine Ahnung. Vielleicht hast du nach setzen des PE Bits kein Far Jump in den 32 Bit Code gemacht oder so. Vielleicht hast du keine gültige GDT und IDT geladen aber das is gefährlisches Halbwissen hier hab mich mit dem PM Mode bisher nur wenig beschäftigt
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

kleiner

  • Beiträge: 131
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 15. March 2004, 22:48 »
Also das mit der Adresse 0xA8000 beschreibt TeeJay in einem Tut im Resource-Center. Das ist eigentlich auch nicht schwer zu verstehen. Du musst ja bedenken, dass Dein Kernel an der Stelle 0x10000 zu zählen beginnt. Also sieht er die Adresse 0x10000 für sich als die Adresse 0x0 an. Und wenn Du jetzt 0xB8000-0x10000 rechnest kommst Du auf die Adresse 0xA8000.
Also ich glaub lobmann hat recht mit seiner Vermutung. Soweit ich das verstanden habe, muss im PM erst einmal eine GDT und IDT definiert werden.

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #5 am: 16. March 2004, 01:12 »
Naja theoretisch könnte es noch funktionieren. Wenn man die IDT nicht läd, dann ist das IDT-Register auf die Lineare Adresse 0 und die Länge auf 0x3FF gesetzt, was in allem der Interrupt-Vektor-Tabelle des Real-Mode entspricht.

Allerdings sollte der INT-Befehl des Prozessors im PMode etwas anders ausgewertet werden, Nämlich so das er versucht einen GATE-Descriptor in der IDT zu laden. Und dieser ist ja nicht vorhanden, wenn du keine IDT eingerichtet hast. Folglich müsste es einen General Protection Fault geben.

Also entweder ist das ein Bug von Bochs(sofern du das benutzt hast) oder du bist scheinbar wirklich nicht korrekt im PMode.
----------------------
Redakteur bei LowLevel

mastermesh

  • Beiträge: 341
    • Profil anzeigen
    • http://www.kostenloser-laptop.de/
Gespeichert
« Antwort #6 am: 16. March 2004, 15:12 »
Also soweit ich weiß, ist der Framebuffer nur beim Textmodus an Adresse 0xB800. In VESA-Modi (?) könnte er durchaus auch an 0xA000 sein, aber da gebe ich euch jetzt keine Garantie drauf...

svler

  • Beiträge: 18
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 16. March 2004, 16:36 »
Ok,
vielen Dank für eure Hilfe. Werd mal schauen ob ich das zum laufen bringe

 

Einloggen