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
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.
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.
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.
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
Vergessen: Falls du keinen Epromsimmulator hast wird das ein steiniger Weg. Vieleicht ist die Tonne die bessere Lösung. Thomas
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
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
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.
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.
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
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
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
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
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.
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.
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
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.
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
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
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.
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
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
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?
Hallo Forum, hab mal einen Schaltplan für das besprochene System beigefügt, vielleicht hilft das für das Verständnis. VG
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
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
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
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
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.
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
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.
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.
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
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.