Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » SIOS Makro MABS1520 dekodieren » Themenansicht

Autor Thread - Seiten: -1-
000
16.02.2026, 21:56 Uhr
hu_dd



Hallo,

für den Fall dass irgendwo auf dieser Welt jemand auf die Idee kommt, zu untersuchen was ein SIOS-Programm an irgend einer Stelle tut oder tun sollte, würde ich euch mal in Kurzform am Ergebnis meines diesbezüglichen Irrweges teilhaben lassen (und motivieren dass Softwarearcheologie manchmal interessant sein kann ;-)).

Also es gibt ja unter SIOS (und BROS) quasi eine Makro-Sprache die unvermittelt (nein mit RST28) im Assembler auftaucht und an deren Syntax gängige Z80-Dissassembler dann scheitern.

Da ich dieses entzückende Heft nicht habe, half mir auf dem Weg des Verständnisses das beim Internet-Archive erhältliche Heft robotron SIOS 1520 Assemblersprachbeschreibung MABS 1520 Makrobefehle. Dieses wurde unter dem Motto "ein schlechter Scan ist besser als gar kein Scan" erfasst und ist seitenweise etwas anstrengend - besser aber als nichts.

Aus den Informationen in diesem Heft habe ich mir die unten stehende CSV-Tabelle mit der Befehlsbeschreibung zusammen gebaut, es gibt keinen Anspruch auf Fehlerfreiheit aber im Gegensatz zu den Tabellen im Anhang kann man es immerhin lesen.

Nun konnte ich zu Fuß im Ram-Dump Dinge entschlüsseln, war aber immer noch zu langsam und wollte mir eigentlich ein kleines Programm zum Dekodieren bauen.

Weil alle immer sagen, der Chatgpt könne so gut programmieren und sowieso alles so gut, habe ich den mal gefragt - also gut programmieren konnte er zwar nicht und hat auch nicht so viel intelligentes erzählt wie man von einer Intelligenz erwarten würde. Aber er war in der Lage die Fleißarbeit zu machen, aus meiner Tabelle und dem RAM-Dump zumindest die Absätze die ich ihm vorher raus gesucht habe weil ich sie interessant fand lesbar zu gestalten, das sah dann quasi so aus:


Quellcode:

; ===== Label E154 (angesprungen von BC@E125) =====
E154: 2C 50 21 03 00       POS       par=$50, H=$21, V=$03, g=$00 ; Positionierung von Zeichen auf einem Ausgabegerät
E159: 23 01 4C C5 01       ENTF      l=$01, adr=$C54C, nz=$01 ; Mehrzeilige Zeicheneingabe
E15E: 03 3E 32 E0          BCA       stc=$3E, adr=$E032 ; Bedingter Sprung in Abh. von Starttastencode Reg. A ; Dispatch stc=$3E ? $E032
E162: 61 31 4C C5          CLI       d1=$31, adr=$C54C ; Vergleich mit Direktoperand
E166: 0D 40 C6 E4          BC        n0=$40, adr=$E4C6 ; Bedingter Sprung in Abh. von Bedingungscode ; Bedingt (n=$00) ? $E4C6
E16A: 61 38 4C C5          CLI       d1=$38, adr=$C54C ; Vergleich mit Direktoperand
E16E: 0D 20 C6 E4          BC        n0=$20, adr=$E4C6 ; Bedingter Sprung in Abh. von Bedingungscode ; Bedingt (n=$00) ? $E4C6
E172: 2C 50 30 03 00       POS       par=$50, H=$30, V=$03, g=$00 ; Positionierung von Zeichen auf einem Ausgabegerät
E177: 23 02 4D C5 01       ENTF      l=$02, adr=$C54D, nz=$01 ; Mehrzeilige Zeicheneingabe



Damit konnte man das plötzlich ganz gut lesen - verstehen musste man noch selbst machen, da ist mit diesen Angaben die Intelligenz auch gescheitert. Aber ich will ihn nicht so schlecht reden, immerhin hat er mir unbürokratisch geholfen und Fleißarbeit abgenommen weil ich sonst immer noch mit meinem Bleistiftkrakelzettel da sitzen würde.

Und das Ende vom Lied - ich konnte keine Blöcke mit 4 Byte "Passwort" finden, weil der Programmierer sich gedacht hat, es reicht wenn er 3 Byte speichert und die vierte Zahl kann man irgendwas eingeben, dann ist das auch eine lustige Idee um die Russen zu verwirren.

