kolibrios-fun/programs/develop/SPForth/devel/~mak/djgpp/gdis.F
Kirill Lipatov (Leency) 09488af869 KolSPForth12 uploaded to SVN
git-svn-id: svn://kolibrios.org@4867 a494cfbc-eb01-0410-851d-a64ba20cac60
2014-04-21 19:22:58 +00:00

638 lines
26 KiB
Forth

\ HSSSS H.
[IFNDEF] BREAK
: BREAK POSTPONE EXIT POSTPONE THEN ; IMMEDIATE
[THEN]
C" VECT-CODE" FIND NIP 0=
[IF] ' _VECT-CODE VALUE VECT-CODE
[ELSE] ' _VECT-CODE TO VECT-CODE
[THEN]
C" USER-CODE" FIND NIP 0=
[IF] ' _USER-CODE VALUE USER-CODE
[ELSE] ' _USER-CODE TO USER-CODE
[THEN]
C" USER-VALUE-CODE" FIND NIP 0=
[IF] ' _USER-VALUE-CODE VALUE USER-VALUE-CODE
[ELSE] ' _USER-VALUE-CODE TO USER-VALUE-CODE
[THEN]
\ ' _CONSTANT-CODE TO CONSTANT-CODE
\ ' _CREATE-CODE TO CREATE-CODE
\ ' _CLITERAL-CODE TO CLITERAL-CODE
\ ' _SLITERAL-CODE TO SLITERAL-CODE
BASE @ HEX
: DUP5B?0 ( C -- C FLAG )
DUP 0C7 AND 5 = \ ADD|OR|ADC|SBB|AND|SUB|XOR|CMP EAX, # X
OVER 0FC AND 0B8 = OR \ MOV EAX|EBX|ECX|EDX, # X
;
: DUP5B?1 ( C -- C FLAG )
DUP 0FD AND 0A1 = \ MOV EAX, X | X , EAX
;
: DUP6B?0 ( W -- W FLAG )
DUP C3FF AND C081 = \ ADD|OR|ADC|SBB|AND|SUB|XOR|CMP EAX, # X
OVER 0C7 = OR \ MOV [EAX], # X
\ OVER 878B = OR \ MOV EAX, X [EDI]
\ OVER 878D = OR \ LEA EAX, X [EDI]
\ OVER 873B = OR \ CMP EAX, X [EDI]
;
: DUP6B?1 ( W -- W FLAG )
DUP 00501 = \ ADD X , EAX
OVER 053B = OR \ CMP EAX, X
\ X00X.X101 1000.10X1
OVER 67FD AND 0589 = OR \ MOV X {[EBP]}, E(ACDB)X | E(ACDB)X , X {[EBP]}
OVER 0589 = OR \ MOV X , EAX
OVER 058D = OR \ MOV EAX, X
OVER 1D8D = OR \ MOV EBX, X
OVER 808B = OR \ MOV EAX, X [EAX]
OVER 05FF = OR \ INC X
\ OVER FCFF AND C0C7 = OR \ MOV EAX|EBX|ECX|EDX, # X
;
: UV> ' >BODY @ TlsIndex@ + POSTPONE LITERAL ; IMMEDIATE
\ : GGGX H. ." -0x" TlsIndex@ H. ." -0x" RESERVE H. ;
: .EDI ( ADDR n -- ADDR1 )
." [
DROP 2+ DUP @
\ ." XX" DUP H.
TlsIndex@ +
CASE
R0 OF ." T_R0" ENDOF
S0 OF ." T_S0" ENDOF
WARNING OF ." T_WARNING" ENDOF
STATE OF ." T_STATE" ENDOF
BLK OF ." T_BLK" ENDOF
CURFILE OF ." T_CURFILE" ENDOF
HANDLER OF ." T_HANDLER" ENDOF
HLD OF ." T_HLD" ENDOF
BASE OF ." T_BASE" ENDOF
PAD OF ." T_PAD" ENDOF
ER-A OF ." T_ERminusA" ENDOF
ER-U OF ." T_ERminusU" ENDOF
DOES>A OF ." T_DOESgreatA" ENDOF
#TIB OF ." T_nTIB" ENDOF
>IN OF ." T_greatIN" ENDOF
UV> TIB OF ." T_TIB" ENDOF
ATIB OF ." T_ATIB" ENDOF
UV> SOURCE-ID OF ." T_SOURCEminusID" ENDOF
CURSTR OF ." T_CURSTR" ENDOF
\ WBW-NFA OF ." T_WBWminusNFA" ENDOF
\ WBW-OFFS OF ." T_WBWminusOFFS" ENDOF
CURRENT OF ." T_CURRENT" ENDOF
S-O OF ." T_SminusO" ENDOF
UV> CONTEXT OF ." T_CONTEXT" ENDOF
>OUT OF ." T_greatOUT" ENDOF
W-CNT OF ." T_WminusCNT" ENDOF
\ NNN OF ." T_NNN" ENDOF
TlsIndex@ - RESERVE - DUP 0< IF CR ." (%edi) RESERVE " ABORT THEN
." reserve+0x"
H. ." +edi]" CELL+ EXIT
ENDCASE ." -main_task+edi]" CELL+
;
\ RESERVE - DUP 0< IF CR ." (%edi) RESERVE "
\ TlsIndex@ H. RESERVE H. TlsIndex@ - H. H. ABORT THEN
\ ." reserve+0x" GGGX ." +edi]" CELL+ EXIT
\ ." reserve+0x" TlsIndex@ - H. RESERVE H. ." +edi]" CELL+ EXIT
\ ENDCASE ." -main_task+edi]" CELL+ ;
: H.-H ." 0" BASE @ HEX SWAP U>D (D.) TYPE BASE ! ." H" ;
: 1_GD_STEP ( ADDR n -- ADDR1 )
CR ." DB " 0xFF AND H.-H 1+ ;
: 2_GD_STEP ( ADDR -- ADDR1 )
1_GD_STEP ." ," DUP C@ H.-H 1+ ;
: 3_GD_STEP ( ADDR -- ADDR1 )
2_GD_STEP ." ," DUP C@ H.-H 1+ ;
: 4_GD_STEP ( ADDR -- ADDR1 )
3_GD_STEP ." ," DUP C@ H.-H 1+ ;
[IFNDEF] OCTAL : OCTAL 8 BASE ! ;
[THEN]
: \ooo. ( n1 -- )
BASE @ >R DECIMAL
0 (D.) TYPE
R> BASE ! ;
: ATYPE ( arrd len -- )
DUP 0= IF 2DROP BREAK
[CHAR] ' EMIT
0 ?DO COUNT DUP [CHAR] ' = IF ." '" THEN EMIT
LOOP DROP
[CHAR] ' EMIT
;
0x5F535953 CONSTANT 'SYS_'
: GTYPE
OVER @ 'SYS_' = IF 4 - SWAP 4 + SWAP TYPE BREAK
." cfa_"
2DUP S" CONTEXT" COMPARE 0= IF 2DROP ." _CONTEXT" BREAK
2DUP S" WORD" COMPARE 0= IF 2DROP ." _WORD" BREAK
2DUP S" LEAVE" COMPARE 0= IF 2DROP ." _LEAVE" BREAK
2DUP S" REPEAT" COMPARE 0= IF 2DROP ." _REPEAT" BREAK
2DUP S" exit" COMPARE 0= IF 2DROP ." _exit" BREAK
2DUP S" CHAR" COMPARE 0= IF 2DROP ." _CHAR" BREAK
2DUP S" IF" COMPARE 0= IF 2DROP ." _IF" BREAK
2DUP S" ELSE" COMPARE 0= IF 2DROP ." _ELSE" BREAK
2DUP S" WHILE" COMPARE 0= IF 2DROP ." _WHILE" BREAK
2DUP S" RESIZE" COMPARE 0= IF 2DROP ." _RESIZE" BREAK
2DUP S" free" COMPARE 0= IF 2DROP ." _free" BREAK
2DUP S" write" COMPARE 0= IF 2DROP ." _write" BREAK
2DUP S" KEY_EVENT" COMPARE 0= IF 2DROP ." _KEY_EVENT" BREAK
2DUP S" PAGE" COMPARE 0= IF 2DROP ." _PAGE" BREAK
2DUP S" PAGE_EXECUTE_READWRITE" COMPARE 0= IF 2DROP ." _PAGE_EXECUTE_READWRITE" BREAK
2DUP S" MEM_COMMIT" COMPARE 0= IF 2DROP ." _MEM_COMMIT" BREAK
2DUP S" MEM_RESERVE" COMPARE 0= IF 2DROP ." _MEM_RESERVE" BREAK
2DUP S" INVALID_HANDLE_VALUE" COMPARE 0= IF 2DROP ." _INVALID_HANDLE_VALUE" BREAK
2DUP S" FILE_ATTRIBUTE_ARCHIVE" COMPARE 0= IF 2DROP ." _FILE_ATTRIBUTE_ARCHIVE" BREAK
2DUP S" CREATE_ALWAYS" COMPARE 0= IF 2DROP ." _CREATE_ALWAYS" BREAK
2DUP S" OPEN_EXISTING" COMPARE 0= IF 2DROP ." _OPEN_EXISTING" BREAK
2DUP S" FILE_BEGIN" COMPARE 0= IF 2DROP ." _FILE_BEGIN" BREAK
2DUP S" FILE_CURRENT" COMPARE 0= IF 2DROP ." _FILE_CURRENT" BREAK
2DUP S" EXTERN" COMPARE 0= IF 2DROP ." _EXTERN" BREAK
2DUP S" EXPORT" COMPARE 0= IF 2DROP ." _EXPORT" BREAK
2DUP S" BREAK" COMPARE 0= IF 2DROP ." _BREAK" BREAK
2DUP S" ERR" COMPARE 0= IF 2DROP ." _ERR" BREAK
0 DO COUNT
CASE
[CHAR] @ OF ." _ld" ENDOF
[CHAR] ! OF ." save" ENDOF
[CHAR] = OF ." _equ" ENDOF
[CHAR] < OF ." less" ENDOF
[CHAR] > OF ." great" ENDOF
[CHAR] + OF ." plus" ENDOF
[CHAR] - OF ." minus" ENDOF
[CHAR] * OF ." _mul" ENDOF
[CHAR] / OF ." _div" ENDOF
[CHAR] . OF ." dot" ENDOF
[CHAR] : OF ." dcoma" ENDOF
[CHAR] ; OF ." _end" ENDOF
[CHAR] ? OF ." que" ENDOF
[CHAR] ( OF ." _c" ENDOF
[CHAR] ) OF ." cend" ENDOF
[CHAR] [ OF ." _x" ENDOF
[CHAR] ] OF ." _y" ENDOF
[CHAR] { OF ." lsk" ENDOF
[CHAR] } OF ." rsk" ENDOF
[CHAR] , OF ." com" ENDOF
[CHAR] ' OF ." tic" ENDOF
[CHAR] ~ OF ." til" ENDOF
[CHAR] ^ OF ." pic" ENDOF
[CHAR] " OF ." dtic" ENDOF
[CHAR] | OF ." l" ENDOF
[CHAR] # OF ." n" ENDOF
[CHAR] $ OF ." dol" ENDOF
[CHAR] \ OF ." sl" ENDOF
[CHAR] & OF ." and_" ENDOF
I IF EMIT ENDOF
[CHAR] 0 OF ." _0" ENDOF
[CHAR] 1 OF ." _1" ENDOF
[CHAR] 2 OF ." _2" ENDOF
[CHAR] 3 OF ." _3" ENDOF
[CHAR] 4 OF ." _4" ENDOF
[CHAR] 5 OF ." _5" ENDOF
[CHAR] 6 OF ." _6" ENDOF
[CHAR] 7 OF ." _7" ENDOF
[CHAR] 8 OF ." _8" ENDOF
[CHAR] 9 OF ." _9" ENDOF
EMIT
0 ENDCASE
LOOP DROP ;
0 VALUE #GN
: GN. ( ADDR -- )
DUP 0x80 + 0xFFFFFF00 AND 0= \ ABS 0x7F <
IF H.-H EXIT THEN
DUP HERE U<
IF DUP WordByAddr
OVER >R GTYPE ." +"
R> 1- NAME> - DUP TO #GN H.-H
ELSE NEGATE DUP WordByAddr
>R >R
R@ 1- NAME> - DUP TO #GN H.-H
." -" R> R> GTYPE
THEN
;
: .INT ( ADDR -- ADDR1 )
CR DUP HSSSS @ +
@ OVER @ \ ." I=" 2DUP H. H. CR
=
IF ." DD " DUP @ H.-H
ELSE ." DD " DUP @ GN.
THEN CELL+ ;
: .ADR ( ADDR -- ADDR1 )
CR ." DD " DUP @ GN. CELL+ ;
: .ADR68 ( ADDR -- ADDR1 )
CR ." DD 68 " DUP @ DUP H. GN. CELL+ ;
: 5_GD_STEP0 ( ADDR -- ADDR1 )
1_GD_STEP .INT ;
: 5_GD_STEP1 ( ADDR -- ADDR1 )
1_GD_STEP .ADR ;
: 6_GD_STEP0 ( ADDR -- ADDR1 )
2_GD_STEP .INT ;
: 6_GD_STEP1 ( ADDR -- ADDR1 )
2_GD_STEP .ADR ;
: 7_GD_STEP ( ADDR -- ADDR1 )
3_GD_STEP .ADR ;
: 1A_GD_STEP ( ADDR c -- ADDR1 )
DROP 1+ DUP REL@ CELL+ GN. CELL+ ;
: 2A_GD_STEP ( ADDR W -- ADDR1 )
CR ." DW "
H.-H 2+ DUP REL@ CELL+
CR ." DD " GN. ." -$-4" CELL+ ;
C" C>S" FIND NIP 0=
[IF] : C>S ( c -- n ) 0xFF AND [ 0x7F INVERT ] LITERAL XOR 0x80 + ;
[THEN]
: J_GD_STEP_
0x70 - 3 *
C" jo jnojb jaeje jnejbeja js jnsjp jnpjl jgejlejg " 1+ +
CR 3 TYPE ." " 1+ DUP C@ C>S OVER + 1+ GN. 1+
; \ short
: J_GD_STEP
DUP >R
0x70 - 3 *
C" jo jnojb jaeje jnejbeja js jnsjp jnpjl jgejlejg " 1+ +
CR ." ;" 3 TYPE ." " 1+ DUP C@ C>S OVER + 1+ GN. 1+
2- R>
#GN IF 2_GD_STEP EXIT THEN
J_GD_STEP_
; \ short
: GD-STEP ( CFA -- CFA+N )
\ DUP 9 EMIT H.
DUP C@ \ CFA N'
DUP 0C3 = IF 1_GD_STEP EXIT THEN \ RET
DUP 066 = IF 1_GD_STEP EXIT THEN \ D16:
DUP 064 = IF 1_GD_STEP EXIT THEN \ FS:
DUP 068 = IF 1_GD_STEP .INT EXIT THEN \ push X
\ LOOPNZ X LOOPZ X LOOP X JECXZ X IN AL, 0 IN EAX, 0 OUT 0 , AL OUT 0 , EAX
\ 1110.0XXX
DUP 0F8 AND 0E0 = IF 2_GD_STEP EXIT THEN
\ 010X.XXXX
DUP 0E0 AND 040 = IF 1_GD_STEP EXIT THEN \ INC|DEC|PUSH|POP E_X
\ 0111.0XXX
DUP 0F0 AND 070 = IF J_GD_STEP EXIT THEN \ JO short
DUP 0EB = IF 2_GD_STEP EXIT THEN \ JMP
DUP 090 = IF 1_GD_STEP EXIT THEN \ !!!!!
DUP 099 = IF 1_GD_STEP EXIT THEN \ CDQ
DUP 0A4 = IF 1_GD_STEP EXIT THEN \
DUP 0A5 = IF 1_GD_STEP EXIT THEN \
DUP 0A6 = IF 1_GD_STEP EXIT THEN \
DUP 0AA = IF 1_GD_STEP EXIT THEN \
DUP 0AB = IF 1_GD_STEP EXIT THEN \
DUP 0AC = IF 1_GD_STEP EXIT THEN \
DUP 0AE = IF 1_GD_STEP EXIT THEN \
DUP 024 = IF 2_GD_STEP EXIT THEN \ AND AL , # 1
DUP 02C = IF 2_GD_STEP EXIT THEN \ SUB AL , # 1
DUP 03C = IF 2_GD_STEP EXIT THEN \ CMP AL , # 1
DUP 0CD = IF 2_GD_STEP EXIT THEN \ INT X
DUP 0B0 = IF 2_GD_STEP EXIT THEN \
DUP 0F2 = IF 1_GD_STEP EXIT THEN \
DUP 0F3 = IF 2_GD_STEP EXIT THEN \ REPZ CMPSB
DUP 0FC = IF 1_GD_STEP EXIT THEN \ CLD
DUP 0FD = IF 1_GD_STEP EXIT THEN \ STD
DUP 09C = IF 1_GD_STEP EXIT THEN \ PUSHFD
DUP 09D = IF 1_GD_STEP EXIT THEN \ POPFD
DUP5B?0 IF 5_GD_STEP0 EXIT THEN
DUP5B?1 IF 5_GD_STEP1 EXIT THEN
DUP 0E9 = IF CR ." DB 0E9H"
CR ." DD " 1A_GD_STEP ." -$-4" EXIT THEN \ JMP
DUP 0E8 = IF CR ." call " 1A_GD_STEP
DUP CELL- REL@ CELL+
DUP USER-VALUE-CODE =
OVER USER-CODE = OR
IF CR ." DD reserve+"
DROP DUP @ RESERVE - H.-H CELL+
EXIT
THEN
CONSTANT-CODE =
IF .INT EXIT
THEN
DUP CELL- REL@ CELL+
CREATE-CODE =
IF .INT 2DUP U>
IF DUP C@ 1_GD_STEP
BEGIN 2DUP U>
WHILE DUP 7 AND
IF ." ,"
ELSE CR ." DB "
THEN DUP C@ H.-H 1+
REPEAT
THEN EXIT
THEN
DUP CELL- REL@ CELL+
DUP CLITERAL-CODE =
OVER ALITERAL-CODE = OR
SWAP SLITERAL-CODE = OR
IF CR ." DB " DUP COUNT DUP>R DUP H.-H
CR ." DB " ATYPE ." ,0"
R> + 2+ EXIT
THEN
DUP CELL- REL@ CELL+
VECT-CODE =
IF .ADR EXIT
THEN
EXIT THEN \ CALL
\ 1110.11XX
DUP FC AND EC = IF 1_GD_STEP EXIT THEN \ IN|OUT EAX AL, DX | DX, EAX EL
DROP
DUP W@ \ CR ." G=" DUP H.
DUP3B?[EBP] IF 3_GD_STEP EXIT THEN
DUP3B? IF 3_GD_STEP EXIT THEN
DUP2B? IF 2_GD_STEP EXIT THEN
DUP 0DB0A = IF 2_GD_STEP EXIT THEN \ OR BL, BL
DUP 0C90A = IF 2_GD_STEP EXIT THEN \ OR CL, CL
DUP 0038B = IF 2_GD_STEP EXIT THEN \ MOV EAX, [EBX]
DUP 0EC87 = IF 2_GD_STEP EXIT THEN \
DUP 0188A = IF 2_GD_STEP EXIT THEN \ MOV BL, [EAX]
DUP 07D8B = IF 3_GD_STEP EXIT THEN \ MOV EDI, X [EBP]
DUP 0C58B = IF 2_GD_STEP EXIT THEN \ MOV EAX, EBP
DUP 0E08B = IF 2_GD_STEP EXIT THEN \ MOV EAX, EBP
DUP 0E88B = IF 2_GD_STEP EXIT THEN \ MOV EAX, EBP
DUP 0458F = IF 3_GD_STEP EXIT THEN \ POP X [EBP]
DUP 075FF = IF 3_GD_STEP EXIT THEN \ PUSH X [EBP]
DUP 0C009 = IF 2_GD_STEP EXIT THEN \ OR EAX, EAX
DUP 0E3FF = IF 2_GD_STEP EXIT THEN \ JMP EBX
\ DUP 0D2FF = IF 2_GD_STEP EXIT THEN \ JMP EDX
DUP 0E2FF = IF 2_GD_STEP EXIT THEN \ JMP EDX
DUP 0D0FF = IF 2_GD_STEP EXIT THEN
DUP 0D2FF = IF 2_GD_STEP EXIT THEN \ CALL EDX
DUP 023FF = IF 2_GD_STEP EXIT THEN \ JMP [EBX]
DUP 0F903 = IF 2_GD_STEP EXIT THEN \ ADD EDI, ECX
DUP 0F103 = IF 2_GD_STEP EXIT THEN \ ADD ESI, ECX
DUP 0F003 = IF 2_GD_STEP EXIT THEN \ ADD ESI, EAX
DUP 0D703 = IF 2_GD_STEP EXIT THEN \ ADD EDX, EDI
DUP 0C703 = IF 2_GD_STEP EXIT THEN \ ADD EAX, EDI
DUP 0DF03 = IF 2_GD_STEP EXIT THEN \ ADD EBX, EDI
DUP 0E103 = IF 2_GD_STEP EXIT THEN \ ADD ESP, ECX
DUP 0E303 = IF 2_GD_STEP EXIT THEN \ ADD ESP, EBX
DUP 0E803 = IF 2_GD_STEP EXIT THEN \ ADD EBP, EAX
DUP 0EB03 = IF 2_GD_STEP EXIT THEN
DUP 0F803 = IF 2_GD_STEP EXIT THEN \ ADD EDI, EAX
DUP 0E903 = IF 2_GD_STEP EXIT THEN \ ADD EBP, ECX
DUP 0523 = IF 2_GD_STEP .INT EXIT THEN \ AND EAX , 55C18F
DUP 052B = IF 2_GD_STEP .INT EXIT THEN \ SUB EAX , 55C18F
DUP 0C72B = IF 2_GD_STEP EXIT THEN \ SUB EAX, EDI
DUP 0CD2B = IF 2_GD_STEP EXIT THEN \ SUB ECX, EBP
DUP 0CF2B = IF 2_GD_STEP EXIT THEN \ SUB ECX, EDI
DUP 0D72B = IF 2_GD_STEP EXIT THEN \ SUB EDX, EDI
DUP 0F22B = IF 2_GD_STEP EXIT THEN \ SUB ESI, EDX
DUP 0DE2B = IF 2_GD_STEP EXIT THEN \ SUB EBX, ESI
DUP 0E32B = IF 2_GD_STEP EXIT THEN \ SUB ESP, EBX
DUP 0E82B = IF 2_GD_STEP EXIT THEN \ SUB EBP, EAX
DUP 0FF33 = IF 2_GD_STEP EXIT THEN \ xor EDI, EDI
DUP 0D233 = IF 2_GD_STEP EXIT THEN \ xor EDX, EDX
DUP 0F33B = IF 2_GD_STEP EXIT THEN \ CMP ESI, EBX
DUP 0C13A = IF 2_GD_STEP EXIT THEN \ CMP AL, CL
DUP 0C23A = IF 2_GD_STEP EXIT THEN \ CMP AL, DL
DUP 0D83A = IF 2_GD_STEP EXIT THEN \ CMP BL, AL
DUP 0EB80 = IF 3_GD_STEP EXIT THEN \ SUB BL, # X
DUP 0FB80 = IF 3_GD_STEP EXIT THEN \ CMP BL, # X
DUP 0C0C6 = IF 3_GD_STEP EXIT THEN \ MOV AL, # 0
DUP 00081 = IF 2_GD_STEP .INT EXIT THEN \ ADD [EAX] , # 800
DUP 0581 = IF 2_GD_STEP .ADR .INT EXIT THEN \ ADD X , # Y
DUP 0E181 = IF 2_GD_STEP .INT EXIT THEN \ AND ECX, # FF
DUP 0E281 = IF 2_GD_STEP .INT EXIT THEN \ AND EDX, # FF
DUP 0F981 = IF 2_GD_STEP .INT EXIT THEN \ CMP ECX, # 1
DUP 04583 = IF 4_GD_STEP EXIT THEN \ ADD F8 [EBP] , # 2
DUP 0EB83 = IF 3_GD_STEP EXIT THEN \ SUB EBX, # X
DUP 0FB83 = IF 3_GD_STEP EXIT THEN \ CMP EBX, # X
DUP 0EE83 = IF 3_GD_STEP EXIT THEN \ SUB ESI, # X
DUP 0E183 = IF 3_GD_STEP EXIT THEN \ AND ECX, # 3
DUP 0E383 = IF 3_GD_STEP EXIT THEN \ AND EBX, # 3
DUP 0EC83 = IF 3_GD_STEP EXIT THEN
DUP 0F9C1 = IF 3_GD_STEP EXIT THEN \ SAR ECX, # 2
DUP 01889 = IF 2_GD_STEP EXIT THEN \ MOV [EAX], EBX
DUP 04889 = IF 3_GD_STEP EXIT THEN \ MOV X [EAX], ECX
DUP 04289 = IF 3_GD_STEP EXIT THEN \ MOV 4 [EDX], EAX
DUP 04B89 = IF 3_GD_STEP EXIT THEN \ MOV 2 [EBX], ECX
DUP 0468A = IF 3_GD_STEP EXIT THEN \ MOV AL, X [ESI]
DUP 0088A = IF 2_GD_STEP EXIT THEN \ MOV CL, [EAX]
DUP 0068B = IF 2_GD_STEP EXIT THEN \ MOV EAX, [ESI]
DUP 01B8B = IF 2_GD_STEP EXIT THEN \ MOV EBX, [EBX]
DUP DF8B = IF 2_GD_STEP EXIT THEN \ MOV EBX, EDI
DUP EC8B = IF 2_GD_STEP EXIT THEN
DUP 05089 = IF 3_GD_STEP EXIT THEN \ MOV X [EAX] , EDX
DUP 0368B = IF 2_GD_STEP EXIT THEN \ MOV ESI, [ESI]
DUP 0758B = IF 3_GD_STEP EXIT THEN \ MOV ESI, X [EBP]
DUP 0408B = IF 3_GD_STEP EXIT THEN \ MOV EAX, X [EAX]
DUP 0498B = IF 3_GD_STEP EXIT THEN \ MOV ECX, FC [ECX]
DUP 04B8B = IF 3_GD_STEP EXIT THEN \ MOV ECX, 12 [EBX]
DUP 0E58B = IF 2_GD_STEP EXIT THEN
DUP 06D8D = IF 3_GD_STEP EXIT THEN \ LEA EBP, OFF-EBP [EBP]
DUP 0C583 = IF 3_GD_STEP EXIT THEN \ ADD EBP, # OFF-EBP
DUP 0ED83 = IF 3_GD_STEP EXIT THEN \ SUB EBP, # X
DUP 0C483 = IF 3_GD_STEP EXIT THEN \ ADD ESP, # X
DUP 0FA83 = IF 3_GD_STEP EXIT THEN \ CMP EDX, # 3
DUP 07D83 = IF 4_GD_STEP EXIT THEN \ CMP X [EBP] , # Y
DUP 07D89 = IF 3_GD_STEP EXIT THEN \ MOV X [EBP], EDI
DUP 0CC8B = IF 2_GD_STEP EXIT THEN
DUP 0F58B = IF 2_GD_STEP EXIT THEN
DUP 0FC8B = IF 2_GD_STEP EXIT THEN
DUP 0F0FF AND
0800F = IF 2A_GD_STEP EXIT THEN \ JNO X
DUP 075F7 = IF 3_GD_STEP EXIT THEN \ DIV DWORD [EBP]
DUP 0D9F7 = IF 2_GD_STEP EXIT THEN \ NEG ECX
DUP 0DBF7 = IF 2_GD_STEP EXIT THEN \ NEG EBX
DUP 0E3F7 = IF 2_GD_STEP EXIT THEN \ MUL EBX
DUP 0EBF7 = IF 2_GD_STEP EXIT THEN \ IMUL EBX
DUP 0FBF7 = IF 2_GD_STEP EXIT THEN \ IDIV EBX
DUP 0F3F7 = IF 2_GD_STEP EXIT THEN \ DIV EBX
DUP 0F60B = IF 2_GD_STEP EXIT THEN \ OR ESI, ESI
DUP 0CE8B = IF 2_GD_STEP EXIT THEN \ MOV ECX, ESI
DUP 0C48B = IF 2_GD_STEP EXIT THEN \ MOV EAX, ESP
DUP 0F18B = IF 2_GD_STEP EXIT THEN \ MOV ESI, ECX
DUP 0F08B = IF 2_GD_STEP EXIT THEN \ MOV ESI, EAX
DUP 0D58B = IF 2_GD_STEP EXIT THEN \ MOV EDX, EBP
DUP 0D78B = IF 2_GD_STEP EXIT THEN \ MOV EDX, EDI
DUP 0DD8B = IF 2_GD_STEP EXIT THEN \ MOV EBX, EBP
DUP 0FA8B = IF 2_GD_STEP EXIT THEN \ MOV EDI, EDX
DUP 01A8B = IF 2_GD_STEP EXIT THEN \ MOV EBX, [EDX]
DUP 0028B = IF 2_GD_STEP EXIT THEN \ MOV EAX, [EDX]
DUP 0078B = IF 2_GD_STEP EXIT THEN \ MOV EAX, [EDI]
DUP 088B = IF 2_GD_STEP EXIT THEN \ MOV ECX, [EAX]
DUP 098B = IF 2_GD_STEP EXIT THEN \ MOV ECX, [ECX]
DUP 0A8B = IF 2_GD_STEP EXIT THEN \ MOV ECX, [EDX]
DUP 00C6 = IF 3_GD_STEP EXIT THEN \ MOV [EAX] , # x
DUP 0688D = IF 3_GD_STEP EXIT THEN \ LEA EBP, 4 [EAX]
DUP 0428D = IF 3_GD_STEP EXIT THEN \ LEA EAX , FE [EDX]
DUP 0498D = IF 3_GD_STEP EXIT THEN \ LEA ECX, -1 [ECX]
DUP 0488D = IF 3_GD_STEP EXIT THEN \ LEA ECX , FC [EAX]
DUP 07F8D = IF 3_GD_STEP EXIT THEN \ LEA EDI, -1 [EDI]
DUP 0528D = IF 3_GD_STEP EXIT THEN \ LEA EDX, -4 [EDX]
\ DUP 01C8D = IF 3_GD_STEP EXIT THEN \ LEA EBX, [EDX] [EAX]
DUP 0038F = IF 2_GD_STEP EXIT THEN \ POP [EBX]
DUP 05DD1 = IF 3_GD_STEP EXIT THEN \ RCR [EBP], # 1
DUP 0D0D1 = IF 2_GD_STEP EXIT THEN \ RCL EAX, # 1
DUP 065D1 = IF 3_GD_STEP EXIT THEN \ SHL [EBP], # 1
DUP 0C0C1 = IF 3_GD_STEP EXIT THEN \ ROL [EBP], # 1
DUP 45FF = IF 3_GD_STEP EXIT THEN \ INC 0 [EBP]
DUP 0310F = IF 2_GD_STEP EXIT THEN \ RDTSC
DUP 873B = IF CR ." cmp " ." eax," .EDI EXIT THEN \ CMP EAX, X [EDI]
DUP 878B = IF CR ." mov " ." eax," .EDI EXIT THEN \ MOV EAX, X [EDI]
DUP 8F8B = IF CR ." mov " ." ecx," .EDI EXIT THEN \ MOV ECX, X [EDI]
DUP 878D = IF CR ." lea " ." eax," .EDI EXIT THEN \ LEA EAX, X [EDI]
DUP 87FF = IF CR ." inc DWORD" .EDI EXIT THEN \ INC 19F9 [EDI]
DUP 8788 = IF CR ." mov al," .EDI EXIT THEN \ MOV 19F9 [EDI] , AL
DUP 8789 = IF CR ." mov " .EDI ." ,eax" EXIT THEN \ MOV X [EDI], EAX
DUP 8703 = IF CR ." add eax," .EDI EXIT THEN \ ADD EAX , X [EDI]
DUP 8733 = IF CR ." xor eax," .EDI EXIT THEN \ XOR EAX , X [EDI]
DUP 87C7 = IF CR ." mov " DROP DUP 6 + @
H. ." ," DUP @ .EDI 6 + EXIT THEN \ MOV X [EDI], # Y
DUP 45C7 = IF 3_GD_STEP .INT EXIT THEN \ MOV X [EBP], # X
DUP 3D83 = IF 2_GD_STEP .ADR DUP C@ 1_GD_STEP EXIT THEN \ MOV X [EBP], # X
DUP 0533 = IF 2_GD_STEP .ADR EXIT THEN \ XOR X [EBP], X
DUP 0503 = IF 2_GD_STEP .ADR EXIT THEN \ ADD EAX , X
DUP 1501 = IF 2_GD_STEP .ADR EXIT THEN \ ADD X , EDX
DUP 050B = IF 2_GD_STEP .ADR EXIT THEN \ OR EAX , X
DUP 0D3B = IF 2_GD_STEP .ADR EXIT THEN \ CMP ECX , x
DUP 2DF7 = IF 2_GD_STEP .ADR EXIT THEN \ IMUL x
DUP 808D = IF 2_GD_STEP .INT EXIT THEN \ LEA EAX , 8700 [EAX]
DUP 9A8D = IF 2_GD_STEP .INT EXIT THEN \ LEA EBX , 55C298 [EDX]
DUP 01C7 = IF 2_GD_STEP .INT EXIT THEN \ MOV [ECX] , # 424648D
DUP 0C0C7 = IF 2_GD_STEP .INT EXIT THEN \ MOV EAX, # X
DUP 0C1C7 = IF 2_GD_STEP .INT EXIT THEN \ MOV ECX, # X
DUP 0C069 = IF 2_GD_STEP .INT EXIT THEN \ IMUL EAX , EAX , # 4
DUP 0C3C7 = IF 2_GD_STEP .INT EXIT THEN \ MOV EBX, # X
DUP 05C7 = IF 2_GD_STEP .ADR .INT EXIT THEN \ MOV 5746E5 ( OPT?+5 ) , # FFFFFFFF
DUP6B?0 IF 6_GD_STEP0 EXIT THEN \ MOV EAX, # X
DUP6B?1 IF 6_GD_STEP1 EXIT THEN
DUP 00583 = IF 6_GD_STEP1
DUP C@ 1_GD_STEP EXIT THEN
DROP
DUP @ FFFFFF AND
DUP 021C8D = IF 3_GD_STEP EXIT THEN
DUP 240401 = IF 3_GD_STEP EXIT THEN \ ADD [ESP] , EAX
DUP C09D0F = IF 3_GD_STEP EXIT THEN \ SETGE AL
DUP C09E0F = IF 3_GD_STEP EXIT THEN \ SETLE AL
DUP 8D1C8D = IF 7_GD_STEP EXIT THEN \ LEA EBX, [ECX*4]
\ CMPXCHG [EAX] , AL| EAX
\ LSS EAX , [EAX]
\ BTR [EAX] , EAX
\ LFS EAX , [EAX]
\ LGS EAX , [EAX]
\ MOVZX EAX , BYTE|WORD PTR [EAX]
\ 0000.0000 1011.1XXX 0000.1111
DUP FFF8FF
AND 00B00F = IF 3_GD_STEP EXIT THEN
DUP 24442B = IF 4_GD_STEP EXIT THEN \ SUB EAX, X [ESP]
DUP 24648D = IF 4_GD_STEP EXIT THEN \ LEA ESP, X [ESP]
\ MOV|LEA EAX, X [E__] [E__*X]
\ MOV|LEA X [E__] [E__*X], EAX
\ POP X [E__] [E__*X]
\ XXXX.X1XX 0100.0100 1000.1XX1
DUP 04FFF9
AND 044489 = IF 4_GD_STEP EXIT THEN
DUP 035C8D = IF 4_GD_STEP EXIT THEN \ MOV EBX, X [EBX] [EAX]
DUP 03448B = IF 4_GD_STEP EXIT THEN \ MOV EAX, X [EBX] [EAX]
DUP 03B60F = IF 3_GD_STEP EXIT THEN \ MOVZX EAX, BYTE PTR [EBX]
DUP 18B60F = IF 3_GD_STEP EXIT THEN \ MOVZX EBX, BYTE PTR [EAX]
DUP 31348B = IF 3_GD_STEP EXIT THEN \ MOV ESI, [ESI+ECX]
DUP 40B60F = IF 4_GD_STEP EXIT THEN \ MOVZX EAX , BYTE PTR x [EAX]
DUP 345C8B = IF 4_GD_STEP EXIT THEN \ LEA EAX , [EAX] [ECX*4]
DUP 0E348B = IF 3_GD_STEP EXIT THEN \ MOV ESI, [ESI] [ECX]
DUP 03048D = IF 3_GD_STEP EXIT THEN \ LEA EAX, [EBX] [EAX]
DUP 355C89 = IF 4_GD_STEP EXIT THEN \ MOV EBX, [ESI+ESP-4]
DUP 30748B = IF 4_GD_STEP EXIT THEN \ MOV ESI, [1+ESI+EAX]
DUP 88048D = IF 3_GD_STEP EXIT THEN \ LEA EAX , [EAX] [ECX*4]
DUP 02048D = IF 3_GD_STEP EXIT THEN \ LEA EAX, [EDX] [EAX]
DUP 06748B = IF 4_GD_STEP EXIT THEN \ MOV ESI, 1 [ESI] [EAX]
DUP 245C8B = IF 4_GD_STEP EXIT THEN \ MOV EBX, 8 [ESP]
DUP 244C8B = IF 4_GD_STEP EXIT THEN \ MOV ECX, 8 [ESP]
DUP 2E5C89 = IF 4_GD_STEP EXIT THEN \ MOV -4 [ESI] [EBP], EBX
DUP 045C89 = IF 4_GD_STEP EXIT THEN \ MOV 4 [ESP] [EAX], EBX
DUP 2E74FF = IF 4_GD_STEP EXIT THEN \ PUSH -4 [ESI] [EBP]
DUP 3574FF = IF 4_GD_STEP EXIT THEN \ PUSH -4 [EBP] [ESI]
DUP 240CFF = IF 3_GD_STEP EXIT THEN \ DEC [ESP]
DUP 09B70F = IF 3_GD_STEP EXIT THEN \ MOVZX ECX , WORD PTR X [ECX]
DUP 40B70F = IF 4_GD_STEP EXIT THEN \ MOVZX EAX , WORD PTR X [EAX]
DUP 42B60F = IF 4_GD_STEP EXIT THEN \ MOVZX EAX , WORD PTR X [EDX]
DUP 24048B = IF 3_GD_STEP EXIT THEN \ MOV EAX, 0 [ESP]
DUP 240C8B = IF 3_GD_STEP EXIT THEN \ MOV ECX , [ESP]
DUP 1048B = IF 3_GD_STEP EXIT THEN \ MOV EAX , [ECX] [EAX]
DUP 01048D = IF 3_GD_STEP EXIT THEN \ LEA EAX , [ECX] [EAX]
DUP C0BE0F = IF 3_GD_STEP EXIT THEN \ MOV EAX, AL
DUP 0045C7 = IF 3_GD_STEP .INT EXIT THEN \ MOV 0 [EBP], # 0
DUP 240481 = IF 3_GD_STEP .INT EXIT THEN \ ADD [ESP] , # 4
DUP B5348D = IF 3_GD_STEP .INT EXIT THEN \ LEA ESI, [ESI*4]
DUP 8D0C8D = IF 3_GD_STEP .INT EXIT THEN \ LEA ECX, [ECX*4]
DUP 84248D = IF 3_GD_STEP EXIT THEN \ LEA ESP, [ESP] [EAX*4]
DUP 244C2B = IF 4_GD_STEP EXIT THEN \ SUB ECX , 4 [ESP]
DUP 04B60F = IF 4_GD_STEP EXIT THEN \ MOVZX EAX, BYTE [EDI] [ESI]
DUP 243C83 = IF 4_GD_STEP EXIT THEN \ CMP [ESP] , # 0
DUP7B? IF 7_GD_STEP EXIT THEN
DUP 2404FF = IF 3_GD_STEP EXIT THEN \ INC [ESP]
DUP 241C8B = IF 3_GD_STEP EXIT THEN \ MOV EBX, [ESP]
DUP 240403 = IF 3_GD_STEP EXIT THEN \ ADD EAX , [ESP]
DUP 87B60F = IF CR ." movzx eax,BYTE" DROP 1+ DUP .EDI EXIT THEN \ MOVZX EAX , BYTE PTR 19E3 [EDI]
CR H. TRUE ABORT" UNKNOWN CODE"
;
: GDIS ( A-limit A-init -- )
\ CR ." VV=" 2DUP H. H. 2DUP - .
BEGIN
\ H-STDOUT 1 TO H-STDOUT ." ." TO H-STDOUT
GD-STEP 2DUP U> 0=
UNTIL 2DROP ;
BASE !
\EOF
2DUP S" MOD" COMPARE 0= IF 2DROP ." _MOD" BREAK
2DUP S" DUP" COMPARE 0= IF 2DROP ." _DUP" BREAK
2DUP S" OR" COMPARE 0= IF 2DROP ." _OR" BREAK
2DUP S" XOR" COMPARE 0= IF 2DROP ." _XOR" BREAK
2DUP S" AND" COMPARE 0= IF 2DROP ." _AND" BREAK
2DUP S" CMOVE" COMPARE 0= IF 2DROP ." _CMOVE" BREAK
2DUP S" TYPE" COMPARE 0= IF 2DROP ." _TYPE" BREAK
2DUP S" ALIGN" COMPARE 0= IF 2DROP ." _ALIGN" BREAK
2DUP S" TITLE" COMPARE 0= IF 2DROP ." _TITLE" BREAK
2DUP S" LT" COMPARE 0= IF 2DROP ." _LT" BREAK
2DUP S" BL" COMPARE 0= IF 2DROP ." _BL" BREAK
2DUP S" DP" COMPARE 0= IF 2DROP ." _DP" BREAK
2DUP S" TRUE" COMPARE 0= IF 2DROP ." _TRUE" BREAK
2DUP S" FALSE" COMPARE 0= IF 2DROP ." _FALSE" BREAK
2DUP S" LOOP" COMPARE 0= IF 2DROP ." _LOOP" BREAK