🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.os.os2.programmer
Article #2

Problem: IOPL Segment - direkter Speicherzugriff?

#2
From: Udo Thielert
Date: Mon, 08 Apr 1996 18:51
74 lines
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!ut

Show 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