Decompiler
SEE ist ein kleiner Decompiler nach F83.
Benutzung: SEE name
Er erzeugt ein Listing des Forth-Quellcodes. Bekannte CREATE-Strukturen werden korrekt entschlüsselt (Konstanten, Variablen, Colon-Definitionen etc.).
Beispiel:
: << OVER 0= NOT IF -1 SCROLL THEN ; SEE << : << 3121 OVER 3123 0= 3125 NOT 3127 ?BRANCH 3131 312B (LIT) -1 ( FFFF ) 312F SCROLL 3131 ;ok
Rückübersetzung:
| (LIT) | entfällt |
| ;ok | ; |
| (DO) .. (LOOP) | DO .. LOOP |
| (?LEAVE) | ?LEAVE |
| ?BRANCH m1 .. m1: | IF .. THEN |
| ?BRANCH m1 .. BRANCH m2 m1: … m2: | IF .. ELSE .. THEN |
| m1: .. ?BRANCH m1 | BEGIN .. UNTIL |
| m1: .. ?BRANCH m2 .. BRANCH m1 m2: | BEGIN .. WHILE .. REPEAT |
| m1: .. BRANCH m1 | BEGIN .. AGAIN |
IF .-- ?BRANCH m1 IF .---- ?BRANCH m1
... | ... |
THEN .-> m1: ELSE | .-- BRANCH m2
.-|-> m1:
... |
THEN .-> m2:
BEGIN .--> m1: BEGIN .--> m1:
... | ... |
UNTIL .-- ?BRANCH m1 AGAIN .-- BRANCH m1
BEGIN .---> m1:
... |
WHILE | .-- ?BRANCH m2
... | |
REPEAT .-|-- BRANCH m1
.-> m2:
REASS ist ein zugehöriger Reassembler.
Er bindet sich automatisch in SEE ein. SEE zeigt dann auch Code-Worte an:
1 GET REASS 1 22 THRU SEE COUNT COUNT is 0F70: POP HL 0F71: LD E,(HL) 0F72: LD D,00 0F74: INC HL 0F75: EX DE,HL 0F76: JP 0420 0F79: END ok
Durch Anpassen von (.PFA) kann die Ausgabe Forth-ähnlicher gestaltet werden. Allerdings ist es dann schwierig, Verzweigungen und Schleifen zu erkennen:
DECOMPILER DEFINITIONS
: (.PFA) >BODY BEGIN
DUP @ ?SPECIAL SPECIAL DUP
0= ?STOP OR UNTIL DROP ;
' (.PFA) IS .PFA