Article View: de.comp.os.os2.programmer
Article #2Problem: IOPL Segment - direkter Speicherzugriff?
From: Udo Thielert
Date: Mon, 08 Apr 1996 18:51
Date: Mon, 08 Apr 1996 18:51
74 lines
2841 bytes
2841 bytes
An Alle die mir helfen koennen:
Vorab: Ich bitte ich um Verstaendniss wenn 2 adressierte Gruppen/Bretter
evtl. nicht die richtigen Zielgruppen sind.
Problemstellung:
Ich moechte unter OS/2 direkt auf das shared RAM einer PC-Karte zugreifen.
Es sind keine Portzugriffe notwendig und daher koennen die allgemeinen
Device-Driver "testcfg.sys" oder "fastio.sys" (written by Holger Veit)
nicht herangezogen werden.
Angestrebte Loesung:
1) Entweder ueber einen erhaeltlichen allgemeinen Device-Driver, der den
Zugriff auf Adressen im unteren Speicherbereich (z. B. D000:0000
-E000:0000) erlaubt. Dieser Treiber kann als Sourcecode (C o. Ass.)
oder als fertiger Treiber vorliegen. Eine (kurze) Doku dazu, waere
hilfreich. Kennt jemand eine Adresse/Ort, wo so etwas zu finden ist?
2) Ein Stueck Sourcecode, gekapselt in einer DLL, das den Zugriff auf das
shared RAM ermoeglicht. Dieser Sourcecode sollte mit dem WATCOM-
Compiler/Linker Ver. 10.5 verwendbar sein.
Eigene Versuche:
Ich habe bereits mehrere erfolglose Versuche, dieses Problem zu loesen,
hinter mir [Frust on].
Folgenden Weg versuchte ich einzuschlagen:
Schreibe eine DLL mit einer Funktion (cpy_mb_to_pad()), die noch keinen
Speicherzugriff macht.
Diese Funktion wird mit folgender pragma-Anweisung in ein eigenes Segment
gelegt.
#pragma alloc_text (U_SEG, cpy_mb_to_pad);
Als DLL compiliert.
Mit folgender Anweisung gelinkt:
(komplett und wegen der Uebersicht untereinander)
wlink d all
sys os2v2
dll seg 'U_SEG' iopl
op m
exp cpy_mb_to_pad_
op maxe=25
op q
op symf
op de 'DLL for Mailbox access'
op one mbio.lk1
Mit folgender Anweisung wird eine DLL-Lib erzeugt:
wlib -n -b mbio.lib +mbio.dll
Ein kurzes Hauptprogramm benutzt diese Funktion.
Sobald diese Funktion angesprungen wird, kommt die Fehlermeldung sys3175
(access violation exception) und das Programm wird beendet.
Wie gesagt, die Funktion wird nur im benannten Segment aufgerufen und
schon geht's in die Hosen.
Experimente verschiedenster Art brachten keinen Erfolg.
Fragen:
Mal abgesehen davon, dass dies nicht der saubere Weg ist, gibt es da einen
Denkfehler meinerseits?
Liegt evtl. ein Bug im WATCOM Compiler/Linker etc. vor?
Oder habe ich nur eine (grosse) Kleinigkeit nicht beachtet?
Viele Fragen auf einmal, ich hoffe eine Anwort die mir weiterhilft ist
dabei.
Besten Dank im voraus...
mfg
Udo
--
Udo Thielert
eMail: ut@utcom.prima.ruhr.de
## CrossPoint v3.1 R ##
Technical Details
Message-ID:
<66UdPtU5KrB@utcom.prima.ruhr.de>Path:
arc1-ca.pugleaf.net!utcom.prima.ruhr.de!utShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utcom.prima.ruhr.de!ut Date: 08 Apr 1996 20:51:00 +0200 From: ut@utcom.prima.ruhr.de (Udo Thielert) Newsgroups: de.comp.os.os2.programmer,de.comp.lang.c,de.comp.lang.c++ Message-ID: <66UdPtU5KrB@utcom.prima.ruhr.de> Subject: Problem: IOPL Segment - direkter Speicherzugriff? X-Newsreader: CrossPoint v3.1 R/B18449