int86 unter Windows XP

carli

Grünschnabel
Hallo!
Habe das Problem, das ich eine alte ISA Karte für ein HMD unter WinXP laufen lassen möchte.
Habe auch den Code dafür, allerdings ist der in altem c-Code Programmiert.
Die benutzen Funktionen aus der dos.h die es mittlerweile nicht mehr gibt.
U.a. int86, int86x GlobalDosAlloc
Eigentlich wird über die int86 immer der Interrupt 33h aufgerufen.
Könnte aber auch mit dem Treiber der ISA Karte zusammenhängen, der warscheinlich auch darüber läuft.
Ich habe auch schon versucht "int 33h" in einem ASM Block aufzurufen.
Der Debugger bricht aber direkt beim Aufruf "int 33h" ab, als wenn der Blockiert wäre.
Ich kenne noch die Alternative über DPMI einen Softwareinterrupt aufzurufen, allerdings gibt es die Funktion GlobalDosAlloc nicht mehr!

Meine Frage:
Gibt es weitere Alternativen (z.B. in der Win32 API) um Interrupts aufzurufen, oder den Aufruf zu umgehen?
 
Von Windows aus gibt es KEINE Möglichkeit Interrupts sinnvoll aufzurufen. Das ist DOS-Programmen vorbehalten. GottseiDank!

Wie du schon gemerkt hast, führt ein Interrupt-Aufruf lediglich zum Abbruch bzw. zu einem Absturz. Selbst über so "clevere" Methoden, den Interrupt-Aufruf in asm-Blöcke zu kapseln klappt es nicht. Das ist einfach ein Schutz, den sich Windows zugelegt hat. Man stelle sich vor, mit dem Interrupt-Aufruf den Grafikmodus zu wechseln (ich habs mal probiert, hat Windows nicht gefallen).

Es wird, wenn überhaupt, nur mit einem DOS-Programm laufen, und selbst dann macht auf jeden Fall die NT/2000/XP-Schiene von Windows dir da wahrscheinlich einen Strich durch die Rechnung. Um das Ganze sauber zu machen, müsste man wohl einen Treiber basteln.

Du könntest beim Hersteller der Karte nachfragen, ob es evtl. einen Treiber oder andere Möglichkeiten gibt.
 
Danke für die schnelle antwort!

Der Hersteller existiert leider nicht mehr bzw. stellt keine Treiber mehr zur Verfügung.

Ich habe mir vorgenommen einen Treiber dafür zu erstellen, allerdings habe ich keine Ahnung wie ich anfangen soll.
Habe bereits das DDK für WinXP runtergeladen, aber so richtig Anleitung ist nicht dabei.
Kann mir jemand einen Tip geben?
Kennt jemand gute Links zur Treiber programmierung, Tutorials, wenn möglich für C++.

Danke schonmal im Vorraus!
 
Suche dir unbedingt ddkbuild.bat, dann kannst du die Treiber in der IDE bearbeiten (im Visual Studio). Das DDK ist nämlich leider immer noch kommandozeilenbasiert.

Dann würde ich wenn möglich einen der Beispieltreiber begutachten, ob da nicht einer dabei ist, der da schon in etwa das tut, was du brauchst. Einen Treiber von Grund auf zu bauen ist Hölle (und mächtig undurchsichtig). Dann kommt noch dazu, dass du einen Treiber zum Testen installieren musst (Hurra?).

Ich bin letztesmal nochmal davongekommen ohne einen Treiber bauen zu müssen. Ich empfehle wenn möglich ein deutschsprachiges Buch zu besorgen, das extra auf Treiberprogrammierung ausgelegt ist.

Ich würde mir ehrlich gut überlegen, ob das den Aufwand wert ist. Mal eben so einen Treiber zusammenbasteln ist nicht.
 
Zurück