Autor Thema: Von Text zur Grafik, aber wann??  (Gelesen 10098 mal)

RedEagle

  • Beiträge: 244
    • Profil anzeigen
    • RedEagle-OperatingSystem - Projekt
Gespeichert
« am: 19. February 2006, 15:15 »
Hi
Wann muss/kann ich anfangen, einen (oder mehrere) Pixel auszugeben??

Ich möchte ähnlich wie unter win98, während des Bootens, den 80×25-Textmodus beibehalten, um da einige textausgaben zu machen. Wenn ich dann "fertig" mit booten bin (Treiber und so geladen habe) möchte ich in einen 800×600 oder 1024×768 Grafikmodus wechseln (VESA2). Das problem: Ich habe hier im Forum öfters gelsesen, das man das "nur" im RealMode machen kann, und NACH dem Setzten des VModuses erst in den PM wechseln soll.

wie ist das bei win98 gelöst?? wie kann ich im PM nach dem laden des Tastaturtreibers, usw. in den Grafikmodus wechseln??

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #1 am: 19. February 2006, 15:49 »
Zitat von: RedEagle
Das problem: Ich habe hier im Forum öfters gelsesen, das man das "nur" im RealMode machen kann, und NACH dem Setzten des VModuses erst in den PM wechseln soll.

Das is wohl eher b00lshit ;)
Man kann im Virtual-8086-Mode die Realmode interrupts ausführen, also auch den int 0x10... Dafür brauchst halt nene Virtual Mode Monitor, entweder so wie hier beschrieben oder du benutzt die VME (Virtual-8086-Mode Extensions) [so habs ich auch gemacht]...

Mit VESA3 gibts auch ein (beschissenes, laut mega-tokyo auch nicht einheitlich unterstütztes) Protected-Mode Interace, is aber davon abzuraten laut pype-clicker...
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

T0ast3r

  • Gast
Gespeichert
« Antwort #2 am: 19. February 2006, 16:29 »
@bluecode:
du emulierst also das bios im PM?
wie genau realisierst du das?
wie führst du die funktionen über deinen emulator auf, bzw. wie wird alles mitgeteilt und gemanaged?
ich hab mir so etwas ähnliches mal überlegt....

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 19. February 2006, 20:38 »
Zitat von: T0ast3r
@bluecode:
du emulierst also das bios im PM?
wie genau realisierst du das?
wie führst du die funktionen über deinen emulator auf, bzw. wie wird alles mitgeteilt und gemanaged?
ich hab mir so etwas ähnliches mal überlegt....


Das Bios wird nicht emuliert.

Das Problem ist, wenn du im PM bist, kannst du keine BIOS-Funktionen über die Interrups aufrufen weil die alle aus RealMode-Code bestehen. Es gibt aber die Möglichkeit im PM einen Virtuellen RM zu erzeugen und in diesem Modus die Interrups auzurufen.
db 0x55AA

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #4 am: 20. February 2006, 15:51 »
Oder du wechselst zurück in den RM und setzt den VESA-Mode (was bei einigen hier warscheinlich gehen wird, weil da die Treiber in Ring 0 laufen) oder du setzt den Modus (wie ich) schon im Bootloader automatisch...
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

T0ast3r

  • Gast
Gespeichert
« Antwort #5 am: 20. February 2006, 19:24 »
@jn: dann kann man aber keine einfachen textmeldungen ausgebem, wenn du gleich den grafik mode enablest!

und in den RM zurückspüringen klappt, bei iniemendane, haben schon viele probiert, (ich auch);
das problem besteht im zurückgesetzten RM bei der Adressengenerierung bei sprüngen, dabei wird das offset trotzdem 32 bit genommen, :roll: , habs überprüft

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 20. February 2006, 20:05 »
Zitat von: T0ast3r
@jn: dann kann man aber keine einfachen textmeldungen ausgebem, wenn du gleich den grafik mode enablest!


genau, dann entgeht uns sowas wie
Zitat
========================================
Welcome to $OSNAME version 0.0.0.1 alpha preview
========================================
Loading kernel to 0000:1000
springe nach 0000:1000
loading shell to 0000:2000
entering protected mode
entering paging
entering piratenschiff, etc...
jumping to 00000:2000
========================================
starting $OSNAME shell version 0.0.0.1 alpha preview
========================================
hello this is $OSNAME shell version 0.0.0.1
supported kommandos
 - help
 - version
