| Zeile 1: | Zeile 1: | ||
| − | [[ | + | [[QEMU]] emuliert primär eine Cirrus Logic GD5446. Mit dieser Grafikkarte ist es sehr einfach, mit einem eigenen [[OS]] in den Genuss hardwarebeschleunigter¹ 2D-Grafik zu kommen. |
¹So weit ich es gesehen habe, werden die Grundoperationen hardwarebeschleunigt dargestellt. Alle Angaben ohne Gewähr. | ¹So weit ich es gesehen habe, werden die Grundoperationen hardwarebeschleunigt dargestellt. Alle Angaben ohne Gewähr. | ||
| Zeile 5: | Zeile 5: | ||
== Ressourcen == | == Ressourcen == | ||
| − | Die Grafikkarte ist eine [[PCI]]-Karte, Vendor-ID 0x1013, Chip-ID 0x00B8. Sie wird größtenteils über MMIO angesteuert, dabei werden zwei Speicherbereiche als MMIO-Interface zur Karte benutzt, die über die PCI-Schnittstelle abgefragt werden können: Der erste fängt im Falle [[ | + | Die Grafikkarte ist eine [[PCI]]-Karte, Vendor-ID 0x1013, Chip-ID 0x00B8. Sie wird größtenteils über MMIO angesteuert, dabei werden zwei Speicherbereiche als MMIO-Interface zur Karte benutzt, die über die PCI-Schnittstelle abgefragt werden können: Der erste fängt im Falle [[QEMU]]s an der Adresse 0xF0000000 an und ist 32 Megabytes groß und dient als Framebufferschnittstelle, der zweite (kleinere) Bereich (für die Steuerung der Karte) fängt bei 0xF2000000 an und ist 4 KBytes lang. |
In diesen zweiten Bereich sind sämtliche VGA-Ports gemappt, wobei man von dem Port 0x3C0 abziehen muss, um den Offset in den MMIO-Bereich zu erhalten. So befindet sich das Register VGA_MISC_OUT_W (0x3C2) an der Speicheradresse 0xF2000002. | In diesen zweiten Bereich sind sämtliche VGA-Ports gemappt, wobei man von dem Port 0x3C0 abziehen muss, um den Offset in den MMIO-Bereich zu erhalten. So befindet sich das Register VGA_MISC_OUT_W (0x3C2) an der Speicheradresse 0xF2000002. | ||
| Zeile 31: | Zeile 31: | ||
</c> | </c> | ||
| − | Ich habe diese Methode jedoch nur in [[ | + | Ich habe diese Methode jedoch nur in [[QEMU]] getestet. Ich bin mir ziemlich sicher, dass das in der echten Welt da draußen nicht so einfach tut, aber wer hat schon eine Cirrus Logic. :) |
== Offscreen Memory == | == Offscreen Memory == | ||
| − | Die von | + | Die von QEMU initialisierte Cirrus hat 2 Megabyte Videoram, der nicht dem Framebuffer zugeordnet ist. Es liegt in linear hinter dem Framebuffer und kann genau wie dieser für Beschleunigung benutzt werden. |
TODO: Das hier überprüfen. Eventuell sinds auch 4 Megabyte, dann allerdings inklusive Framebuffer. | TODO: Das hier überprüfen. Eventuell sinds auch 4 Megabyte, dann allerdings inklusive Framebuffer. | ||
| Zeile 180: | Zeile 180: | ||
== Links == | == Links == | ||
| − | * http://www.koders.com/c/fidC2D0E7B95D33763B17521DF3EA7B68C81D500CAD.aspx Code aus | + | * http://www.koders.com/c/fidC2D0E7B95D33763B17521DF3EA7B68C81D500CAD.aspx Code aus QEMU |
* http://cgit.freedesktop.org/xorg/driver/xf86-video-cirrus/ Xorg-Treiber | * http://cgit.freedesktop.org/xorg/driver/xf86-video-cirrus/ Xorg-Treiber | ||
* [http://www.tjd.phlegethon.org/gd5446trm.pdf.gz Datenblatt von Cirrus Logic] | * [http://www.tjd.phlegethon.org/gd5446trm.pdf.gz Datenblatt von Cirrus Logic] | ||
[[Kategorie:Grafikkarte]] | [[Kategorie:Grafikkarte]] | ||