( DECOMPILER 1985,2012 J AT KLASEK.AT ) 0 VARIABLE .WORD ' LIT CFA CONSTANT .LIT ' CLIT CFA CONSTANT .CLIT ' 0BRANCH CFA CONSTANT ZBRAN ' BRANCH CFA CONSTANT BRAN ' ;S CFA CONSTANT SEMIS ' (LOOP) CFA CONSTANT PLOOP ' (+LOOP) CFA CONSTANT PPLOOP ' (.") CFA CONSTANT PDOTQ ' (;CODE) CFA CONSTANT (;CO) ' COMPILE CFA CONSTANT PCOMP : PWORD 2+ NFA ID. ; : .;CO PWORD .WORD @ 1000 DISA ; : 1BYTE .WORD @ C@ SPACE . 1 .WORD +! PWORD ; : 1WORD .WORD @ @ SPACE . 2 .WORD +! PWORD ; : NP DUP SEMIS = IF PWORD SP! QUIT THEN ?TERMINAL IF SP! QUIT THEN DUP (;CO) = IF .;CO THEN ; : BRNCH PWORD ." TO " .WORD @ .WORD @ @ + . 2 .WORD +! ; HEX : STG DROP SPACE 2E EMIT 22 EMIT .WORD @ DUP COUNT TYPE 22 EMIT C@ .WORD @ + 1+ .WORD ! ; --> ( DECOMP ) : NEXT1 .WORD @ U. 2 SPACES .WORD @ @ 2 .WORD +! ; : CKIT DUP ZBRAN = OVER BRAN = OR OVER PLOOP = OR OVER PPLOOP = OR IF BRNCH ELSE DUP .LIT = IF 1WORD ELSE DUP .CLIT = IF 1BYTE ELSE DUP PDOTQ = IF STG ELSE DUP PCOMP = IF PWORD CR NEXT1 THEN PWORD THEN THEN THEN THEN ; ' DO CFA @ CONSTANT DOCOL ' DP CFA @ CONSTANT DOUSE ' BL CFA @ CONSTANT DOCON ' PC CFA @ CONSTANT DOVAR : DO? DUP DOUSE = IF CR ." USER-VARIABLE : " DROP C@ DUP . UP @ + @ U. SP! QUIT THEN DUP DOVAR = IF CR ." VARIABLE : " DROP DUP U. @ U. SP! QUIT ELSE DOCON = IF CR ." CONSTANT : " @ U. SP! QUIT ELSE 400 DISA THEN THEN ; : ?DO DUP 2- @ DUP DOCOL - IF DO? THEN DROP ; : SETUP [COMPILE] ' DUP NFA C@ 40 AND IF CR ." IMMEDIATE" THEN ?DO .WORD ! ; : DECP SETUP CR BEGIN NEXT1 NP CKIT CR AGAIN ; DECIMAL ;S