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(external link) 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

Image Image Image Image Image Image
Image
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
Beim Auslesen der EPROM-Karte 1 wird zunächst beim EPROM auf Adresse 0x2800 ein falscher CRC von 0x1AB0 ermittelt. Nachdem alle EPROMs der Karte eingelesen waren wurde der EPROM im warmen Zustand noch einmal eingelesen. Dabei konnte der richtige Inhalt mit dem CRC 0x3A44 (wie im Bild) eingelesen werden.

C-Programm zum Konvertieren der Dateien im S-Record Format in das Intel-Hex-Format oder in das binäre Format

Konfiguration im binären Format für den Spartan 3E Starter Kit auf der das Programm lauffähig ist.

  1. SPARTANMC.BIT Datei für das 3e Board und SPARTANMC.MSK Datei für Verify im iMpact (nur Jumper M1 geschlossen).
  2. M25P16.MCS Datei und M25P16.CFI Datei für den SPI-PROM des Spartan 3E Starter Kit (nur Jumper M0 offen).
  3. 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.
  4. Konstanten der Konfiguration als Include peripherals.h und moduleParameters.h für dieser Konfiguration.
  5. Das Programm z80mem für diese Konfiguration als Quelle und im Listen Format.
  6. 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.

  1. SPARTANMC.BIT Datei für das 3e 1600 Board und SPARTANMC.MSK Datei für Verify im iMpact (nur Jumper M1 geschlossen).
  2. M25P16.MCS Datei und M25P16.CFI Datei für den SPI-PROM des 3e 1600 Boards (nur Jumper M0 offen).
  3. 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.
  4. Konstanten der Konfiguration als Include moduleParameters.h und peripherals.h für dieser Konfiguration.
  5. Das Programm z80mem für diese Konfiguration als Quelle und als Liste.
  6. Aktuelle Protokolle vom Auslesen einer CPU-Karte, der 1. 16K Byte EPROM-Karte und der 2. 16k Byte EPROM-Karte des PHM41.
  7. Liste aller CRC-Summen des PHM41 und Protokoll der Fehlersuche auf der 2. EPROM-Karte
  8. Protokoll vom Auslesen eines KC85/1 Basic Moduls mit 5*2716 ab 0xC000
Anleitung zum Auslesen von K1520 EPROMs.

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

Image Image Image Image Image

Video 1 (external link) zum Roboter PHM40 als MOV
Video 2 (external link) zum Roboter PHM40 als MOV
Video 2 (external link) zum Roboter PHM40 als mp4


SpartanMC