Und ganz am Schluss noch die besagte CSV als Angebot für eine Nachnutzung im Rahmen der Neuererbewegung - und zuvor verabschiede ich mich und gehe mal wieder zurück in meinen Software-Randgruppen-Keller ;-).

MfG Henry


Quellcode:
Byte 0;Byte 1;Byte 2;Byte 3;Byte 4;Byte 5;Byte 6;Byte 7;Anzahl I-Bits Befehlscode;Anzahl I-Bits Zusatzbyte;Kurzbezeichnung;Bezeichnung
0;;;;;;;;0;;NOP;Keine Operation
3;stc;adr_l;adr_h;;;;;1;;BCA;Bedingter Sprung in Abh. von Starttastencode Reg. A
4;stc;adr_l;adr_h;;;;;1;;BCN;Bedingter Sprung in Abh. von Starttastencode Reg. N
5;sc;adr_l;adr_h;;;;;1;;BCS;Bedingter Sprung in Abh. von Statusregister S
6;sc;adr_l;adr_h;;;;;1;;BCK;Bedingter Sprung in Abh. von Starttastencode Reg.
7;sc;adr_l;adr_h;;;;;1;;BCKR;Bedingter Sprung in Abh. Von Sel.-Register KR
8;cnc;adr_l;adr_h;;;;;1;;ON;Bedingter Sprung in Abh. Von ON-Code
9;l;adr_l;adr_h;;;;;1;;PA;Laden Adresse Parameterliste von Haupt- in Unterprogramm (unmittelbar nach CALL)
10;l1;adr1_l;adr1_h;l2;adr2_l;adr2_h;;2;;A;Addition
11;l1;adr1_l;adr1_h;l2;adr2_l;adr2_h;;2;;S;Subtraktion
12;l1;adr1_l;adr1_h;l2;adr2_l;adr2_h;n;2;;M;Multiplikation
13;l1;adr1_l;adr1_h;l2;adr2_l;adr2_h;n;2;;D;Division
14;l1;adr1_l;adr1_h;l2;adr2_l;adr2_h;;2;;C;Numerischer Vergleich 2 maskierter numerischer Operanden
16;l1;adr1_l;adr1_h;l2;adr2_l;adr2_h;;2;;MVM;Transport mehrfach links beginnend
17;l1;adr1_l;adr1_h;l2;adr2_l;adr2_h;;2;;MV;Transport rechts beginnend mit Auffüllen von NUL bis Adr. 1
18;l;adr1_l;adr1_h;adr2_l;adr2_h;;;2;;TR;Codewandlung
19;l;adr1_l;adr1_h;adr2_l;adr2_h;;;2;;N;Logisches UND
20;l;adr1_l;adr1_h;adr2_l;adr2_h;;;1;;ENTD;Numerische Eingabe über die Tastatur mit Anzeige auf Dialoggerät und Speicherung
21;p10;adr_l;adr_h;;;;;1;;ENTP;Numerische Eingabe gepackt mit Speicherung
22;l;adr_l;adr_h;;;;;1;;ENTS;Zeicheneingabe, abbruch bei Zeichenzahl
23;l;adr_l;adr_h;nz;;;;1;;ENTF;Mehrzeilige Zeicheneingabe
24;l;adr_l;adr_h;;;;;1;;ENT;Numerische Eingabe
25;l;adr_l;adr_h;;;;;1;;ENTM;Zeicheneingabe mit Speicherung
26;l;adr_l;adr_h;nz;;;;1;;ENTU;Ändern von Zeichen auf Dialoggerät über Tastatur
27;par;adr_l;adr_h;g;;;;1;;CD;
28;l;adr1_l;adr1_h;g;adr2_l;adr2_h;;1;;PUT;Ausgabe numerischer Daten auf das logische Gerät g
29;p10;adr_l;adr_h;g;m;;;1;;PUTP;Ausgabe gepackter Dezimalzahlen auf das logische Gerät g
30;adr1_l;adr1_h;adr2_l;adr2_h;;;;2;;AB;Binäre Addition
31;adr1_l;adr1_h;adr2_l;adr2_h;;;;2;;SB;Binäre Subtraktion
32;adr1_l;adr1_h;adr2_l;adr2_h;;;;2;;MB;Binäre Multiplikation
33;adr1_l;adr1_h;adr2_l;adr2_h;;;;2;;CB;Binärer Vergleich
34;l;adr1_l;adr1_h;adr2_l;adr2_h;;;2;;CV;Konvertieren Dezimalzahl in Binärzahl
35;l;adr1_l;adr1_h;adr2_l;adr2_h;;;2;;CVC;Konvertieren Binärzahl in Dezimalzahl
36;p12;adr1_l;adr1_h;adr2_l;adr2_h;m;;2;;UNPK;Konvertieren Dezimalzahl in gepackte Dezimalzahl
37;p12;adr1_l;adr1_h;adr2_l;adr2_h;;;2;;PACK;Konvertieren gepackte Dezimalzahl in Dezimalzahl
38;p11;adr1_l;adr1_h;adr2_l;adr2_h;;;2;;CVB;Konvertieren gepackte Dezimalzahl in Binärzahl
39;p11;adr1_l;adr1_h;adr2_l;adr2_h;;;2;;CVD;Konvertieren Binärzahl in gepackte Dezimalzahl
40;z2;adr1_l;adr1_h;adr2_l;adr2_h;;;;2;READ;Lesen eines Satzes von Datenträger
41;z3;adr1_l;adr1_h;adr2_l;adr2_h;adr3_l;adr3_h;;3;READD;Lesen eines Satzes von Datenträger direkt adressiert
42;z4;adr1_l;adr1_h;adr2_l;adr2_h;adr3_l;adr3_h;;3;READK;Schlüsselindiziertes Lesen eines Satzes auf Datenträger
43;z1;adr1_l;adr1_h;adr2_l;adr2_h;;;;2;READS;Suchen eines Satzes entsprechend einer Suchmaske
44;z2;adr1_l;adr1_h;adr2_l;adr2_h;;;;2;WRITE;Schreiben eines Satzes auf Datenträger
45;z3;adr1_l;adr1_h;adr2_l;adr2_h;adr3_l;adr3_h;;3;WRITED;Schreiben eines Satzes auf Datenträger direkt adressiert
47;z3;adr1_l;adr1_h;adr2_l;adr2_h;;;;2;ONF;Herstellen einer Verbindung zwischen UP und Datei
60;d1;adr_l;adr_h;;;;;1;;MVI;Transport Direktoperand
61;d1;adr_l;adr_h;;;;;1;;CLI;Vergleich mit Direktoperand
62;d1;adr_l;adr_h;;;;;1;;TM;Prüfen der Bitkonfiguration ein Byte
63;d;2;adr_l;adr_h;;;;1;;CBI;Binärer Vergleich mit 2 Byte Direktop.
64;d;2;adr_l;adr_h;;;;1;;MVBI;Transport eines 2 Byte Direktoperanden
65;d;2;adr_l;adr_h;;;;1;;ABI;Addition eines 2 Byte Direktoperanden
66;adr_l;adr_h;;;;;;1;;MLF;Modifikation 2. Byte Folgebefehl
67;adr_l;adr_h;;;;;;1;;MLS;Modifikation 5. Byte Folgebefehl
68;adr_l;adr_h;;;;;;1;;MVA;Transport Starttastenregister A an Adresse
69;adr_l;adr_h;;;;;;1;;MVN;Transport Starttastenregister N
69;adr_l;adr_h;;;;;;1;;MVN;Transport Starttastenregister N an Adresse
0a;l;adr_l;adr_h;;;;;1;;PL;Laden von Parameterliste vom Haupt- in Unterprogramm (im Unterprogramm)
0b;adr_l;adr_h;;;;;;1;;CALL;Aufruf Unterprogramm in Makrobefehlssprache
0c;adr_l;adr_h;;;;;;1;;CALC;Aufruf Unterprogramm in Maschinensprache U880
0d;"""F0""";adr_l;adr_h;;;;;1;;B;Unbedingter Sprung
0d;n0;adr_l;adr_h;;;;;1;;BC;Bedingter Sprung in Abh. von Bedingungscode
1a;l;adr1_l;adr1_h;adr2_l;adr2_h;;;2;;O;Logisches ODER
1b;l;adr1_l;adr1_h;adr2_l;adr2_h;;;2;;X;Logisches XOR
1c;l;adr1_l;adr1_h;adr2_l;adr2_h;;;2;;CLC;Logischer Vergleich links beginnend
1d;l;adr1_l;adr1_h;adr2_l;adr2_h;;;2;;MVC;Transport links beginend
2a;l;adr_l;adr_h;g;;;;1;;PUTC;Zeichenausgabe aus Speicher auf logisches Gerät g
2b;l;adr_l;adr_h;g;ns;;;1;;PUTF;Mehrzeilige Ausgabe auf ein logisches Gerät
2c;par;H;V;g;;;;0;;POS;Positionierung von Zeichen auf einem Ausgabegerät
2d;l;adr_l;adr_h;g;;;;1;;GET;Eingabe von logischem Gerät g
2e;fctc;adr_l;adr_h;;;;;1;;CTRL;
3a;p1;adr1_l;adr1_h;adr2_l;adr2_h;;;2;;AP;Addition gepackt
3a;p2;adr1_l;adr1_h;adr2_l;adr2_h;;;2;;APR;Subtraktion gepackt bei gesetztem K0-Bit
3a;p3;adr1_l;adr1_h;adr2_l;adr2_h;;;2;;SP;Subtraktion gepackt
3a;p4;adr1_l;adr1_h;adr2_l;adr2_h;;;2;;SPR;Addition gepackt bei gesetztem K0-Bit
3a;p5;adr1_l;adr1_h;adr2_l;adr2_h;;;2;;MP;Multiplikation gepackt
3a;p6;adr1_l;adr1_h;adr2_l;adr2_h;;;2;;D;Division gepackt
3a;p7;adr1_l;adr1_h;adr2_l;adr2_h;;;2;;CP;Vorzeichengerechter Vergleich gepackt
3c;p8;adr_l;adr_h;;;;;1;;SL;Linksverschiebung gepackt
3c;p9;adr_l;adr_h;;;;;1;;SR;Rechtsverschiebung gepackt
3d;adr1_l;adr1_h;adr2_l;adr2_h;;;;2;;BCT;Bedingter Sprung in Abh. von einem Zählwert
3e;adr1_l;adr1_h;adr2_l;adr2_h;;;;2;;BX;Befehlsaustausch mit Modifizierung
3f;adr1_l;adr1_h;adr2_l;adr2_h;;;;2;;TIMER;Bedingter Sprung in Abh. von Zeit
6a;adr_l;adr_h;;;;;;1;;GUIDE;Bedienerführung
6b;adr_l;adr_h;;;;;;1;;OPEN;Öffnen einer Datei
6c;adr_l;adr_h;;;;;;1;;CLOSE;Schließen einer Datei
6d;adr1_l;adr1_h;adr2_l;adr2_h;;;;1;;WAITC;Warten auf Beendigung E/A Operation u testen fehlerfreie Ausf.
6e;adr_l;adr_h;;;;;;1;;WAIT;Warten auf Beendigung E/A Operation
c0;;;;;;;;0;;EOI;Aufheben des Interpreterstatus (alle folgenden Befehle CPU-Befehle)
c1;;;;;;;;0;;RET;Rückkehr vom Unterprogramm in rufendes Programm
c2;;;;;;;;0;;EOP;Ende eines Programms
c4;l;15;;;;;;0;;SETS;Setzen Selektoren Gruppe S
c5;l;15;;;;;;0;;RESS;Rücksetzen Selektoren Gruppe S
c6;l;15;;;;;;0;;SETK;Setzen Selektoren Gruppe K
c7;l;15;;;;;;0;;RESK;Rücksetzen Selektoren Gruppe K
ca;d1;;;;;;;0;;SETPS;Setzen Programmstatus
cb;;;;;;;;0;;EXIT;Aufheben Unterbrechungsstatus
cc;;;;;;;;0;;OFF;Ausschalten des Gerätes
cd;0;adr_l;adr_h;;;;;0;1;ADRE;Bereitstellen Endadresse RAM
cd;1;adr_l;adr_h;;;;;0;1;ADRD;Bereitstellen Anfangsadresse Bildwiederholspeicher
cd;2;adr_l;adr_h;;;;;0;1;CLOCK;Bereitstellen der akt. Zeit
cd;3;adr_l;adr_h;;;;;0;1;DATE;Bereitstellen des akt. Datums
cd;4;adr_l;adr_h;;;;;0;1;SETC;Eintrag Zeit in Zeitregister
cd;5;adr_l;adr_h;;;;;0;1;SETD;Eintrag Datum in Datumsregister (8 Byte)
cd;9;adr_l;adr_h;;;;;0;1;CALP;Laden Programm aus Phasenbibliothek und Starten Programm
ef;;;;;;;;0;;SOP;Start eines Makroprogramms

Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek