Forum: Mikrocontroller und Digitale Elektronik 8085 Embedded Project


von Matthias B. (Firma: BAT) (matbit)


Lesenswert?

Hallo Forum,

für eine etwas antiquierte Steuerung einer Prozessanlage will ich ein 
neues Programm schreiben, das von einem Host-PC über RS232 auf 
verschiedene Geräte zugreift. Die Geräte sind in einem Token-Ring 
miteinander verbunden, der PC dient dabei als Master. In einem dieser 
Geräte ist das System-EPROM defekt, Daten verloren! Das Memory-Mapping 
is bis auf das EPROM mit 64k unbekannt. Es müssen aber die folgenden 
IC`s angesprochen werden: 2x 8155 RAM/IO, 8251 USART, 1x RAM 2k. Wie 
kann ich ein Assemblerprogramm herstellen, das mir mindestens die 
I/O-Addressen des RAM oder des USART ermittelt. Ich kann ohne Addressen 
ja auf kein RAM schreiben. Ich müsste die I/O-Addressen durchscannen mit 
OUT XX und den AUsgang beobachten. Hat vielleicht jemand eine Idee? 
Prozessor 8085

VG

von Karl M. (Gast)


Lesenswert?

Hallo,

über einen Schaltplan, also reverse engineering aller Bauteile.
Das ist bei diesen großen Strukturen kein Problem. Datenblätter gibt es 
noch und die grundlegende Funktion ist wohl bekannt.

von Matthias B. (Firma: BAT) (matbit)


Lesenswert?

Hallo Karl M.,

vielen Dank für Deine schnelle Antwort. Sie nützt mir allerdings nicht 
viel. Das CH (chip enable) wird über ein PAL realisiert. Programmierung 
unbekannt, Schaltplan null. Wo soll ich anfangen. Ich könnte OUT 00 
anfangen und entweder alle Basisaddressen im Assembler auflisten oder 
nach und nach im Zufallsprinzip ausprobieren.

Ich weiss nicht ob das geschickt ist.

von Pandur S. (jetztnicht)


Lesenswert?

Die kurze Antwort : in die Tonne damit, Deckel drauf.

Die lange Antwort :
Der 8085 laeft den code ab EPROM, oder allenfalls einem 
(EPROM-)Emulator.
Allenfalls auch ab RAM wenn man den Code dort hin bekommt. Die 
Adressierung muss einfach passen.

Also, du hast einen 8085 ASM ? Da den Code schreiben, zu einem IntelHex 
uebersetzen lassen und ins EPROM damit.

Das Programm zur Adressermittlung waere eins dass alle Adressen (2^16) 
liest. Dann geht man mit dem Adressbus auf den logikanalyzer und mit dem 
Chipselect des RAMs und dem Chipselect des UART auch.

Ich schaetze so ein Programm auf 6 Zeilen ASM ein. Bin aber mit 8085 
nicht mehr so vertraut, mit 8086 waer ich's noch.

von Thomas (Gast)


Lesenswert?

Nun einfach ein Testprogramm schreiben das zyklisch out Befehle von 0 
bis ff sendet. Wenn ich mich richtig erinnere hat der 8155 4 Adressen im 
IO Bereich. Dazu kommt dann noch das RAM. Du kannst dann Das CS Signal 
mit dem Oszi messen und mit dem Addressbus vergleichen.
Achtung:
Die RamAdressierung ist beim 8155 Tricky. Ich habe aber zuletzt vor 25 
Jahren mit dem Teil gearbeitet kann mich also an Details nicht 
erinneren.
Was ich noch weiß ist, dass beim 8085 beim out Befehl das high Byte der 
Adresse gleich der out Adresse ist.
Das Speicher kannst du mit einem Speichertestprogramm ermitteln. Sobald 
der 8155 läuft kannst du den zur Status ausgabe nutzen.
Lang ists her.....
Thomas

von Thomas (Gast)


Lesenswert?

Vergessen:
Falls du keinen Epromsimmulator hast wird das ein steiniger Weg. 
Vieleicht ist die Tonne die bessere Lösung.
Thomas

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Matthias B. schrieb:
> Das CH (chip enable) wird über ein PAL realisiert.

Piepse dann wenigstens mal durch, welche Signale das PAL von der CPU 
bekommt. /IOWR, /IORD, /MEMW und /MEMR müssten auf jeden Fall dran 
liegen, und dann ein paar Adressleitungen. Das schränkt die 
Möglichkeiten schon mal ein.

Wie beim 8051 wird Adressbus A0-A7 mit D0-D7 gemultiplext, die Chancen 
stehen aber gut, das diese Adressbits gar nicht zur Dekodierung benutzt 
werden bei den paar Peripheriebausteinen. Wenn der ROM und der RAM 
allerdings ein Standard Jedec ist, muss für diese ein Latch (373, 374 
o.ä.) auf dem Board sein.
Die 1/2 Quarzfrequenz stellt der Prozessor an einem Ausgang bereit und 
damit wird dann mögl. der UART versorgt.

> das EPROM mit 64k
Ist das ein 27512? Das wäre etwas ungewöhnlich, denn der 8085 wäre damit 
voll belegt und könnte das 2k RAM gar nicht mehr addressieren - ausser 
mit Bankswitching Klimmzügen.

Evtl. ist ein 'NOP-Stecker' hilfreich. Dazu verdrahtet man ein EPROM 
kompatiblen Sockel mit der NOP Instruktion und steckt ihn in den EPROM 
Sockel. Der Prozessor klappert dann einfach alle Adressen nacheinander 
durch. Damit bekommt man zumindest schon mal das Memory Mapping.

: Bearbeitet durch User
von Thomas (Gast)


Lesenswert?

Ja Schaltplan aufnehmen ist auf jeden fall erst mal angesagt. Wie gesagt 
die 8155  waren ziemlich tricky. Mit CPU Latch EPROM und 8155 könnte man 
ohne gluelogig ein komplettes Controller System aufbauen mit vielen EAs 
und RAM.
Heute kann das jeder poplige Controller aber die Teile sind ja auch 40 
Jahre alt.
Thomas

von Georg G. (df2au)


Lesenswert?

Matthias B. schrieb:
> wird über ein PAL realisiert

Welche Sorte PAL? Die uralten kann man auslesen. Und die Belegung der 
Eingänge aus zu klingeln sollte maximal 10 Minuten dauern.

Zeig mal ein Foto der Platine. Soooo aufwendig kann die doch nicht sein.

von MaWin (Gast)


Lesenswert?

Matthias B. schrieb:
> Wie kann ich ein Assemblerprogramm herstellen, das mir mindestens die
> I/O-Addressen des RAM oder des USART ermittelt.

Nun, das sind ja einzelne Bausteine mit CE Leitung.

Erfasse also die CE Leitung, und probiere alle Adressen durch. Das kann 
ein festes Programm ohne Variablen machen. Die Adresse selbst erscheint 
in dem Moment auf dme Bus, die höherwertigen 8 bit im sicher vorhandenen 
Latch.

Bleibt der Trick, den Prozessor anzuhalten, wenn CE ausgelöst wird.

So weit ich weiss ist der 8085 zwar statisch, hat aber keinen WAIT 
Eingang sondern nur HOLD (dann ist der Bus aber abgeschaltet).

Man müsste also, wenn CE low geht, den Takt anhalten.

von 6a66 (Gast)


Lesenswert?

Matthias S. schrieb:
> Ist das ein 27512? Das wäre etwas ungewöhnlich, denn der 8085 wäre damit
> voll belegt und könnte das 2k RAM gar nicht mehr addressieren - ausser
> mit Bankswitching Klimmzügen.

Na das Ausblenden des SRAM geht doch mit PAL hervorrangend OHNE 
Bankswitching :)

rgds

von Matthias B. (Firma: BAT) (matbit)


Lesenswert?

Hallo Thomas,

leider bin ich nicht mit allen Wassern, was Assembler betrifft, 
gewaschen. Wie kann ich denn den OUT-Befehl in einer Schleife ändern? 
Ich hab doch nur das EPROM. Ich könnte natürlich das 2.Byte des Befehls 
in einer Schleife durch z.B. mov a,c ändern, dafür müßte ich aber eine 
RAM-Addresse, die ich nicht hab, ansprechen bzw. das ganze Programm auf 
das RAM laden. Geht ja nicht.
VG

von Thomas (Gast)


Lesenswert?

Ich hab gerade noch mal nachgeschaut der 8155 hat 3 Adressleitungen wenn 
also A0 bis A2 auf den auf dem 8155 aufgelegt sind dann einfach
Org 0
      Out 000h
      Out 008h
      Out 010h
      ......
      Out  0F8h
      Jmp 0
Mit anderen Worten:
Alle Adressen mit einem vielfachen von 8 ausgeben und dann messen. Der 
Wert ist erst mal egal. Du dürftest dann CS Signale sehen. Ein Trigger 
auf das CS und und messen an A2 bis A7 dürfte die EA Adresse zeigen.
Genauso kannst du mit dem RAM Vorgehen dort würde ich 2k Schritte 
nehmen.
Wie andere schon geschrieben haben die Belegung des pals wäre hilfreich.
Wie gesagt alles aus der Erinnerung ist schon lange her. Ich bin mir 
noch nicht mal über die Mnemonics mehr sicher......
Thomas

von Sebastian (Gast)


Lesenswert?

Hallo,

Reverse-Engineering lohnt doch nicht, wenn morgen ein anderes Teil 
kaputt ist hast Du das gleiche Problem wieder.

Hast Du Unterlagen übder die Programmierung der Anlage? Wenn ja, mach 
auf jeden fall einen Retrofit mit eine Steuerung die langfristig 
verfügbar ist, und wo man teile im Zweifelsfall bei ebay bekommt,... 
Siemens S7,... . Auch sonst, das OS,... nachzuimplementieren, das ist 
sehr wahrscheinlich komplexer als einen Retrofit zu mahcne.

Grüße

Sebastian

von Route_66 (Gast)


Lesenswert?

Hallo!
Schrittweise vorgehen: erst RAM-Adresse finden.
Programm schreiben:
lange Pause (z.B. 1 Sekunde)
Schreiben auf Adr 0000h

lange Pause
2 x Schreiben auf Adr 0800h mit einer kurzen Pause (z.B. 100 ms) 
dazwischen

lange Pause
3 x Schreiben auf Adr 1000h mit zwei kurzen Pausen (z.B. 100 ms) 
dazwischen

lange Pause
4 x Schreiben auf Adr 1800h mit drei kurzen Pausen (z.B. 100 ms) 
dazwischen

usw. bis Adresse 0F800h

und wieder von vorn.

Mit Logikprüfstift oder Oszi kann am CE vom RAM mitgezählt werden:
lang-kurz-kurz-lang bedeutet also adresse 1000h-17FFh für das 2 K RAM.

von Route_66 (Gast)


Lesenswert?

Thomas schrieb:
> Ich hab gerade noch mal nachgeschaut der 8155 hat 3 Adressleitungen wenn
> also A0 bis A2 auf den auf dem 8155 aufgelegt sind dann einfach
> Org 0
>       Out 000h
>       Out 008h
>       Out 010h
>       ......
>       Out  0F8h
>       Jmp 0
> Mit anderen Worten:
> Alle Adressen mit einem vielfachen von 8 ausgeben und dann messen. Der
> Wert ist erst mal egal. Du dürftest dann CS Signale sehen. Ein Trigger
> auf das CS und und messen an A2 bis A7 dürfte die EA Adresse zeigen.

Auch hier kann bei geschickter Einfügung von kurzen und langen Pausen 
einfach mitgezählt werden.

Logikprüfstift mit Impulsanzeige gehört irgendwie zur Grundausstattung.
Kann auch leicht als Monoflop mit einer LED auf dem Steckbrett 
zusammengeschustert werden.

von Matthias B. (Firma: BAT) (matbit)


Lesenswert?

Hallo an alle,
vielen Dank für die vielen Antworten, kann nicht alle auf einmal 
bedienen.

Das mit der Tonne war sicher auch mein erster Gedanke. Beim näheren 
Betrachten des Problems erschien aber die Softwarelösung gegenüber einer 
kompletten Neuauflage des Systems, besonders wegen dem damit verbundenen 
Hardwareaufwand, als die wirtschaftlichere Alternative. Der 8085 rechnet 
in so einer Anwendung ja völlig ausreichend.

Das EPROM ist ein 64k-bit 27C64 und ist über einen Latch 74LS373 mit den 
LSB Adressen verbunden, die oberen Addressen A8 - A12 direkt über einen 
Buffer.
Die obersten Addressen A10 - A15 werden für den CS über das PAL genutzt.

Mein Plan war ursprünglich den 8251 USART anzusprechen und im Falle der 
richtigen Addresse dann eine Sequenz über RS232 an HyperTerminal zu 
schicken. z.B. "Hallo hier 8085, Addresse xxxx". Damit erstmal testen, 
ob generell das CS und die Datenverarbeitung funktioniert. Dann weiter 
das
MemoryMap rekonstruieren.

VG

von Route_66 (Gast)


Lesenswert?

Matthias B. schrieb:
> Mein Plan war ursprünglich den 8251 USART anzusprechen und im Falle der
> richtigen Addresse dann eine Sequenz über RS232 an HyperTerminal zu
> schicken. z.B. "Hallo hier 8085, Addresse xxxx".

Das ist wohl zeitaufwändiger als erst mal über die Blinkerei das 
Memory-Map (dann kann man für die nächsten Schritte Subroutinen 
verwenden) und das I/O-Map herausfinden.

von Thomas (Gast)


Lesenswert?

Ja machen kann man viel ist halt eine Frage des Aufwands. Wie schon 
gesagt ohne Epromsimmulator steinig deshalb würde ich am Anfang die 
Programme kurz und einfach halten.
Ich hab mit Sicherheit inzwischen mehr vergessen als ich noch in 
Erinnerung habe.
Trotzdem würde ich mir noch zutrauen das Teil innerhalb 2h reverse zu 
'engineeren'
Ich hätte vermutlich das RAM ab E000h gelegt und am PAL A13 bis A15 
aufgelegt.
Leider hab ich keinen Epromsimmulator mehr.
Die alten Entwicklungsumgebungen und einen C Compiler hab ich noch.
Thomas

von Thomas (Gast)


Lesenswert?

Route_66 schrieb:
> Das ist wohl zeitaufwändiger als erst mal über die Blinkerei das
> Memory-Map (dann kann man für die nächsten Schritte Subroutinen
> verwenden) und das I/O-Map herausfinden.
Dann mach das mal ohne Stack den hast du nicht solange du keine RAM 
Adressen kennst
Also nichts mit Call und so nur jmp und eine Abfolge von Befehlen
Thomas

von PittyJ (Gast)


Lesenswert?

Mach es neu!
Sonst holt dich das gleiche Problem in 2 Jahren wieder ein, wenn der 
nächste Chip kaputt geht.

Neu machen, dokumentieren, dann geht es wieder 20 Jahre lang.

von Georg (Gast)


Lesenswert?

MaWin schrieb:
> Bleibt der Trick, den Prozessor anzuhalten, wenn CE ausgelöst wird.

Wozu? CE an den Triggereingang eines Oszis und die Adressbits ablesen - 
muss nicht mal ein Speicheroszi sein.

Ausserdem, wenn man sowieso das Programm schreiben muss, ist es ziemlich 
egal auf welche Adressen ein Chip dekodiert ist, da kann man sich selbst 
ein PAL ausdenken, man muss sich ja bloss mit sich selbst einigen.

Georg

von Thomas (Gast)


Lesenswert?

Ok gerade erst gesehen... A10 Und A11 Am PAL würde ich so interpretieren 
dass die das 2k RAM vollständig audekodiert haben. der Speichertest muss 
also in 2k Schritten ab 2000h erfolgen (0000h-1FFFh ist das Eprom).
Mehr wenn du die vollständige Belegung des Pals angibst und den Typ 
sagst.
Thomas

von michael_ (Gast)


Lesenswert?

Matthias B. schrieb:
> In einem dieser
> Geräte ist das System-EPROM defekt, Daten verloren!

Den würde ich aber noch mal untersuchen!
Mit verschiedenen Programmern versuchen auszulesen.
Vielleicht mit etwas erhöhter Spannung, Kälte, Wärme.
Oder in einer Schaltung auslesen, welche eine sehr geringe Busbelastung 
hat.
Das hatte damals oft Erfolg, wo einzelne Bit gekippt waren.

Ist der den total tot?

von Matthias B. (Firma: BAT) (matbit)


Angehängte Dateien:

Lesenswert?

Hallo Forum,

hab mal einen Schaltplan für das besprochene System beigefügt, 
vielleicht hilft das für das Verständnis.

VG

von Georg (Gast)


Lesenswert?

Matthias B. schrieb:
> Die Geräte sind in einem Token-Ring
> miteinander verbunden, der PC dient dabei als Master. In einem dieser
> Geräte ist das System-EPROM defekt, Daten verloren!

Gaaanz andere Frage: eines von mehreren Geräten ist defekt - haben die 
denn alle verschiedene Hardware und Programme? Ein Entwickler der bei 
Verstand ist baut doch alles möglichst aus wiederverwendbaren Teilen 
auf.

Wenn das zutrifft, würde ich mal ein anderes Systemeprom duplizieren und 
einsetzen, was soll schon passieren. Wenn ich das System gemacht hätte, 
würde sich das defekte System wenigstens am Tokenbus melden.

Georg

von Thomas (Gast)


Lesenswert?

Das ist kein Schaltplan sondern eine Zumutung was soll das ohne Labels 
an den Bussen.
Kann die Belegung Würfeln?
So kann dir keiner helfen und du musst das leider selber machen.
Thomas

von Matthias B. (Firma: BAT) (matbit)


Lesenswert?

Georg und Michael,

du hast Recht, das EPROM benötigt ja die ersten Plätze bis 1FFF. Und ein 
PAL mit einem eigenen Mapping wäre natürlich möglich, aber habe kein 
PAL- Programmiergerät und auch kein PAL... ist übrigens ein PALCE16V8.

Das EPROM zeigt nur Müll, Lauter FF die als RST7 interpretiert sind und 
ab und zu mal ein paar OUT's und IN's oder MOV's hin und wieder ein MVI 
A,0FFH aber nichts systematisches.

VG

von Matthias B. (Firma: BAT) (matbit)


Lesenswert?

Thomas das tut mir leid, der Schaltplan ist leider erst ein Entwurf und 
natürlich vollkommen unvollständig. Ich dachte nur, er zeigt die IC's 
die eingesetzt sind und einige wesentlichen Verbindungen.
Mehr kann ich bis jetzt noch nicht zeigen.

VG

von Jay (Gast)


Lesenswert?

Matthias B. schrieb:
> Das mit der Tonne war sicher auch mein erster Gedanke. Beim näheren
> Betrachten des Problems erschien aber die Softwarelösung gegenüber einer
> kompletten Neuauflage des Systems, besonders wegen dem damit verbundenen
> Hardwareaufwand, als die wirtschaftlichere Alternative. Der 8085 rechnet
> in so einer Anwendung ja völlig ausreichend.

Die Kosten liegen aber nicht nur in neuer Hardware. Das sind Peanuts 
gegenüber der Zeit für das Reverse-Engineering der Hardware und dem 
Schreiben von Assembler-Code.

Hast du die alte Hardware endlich reverse-engineered stehst du immer 
noch vor dem Hauptproblem: Wie wird die an der Steuerung hängende Anlage 
eigentlich gesteuert, also was hat die Steuerung so getrieben? Dabei 
hilft dir das Reverse-Eingineering der Hardware gar nicht. Also würde 
ich meine Zeit und Energie nicht in das Reverse-Eingineering stecken 
sondern mich darauf konzentrieren herauszufinden wie die Anlage 
gesteuert wird.

Hast du es herausgefunden kommt dir eine moderne Hardware entgegen, 
statt dass du dich mit 8085 Assembler beschäftigen musst.

von Thomas (Gast)


Lesenswert?

Naja dann hast noch gar nichts falsch ist der Plan auch noch WR ist an 
den 8155 nicht angeschlossen.

Was ich überhaupt nicht verstehe

Die wichtigen Leitungen laufen zig mal über Kreuz da kommt ja niemand 
mit.
Wie kann man Schaltpläne nur so unübersichtlich gestalten.

Dein PAL ist uebrigens gar kein Pal sondern ein GAL.

Aber Gnd ist beschriftet.
Thomas

von karadur (Gast)


Lesenswert?

Falls der PAL gesteckt ist würde ich die 64 Kombinationen an den 
Eingängen probieren und schauen welcher Ausgang aktiv wird.

Da der Clock-Eingang nicht verwendet ist sollte das statisch sein.


Falls CPU gesteckt könnte man auch dort die oberen Adressen zum PAL 
anlegen.

von Soul E. (Gast)


Lesenswert?

Matthias B. schrieb:

> Geräte ist das System-EPROM defekt, Daten verloren!

Falls das letztere zutrifft d.h. das EPROM nicht defekt ist sondern nur 
seine Daten verloren hat, dann pack es mal in einen EPROMmer und lies es 
dort aus.

EPROMs werden langsamer, wenn sie ihre Gate-Ladung verlieren. Das gibt 
dann bei 2 MHz Prozessortakt Lesefehler. Bei den 100 kHz, mit denen ein 
EPROMmer (oder was vergleichbares selbstgebasteltes) zugreift, schalten 
die Transistoren dann doch noch durch.

von Thomas (Gast)


Lesenswert?

Noch ein paar Hinweise zum Schaltplan:
die 8155 hängen ganz sicher nicht am Addressbus.
IOM ist an der CPU nicht angeschlossen.
Es könnte sein das die 8155 memory mapped bedient werden dann gehen die 
Out Befehle nicht. Für mich sieht das Ganze so aus als wenn der 
Entwickler nicht so viel Durchblick gehabt hat das GAL hätte man locker 
einsparen können ein einfaches LS138 reicht.

Thomas

von klick klack (Gast)


Lesenswert?

Schon mal versucht das GAL auszulesen ? Wenn es nicht gesichert ist, 
kannst du die Logik aus den Bits rekonstruieren - Kopie der 
Innenschaltung und Bleistift sollte dafür genügen.

von Matthias B. (Firma: BAT) (matbit)


Lesenswert?

Die 8155 sind definitiv nicht memory mapped. IO/M geht über den LS244, 
I1A/O1A an die RAM's.

Warum hier die PAL oder GAL für die Dekodierung eingesetzt werden, weiss 
wohl nur der anglesächsische Hersteller. Wenn es sich herausstellt, daß 
das GAL/PAL gesperrt ist, kann der Grund dafür wohl auch im 
Urheberrechtlichen Schutz begründet sein.

VG

von Thomas (Gast)


Lesenswert?

Matthias B. schrieb:
> Die 8155 sind definitiv nicht memory mapped. IO/M geht über den
> LS244, I1A/O1A an die RAMs
Woher weißt du das? Wenn IOM nicht am GAL liegt sind die definitiv 
memory mapped Die SIO betrifft das genauso.
Aber ohne Schaltplan ist das alles nur im Nebel stochern.
Thomas

von Matthias B. (Firma: BAT) (matbit)


Lesenswert?

Hallo Thomas,

bitte versteh das mit dem Schaltplan nicht falsch. Das ist für mich wie 
eine Gedankenstütze. Jedesmal, wenn ich was durchgebimmelt hab, mach ich 
ne Verbindung auf dem Schaltplan. So brauch ich nicht immer wieder neu 
zu piepen, wenn ich was in Erfahrung bringen will. Der Schaltplan wächst 
bei mir daher immer weiter bis er schließlich ein für mich oprimales 
Bild erzeugt. Du hast natürlich Recht, für eine Veröffentlichung ist er 
so nicht geeignet.

VR

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.