Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. \ HSSSS H.
  2.  
  3. [IFNDEF] BREAK
  4.   : BREAK POSTPONE EXIT POSTPONE THEN ; IMMEDIATE
  5. [THEN]
  6.  
  7. C" VECT-CODE" FIND NIP 0=
  8. [IF]    ' _VECT-CODE VALUE      VECT-CODE
  9. [ELSE]  ' _VECT-CODE    TO      VECT-CODE
  10. [THEN]
  11. C" USER-CODE" FIND NIP 0=
  12. [IF]    ' _USER-CODE VALUE      USER-CODE
  13. [ELSE]  ' _USER-CODE    TO      USER-CODE
  14. [THEN]
  15. C" USER-VALUE-CODE" FIND NIP 0=
  16. [IF]    ' _USER-VALUE-CODE VALUE        USER-VALUE-CODE
  17. [ELSE]  ' _USER-VALUE-CODE      TO      USER-VALUE-CODE
  18. [THEN]
  19.  
  20. \ ' _CONSTANT-CODE      TO CONSTANT-CODE
  21. \ ' _CREATE-CODE                TO CREATE-CODE
  22. \ ' _CLITERAL-CODE      TO CLITERAL-CODE
  23. \ ' _SLITERAL-CODE      TO SLITERAL-CODE
  24.  
  25. BASE @ HEX
  26.  
  27. : DUP5B?0      ( C -- C FLAG )
  28.   DUP   0C7 AND   5 =    \  ADD|OR|ADC|SBB|AND|SUB|XOR|CMP  EAX, # X
  29.   OVER  0FC AND 0B8 = OR \  MOV EAX|EBX|ECX|EDX, # X
  30. ;
  31.  
  32. : DUP5B?1      ( C -- C FLAG )
  33.   DUP  0FD AND 0A1 =   \  MOV EAX, X  | X , EAX
  34. ;
  35.  
  36. : DUP6B?0      ( W -- W FLAG )
  37.   DUP  C3FF AND C081 = \ ADD|OR|ADC|SBB|AND|SUB|XOR|CMP  EAX, # X
  38.   OVER   0C7 = OR \ MOV [EAX], # X
  39. \  OVER  878B = OR \ MOV EAX, X [EDI]
  40. \  OVER  878D = OR \ LEA EAX, X [EDI]
  41. \  OVER  873B = OR \ CMP EAX, X [EDI]
  42. ;
  43.  
  44. : DUP6B?1      ( W -- W FLAG )
  45.   DUP  00501 =    \ ADD  X , EAX
  46.   OVER  053B = OR \ CMP  EAX,  X
  47.  
  48. \ X00X.X101 1000.10X1
  49.   OVER  67FD AND 0589 = OR  \ MOV X {[EBP]}, E(ACDB)X | E(ACDB)X , X {[EBP]}
  50.   OVER  0589 = OR \ MOV X , EAX
  51.   OVER  058D = OR \ MOV EAX,  X
  52.   OVER  1D8D = OR \ MOV EBX,  X
  53.   OVER  808B = OR \ MOV EAX, X [EAX]
  54.   OVER  05FF = OR \ INC X
  55. \  OVER  FCFF AND C0C7 = OR \ MOV EAX|EBX|ECX|EDX, # X
  56. ;
  57.  
  58. : UV> ' >BODY @ TlsIndex@ + POSTPONE LITERAL ; IMMEDIATE
  59.  
  60. \ : GGGX H. ." -0x" TlsIndex@ H. ." -0x" RESERVE  H. ;
  61.  
  62. : .EDI   ( ADDR n -- ADDR1 )
  63.   ." [
  64.    DROP 2+ DUP @
  65.  
  66. \ ." XX" DUP H.
  67.  TlsIndex@ +
  68.    CASE
  69. R0       OF ." T_R0" ENDOF
  70. S0       OF ." T_S0" ENDOF
  71. WARNING  OF ." T_WARNING" ENDOF
  72. STATE    OF ." T_STATE" ENDOF
  73. BLK      OF ." T_BLK" ENDOF
  74. CURFILE  OF ." T_CURFILE" ENDOF
  75. HANDLER  OF ." T_HANDLER" ENDOF
  76. HLD      OF ." T_HLD" ENDOF
  77. BASE     OF ." T_BASE" ENDOF
  78. PAD      OF ." T_PAD" ENDOF            
  79. ER-A     OF ." T_ERminusA" ENDOF       
  80. ER-U     OF ." T_ERminusU" ENDOF       
  81. DOES>A   OF ." T_DOESgreatA" ENDOF
  82. #TIB     OF ." T_nTIB" ENDOF           
  83. >IN      OF ." T_greatIN" ENDOF
  84. UV> TIB  OF ." T_TIB" ENDOF            
  85. ATIB     OF ." T_ATIB" ENDOF
  86. UV> SOURCE-ID OF ." T_SOURCEminusID" ENDOF
  87. CURSTR   OF ." T_CURSTR" ENDOF 
  88. \ WBW-NFA OF ." T_WBWminusNFA" ENDOF
  89. \ WBW-OFFS OF ." T_WBWminusOFFS" ENDOF 
  90. CURRENT  OF ." T_CURRENT" ENDOF
  91. S-O    OF ." T_SminusO" ENDOF  
  92. UV> CONTEXT  OF ." T_CONTEXT" ENDOF
  93. >OUT OF ." T_greatOUT" ENDOF   
  94. W-CNT  OF ." T_WminusCNT" ENDOF
  95.  
  96. \ NNN OF ." T_NNN" ENDOF               
  97.  TlsIndex@ - RESERVE  - DUP 0< IF CR ." (%edi) RESERVE " ABORT THEN
  98.      ." reserve+0x"
  99.  H. ." +edi]" CELL+  EXIT
  100.     ENDCASE  ." -main_task+edi]" CELL+
  101. ;
  102.  
  103. \  RESERVE  -  DUP 0< IF CR  ." (%edi) RESERVE "
  104. \  TlsIndex@ H. RESERVE  H.  TlsIndex@ - H. H. ABORT THEN
  105.  
  106. \     ." reserve+0x" GGGX ." +edi]" CELL+  EXIT
  107. \     ." reserve+0x" TlsIndex@ - H. RESERVE  H. ." +edi]" CELL+  EXIT
  108. \    ENDCASE  ." -main_task+edi]" CELL+ ;
  109.  
  110. : H.-H  ." 0" BASE @ HEX SWAP U>D (D.) TYPE BASE ! ." H" ;
  111.  
  112. : 1_GD_STEP ( ADDR n -- ADDR1 )
  113.    CR ."  DB "  0xFF AND  H.-H 1+ ;
  114.  
  115. : 2_GD_STEP ( ADDR -- ADDR1 )
  116.   1_GD_STEP ." ,"  DUP C@ H.-H 1+ ;
  117.  
  118. : 3_GD_STEP ( ADDR -- ADDR1 )
  119.   2_GD_STEP ." ,"  DUP C@ H.-H 1+ ;
  120.  
  121. : 4_GD_STEP ( ADDR -- ADDR1 )
  122.   3_GD_STEP ." ,"  DUP C@ H.-H 1+ ;
  123.  
  124. [IFNDEF] OCTAL : OCTAL 8 BASE ! ;
  125. [THEN]
  126.  
  127. : \ooo.        ( n1 -- )
  128.         BASE @ >R  DECIMAL
  129.         0 (D.) TYPE    
  130.         R> BASE ! ;
  131.  
  132. : ATYPE ( arrd len -- )
  133.   DUP 0= IF 2DROP BREAK
  134.   [CHAR] ' EMIT
  135.   0 ?DO COUNT DUP [CHAR] ' = IF ." '" THEN EMIT
  136.      LOOP DROP
  137.   [CHAR] ' EMIT
  138.  ;
  139.  
  140. 0x5F535953 CONSTANT 'SYS_'
  141.  
  142. : GTYPE
  143.    OVER @  'SYS_' = IF 4 - SWAP 4 + SWAP TYPE BREAK
  144.   ." cfa_"
  145.         2DUP S" CONTEXT"        COMPARE 0= IF 2DROP ." _CONTEXT"        BREAK
  146.         2DUP S" WORD"   COMPARE 0= IF 2DROP ." _WORD"   BREAK
  147.         2DUP S" LEAVE"  COMPARE 0= IF 2DROP ." _LEAVE"  BREAK
  148.         2DUP S" REPEAT" COMPARE 0= IF 2DROP ." _REPEAT" BREAK
  149.         2DUP S" exit"   COMPARE 0= IF 2DROP ." _exit"   BREAK
  150.         2DUP S" CHAR"   COMPARE 0= IF 2DROP ." _CHAR"   BREAK
  151.         2DUP S" IF"     COMPARE 0= IF 2DROP ." _IF"     BREAK
  152.         2DUP S" ELSE"   COMPARE 0= IF 2DROP ." _ELSE"   BREAK
  153.         2DUP S" WHILE"  COMPARE 0= IF 2DROP ." _WHILE"  BREAK
  154.         2DUP S" RESIZE" COMPARE 0= IF 2DROP ." _RESIZE" BREAK
  155.         2DUP S" free"   COMPARE 0= IF 2DROP ." _free"   BREAK
  156.         2DUP S" write"  COMPARE 0= IF 2DROP ." _write"  BREAK
  157.         2DUP S" KEY_EVENT"      COMPARE 0= IF 2DROP ." _KEY_EVENT"      BREAK
  158.         2DUP S" PAGE"   COMPARE 0= IF 2DROP ." _PAGE"   BREAK
  159.         2DUP S" PAGE_EXECUTE_READWRITE" COMPARE 0= IF 2DROP ." _PAGE_EXECUTE_READWRITE" BREAK
  160.         2DUP S" MEM_COMMIT"     COMPARE 0= IF 2DROP ." _MEM_COMMIT"     BREAK
  161.         2DUP S" MEM_RESERVE"    COMPARE 0= IF 2DROP ." _MEM_RESERVE"    BREAK
  162.         2DUP S" INVALID_HANDLE_VALUE"   COMPARE 0= IF 2DROP ." _INVALID_HANDLE_VALUE"   BREAK
  163.         2DUP S" FILE_ATTRIBUTE_ARCHIVE" COMPARE 0= IF 2DROP ." _FILE_ATTRIBUTE_ARCHIVE" BREAK
  164.         2DUP S" CREATE_ALWAYS"  COMPARE 0= IF 2DROP ." _CREATE_ALWAYS"  BREAK
  165.         2DUP S" OPEN_EXISTING"  COMPARE 0= IF 2DROP ." _OPEN_EXISTING"  BREAK
  166.         2DUP S" FILE_BEGIN"     COMPARE 0= IF 2DROP ." _FILE_BEGIN"     BREAK
  167.         2DUP S" FILE_CURRENT"   COMPARE 0= IF 2DROP ." _FILE_CURRENT"   BREAK
  168.         2DUP S" EXTERN" COMPARE 0= IF 2DROP ." _EXTERN" BREAK
  169.         2DUP S" EXPORT" COMPARE 0= IF 2DROP ." _EXPORT" BREAK
  170.         2DUP S" BREAK"  COMPARE 0= IF 2DROP ." _BREAK"  BREAK
  171.         2DUP S" ERR"    COMPARE 0= IF 2DROP ." _ERR"    BREAK
  172.  
  173.   0 DO  COUNT
  174.       CASE
  175.       [CHAR] @ OF ." _ld" ENDOF
  176.       [CHAR] ! OF ." save" ENDOF
  177.       [CHAR] = OF ." _equ" ENDOF
  178.       [CHAR] < OF ." less" ENDOF
  179.       [CHAR] > OF ." great" ENDOF
  180.       [CHAR] + OF ." plus" ENDOF
  181.       [CHAR] - OF ." minus" ENDOF
  182.       [CHAR] * OF ." _mul" ENDOF
  183.       [CHAR] / OF ." _div" ENDOF
  184.       [CHAR] . OF ." dot" ENDOF
  185.       [CHAR] : OF ." dcoma" ENDOF
  186.       [CHAR] ; OF ." _end" ENDOF
  187.       [CHAR] ? OF ." que" ENDOF
  188.       [CHAR] ( OF ." _c" ENDOF
  189.       [CHAR] ) OF ." cend" ENDOF
  190.       [CHAR] [ OF ." _x" ENDOF
  191.       [CHAR] ] OF ." _y" ENDOF
  192.       [CHAR] { OF ." lsk" ENDOF
  193.       [CHAR] } OF ." rsk" ENDOF
  194.       [CHAR] , OF ." com" ENDOF
  195.       [CHAR] ' OF ." tic" ENDOF
  196.       [CHAR] ~ OF ." til" ENDOF
  197.       [CHAR] ^ OF ." pic" ENDOF
  198.       [CHAR] " OF ." dtic" ENDOF
  199.       [CHAR] | OF ." l" ENDOF
  200.       [CHAR] # OF ." n" ENDOF
  201.       [CHAR] $ OF ." dol" ENDOF
  202.       [CHAR] \ OF ." sl" ENDOF
  203.       [CHAR] & OF ." and_" ENDOF
  204.         I IF EMIT ENDOF
  205.       [CHAR] 0 OF ." _0" ENDOF
  206.       [CHAR] 1 OF ." _1" ENDOF
  207.       [CHAR] 2 OF ." _2" ENDOF
  208.       [CHAR] 3 OF ." _3" ENDOF
  209.       [CHAR] 4 OF ." _4" ENDOF
  210.       [CHAR] 5 OF ." _5" ENDOF
  211.       [CHAR] 6 OF ." _6" ENDOF
  212.       [CHAR] 7 OF ." _7" ENDOF
  213.       [CHAR] 8 OF ." _8" ENDOF
  214.       [CHAR] 9 OF ." _9" ENDOF
  215.                EMIT
  216.     0 ENDCASE
  217.      LOOP DROP ;
  218.  
  219. 0 VALUE #GN
  220.  
  221. : GN.  ( ADDR -- )
  222.   DUP 0x80 + 0xFFFFFF00 AND 0=  \  ABS  0x7F <
  223.   IF H.-H EXIT THEN
  224.   DUP HERE U<
  225.   IF   DUP         WordByAddr
  226.         OVER >R GTYPE ." +"
  227.         R> 1- NAME> - DUP TO #GN H.-H
  228.   ELSE NEGATE DUP  WordByAddr
  229.         >R >R
  230.         R@ 1- NAME> - DUP TO #GN H.-H
  231.         ." -" R> R>  GTYPE
  232.   THEN
  233.  ;
  234.  
  235. : .INT ( ADDR -- ADDR1 )
  236.  CR   DUP HSSSS @ +
  237.  @ OVER @ \ ." I=" 2DUP H. H. CR
  238.  =
  239.  IF   ."  DD " DUP @ H.-H
  240.  ELSE ."  DD "   DUP @ GN.
  241.  THEN  CELL+ ;
  242.  
  243. : .ADR ( ADDR -- ADDR1 )
  244.    CR ."  DD "   DUP @ GN. CELL+ ;
  245.  
  246. : .ADR68 ( ADDR -- ADDR1 )
  247.    CR ."  DD 68 "   DUP @ DUP H. GN. CELL+ ;
  248.  
  249. : 5_GD_STEP0 ( ADDR -- ADDR1 )
  250.   1_GD_STEP .INT ;
  251.  
  252. : 5_GD_STEP1 ( ADDR -- ADDR1 )
  253.   1_GD_STEP .ADR ;
  254.  
  255. : 6_GD_STEP0 ( ADDR -- ADDR1 )
  256.   2_GD_STEP  .INT ;
  257.  
  258. : 6_GD_STEP1 ( ADDR -- ADDR1 )
  259.   2_GD_STEP .ADR ;
  260.  
  261. : 7_GD_STEP  ( ADDR -- ADDR1 )
  262.   3_GD_STEP  .ADR ;
  263.  
  264. : 1A_GD_STEP ( ADDR c -- ADDR1 )
  265.    DROP   1+ DUP REL@ CELL+ GN. CELL+  ;
  266.  
  267. : 2A_GD_STEP ( ADDR W -- ADDR1 )
  268.    CR ."  DW "
  269.      H.-H   2+ DUP REL@ CELL+
  270.    CR ."  DD "  GN. ." -$-4" CELL+  ;
  271. C" C>S" FIND NIP 0=
  272. [IF] : C>S ( c -- n )  0xFF AND [ 0x7F INVERT ] LITERAL XOR 0x80 + ;
  273. [THEN]
  274.  
  275. : J_GD_STEP_
  276.   0x70 - 3 *
  277.   C" jo jnojb jaeje jnejbeja js jnsjp jnpjl jgejlejg " 1+ +
  278.    CR 3    TYPE ."  " 1+  DUP C@ C>S OVER + 1+ GN. 1+
  279.  ; \ short
  280.  
  281. : J_GD_STEP
  282.   DUP >R
  283.   0x70 - 3 *
  284.   C" jo jnojb jaeje jnejbeja js jnsjp jnpjl jgejlejg " 1+ +
  285.    CR ." ;" 3   TYPE ."  " 1+  DUP C@ C>S OVER + 1+ GN. 1+
  286.    2- R>
  287.    #GN IF 2_GD_STEP EXIT THEN
  288.    J_GD_STEP_
  289.  ; \ short
  290.  
  291. : GD-STEP  (  CFA  -- CFA+N )
  292. \  DUP 9 EMIT H.
  293.   DUP   C@      \  CFA  N'
  294.   DUP   0C3 = IF  1_GD_STEP  EXIT THEN  \ RET
  295.   DUP   066 = IF  1_GD_STEP  EXIT THEN  \ D16:
  296.   DUP   064 = IF  1_GD_STEP  EXIT THEN  \ FS:
  297.   DUP   068 = IF  1_GD_STEP .INT  EXIT THEN  \ push X
  298. \ LOOPNZ X LOOPZ X LOOP X JECXZ X IN AL, 0 IN EAX, 0 OUT 0 , AL OUT 0 , EAX
  299. \ 1110.0XXX
  300.   DUP 0F8 AND 0E0 = IF 2_GD_STEP EXIT THEN
  301. \ 010X.XXXX
  302.   DUP 0E0 AND 040 = IF 1_GD_STEP EXIT THEN  \ INC|DEC|PUSH|POP  E_X
  303. \ 0111.0XXX
  304.   DUP 0F0 AND 070 = IF J_GD_STEP EXIT THEN  \ JO   short
  305.   DUP         0EB = IF 2_GD_STEP EXIT THEN  \ JMP
  306.   DUP   090 = IF  1_GD_STEP  EXIT THEN  \  !!!!!
  307.   DUP   099 = IF  1_GD_STEP  EXIT THEN  \  CDQ
  308.   DUP   0A4 = IF  1_GD_STEP  EXIT THEN  \
  309.   DUP   0A5 = IF  1_GD_STEP  EXIT THEN  \
  310.   DUP   0A6 = IF  1_GD_STEP  EXIT THEN  \
  311.   DUP   0AA = IF  1_GD_STEP  EXIT THEN  \
  312.   DUP   0AB = IF  1_GD_STEP  EXIT THEN  \
  313.   DUP   0AC = IF  1_GD_STEP  EXIT THEN  \
  314.   DUP   0AE = IF  1_GD_STEP  EXIT THEN  \
  315.   DUP   024 = IF  2_GD_STEP  EXIT THEN  \ AND  AL , # 1
  316.   DUP   02C = IF  2_GD_STEP  EXIT THEN  \ SUB  AL , # 1
  317.   DUP   03C = IF  2_GD_STEP  EXIT THEN  \ CMP  AL , # 1
  318.   DUP   0CD = IF  2_GD_STEP  EXIT THEN  \ INT   X
  319.   DUP   0B0 = IF  2_GD_STEP  EXIT THEN  \
  320.   DUP   0F2 = IF  1_GD_STEP  EXIT THEN  \
  321.   DUP   0F3 = IF  2_GD_STEP  EXIT THEN  \ REPZ CMPSB
  322.   DUP   0FC = IF  1_GD_STEP  EXIT THEN  \ CLD
  323.   DUP   0FD = IF  1_GD_STEP  EXIT THEN  \ STD
  324.   DUP   09C = IF  1_GD_STEP  EXIT THEN  \ PUSHFD
  325.   DUP   09D = IF  1_GD_STEP  EXIT THEN  \ POPFD
  326.   DUP5B?0     IF  5_GD_STEP0 EXIT THEN
  327.   DUP5B?1     IF  5_GD_STEP1 EXIT THEN
  328.  
  329.    DUP   0E9 = IF CR ."  DB 0E9H"
  330.                   CR ."  DD " 1A_GD_STEP ." -$-4" EXIT THEN  \  JMP
  331.    DUP   0E8 = IF CR ."  call " 1A_GD_STEP
  332.                  DUP CELL- REL@ CELL+
  333.                  DUP USER-VALUE-CODE =
  334.                  OVER      USER-CODE = OR
  335.                  IF CR ."  DD reserve+"
  336.                     DROP DUP @ RESERVE -  H.-H CELL+
  337.                        EXIT
  338.                  THEN          
  339.  
  340.                      CONSTANT-CODE =
  341.                  IF   .INT EXIT
  342.                  THEN          
  343.  
  344.                  DUP CELL- REL@ CELL+
  345.                  CREATE-CODE  =
  346.                  IF   .INT 2DUP U>
  347.                    IF   DUP C@ 1_GD_STEP
  348.                         BEGIN  2DUP U>
  349.                         WHILE  DUP 7 AND
  350.                         IF ." ,"
  351.                         ELSE CR ."  DB "
  352.                         THEN DUP C@ H.-H 1+                            
  353.                         REPEAT
  354.                    THEN  EXIT
  355.                  THEN          
  356.  
  357.                  DUP CELL- REL@ CELL+
  358.                  DUP  CLITERAL-CODE =
  359.                  OVER ALITERAL-CODE = OR
  360.                  SWAP SLITERAL-CODE = OR
  361.                  IF  CR ."  DB " DUP COUNT DUP>R DUP H.-H
  362.                      CR ."  DB " ATYPE ." ,0"
  363.                      R> + 2+ EXIT
  364.                  THEN          
  365.                  DUP CELL- REL@ CELL+
  366.                  VECT-CODE  =
  367.                  IF   .ADR  EXIT
  368.                  THEN
  369.  
  370.             EXIT THEN  \  CALL
  371. \ 1110.11XX
  372.   DUP FC AND EC = IF 1_GD_STEP EXIT THEN  \ IN|OUT  EAX AL, DX | DX, EAX EL
  373.  
  374.   DROP
  375.   DUP W@ \ CR ." G=" DUP H.
  376.   DUP3B?[EBP]   IF  3_GD_STEP   EXIT THEN
  377.   DUP3B?        IF  3_GD_STEP   EXIT THEN
  378.   DUP2B?        IF  2_GD_STEP   EXIT THEN
  379.   DUP 0DB0A =   IF  2_GD_STEP   EXIT THEN  \ OR  BL, BL
  380.   DUP 0C90A =   IF  2_GD_STEP   EXIT THEN  \ OR  CL, CL
  381.   DUP 0038B =   IF  2_GD_STEP   EXIT THEN  \ MOV  EAX, [EBX]
  382.   DUP 0EC87 =   IF  2_GD_STEP   EXIT THEN  \
  383.   DUP 0188A =   IF  2_GD_STEP   EXIT THEN  \ MOV BL, [EAX]
  384.   DUP 07D8B =   IF  3_GD_STEP   EXIT THEN  \ MOV EDI, X [EBP]
  385.   DUP 0C58B =   IF  2_GD_STEP   EXIT THEN  \ MOV EAX,  EBP
  386.   DUP 0E08B =   IF  2_GD_STEP   EXIT THEN  \ MOV EAX,  EBP
  387.   DUP 0E88B =   IF  2_GD_STEP   EXIT THEN  \ MOV EAX,  EBP
  388.   DUP 0458F =   IF  3_GD_STEP   EXIT THEN  \ POP  X [EBP]
  389.   DUP 075FF =   IF  3_GD_STEP   EXIT THEN  \ PUSH X [EBP]
  390.   DUP 0C009 =   IF  2_GD_STEP   EXIT THEN  \ OR   EAX, EAX
  391.   DUP 0E3FF =   IF  2_GD_STEP   EXIT THEN  \ JMP  EBX
  392. \  DUP 0D2FF =   IF  2_GD_STEP   EXIT THEN  \ JMP  EDX
  393.   DUP 0E2FF =   IF  2_GD_STEP   EXIT THEN  \ JMP  EDX
  394.   DUP 0D0FF =   IF  2_GD_STEP   EXIT THEN
  395.   DUP 0D2FF =   IF  2_GD_STEP   EXIT THEN  \ CALL EDX
  396.   DUP 023FF =   IF  2_GD_STEP   EXIT THEN  \ JMP [EBX]
  397.   DUP 0F903 =   IF  2_GD_STEP   EXIT THEN  \ ADD EDI, ECX
  398.   DUP 0F103 =   IF  2_GD_STEP   EXIT THEN  \ ADD ESI, ECX
  399.   DUP 0F003 =   IF  2_GD_STEP   EXIT THEN  \ ADD ESI, EAX
  400.   DUP 0D703 =   IF  2_GD_STEP   EXIT THEN  \ ADD EDX, EDI
  401.   DUP 0C703 =   IF  2_GD_STEP   EXIT THEN  \ ADD EAX, EDI
  402.   DUP 0DF03 =   IF  2_GD_STEP   EXIT THEN  \ ADD EBX, EDI
  403.   DUP 0E103 =   IF  2_GD_STEP   EXIT THEN  \ ADD ESP, ECX
  404.   DUP 0E303 =   IF  2_GD_STEP   EXIT THEN  \ ADD ESP, EBX
  405.   DUP 0E803 =   IF  2_GD_STEP   EXIT THEN  \ ADD  EBP, EAX
  406.   DUP 0EB03 =   IF  2_GD_STEP   EXIT THEN
  407.   DUP 0F803 =   IF  2_GD_STEP   EXIT THEN  \ ADD EDI, EAX
  408.   DUP 0E903 =   IF  2_GD_STEP   EXIT THEN  \ ADD EBP, ECX
  409.   DUP  0523 =   IF  2_GD_STEP .INT  EXIT THEN  \ AND EAX , 55C18F
  410.   DUP  052B =   IF  2_GD_STEP .INT  EXIT THEN  \ SUB EAX , 55C18F
  411.   DUP 0C72B =   IF  2_GD_STEP   EXIT THEN  \ SUB EAX, EDI
  412.   DUP 0CD2B =   IF  2_GD_STEP   EXIT THEN  \ SUB ECX, EBP
  413.   DUP 0CF2B =   IF  2_GD_STEP   EXIT THEN  \ SUB ECX, EDI
  414.   DUP 0D72B =   IF  2_GD_STEP   EXIT THEN  \ SUB EDX, EDI
  415.   DUP 0F22B =   IF  2_GD_STEP   EXIT THEN  \ SUB ESI, EDX
  416.   DUP 0DE2B =   IF  2_GD_STEP   EXIT THEN  \ SUB  EBX, ESI
  417.   DUP 0E32B =   IF  2_GD_STEP   EXIT THEN  \ SUB  ESP, EBX
  418.   DUP 0E82B =   IF  2_GD_STEP   EXIT THEN  \ SUB  EBP, EAX
  419.   DUP 0FF33 =   IF  2_GD_STEP   EXIT THEN  \ xor EDI, EDI
  420.   DUP 0D233 =   IF  2_GD_STEP   EXIT THEN  \ xor EDX, EDX
  421.   DUP 0F33B =   IF  2_GD_STEP   EXIT THEN  \ CMP ESI, EBX
  422.   DUP 0C13A =   IF  2_GD_STEP   EXIT THEN  \ CMP  AL,  CL
  423.   DUP 0C23A =   IF  2_GD_STEP   EXIT THEN  \ CMP  AL,  DL
  424.   DUP 0D83A =   IF  2_GD_STEP   EXIT THEN  \ CMP  BL,  AL
  425.  
  426.   DUP 0EB80 =   IF  3_GD_STEP   EXIT THEN  \ SUB  BL, # X
  427.   DUP 0FB80 =   IF  3_GD_STEP   EXIT THEN  \ CMP  BL, # X
  428.   DUP 0C0C6 =   IF  3_GD_STEP   EXIT THEN  \ MOV AL, # 0
  429.   DUP 00081 =   IF  2_GD_STEP .INT  EXIT THEN  \ ADD [EAX] , # 800
  430.   DUP  0581 =   IF  2_GD_STEP .ADR .INT  EXIT THEN  \ ADD X , # Y
  431.   DUP 0E181 =   IF  2_GD_STEP .INT  EXIT THEN  \ AND ECX, # FF
  432.   DUP 0E281 =   IF  2_GD_STEP .INT  EXIT THEN  \ AND EDX, # FF
  433.   DUP 0F981 =   IF  2_GD_STEP .INT  EXIT THEN  \ CMP ECX, # 1
  434.   DUP 04583 =   IF  4_GD_STEP   EXIT THEN  \ ADD     F8 [EBP] , # 2
  435.   DUP 0EB83 =   IF  3_GD_STEP   EXIT THEN  \ SUB EBX, # X
  436.   DUP 0FB83 =   IF  3_GD_STEP   EXIT THEN  \ CMP EBX, # X
  437.   DUP 0EE83 =   IF  3_GD_STEP   EXIT THEN  \ SUB ESI, # X
  438.   DUP 0E183 =   IF  3_GD_STEP   EXIT THEN  \ AND ECX, # 3
  439.   DUP 0E383 =   IF  3_GD_STEP   EXIT THEN  \ AND EBX, # 3
  440.   DUP 0EC83 =   IF  3_GD_STEP   EXIT THEN
  441.   DUP 0F9C1 =   IF  3_GD_STEP   EXIT THEN  \ SAR ECX, # 2
  442.   DUP 01889 =   IF  2_GD_STEP   EXIT THEN  \ MOV   [EAX], EBX
  443.   DUP 04889 =   IF  3_GD_STEP   EXIT THEN  \ MOV X [EAX], ECX
  444.   DUP 04289 =   IF  3_GD_STEP   EXIT THEN  \ MOV 4 [EDX], EAX
  445.   DUP 04B89 =   IF  3_GD_STEP   EXIT THEN  \ MOV 2 [EBX], ECX
  446.   DUP 0468A =   IF  3_GD_STEP   EXIT THEN  \ MOV  AL, X [ESI]
  447.   DUP 0088A =   IF  2_GD_STEP   EXIT THEN  \ MOV  CL, [EAX]
  448.   DUP 0068B =   IF  2_GD_STEP   EXIT THEN  \ MOV EAX,   [ESI]
  449.   DUP 01B8B =   IF  2_GD_STEP   EXIT THEN  \ MOV EBX,   [EBX]
  450.   DUP  DF8B =   IF  2_GD_STEP   EXIT THEN  \ MOV EBX, EDI
  451.   DUP  EC8B =   IF  2_GD_STEP   EXIT THEN
  452.   DUP 05089 =   IF  3_GD_STEP   EXIT THEN  \ MOV X [EAX] , EDX
  453.   DUP 0368B =   IF  2_GD_STEP   EXIT THEN  \ MOV ESI,   [ESI]
  454.   DUP 0758B =   IF  3_GD_STEP   EXIT THEN  \ MOV ESI, X [EBP]
  455.   DUP 0408B =   IF  3_GD_STEP   EXIT THEN  \ MOV EAX, X [EAX]
  456.   DUP 0498B =   IF  3_GD_STEP   EXIT THEN  \ MOV ECX, FC [ECX]
  457.   DUP 04B8B =   IF  3_GD_STEP   EXIT THEN  \ MOV  ECX, 12 [EBX]
  458.   DUP 0E58B =   IF  2_GD_STEP   EXIT THEN
  459.   DUP 06D8D =   IF  3_GD_STEP   EXIT THEN  \ LEA  EBP, OFF-EBP [EBP]
  460.   DUP 0C583 =   IF  3_GD_STEP   EXIT THEN  \ ADD  EBP, # OFF-EBP
  461.   DUP 0ED83 =   IF  3_GD_STEP   EXIT THEN  \ SUB  EBP, # X
  462.   DUP 0C483 =   IF  3_GD_STEP   EXIT THEN  \ ADD  ESP, # X
  463.   DUP 0FA83 =   IF  3_GD_STEP   EXIT THEN  \ CMP EDX, # 3
  464.   DUP 07D83 =   IF  4_GD_STEP   EXIT THEN  \ CMP X [EBP] , # Y
  465.   DUP 07D89 =   IF  3_GD_STEP   EXIT THEN  \ MOV  X [EBP], EDI
  466.   DUP 0CC8B =   IF  2_GD_STEP   EXIT THEN
  467.   DUP 0F58B =   IF  2_GD_STEP   EXIT THEN
  468.   DUP 0FC8B =   IF  2_GD_STEP   EXIT THEN
  469.  
  470.   DUP 0F0FF AND
  471.       0800F =   IF  2A_GD_STEP  EXIT THEN  \ JNO  X
  472.   DUP 075F7 =   IF  3_GD_STEP   EXIT THEN  \  DIV DWORD [EBP]
  473.   DUP 0D9F7 =   IF  2_GD_STEP   EXIT THEN  \ NEG  ECX
  474.   DUP 0DBF7 =   IF  2_GD_STEP   EXIT THEN  \ NEG  EBX
  475.   DUP 0E3F7 =   IF  2_GD_STEP   EXIT THEN  \  MUL EBX
  476.   DUP 0EBF7 =   IF  2_GD_STEP   EXIT THEN  \ IMUL EBX
  477.   DUP 0FBF7 =   IF  2_GD_STEP   EXIT THEN  \ IDIV EBX
  478.   DUP 0F3F7 =   IF  2_GD_STEP   EXIT THEN  \  DIV EBX
  479.   DUP 0F60B =   IF  2_GD_STEP   EXIT THEN  \ OR   ESI, ESI
  480.   DUP 0CE8B =   IF  2_GD_STEP   EXIT THEN  \ MOV  ECX, ESI
  481.   DUP 0C48B =   IF  2_GD_STEP   EXIT THEN  \ MOV  EAX, ESP
  482.   DUP 0F18B =   IF  2_GD_STEP   EXIT THEN  \ MOV  ESI, ECX
  483.   DUP 0F08B =   IF  2_GD_STEP   EXIT THEN  \ MOV  ESI, EAX
  484.   DUP 0D58B =   IF  2_GD_STEP   EXIT THEN  \ MOV EDX, EBP
  485.   DUP 0D78B =   IF  2_GD_STEP   EXIT THEN  \ MOV EDX, EDI
  486.   DUP 0DD8B =   IF  2_GD_STEP   EXIT THEN  \ MOV  EBX, EBP
  487.   DUP 0FA8B =   IF  2_GD_STEP   EXIT THEN  \ MOV EDI, EDX
  488.   DUP 01A8B =   IF  2_GD_STEP   EXIT THEN  \ MOV EBX, [EDX]
  489.   DUP 0028B =   IF  2_GD_STEP   EXIT THEN  \ MOV EAX, [EDX]
  490.   DUP 0078B =   IF  2_GD_STEP   EXIT THEN  \ MOV EAX, [EDI]
  491.   DUP  088B =   IF  2_GD_STEP   EXIT THEN  \ MOV ECX, [EAX]
  492.   DUP  098B =   IF  2_GD_STEP   EXIT THEN  \ MOV ECX, [ECX]
  493.   DUP  0A8B =   IF  2_GD_STEP   EXIT THEN  \ MOV ECX, [EDX]
  494.   DUP  00C6 =   IF  3_GD_STEP   EXIT THEN  \ MOV [EAX] , # x
  495.   DUP 0688D =   IF  3_GD_STEP   EXIT THEN  \ LEA EBP,  4 [EAX]
  496.   DUP 0428D =   IF  3_GD_STEP   EXIT THEN  \ LEA EAX , FE [EDX]
  497.   DUP 0498D =   IF  3_GD_STEP   EXIT THEN  \ LEA ECX, -1 [ECX]
  498.   DUP 0488D =   IF  3_GD_STEP   EXIT THEN  \ LEA ECX , FC [EAX]
  499.  
  500.   DUP 07F8D =   IF  3_GD_STEP   EXIT THEN  \ LEA EDI, -1 [EDI]
  501.   DUP 0528D =   IF  3_GD_STEP   EXIT THEN  \ LEA EDX, -4 [EDX]
  502. \  DUP 01C8D =   IF  3_GD_STEP   EXIT THEN  \ LEA  EBX,  [EDX] [EAX]
  503.   DUP 0038F =   IF  2_GD_STEP   EXIT THEN  \ POP  [EBX]
  504.   DUP 05DD1 =   IF  3_GD_STEP   EXIT THEN  \ RCR [EBP], # 1
  505.   DUP 0D0D1 =   IF  2_GD_STEP   EXIT THEN  \ RCL EAX, # 1
  506.   DUP 065D1 =   IF  3_GD_STEP   EXIT THEN  \ SHL [EBP], # 1
  507.   DUP 0C0C1 =   IF  3_GD_STEP   EXIT THEN  \ ROL [EBP], # 1
  508.   DUP  45FF =   IF  3_GD_STEP   EXIT THEN  \ INC     0 [EBP]
  509.   DUP 0310F =   IF  2_GD_STEP   EXIT THEN  \ RDTSC
  510.   DUP  873B =   IF CR ."  cmp " ." eax," .EDI  EXIT THEN  \ CMP EAX, X [EDI]
  511.   DUP  878B =   IF CR ."  mov " ." eax," .EDI  EXIT THEN  \ MOV EAX, X [EDI]
  512.   DUP  8F8B =   IF CR ."  mov " ." ecx," .EDI  EXIT THEN  \ MOV ECX, X [EDI]
  513.   DUP  878D =   IF CR ."  lea " ." eax," .EDI  EXIT THEN  \ LEA EAX, X [EDI]
  514.   DUP  87FF =   IF CR ."  inc DWORD" .EDI           EXIT THEN  \ INC   19F9 [EDI]
  515.   DUP  8788 =   IF CR ."  mov al,"  .EDI      EXIT THEN  \ MOV     19F9 [EDI] , AL
  516.   DUP  8789 =   IF CR ."  mov " .EDI ." ,eax"     EXIT THEN  \ MOV X [EDI], EAX
  517.   DUP  8703 =   IF CR ."  add eax," .EDI      EXIT THEN  \ ADD EAX , X [EDI]
  518.   DUP  8733 =   IF CR ."  xor eax," .EDI      EXIT THEN  \ XOR EAX , X [EDI]
  519.   DUP  87C7 =   IF CR ."  mov " DROP DUP 6 + @
  520.                              H. ." ,"  DUP @ .EDI 6 + EXIT THEN  \ MOV X [EDI], # Y
  521.   DUP  45C7 =   IF 3_GD_STEP .INT    EXIT THEN  \ MOV X [EBP], # X
  522.   DUP  3D83 =   IF 2_GD_STEP .ADR DUP C@ 1_GD_STEP EXIT THEN  \ MOV X [EBP], # X
  523.   DUP  0533 =   IF 2_GD_STEP .ADR EXIT THEN  \ XOR X [EBP], X
  524.   DUP  0503 =   IF 2_GD_STEP .ADR EXIT THEN  \ ADD    EAX , X
  525.   DUP  1501 =   IF 2_GD_STEP .ADR EXIT THEN  \ ADD    X , EDX  
  526.   DUP  050B =   IF 2_GD_STEP .ADR EXIT THEN  \ OR     EAX , X
  527.   DUP  0D3B =   IF 2_GD_STEP .ADR EXIT THEN  \ CMP    ECX , x
  528.   DUP  2DF7 =   IF 2_GD_STEP .ADR EXIT THEN  \ IMUL   x
  529.   DUP  808D =   IF 2_GD_STEP .INT EXIT THEN  \ LEA  EAX , 8700 [EAX]
  530.   DUP  9A8D =   IF 2_GD_STEP .INT EXIT THEN  \ LEA  EBX , 55C298 [EDX]
  531.   DUP  01C7 =   IF 2_GD_STEP .INT EXIT THEN  \ MOV [ECX] , # 424648D
  532.   DUP 0C0C7 =   IF 2_GD_STEP .INT EXIT THEN  \ MOV EAX, # X
  533.   DUP 0C1C7 =   IF 2_GD_STEP .INT EXIT THEN  \ MOV ECX, # X
  534.   DUP 0C069 =   IF 2_GD_STEP .INT EXIT THEN  \ IMUL    EAX , EAX , # 4
  535.   DUP 0C3C7 =   IF 2_GD_STEP .INT EXIT THEN  \ MOV EBX, # X
  536.   DUP  05C7 =   IF 2_GD_STEP .ADR .INT  EXIT THEN  \ MOV     5746E5  ( OPT?+5  ) , # FFFFFFFF
  537.   DUP6B?0       IF  6_GD_STEP0  EXIT THEN  \ MOV  EAX, # X
  538.   DUP6B?1       IF  6_GD_STEP1  EXIT THEN
  539.   DUP 00583 =   IF  6_GD_STEP1
  540.          DUP C@     1_GD_STEP   EXIT THEN
  541.   DROP
  542.   DUP @ FFFFFF AND
  543.   DUP 021C8D = IF 3_GD_STEP     EXIT THEN
  544.   DUP 240401 = IF 3_GD_STEP     EXIT THEN \ ADD [ESP] , EAX
  545.   DUP C09D0F = IF 3_GD_STEP     EXIT THEN \ SETGE  AL
  546.   DUP C09E0F = IF 3_GD_STEP     EXIT THEN \ SETLE  AL
  547.   DUP 8D1C8D = IF 7_GD_STEP     EXIT THEN \ LEA  EBX, [ECX*4]
  548. \ CMPXCHG [EAX] , AL| EAX
  549. \ LSS     EAX , [EAX]
  550. \ BTR     [EAX] , EAX
  551. \ LFS     EAX , [EAX]
  552. \ LGS     EAX , [EAX]
  553. \ MOVZX   EAX , BYTE|WORD  PTR [EAX]
  554. \ 0000.0000 1011.1XXX 0000.1111
  555.   DUP FFF8FF
  556.   AND 00B00F = IF 3_GD_STEP      EXIT THEN
  557.  
  558.   DUP 24442B = IF 4_GD_STEP      EXIT THEN \ SUB  EAX, X [ESP]
  559.   DUP 24648D = IF 4_GD_STEP      EXIT THEN \ LEA  ESP, X [ESP]
  560. \ MOV|LEA  EAX, X [E__] [E__*X]
  561. \ MOV|LEA  X [E__] [E__*X], EAX
  562. \ POP      X [E__] [E__*X]
  563. \ XXXX.X1XX 0100.0100 1000.1XX1
  564.   DUP 04FFF9
  565.   AND 044489 = IF 4_GD_STEP      EXIT THEN
  566.   DUP 035C8D = IF 4_GD_STEP      EXIT THEN \ MOV   EBX, X  [EBX] [EAX]
  567.   DUP 03448B = IF 4_GD_STEP      EXIT THEN \ MOV   EAX, X  [EBX] [EAX]
  568.   DUP 03B60F = IF 3_GD_STEP      EXIT THEN \ MOVZX EAX, BYTE PTR [EBX]
  569.   DUP 18B60F = IF 3_GD_STEP      EXIT THEN \ MOVZX EBX, BYTE PTR [EAX]
  570.   DUP 31348B = IF 3_GD_STEP      EXIT THEN \ MOV ESI, [ESI+ECX]
  571.   DUP 40B60F = IF 4_GD_STEP      EXIT THEN \ MOVZX   EAX , BYTE PTR x [EAX]
  572.   DUP 345C8B = IF 4_GD_STEP      EXIT THEN \ LEA     EAX , [EAX] [ECX*4]
  573.   DUP 0E348B = IF 3_GD_STEP      EXIT THEN \ MOV ESI, [ESI] [ECX]
  574.   DUP 03048D = IF 3_GD_STEP      EXIT THEN \ LEA EAX, [EBX] [EAX]
  575.   DUP 355C89 = IF 4_GD_STEP      EXIT THEN \ MOV  EBX, [ESI+ESP-4]
  576.   DUP 30748B = IF 4_GD_STEP      EXIT THEN \ MOV ESI, [1+ESI+EAX]
  577.   DUP 88048D = IF 3_GD_STEP      EXIT THEN \ LEA EAX , [EAX] [ECX*4]
  578.   DUP 02048D = IF 3_GD_STEP      EXIT THEN \ LEA EAX, [EDX] [EAX]
  579.   DUP 06748B = IF 4_GD_STEP      EXIT THEN \ MOV ESI, 1 [ESI] [EAX]
  580.   DUP 245C8B = IF 4_GD_STEP      EXIT THEN \ MOV EBX, 8 [ESP]
  581.   DUP 244C8B = IF 4_GD_STEP      EXIT THEN \ MOV ECX, 8 [ESP]
  582.   DUP 2E5C89 = IF 4_GD_STEP      EXIT THEN \ MOV  -4 [ESI] [EBP], EBX
  583.   DUP 045C89 = IF 4_GD_STEP      EXIT THEN \ MOV  4 [ESP] [EAX], EBX
  584.   DUP 2E74FF = IF 4_GD_STEP      EXIT THEN \ PUSH -4 [ESI] [EBP]
  585.   DUP 3574FF = IF 4_GD_STEP      EXIT THEN \ PUSH -4 [EBP] [ESI]
  586.   DUP 240CFF = IF 3_GD_STEP      EXIT THEN \ DEC     [ESP]
  587.   DUP 09B70F = IF 3_GD_STEP      EXIT THEN \ MOVZX   ECX , WORD PTR X [ECX]
  588.   DUP 40B70F = IF 4_GD_STEP      EXIT THEN \ MOVZX   EAX , WORD PTR X [EAX]
  589.   DUP 42B60F = IF 4_GD_STEP      EXIT THEN \ MOVZX   EAX , WORD PTR X [EDX]
  590.   DUP 24048B = IF 3_GD_STEP      EXIT THEN \ MOV   EAX, 0  [ESP]
  591.   DUP 240C8B = IF 3_GD_STEP      EXIT THEN \ MOV   ECX , [ESP]
  592.   DUP  1048B = IF 3_GD_STEP      EXIT THEN \ MOV   EAX , [ECX] [EAX]
  593.  
  594.   DUP 01048D = IF 3_GD_STEP      EXIT THEN \ LEA   EAX , [ECX] [EAX]
  595.   DUP C0BE0F = IF 3_GD_STEP      EXIT THEN \ MOV   EAX, AL
  596.   DUP 0045C7 = IF 3_GD_STEP .INT EXIT THEN \ MOV  0 [EBP], # 0
  597.   DUP 240481 = IF 3_GD_STEP .INT EXIT THEN \ ADD     [ESP] , # 4
  598.  
  599.   DUP B5348D = IF 3_GD_STEP .INT EXIT THEN \ LEA  ESI, [ESI*4]
  600.   DUP 8D0C8D = IF 3_GD_STEP .INT EXIT THEN \ LEA  ECX, [ECX*4]
  601.   DUP 84248D = IF 3_GD_STEP      EXIT THEN \ LEA  ESP, [ESP] [EAX*4]
  602.  
  603.  
  604.   DUP 244C2B = IF 4_GD_STEP      EXIT THEN \   SUB     ECX , 4 [ESP]
  605.   DUP 04B60F = IF 4_GD_STEP      EXIT THEN \   MOVZX EAX, BYTE [EDI] [ESI]
  606.   DUP 243C83 = IF 4_GD_STEP      EXIT THEN \   CMP     [ESP] , # 0
  607.   DUP7B?       IF 7_GD_STEP      EXIT THEN
  608.   DUP 2404FF = IF 3_GD_STEP      EXIT THEN \ INC [ESP]
  609.   DUP 241C8B = IF 3_GD_STEP      EXIT THEN \ MOV  EBX, [ESP]
  610.   DUP 240403 = IF 3_GD_STEP      EXIT THEN \ ADD  EAX , [ESP]
  611.   DUP 87B60F = IF CR ."  movzx eax,BYTE" DROP 1+ DUP .EDI  EXIT THEN  \ MOVZX   EAX , BYTE PTR 19E3 [EDI]
  612.   CR H. TRUE ABORT" UNKNOWN CODE"
  613. ;
  614.  
  615. : GDIS ( A-limit A-init -- )
  616. \   CR ." VV=" 2DUP H. H. 2DUP - .
  617.     BEGIN
  618. \       H-STDOUT  1 TO H-STDOUT ." ." TO H-STDOUT
  619.         GD-STEP  2DUP U> 0=
  620.     UNTIL  2DROP ;
  621.  BASE !
  622. \EOF
  623.         2DUP S" MOD"    COMPARE 0= IF 2DROP ." _MOD"    BREAK
  624.         2DUP S" DUP"    COMPARE 0= IF 2DROP ." _DUP"    BREAK
  625.         2DUP S" OR"     COMPARE 0= IF 2DROP ." _OR"     BREAK
  626.         2DUP S" XOR"    COMPARE 0= IF 2DROP ." _XOR"    BREAK
  627.         2DUP S" AND"    COMPARE 0= IF 2DROP ." _AND"    BREAK
  628.         2DUP S" CMOVE"  COMPARE 0= IF 2DROP ." _CMOVE"  BREAK
  629.         2DUP S" TYPE"   COMPARE 0= IF 2DROP ." _TYPE"   BREAK
  630.         2DUP S" ALIGN"  COMPARE 0= IF 2DROP ." _ALIGN"  BREAK
  631.         2DUP S" TITLE"  COMPARE 0= IF 2DROP ." _TITLE"  BREAK
  632.         2DUP S" LT"     COMPARE 0= IF 2DROP ." _LT"     BREAK
  633.         2DUP S" BL"     COMPARE 0= IF 2DROP ." _BL"     BREAK
  634.         2DUP S" DP"     COMPARE 0= IF 2DROP ." _DP"     BREAK
  635.         2DUP S" TRUE"   COMPARE 0= IF 2DROP ." _TRUE"   BREAK
  636.         2DUP S" FALSE"  COMPARE 0= IF 2DROP ." _FALSE"  BREAK
  637.         2DUP S" LOOP"   COMPARE 0= IF 2DROP ." _LOOP"   BREAK
  638.