Lowlevel
Lowlevel => Softwareentwicklung => Thema gestartet von: OsDevNewbie am 18. December 2012, 20:27
-
Hi,
ich habe zwar schon den Artikel zu VGA gelesen, aber ich wollte eine grössere Auflösung als 640x480 haben und bin über den VESA gestolpert, aber dieser benötigt ja trotzdem das BIOS und auf das kann ich ja im Long Mode nicht mehr zugreifen. Was gibt es denn als Alternative oder wie benutzt man in im Long Mode. Welche Auflösung und Farbtiefe ist denn in diesem Modus möglich?
-
Hallo,
... und bin über den VESA gestolpert, aber dieser benötigt ja trotzdem das BIOS und auf das kann ich ja im Long Mode nicht mehr zugreifen.
Exakt, es gibt aber auch eine VBE-Variante die im 32Bit-Protected-Mode läuft und das sollte doch im Long-Mode noch möglich sein.
Was gibt es denn als Alternative oder wie benutzt man in im Long Mode.
Eine Emulation des Real-Mode. Wimre gibt es gerade für den Zweck mal einen BIOS-Int (in Deinem Fall eben einen VBE-Int) aufzurufen extra Emulatoren die alle I/O-Zugriffe usw. an die echte Hardware weitergeben können. Die bessere Alternative wäre es natürlich einen richtigen Treiber zu schrieben aber das vereiteln die GPU-Hersteller leider sehr effektiv.
Welche Auflösung und Farbtiefe ist denn in diesem Modus möglich?
Alle die Deine Hardware kann, in meinem Laptop ist da z.B. auch die native Auflösung des Displays mit dabei. Du musst nur Code schreiben der in der Lage ist die komplette Liste der unterstützten Modi auszulesen und dann einen passenden Modus auszuwählen. Aber Vorsicht, in den Mode-Infos stehen auch Dinge drin wie der Video-RAM angesteuert wird und deswegen tauchen alle Modi mehrfach auf mit teilweise recht subtilen Unterschieden, also Dein Code muss bei der Auswahl sehr genau vorgehen.
Grüße
Erik
-
Der übliche Ansatz für die Emulation ist x86emu (http://gitorious.org/x86emu/libx86emu) zu benutzen. Man kann sowas natürlich auch von Grund auf selber schreiben, aber das ist erstens viel Arbeit und zweitens arg fehleranfällig.
-
Das Protected Mode-Interface taugt nichts. Und im Long Mode funktioniert es nicht. Entweder wechselst du in den Grafikmodus im Real Mode, im Protected Mode mittels des Virtual 8086 Mode oder du nimmst den bereits angesprochenen Emulator.
-
Also ich benutze ja GRUB als Bootloader, der ein "Postbootloader" von mir lädt. Dieser wechselt nur in den Long Mode und springt danach zum Kernel. Ich will danach im Kernel den Modus verändern. Wenn ich diesen Emulator verwenden würde, würde mein Betriebssystem dann nicht unter realer Hardware lauffähig sein?
-
Hallo,
VESA ist im Video-BIOS implementiert, da steht also RM-Code drin, den du ausführen können musst, was im RM einfach und im PM durch V86 möglich ist. Im LM kannst du den Code nicht mehr direkt ausführen, deswegen brauchst du den Emulator. Der emuliert nur den RM, wenn die CPU das nicht kann/will.
Dabei ist es egal, ob du eine reale oder eine emulierte CPU benutzt.
Gruß,
Svenska
-
Moin,
Es gibt da doch sowas, dass man in RM oder V86 in den Grafikmodus schaltet und später einfach weiter in den Buffer schreibt. Das geht dann ohne Performance Verlust. Hier wären mal bisschen Infos gut. Linux and FreeBSD machen das auch
-
Hallo,
im Long Mode kannst du keinen Real-Mode-Code direkt ausführen. Das Video-BIOS der Grafikkarte ist Real-Mode-Code. Also kannst du im Long Mode das Video-BIOS nicht direkt ausführen, sondern musst dafür einen Emulator (x86emu) bemühen. Was ist daran so schwer zu verstehen?
Und nein, Linux und FreeBSD benutzen im 64-Bit-Modus weder den RM noch den V86, weil es die da einfach nicht gibt.
Gruß,
Svenska
-
Er hat sich auf den Linear Frame Buffer bezogen. Nachdem dieser eingerichtet ist, kann man auch im PM oder LM darauf zugreifen. Mit einem Aufruf der Get Mode Information-Funktion (4F01h) kann man rauskriegen, ob der LFB für diesen Modus unterstützt wird und an welcher Adresse er liegt. Beim Setzen des Modus (4F02h) kann man dann in BX Bit 14 setzen, um den Modus mit LFB einzustellen.
Das ist auch in unserem Artikel beschrieben: http://www.lowlevel.eu/wiki/VESA_BIOS_Extensions
-
Also gibt es nur die Möglichkeit einen Grafikkartentreiber zu schreiben oder den Emulator zu benutzen?
-
Ja. Wenn dir einmaliges Setzen reicht, könntest du vielleicht auch einen "Postbootloader" aufbohren, sodass er V86 kann.
-
Oder halt GRUB2 den Video-Modus setzen lassen.