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
001
17.02.2026, 09:25 Uhr
Rüdiger
Administrator
Avatar von Rüdiger

Beeindruckend. Gute Arbeit!
--
Kernel panic: Out of swap space.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
17.02.2026, 10:07 Uhr
Bert



Hallo Henry!

Könnte man mit diesem Wissen schon einen SIOS-Emulator schreiben, der die Systemaufrufe emuliert?
Existieren überhaupt noch Programme, die SIOS voraussetzen?
--
Viele Grüße,
Bert
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
17.02.2026, 11:19 Uhr
Enrico
Default Group and Edit


Ist SIOS denn nicht gleich RIO?
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
17.02.2026, 11:25 Uhr
DKt



Hallo,

nein, UDOS ist RIO.

SIOS ist etwas formular-artiges, ohne den klassischen Konsolenmechanismus.

VIele Grüße, Dirk
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
17.02.2026, 21:07 Uhr
hu_dd



Glückauf!

@Bert

Nun also die Tabelle ist längst nicht ausreichend um vollständig zu beschreiben was wo passiert, eher ein erster Ansatz um das weitersuchen zu erleichtern. Das oben verlinkte Dokument erscheint mir aber gut geeignet um zumindest 90% zu schaffen wenn man wirklich alle Feinheiten schafft herauszupicken. Allerdings gehört da noch viel Mühe dazu und ich denke nicht dass es sich lohnt da was zu emulieren weil es dann auch eine große Bandbreite Hardwareunterstützung von Dingen die es an einem K8924 geben kann braucht.

Die von mir gerade bearbeitete Fahrkarten-Software besteht zum Beispiel darauf dass in allen drei Laufwerken die richtigen Disketten liegen die da hin gehören, dass eine Sparkassentastatur und eine AUP da ist, hat eine Karte für Kreditkartenleser die zwar nicht benutzt wird, da die aber in jedem dieser Rechner die ich bisher gesehen habe drin war, vermutlich vorbereitend schon in Bibliotheken drin ist. Weiterhin steht und fällt das ganze mit der Formular-Verarbeitung im K6316 - quasi im ersten Arbeitsschritt was die Schichteröffnung ist muss ein K6316 da sein der sagt dass jetzt ein Formular eingelegt wurde und bedruckt werden kann.

Und dazu kommt - SIOS war nicht sehr verbreitet, ich denke die Hauptanwender waren die Bahn und die Sparkassen. Der Vorteil ist, dass es die - sagen wir Stand Mitte der 80er - verfügbare Hardware wirklich optimal und ich denke auch vollständig unterstützt. Das geht natürlich einher damit dass es andere Hardware wiederum gar nicht unterstützt. Sparkassensoftware wird häufig das SIMO brauchen - heute würde man sagen ein Krypto-Modul für die Geldkarten-PIN-Verschlüsselung - und vermutlich noch einige andere Funktionen.

Ich denke für das wenige was man mit SIOS machen kann ist es das beste diesem System ein Denkmal mit der originalen Hardware zu bauen :-).

MfG Henry
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
18.02.2026, 23:05 Uhr
candle.dd

Avatar von candle.dd

Ja, auch ich bin beeindruckt. (wie der K6316 wohl auch) :-)
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
19.02.2026, 09:18 Uhr
Bert



Danke für Deine Einschätzung Henry!
--
Viele Grüße,
Bert
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