>_


ich will damit sagen: wer braucht bitteschoen textausgabe? entweder man machts zum testen (dann bleibt der grafikmodus aus) oder ueber die serielle schnittstelle oder ueber das ausgabefenster von bochs oder man laesst es bleiben. interessiert eh kein schwein bis auf den entwickler was da steht. und der sollte auch alternativen zur verfuegung haben, wenn er ambitionen hat in den grafikmodus zu wechseln.
Dieser Text wird unter jedem Beitrag angezeigt.

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #7 am: 21. February 2006, 14:41 »
Zitat von: PorkChicken
ich will damit sagen: wer braucht bitteschoen textausgabe? entweder man machts zum testen (dann bleibt der grafikmodus aus) oder ueber die serielle schnittstelle oder ueber das ausgabefenster von bochs oder man laesst es bleiben. interessiert eh kein schwein bis auf den entwickler was da steht. und der sollte auch alternativen zur verfuegung haben, wenn er ambitionen hat in den grafikmodus zu wechseln.

wie wahr :roll:

Aber trotz allem will man dem Benutzer es vllt ermöglichen den Grafikmodus zur Laufzeit zu verändern... also ist das setzen des Grafikmoduses im Bootloader vllt auch net so ne tolle Lösung.

Ich habs in meiner letzten version so gemacht, dass ich einen extra Task der im Virtual-8086-Mode mit VME (=Virtual Mode Extensions) läuft, hatte. Dieser Task kann dann ganz normal die BIOS Interrupts (dafür braucht man dann aber ne Interrupt-Redirection-Map) aufrufen und somit die Modues enumerieren und einen auswählen. Der Task konnte auch ganz normal über int0xFF auf meine OS syscalls zugreifen und somit mit dem Rest des Systems kommunizieren.
Ich werd, wenn ich wieder mal Lust zum osdeven bekomm, des aber anders realisieren. Mein kernel wird dann eine Funktion a la call_realmode_int(inumber) bereitstellen. Der Grafiktreiber läuft dann im sicheren Protected-Mode und realisiert die Aufrufe des BIOS dann über diese Funktione. Die Funktion selber wechselt halt über nen iret in den virtual8086mode und führt dann den ensprecheneden Interrupt aus und gibt die Resultate zurück.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 21. February 2006, 19:41 »
Kenn mich jetzt nich genau mit VESA aus, aber ist es nicht möglich auch ohne Interrupts in andere Modi zu schalten? Soviel ich weiß sind nur bestimmte Informationen von VESA darauf beschränk, dass man sie nur über Bios-Ints abrufen kann. (z.B. die möglichen Auflösungen X*Y*Farbtiefe) Diese kann man jedoch einmalig während des Bootvorgangs ermitteln und in einer Tabelle speichern.

Der Mode13h ist auch relativ einfach mit einigen Porteingaben eingeschaltet.
db 0x55AA

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #9 am: 21. February 2006, 21:38 »
Zitat von: bluecode

Aber trotz allem will man dem Benutzer es vllt ermöglichen den Grafikmodus zur Laufzeit zu verändern... also ist das setzen des Grafikmoduses im Bootloader vllt auch net so ne tolle Lösung.


Lässt du deinen PC mit 640 * 480 Monochrom-Auflösung laufen, wenn er 1024 * 768 bei 24 Bit kann?

Zitat von: T0ast3r
@jn: dann kann man aber keine einfachen textmeldungen ausgebem, wenn du gleich den grafik mode enablest!


Ich bin durchaus auch mit Grafik-Modus in der Lage, Textmeldungen auszugeben.
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 21. February 2006, 21:45 »
Zitat von: Osbios
Der Mode13h ist auch relativ einfach mit einigen Porteingaben eingeschaltet.


Die VESA BIOS Extensions wurden erfunden, weil es mit anderen Modi nicht mehr so einfach ist. Und der Name sagt eigentlich schon, dass sie nicht ohne Interrupts gehen koennen. Der Trick von VBE ist, dass eine einheitliche Schnittstelle (=BIOS) fuer Grafikkarten bereitgestellt wird, und dieses rumpopeln an den Ports von den Anwendungen ferngehalten wird. Es ist also schon vom Design her nicht vorgesehen, etwas vergleichbares wie das "einfache" Einschalten von den Modes 0-13h (+tweaked Modes) zu unterstuetzen.

