Forum: PC-Programmierung Wie kann man ISA-Speicher (640 KiByte (0x0A0000) bis 1 MiByte (0x100000)) Testen?


von Rolf F. (Firma: G.) (benutzername0)


Lesenswert?

Ich habe hier einen Rechner mit Speicher am ISA-Bus im Bereich 640 
KiByte (0x0A0000) bis 1 MiByte (0x100000) und möchte den Testen.
Dazu habe ich einfach, mit einem kleinen C-Programm unter Knoppix, Bytes 
in den Bereich geschrieben, mittels outb(a, b), aber der betreffende PC 
quittiert das nach ca. 100 Bytes mit einem spontanen Reboot!

Herausgefunden habe ich zu dem Thema schon das eine Absonderheit des PC 
ist, das I/O-Speicher in dem Bereich (640 Kib-1MiB) in den 
Arbeitsspeicher eingeblendet ist, aber wieso hat das Einfluß auf das 
Beschreiben/Lesen von Ports in dem Bereich?

Und wie testet man Speicher in dem Bereich?

Mit einem C-Programm und Pointern sollte das ja nicht einfach gehen, 
weil das Betriebssystem dem Programm nur virtuelle statt physikalische 
Adressen gibt.

von Peter II (Gast)


Lesenswert?

Rolf F. schrieb:
> outb(a, b),

das scheibt doch aber nicht in den Ram sondern auf die IO-Adresse.

> Mit einem C-Programm und Pointern sollte das ja nicht einfach gehen,
> weil das Betriebssystem dem Programm nur virtuelle statt physikalische
> Adressen gibt.
doch geht es, man kann auch C Programme schreiben die für dos sind. Und 
da gibt es keinen Virtuellen Speicher.

reicht das nicht

www.memtest86.com
www.memtest.org

von karadur (Gast)


Lesenswert?

Hallo

da liegen BIOS-Erweiterungen, die Grafikkarte und ein Fenster für 
EMM386.sys.

Unter DOS brauchte man himem.sys für den Speicher

von Georg (Gast)


Lesenswert?

Rolf F. schrieb:
> das I/O-Speicher in dem Bereich (640 Kib-1MiB) in den
> Arbeitsspeicher eingeblendet ist

Gehe zurück auf Anfang: erst musst du dich mal mit Adressräumen 
beschäftigen, besonders mit den beim 8086 (und vielen anderen 
Prozessoren) getrennten Memory- und I/O-Adressräumen. Wenn dir das so 
halbwegs klar ist, kannst du auch noch versuchen RAM und ROM 
auseinanderzuhalten. Dann bekommst du vielleicht einen Begriff davon was 
sich beim PC im ersten MByte so abspielt. Allerdings ist das nur 
Historie aus dem vorigen Jahrhundert.

Georg

von usuru (Gast)


Lesenswert?

Die ganzen Linuxe haben doch auch memtest an Bord!

von Rolf F. (Firma: G.) (benutzername0)


Lesenswert?

usuru schrieb:
> Die ganzen Linuxe haben doch auch memtest an Bord!

Genau darum geht es hier nicht.
Es soll nicht der Arbeitsspeicher getestet werden sondern Speicher der 
am ISA-Bus hängt.

von Rolf F. (Firma: G.) (benutzername0)


Lesenswert?

Peter II schrieb:
> Rolf F. schrieb:
>> outb(a, b),
>
> das scheibt doch aber nicht in den Ram sondern auf die IO-Adresse.

Ja, der Speicher ist ja nicht RAM sondern was anderes am ISA-Bus.

von Rolf F. (Firma: G.) (benutzername0)


Lesenswert?

karadur schrieb:
> Hallo
>
> da liegen BIOS-Erweiterungen, die Grafikkarte und ein Fenster für
> EMM386.sys.

Nein, das liegt alles unter 0xA0000, z. B. VGA/CGA Video bei 3D0-3DFh:

http://www.pcguide.com/ref/mbsys/res/ioSummary-c.html

von Peter II (Gast)


Lesenswert?

Rolf F. schrieb:
> Peter II schrieb:
>> Rolf F. schrieb:
>>> outb(a, b),
>>
>> das scheibt doch aber nicht in den Ram sondern auf die IO-Adresse.
>
> Ja, der Speicher ist ja nicht RAM sondern was anderes am ISA-Bus.

aber IO Adressen gibt es nur 65536 (16bit) Damit kann man kaum 640kbyte 
adressieren.

