Und da die stackrelevanten Opcodes ja offenbar Interesse finden, hier mal ein Beispiel wie das in existierendem Code aussieht:
Ah ja, das entspricht dem PROC Macro in der Form
Die "arg" sind Pseudo-Opcodes weil das dumme Radare2 mit der variablen Argumentzahl nicht klarkommt (wie es auch mit einigen anderen Dingen in diesem Befehlssatz nicht klarkommt).
Tsts, und das von einem Unix-tool :))
Erklärt auch warum ich so Schwierigkeiten beim lesen habe: /360 Mnemonics und Adressen in Kleinbuchstaben schaut aus wie Kauderwelsch, ich muss dauernd die Augen zusammenkneifen und im Kopf in Groß übersetzen bevor es Sinn ergibt :)) Genauso die durchgehende Verwendung von dezimalen Offsets bei Adressen.
Das entspricht ab Zeile 3CC2 einem Rücksprung mit Stackframe auflösen und Register wiederherstellen.
Interessant dabei dass hier ein 22 als RETEXT umgesetzt wird. Wo hast D das her? Im Manual wird zwar RETEXT erwähnt, aber nicht weiter beschrieben.
RETEXT geht wohl zusammen mit CALEXT und dürfte die BALR variante des CALL/RETS Pärchens (9A/20) sein.
Genauso interessant die Verwendung von CALLEXS. Von der Kodierung her ist es ein SI Befehl, und die Adresse schaut ganz nach der vorher aufgestellten Parameterliste aus. Entsprechend dürfte das 1. Byte in Immediate sein, was sinn macht wenn man den als einen SVC mit Parameterliste auffasst. Packt den sonst so üblichen LA R1,par/SVC xx in einen einzigen Befehl. Spart Speicher.
Lustig ist, dass diese Befehle zwar in der Befehlsübersicht des P6066 Manuals auftauchen, in der Beschreibung aber nicht, dafür aber in der Macroauflistung von PRET sowie bei der Beschreibung der/einiger Aufrufe in Kapitel 6, aber ohne genaue Beschreibung. Im P6066 Assembler Manual ist davon nur noch die Macroauflistung erhalten. Der Bearbeiter konnte die wohl nicht wegmachen ohne alles umzuschreiben :))
Es muss also wo noch ein 'Systemprogrammierer'-Manual geben die ACT, CALEXS, CALEXT, RETEXT und RLSEM erklärt. ACT und RLSEM scheinen zur Verwaltung dynamisch geladener Erweiterungen zu sein. Wirklich nett was die alles ausgeknobelt haben.
Der 93 ist übrigens einer von den undokumentierten Opcodes, vermutlich I/O.
Kann sein. Weis nicht. 93 ist bei der /360 der TS - Test and Set - also locking. Dazu passt aber nicht unbedingt der Code der danach kommt.
Wär interessant zu sehen was auf Adresse 3BDC ff und 3BE0 ff steht. Beides Wort-Adressen.
In die lokalen Unterroutinen springen sie dann aber doch mit BAL oder BALR an und nicht mit CALL.
Der Ansprung mit CALL ist nur nötig wenn Parameter abgelegt werden. Ohne kann man gleich nur den BAL verwenden :))