Forum: Mikrocontroller und Digitale Elektronik ASM-Code aus 1980/1990 assemblieren


von Felix B. (Gast)


Lesenswert?

Hallo Gemeinde,
ist stehe aktuell vor dem Problem, für die Arbeit folgendes Programm aus 
den 80er/90er Jahren, welches unter MS-DOS programmiert wurde, zu 
assemblieren. Ich habe gute Vorkenntnisse in AVR Basic, c/c++, Ardunio C 
und ein wenig Pic Assembler und andere anderer Technologien.
Nun komme ich nicht weiter und freue mich über Tipps und neue 
denkanstöße.
Wer mir weiter helfen möchte, bitte ich, den Code welcher Stellenweise 
mit ... zensiert ist, mal zu analysieren. Ist das evtl. eine besondere 
Form Assembler? Programmiersprachen entwickeln sich ja schließlich auch 
weiter.
Ich weiß, dass die Programme funktionieren, ich habe auch die Hexen. 
Wenn ich die Programme z.B. in AVR-Studio oder MPLAB lege, melden alle 
versuchten Programme (auch weitere) den ersten Fehler in Zeile 
"FLAG_START BIT     7FH" . Er kennt alles in diesen und folgenden Zeilen 
nicht.
"...: error: FLAG_START: Unknown instruction or macro"
usw.
Der Code ist für ein Eprom in einer Steuerung.
Für mich ist nun wichtig, diese Programme welche unter MS-DOS keine 
Probleme darstellen unter win7 zum Laufen zu bekommen. Unter DOS wurde 
mal mit ASM51 gearbeitet. Aber diese Entwicklungsumgebung steht nicht 
mehr bzw. war auch nicht von mir.
Evtl. kann mir auch jemand ein Programm für win7 empfehlen welches nicht 
wie die zwei genannten Herstellerbezogen ist, sondern reine Assembler 
assemblierer sind.

Ich freue mich auf eure Nachrichten :)
1
;
2
;PROGRAM
3
;Bitadressen (Bereich 00H ... 7FH) im Speicher (20H ... 2FH)
4
;
5
FLAG_START              BIT     7FH
6
FLAG_STOP               BIT     7EH             
7
FLAG_TISCH_C            BIT     7DH
8
...
9
...
10
;
11
;                       BIT     71H
12
FLAG_SCHRIT             BIT     70H
13
;                       BIT     6FH
14
;                       BIT     6EH
15
FLAG_AUTOMATIK          BIT     6DH
16
...
17
;                     BIT     68H
18
;            BIT  67H  
19
;      BIT     66H
20
;      BIT     65H
21
;====================================================
22
;EINGANGE:
23
;A___________________________ #4020H
24
;Greifer_hinten                 #01H       
25
...  
26
;
27
;B___________________________ #4021H
28
...     
29
;
30
;C___________________________ #4022H
31
...   
32
;
33
;D___________________________ #4023H
34
...
35
;                      
36
;A___________________________ #4040H
37
...
38
;                               #80H
39
;B___________________________ #4041H
40
...
41
;                               #40H
42
;                               #80H
43
44
45
;====================================================================
46
47
48
49
;Byteadressen (Bereich 30H..7FH) im Speicher (00H.BANKS.1FH-BIT-30H.FREE.7FH)
50
;
51
KLEMME_1_OFFNER    EQU     30H             ;C10:#8020H
52
S_ZUFUHRUNG    EQU     31H             ;C11:#8021H
53
...
54
;
55
;**********************************************************
56
;
57
...                  
58
;        EQU     51H     
59
KAPPE_1_SUMM_ERROR              EQU     52H
60
...
61
;                               EQU     56H
62
;                               EQU     57H 
63
...
64
LANGE_SUMM_ERROR                EQU     59H
65
;         EQU     5AH
66
;                          EQU     5BH
67
STATION_NUMMER      EQU     5CH
68
;
69
;
70
;61H TO 78H
71
;TO 7FH
72
;********************************************************
73
;
74
PROGRAMM_START:
75
  ;
76
  LJMP    BEGIN
77
  ;