http://wiki.osdev.org/I/O_Ports

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Peter II schrieb:
> aber IO Adressen gibt es nur 65536 (16bit) Damit kann man kaum 640kbyte
> adressieren.
>
> http://wiki.osdev.org/I/O_Ports

Ja. Aber der ISA-Bus besteht nicht nur aus I/O-Adressen. Wie kommst Du 
darauf, daß das so sein sollte?

von uwe (Gast)


Lesenswert?

> Ja, der Speicher ist ja nicht RAM sondern was anderes am ISA-Bus.
Du mußt erstmal herausfinden wie bzw. wo der Speicher gemappt ist.
Da der IO-Bereich nur 16 Bit also von 0x0000 bis 0xFFFF geht und nichts 
mit dem Speicherbereich zu tun hat muß dein Speicher also memory mapped 
sein.
Auf ISA Karten war es üblich über Jumper den Adressbereich einzustellen.
Zeig doch mal die Karte!

von Peter II (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Ja. Aber der ISA-Bus besteht nicht nur aus I/O-Adressen. Wie kommst Du
> darauf, daß das so sein sollte?

ich habe doch nicht geschrieben, das es nur aus I/O Adressen besteht.

Wenn er aber mit:

> Dazu habe ich einfach, mit einem kleinen C-Programm unter Knoppix, Bytes
> in den Bereich geschrieben, mittels outb(a, b),

arbeitet, dann erreicht er nur die IO-Adressen.

Der Ram kann ja nur in den normales Ram, eingeblendet werden. Dann 
sollte es aber ein memtest auch prüfen können.

von (prx) A. K. (prx)


Lesenswert?

Peter II schrieb:
> aber IO Adressen gibt es nur 65536

Eigentlich 1024, denn bei den PCs mit ISA Bus wurden von den 16 
Adressbits nur 10 für die I/O-Adressierung verwendet.

von (prx) A. K. (prx)


Lesenswert?

Rolf F. schrieb:
> Nein, das liegt alles unter 0xA0000, z. B. VGA/CGA Video bei 3D0-3DFh:

Der Speicherbereich von Videokarten lag bei A0000-C7FFF, je nach Karte. 
Der Adressbereich C8000-DFFFF (anfangs mehr) stand anderen ISA-Karten 
zur Verfügung, beispielsweise für deren BIOS-Erweiterungen, oder für 
Speichererweiterung auf EMS Basis.

http://www.minuszerodegrees.net/5170/misc/5170%20-%20Memory%20Map%20of%20the%20640%20KB%20to%201%20MB%20Area.jpg

Bei PCs mit mindests 1MB Speicher stand der Bereich von A0000-FFFFF oft 
auch jenseits von FFFFF nicht zur Verfügung (was ab 286 prinzipiell 
möglich war). Im Bereich E0000-FFFFF wurde mitunter RAM als 
Schattenspeicher für das BIOS ROM verwendet, d.h. das BIOS kopierte sich 
ins RAM und schaltete dann darauf um, weil schneller.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Rolf F. schrieb:
> Herausgefunden habe ich zu dem Thema schon das eine Absonderheit des PC
> ist, das I/O-Speicher in dem Bereich (640 Kib-1MiB) in den
> Arbeitsspeicher eingeblendet ist, aber wieso hat das Einfluß auf das
> Beschreiben/Lesen von Ports in dem Bereich?

Der Begriff I/O-Speicher ist etwas missverständlich, da in diesem 
Bereich Speicher von I/O-Karten liegen konnte. Trotzdem war das ein 
Speicherbereich, kein I/O-Bereich.

> Dazu habe ich einfach, mit einem kleinen C-Programm unter Knoppix, Bytes
> in den Bereich geschrieben, mittels outb(a, b), aber der betreffende PC
> quittiert das nach ca. 100 Bytes mit einem spontanen Reboot!

Das ist ein sehr sicherer Weg, den PC abzuschiessen und nebenbei auch 
noch anderen Unfug zu stiften.

: Bearbeitet durch User
von uwe (Gast)


Lesenswert?

Immer schön auf IO-Port 0x01F7 die 0x50 schreiben...

von Rolf F. (Firma: G.) (benutzername0)


Lesenswert?

Peter II schrieb:
> Der Ram kann ja nur in den normales Ram, eingeblendet werden. Dann
> sollte es aber ein memtest auch prüfen können.

So einfach kann es nicht sein, denn das würde ja bedeuten das memtest 
bei abermillionen PCs, in denen kein RAM am ISA-Bus hängt, das den 
Bereicht 640 bis 1000 kiB bedeckt, ständig Fehler meldet.

von (prx) A. K. (prx)


Lesenswert?

Rolf F. schrieb:
> So einfach kann es nicht sein, denn das würde ja bedeuten das memtest
> bei abermillionen PCs, in denen kein RAM am ISA-Bus hängt, das den
> Bereicht 640 bis 1000 kiB bedeckt, ständig Fehler meldet.

In diesem Bereich findet kein RAM-Test statt. In heutigen PCs wird das 
RAM dieses Bereichs schlicht nicht verwendet und ist auch nicht 
ansprechbar.

: Bearbeitet durch User
von Rolf F. (Firma: G.) (benutzername0)


Lesenswert?

A. K. schrieb:

> 
http://www.minuszerodegrees.net/5170/misc/5170%20-%20Memory%20Map%20of%20the%20640%20KB%20to%201%20MB%20Area.jpg

Das Ding was ich hier habe liegt in dem Bereich "Optional motherboard 
ROM" und füllt ihn komplett aus.

von Ronny S. (phoenix-0815)


Lesenswert?

Rolf F. schrieb:
> Ich habe hier einen Rechner mit Speicher am ISA-Bus im Bereich 640
> KiByte (0x0A0000) bis 1 MiByte (0x100000) und möchte den Testen.
> Dazu habe ich einfach, mit einem kleinen C-Programm unter Knoppix, Bytes
> in den Bereich geschrieben, mittels outb(a, b), aber der betreffende PC
> quittiert das nach ca. 100 Bytes mit einem spontanen Reboot!

Hallo,
handelt es sich hier bei um eine 8bit Speichererweitereung Karte ?
Falls ja,da gab es früher schon ab und an einige Probleme mit.

Gruß Ronny

von (prx) A. K. (prx)


Lesenswert?

Rolf F. schrieb:
> Das Ding was ich hier habe liegt in dem Bereich "Optional motherboard
> ROM" und füllt ihn komplett aus.

Dann ist das wahrscheinlich eine EMS Karte. Deren Verwendung ist 
ziemlich spassbefreit. 
https://de.wikipedia.org/wiki/Expanded_Memory_Specification

von Peter X. (peter_x)


Lesenswert?

Eventuell vor dem Test die EGA/VGA raus und einen MDA (Herkules-Karte) 
einbbauen :-).

