Video Memory unter Windows
lima-city → Forum → Programmiersprachen → C/C++ und D
anwendung
assembler
auf
aufruf
beispiel
beitrag
bit
compiler
derart
eigenheit
falsche ansatz
fragen
memory
mode
nutzen
schwierigkeit
sinnen
speicherzelle
vorbehalt
window
-
Ich benutze den BCC5.5 Compiler f?r Cpp. Nun habe ich mit Inline Assembler auf das Video Memory zugegriffen und das Programm habe ich dann kompiliert. Wenn ich es starte, dann kommt ein Bluescreen und die Anwendung wird beendet. Kann mir jemand damit helfen?
Beitrag ge?ndert am 5.08.2005 16:29 von javadomi -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Betriebssysteme wie Win2000/XP lassen (ich vermute mal unter denen soll dein Programm arbeiten) nicht einfach so jedes daherprogrammierte Programm ohne weiteres auf jede Speicherzelle zugreifen.
Ich vermute mal weiter, du hast ein Beispiel/Infos f?r den DOS-Bereich, oder?
Wie auch immer, unter Windows gibt's ne Menge anderer M?glichkeiten auf die Grafikkarten zu zugreifen (GDI,DirectX,OpenGL,...).
Was ist den ?berhaupt dein Ziel? -
Also systemunabh?ngige Programmierung erreicht am besten indem man sich m?glichst weit von der Hardwareebene entfernt. Und da ist Assembler eher der falsche Ansatz, weil es die hardwaren?heste Variante ist.
Meine Frage war eher: Was willst du mit dem Videomemory anstellen? Warum willst du darauf zugreifen? -
Du verstehst es nicht. Aber egal. Zu deiner Frage: Ich m?chte erstmal den Screen Modus 13h einrichten. Und dann einen Pixel mit der Farbe x f?llen. Klar, dass geht mir verschiedenen Schnittstellen, wie OpenGL, oder DirectX, aber ich will es auf Win f?r mein OS programmieren.
PS: Nat?rlich f?r x86 -
Der Zugriff auf Hardwareressourcen ist unter den nicht mehr auf reinem MS-DOS basierenden Windowsversionen Programmen vorbehalten, die im Ring 0 Modus laufen. Dein Programm l?uft im Ring 3 Modus (normale Programme). Du m?sstest einen Treiber schreiben, der dann eine Schnittstelle f?r andere Programme bildet und gleichzeitig deine Grafikkarte "antreibt". Der Treiber l?uft dann automatisch im Ring 0 Modus. Das Problem dabei ist, dass du das dann f?r jedes einzelne Grafikkartenmodell machen m?sstest, dass du jemals verwenden wirst. Abgesehen davon besteht noch die Schwierigkeit ?berhaupt einen Treiber f?r eine Hardwarekomponente zu schreiben.
Eine andere M?glichkeit ist das Benutzen der Klasse IDirectDraw2, die Teil des Microsoft SDKs ist. Dort kannst du in den gew?nschten Bildschirmmodus (nennt sich dort so was wie Mode 13 oder so ?hnlich) umschalten. Sollte dir das Microsoft SDK nicht zur Verf?gung stehen, bleibt dir eigentlich nur noch die M?glichkeit, das Ganze per DirectX oder einer der anderen angesprochenen M?glichkeiten zu machen. In reinem Assembler wirst du das nicht hinbekommen (jedenfalls nicht, so lange du irgendwelche DOS-Codes bzw. Interrupts daf?r benutzt). -
Ja, Windows l?uft ja im 32 Bit Protected Mode. Kann man irgendwie eine Unterroutine im Kernel aufrufen, die das macht? SChlie?lich hat da der Kernel alle M?glichkeiten.
-
Jo, Javadomi, dich hab ich wirklich nicht verstanden, aber wie soll ich das auch wenn du nur derart sp?rlich mit Infos rausr?ckst. Ok, ich sehe ein ich sollte eigentlich hier nicht so schreiben; das geh?rt sich nicht, aber nunja.
Jdenfalls um diesen Post noch aufzuwerten:
Ich habe schon einmal gelesen, das es Wege gibt um Usermode-Programmen Ring-0 Privilegien zu zuteilen. Allerdings ist das eher "dirty hacking", wenn dich sowas interessiert wirst du bestimmt ?ber google f?ndlich. Unter Windows 2000 aufwa?rts macht es nicht wirklich Sinn den Kernel zu umgehen. Mehr Sinn macht es sich dort an die betriebssystemspezifischen Eigenheiten zu halten und die vorhandenen Schnittstellen zu nutzen. Sonst setzt man nur die Stabilit?t aufs Spiel.
Ist es denn nicht m?g?ich f?r dich mehrere Executes f?r verschiedene Betriebssysteme anzulegen, wenn es schon unter verschiedenen Platformen laufen und hardwarenah sein soll? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage