Zugriff auf Speicherstellen



  • Irgendwie weiss ich gar nicht so richtig, wo ich meine Frage einzuordnen habe, also sorry, wenn das hier der falsche Thread ist.

    Ich arbeite derzeit ein Buch Namens "3D Programmierung mit C++" durch. Dummerweise ist das von 1996, so das ich mir nicht mehr sicher bin, ob das für Windwos 98 überhaupt noch kompatibel ist. (Das Buch habe ich auch der Unibibliothek)
    Hier geht es nicht um Open GL oder DirectX sondern um die direkte Programmierung der Graphikkarte.

    Das Setzen des gewünschten Video-Modus wird mit einer in C++ eingebetteten Assembler-Routine erledigt, was ich mittlerweile auch hinbekommen habe.
    Allerdings bleibt der Bildschirm in diesem Modus auch nach Beendigung des Programms, so das nur ein rechnerneustart hilft.
    Hier zu schreibt der Autor:

    Den Video-Modu wiederherstellen
    Glücklicherweise haben sich die Autoren des IBM-Betriebssystems dafür entschieden, die Werte des aktuellen Video-Modus an der Speicherstelle 0400:0049 abzulegen. Wie ich in Kapitel 1 bereits erklärt habe, können Sie den Inhalt einer Speicherstelle auslesen, indem Sie mit Hilfe des Makros MK_FP (Make-far-Zeiger), das ebenfalls in DOS.H definiert ist, einen Zeiger auf die Speicherstelle erzeugen. Der folgende Ausdruck legt in der Integer-Variable oldmode den Wert des aktuellen Video-Modus ab:

    int oldmode = *(int *)MK_FP(0x40,0x49); // legt in oldmode den Wert der Speicherstelle 0400:0049 ab
    

    In der C++ main-Funktion wird dann die assemblerroutine setgmode() mit dem Wert 0x13 aufgerufen bzw am Ende des programms mit setgmode(old) zurückgeschaltet.

    Das ist nun mein Problem: Wie kann ich die Speicherstelle auslesen ?
    Die oben gezeigte Routine bezieht sich leider nur auf den Borland-Compiler, ich aber nuzte Visual C++, weshalb das ganze spezieller ist und damit meiner Meinung nach in diesen Bereich des Forums gehört.

    Im IRC hat man mir gesagt, das das wohl nicht geht, aber irgendwie muss es doch gehen, denn schliesslich beginnen Graphik-Bibliotheken wie OpenGL DivX , etc ... auch mit einem Aufruf der einen bestimmten Videomodus startet, bzw in den alten wieder zurück schaltet.

    Ich hoffe, das war jetzt nicht zu lang, aber es musste so sein, da man mich sonst nicht versteht, warum sowas für mich wichtig ist.
    Für eine Antwort wäre ich sehr sehr dankbar
    Mfg Mirco



  • 1. ist das keine MFC-Frage
    2.

    denn schliesslich beginnen Graphik-Bibliotheken wie OpenGL DivX , etc ... auch mit einem Aufruf der einen bestimmten Videomodus startet, bzw in den alten wieder zurück schaltet.

    Häää ? DivX ne Grafikbibliothek?
    3. Weiß ich noch immer nicht, warum das für Dich so interessant ist, denn KEINER setzt heutzutage noch einen Vesa-Grafikmodus per Assemblerbefehl in Win98 !


Anmelden zum Antworten