von Rolf F. (Firma: G.) (benutzername0)


Lesenswert?

Also ich nehme nun ein altes Programm von 1998, das den ISA-Speicher 
scannt: Skull, 
http://www.cs.fsu.edu/~baker/devices/lxr/http/source/ldd-examples/skull/skull_init.c

Es ist ja leicht da einen Speichertest einzubauen.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Das normale DRAM hat unter DOS3.3 HIMEM.SYS beim Start überprüft. Ich 
erinnere mich an die Fehlermeldung "HIMEM.SYS hat unzuverlässligen 
Speicher entdeckt". Durch Tauschen der DRAM-Module konnte ich das 
fehlerhafte finden.
Auf der Knoppix-DVD steht immer auch ein Speichertest im Auswahlmenü

von Sebastian Hepp (Gast)


Lesenswert?

Speichertests sind nicht so einfach, wie man vielleicht denkt. Oftmals 
macht einem der Cache einen Strich durch die Rechnung.

Denkt auch daran: Wenn man auf niedrigster Ebene Speicher in Adressen 
schreibt/liest, dann geht das, auch wenn kein physikalischer 
Speicherbaustein dahinter steckt. Die Werte sind dann entweder vom Cache 
bestimmt, undefiniert oder von den Bus-Pegeln abhängig, die da noch auf 
der Leitung sind. Deswegen reicht es nicht aus, einfach nur Nuller in 
Adressen zu schreiben und wieder zu lesen. Stellt euch vor, ein Bit wäre 
defekt und würde immer auf Null fallen: Diesen Fehler spürt man damit 
nicht auf.

Der Speicherbereich zwischen 0xA0000 und 0xFFFFF hängt auch sehr von der 
Hardware ab. Bei neuen PCs wird dieser Speicherbereich gerne ignoriert 
und als "nicht benutzbar" gekennzeichnet.

Es hängt jetzt davon ab, welche Hardware er testen möchte, denn danach 
entscheidet sich, ob man diese mit IO-Ports oder im Speicher 
(Memory-Mapped-IO) anspricht. Viele Hardware nutzt auch beide 
Möglichkeiten.

