Autor Thema: Pixel ansteuern im Long Mode  (Gelesen 5583 mal)

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« 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?
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

erik.vikinger

  • Beiträge: 1 277
    • Profil anzeigen
Gespeichert
« Antwort #1 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
Reality is that which, when you stop believing in it, doesn't go away.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 18. December 2012, 21:50 »
Der übliche Ansatz für die Emulation ist x86emu zu benutzen. Man kann sowas natürlich auch von Grund auf selber schreiben, aber das ist erstens viel Arbeit und zweitens arg fehleranfällig.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #3 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.
Dieser Text wird unter jedem Beitrag angezeigt.

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« Antwort #4 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?
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #5 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

Martin Erhardt

  • Beiträge: 165
    • Profil anzeigen
Gespeichert
« Antwort #6 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
« Letzte Änderung: 23. December 2012, 12:24 von Martin Erhardt »

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #7 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

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #8 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
« Letzte Änderung: 23. December 2012, 15:20 von Jidder »
Dieser Text wird unter jedem Beitrag angezeigt.

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« Antwort #9 am: 24. December 2012, 13:48 »
Also gibt es nur die Möglichkeit einen Grafikkartentreiber zu schreiben oder den Emulator zu benutzen?
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 24. December 2012, 14:05 »
Ja. Wenn dir einmaliges Setzen reicht, könntest du vielleicht auch einen "Postbootloader" aufbohren, sodass er V86 kann.
Dieser Text wird unter jedem Beitrag angezeigt.

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 24. December 2012, 16:10 »
Oder halt GRUB2 den Video-Modus setzen lassen.

 

Einloggen