0,0 → 1,637 |
\ 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 |