Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Memory-mapped ISA-Karte programmieren

31 views
Skip to first unread message

Thomas Szurmant

unread,
Jul 3, 1999, 3:00:00 AM7/3/99
to
Hallo,

zunächst mal:

dies ist KEINE DAU-Frage ala warum funktioniert meine Karte nicht.

ich habe mal eine ganz grundsätzliche Frage zum Adressraum des (IBM-
komapatiblen) PC.

Dazu fange ich am besten mit dem Hintergrund an. In meiner Diplom-
arbeit soll ich u.a. ein Spektrometer der Firma Zeiss in ein
Gesamtsystem einbinden und durch Software ansteuern.
Dieses Spektrometer wird mit Hilfe einer proprietären ISA-Karte mit
dem PC verbunden. Die einzige Dokumentation, die zur Ansteuerung
noch aufzutreiben war, ist ein alter BASIC-Quelltext.

Nachdem ich besagten Quelltext analysiert habe (Kommentar spare ich
mir) und auch die ISA-Karte ein wenig reverse engineered habe, habe
ich eigentlich alle Informationen, die ich brauche:

- Die Karte, bzw. die Register/Speicher des Spektrometers werden
Memory-Mapped (!) von Adresse 0xD0000 bis 0xD0FFF eingebunden.
- Es werden außer dem Daten- und Adressbus (A0 - A19) nur noch
die Schreib- und Lesesignale (/SMEMR und /SMEMW) benutzt, d.h.
die Register werden wie normaler Speicher beschrieben/gelesen.

So und nun meine eigentlichen Fragen, nämlich nach dem Adressraum des
PC:

- Wo im physikalischen (!) Adressraum liegt der ISA-Bus bei alten
PCs (z.B. 286) und wo bei neueren (PCI-to-ISA-Bridge, z.B. Pentium)
Also ist A0-A19 wirklich A0-A19 des Prozessors ?
- Lief die Karte mit der BASIC-Soft auf dem alten Rechner nur, weil
nur 640 KByte Speicher installiert sind ?
- Wo liegt der Arbeitsspeicher eines modernen PC (128 MByte sind ja
heute keine Seltenheit mehr) im physikalischen (!) Adressraum?
- Sind Buskonflikte (Speicher <-> ISA-Karte) zu erwarten, wenn man
moderne 32-Bit Betriebsysteme (WIN32, Linux) laufen läßt.
(kein Segment/Offset-Krampf)
- Mir ist klar, daß eine MMU logische in jede gewünschte physikalische
Adresse umbiegen kann. Was spielt die MMU für eine Rolle ?
- Kann man eventuell Adressbereiche angeben (BIOS, Windows) in dem
der Arbeitsspeicher ausgeblendet wird? MMU? Wenn ja wie?

So ich hoffe sehr, daß ihr mir weiterhelfen könnt. Auch www-Links
sind willkommen. Falls es euch nicht zu große Mühe bereitet, möchte
ich euch bitten, neben einer Antwort hier noch eine CC an meine
e-mail-Adresse zu senden.

Danke schon mal

Thomas (der von der PC-Architektur immer noch nichts hält)


R. Freitag

unread,
Jul 4, 1999, 3:00:00 AM7/4/99
to
Thomas Szurmant wrote:
>
> Hallo,

>
> - Wo im physikalischen (!) Adressraum liegt der ISA-Bus bei alten
> PCs (z.B. 286) und wo bei neueren (PCI-to-ISA-Bridge, z.B. Pentium)
> Also ist A0-A19 wirklich A0-A19 des Prozessors ?

Ich nehme an, dass du per CPU-Anweisung auf den Speicher bzw die
Register zugreifen willst. Das ist beim ISA Bus transparent, du kann st
in allen Programmiersprachen zugreifen, wie du willst. Ausnahme:
Zugriffsverletzungen. Etwas anderes gilt, wenn du in die
IO-Adressbereiche eingreifen willst.

> - Lief die Karte mit der BASIC-Soft auf dem alten Rechner nur, weil
> nur 640 KByte Speicher installiert sind ?

Das kann sein. Ich weiss nicht, ob dein Basic überhaupt mehr
unterstützt, aber in solchen Fällen werden schon mal Probleme mit dem
Rollover am Ende des Speicherbereiches sichtbar. Du kannst aber im Bios
den Speicherbereich ausblenden, den du für deine Karte benötigst.

> - Wo liegt der Arbeitsspeicher eines modernen PC (128 MByte sind ja
> heute keine Seltenheit mehr) im physikalischen (!) Adressraum?
> - Sind Buskonflikte (Speicher <-> ISA-Karte) zu erwarten, wenn man
> moderne 32-Bit Betriebsysteme (WIN32, Linux) laufen läßt.
> (kein Segment/Offset-Krampf)
> - Mir ist klar, daß eine MMU logische in jede gewünschte physikalische
> Adresse umbiegen kann. Was spielt die MMU für eine Rolle ?
> - Kann man eventuell Adressbereiche angeben (BIOS, Windows) in dem
> der Arbeitsspeicher ausgeblendet wird? MMU? Wenn ja wie?

Im Bios.

Holger Petersen

unread,
Jul 4, 1999, 3:00:00 AM7/4/99
to
"Thomas Szurmant" <Thomas....@post.rwth-aachen.de> writes:

>- Die Karte, bzw. die Register/Speicher des Spektrometers werden
> Memory-Mapped (!) von Adresse 0xD0000 bis 0xD0FFF eingebunden.

>So und nun meine eigentlichen Fragen, nämlich nach dem Adressraum des
>PC:

>- Wo im physikalischen (!) Adressraum liegt der ISA-Bus bei alten


> PCs (z.B. 286) und wo bei neueren (PCI-to-ISA-Bridge, z.B. Pentium)
> Also ist A0-A19 wirklich A0-A19 des Prozessors ?

Ja.


>- Lief die Karte mit der BASIC-Soft auf dem alten Rechner nur, weil
> nur 640 KByte Speicher installiert sind ?

Nein.

>- Wo liegt der Arbeitsspeicher eines modernen PC (128 MByte sind ja
> heute keine Seltenheit mehr) im physikalischen (!) Adressraum?

Genauso wie früher: Von 0:0 bis 9000:ffff (eins weniger als A000:0)

>- Sind Buskonflikte (Speicher <-> ISA-Karte) zu erwarten, wenn man
> moderne 32-Bit Betriebsysteme (WIN32, Linux) laufen läßt.

Nein.

> (kein Segment/Offset-Krampf)

Der muss dort anders berücksichtigt werden: D000:0 entspricht den
von Dir oben angegebenen D0000. Wobei Speicher-Zugriffe wohl nur
als "root" gehen (seek in /proc/kmem ?)


>- Mir ist klar, daß eine MMU logische in jede gewünschte physikalische
> Adresse umbiegen kann. Was spielt die MMU für eine Rolle ?

Manchmal eine grosse...

>- Kann man eventuell Adressbereiche angeben (BIOS, Windows) in dem
> der Arbeitsspeicher ausgeblendet wird? MMU? Wenn ja wie?

Zum Beispiel mit " device=C:\DOS\EMM386.exe X=D000:0-D000:1FF "

Das (Fehlen obiger Zeile) könnte ein Grund für (Deine) Probleme sein...

Gruss, Holger

Michael Linnemann

unread,
Jul 4, 1999, 3:00:00 AM7/4/99
to
On 03 Jul 99 14:54:46 -0500,
Thomas Szurmant <Thomas....@post.rwth-aachen.de> wrote:

>- Die Karte, bzw. die Register/Speicher des Spektrometers werden
> Memory-Mapped (!) von Adresse 0xD0000 bis 0xD0FFF eingebunden.

>- Es werden außer dem Daten- und Adressbus (A0 - A19) nur noch
> die Schreib- und Lesesignale (/SMEMR und /SMEMW) benutzt, d.h.
> die Register werden wie normaler Speicher beschrieben/gelesen.

>So und nun meine eigentlichen Fragen, nämlich nach dem Adressraum des
>PC:

>- Wo im physikalischen (!) Adressraum liegt der ISA-Bus bei alten
> PCs (z.B. 286) und wo bei neueren (PCI-to-ISA-Bridge, z.B. Pentium)
> Also ist A0-A19 wirklich A0-A19 des Prozessors ?

Bei richtig alten PCs: ja, die Adressleitungen sind unmittelbar die des
Prozessors. Bei "neueren" ab 386 abhaengig vom Betriebsmodus und
Programmierung der MMU, ohne weiteres Zutun sollte der DOS-Adressraum (das
"unterste" Megabyte) aber "ganz unten" liegen.

>- Lief die Karte mit der BASIC-Soft auf dem alten Rechner nur, weil
> nur 640 KByte Speicher installiert sind ?

Gut moeglich.

>- Wo liegt der Arbeitsspeicher eines modernen PC (128 MByte sind ja
> heute keine Seltenheit mehr) im physikalischen (!) Adressraum?

Physikalisch wohl noch immer "von unten nach oben". Aber abhaengig vom
Chipsatz kann es wohl auch sein, dass da ggf. was umgebogen wird.

>- Sind Buskonflikte (Speicher <-> ISA-Karte) zu erwarten, wenn man
> moderne 32-Bit Betriebsysteme (WIN32, Linux) laufen läßt.

> (kein Segment/Offset-Krampf)

Du kannst den betreffenden Bereich vom BIOS ausblenden lassen.

>- Mir ist klar, daß eine MMU logische in jede gewünschte physikalische
> Adresse umbiegen kann. Was spielt die MMU für eine Rolle ?

>- Kann man eventuell Adressbereiche angeben (BIOS, Windows) in dem
> der Arbeitsspeicher ausgeblendet wird? MMU? Wenn ja wie?

S.o.. Eine gute Quelle fuer weitere Informationen und Beispiele fuer
entsprechende Software sind, wie oft, die Quelltexte entsprechender
Linux-Treiber. Memory-mapped-I/O kommt z.B. auch bei Netzwerkkarten vor.

>Danke schon mal

>Thomas (der von der PC-Architektur immer noch nichts hält)

Dann sind wir uns ja einig.

Gruss
Michael

Thomas Szurmant

unread,
Jul 4, 1999, 3:00:00 AM7/4/99
to
"R. Freitag" <robert....@netcologne.de> wrote:


>> - Wo im physikalischen (!) Adressraum liegt der ISA-Bus bei alten
>> PCs (z.B. 286) und wo bei neueren (PCI-to-ISA-Bridge, z.B.
>> Pentium) Also ist A0-A19 wirklich A0-A19 des Prozessors ?

> Ich nehme an, dass du per CPU-Anweisung auf den Speicher bzw die


> Register zugreifen willst. Das ist beim ISA Bus transparent, du kann
> st in allen Programmiersprachen zugreifen, wie du willst. Ausnahme:
> Zugriffsverletzungen. Etwas anderes gilt, wenn du in die
> IO-Adressbereiche eingreifen willst.

Also die Ansteuerung der Karte werde ich in eine DLL packen, das ganze
soll also unter Windoof laufen und zwar sowohl 95/98 als auch NT.
Nun ist direkter Hardwarezugriff unter diesen Systemen nicht mehr so
einfach möglich. Ich werde allerdings auch nicht das DDK benutzen, das
wird mir zu aufwendig. Stattdessen benutze ich TVicHW32. Das ist eine
Sammlung aus Kernelmodetreiber für NT, VxD für 95/98, einer DLL und
*.lib sowie *.h. Die DLL kann man dann in eigene Projekte einbinden
und direkt auf die Hardware zugreifen. eine nette Funktion heißt z.B.
MapPhysToLinear, als Argumente Basisadresse und Größe in Byte, als
Returnwert bekommt man dann einen Zeiger geliefert.

>> - Lief die Karte mit der BASIC-Soft auf dem alten Rechner nur, weil
>> nur 640 KByte Speicher installiert sind ?

> Das kann sein. Ich weiss nicht, ob dein Basic überhaupt mehr
> unterstützt, aber in solchen Fällen werden schon mal Probleme mit
> dem Rollover am Ende des Speicherbereiches sichtbar. Du kannst aber
> im Bios den Speicherbereich ausblenden, den du für deine Karte
> benötigst.

Also in dem Basic wurde das so gemacht:

DEF SEG Basisadresse

Und dann mit PEEKs und POKEs auf die Speicherstellen zugegriffen.

>> - Kann man eventuell Adressbereiche angeben (BIOS, Windows) in dem
>> der Arbeitsspeicher ausgeblendet wird? MMU? Wenn ja wie?

> Im Bios.

Aha, das sind dann wohl diese ominösen Shadow-Bereiche, richtig ?
Ich habe mich schon immer gefragt wozu die gut sind.
Naja, aber dann wird es vermutlich keinerlei Probleme geben.

Vielen Dank für die Antwort, hat mir wirklich weitergeholfen

Ciao Thomas


R. Freitag

unread,
Jul 4, 1999, 3:00:00 AM7/4/99
to
Thomas Szurmant wrote:
>
>[...]

>
> Also die Ansteuerung der Karte werde ich in eine DLL packen, das ganze
> soll also unter Windoof laufen und zwar sowohl 95/98 als auch NT.
> Nun ist direkter Hardwarezugriff unter diesen Systemen nicht mehr so
> einfach möglich.

Er ist nicht nicht möglich , aber nicht erwünscht. Das aknn man ändern.

> Ich werde allerdings auch nicht das DDK benutzen, das
> wird mir zu aufwendig. Stattdessen benutze ich TVicHW32. Das ist eine
> Sammlung aus Kernelmodetreiber für NT, VxD für 95/98, einer DLL und
> *.lib sowie *.h. Die DLL kann man dann in eigene Projekte einbinden
> und direkt auf die Hardware zugreifen. eine nette Funktion heißt z.B.
> MapPhysToLinear, als Argumente Basisadresse und Größe in Byte, als
> Returnwert bekommt man dann einen Zeiger geliefert.
>
> >> - Lief die Karte mit der BASIC-Soft auf dem alten Rechner nur, weil
> >> nur 640 KByte Speicher installiert sind ?
> > Das kann sein. Ich weiss nicht, ob dein Basic überhaupt mehr
> > unterstützt, aber in solchen Fällen werden schon mal Probleme mit
> > dem Rollover am Ende des Speicherbereiches sichtbar. Du kannst aber
> > im Bios den Speicherbereich ausblenden, den du für deine Karte
> > benötigst.
>
> Also in dem Basic wurde das so gemacht:
>
> DEF SEG Basisadresse
>
> Und dann mit PEEKs und POKEs auf die Speicherstellen zugegriffen.

in C definierst du einen Zeiger auf die Basisadresse und das wars.


>
> >> - Kann man eventuell Adressbereiche angeben (BIOS, Windows) in dem
> >> der Arbeitsspeicher ausgeblendet wird? MMU? Wenn ja wie?
>
> > Im Bios.
>
> Aha, das sind dann wohl diese ominösen Shadow-Bereiche, richtig ?

Korrekt. Aber Windows soll selbst diese Bereiche gelegentlich
alloziieren, was bedeutet, dass sie für dein Vorhaben verloren sind. Das
ist auch nicht zu ändern, ausser
-) man verwendet OS2, da weiss ich, dass das zuverlässig geht,
-) bei Linux glaube ich, dass es zuverlässig geht, ich weiss es aber
nicht.

> Ich habe mich schon immer gefragt wozu die gut sind.

na eben genau dafür. Versuche, in C ein Programm zu schreiben, dass nach
der Sperrung des Bereiches durch das BIOS diesen alloziiert. Wenn es
dann speicherschutzverletzungen gibt, hast du Pech-...


> Naja, aber dann wird es vermutlich keinerlei Probleme geben.
>
> Vielen Dank für die Antwort, hat mir wirklich weitergeholfen

> Bitte sehr.
> Ciao Thomas
R.


Ulrich Prinz

unread,
Jul 6, 1999, 3:00:00 AM7/6/99
to
Thomas Szurmant wrote:
>
> Hallo,
>
> zunächst mal:
>
> dies ist KEINE DAU-Frage ala warum funktioniert meine Karte nicht.
>
> ich habe mal eine ganz grundsätzliche Frage zum Adressraum des (IBM-
> komapatiblen) PC.
>
> - Die Karte, bzw. die Register/Speicher des Spektrometers werden
> Memory-Mapped (!) von Adresse 0xD0000 bis 0xD0FFF eingebunden.
> - Es werden außer dem Daten- und Adressbus (A0 - A19) nur noch
> die Schreib- und Lesesignale (/SMEMR und /SMEMW) benutzt, d.h.
> die Register werden wie normaler Speicher beschrieben/gelesen.
>
> So und nun meine eigentlichen Fragen, nämlich nach dem Adressraum des
> PC:
>
> - Wo im physikalischen (!) Adressraum liegt der ISA-Bus bei alten
> PCs (z.B. 286) und wo bei neueren (PCI-to-ISA-Bridge, z.B. Pentium)
> Also ist A0-A19 wirklich A0-A19 des Prozessors ?

