Direkte Speicheradressierung unter Proteced Mode?

W

Werner Brennecke

Guest
Hallo,

ich bin gerade am verzweifeln. Ich versuche den Speicher einer
Einsteckkarte direkt zu adressieren. (Borland 4.5, Dos Extender)

int *Steckkarte;
Steckkarte=(int *)0x000d0000;
*Steckkarte=0x33;

Beim Speicherzuweisen schmeisst mich der Extender mit der Meldung "The
instruction referenced illegal adress 000d0000" raus.

Hat jemand schon mal sowas gelöst?

danke im voraus
Werner
 
Hallo Werner,

"Werner Brennecke" <werner.brennecke@hrb.de> schrieb im Newsbeitrag
news:MPG.197cb1562e86afca989681@news.hrb.de...

Beim Speicherzuweisen schmeisst mich der Extender mit der Meldung "The
instruction referenced illegal adress 000d0000" raus.
Verraetst Du uns noch das Betriebssystem? Unter Win2k aufwaerts vergiss
den direkten IO-Zugriff.

Gruss, Kurt
 
Werner Brennecke wrote:

ich bin gerade am verzweifeln. Ich versuche den Speicher einer
Einsteckkarte direkt zu adressieren. (Borland 4.5, Dos Extender)

int *Steckkarte;
Steckkarte=(int *)0x000d0000;
*Steckkarte=0x33;

Beim Speicherzuweisen schmeisst mich der Extender mit der Meldung "The
instruction referenced illegal adress 000d0000" raus.

Hat jemand schon mal sowas gelöst?
Das ist normal im PM und sollte auch so sein, sonst waere
das Schutzkonzept fuer die Katz.

Es ist lange her und ich habe vornehmlich mit WATOM und
Rationals 4GW Extender gearbeitet. In der Regel musst Du
Dir fuer den physischen Speicherbereich (Adresse, Laenge)
ein Fenster zuweisen lassen.

Das kann je nach Hardwarekompatibelitaet beim 286er ein
Farpointer fuer ein Segment sein und ab 386er ein 32 Bit
near pointer wenn paging verwendet wird.
Beachte dabei, dass im Segmentierungsfall Deine Adresse
u.U. 4-Byte aligned sein muss und im Pagingfall auf jeden
Fall 4096-Byte aligned sein muss.

Ich denke mal Borland hat da aehnliches.
Aufmerksam Doku lesen, ich bin mir sicher, dass ich das
bei BC auch schon gesehen habe.

Gruesse,
Christian

PS: Wie der Vorposter schon erwaehnt kann Dir das OS natuerlich
auch nen Strich durch die Rechnung machen. Aber ich gehe auf
Grund von "DOS Extender" mal von DOS aus.
 
On Mon, 14 Jul 2003 16:46:01 +0200, Christian Kahlo
<christian@empire.weimar.thur.de> wrote:

PS: Wie der Vorposter schon erwaehnt kann Dir das OS natuerlich
auch nen Strich durch die Rechnung machen.
Bei Win muß man einen Treiber schreiben. Hab ich noch nicht gemacht,
aber wenn mir jemand einen netten Link auf was brauchbares postet, immer
her damit.

Grüße, Holger
 
hbruns@gmx.de (Holger Bruns) wrote in message news:<3f12d9ef.836404@news.cis.dfn.de>...

Bei Win muß man einen Treiber schreiben. Hab ich noch nicht gemacht,
aber wenn mir jemand einen netten Link auf was brauchbares postet, immer
her damit.

Ob's brauchbar ist, kann ich nicht beurteilen. Ich hab mir mal vor
einiger Zeit von "http://www.driverlinx.com/" die Port IO Treiber
geladen, aber bis heute noch nicht ausprobiert.

Mein Programm läuft unter DOS (Win9x) und Linux ohne spezielle
Treiber, was mir im Augenblick völlig reicht. Unter Linux muß man als
Superuser angemeldet sein und vor dem Portzugriff mit einem
ioperm-Aufruf den Port freigeben. Klappt sehr gut.

Michael
 
On 15 Jul 2003 04:52:22 -0700, mike102de@yahoo.com
(=?ISO-8859-1?Q?Michael_Kr=E4mer?=) wrote:

Ob's brauchbar ist, kann ich nicht beurteilen. Ich hab mir mal vor
einiger Zeit von "http://www.driverlinx.com/" die Port IO Treiber
geladen, aber bis heute noch nicht ausprobiert.
Da werd ich auch nicht so ohne weiteres schlau draus. Ist eher was für
den beinharten C-Programmierer, nicht für solche Pascal-Flaschen wie
mich.

Mein Programm läuft unter DOS (Win9x) und Linux ohne spezielle
Treiber, was mir im Augenblick völlig reicht. Unter Linux muß man als
Superuser angemeldet sein und vor dem Portzugriff mit einem
ioperm-Aufruf den Port freigeben. Klappt sehr gut.
Du greifst unter Windows 98 ohne Wimpernzucken auf die Ports zu? Das
hätte ja was ... nicht ganz sauber, aber ...

Viele Grüße, Holger
 
In article <beuf4j$97ai6$1@ID-20141.news.uni-berlin.de>, harders@pin-
gmbh.com says...

Hallo,

das hatte ich vergessen. Ich arbeite noch unter DOS:) Das Problem habe
ich über die beigelegten Beispiele aber gelöst. (DPMI Aufrufe)

danke
Werner

"Werner Brennecke" <werner.brennecke@hrb.de> schrieb im Newsbeitrag
news:MPG.197cb1562e86afca989681@news.hrb.de...
Beim Speicherzuweisen schmeisst mich der Extender mit der Meldung "The
instruction referenced illegal adress 000d0000" raus.
Verraetst Du uns noch das Betriebssystem? Unter Win2k aufwaerts vergiss
den direkten IO-Zugriff.
 
Holger Bruns schrieb...
Bei Win muß man einen Treiber schreiben. Hab ich noch nicht gemacht,
aber wenn mir jemand einen netten Link auf was brauchbares postet, immer
her damit.
Vielleicht ist
http://www.direct-io.com/
was für Dich?

- Heinz
 
Du greifst unter Windows 98 ohne Wimpernzucken auf die Ports zu? Das
hätte ja was ... nicht ganz sauber, aber ...
Genauso sauber wie unter DOS, nur daß Windows mit seinen eigenen
Treibern dazwischenfunken könnte. Man darf halt nicht gleichzeitig
versuchen, über diesen Port zu drucken. Weder in Win9x noch in
XT/2K/XP ist der direkte Zugriff sauber gelöst. Win9x schert sich
überhaupt nicht darum, was ein Programm macht und die anderen Systeme
verbieten einfach alles (ohne speziellen Treiber). Unter Linux
reserviert man sich die I/O Adressen, sichert sich so den exklusiven
Zugriff und legt los, was ich für deutlich besser halte (ich hoffe,
daß ich mit diesem Statement keinen Glaubenskrieg Win/Linux lostrete).

Michael
 

Welcome to EDABoard.com

Sponsor

Back
Top