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 bindest sich 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