Eine Cirrus Logic Grafikkarte zum Beispiel. Wenn man diese im 80x25 
Zeichen Textmodus bei 4Bit Farbtiefe betreibt, werden Farbe und 
anzuzeigendes Zeichen in den Speicher bei 0xB8000 gemapped. Die 
einzelnen VGA Register werden aber mit IO-Ports angesprochen.

von aus der Steinzeit (Gast)


Lesenswert?

Wenn man das liest, kommen uralte, längst verdrängte Aplträume wieder 
hervor.

Das DOS-Gerümpel taucht immer wieder mal auf wie ein Zombie, einfach 
nicht totzukriegen, das überlebt uns alle.

von michael_ (Gast)


Lesenswert?

So eine Karte war damals sehr selten und unverschämt teuer.
Mit Sicherheit gab es dazu eine Treiberdiskette.
Wenn das DOS dazu noch existiert, such mal darauf den Treiber.
Ansonsten kann das Buch PC-Intern weiterhelfen.
Und mach mal ein Bild von der Karte!

Christoph Kessler (db1uq) schrieb:
> Auf der Knoppix-DVD steht immer auch ein Speichertest im Auswahlmenü

Und die soll auf der alten Dose laufen?

von Rolf F. (Firma: G.) (benutzername0)


Lesenswert?

michael_ schrieb:
> So eine Karte war damals sehr selten und unverschämt teuer.
> Mit Sicherheit gab es dazu eine Treiberdiskette.
> Wenn das DOS dazu noch existiert, such mal darauf den Treiber.
> Ansonsten kann das Buch PC-Intern weiterhelfen.

Nein, keine Karte sondern eine Leiterkarte angesteckt an PC/104.
Das stammt aus der Zeit weit vor Power-Loss-Protected SSDs.
Fehlertoleranz, z. B. dreifach Abspeichern und mit 2-von-3-Funktion 
fehlertolerant einlesen, wurde auch nicht verwendet.
Zu testen ist hier ein SRAM das batteriegespeist ist und das 
Steuersignale (r/w, ...) von einem Mikrocontroller der Leiterkarte 
bekommt.
Damit wird beim Schreib-Lesetest auch dessen Firmware teilweise 
getestet.

Als Testmuster nehme ich das traditonelle 0xaa 55 ff 00 und Zufallsbits 
mit einem Generator von den C FAQs. Das sollte genügen.

von Georg (Gast)


Lesenswert?

Rolf F. schrieb:
> Zu testen ist hier ein SRAM das batteriegespeist ist und das
> Steuersignale (r/w, ...) von einem Mikrocontroller der Leiterkarte
> bekommt.

Das ist jetzt aber keineswegs ein "Speicher am ISA-Bus"??

Georg

von Rolf F. (Firma: G.) (benutzername0)


Lesenswert?

Georg schrieb:
> Rolf F. schrieb:
>> Zu testen ist hier ein SRAM das batteriegespeist ist und das
>> Steuersignale (r/w, ...) von einem Mikrocontroller der Leiterkarte
>> bekommt.
>
> Das ist jetzt aber keineswegs ein "Speicher am ISA-Bus"??

Doch, mit Adress- und Datenleitungen ist dss SRAM am ISA-Bus.
Nur die Steuerleitungen sind managed.

von Andreas D. (rackandboneman)


Lesenswert?

memtest etc werden den Deibel tun zu Testzwecken einfach in 
Speicherbereichen rumzuschreiben die wahrscheinlich auf dem ISA-Bus 
liegen könnten, damit kann man ganz schnell einen Absturz provozieren 
oder in pathologischen Fällen sogar Datenträgerinhalte beschädigen.

Hauptspeicher auf dem ISA-Bus war bis in die späten 80er nicht unüblich. 
Nicht EMS nicht XMS sondern ganz "normaler" Hauptspeicher.

von (prx) A. K. (prx)


Lesenswert?

Andy D. schrieb:
> Hauptspeicher auf dem ISA-Bus war bis in die späten 80er nicht unüblich.
> Nicht EMS nicht XMS sondern ganz "normaler" Hauptspeicher.

Aber da waren es dann oft schon 386(SX) und dessen normaler 
Hauptspeicher jenseits 1MB wurde notfalls per EMM386 als emuliertes EMS 
eingebunden.

: Bearbeitet durch User
von michael_ (Gast)


Lesenswert?

Rolf F. schrieb:
> Nein, keine Karte sondern eine Leiterkarte angesteckt an PC/104.
> Das stammt aus der Zeit weit vor Power-Loss-Protected SSDs.

Kannst du denn nicht mal ein Bild machen?
Was ist bei dir "PC/104"? Ist das ein XT oder AT?
Wenn ISA-BUS, ist die Karte 8 oder 16 Bit?
Ich hab mal mein altes Buch "PC aufrüsten und reparieren" ausgekramt.
Dort werden solche Karten direkt in den Speicher eingeblendet.
Ganz ohne I/O.
Der Bereich von 640 - 1MB wurde meist über DIP eingestellt.
Unter DOS war dieser Bereich nur erreichbar, wenn er dem LIM/EMS 
Standard entsprach. DOS selbst kann nur 640KB.
Für AT-Rechner hatten solche Karten kaum Bedeutung. Diese wurden mit 
mindestens 1MB ausgeliefert.
Als Speichertest hab ich damals den aus den Norton-Utilities genommen.
Es gab da noch so eine Sammlung, leider ist mir der Name entfallen.
Irgendwo liegen die Diskettenschachteln noch herum.

von Rolf F. (Firma: G.) (benutzername0)


Lesenswert?

michael_ schrieb:
> Rolf F. schrieb:
>> Nein, keine Karte sondern eine Leiterkarte angesteckt an PC/104.
>> Das stammt aus der Zeit weit vor Power-Loss-Protected SSDs.
>
> Kannst du denn nicht mal ein Bild machen?

Das geht schlecht weil Firmen-Interna und es geht mir um den 
ISA-Speicher generell, nicht nur diese einzelne Leiterkarte.


> Was ist bei dir "PC/104"? Ist das ein XT oder AT?

Das ist ein gewöhnliches PC-Mainboard, nur das es klein ist und ein 
PC/104-Anschluß drauf ist.


> Ich hab mal mein altes Buch "PC aufrüsten und reparieren" ausgekramt.
> Dort werden solche Karten direkt in den Speicher eingeblendet.
> Ganz ohne I/O.

Ja, nur sind bei modernen Betriebssystemen die Adressen der Programme 
keine Hardware-Adressen, so das man da nicht einfach zugreifen kann 
sondern spezielle Funktionen dafür benötigt.


> Als Speichertest hab ich damals den aus den Norton-Utilities genommen.
> Es gab da noch so eine Sammlung, leider ist mir der Name entfallen.
> Irgendwo liegen die Diskettenschachteln noch herum.

Ich nehme lieber das Kernel-Modul Skull, denn das durchsucht den 
ISA-Speicher und listet auf was gefunden wurde.
Den Speichertest hinzuzufügen ist ja eine Kleinigkeit.
Und über per Skript das Modul pausenlos laden/entladen kann man auch 
einen Dauertest machen.

von michael_ (Gast)


Lesenswert?

Das ist ja ein moderner Computer mit 16-BIT ISA.
http://www.systerra.de/PC104.htm
Eigentlich sollte da die Dokumentation der Karte vorhanden sein.
Versuch doch mal in die PC-Bibel "PC-Intern" von M. Tischer 
reinzuschauen.
Es wird sich nichts großartig geändert haben.

von Andreas D. (rackandboneman)


Lesenswert?

"Ja, nur sind bei modernen Betriebssystemen die Adressen der Programme
keine Hardware-Adressen, so das man da nicht einfach zugreifen kann
sondern spezielle Funktionen dafür benötigt."

Deswegen nimmt ja auch für solche Testroutinen ein 
Realmode-Betriebssystem wie zB irgendein DOS. Oder schreibt sie autonom 
(wie memtest86) und lädt sie direkt über einen Bootloader (Grub ist ja 
sogesehen schon ein halbes DOS) ;)

von Rolf F. (Firma: G.) (benutzername0)


Lesenswert?

Also das geht nun unter Linux, mit dem Treiber aus dem Kapitel "ISA 
Memory below 1 MB", wobei man in dem über 11 Jahre alten Code "f_dentry" 
ersetzen muss durch "f_path.dentry".
Auf die Devices kann man damit wie gewohnt mit dd und seek/skip 
zugreifen - zweckmäßigerweise in der Datenbreite, in der man die 
Hardware zusammengelötet hat.

Es zeigte sich das das bei älteren Boards problemlos geht und bei 
neueren nicht, weil schon der Chipsatz die Signale (Small Memory Read 
(SMEMR),
Small Memory Write (SMEMW)) und die damit zusammenhängenden 
Daten/Adressen/Steuersignale) nicht rausgibt; die Pins sind da nur noch 
Fakes, weil noch die alten Bezeichnungen dran stehen, tatsächlich aber 
nur "not used" vorhanden ist.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.