Um auf die Frage zu antworten ob es moeglich ist: Ja, aber dann wuerdest du einen Grafiktreiber fuer ein (vermutlich) so gut wie nicht oeffentlich dokumentiertes Geraet schreiben muessen. Und der Treiber funktioniert unter Umstaenden nur mit den Grafikkarten des selben Herstellers (vermutlich), Typs (kommt drauf an), Serie oder Revision. Der Aufwand (Reverse Engineering) ist nicht unerheblich und das ist auch ein Grund, warum es keine Open Source Treiber fuer aktuelle Grafikkarten gibt. Wenn du dich mit der Entwicklung fuer alte Riva TNTs und Radeons aus dem letzten Jahrtausend begnuegen kannst, findest du mindestens im Linuxkernel was, sonst im Internet ;)
Dieser Text wird unter jedem Beitrag angezeigt.

SK-Genius

  • Beiträge: 8
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 21. February 2006, 22:29 »
@PorkChicken:
tschuldigung, aber woher soll das bios wissen wie es bei ner grafigkarte zwichen den auflösungen hin und her schaltet wenn es dafür keine einheitliche methode gibt? selbst wenn es da unterschiede geben sollte würd sich das wohl auf ne handvoll von standart methoden beschränken. ich glaub nicht das sich n grafigkarten hersteller n neues verfahren ausdenkt und damit riskiert das die alten mainboards dies nicht mit machen.

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #12 am: 22. February 2006, 00:06 »
Zitat von: SK-Genius
@PorkChicken:
tschuldigung, aber woher soll das bios wissen wie es bei ner grafigkarte zwichen den auflösungen hin und her schaltet wenn es dafür keine einheitliche methode gibt? selbst wenn es da unterschiede geben sollte würd sich das wohl auf ne handvoll von standart methoden beschränken. ich glaub nicht das sich n grafigkarten hersteller n neues verfahren ausdenkt und damit riskiert das die alten mainboards dies nicht mit machen.

Die VESA BIOS Extensions werden nicht vom Motherboard BIOS, sondern von nem Grafikkarten eigenem BIOS ausgeführt/breitgestellt.  :wink:
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #13 am: 22. February 2006, 00:12 »
Zitat von: joachim_neu
Zitat von: bluecode

Aber trotz allem will man dem Benutzer es vllt ermöglichen den Grafikmodus zur Laufzeit zu verändern... also ist das setzen des Grafikmoduses im Bootloader vllt auch net so ne tolle Lösung.

Lässt du deinen PC mit 640 * 480 Monochrom-Auflösung laufen, wenn er 1024 * 768 bei 24 Bit kann?


Was is aber wenn er zwar 1024*768 bei 24 kann, aber 1024*768 bei 16 ruckelfreier/gewünscht ist? :roll:
Sry, aber die Option haben (eine andere Auflösung wählen zu können), ist immer besser als Optionen von vornherein auszuschließen. 8)
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #14 am: 22. February 2006, 18:18 »
Zitat von: bluecode
Zitat von: joachim_neu
Zitat von: bluecode

Aber trotz allem will man dem Benutzer es vllt ermöglichen den Grafikmodus zur Laufzeit zu verändern... also ist das setzen des Grafikmoduses im Bootloader vllt auch net so ne tolle Lösung.

Lässt du deinen PC mit 640 * 480 Monochrom-Auflösung laufen, wenn er 1024 * 768 bei 24 Bit kann?


Was is aber wenn er zwar 1024*768 bei 24 kann, aber 1024*768 bei 16 ruckelfreier/gewünscht ist? :roll:
Sry, aber die Option haben (eine andere Auflösung wählen zu können), ist immer besser als Optionen von vornherein auszuschließen. 8)


Die Option ist nicht ausgeschlossen, nur nicht vorgesehen. Und du wärst der erste, den ich sehe, der seinen PC mit schlechterer Auflösung betreibt, als möglich, "weil das gewünscht ist"...
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

Thoth

  • Beiträge: 62
    • Profil anzeigen
Gespeichert
« Antwort #15 am: 22. February 2006, 18:44 »
Und was ist, wenn einer Diablo 2 spielen möchte und das halt nur eben mit 800*600 läuft?

Solche Fälle existieren durchaus, so ist es ja nicht.
Madness isn't a bug - it's a feature

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #16 am: 22. February 2006, 20:03 »
@PorkChicken:

Zitat
Starting with VBE/Core 3.0, all the VBE functions are optionally accessible from 16-bit and 32-
bit protected mode applications and operating systems via a new ‘Protected Mode Entry Point’.
The protected mode entry point defines a special location that can be used to directly call the
VBE functions as 16-bit protected mode code. The application or OS does not call the BIOS
code directly from protected mode, but first makes a copy of the BIOS image in a writeable
section of memory and then calls the code within this relocated memory block. The entry point is
located within a special ‘Protected Mode Information Block’, which will be located somewhere
within the first 32Kb of the BIOS image (if this information block is not found, then the BIOS
does not support this new interface).


ABER :
Zitat
Note: The protected mode entry point is optional, and may not be implemented in some VBE 3.0
BIOS’es. Also note that the VESA VBE/AF Accelerator Functions specifications provide
an alternative protected mode environment, so application programmers looking for
protected mode support may want to take a look at the VBE/AF specification.


Noch was zu PM und VBE3:
Zitat
Things to avoid in Protected Mode
If it is necessary for the BIOS code to directly access PCI configuration space registers, access to
these registers is not possible via the INT 1Ah software interrupt that is normally used from real
mode code. In order to fully support the protected mode entry point, the BIOS implementer
cannot call the INT 1Ah software interrupt, but must access the PCI config space registers using
the standard I/O port access methods as outlined in the PCI 2.1 hardware specification.


VESA VBE/AF
Zitat
The VBE/AF device driver is defined as an operating system portable, 32 bit protected mode
device driver, which can be loaded under any 32 bit operating system. The same VBE/AF driver
can be used for high performance full screen graphics under any operating system, provided a
few operating system specific functions are provided. Currently VBE/AF is targeted towards
supporting MSDOS, Windows 3.1, Windows 95, OS/2 and UNIX.


Quellen:
VESA VBE3: http://www.vesa.org/public/VBE/vbe3.pdf
VESA VBE/AF: http://www.vesa.org/Public/VBE/VBE-AF07.pdf


Zitat von: joachim_neu
Die Option ist nicht ausgeschlossen, nur nicht vorgesehen. Und du wärst der erste, den ich sehe, der seinen PC mit schlechterer Auflösung betreibt, als möglich, "weil das gewünscht ist"...


Das ist eine ziemlich stumpfe Argumentation! Meine Grake könnte z.B. auch ne 1600x1400 Auflösung darstellen, aber mein Bildschirm kann nur bis 1200 irgendwass. Und bei einigen systemen kann eine zu hohe Auflösung auch unerwünscht sein. Z.B. weil es langsammer ist oder der Bildschirm dann nur noch mit 60Hz vor sich her flimmert.


Grundproblem: Keine Spec. aktueller Graken. Hat jemand einen Lösungsvorschlag? :)
db 0x55AA

Homix

  • Beiträge: 138
    • Profil anzeigen
Gespeichert
« Antwort #17 am: 22. February 2006, 20:59 »
hi,
in dem VBE/AF Dokument steht was von einer VBE Treiberdatei, die durch den Beispiel Code im Dokument angesprochen wird.
Wo kann ich die finden ?

mfg,
stefan

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #18 am: 22. February 2006, 21:06 »
habs mir zwar nicht richtig angeschaut, aber das hier ist vllt was (wobei mir auffällt das die letzte Version von 1999 is...)...
Bin mir nicht ganz sicher, aber muss nicht die VBE A/F Treiberdatei vom Grafikkartenhersteller kommen?
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

RedEagle

  • Beiträge: 244
    • Profil anzeigen
    • RedEagle-OperatingSystem - Projekt
Gespeichert
« Antwort #19 am: 26. February 2006, 11:39 »
Zitat
PorkChicken:
ich will damit sagen: wer braucht bitteschoen textausgabe?

Ich würde gerne beim Booten nen richtig schönen (ASCII-Art - mäßigen) ladebildschiorm haben, mit bunten ASCII-Zeichen und so weiter. Genau dafür brauche ich den 25×80 - Textmode.

Wenn ich das jetzt alles richtig verstanden habe, muss ich mich jetzt erstmal um den Virtual Real Mode kümmern, und in diesem modus dann mit int 13 arbeiten....

Auf jeden fall danke für die zahlreichen links :)

 

Einloggen