Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: bitmaster am 30. July 2006, 01:24
-
Hi,
ich überlege gerade wie man im laufenden OS den Grafikmodus wechseln kann. Also z.B. von 800*600 auf 1024*768. Weil ich bin ja im Longmode und da kann ich den "int 10h" BIOS-Interrupt ja nicht nutzen. Kann man da einfach über Ports den Modus wechseln oder ist das incompatible und man sollte besser in den Realmode zurück? Also so:
RM -> Modus setzen -> PM (muss ja bevor LM) -> LM
User will den Grafikmodus im laufenden OS ändern:
LM -> PM (muss ja bevor RM) -> RM
Modus setzten wie es der User haben will (durch int 10h) und zurück zum LM
Würde das zu lange dauern? Wie machst du das eigentlich blueXseven?
danke!!!
bitmaster
-
in der VESA Dokumentation steht was von einer bestimmten Adresse,
an der Adresse befindet sich eine funktion die wie der BIOS-Interrupt aufgebaut ist,
mit dem kann man dann auch im Pmode den Modus wechseln
so hab ich das jedenfalls verstanden,
guck am besten mal in die VESA-dokumentation, gibts irgendwo auf vesa.org
-
Das ist aber VESA 3.0. Und das unterstützen glaub ich (noch?) nicht viele Computer....
-
ich glaub das gabs schon vor VESA 3.0,
und warum sollen wenige PCs VESA 3.0 unterstützen,
das können doch alle neuen, oder?
muss man wohl einfach mal in die Dokumentation schauen,
wie das mit der funktion aussieht
-
ich glaub das gabs schon vor VESA 3.0,
Ja, das ist aber 16 Bit Protected Mode. Da kann man auch gleich in den Real Mode springen.
und warum sollen wenige PCs VESA 3.0 unterstützen,
das können doch alle neuen, oder?
Anscheinend nicht: http://zweiundvierzig.tibit.de/xerxys/wiki/index.php?title=VESA
-
kann mir nicht vorstellen dass die Liste komplett sein soll,
das ist ja grade mal eine handvoll Karten, da hätte man VESA 3.0 auch bleiben lassen können
dann frag ich mich aber wie das sonst gehen soll,
wahrscheinlich gibts irgendwelche Ports über die man das umstellen kann,
diese Funktion und das BIOS-Interrupt müssen das ja auch irgendwie machen
-
nimm einfach die vesa3-methoden, ich würd sagen fast alles kann Vesa 3... zumindenst Geforce ab FX-Reihe sollte durchgängig gehn, und Radeon ab 9000 ja auch laut der Liste...
-
laut der Liste gibts ab 9000 VESA 2.0
VESA 3.0 erst ab x800
mal abgesehen davon sthet da von ab nichts,
vielleicht können das die Nachfolger gar nicht
also wenn die Liste stimmt kann man das mit der funktion wohl vergessen
-
klar, die liste ist nicht komplett. das sollte aber aus dem kontext auch ersichtlich werden.
hier im forum gabs übrigens vor längerem mal ne aufforderung seine karte da einzutragen. es ist sicherlich noch nicht zu spät, das nachzuholen ;)
-
hier mal die ports die helfen könnten ... aber kA wie man die anwendet ^^
(http://www.imagespell.com/pimg/689b831ef64eaaf482565c1b1eebd80d.jpg)
-
nach dem was da dran steht haben die abe rnicht viel mit VESA am Hut...
-
Also mit den VGA-Registern wird man nicht allzuweit kommen, es sei denn 320x240x256 oder 640x480x16 ist einem genug Auflösung. Für die höheren Auflösung brauchts entweder den VESA-BIOS oder einen Grafiktreiber. Kannst ja mal die XFree86 Sourcen oder den Linux-Kern schauen, da sind Routinen für den Grafikmodus drin. Die haben nur 2 Nachteile (z.B. bei NVidia): 1. sind die Teilweise gecopyrighted, 2. teilweise total unverständlich (it's just magic).
-
Also ich bin im Longmode und verwende VESA 2.0. Das kann selbst meine Geforce 2 und macht das sogar sehr gut. Aber für mich wäre es auch kein Problem auf VESA 3.0 umzusteigen da mein OS sowieso nur auf den neusten Rechnern laufen wird wegen 64 Bit. Aber sind die Ports einheitlich bei allen gleich? Also kann ich mich darauf verlassen das die auch überall so angesprochen werden um den Modus zu wechseln. Sonst wäre es doch vielleicht besser in den RM zurück. Noch mal an blueXseven: Wie hast du das denn gemacht?
bitmaster
-
Em, nein. Die können sie von Modellreihe zu Modellreihe ändern, und das tun sie auch öfters (Von Hersteller zu Hersteller sind sie sowieso komplett anders). Aber nicht nur die Ports (MemoryMapped IO) sondern auch der Inhalt ändert sich ab und zu. Also wenn du Wert A in Register B schreibst, kann das auf einer GF2 andere Auswirkungen als auf einer GFFX haben.
-
Em, nein. Die können sie von Modellreihe zu Modellreihe ändern, und das tun sie auch öfters (Von Hersteller zu Hersteller sind sie sowieso komplett anders). Aber nicht nur die Ports (MemoryMapped IO) sondern auch der Inhalt ändert sich ab und zu. Also wenn du Wert A in Register B schreibst, kann das auf einer GF2 andere Auswirkungen als auf einer GFFX haben.
Und genau deswegen bevorzuge ich auch den "int 10h". Also zurück in den RM. Ich frage mal blueXseven per mail wie der das gemacht hat.
bitmaster
-
eine andere Möglichkeit als per vm86 wäre der Protected Mode Entry Point
die Idee war schon, hat aber eben den Haken das sie erst bei VESA 3.0 funktioniert,
und das einfach noch zu wenig Karten unterstützen (siehe oben)
ich denk mal blueXseven macht das irgendwie per Ports,
am Ende muss das ja auch der BIOS-Interrupt irgendwie machen,
und wie soll das schon ohne Ports gehen?
-
Die Ports werden aber von den herstellern streng geheim gehalten
-
Er kann sich ja den BIOS-Code anguggen...und für PM umschreiben!
Oder im Linux stöbern....
-
wenn dann muss er sich den des vga-bios anschauen, denk ich mal. Und dann für jede Grafikkarte einen passenden treiber schreiben.
-
Im BIOS steht vermutlich nicht mehr als in den freien Treibern von x.org und xfree86.
-
In den freien Treibern von X11 wird sehr viel mehr stehen als irgend jemand aus einem Disassembliertem BiosBrocken herauslesen kann!
Mal ne ernste Frage: lohnt sich der Aufwand?
Wenn man VESA benutzen will muss man in den RM zurück oder einen v86/v386 Modus unterstüzen. Zudem wird von vielen NEUEN Karten nur VESA 2.0 unterstütz(besonders bei ATI). Kurzum VESA 2.0 = 60Hz. Das ist in hohen Auflösungen nur auf einem Flachbildschirm erträglich. Ich hatte dass z.B. mit einer Radeon 9200 und Vesa Treibern unter Linux, habe dann zum Glück herausgefunden, dass es da ja noch richtige Treiber von Linux gibt[nicht fglrx!])
Linux ist also eine Gute Anlaufstelle für Informationen zur Grakenprogrammierung wenn man kein 3D benötigt. Allerdings wird man sich für die einzelnen Karten bzw. Chips jeweils einen Treiber Programmieren müssen!
Naja, sonst bleibt nurnoch der ultimative Standard...
VGA
Hey, damit kann man noch immer verdammt viel machen!!! :]
-
OK, vielen dank blueXseven. Genau so habe ichs mir auch gedacht. Ich werde das höchstwarscheinlich auch so machen. Doch z.Z. bastle ich gerade an PNG-Unterstützung. Viel spaß noch beim OS proggen.
bitmaster
PS: Ach ja, dein OS gefällt mir von allen (Hobby OS) die ich bis jetzt gesehen habe am besten. Mach weiter so. Aber bald kommt Konkurenz. ^^ Mein 64 Bit OS-64, also streng dich an. ;-)
bitmaster