Lowlevel

Lowlevel => Softwareentwicklung => Thema gestartet von: OsDevNewbie am 18. December 2012, 20:27

Titel: Pixel ansteuern im Long Mode
Beitrag 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?
Titel: Re: Pixel ansteuern im Long Mode
Beitrag von: erik.vikinger am 18. December 2012, 20:45
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
Titel: Re: Pixel ansteuern im Long Mode
Beitrag von: kevin am 18. December 2012, 21:50
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.
Titel: Re: Pixel ansteuern im Long Mode
Beitrag von: Jidder am 18. December 2012, 21:59
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.
Titel: Re: Pixel ansteuern im Long Mode
Beitrag von: OsDevNewbie am 22. December 2012, 22:25
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?
Titel: Re: Pixel ansteuern im Long Mode
Beitrag von: Svenska am 22. December 2012, 23:19
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
Titel: Re: Pixel ansteuern im Long Mode
Beitrag von: Martin Erhardt am 23. December 2012, 00:32
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
Titel: Re: Pixel ansteuern im Long Mode
Beitrag von: Svenska am 23. December 2012, 13:22
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
Titel: Re: Pixel ansteuern im Long Mode
Beitrag von: Jidder am 23. December 2012, 14:01
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
Titel: Re: Pixel ansteuern im Long Mode
Beitrag von: OsDevNewbie am 24. December 2012, 13:48
Also gibt es nur die Möglichkeit einen Grafikkartentreiber zu schreiben oder den Emulator zu benutzen?
Titel: Re: Pixel ansteuern im Long Mode
Beitrag von: Jidder am 24. December 2012, 14:05
Ja. Wenn dir einmaliges Setzen reicht, könntest du vielleicht auch einen "Postbootloader" aufbohren, sodass er V86 kann.
Titel: Re: Pixel ansteuern im Long Mode
Beitrag von: Svenska am 24. December 2012, 16:10
Oder halt GRUB2 den Video-Modus setzen lassen.