Früher ja, heute nicht immer. Kommt auf die BIOS-Einstellungen an. Du
solltest auf jeden fall daran denken sowohl den SHADOW für diesen
BEreich abzuschalten, als auch in den PCI-Settings den ISA-MEM-Block auf
entsprechende Werte einzustellen. (D000 / 16K) Sonst kommst Du auf die
Karte nicht drauf, weil Dein Addressbereich in das Shadow-RAM gespiegelt
wurde.

> - Lief die Karte mit der BASIC-Soft auf dem alten Rechner nur, weil
> nur 640 KByte Speicher installiert sind ?

Nein, weil es weder Caching noch Shadow gab.

> - Wo liegt der Arbeitsspeicher eines modernen PC (128 MByte sind ja
> heute keine Seltenheit mehr) im physikalischen (!) Adressraum?

> - Sind Buskonflikte (Speicher <-> ISA-Karte) zu erwarten, wenn man
> moderne 32-Bit Betriebsysteme (WIN32, Linux) laufen läßt.
> (kein Segment/Offset-Krampf)

Ganz normal, da wo er immer schon lag. Der Speicher wurde von unten nach
oben erweitert. Hängt allerdings con den in der MMU/CPU aktivierten
Speichermodellen abm wie detailliert Du darin agieren kannst.

> - Mir ist klar, daß eine MMU logische in jede gewünschte physikalische
> Adresse umbiegen kann. Was spielt die MMU für eine Rolle ?

> - Kann man eventuell Adressbereiche angeben (BIOS, Windows) in dem
> der Arbeitsspeicher ausgeblendet wird? MMU? Wenn ja wie?

s.o. im BIOS


>
> So ich hoffe sehr, daß ihr mir weiterhelfen könnt. Auch www-Links
> sind willkommen. Falls es euch nicht zu große Mühe bereitet, möchte
> ich euch bitten, neben einer Antwort hier noch eine CC an meine
> e-mail-Adresse zu senden.

Ich hoffe, ich finde das nochmal wieder. Ich hatte da einige Utils zum
Adressen freischalten unter NT.... Ich muß mal suchen.


>
> Danke schon mal
>
> Thomas (der von der PC-Architektur immer noch nichts hält)


Gruß,

Ulrich.

--
--------------------------------------
Ulrich Prinz UPr...@ginko.de
--------------------------------------

Thomas Szurmant

unread,
Jul 6, 1999, 3:00:00 AM7/6/99
to
"Ulrich Prinz" <upr...@ginko.de> wrote:


>> So und nun meine eigentlichen Fragen, nämlich nach dem Adressraum
>> des PC:
>>
>> - Wo im physikalischen (!) Adressraum liegt der ISA-Bus bei alten
>> PCs (z.B. 286) und wo bei neueren (PCI-to-ISA-Bridge, z.B.
>> Pentium) Also ist A0-A19 wirklich A0-A19 des Prozessors ?

> Früher ja, heute nicht immer. Kommt auf die BIOS-Einstellungen an.
> Du solltest auf jeden fall daran denken sowohl den SHADOW für diesen
> BEreich abzuschalten, als auch in den PCI-Settings den ISA-MEM-Block
> auf entsprechende Werte einzustellen. (D000 / 16K) Sonst kommst Du
> auf die Karte nicht drauf, weil Dein Addressbereich in das
> Shadow-RAM gespiegelt wurde.

Hmm, ich glaube, ich habe da noch etwas nicht so ganz verstanden, was
das Shadow-Ram nun eigentlich darstellen soll. Ich dachte das wäre
dazu da, in dem entsprechenden Bereich den Arbeitsspeicher
*auszublenden* (z.B. Chipselect deaktivieren), damit ein Speicher/ROM
oder sonstwas an der selben Stelle nicht zu einem Buskonflikt führt.

Du sagst mir jetzt aber,ich soll das Shadow-RAM deaktivieren, ich
dachte, ich müßte es enablen.

Was mich auch sehr wundert: Der alte 286er in dem die Karte bisher
steckte hat 2 und ein paar zerquetschte MByte Hauptspeicher. Wenn
es jetzt tatsächlich so ist, daß der Speicher ab Adresse 0 losgeht
und der ISA-Bus ebenfalls, dann muß es doch einen Buskonflikt auch da
schon gegeben haben, oder nicht ??

Oder ist es so, daß standartmäßig schon immer der Bereich des
Arbeitsspeichers oberhalb 640k ausgeblendet wurde (für ISA-Karten
nutzbar) und nur durch besondere Maßnahmen (Shadow, HIMEM.SYS, EMM386)
wieder nutzbar wurde?

>> - Lief die Karte mit der BASIC-Soft auf dem alten Rechner nur, weil
>> nur 640 KByte Speicher installiert sind ?
> Nein, weil es weder Caching noch Shadow gab.

Also, ist der vorhandene Arbeitsspeicher von 2 MByte dort immer
ausgeblendet ??

>> - Wo liegt der Arbeitsspeicher eines modernen PC (128 MByte sind
>> ja
>> heute keine Seltenheit mehr) im physikalischen (!) Adressraum?
>> - Sind Buskonflikte (Speicher <-> ISA-Karte) zu erwarten, wenn man
>> moderne 32-Bit Betriebsysteme (WIN32, Linux) laufen läßt.
>> (kein Segment/Offset-Krampf)
> Ganz normal, da wo er immer schon lag. Der Speicher wurde von unten
> nach oben erweitert. Hängt allerdings con den in der MMU/CPU
> aktivierten Speichermodellen abm wie detailliert Du darin agieren
> kannst.

Wie gesagt, ich habe immer noch ein Verständnisproblem mit dem
Arbeitsspeicher an dieser Stelle. Das liegt auch daran, daß ich mich
mit solchen Problemen noch nie rumschlagen mußte, bzw. mich noch
nie ernsthaft mit der PC-Architektur befassen mußte. Aber je mehr
ich davon weiß, naja lassen wir das.


>> So ich hoffe sehr, daß ihr mir weiterhelfen könnt. Auch www-Links
>> sind willkommen. Falls es euch nicht zu große Mühe bereitet, möchte
>> ich euch bitten, neben einer Antwort hier noch eine CC an meine
>> e-mail-Adresse zu senden.

> Ich hoffe, ich finde das nochmal wieder. Ich hatte da einige Utils
> zum Adressen freischalten unter NT.... Ich muß mal suchen.

Wie schon in einem anderen Posting geschrieben, werde ich eine
Software TVicHW32 (s. z.B. http://www.lvr.com )einsetzen.
Die besteht aus einem Kernelmodetreiber (NT), der sich konform
lowlevel-Zugriff verschafft und in Form einer DLL diverse Funktionen
nutzbar macht (Port-Zugriff, physikalischen Memoryzugriff und sogar
Interrupts).

So wie man das normalerweise machen würde:

#define Basisadresse 0xD0000

char* Pointer = Basisadresse;

Wert_lesen = *Pointer;
*Pointer = Wert_schreiben;

gehts leider nicht, weil dann Speicherschutzverletzungen auftreten.
Vermute ich zumindest sehr stark, ausprobieren konnte ich es bisher
leider noch nicht.

Die Funktion von obiger Shareware, die ich nutzen möchte heißt
MapPhysToLinear, bekommt an Argumenten einen Deskriptor (erhält man
beim Öffnen des Treibers), eine physikalische Adresse und eine Anzahl
von Bytes und liefert einen Zeiger zurück, mit dem man dann arbeitn
kann.

Wenn natürlich schon das Chipset dafür sorgt, das nichts geht, dann
kann man natürlich nichts mehr machen. Deshalb ja meine Fragen
zum ISA-Bus.

Und das obwohl ich eigentlich viel lieber mit Hardware (z.B.
Microcontroller) rumbastele als zu programmieren. Nur alle
Architekturen mit denen ich mich bisher beschäftigt hatte, hatten
diese Probleme nicht, da alles immer Memorymapped und nicht
überlappend war.

Ciao Thomas


R. Freitag

unread,
Jul 6, 1999, 3:00:00 AM7/6/99
to
> Hmm, ich glaube, ich habe da noch etwas nicht so ganz verstanden, was
> das Shadow-Ram nun eigentlich darstellen soll. Ich dachte das wäre
> dazu da, in dem entsprechenden Bereich den Arbeitsspeicher
> *auszublenden* (z.B. Chipselect deaktivieren), damit ein Speicher/ROM
> oder sonstwas an der selben Stelle nicht zu einem Buskonflikt führt.

Der adressierbare Arbeitsspeicher ist in Kacheln eingeteilt. Einige
dieser Kacheln sind durch physikalischen Arbeitsspeicher belegt ( vulgo
Simms). Wenn du im Adressierbarem Bereich der CPU irgendwas anderes
unterbringen willst, vorzugsweise IO, dann brauchst du 2 Dinge: erstens
die Garantie, dass niemand ausser deinem Programm da rumwurschtelt und
zweitens, dass du da rumwurschteln kannst. Das erste gint dir der
Shadowspeicherausblender BIOS und das zweite dein Programm.


>
> Du sagst mir jetzt aber,ich soll das Shadow-RAM deaktivieren, ich
> dachte, ich müßte es enablen.

Beide Terminologien werden verwendet, wichtig ist, ass du den
betreffenden Speicherbereich explizit für dich freihälst und alle
anderen aussperrst.


>
> Was mich auch sehr wundert: Der alte 286er in dem die Karte bisher
> steckte hat 2 und ein paar zerquetschte MByte Hauptspeicher. Wenn
> es jetzt tatsächlich so ist, daß der Speicher ab Adresse 0 losgeht
> und der ISA-Bus ebenfalls, dann muß es doch einen Buskonflikt auch da
> schon gegeben haben, oder nicht ??

Wenn ein Teil des adressierbaren Bereiches ausgeblendet wurde, nicht.


>
> Oder ist es so, daß standartmäßig schon immer der Bereich des
> Arbeitsspeichers oberhalb 640k ausgeblendet wurde (für ISA-Karten
> nutzbar) und nur durch besondere Maßnahmen (Shadow, HIMEM.SYS, EMM386)
> wieder nutzbar wurde?

das geht auch.
R.


Ulrich Prinz

unread,
Jul 7, 1999, 3:00:00 AM7/7/99
to
Thomas Szurmant wrote:
>
> "Ulrich Prinz" <upr...@ginko.de> wrote:
>
> >> So und nun meine eigentlichen Fragen, nämlich nach dem Adressraum
> >> des PC:
> >>
> >> - Wo im physikalischen (!) Adressraum liegt der ISA-Bus bei alten
> >> PCs (z.B. 286) und wo bei neueren (PCI-to-ISA-Bridge, z.B.
> >> Pentium) Also ist A0-A19 wirklich A0-A19 des Prozessors ?
>
> > Früher ja, heute nicht immer. Kommt auf die BIOS-Einstellungen an.
> > Du solltest auf jeden fall daran denken sowohl den SHADOW für diesen
> > BEreich abzuschalten, als auch in den PCI-Settings den ISA-MEM-Block
> > auf entsprechende Werte einzustellen. (D000 / 16K) Sonst kommst Du
> > auf die Karte nicht drauf, weil Dein Addressbereich in das
> > Shadow-RAM gespiegelt wurde.
>
> Hmm, ich glaube, ich habe da noch etwas nicht so ganz verstanden, was
> das Shadow-Ram nun eigentlich darstellen soll. Ich dachte das wäre
> dazu da, in dem entsprechenden Bereich den Arbeitsspeicher
> *auszublenden* (z.B. Chipselect deaktivieren), damit ein Speicher/ROM
> oder sonstwas an der selben Stelle nicht zu einem Buskonflikt führt.

Jein. Das ShadowRAM wird zur Beschleunigung genutzt:
ROMs und EPROMS, die als BIOS für eine Karte genutzt werden sind, wenn
bezahlbar, recht langsam (90-150ns). Das RAM ist aber schnell. Also
schaut das PC-BIOS nach, wo denn dort ISA Karten mit eigenem BIOS sind
und kopiert deren Inhalt in das dahinter versteckte ShadowRAM. Dann
schaltet das PC-BIOS das EPROM weg und stellt die RAm-Kopie zur
Verfügung.
Das ist bei EPROMs gut, in Deinem Fall aber schlecht, da Du ja einen
Adressbereich deiner Karte ansprechen möchtest. Der würde aber durch das
Shadow verdeckt werden, alle Schreib/Lese-Zugriffe würden auf das RAM
und nicht mehr auf Deine Karte geleitet.
Daher muß das Shadow dort abgeschaltet und der Speicherbereich als
ISA-Shared deklariert werden. Damit weiß das PC-BIOS, daß es dort zum
einen keine RAM hinverlagern darf und zum Anderen, daß dort eine
Datenschnittstelle existiert und kein Speicher.
( Die alten 1542 SCSI-Controller machen das z.B. um den hohen
Datendurchsatz per DMA zu erreichen. Einfach die Datenpakete per DMA in
die freigeschaltete Seite schaufeln und dann an das Zeil schicken.)

>
> Du sagst mir jetzt aber,ich soll das Shadow-RAM deaktivieren, ich
> dachte, ich müßte es enablen.
>

> Was mich auch sehr wundert: Der alte 286er in dem die Karte bisher
> steckte hat 2 und ein paar zerquetschte MByte Hauptspeicher. Wenn
> es jetzt tatsächlich so ist, daß der Speicher ab Adresse 0 losgeht
> und der ISA-Bus ebenfalls, dann muß es doch einen Buskonflikt auch da
> schon gegeben haben, oder nicht ??

Nein, der Speicher geht ab 0 los und der ISA-Adressraum ebenfalls. Es
gibt aber Specs, die besagen, daß sich ISA Karten mit ihren BIOS und DMA
Seiten erst ab 8000 aufwärz einklinken dürfen.


>
> Oder ist es so, daß standartmäßig schon immer der Bereich des
> Arbeitsspeichers oberhalb 640k ausgeblendet wurde (für ISA-Karten
> nutzbar) und nur durch besondere Maßnahmen (Shadow, HIMEM.SYS, EMM386)
> wieder nutzbar wurde?

Jep, so iste es. Die zeihmlich verbastelte Struktur der PCs hat sich aus
Kompatibilitätsgründen bis heute gehalten und wurde ab etwa DOS4xx durch
HIMEM und EMM386 ausgetrickst, man nutzt seit dem den UMB ( also
zwischen 640K und 1M) um dort Teile des DOS abzulegen. Das sind genau
die Seiten, die als ShadowRAM zur Verfügung stehen, aber von BIOS und
Shared nicht genutzt werden.


>
> >> - Lief die Karte mit der BASIC-Soft auf dem alten Rechner nur, weil
> >> nur 640 KByte Speicher installiert sind ?
> > Nein, weil es weder Caching noch Shadow gab.
>
> Also, ist der vorhandene Arbeitsspeicher von 2 MByte dort immer
> ausgeblendet ??

Das kommt auf das BIOS an. Es gab 2 Varianten die den teuren Speicher an
dieser Stelle irgenwie nutzbar machen konnten und eine drastische:
1. Shadow
2. Verlagern nach oberhalb 1M. Der Teil zwischen 640K und 1M wurde
einfach am Ende wieder eingeblendet.
3. Ausblenden, und weg war er.


>
> >> - Wo liegt der Arbeitsspeicher eines modernen PC (128 MByte sind
> >> ja
> >> heute keine Seltenheit mehr) im physikalischen (!) Adressraum?
> >> - Sind Buskonflikte (Speicher <-> ISA-Karte) zu erwarten, wenn man
> >> moderne 32-Bit Betriebsysteme (WIN32, Linux) laufen läßt.
> >> (kein Segment/Offset-Krampf)
> > Ganz normal, da wo er immer schon lag. Der Speicher wurde von unten
> > nach oben erweitert. Hängt allerdings con den in der MMU/CPU
> > aktivierten Speichermodellen abm wie detailliert Du darin agieren
> > kannst.
>
> Wie gesagt, ich habe immer noch ein Verständnisproblem mit dem
> Arbeitsspeicher an dieser Stelle. Das liegt auch daran, daß ich mich
> mit solchen Problemen noch nie rumschlagen mußte, bzw. mich noch
> nie ernsthaft mit der PC-Architektur befassen mußte. Aber je mehr
> ich davon weiß, naja lassen wir das.

Ich weiß ja nicht, was die Karte hergibt, aber vieleicht einfach mal an
einen der Adressdecoder, die die Adresse der Karte mit den Jumpern
vergleichen einen Oszi hängen. Die Chips, die das früher machten waren
meist 74LS688 und der hat an Pin 19 den = Ausgang. Dann einfach mal mit
dem Programm und den BIOS-EInstellungen herumspielen, bis die Strobes
angezeigt werden.

Uff, das kann ich Dir nun wirklich nachfühlen. Ich habe mal versucht
unter Delphi entsprechendes zu erreichen, und habe dann beschlossen
etwas anderes zu machen. Nun ich hatte keinen Auftrag sondern nur eine
Idee und etwas bastellaune, daher bestand da auch kein Zwang.

Gurß,

0 new messages