78
  org     3H                              ;INT extern 0
79
  LJMP    START
80
  ;
81
  org     0BH                             ;INT Timer 0
82
  RETI
83
  ;
84
  org     13H                             ;INT extern 1
85
  LJMP    STOP
86
  ;
87
  org     1BH                             ;INT Timer 1
88
  RETI
89
  ;
90
  org     23H                             ;INT serielle Schnittstelle
91
  LJMP    SERIELLE_SCHNITTSTELLE
92
  ;
93
;****************************************************************************
94
  ;
95
  ORG     100H
96
  ;
97
BEGIN:
98
  LCALL  INIT
99
  SETB    FLAG_STOP
100
  CLR     FLAG_START
101
...
102
  CLR     FLAG_DRUCK
103
  ;
104
  MOV     ...
105
...
106
  MOV     LANGE_SUMM_ERROR,#00H
107
  ;
108
  LCALL   ZEIT
109
  LCALL   ZEIT
110
...

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


Lesenswert?

Du möchtest Code für den MCS51 einfach nur auf modernen Maschinen 
assemblieren und dabei wieder den MCS51 als Zielsystem?
Dazu kannst du z.B. MIDE51 benutzen, das auf Win32/64 läuft. M.W. gibt 
es auch für diverse Linux Distributionen MCS51 Pakete.

MIDE51 enthält Editor mit Syntaxerkennung, ASEM51 von W.W. Heinz, 2 
limitierte Simulatoren und den SDCC für 8051.

http://www.opcube.com/home.html

Gerade kürzlich benutzt für mein SPS Projekt mit Kloeckner-Moeller.

von Assemble (Gast)


Lesenswert?

Felix B. schrieb:
> welches nicht
> wie die zwei genannten Herstellerbezogen ist, sondern reine Assembler
> assemblierer sind.

Assembler ist eigentlich immer herstellerbezogen, weil die 
Assemblersprachen für die unterschiedlichen Mikrocontroller der 
verschiedenen Hersteller sich immer unterscheiden.
MCS51 Entwicklungsumgebung findest Du bei Keil.

von Soul E. (Gast)


Lesenswert?

Felix B. schrieb:

> Für mich ist nun wichtig, diese Programme welche unter MS-DOS keine
> Probleme darstellen unter win7 zum Laufen zu bekommen. Unter DOS wurde
> mal mit ASM51 gearbeitet. Aber diese Entwicklungsumgebung steht nicht
> mehr bzw. war auch nicht von mir.

Der Code sieht aus, als wäre er für einen Intel i8051 Microcontroller 
(MCS-51). Der Name "ASM51" spricht auch dafür.

Übersetzen kannst Du den mit jedem modernen MCS-51 Crossassembler (TASM, 
as, ...), wobei immer leichte Anpassungen nötig sein werden. as 
akzeptiert fast immer die Original-Syntax, nur der CPU-Typ muss halt 
richtig angegeben werden.
http://john.ccac.rwth-aachen.de:8000/as/



(es versteht sich von selbst, dass der erzeugte Hex-Code nur auf einem 
8051 lauffähig ist, nicht auf einem PIC, ATmega oder einer PDP/8. So wie 
ein chinesisches Buch auch dann nur für einen Chinesen verständlich ist, 
wenn man es auf neuem Papier ausdruckt)

von Felix B. (Gast)


Lesenswert?

Hallo zusammen, genau diese Antworten habe ich gebraucht.
Die Hexen kommen auf einen ST M27C64A.
Mit dem MIDE51 kann ich super arbeiten soweit ich es grade getestet 
habe, er übersetzt nach ein paar fehlenden Semikolon die alten 
ASM-Dateien.

Es gibt nichts spannenderes wie solche Relikte von Disketten zu ziehen, 
zu bearbeiten und aus dem Fenster den Flocken zu zuschauen.

Warum und wofür ich aber noch SDCC brauche habe ich nicht richtig 
verstanden.
So wie es aussieht reicht der MIDE51!?

Ich wünsche schon mal unabhängig von dem was hier im Thread noch kommt 
einen guten Wintereinbruch!

Grüße

