Z80 Speicher auslesen
Konfiguration zum Auslesen von Z80 Speichern (2708) ohne Auslöten der EPROMs
In vielen alten Z80 Anwendungen wurden als Programmspeicher EPROMs vom Typ 2708 eingesetzt. Nach nunmehr über 20 Jahren gibt es in solchen Geräten hin und wieder Datenverluste. Um solche Geräte wieder zu reparieren, muss der Speicher von funktionierenden Modulen ohne Zerstörung ausgelesen werden. Zur Instandsetzung eines Roboters in den Technischen Sammlungen Dresden mussten Speicherkarten des Systems ausgelesen werden. Ein Programm für den Mikrocontroller SpartanMC realisiert das Signalspiel vom Systembus des im Roboter eingesetzten Z80 Systems (K1520 von ROBOTRON).Beim Auslesen wird über jeden EPROM eine CRC-Prüfsummen gebildet, die der Prüfsumme der damals verwendeten Programmiergeräte entspricht. Meist wurde auf die EPROMs ein Aufkleber mit dieser CRC-Summe angebracht. Beim auslesen kann so festgestellt werden welche EPROMs noch den richtigen Inhalt haben und welche fehlerhaft sind.
So konnte auch der fehlerhafte EPROM des Roboters gefunden werden und durch einen EPROM mit dem richtigen Inhalt ersetzt werden.
Das Programm stellt sofort nach dem Start eine Busanforderung BUSRQ damit beim Auslesen von Speicherinhalten auf Modulen mit einem Z80 (U880) dieser sich sofort vom Systembus trennt. Ist das erfolgreich, dann sendet die CPU das Signal Bus bereit BAO. Dieses Signal wird nach dem Start angezeigt und man kann wählen ob eine CPU-Karte oder eine Speicher-Karte ausgelesen werden soll. Ist es eine CPU-Karte, dann synchronisiert sich das Programm mit dem Takt CLK der Karte. Bei Speicherkarten erzeugt das Programm den CLK selbst. Im Programm wird jeder Speicherzyklus mit einer einstellbaren Verzögerung ausgeführt, um auch noch die High- und Low-Pegel von EPROMs richtig lesen zu können die nur durch Alterung langsam geworden sind. Die Zykluszeit des 2708 wurde mit maximal 450ns angegeben. Zu dieser Zeit muss bei den eingesetzten Speicherkarten dann noch die Verzögerungszeit der Bustreiber 8212 (30ns) und 8216 (30ns) in den Daten- und Adressleitungen addiert werden. Bisher hatten fehlerhafte EPROMs aber entweder einen permanenten Fehler, der auch bei niedrigen Geschwindigkeiten noch vorhanden war, oder sie haben den richtigen Inhalt erst bei Betriebstemperatur ausgegeben. Für die Stromversorgung wurde ein altes ATX-Netzteil eingesetzt, da diese vor dem Jahr 2005 auch noch die -5V für die EPROMs erzeugt haben.
Bilder zum System
Mit dem Systembilder erstelltes SVG-Bild der Konfiguration
Signale am Steckverbinder J3 der eingesetzten Spartan 3e Boards
Adapter 3e Hirose 100-pin FX2 Connector Pinout and FPGA Connections (J3) auf zwei mal Pfoste mit 25*2 Pin und 10*2 Pin. K1520 Signale K1520 Signale AB00 ° FX2_IO1 ° TDO_FX2 AB01 ° FX2_IO2 ° JTSEL AB02 ° FX2_IO3 ° TMS_B AB03 ° FX2_IO4 ° FX2_IP35 AB04 ° FX2_IO5 ° FX2_IP36 AB05 ° FX2_IO6 ° FX2_IP37 AB06 ° FX2_IO7 ° FX2_IP38 AB07 ° FX2_IO8 ° FX2_IP40 AB08 ° FX2_IO9 ° FX2_IO39 AB09 ° FX2_IO10 ° FX2_CLKOUT AB10 ° FX2_IO11 ° FX2_CLKIO AB11 ° FX2_IO12 ° FX2_CLKIN AB12 ° FX2_IO13 ° TCK_B AB13 ° FX2_IO14 ° TDO_XC2C AB14 ° FX2_IO15 ° - AB15 ° FX2_IO16 ° - /RD ° FX2_IO17 ° FX2_IO34 DB0 /WR ° FX2_IO18 ° FX2_IO33 DB1 /MREQ ° FX2_IO19 ° FX2_IO32 DB2 /MEMDI ° FX2_IO20 ° FX2_IO31 DB3 /BUSRQ ° FX2_IO21 ° FX2_IO30 DB4 /RESET ° FX2_IO22 ° FX2_IO29 DB5 Vcco_0 = Bank 0 /BAO ° FX2_IO23 ° FX2_IO28 DB6 (mit J9 auf 3,3 V oder 2,5 V) /M1 ° FX2_IO24 ° FX2_IO27 DB7 /RDY ° FX2_IO25 ° FX2_IO26 CLK ° GND ° Vcco_0 ° GND ° Vcco_0 ° GND ° Vcco_0 ° GND ° GND ° GND ° GND ° GND ° GND ° GND ° 5,0 V ° GND ° 5,0 V ° GND ° 5,0 V ° GND ° 5,0 V K1520 Signale Signale im Programm -- K1520 Signale _____ 5P °----|_____|----° /RFSH cl CLK 5k1 re RESET br /BUSRQ _____ md /MEMDI 5P °----|_____|----° /BAO mr /MREQ 5k1 wr /WR rd /RD _____ 5P °----|_____|----° /M1 ry /RDY 5k1 m1 /M1 ba /BAO _____ 5P °----|_____|----° /RDY 5k1
SpartanMC C-Programm zum auslesen der Speichermodule
- Protokoll vom Auslesen der CPU-Karte aus dem Bild und CRC-Vergleich EPROM00, EPROM04 und EPROM08
- Protokoll vom Auslesen der EPROM-Karte 1 aus dem Bild und CRC-Vergleich EPROM10, EPROM14, EPROM28fehler und EPROM28
- Protokoll vom Auslesen der EPROM-Karte 2 eines PHM40.
C-Programm zum Konvertieren der Dateien im S-Record Format in das Intel-Hex-Format oder in das binäre Format
- EPROM 2800 von der EPROM-Karte 1 als S-Record Datei
- EPROM 2800 von der EPROM-Karte 1 als Intel-Hex-Datei
- EPROM 2800 von der EPROM-Karte 1 im binären Format
- Protokoll der Konvertierung aus dem S-Record Format
Konfiguration im binären Format für den Spartan 3E Starter Kit auf der das Programm lauffähig ist.
- SPARTANMC.BIT Datei für das 3e Board und SPARTANMC.MSK Datei für Verify im iMpact (nur Jumper M1 geschlossen).
- M25P16.MCS Datei und M25P16.CFI Datei für den SPI-PROM des Spartan 3E Starter Kit (nur Jumper M0 offen).
- xcf04s.MCS Datei und xcf04s.CFI Datei für den Platform Flash-PROM des Spartan 3E Starter Kit (alle Jumper M0, M1 und M2 geschlossen). Diese 6 Dateien in ein Verzeichnis speichern und von dort mit dem iMpact in einen der PROMs oder die FPGA speichern.
- Konstanten der Konfiguration als Include peripherals.h und moduleParameters.h für dieser Konfiguration.
- Das Programm z80mem für diese Konfiguration als Quelle und im Listen Format.
- Aktuelle Protokolle vom Auslesen einer CPU-Karte und einer 16K Byte EPROM-Karte.
Konfiguration im binären Format für das Spartan 3E_1600 Board auf dem das Programm lauffähig ist.
- SPARTANMC.BIT Datei für das 3e 1600 Board und SPARTANMC.MSK Datei für Verify im iMpact (nur Jumper M1 geschlossen).
- M25P16.MCS Datei und M25P16.CFI Datei für den SPI-PROM des 3e 1600 Boards (nur Jumper M0 offen).
- xcf04s_0.MCS Datei und xcf04s_0.CFI sowie xcf04s_1.MCS Datei und xcf04s_1.CFI Datei für die Platform Flash-PROMs des 3e 1600 Boards (alle Jumper M0, M1 und M2 geschlossen). Diese 8 Dateien in ein Verzeichnis speichern und von dort mit dem iMpact in einen der PROMs oder die FPGA speichern.
- Konstanten der Konfiguration als Include moduleParameters.h und peripherals.h für dieser Konfiguration.
- Das Programm z80mem für diese Konfiguration als Quelle und als Liste.
- Aktuelle Protokolle vom Auslesen einer CPU-Karte, der 1. 16K Byte EPROM-Karte und der 2. 16k Byte EPROM-Karte des PHM41.
- Liste aller CRC-Summen des PHM41 und Protokoll der Fehlersuche auf der 2. EPROM-Karte
- Protokoll vom Auslesen eines KC85/1 Basic Moduls mit 5*2716 ab 0xC000
Instandsetzung des Industrieroboters in den technischen Sammlungen Dresden
Neben einigen anderen Fehlern hatte auch der Steuerechner des Industrieroboters einen Speicherfehler im Steuerprogramm. Dieser Fehler wurde mit dem oben beschriebenen System erkannt und konnte beseitigt werden. Der Roboter arbeitet nun wieder.Bilder zum Roboter
Video 1 zum Roboter PHM40 als MOV
Video 2 zum Roboter PHM40 als MOV
Video 2 zum Roboter PHM40 als mp4