10 ( ;; 25416 - CONSTANT
)
11 ( ;; 25442 - VARIABLE
)
12 ( ;; 25416 - CONSTANT
)
13 ( ;; 32512 - CONSTANT2
)
14 ( ;; 32547 - 2VARIABLE
)
19 ( -1: stop, no more code allowed
)
20 ( -2: stop, but more code allowed
)
22 0 VARIABLE DC
-LABEL
-START
23 0 VARIABLE DC
-MAX
-LABEL
26 : (DC
-ADD
-LABEL
) ( pc
-- )
27 ( ." NEW LABEL: L" DUP U
. CR
)
28 DUP DC
-MAX
-LABEL @ UMAX DC
-MAX
-LABEL
!
32 DUP DC
-LABEL
-START @
1- U
>
34 2DUP @
= IF 2DROP EXIT
ENDIF
37 ( ." STORED NEW LABEL: L" DUP U
. CR
)
41 : (DC
-HAS
-LABEL?
) ( pc
-- flag
)
45 DUP DC
-LABEL
-START @
1- U
>
47 2DUP @
= IF 2DROP
-1 EXIT
ENDIF
53 : (DC
-CODE
) ( pc
-- pc
)
58 : (DC
-ENDW
) ( pc
-- pc
)
64 : (DC
-LIT
) ( pc
-- pc
)
72 : (DC
-BRN
) ( pc
-- pc
)
82 : (DC
-STR
) ( pc
-- pc
)
84 126 EMIT DUP COUNT TYPE
126 EMIT
90 ' LIT CFA VARIABLE (DC-SPECW)
92 ' BRANCH CFA , ' (DC
-BRN
) CFA
,
93 ' 0BRANCH CFA , ' (DC
-BRN
) CFA
,
94 ' TBRANCH CFA , ' (DC
-BRN
) CFA
,
95 ' (LOOP) CFA , ' (DC
-BRN
) CFA
,
96 ' (+LOOP) CFA , ' (DC
-BRN
) CFA
,
97 ' (.") CFA , ' (DC
-STR
) CFA
,
98 ' (") CFA , ' (DC
-STR
) CFA
,
99 ' (;CODE) CFA , ' (DC
-CODE
) CFA
,
100 ' ;S CFA , ' (DC
-ENDW
) CFA
,
104 : (DC
-WAFIND
) ( a arr
-- word
)
107 DUP @ DUP
( arr cfa cfa | a
)
108 WHILE ( arr cfa | a
)
109 R@
= IF RDROP
2+ @ EXIT
ENDIF
117 : (DC-TRACE-LABELS) ( pc -- )
120 DP @ DC-LABEL-START !
125 SWAP 2+ SWAP ( pc cfa / advance pc )
126 (DC-SPECW) (DC-WAFIND) EXECUTE ( pc )
127 ( ." DC-MODE=" DC-MODE @ . CR )
130 DC-MODE @ -1 = IF DROP EXIT ENDIF
131 ( check if we have a label after this )
132 DUP DC-MAX-LABEL @ U> IF DROP EXIT ENDIF
138 : (DC-DUMP-LABELS) ( -- )
139 DP @ DC-LABEL-START @ - 2U/ ." LABELS: " . CR
141 DC-LABEL-START @ U. CR
145 DUP DC-LABEL-START @ 1- U>
147 DUP @ SPACE SPACE 76 EMIT U. CR
153 : (DC-CR) ( lcount pc -- newlcount pc )
162 13 EMIT 40 SPACES 13 EMIT
171 DUP FORTH
-WORD? IFNOT
." ERROR: not a FORTH word!" CR
0 ERROR
ENDIF
174 DUP
(DC
-TRACE
-LABELS
)
178 ( ." PC START: " DUP U
. CR
)
179 ( ." PC END : " DC
-MAX
-PC @ U
. CR
)
183 ( ." press 'Q' to quit" CR
)
184 CR
." DECOMPILED: " DUP NFA ID
. CR
189 ( DUP U
. SPACE SPACE
) ( pc
)
191 DUP
(DC
-HAS
-LABEL?
) IF
192 76 EMIT DUP U
. 8 EMIT
58 EMIT
(DC
-CR
)
196 SWAP
2+ SWAP
( pc cfa
/ advance pc
)
197 DUP
2+ NFA SPACE SPACE ID
. ( pc cfa
)
198 ( process special word
)
199 (DC
-SPECW
) (DC
-WAFIND
) EXECUTE
( pc
)
200 ( debug
) ( DUP SPACE SPACE U
. )
207 DC
-LABEL
-START @ DP
!
210 \
: TEST
( -- ) 3 0 DO I
. CR LOOP
;