von Assemble (Gast)


Lesenswert?

Felix B. schrieb:
> Warum und wofür ich aber noch SDCC brauche habe ich nicht richtig
> verstanden.

Das ist ein C-Compiler, falls Du den 8051 in C programmieren möchtest.

von Peter D. (peda)


Lesenswert?

Felix B. schrieb:
> Wenn ich die Programme z.B. in AVR-Studio oder MPLAB lege, melden alle
> versuchten Programme (auch weitere) den ersten Fehler

Assembler ist immer auf ein bestimmtes Target bezogen.
Ein AVR- oder PIC-Assembler kann nunmal keinen 8051-Code verstehen.

Alte Assembler kann man noch in DOSBox laufen lassen.

von Felix B. (Gast)


Lesenswert?

Dankeschön für eure Antworten!!!

von Stefan K. (stefan64)


Lesenswert?

So ganz ist nicht klar, was Du machen willst.

Willst Du das alte Programm ändern und dann auf der alten Hardware 
laufen lassen?

Oder willst Du es auf einen AVR o.ä. umsetzen?

Gruß, Stefan

von Felix B. (Gast)


Lesenswert?

Nein nein, Es bleibt alles so wie ist, die vorhandene Hardware und auch 
Programme. Es geht nur darum, bei Ausfall der Steuerung neue Eproms zu 
beschreiben und evtl. auch kleinere Änderungen vorzunehmen.

Ich habe an erster Stelle vermutlich für Verwirrung gesorgt, da ich 
AVRStudio usw. nannte.
Ich dachte aufgrund der parallelen in der Assemblerprogrammierung müsste 
es möglich sein, dass die eingebundenen assemblierer auch sowas „mit 
können“. Jetzt bin ich schlauer und weiß das diese 
Herstellerspezifischen Programme außen vor sind!

von F. F. (foldi)


Lesenswert?

Felix B. schrieb:
> Nein nein, Es bleibt alles so wie ist, die vorhandene Hardware und auch
> Programme. Es geht nur darum, bei Ausfall der Steuerung neue Eproms zu
> beschreiben und evtl. auch kleinere Änderungen vorzunehmen.

Du widersprichst dir in einem Absatz und vom ganzen Text sowieso.

Du schreibst, dass du die .hex Dateien hast und sie funktionieren. Auch 
schreibst du, dass du nur EPROMs beschreiben willst. Dann auf einmal, 
siehe deinen zitierten Absatz, dass du "kleine Änderungen" vornehmen 
willst.

Genau dafür brauchst du ja auch die passende Software, für das andere 
nur einen Brenner.

Uns ist es doch völlig egal was du mit dem Code machen willst, also 
brauchst du hier doch nicht so rum zu eiern.

von Felix B. (Gast)


Lesenswert?

In erster Linie ist wichtig, dass ich die ASM. assemblieren kann.
Bearbeiten usw. kann ich in jedem Editor. Die zahlreichen Kommentare 
waren soweit genau passend, also gehe ich von aus es war verständlich. 
Ziel wurde erreicht. Was ich im nachhinein mache kann dir doch egal 
sein?! Das hast du auch schon gesagt. Also verstehe ich dein rumgeier 
nicht. Ich habe nur auf eine Nachfrage geantwortet.

von uwe (Gast)


Lesenswert?

Du kannst ja mal die alte hex datei mit der neuen vergleichen bzw. 
vorher beide mit hex2bin ins binärformat umwandeln.
Erst dann weißt du ob das neue hex file überhaupt zu gebrauchen ist.

von uwe (Gast)


Lesenswert?

> Mit dem MIDE51 kann ich super arbeiten soweit ich es grade getestet
> habe, er übersetzt nach ein paar fehlenden Semikolon die alten
> ASM-Dateien.
Mit Semikola sagt man dem Assembler: alles was hinter mir in dieser 
Zeile steht ist unwichtig.
Wenn da assembler Befehle standen wird das neu erzeugte hex file nicht 
funktionieren bzw. nicht der gleiche code generiert.
Deshalb zeig mal wo du die Semikola gesetzt hast!

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.