From 09488af8697867b6bd8228286bdc54ca0807ec1d Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Mon, 21 Apr 2014 19:22:58 +0000 Subject: [PATCH] KolSPForth12 uploaded to SVN git-svn-id: svn://kolibrios.org@4867 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/develop/SPForth/MACROS.INC | 264 + programs/develop/SPForth/amain.asm | 417 + programs/develop/SPForth/build.bat | 5 + programs/develop/SPForth/debug.inc | 137 + .../develop/SPForth/devel/~ac/lib/LOCALS.F | 193 + .../develop/SPForth/devel/~af/lib/comments.f | 9 + programs/develop/SPForth/devel/~mak/CompIF.f | 25 + programs/develop/SPForth/devel/~mak/DIS486.F | 1559 + .../develop/SPForth/devel/~mak/acceptgo.f | 24 + .../develop/SPForth/devel/~mak/asm/ASM.FRT | 1502 + .../develop/SPForth/devel/~mak/asm/ASM_SIF.F | 40 + .../develop/SPForth/devel/~mak/asm/asmbase.f | 237 + .../develop/SPForth/devel/~mak/author.txt | 1 + programs/develop/SPForth/devel/~mak/case.f | 33 + .../develop/SPForth/devel/~mak/djgpp/gdis.F | 637 + programs/develop/SPForth/devel/~mak/do_want.f | 13 + programs/develop/SPForth/devel/~mak/lib/csr.f | 25 + .../SPForth/devel/~mak/lib/locals-ans2.f | 39 + .../develop/SPForth/devel/~mak/lib/locals4.f | 401 + programs/develop/SPForth/devel/~mak/lib/map.f | 35 + .../SPForth/devel/~mak/lib/vt/colors.f | 15 + .../develop/SPForth/devel/~mak/listing3.f | 161 + programs/develop/SPForth/devel/~mak/temps4.f | 198 + programs/develop/SPForth/devel/~mak/utils.f | 45 + programs/develop/SPForth/devel/~mak/utils_.f | 510 + programs/develop/SPForth/devel/~mak/want.f | 22 + .../SPForth/devel/~mak/~af/lib/c/zstr.f | 75 + .../develop/SPForth/devel/~nn/lib/ifdef.f | 21 + programs/develop/SPForth/gif_lite.inc | 318 + programs/develop/SPForth/img.asm | 29075 ++++++++++++++++ programs/develop/SPForth/lib/asm/486asm.f | 2103 ++ programs/develop/SPForth/lib/asm/asmmac.f | 111 + programs/develop/SPForth/lib/ext/case.f | 42 + programs/develop/SPForth/lib/ext/disasm.f | 1555 + programs/develop/SPForth/lib/ext/disasm2.f | 1955 ++ programs/develop/SPForth/lib/ext/locals.f | 324 + programs/develop/SPForth/lib/ext/patch.f | 8 + programs/develop/SPForth/lib/ext/spf-asm.f | 40 + programs/develop/SPForth/lib/ext/vocs.f | 60 + .../develop/SPForth/lib/include/core-ext.f | 81 + programs/develop/SPForth/lib/include/tools.f | 78 + programs/develop/SPForth/mbuild.bat | 1 + programs/develop/SPForth/meforth.ASM | 504 + .../SPForth/meforth_samples/autoload.f | 41 + .../SPForth/meforth_samples/autorun2.f | 15 + .../develop/SPForth/meforth_samples/example.f | 53 + .../develop/SPForth/meforth_samples/locals.f | 34 + .../develop/SPForth/meforth_samples/menuet.f | 27 + .../develop/SPForth/meforth_samples/picture.f | 109 + programs/develop/SPForth/proc32.inc | 268 + .../develop/SPForth/src/KOL/spf_kol_con_io.f | 91 + .../develop/SPForth/src/KOL/spf_kol_const.f | 21 + programs/develop/SPForth/src/KOL/spf_kol_io.f | 139 + .../develop/SPForth/src/KOL/spf_kol_memory.f | 66 + .../develop/SPForth/src/KOL/spf_kol_module.f | 40 + .../SPForth/src/KOL/spf_kol_module.f_L | 159 + .../develop/SPForth/src/KOL/spf_kol_sys.f | 173 + .../develop/SPForth/src/KOL/spf_kol_sys.f_L | 752 + programs/develop/SPForth/src/MEFORTH.F | 2 + .../SPForth/src/compiler/spf_compile.f | 154 + .../SPForth/src/compiler/spf_compile0.f | 60 + .../SPForth/src/compiler/spf_defwords.f | 206 + .../develop/SPForth/src/compiler/spf_error.f | 34 + .../develop/SPForth/src/compiler/spf_find.f | 149 + .../develop/SPForth/src/compiler/spf_find.f_L | 428 + .../SPForth/src/compiler/spf_immed_control.f | 132 + .../SPForth/src/compiler/spf_immed_lit.f | 147 + .../SPForth/src/compiler/spf_immed_loop.f | 133 + .../SPForth/src/compiler/spf_immed_transl.f | 120 + .../develop/SPForth/src/compiler/spf_literal | 80 + .../SPForth/src/compiler/spf_literal.f | 64 + .../SPForth/src/compiler/spf_modules.f | 37 + .../develop/SPForth/src/compiler/spf_parser.f | 128 + .../SPForth/src/compiler/spf_read_source.f | 33 + .../SPForth/src/compiler/spf_translate.f | 222 + .../SPForth/src/compiler/spf_wordlist.f | 188 + .../develop/SPForth/src/compiler/spf_words.f | 45 + programs/develop/SPForth/src/global.f | 46 + programs/develop/SPForth/src/gspf.f | 231 + programs/develop/SPForth/src/gspf0.f | 112 + programs/develop/SPForth/src/macroopt.f | 5061 +++ programs/develop/SPForth/src/spf_con_io.f | 41 + programs/develop/SPForth/src/spf_defkern.f | 114 + programs/develop/SPForth/src/spf_except.f | 83 + programs/develop/SPForth/src/spf_forthproc.f | 1384 + .../develop/SPForth/src/spf_forthproc.f_L | 4076 +++ .../develop/SPForth/src/spf_forthproc_hl.f | 104 + programs/develop/SPForth/src/spf_init.f | 48 + programs/develop/SPForth/src/spf_last.f | 76 + programs/develop/SPForth/src/spf_print.f | 168 + programs/develop/SPForth/src/tc_spfopt.f | 93 + 91 files changed, 58885 insertions(+) create mode 100644 programs/develop/SPForth/MACROS.INC create mode 100644 programs/develop/SPForth/amain.asm create mode 100644 programs/develop/SPForth/build.bat create mode 100644 programs/develop/SPForth/debug.inc create mode 100644 programs/develop/SPForth/devel/~ac/lib/LOCALS.F create mode 100644 programs/develop/SPForth/devel/~af/lib/comments.f create mode 100644 programs/develop/SPForth/devel/~mak/CompIF.f create mode 100644 programs/develop/SPForth/devel/~mak/DIS486.F create mode 100644 programs/develop/SPForth/devel/~mak/acceptgo.f create mode 100644 programs/develop/SPForth/devel/~mak/asm/ASM.FRT create mode 100644 programs/develop/SPForth/devel/~mak/asm/ASM_SIF.F create mode 100644 programs/develop/SPForth/devel/~mak/asm/asmbase.f create mode 100644 programs/develop/SPForth/devel/~mak/author.txt create mode 100644 programs/develop/SPForth/devel/~mak/case.f create mode 100644 programs/develop/SPForth/devel/~mak/djgpp/gdis.F create mode 100644 programs/develop/SPForth/devel/~mak/do_want.f create mode 100644 programs/develop/SPForth/devel/~mak/lib/csr.f create mode 100644 programs/develop/SPForth/devel/~mak/lib/locals-ans2.f create mode 100644 programs/develop/SPForth/devel/~mak/lib/locals4.f create mode 100644 programs/develop/SPForth/devel/~mak/lib/map.f create mode 100644 programs/develop/SPForth/devel/~mak/lib/vt/colors.f create mode 100644 programs/develop/SPForth/devel/~mak/listing3.f create mode 100644 programs/develop/SPForth/devel/~mak/temps4.f create mode 100644 programs/develop/SPForth/devel/~mak/utils.f create mode 100644 programs/develop/SPForth/devel/~mak/utils_.f create mode 100644 programs/develop/SPForth/devel/~mak/want.f create mode 100644 programs/develop/SPForth/devel/~mak/~af/lib/c/zstr.f create mode 100644 programs/develop/SPForth/devel/~nn/lib/ifdef.f create mode 100644 programs/develop/SPForth/gif_lite.inc create mode 100644 programs/develop/SPForth/img.asm create mode 100644 programs/develop/SPForth/lib/asm/486asm.f create mode 100644 programs/develop/SPForth/lib/asm/asmmac.f create mode 100644 programs/develop/SPForth/lib/ext/case.f create mode 100644 programs/develop/SPForth/lib/ext/disasm.f create mode 100644 programs/develop/SPForth/lib/ext/disasm2.f create mode 100644 programs/develop/SPForth/lib/ext/locals.f create mode 100644 programs/develop/SPForth/lib/ext/patch.f create mode 100644 programs/develop/SPForth/lib/ext/spf-asm.f create mode 100644 programs/develop/SPForth/lib/ext/vocs.f create mode 100644 programs/develop/SPForth/lib/include/core-ext.f create mode 100644 programs/develop/SPForth/lib/include/tools.f create mode 100644 programs/develop/SPForth/mbuild.bat create mode 100644 programs/develop/SPForth/meforth.ASM create mode 100644 programs/develop/SPForth/meforth_samples/autoload.f create mode 100644 programs/develop/SPForth/meforth_samples/autorun2.f create mode 100644 programs/develop/SPForth/meforth_samples/example.f create mode 100644 programs/develop/SPForth/meforth_samples/locals.f create mode 100644 programs/develop/SPForth/meforth_samples/menuet.f create mode 100644 programs/develop/SPForth/meforth_samples/picture.f create mode 100644 programs/develop/SPForth/proc32.inc create mode 100644 programs/develop/SPForth/src/KOL/spf_kol_con_io.f create mode 100644 programs/develop/SPForth/src/KOL/spf_kol_const.f create mode 100644 programs/develop/SPForth/src/KOL/spf_kol_io.f create mode 100644 programs/develop/SPForth/src/KOL/spf_kol_memory.f create mode 100644 programs/develop/SPForth/src/KOL/spf_kol_module.f create mode 100644 programs/develop/SPForth/src/KOL/spf_kol_module.f_L create mode 100644 programs/develop/SPForth/src/KOL/spf_kol_sys.f create mode 100644 programs/develop/SPForth/src/KOL/spf_kol_sys.f_L create mode 100644 programs/develop/SPForth/src/MEFORTH.F create mode 100644 programs/develop/SPForth/src/compiler/spf_compile.f create mode 100644 programs/develop/SPForth/src/compiler/spf_compile0.f create mode 100644 programs/develop/SPForth/src/compiler/spf_defwords.f create mode 100644 programs/develop/SPForth/src/compiler/spf_error.f create mode 100644 programs/develop/SPForth/src/compiler/spf_find.f create mode 100644 programs/develop/SPForth/src/compiler/spf_find.f_L create mode 100644 programs/develop/SPForth/src/compiler/spf_immed_control.f create mode 100644 programs/develop/SPForth/src/compiler/spf_immed_lit.f create mode 100644 programs/develop/SPForth/src/compiler/spf_immed_loop.f create mode 100644 programs/develop/SPForth/src/compiler/spf_immed_transl.f create mode 100644 programs/develop/SPForth/src/compiler/spf_literal create mode 100644 programs/develop/SPForth/src/compiler/spf_literal.f create mode 100644 programs/develop/SPForth/src/compiler/spf_modules.f create mode 100644 programs/develop/SPForth/src/compiler/spf_parser.f create mode 100644 programs/develop/SPForth/src/compiler/spf_read_source.f create mode 100644 programs/develop/SPForth/src/compiler/spf_translate.f create mode 100644 programs/develop/SPForth/src/compiler/spf_wordlist.f create mode 100644 programs/develop/SPForth/src/compiler/spf_words.f create mode 100644 programs/develop/SPForth/src/global.f create mode 100644 programs/develop/SPForth/src/gspf.f create mode 100644 programs/develop/SPForth/src/gspf0.f create mode 100644 programs/develop/SPForth/src/macroopt.f create mode 100644 programs/develop/SPForth/src/spf_con_io.f create mode 100644 programs/develop/SPForth/src/spf_defkern.f create mode 100644 programs/develop/SPForth/src/spf_except.f create mode 100644 programs/develop/SPForth/src/spf_forthproc.f create mode 100644 programs/develop/SPForth/src/spf_forthproc.f_L create mode 100644 programs/develop/SPForth/src/spf_forthproc_hl.f create mode 100644 programs/develop/SPForth/src/spf_init.f create mode 100644 programs/develop/SPForth/src/spf_last.f create mode 100644 programs/develop/SPForth/src/spf_print.f create mode 100644 programs/develop/SPForth/src/tc_spfopt.f diff --git a/programs/develop/SPForth/MACROS.INC b/programs/develop/SPForth/MACROS.INC new file mode 100644 index 0000000000..7de7b6f831 --- /dev/null +++ b/programs/develop/SPForth/MACROS.INC @@ -0,0 +1,264 @@ +; new application structure +macro meos_app_start + { + use32 + org 0x0 + + db 'MENUET01' + dd 0x01 + dd __start + dd __end + dd __memory + dd __stack + + if used __params & ~defined __params + dd __params + else + dd 0x0 + end if + + dd 0x0 + } +MEOS_APP_START fix meos_app_start + +macro code + { + __start: + } +CODE fix code + +macro data + { + __data: + } +DATA fix data + +macro udata + { + if used __params & ~defined __params + __params: + db 0 + __end: + rb 255 + else + __end: + end if + __udata: + } +UDATA fix udata + +macro meos_app_end + { + align 32 + rb 2048 + __stack: + __memory: + } +MEOS_APP_END fix meos_app_end + + +; macro for defining multiline text data +struc mstr [sstring] + { + forward + local ssize + virtual at 0 + db sstring + ssize = $ + end virtual + dd ssize + db sstring + common + dd -1 + } + + +; strings +macro sz name,[data] { ; from MFAR [mike.dld] + common + if used name + label name + end if + forward + if used name + db data + end if + common + if used name + .size = $-name + end if +} + +macro lsz name,[lng,data] { ; from MFAR [mike.dld] + common + label name + forward + if lang eq lng + db data + end if + common + .size = $-name +} + + + +; easy system call macro +macro mpack dest, hsrc, lsrc +{ + if (hsrc eqtype 0) & (lsrc eqtype 0) + mov dest, (hsrc) shl 16 + lsrc + else + if (hsrc eqtype 0) & (~lsrc eqtype 0) + mov dest, (hsrc) shl 16 + add dest, lsrc + else + mov dest, hsrc + shl dest, 16 + add dest, lsrc + end if + end if +} + +macro __mov reg,a,b { ; mike.dld + if (~a eq)&(~b eq) + mpack reg,a,b + else if (~a eq)&(b eq) + mov reg,a + end if +} + +macro mcall a,b,c,d,e,f { ; mike.dld + __mov eax,a + __mov ebx,b + __mov ecx,c + __mov edx,d + __mov esi,e + __mov edi,f + int 0x40 +} + + + +; language for programs +;lang fix ru ; ru en fr ge fi + + + +; optimize the code for size +__regs fix + +macro add arg1,arg2 + { + if (arg2 eqtype 0) + if (arg2) = 1 + inc arg1 + else + add arg1,arg2 + end if + else + add arg1,arg2 + end if + } + +macro sub arg1,arg2 + { + if (arg2 eqtype 0) + if (arg2) = 1 + dec arg1 + else + sub arg1,arg2 + end if + else + sub arg1,arg2 + end if + } + +macro mov arg1,arg2 + { + if (arg1 in __regs) & (arg2 eqtype 0) + if (arg2) = 0 + xor arg1,arg1 + else if (arg2) = 1 + xor arg1,arg1 + inc arg1 + else if (arg2) = -1 + or arg1,-1 + else if (arg2) > -128 & (arg2) < 128 + push arg2 + pop arg1 + else + mov arg1,arg2 + end if + else + mov arg1,arg2 + end if + } + + +macro struct name + { + virtual at 0 + name name + sizeof.#name = $ - name + end virtual + } + +; structures used in MeOS +struc process_information + { + .cpu_usage dd ? ; +0 + .window_stack_position dw ? ; +4 + .window_stack_value dw ? ; +6 + .not_used1 dw ? ; +8 + .process_name rb 12 ; +10 + .memory_start dd ? ; +22 + .used_memory dd ? ; +26 + .PID dd ? ; +30 + .x_start dd ? ; +34 + .y_start dd ? ; +38 + .x_size dd ? ; +42 + .y_size dd ? ; +46 + .slot_state dw ? ; +50 + rb (1024-52) + } +struct process_information + +struc system_colors + { + .frame dd ? + .grab dd ? + .grab_button dd ? + .grab_button_text dd ? + .grab_text dd ? + .work dd ? + .work_button dd ? + .work_button_text dd ? + .work_text dd ? + .work_graph dd ? + } +struct system_colors + + +; constants + +; events +EV_IDLE = 0 +EV_TIMER = 0 +EV_REDRAW = 1 +EV_KEY = 2 +EV_BUTTON = 3 +EV_EXIT = 4 +EV_BACKGROUND = 5 +EV_MOUSE = 6 +EV_IPC = 7 +EV_STACK = 8 + +; event mask bits for function 40 +EVM_REDRAW = 1b +EVM_KEY = 10b +EVM_BUTTON = 100b +EVM_EXIT = 1000b +EVM_BACKGROUND = 10000b +EVM_MOUSE = 100000b +EVM_IPC = 1000000b +EVM_STACK = 10000000b diff --git a/programs/develop/SPForth/amain.asm b/programs/develop/SPForth/amain.asm new file mode 100644 index 0000000000..e7ffdfc199 --- /dev/null +++ b/programs/develop/SPForth/amain.asm @@ -0,0 +1,417 @@ + + +reserve EQU Mreserve-main_task + + + +amain: + MOV [ByeLevel],ESP + mov edi, main_task + call cfa_INIT + ret + +TIB_SIZE EQU 1027 +PAD_SIZE EQU 1027 + +include 'img.asm' + +cfa_AHEADER 0,"BYE",_BYE + MOV ESP,[ByeLevel] + RET + + +cfa_AHEADER 0,"_SLITERAL-CODE",_SLITERALminusCODE + LEA EBP, [EBP-8] + MOV [EBP+4], EAX + POP EBX + MOVZX EAX, BYTE [EBX] + LEA EBX, [EBX+1] + MOV [EBP], EBX + LEA EBX, [EBX+EAX] + LEA EBX, [EBX+1] + JMP EBX + + + +cfa_AHEADER 0,"_CONSTANT-CODE",_CONSTANTminusCODE + LEA EBP,[EBP-4] + MOV [EBP],EAX + POP EAX + MOV EAX,[EAX] + RET + +cfa_AHEADER 0,"_CREATE-CODE",_CREATEminusCODE + DB 083H ,0EDH ,4 + DB 089H ,045H ,0 + DB 058H + DB 0C3H + +cfa_AHEADER 0,"_TOVALUE-CODE",_TOVALUEminusCODE + DB 05BH + DB 08DH ,05BH ,0F7H + DB 089H ,03 + DB 08BH ,045H ,00 + DB 08DH ,06DH ,04 + DB 0C3H + +cfa_AHEADER 0,"TOVALUE-CODE",TOVALUEminusCODE + call cfa__CONSTANTminusCODE + DD cfa__TOVALUEminusCODE + call cfa__TOVALUEminusCODE + +cfa_AHEADER 0,"VECT-CODE",VECTminusCODE + call cfa__CONSTANTminusCODE + DD cfa__VECTminusCODE + call cfa__TOVALUEminusCODE + +cfa_AHEADER 0,"_VECT-CODE",_VECTminusCODE + DB 05BH + DB 0FFH ,023H + +cfa_AHEADER 0,"_USER-VALUE-CODE", _USERminusVALUEminusCODE + LEA EBP,[EBP-4] + MOV [EBP],EAX + POP EAX + MOV EAX,[EAX] + LEA EAX,[EDI+EAX] + MOV EAX,[EAX] + RET + +cfa_AHEADER 0,"USER-VALUE-CODE",USERminusVALUEminusCODE + call cfa__CONSTANTminusCODE + DD cfa__USERminusVALUEminusCODE + call cfa__TOVALUEminusCODE + +cfa_AHEADER 0,"_TOUSER-VALUE-CODE",_TOUSERminusVALUEminusCODE + DB 05BH + DB 083H ,0EBH ,09 + DB 08BH ,01BH + DB 03 ,0DFH + DB 089H ,03 + DB 08BH ,045H ,00 + DB 083H ,0C5H ,04 + DB 0C3H + +cfa_AHEADER 0,"TOUSER-VALUE-CODE",TOUSERminusVALUEminusCODE + call cfa__CONSTANTminusCODE + DD cfa__TOUSERminusVALUEminusCODE + call cfa__TOVALUEminusCODE + +cfa_AHEADER 0,"_USER-CODE", _USERminusCODE + LEA EBP,[EBP-4] + MOV [EBP],EAX + POP EAX + MOV EAX,[EAX] + LEA EAX,[EDI+EAX] + RET + +cfa_AHEADER 0,"DOES>A",DOESgreatA + call cfa__USERminusCODE + DD T_DOESgreatA-main_task + +cfa_AHEADER 0,"USER-CODE",USERminusCODE + call cfa__CONSTANTminusCODE + DD cfa__USERminusCODE + call cfa__TOVALUEminusCODE + +cfa_AHEADER 0,"CREATE-CODE",CREATEminusCODE + call cfa__CONSTANTminusCODE + DD cfa__CREATEminusCODE + call cfa__TOVALUEminusCODE + +cfa_AHEADER 0,"CONSTANT-CODE",CONSTANTminusCODE + call cfa__CONSTANTminusCODE + DD cfa__CONSTANTminusCODE + call cfa__TOVALUEminusCODE + +cfa_AHEADER 0,"_CLITERAL-CODE",_CLITERALminusCODE + DB 083H ,0EDH ,04 + DB 089H ,045H ,00 + DB 058H + DB 0FH ,0B6H ,018H + DB 08DH ,05CH ,03 ,02 + DB 0FFH ,0E3H + +cfa_AHEADER 0,"CLITERAL-CODE",CLITERALminusCODE + call cfa__CONSTANTminusCODE + DD cfa__CLITERALminusCODE + call cfa__TOVALUEminusCODE + + +cfa_AHEADER 0,'BASE',BASE + call cfa__USERminusCODE + DD T_BASE-main_task + +cfa_AHEADER 0,'PAD',PAD + call cfa__USERminusCODE + DD T_PAD-main_task + +cfa_AHEADER 0,'LAST',LAST + call cfa__CREATEminusCODE + DD LastNFA + + cfa_AHEADER 0,'DP',DP + call cfa__CONSTANTminusCODE + DD CP_P ; DP_BUFF + +cfa_AHEADER 0,'''DROP_V',ticDROP_V + call cfa__CONSTANTminusCODE+00H + DD cfa_DROP + call cfa__TOVALUEminusCODE+00H + +cfa_AHEADER 0,'''DUP_V',ticDUP_V + + call cfa__CONSTANTminusCODE + DD cfa_DUP + call cfa__TOVALUEminusCODE+00H + +cfa_AHEADER 0,'CONTEXT',_CONTEXT + call cfa__USERminusVALUEminusCODE + DD T_CONTEXT-main_task + call cfa__TOUSERminusVALUEminusCODE + +cfa_AHEADER 0,'>IN',greatIN + call cfa__USERminusCODE + DD T_greatIN-main_task + +cfa_AHEADER 0,'>OUT',greatOUT + call cfa__CREATEminusCODE +TO_OUT dd 0 + +cfa_AHEADER 0,'CURFILE',CURFILE + call cfa__USERminusCODE + DD T_CURFILE-main_task + +cfa_AHEADER 0,'S0',S0 + call cfa__USERminusCODE + DD T_S0-main_task + +cfa_AHEADER 0,'R0',R0 + call cfa__USERminusCODE + DD T_R0-main_task + +cfa_AHEADER 0,'SOURCE-ID',SOURCEminusID + call cfa__USERminusVALUEminusCODE + DD T_SOURCEminusID-main_task + call cfa__TOUSERminusVALUEminusCODE + +cfa_AHEADER 0,'TIB',TIB + call cfa__USERminusVALUEminusCODE + DD T_TIB-main_task + call cfa__TOUSERminusVALUEminusCODE + +cfa_AHEADER 0,'#TIN',nTIB + call cfa__USERminusCODE + DD T_nTIB-main_task + +cfa_AHEADER 0,'CURSTR',CURSTR + call cfa__USERminusCODE + DD T_CURSTR-main_task + +cfa_AHEADER 0,'SLITERAL-CODE',SLITERALminusCODE + call cfa__CONSTANTminusCODE + DD cfa__SLITERALminusCODE + call cfa__TOVALUEminusCODE + +cfa_AHEADER 0,'USER-OFFS',USERminusOFFS + call cfa__CREATEminusCODE + DD reserve+MUSEROFFS + +cfa_AHEADER 0,'HANDLER',HANDLER + call cfa__USERminusCODE + DD T_HANDLER-main_task + +cfa_AHEADER 0,'STATE',STATE + call cfa__USERminusCODE + DD T_STATE-main_task + +cfa_AHEADER 0,'CURRENT',CURRENT + call cfa__USERminusCODE + DD T_CURRENT-main_task + +cfa_AHEADER 0,'W-CNT',WminusCNT + call cfa__USERminusCODE + DD T_WminusCNT-main_task + +cfa_AHEADER 0,'S-O',SminusO + call cfa__USERminusCODE + DD T_SminusO-main_task + +cfa_AHEADER 0,'ER-U',ERminusU + call cfa__USERminusCODE + DD T_ERminusU-main_task + +cfa_AHEADER 0,'ER-A',ERminusA + call cfa__USERminusCODE + DD T_ERminusA-main_task + +cfa_AHEADER 0,'FORTH-WORDLIST',FORTHminusWORDLIST + call cfa__CONSTANTminusCODE + DD T_FORTH+4 + call cfa__TOVALUEminusCODE + +cfa_AHEADER 0,'VOC-LIST',VOCminusLIST + call cfa__CREATEminusCODE + DD T_FORTH + +cfa_AHEADER 0,'WARNING',WARNING + call cfa__USERminusCODE + DD T_WARNING-main_task + +;cfa_AHEADER 0,'LAST_KEY',LAST_KEY +; call cfa__CREATEminusCODE +; DD last_key + +cfa_AHEADER 0,"BLK",BLK + call cfa__USERminusCODE + DD T_BLK-main_task + + + +;cfa_AHEADER 0,"UZERO",UZERO_M +; call cfa__CONSTANTminusCODE +; DD UZERO + +cfa_AHEADER 0,"UPP",UPP_M + call cfa__CONSTANTminusCODE + DD UPP + +cfa_AHEADER 0,"ULAST",ULAST_M + call cfa__CONSTANTminusCODE + DD ULAST + +cfa_AHEADER 0,"SPP",SPP_M + call cfa__CONSTANTminusCODE + DD SPP +cfa_AHEADER 0,"TIBB",TIBB_M + call cfa__CONSTANTminusCODE + DD TIBB + +cfa_AHEADER 0,"#TIB",NTIB_M + call cfa__CONSTANTminusCODE + DD NTIB_P + +cfa_AHEADER 0,"sbuf",screen_buf_M + call cfa__CONSTANTminusCODE + DD screen_buf + +cfa_AHEADER 0,"cursor",cursor_M + call cfa__CONSTANTminusCODE + DD cursor + +cfa_AHEADER 0,"FINFO",FINFO + call cfa__CREATEminusCODE + DD FINFO + +cfa_AHEADER 0,"ROWH",ROWH + call cfa__CONSTANTminusCODE + DD ROWH + call cfa__TOVALUEminusCODE + +cfa_AHEADER 0,"ROWW",ROWW + call cfa__CONSTANTminusCODE + DD 6 + call cfa__TOVALUEminusCODE + +cfa_AHEADER 0,"MEMS",MEMS + call cfa__CONSTANTminusCODE + DD MEMS + +cfa_AHEADER 0,"draw_window",draw_window + PUSH EDI + CALL draw_window + POP EDI + RET + +; cfa_AHEADER 0,'MEBLK',MEBLK +; call cfa__USERminusCODE +; DD BLK_P-main_task + +main_task: +T_R0: + DD 0 +T_S0: + DD SPP ;STACK0 +T_WARNING: + DD -1 +T_STATE: + DD 0 +T_BLK: + DD 0 +T_CURFILE: + DD 0 +T_HANDLER: + DD 0 +T_HLD: + DD 5 +T_BASE: + DD 0AH + DD PAD_SIZE DUP (0) +T_PAD: + DD PAD_SIZE DUP (0) +T_ERminusA: + DD 0 +T_ERminusU: + DD 0 +T_DOESgreatA: + DD 0 +;T_ALIGNminusBYTES: + DD 0 +T_nTIB: + DD 0 +T_greatIN: + DD 5 +T_TIB: + DD T_ATIB +T_ATIB: + DD TIB_SIZE DUP (0) +T_SOURCEminusID: + DD 0 +T_CURSTR: + DD 0 +T_WBWminusNFA: + DD 0 +T_WBWminusOFFS: + DD 0 +T_CURRENT: + DD T_FORTH+4 +T_SminusO: + DD T_FORTH+4,T_FORTH+4 + DD 16 DUP (0) +T_CONTEXT: + DD T_SminusO +T_greatOUT: + DD 0 +T_WminusCNT: + DD 0 +T_NNN: + DD 0 +Mreserve: + DD MUSEROFFS DUP (0) +UPP: + +BASE_P DD BASEE +TEMP_P DD 0 +INN_P DD 0 +NTIB_P DD 0 +TIB_P DD TIBB +;TEVAL_P DD INTER +HLD_P DD 0 +CNTXT_P DD 0 +CP_P DD CTOP +;LAST_P DD LASTN ;LAST +EMIT_PROC_P DD -1 ; EMITPROC +reg_struc_P DD 0 +; BLK_P DD FILE_B +; fi_struc_P DD FINFO +workarea_P DD os_work + + DD 1000 DUP (0) + +T_FORTH: + DD 0 ; для VOC-LIST + DD LastNFA ; адрес последнего имени !!!!!!!! + DD 0 ; предок + DD 0 ; класс + +ByeLevel DD 0 diff --git a/programs/develop/SPForth/build.bat b/programs/develop/SPForth/build.bat new file mode 100644 index 0000000000..b4e08d7c2e --- /dev/null +++ b/programs/develop/SPForth/build.bat @@ -0,0 +1,5 @@ +spf4.exe src/gspf.f S" img.asm" TSAVE CR BYE +call mbuild.bat + + +pause \ No newline at end of file diff --git a/programs/develop/SPForth/debug.inc b/programs/develop/SPForth/debug.inc new file mode 100644 index 0000000000..1f43e064a7 --- /dev/null +++ b/programs/develop/SPForth/debug.inc @@ -0,0 +1,137 @@ +macro debug_print str +{ + local ..string, ..label + + jmp ..label + ..string db str,0 + ..label: + + pushf + pushad + mov edx,..string + call debug_outstr + popad + popf +} + +dps fix debug_print + +macro debug_print_dec arg +{ + pushf + pushad + if ~arg eq eax + mov eax,arg + end if + call debug_outdec + popad + popf +} + +dpd fix debug_print_dec + +;--------------------------------- +debug_outdec: ;(eax - num, edi-str) + push 10 ;2 + pop ecx ;1 + push -'0' ;2 + .l0: + xor edx,edx ;2 + div ecx ;2 + push edx ;1 + test eax,eax ;2 + jnz .l0 ;2 + .l1: + pop eax ;1 + add al,'0' ;2 + call debug_outchar ; stosb + jnz .l1 ;2 + ret ;1 +;--------------------------------- + +debug_outchar: ; al - char + pushf + pushad + mov cl,al + mov eax,63 + mov ebx,1 + int 0x40 + popad + popf +ret + +debug_outstr: + mov eax,63 + mov ebx,1 + @@: + mov cl,[edx] + test cl,cl + jz @f + int 40h + inc edx + jmp @b + @@: + ret + +_debug_crlf db 13, 10, 0 + +macro newline +{ + pushf + pushad + mov edx, _debug_crlf + call debug_outstr + popad + popf +} + +macro print message +{ + dps message + newline +} + +macro pregs +{ + dps "EAX: " + dpd eax + dps " EBX: " + dpd ebx + newline + dps "ECX: " + dpd ecx + dps " EDX: " + dpd edx + newline +} + +macro debug_print_hex arg +{ + pushf + pushad + if ~arg eq eax + mov eax, arg + end if + call debug_outhex + popad + popf +} +dph fix debug_print_hex + +debug_outhex: + ; eax - number + mov edx, 8 + .new_char: + rol eax, 4 + movzx ecx, al + and cl, 0x0f + mov cl, [__hexdigits + ecx] + pushad + mcall 63, 1 + popad + dec edx + jnz .new_char +ret + +__hexdigits: + db '0123456789ABCDEF' \ No newline at end of file diff --git a/programs/develop/SPForth/devel/~ac/lib/LOCALS.F b/programs/develop/SPForth/devel/~ac/lib/LOCALS.F new file mode 100644 index 0000000000..9ee1019975 --- /dev/null +++ b/programs/develop/SPForth/devel/~ac/lib/LOCALS.F @@ -0,0 +1,193 @@ +lib\ext\locals.f \EOF + +( 28.Mar.2000 Andrey Cherezov Copyright [C] RU FIG + ╚ёяюы№чютрэ√ шфхш ёыхфє■∙шї ртЄюЁют: + Ruvim Pinka; Dmitry Yakimov; Oleg Shalyopa; Yuriy Zhilovets; + Konstantin Tarasov + + !! ╨рсюЄрхЄ, Єюы№ъю эрўшэр  ё 30 сшыфр SPF/3.75: VERSION . 375030 Ok +) + +( ╧ЁюёЄюх Ёрё°шЁхэшх ╤╧-╘юЁЄр ыюъры№э√ьш яхЁхьхээ√ьш. + ╨хрышчютрэю схч шёяюы№чютрэш  LOCALS ёЄрэфрЁЄр 94. + + ╬с· тыхэшх тЁхьхээ√ї яхЁхьхээ√ї, тшфшь√ї Єюы№ъю тэєЄЁш + Єхъє∙хую ёыютр ш юуЁрэшўхээ√ї тЁхьхэхь т√чютр фрээюую + ёыютр т√яюыэ хЄё  ё яюью∙№■ ёыютр "{". ┬эєЄЁш юяЁхфхыхэш  + ёыютр шёяюы№чєхЄё  ъюэёЄЁєъЎш , яюфюсэр  ёЄхъютющ эюЄрЎшш ╘юЁЄр + { ёяшёюъ_шэшЎшрышчшЁютрээ√ї_ыюърыют \ ёя.эхшэшЎ.ыюърыют -- ўЄю єуюфэю } + ═ряЁшьхЁ: + + { a b c d \ e f -- i j } + + ╫рёЄ№ "\ ёя.эхшэшЎ.ыюърыют" ьюцхЄ юЄёєЄёЄтютрЄ№, эряЁшьхЁ: + + { item1 item2 -- } + + ▌Єю чрёЄрты хЄ ╤╧-╘юЁЄ ртЄюьрЄшўхёъш т√фхы Є№ ьхёЄю т + ёЄхъх тючтЁрЄют фы  ¤Єшї яхЁхьхээ√ї т ьюьхэЄ т√чютр ёыютр + ш ртЄюьрЄшўхёъш юётюсюцфрЄ№ ьхёЄю яЁш т√їюфх шч эхую. + + ╬сЁр∙хэшх ъ Єръшь ыюъры№э√ь яхЁхьхээ√ь - ъръ ъ VALUE-яхЁхьхээ√ь + яю шьхэш. ┼ёыш эєцхэ рфЁхё яхЁхьхээющ, Єю шёяюы№чєхЄё  "^ шь ". + + ╧ЁшьхЁ√: + + : TEST { a b c d \ e f -- } a . b . c . b c + -> e e . f . ^ a @ . ; + Ok + 1 2 3 4 TEST + 1 2 3 5 0 1 Ok + + : TEST { a b -- } a . b . CR 5 0 DO I . a . b . CR LOOP ; + Ok + 12 34 TEST + 12 34 + 0 12 34 + 1 12 34 + 2 12 34 + 3 12 34 + 4 12 34 + Ok + + : TEST { a b } a . b . ; + Ok + 1 2 TEST + 1 2 Ok + + : TEST { a b \ c } a . b . c . ; + Ok + 1 2 TEST + 1 2 0 Ok + + : TEST { a b -- } a . b . ; + Ok + 1 2 TEST + 1 2 Ok + + : TEST { a b \ c -- d } a . b . c . ; + Ok + 1 2 TEST + 1 2 0 Ok + + : TEST { \ a b } a . b . 1 -> a 2 -> b a . b . ; + Ok + TEST + 0 0 1 2 Ok + + ╚ьхэр ыюъры№э√ї яхЁхьхээ√ї ёє∙хёЄтє■Є т фшэрьшўхёъюь + тЁхьхээюь ёыютрЁх Єюы№ъю т ьюьхэЄ ъюьяшы Ўшш ёыютр, р + яюёых ¤Єюую т√ўш∙р■Єё  ш сюыхх эхфюёЄєяэ√. + + ╚ёяюы№чютрЄ№ ъюэёЄЁєъЎш■ "{ ... }" тэєЄЁш юфэюую юяЁхфхыхэш  ьюцэю + Єюы№ъю юфшэ Ёрч. + + ╩юьяшы Ўш  ¤Єющ сшсышюЄхъш фюсрты хЄ т Єхъє∙шщ ёыютрЁ№ ъюьяшы Ўшш + ╥юы№ъю фтр ёыютр: + ёыютрЁ№ "vocLocalsSupport" ш "{" + ┬ёх юёЄры№э√х фхЄрыш "ёяЁ Єрэ√" т ёыютрЁх, шёяюы№чютрЄ№ шї + эх ЁхъюьхэфєхЄё . +) + + +VOCABULARY vocLocalsSupport + +GET-CURRENT ALSO vocLocalsSupport DEFINITIONS + +USER widLocals +USER uLocalsCnt +USER uLocalsUCnt +USER uPrevCurrent +USER uAddDepth + +: (Local^) ( N -- ADDR ) + RP@ + +; +: LocalOffs ( n -- offs ) + uLocalsCnt @ SWAP - CELLS CELL+ uAddDepth @ + +; +: CompileLocalsInit + uPrevCurrent @ SET-CURRENT + uLocalsCnt @ uLocalsUCnt @ - ?DUP IF CELLS LIT, POSTPONE DRMOVE THEN + uLocalsUCnt @ ?DUP IF LIT, POSTPONE (RALLOT) THEN + uLocalsCnt @ ?DUP + IF CELLS LIT, POSTPONE >R ['] (LocalsExit) LIT, POSTPONE >R THEN +; +: CompileLocal@ ( n -- ) + LocalOffs LIT, POSTPONE RP+@ +; +: LocalsStartup + TEMP-WORDLIST widLocals ! + GET-CURRENT uPrevCurrent ! + ALSO vocLocalsSupport + ALSO widLocals @ CONTEXT ! DEFINITIONS + uLocalsCnt 0! + uLocalsUCnt 0! + uAddDepth 0! +; +: LocalsCleanup + PREVIOUS PREVIOUS + widLocals @ FREE-WORDLIST +; +: LocalsDoes@ + uLocalsCnt @ , + uLocalsCnt 1+! + DOES> @ CompileLocal@ +; +: ;; POSTPONE ; ; IMMEDIATE + +: ^ ' >BODY @ LocalOffs LIT, POSTPONE RP+ ; IMMEDIATE + +: -> ' >BODY @ LocalOffs LIT, POSTPONE RP+! ; IMMEDIATE + +: т POSTPONE -> ; IMMEDIATE + +WARNING @ WARNING 0! +\ === +\ яхЁхюяЁхфхыхэшх ёююЄтхЄёЄтє■∙шї ёыют фы  тючьюцэюёЄш шёяюы№чютрЄ№ +\ тЁхьхээ√х яхЁхьхээ√х тэєЄЁш Ўшъыр DO LOOP ш эхчртшёшью юЄ шчьхэхэш  +\ ёюфхЁцшьюую ёЄхър тючтЁрЄют ёыютрьш >R R> + +: DO POSTPONE DO [ 3 CELLS ] LITERAL uAddDepth +! ; IMMEDIATE +: ?DO POSTPONE ?DO [ 3 CELLS ] LITERAL uAddDepth +! ; IMMEDIATE +: LOOP POSTPONE LOOP [ -3 CELLS ] LITERAL uAddDepth +! ; IMMEDIATE +: +LOOP POSTPONE +LOOP [ -3 CELLS ] LITERAL uAddDepth +! ; IMMEDIATE +: >R POSTPONE >R [ 1 CELLS ] LITERAL uAddDepth +! ; IMMEDIATE +: R> POSTPONE R> [ -1 CELLS ] LITERAL uAddDepth +! ; IMMEDIATE +: RDROP POSTPONE RDROP [ -1 CELLS ] LITERAL uAddDepth +! ; IMMEDIATE + +\ === + +: ; LocalsCleanup POSTPONE ; ; IMMEDIATE + +WARNING ! + +\ ===================================================================== +SET-CURRENT + +: { + LocalsStartup + BEGIN + BL SKIP PeekChar DUP [CHAR] \ <> + OVER [CHAR] - <> AND + SWAP [CHAR] } <> AND + WHILE + CREATE LocalsDoes@ IMMEDIATE + REPEAT + + PeekChar >IN 1+! DUP [CHAR] } <> + IF + [CHAR] \ = + IF + BEGIN + BL SKIP PeekChar DUP [CHAR] - <> SWAP [CHAR] } <> AND + WHILE + CREATE LocalsDoes@ IMMEDIATE + uLocalsUCnt 1+! + REPEAT + THEN + [CHAR] } PARSE 2DROP + ELSE DROP THEN + CompileLocalsInit +;; IMMEDIATE + +PREVIOUS diff --git a/programs/develop/SPForth/devel/~af/lib/comments.f b/programs/develop/SPForth/devel/~af/lib/comments.f new file mode 100644 index 0000000000..c384647b8e --- /dev/null +++ b/programs/develop/SPForth/devel/~af/lib/comments.f @@ -0,0 +1,9 @@ +\ $Id: comments.f,v 1.2 2002/06/18 14:50:22 anfilat Exp $ +\ еще один многострочный коментарий :-) (~ruvim) +: (* ( -- ) + BEGIN + NextWord DUP 0= + IF NIP REFILL 0= IF DROP TRUE THEN + ELSE S" *)" COMPARE 0= THEN + UNTIL +; IMMEDIATE diff --git a/programs/develop/SPForth/devel/~mak/CompIF.f b/programs/develop/SPForth/devel/~mak/CompIF.f new file mode 100644 index 0000000000..d3923985eb --- /dev/null +++ b/programs/develop/SPForth/devel/~mak/CompIF.f @@ -0,0 +1,25 @@ + +: [ELSE] + 1 + BEGIN + NextWord DUP + IF + 2DUP S" [IF]" COMPARE 0= IF 2DROP 1+ ELSE + 2DUP S" [ELSE]" COMPARE 0= IF 2DROP 1- DUP IF 1+ THEN ELSE + S" [THEN]" COMPARE 0= IF 1- THEN + THEN THEN + ELSE 2DROP REFILL AND \ SOURCE TYPE + THEN DUP 0= + UNTIL DROP ; IMMEDIATE + +: [IF] 0= IF [COMPILE] [ELSE] THEN ; IMMEDIATE + +: [THEN] ; IMMEDIATE + +C" \S" FIND NIP 0= +[IF] +: \S \ comment to end of file + SOURCE-ID FILE-SIZE DROP + SOURCE-ID REPOSITION-FILE DROP + [COMPILE] \ ; IMMEDIATE +[THEN] diff --git a/programs/develop/SPForth/devel/~mak/DIS486.F b/programs/develop/SPForth/devel/~mak/DIS486.F new file mode 100644 index 0000000000..25a8f9342b --- /dev/null +++ b/programs/develop/SPForth/devel/~mak/DIS486.F @@ -0,0 +1,1559 @@ +\ 80386 DISASSEMBLER +\ ANDREW MCKEWAN, APRIL 1994 +\ TOM ZIMMER, 05/18/94 PORT TO WIN32F +\ MODIFIED TO WORD IN DECIMAL 08/03/94 10:04 TJZ +\ 06-??-95 SMUB NEXT SEQUENCE DEFINED IN FKERNEL +\ 06-21-95 SMUB REMOVED REDUNDANT COUNT CALLS FROM TXB, LXS. +\ 04-??-97 EXTENDED BY C.L. TO INCLUDE P6 AND MMX INSTRUCTIONS +\ +REQUIRE MAXSTRING ~mak\UTILS_.F + +CR .( LOADING 80486 DISASSEMBLER...) + +ONLY FORTH ALSO DEFINITIONS + +0 VALUE DEFAULT-16BIT? + +: DEFAULT-16BIT ( -- ) + TRUE TO DEFAULT-16BIT? ; + +: DEFAULT-32BIT ( -- ) + FALSE TO DEFAULT-16BIT? ; + + VECT SHOW-NAME ( CFA -- ) \ DISPLAY NEAREST SYMBOL + +0 VALUE BASE-ADDR + +VOCABULARY DISASSEMBLER +DISASSEMBLER ALSO DEFINITIONS + +DECIMAL + +CREATE S-BUF MAXSTRING ALLOT + +: >S ( A1 N1 -- ) + S-BUF +PLACE ; + +: 0>S ( -- ) \ RESET S-BUF + S-BUF OFF ; + +: SSPACES ( N1 -- ) + SPCS SWAP S-BUF +PLACE ; + +: SSPACE ( -- ) + 1 SSPACES ; + +: EMIT>S ( C1 -- ) + S-BUF C+PLACE ; + +: S> ( -- A1 N1 ) + S-BUF COUNT ; + +: (.S") ( addr len -- ) + S-BUF +PLACE ; + +: .S" ( 'TEXT' -- ) + [CHAR] " PARSE + POSTPONE SLITERAL + POSTPONE (.S") ; IMMEDIATE + + +: D.R>S ( D W -- ) + >R (D.) R> OVER - SSPACES >S ; + +: .R>S ( N W -- ) + >R S>D R> D.R>S ; + +: U.R>S ( U W -- ) + 0 SWAP D.R>S ; + +: H.>S ( U -- ) + BASE @ SWAP HEX 0 (D.) >S SSPACE BASE ! ; + +: H.R>S ( N1 N2 -- ) + BASE @ >R HEX >R + 0 <# #S #> R> OVER - SSPACES >S + R> BASE ! ; + +: ?.NAME>S ( CFA -- ) +\ ELIMINATE " 0X" + DUP 1 H.R>S SSPACE + DUP WordByAddr + >R TUCK 1- NAME> = + IF .S" ( " R> >S .S" ) " + ELSE RDROP DROP + THEN + ; + +' ?.NAME>S TO SHOW-NAME + +\ 32 CONSTANT COMMENT-COL + +0 VALUE SIZE +0 VALUE 16-BIT-DATA +0 VALUE 16-BIT-ADDR +0 VALUE PREFIX-OP +0 VALUE MMX-REG + +: @+ ( ADDR -- ADDR N ) DUP CELL+ SWAP @ ; +: W@+ ( ADDR -- ADDR N ) DUP 2 + SWAP W@ ; + +: SEXT ( BYTE -- N ) DUP 128 AND IF 0xFFFFFF00 OR THEN ; +: MOD/SIB ( MOD-R-R/M -- R/M R MOD ) \ R INCLUDING GENERAL, SPECIAL, SEGMENT, MMX + ( MOD-OP-R/M -- R/M OP MOD ) + ( S-I-B -- B I S ) + 255 AND 8 /MOD 8 /MOD ; + +: ??? ( N1 -- ) + .S" ??? " DROP ; + +: SS. ( N ADR LEN W ) >R DROP SWAP R@ * + R> >S SSPACE ; + +: TTTN ( CODE -- ) 15 AND S" O NOB AEE NEBEA S NSP NPL GELEG " 2 SS. ; + +: SREG ( SREG -- ) 3 RSHIFT 7 AND S" ESCSSSDSFSGSXXXX" 2 SS. ; +: CREG ( EEE -- ) 3 RSHIFT 7 AND S" CR0???CR2CR3CR4?????????" 3 SS. ; +: DREG ( EEE -- ) 3 RSHIFT 7 AND S" DR0DR1DR2DR3??????DR6DR7" 3 SS. ; +: TREG ( EEE -- ) 3 RSHIFT 7 AND S" ?????????TR3TR4TR5TR6TR7" 3 SS. ; \ OBSOLETE +: MREG ( N -- ) 7 AND S" MM0MM1MM2MM3MM4MM5MM6MM7" 3 SS. ; + +: REG8 ( N -- ) 7 AND S" ALCLDLBLAHCHDHBH" 2 SS. ; +: REG16 ( N -- ) 7 AND S" AXCXDXBXSPBPSIDI" 2 SS. ; +: REG32 ( N -- ) 7 AND S" EAXECXEDXEBXESPEBPESIEDI" 3 SS. ; +: REG16/32 ( N -- ) + 16-BIT-DATA + IF REG16 + ELSE REG32 + THEN ; +: REG ( A N -- A ) + MMX-REG + IF MREG + ELSE SIZE + IF REG16/32 + ELSE REG8 + THEN + THEN + ; + +: [BASE16] ( R/M -- ) 4 - S" [SI][DI][BP][BX]" 4 SS. ; + \ R/M = 4 , 5 , 6 , 7 +: [IND16] ( R/M -- ) S" [BX+SI][BX+DI][BP+SI][BP+DI]" 7 SS. ; + \ R/M = 0 , 1 , 2 , 3 +: [REG16] ( R/M -- ) DUP 4 < + IF [IND16] + ELSE [BASE16] + THEN ; +: [REG32] ( N -- ) 7 AND S" [EAX][ECX][EDX][EBX][ESP][EBP][ESI][EDI]" 5 SS. ; + +\ : [REG] ( R/M -- ) 16-BIT-ADDR +\ IF [REG16] +\ ELSE [REG32] +\ THEN SSPACE ; + +\ : [REG] ( N -- ) +\ 7 AND +\ 16-BIT-ADDR +\ IF S" [BX+SI] [BX+DI] [BP+SI] [BP+DI] [SI] [DI] [BP] [BX]" +\ ROT 0 +\ ?DO BL SKIP BL SCAN +\ LOOP BL SKIP 2DUP BL SCAN NIP - >S 2 SSPACES +\ ELSE S" [EAX][ECX][EDX][EBX][ESP][EBP][ESI][EDI]" 5 SS. SSPACE +\ THEN ; + +: [REG*2] ( I -- ) S" [EAX*2][ECX*2][EDX*2][EBX*2][XXX*2][EBP*2][ESI*2][EDI*2]" 7 SS. ; +: [REG*4] ( I -- ) S" [EAX*4][ECX*4][EDX*4][EBX*4][XXX*4][EBP*4][ESI*4][EDI*4]" 7 SS. ; +: [REG*8] ( I -- ) S" [EAX*8][ECX*8][EDX*8][EBX*8][XXX*8][EBP*8][ESI*8][EDI*8]" 7 SS. ; +: [INDEX] ( SIB -- ) MOD/SIB OVER 4 = + IF 2DROP \ NO ESP SCALED INDEX + ELSE CASE ( S ) + 0 OF [REG32] ENDOF + 1 OF [REG*2] ENDOF + 2 OF [REG*4] ENDOF + 3 OF [REG*8] ENDOF + ENDCASE + THEN DROP ; + +: DISP8 ( ADR -- ADR' ) COUNT H.>S ; +: DISP16 ( ADR -- ADR' ) W@+ SHOW-NAME ; +: DISP32 ( ADR -- ADR' ) @+ ( BODY> ) SHOW-NAME ; +: DISP16/32 ( ADR -- ADR' ) + 16-BIT-ADDR + IF DISP16 + ELSE DISP32 + THEN ; + +: ., ( -- ) .S" , " ; + +: .# ., .S" # " ; + +: IMM8 ( ADR -- ADR' ) .# COUNT H.>S ; + +\ : IMM16 ( ADR -- ADR' ) .# W@+ H.>S ; + +: IMM16/32 ( ADR -- ADR' ) + .# 16-BIT-DATA + IF W@+ + ELSE @+ + THEN H.>S ; + +: SIB ( ADR MOD -- ADR ) + >R COUNT TUCK 7 AND 5 = R@ 0= AND + IF DISP32 SWAP [INDEX] R> DROP \ EBP BASE AND MOD = 00 + ELSE R> CASE ( MOD ) + 1 OF DISP8 ENDOF + 2 OF DISP32 ENDOF + ENDCASE + SWAP DUP [REG32] [INDEX] + THEN ; + +\ : [*] ( SIB -- ) +\ .S" SIB = " H.>S ; + +\ : SIB ( ADR EXT -- ADR' ) +\ ?? WRONG VERSION +\ SWAP COUNT >R SWAP 6 RSHIFT 3 AND +\ ?DUP IF 1 = IF DISP8 ELSE DISP32 THEN THEN +\ R> DUP 7 AND DUP 5 = +\ IF DROP [*] +\ ELSE [REG] +\ DUP 0x38 AND 0x20 = +\ IF DROP +\ ELSE .S" [" DUP 3 RSHIFT REG32 -1 S-BUF C+! +\ 5 RSHIFT 6 AND +\ DUP 6 = IF 2 + THEN +\ ?DUP IF .S" *" 0 .R>S THEN .S" ] " +\ THEN +\ THEN ; + + +: MOD-R/M32 ( ADR R/M MOD -- ADR' ) + DUP 3 = + IF DROP REG \ MOD = 3, REGISTER CASE + ELSE OVER 4 = + IF NIP SIB \ R/M = 4, SIB CASE + ELSE 2DUP 0= SWAP 5 = AND \ MOD = 0, R/M = 5, + IF 2DROP DISP32 \ DISP32 CASE + ELSE ROT SWAP + CASE ( MOD ) + 1 OF DISP8 ENDOF + 2 OF DISP32 ENDOF + ENDCASE + SWAP [REG32] + THEN + THEN + THEN ; + +: MOD-R/M16 ( ADR R/M MOD -- ADR' ) + 2DUP 0= SWAP 6 = AND + IF 2DROP DISP16 \ DISP16 CASE + ELSE CASE ( MOD ) + 0 OF [REG16] ENDOF + 1 OF SWAP DISP8 SWAP [REG16] ENDOF + 2 OF SWAP DISP16 SWAP [REG16] ENDOF + 3 OF REG ENDOF + ENDCASE + THEN ; + +: MOD-R/M ( ADR MODR/M -- ADR' ) + MOD/SIB NIP 16-BIT-ADDR + IF MOD-R/M16 + ELSE MOD-R/M32 + THEN ; + +\ : MOD-R/M ( ADR EXT -- ADR' ) +\ DUP 0xC7 AND 5 = \ 32BIT DISPLACEMENT +\ 16-BIT-ADDR 0= AND \ AND NOT 16BIT ADDRESSING +\ IF DROP DISP32 .S" [] " +\ EXIT +\ THEN +\ DUP 0xC0 AND 0xC0 < OVER 7 AND 4 = AND +\ 16-BIT-ADDR 0= AND \ AND NOT 16BIT ADDRESSING +\ IF SIB +\ EXIT +\ THEN +\ DUP 0xC7 AND 6 = \ 16BIT DISPLACEMENT +\ 16-BIT-ADDR AND \ AND 16BIT ADDRESSING +\ IF DROP DISP32 .S" [] " +\ EXIT +\ THEN +\ DUP 6 RSHIFT +\ CASE +\ 0 OF .S" 0 " [REG] ENDOF +\ 1 OF SWAP DISP8 SWAP [REG] ENDOF +\ 2 OF SWAP DISP32 SWAP [REG] ENDOF +\ 3 OF REG ENDOF +\ ENDCASE ; + + + + +: R/M8 0 TO SIZE MOD-R/M ; +: R/M16/32 1 TO SIZE MOD-R/M ; +: R/M16 TRUE TO 16-BIT-DATA R/M16/32 ; + +: R,R/M ( ADR -- ADR' ) + COUNT DUP 3 RSHIFT REG ., MOD-R/M ; + +: R/M,R ( ADR -- ADR' ) + COUNT DUP>R MOD-R/M ., R> 3 RSHIFT REG ; + +: R/M ( ADR OP -- ADR' ) + 2 AND + IF R,R/M + ELSE R/M,R + THEN ; + +\ -------------------- SIMPLE OPCODES -------------------- + +: INH ( -- ) + CREATE + BL WORD COUNT HERE PLACE + HERE C@ 1+ ALLOT + DOES> COUNT >S SSPACE DROP ; + +INH CLC CLC +INH STC STC +INH CLD CLD +INH STD STD +\ INH RPNZ REPNZ +\ INH REPZ REPZ +INH CBW CBW +INH CDQ CDQ +INH DAA DAA +INH DAS DAS +INH AAA AAA +INH AAS AAS +\ INH LOCK LOCK +INH INB INSB +INH OSB OUTSB +INH SAH SAHF +INH LAH LAHF +\ INH AAM AAM +\ INH AAD AAD +INH HLT HLT +INH CMC CMC +INH XLT XLAT +INH CLI CLI +INH STI STI + +INH CLT CLTS +INH INV INVD +INH WIV WBINVD +INH UD2 UD2 +INH WMR WRMSR +INH RTC RDTSC +INH RMR RDMSR +INH RPC RDPMC +INH EMS EMMS +INH RSM RSM +INH CPU CPUID +INH UD1 UD1 +\ INH LSS LSS +\ INH LFS LFS +\ INH LGS LGS + +\ INH D16: D16: +\ INH A16: A16: +\ INH ES: ES: +\ INH CS: CS: +\ INH DS: DS: +\ INH FS: FS: +\ INH GS: GS: + +: AAM ( ADR CODE -- ADR' ) + .S" AAM" DROP COUNT DROP ; + +: AAD ( ADR CODE -- ADR' ) + .S" AAD" DROP COUNT DROP ; + +: D16 ( ADR CODE -- ADR' ) + DROP .S" D16:" + TRUE TO 16-BIT-DATA + TRUE TO PREFIX-OP + ; + +: A16 ( ADR CODE -- ADR' ) + DROP .S" A16:" + TRUE TO 16-BIT-ADDR + TRUE TO PREFIX-OP + ; + +: RPZ ( ADR CODE -- ADR' ) + DROP .S" REPNZ" + TRUE TO PREFIX-OP + ; + +: REP ( ADR CODE -- ADR' ) + DROP .S" REPZ" + TRUE TO PREFIX-OP + ; + +: LOK ( ADR CODE -- ADR' ) \ THIS SHOULD HAVE ERROR CHECKING ADDED + DROP .S" LOCK" + TRUE TO PREFIX-OP + ; + +: CS: ( ADR CODE -- ADR' ) + DROP .S" CS:" + TRUE TO PREFIX-OP + ; + +: DS: ( ADR CODE -- ADR' ) + DROP .S" DS:" + TRUE TO PREFIX-OP + ; + +: SS: ( ADR CODE -- ADR' ) + DROP .S" SS:" + TRUE TO PREFIX-OP + ; + +: ES: ( ADR CODE -- ADR' ) + DROP .S" ES:" + TRUE TO PREFIX-OP + ; + +: GS: ( ADR CODE -- ADR' ) + DROP .S" GS:" + TRUE TO PREFIX-OP + ; + +: FS: ( ADR CODE -- ADR' ) + DROP .S" FS:" + TRUE TO PREFIX-OP + ; + +: ISD ( ADR CODE -- ADR' ) + DROP 16-BIT-DATA + IF .S" INSW " + ELSE .S" INSD " + THEN ; + +: OSD ( ADR CODE -- ADR' ) + DROP 16-BIT-DATA + IF .S" OUTSW " + ELSE .S" OUTSD " + THEN ; + +: INP ( ADDR CODE -- ADDR' ) + .S" IN " 1 AND + IF 16-BIT-DATA + IF .S" AX , " + ELSE .S" EAX , " + THEN + ELSE .S" AL , " + THEN + COUNT H.>S ; + +: OTP ( ADDR CODE -- ADDR' ) + .S" OUT " 1 AND + IF COUNT H.>S 16-BIT-DATA + IF .S" , AX" + ELSE .S" , EAX" + THEN + ELSE COUNT H.>S .S" , AL" + THEN + ; + +: IND ( ADDR CODE -- ADDR' ) + .S" IN " 1 AND + IF 16-BIT-DATA + IF .S" AX , DX" + ELSE .S" EAX , DX" + THEN + ELSE .S" AL , DX" + THEN + ; + +: OTD ( ADDR CODE -- ADDR' ) + .S" OUT " 1 AND + IF 16-BIT-DATA + IF .S" DX , AX" + ELSE .S" DX , EAX" + THEN + ELSE .S" DX , AL" + THEN + ; + +\ -------------------- ALU OPCODES -------------------- + +: .ALU ( N -- ) + 7 AND S" ADDOR ADCSBBANDSUBXORCMP" 3 SS. 4 SSPACES + ; + +: ALU ( ADR OP -- ADR' ) + DUP 3 RSHIFT .ALU R/M ; + +: ALI ( ADR OP -- ADR' ) + >R COUNT + DUP 3 RSHIFT .ALU + MOD-R/M + R> 3 AND ?DUP + IF 1 = + IF IMM16/32 + ELSE .# COUNT SEXT 0 .R>S SSPACE + THEN + ELSE IMM8 + THEN ; + +: ALA ( ADR OP -- ADR' ) + DUP 3 RSHIFT .ALU + 1 AND IF 0 REG IMM16/32 ELSE 0 REG8 IMM8 THEN ; + + +\ -------------------- TEST/XCHG -------------------- + +: TXB ( ADDR OP -- ADDR' ) + DUP 3 AND S" TESTTESTXCHGXCHG" 4 SS. 3 SSPACES + 1 AND + IF 1 TO SIZE R,R/M \ SMUB REMOVED COUNT + ELSE 0 TO SIZE R,R/M \ SMUB REMOVED COUNT + THEN + ; + +: TST ( ADDR OP -- ADDR' ) + .S" TEST " 1 AND + IF 16-BIT-DATA + IF .S" AX , " + ELSE .S" EAX , " + THEN + IMM16/32 + ELSE .S" AL , " IMM8 + THEN + ; + +\ -------------------- INC/DEC ---------------------- + +: INC ( ADDR OP -- ADDR' ) + .S" INC " REG16/32 ; + +: DEC ( ADDR OP -- ADDR' ) + .S" DEC " REG16/32 ; + + +\ -------------------- PUSH/POP -------------------- + +: PSH ( ADDR OP -- ADDR' ) + .S" PUSH " REG16/32 ; + +: POP ( ADDR OP -- ADDR' ) + .S" POP " REG16/32 ; + +: PSS ( ADDR OP -- ADDR' ) + .S" PUSH " SREG ; + +: PPS ( ADDR OP -- ADDR' ) + .S" POP " SREG ; + +: PSA ( ADDR OP -- ADDR' ) + DROP 16-BIT-DATA + IF .S" PUSHA " + ELSE .S" PUSHAD " + THEN ; + +: PPA ( ADDR OP -- ADDR' ) + DROP 16-BIT-DATA + IF .S" POPA " + ELSE .S" POPAD " + THEN ; + +: PSI ( ADDR OP -- ADDR' ) + .S" PUSH " 2 AND + IF IMM8 + ELSE IMM16/32 + THEN ; + +: PSF ( ADDR OP -- ADDR' ) + DROP 16-BIT-DATA + IF .S" PUSHF " + ELSE .S" PUSHFD " + THEN ; + +: PPF ( ADDR OP -- ADDR' ) + DROP 16-BIT-DATA + IF .S" POPF " + ELSE .S" POPFD " + THEN ; + +: 8F. ( ADDR OP -- ADDR' ) + DROP COUNT .S" POP " R/M16/32 ; + +\ -------------------- MOVE -------------------- + +: MOV ( ADDR OP -- ADDR' ) + .S" MOV " R/M ; + +: MRI ( ADDR OP -- ADDR' ) ( MOV REGISTER, IMM ) + .S" MOV " DUP 8 AND + IF REG16/32 IMM16/32 + ELSE REG8 IMM8 + THEN ; + +: MVI ( ADR OP -- ADR' ) ( MOV MEM, IMM ) + .S" MOV " DROP COUNT MOD-R/M + SIZE + IF IMM16/32 + ELSE IMM8 + THEN + ; + +: MRS ( ADDR OP -- ADDR' ) +\ ? REMOVE REDUNDANT >R , R> + 16-BIT-DATA + IF .S" MOV " DROP + 1 TO SIZE + COUNT DUP MOD-R/M ., + SREG + ELSE ??? + THEN ; + +: MSR ( ADDR OP -- ADDR' ) + 16-BIT-DATA + IF .S" MOV " DROP + 1 TO SIZE + COUNT DUP SREG ., + MOD-R/M + ELSE ??? + THEN ; + +: MRC ( ADDR OP -- ADDR' ) + .S" MOV " + DROP COUNT DUP REG32 .S" , " + CREG ; + +: MCR ( ADDR OP -- ADDR' ) + .S" MOV " + DROP COUNT DUP CREG .S" , " + REG32 ; + +: MRD ( ADDR OP -- ADDR' ) + .S" MOV " + DROP COUNT DUP REG32 .S" , " + DREG ; + +: MDR ( ADDR OP -- ADDR' ) + .S" MOV " + DROP COUNT DUP DREG .S" , " + REG32 ; + +: MRT ( ADDR OP -- ADDR' ) +\ OBSOLETE + .S" MOV " + DROP COUNT DUP REG32 .S" , " + TREG ; + +: MTR ( ADDR OP -- ADDR' ) +\ OBSOLETE + .S" MOV " + DROP COUNT DUP TREG .S" , " + REG32 ; + +: MV1 ( ADDR OP -- ADDR' ) + .S" MOV " 1 AND + IF 16-BIT-DATA + IF .S" AX , " + ELSE .S" EAX , " + THEN + ELSE .S" AL , " + THEN + DISP16/32 ; + +: MV2 ( ADDR OP -- ADDR' ) + >R .S" MOV " DISP16/32 ., + R> 1 AND + IF 16-BIT-DATA + IF .S" AX" + ELSE .S" EAX" + THEN + ELSE .S" AL" + THEN + ; + +: LEA ( ADDR OP -- ADDR' ) + .S" LEA " DROP 1 TO SIZE R,R/M ; + +: LXS ( ADDR OP -- ADDR' ) + 1 AND + IF .S" LDS " + ELSE .S" LES " + THEN + R,R/M \ SMUB REMOVED COUNT + ; + +: BND ( ADDR OP -- ADDR' ) + .S" BOUND " DROP 1 TO SIZE R,R/M ; + +: ARP ( ADDR OP -- ADDR' ) + .S" ARPL " DROP + 1 TO SIZE + TRUE TO 16-BIT-DATA + R,R/M + ; + +: MLI ( ADDR OP -- ADDR' ) + 1 TO SIZE + .S" IMUL " 0x69 = + IF R,R/M IMM16/32 + ELSE R,R/M IMM8 + THEN ; + +\ -------------------- JUMPS AND CALLS -------------------- + +0 VALUE MAX_REFERENCE + +: >MAX_R +\ DUP HERE + DUP MAX_REFERENCE UMAX TO MAX_REFERENCE ; + +: REL8 ( ADDR OP -- ADDR' ) + COUNT SEXT OVER + >MAX_R H.>S ; + + +: REL16/32 ( ADDR OP -- ADDR' ) + 16-BIT-ADDR + IF W@+ + ELSE @+ + THEN OVER + BASE-ADDR - >MAX_R SHOW-NAME ; + +: JSR ( ADDR OP -- ADDR' ) + MAX_REFERENCE >R + .S" CALL " DROP REL16/32 + R> TO MAX_REFERENCE ; + +: JMP ( ADDR OP -- ADDR' ) + .S" JMP " 2 AND IF REL8 ELSE REL16/32 THEN ; + +: .JXX ( ADDR OP -- ADDR' ) + .S" J" TTTN 4 SSPACES ; + +: BRA ( ADDR OP -- ADDR' ) + .JXX REL8 ; + +: LUP ( ADDR OP -- ADDR' ) + 3 AND S" LOOPNZLOOPZ LOOP JECXZ " 6 SS. 1 SSPACES REL8 ; + +: LBR ( ADDR OP -- ADDR' ) + .JXX REL16/32 ; + +: RTN ( ADDR OP -- ADDR' ) + .S" RET NEAR " 1 AND 0= + IF W@+ H.>S + THEN ; + +: RTF ( ADDR OP -- ADDR' ) + .S" RET FAR " 1 AND 0= + IF W@+ H.>S + THEN ; + +: ENT ( ADDR OP -- ADDR' ) + .S" ENTER " W@+ . ., COUNT H.>S ; + +: CIS ( ADDR OP -- ADDR' ) + 0x9A = + IF .S" CALL " + ELSE .S" JMP " + THEN + 16-BIT-DATA + IF .S" PTR16:16 " + ELSE .S" PTR16:32 " + THEN + COUNT MOD-R/M ; + +: NT3 ( ADDR OP -- ADDR' ) + DROP .S" INT 3 " + ; + +: INT ( ADDR OP -- ADDR' ) + DROP .S" INT " + COUNT H.>S ; + +INH LEV LEAVE +INH IRT IRET +INH NTO INTO + +\ -------------------- STRING OPS -------------------- + +: STR INH DOES> COUNT >S 1 AND IF .S" D" ELSE .S" B" THEN ; + +STR MVS MOVS +STR CPS CMPS +STR STS STOS +STR LDS LODS +STR SCS SCAS + +\ -------------------- EXCHANGE -------------------- + +: XGA ( ADDR OP -- ADDR' ) + .S" XCHG EAX, " REG16/32 ; + +\ : XCH ( ADDR OP -- ADDR' ) +\ .S" XCHG " DROP R,R/M ; + + +\ -------------------- SHIFTS & ROTATES -------------------- + +: .SHIFT ( N -- ) + 7 AND S" ROLRORRCLRCRSHLSHRXXXSAR" 3 SS. 4 SSPACES ; + +: SHF ( ADDR OP -- ADDR' ) + >R COUNT + DUP 3 RSHIFT .SHIFT + MOD-R/M ., + R> 0xD2 AND + CASE + 0xC0 OF COUNT H.>S ENDOF + 0xD0 OF 1 H.>S ENDOF + 0xD2 OF 1 REG8 ENDOF + ENDCASE ; + +\ -------------------- EXTENDED OPCODES -------------------- + +: WF1 ( ADDR -- ADDR' ) + 1+ COUNT DUP + 0x0C0 < + IF DUP + 3 RSHIFT 7 AND + CASE 6 OF .S" FSTENV " MOD-R/M ENDOF + 7 OF .S" FSTCW WORD " MOD-R/M ENDOF + 2DROP 2 - DUP .S" FWAIT " + ENDCASE + ELSE DROP 2 - .S" FWAIT " + THEN ; + +: WF2 ( ADDR -- ADDR' ) + 1+ COUNT + CASE 0xE2 OF .S" FCLEX " ENDOF + 0xE3 OF .S" FINIT " ENDOF + SWAP 2 - SWAP .S" FWAIT " + ENDCASE ; + +: WF3 ( ADDR -- ADDR' ) + 1+ COUNT DUP 3 RSHIFT 7 AND + CASE 6 OF .S" FSAVE " MOD-R/M ENDOF + 7 OF .S" FSTSW WORD " MOD-R/M ENDOF + 2DROP 2 - DUP .S" FWAIT " + ENDCASE ; + +: WF4 ( ADDR -- ADDR' ) + 1+ COUNT 0xE0 = + IF .S" FSTSW AX " + ELSE 2 - .S" FWAIT " + THEN ; + +: FWAITOPS ( ADDR OP -- ADDR' ) + CASE 0xD9 OF WF1 ENDOF + 0xDB OF WF2 ENDOF + 0xDD OF WF3 ENDOF + 0xDF OF WF4 ENDOF + .S" FWAIT " + ENDCASE ; + +: W8F ( ADDR OP -- ADDR' ) + DROP DUP C@ DUP 0xF8 AND 0xD8 = + IF FWAITOPS + ELSE DROP .S" WAIT " + THEN ; + +: FALU1 ( XOPCODE -- ) + 3 RSHIFT 7 AND + S" FADD FMUL FCOM FCOMPFSUB FSUBRFDIV FDIVR" + 5 SS. 2 SSPACES ; + +: FALU5 ( XOPCODE -- ) + 3 RSHIFT 7 AND + S" FADD FMUL ???? ???? FSUBRFSUB FDIVRFDIV " + 5 SS. 2 SSPACES ; + +: STI. ( OP -- ) + 7 AND .S" ST(" 1 .R>S .S" )"; + +\ : STI.ST ( OP -- ) +\ 7 AND +\ .S" ST(" 1 .R>S .S" )" .S" ST " ; + +: FD8 ( ADDR OPCODE -- ADDR' ) + DROP COUNT DUP FALU1 + DUP 0xC0 < + IF .S" FLOAT " MOD-R/M + ELSE DUP 0xF0 AND 0xD0 = + IF STI. + ELSE .S" ST , " STI. + THEN + THEN ; + +: FDC ( ADDR OPCODE -- ADDR' ) + DROP COUNT + DUP DUP 0xC0 < + IF FALU1 .S" DOUBLE " MOD-R/M + ELSE FALU5 STI. .S" , ST" + THEN ; + +: FNULLARY-F ( OP -- ) + 0x0F AND DUP 8 < + IF + S" F2XM1 FYL2X FPTAN FPATAN FXTRACTFPREM1 FDECSTPFINCSTP" + ELSE 8 - + S" FPREM FYL2XP1FSQRT FSINCOSFRNDINTFSCALE FSIN FCOS " + THEN + 7 SS. ; + +: FNULLARY-E ( OP -- ) + 0x0F AND DUP 8 < + IF + S" FCHS FABS ??? ??? FTST FXAM ??? ??? " + ELSE 8 - + S" FLD1 FLDL2T FLDL2E FLDPI FLDLG2 FLDLN2 FLDZ ??? " + THEN + 7 SS. ; + +: FNULLARY ( OP -- ) + DUP 0xEF > + IF FNULLARY-F EXIT + THEN + DUP 0xE0 < + IF 0xD0 = + IF .S" FNOP" + ELSE DUP ??? + THEN + EXIT + THEN + FNULLARY-E ; + + +\ : FALU2 ( OP -- ) +\ 3 RSHIFT 7 AND +\ S" FLD ??? FST FSTP FLDENV FLDCW FNSTENVFNSTCW " +\ 7 SS. ; + +: FD9 ( ADDR OP -- ADDR' ) + DROP COUNT DUP 0xC0 < + IF DUP 0x38 AND + CASE + 0x00 OF .S" FLD FLOAT " ENDOF + 0x10 OF .S" FST FLOAT " ENDOF + 0x18 OF .S" FSTP FLOAT " ENDOF + 0x20 OF .S" FLDENV " ENDOF + 0x28 OF .S" FLDCW WORD " ENDOF + 0x30 OF .S" FNSTENV " ENDOF + 0x38 OF .S" FNSTCW WORD " ENDOF + DUP ??? + ENDCASE + MOD-R/M + ELSE + DUP 0xD0 < + IF DUP 0xC8 < + IF .S" FLD " + ELSE .S" FXCH " + THEN + STI. + ELSE FNULLARY + THEN + THEN ; + +: FALU3 ( OP -- ) + 3 RSHIFT 7 AND + S" FIADD FIMUL FICOM FICOMPFISUB FISUBRFIDIV FIDIVR" + 6 SS. 1 SSPACES ; + +: FCMOVA ( OP -- ) + 3 RSHIFT 7 AND + S" FCMOVB FCMOVE FCMOVBEFCMOVU ??? ??? ??? ??? " + 7 SS. ; + +: FDA ( ADDR OP -- ) + DROP COUNT DUP 0xC0 < + IF DUP FALU3 .S" DWORD " MOD-R/M + ELSE 0xE9 = + IF .S" FUCOMPP" DROP + ELSE DUP FCMOVA STI. + THEN + THEN ; + +: FALU7 ( OP -- ) + 3 RSHIFT 7 AND + S" FADDP FMULP ??? ??? FSUBRPFSUBP FDIVRPFDIVP " + 6 SS. SSPACE ; + +: FDE ( ADDR OP -- ADDR' ) + DROP COUNT DUP 0xC0 < + IF DUP FALU3 .S" WORD " MOD-R/M + ELSE DUP 0xD9 = + IF .S" FCOMPP" DROP + ELSE DUP FALU7 STI. + THEN + THEN ; + + +: FCMOVB ( OP -- ) + 3 RSHIFT 7 AND + S" FCMOVNB FCMOVNE FCMOVNBEFCMOVNU ??? FUCOMI FCOMI ??? " + 8 SS. ; + +: FDB ( ADDR OP -- ADDR' ) + DROP COUNT DUP 0xC0 < + IF DUP 0x38 AND + CASE 0x00 OF .S" FILD DWORD " ENDOF + 0x10 OF .S" FIST DWORD " ENDOF + 0x18 OF .S" FISTP DWORD " ENDOF + 0x28 OF .S" FLD EXTENDED " ENDOF + 0x38 OF .S" FSTP EXTENDED " ENDOF + DUP ??? + ENDCASE + MOD-R/M + ELSE + CASE 0xE2 OF .S" FNCLEX" ENDOF + 0xE3 OF .S" FNINIT" ENDOF + DUP DUP FCMOVB STI. + ENDCASE + THEN ; + +: FALU6 ( OP -- ) + 3 RSHIFT 7 AND + S" FFREE ??? FST FSTP FUCOM FUCOMP??? ??? " + 6 SS. SSPACE ; + +: FDD ( ADDR OP -- ADDR' ) + DROP COUNT DUP 0xC0 < + IF DUP 0x38 AND + CASE 0x00 OF .S" FLD DOUBLE " ENDOF + 0x10 OF .S" FST DOUBLE " ENDOF + 0x18 OF .S" FSTP DOUBLE " ENDOF + 0x20 OF .S" FRSTOR " ENDOF + 0x30 OF .S" FNSAVE " ENDOF + 0x38 OF .S" FNSTSW WORD " ENDOF + DUP ??? + ENDCASE + MOD-R/M + ELSE DUP FALU6 STI. + THEN ; + +: FDF ( ADDR OP -- ADDR' ) + DROP COUNT DUP 0xC0 < + IF DUP 0x38 AND + CASE 0x00 OF .S" FILD WORD " ENDOF + 0x10 OF .S" FIST WORD " ENDOF + 0x18 OF .S" FISTP WORD " ENDOF + 0x20 OF .S" FBLD TBYTE " ENDOF + 0x28 OF .S" FILD QWORD " ENDOF + 0x30 OF .S" FBSTP TBYTE " ENDOF + 0x38 OF .S" FISTP QWORD " ENDOF + DUP ??? + ENDCASE + MOD-R/M + ELSE DUP 0xE0 = + IF .S" FNSTSW AX " DROP + ELSE DUP 0x38 AND + CASE 0x28 OF .S" FUCOMIP " STI. ENDOF + 0x30 OF .S" FCOMIP " STI. ENDOF + ??? + ENDCASE + THEN + THEN ; + +: GP6 ( ADDR OP -- ADDR' ) + DROP COUNT DUP 3 RSHIFT + 7 AND S" SLDTSTR LLDTLTR VERRVERW??? ???" 4 SS. 3 SSPACES + R/M16 ; + +: GP7 ( ADDR OP -- ADDR' ) + DROP COUNT DUP 3 RSHIFT + 7 AND DUP S" SGDT SIDT LGDT LIDT SMSW ??? LMSW INVLPG" 6 SS. 1 SSPACES + 4 AND 4 = + IF R/M16 + ELSE R/M16/32 + THEN ; + +: BTX. ( N -- ) + 3 RSHIFT + 3 AND S" BT BTSBTRBTC" 3 SS. 4 SSPACES ; + +: GP8 ( ADDR OP -- ADDR' ) + DROP COUNT DUP BTX. + R/M16/32 IMM8 ; + +: LAR ( ADDR OP -- ADDR' ) + .S" LAR " DROP R,R/M ; + +: LSL ( ADDR OP -- ADDR' ) + .S" LSL " DROP R,R/M ; + +: LSS ( ADDR OP -- ADDR' ) + .S" LSS " DROP R,R/M ; + +: LFS ( ADDR OP -- ADDR' ) + .S" LFS " DROP R,R/M ; + +: LGS ( ADDR OP -- ADDR' ) + .S" LGS " DROP R,R/M ; + +: BTX ( ADDR OP -- ADDR' ) + BTX. R/M,R ; + +: SLI ( ADDR OP -- ADDR' ) + .S" SHLD " DROP R/M,R IMM8 ; + +: SRI ( ADDR OP -- ADDR' ) + .S" SHRD " DROP R/M,R IMM8 ; + +: SLC ( ADDR OP -- ADDR' ) + .S" SHLD " DROP R/M,R .S" , CL" ; + +: SRC ( ADDR OP -- ADDR' ) + .S" SHRD " DROP R/M,R .S" , CL" ; + +: IML ( ADDR OP -- ADDR' ) + .S" IMUL " DROP R,R/M ; + +: CXC ( ADDR OP -- ADDR' ) + .S" CMPXCHG " 1 AND TO SIZE R/M,R ; + +: MVX ( ADDR OP -- ADDR' ) + DUP 8 AND + IF .S" MOVSX " + ELSE .S" MOVZX " + THEN + 1 AND >R + COUNT MOD/SIB R> \ SIZE BIT + IF SWAP REG32 ., \ WORD TO DWORD CASE + 3 = + IF REG16 + ELSE .S" WORD PTR " MOD-R/M + THEN + ELSE SWAP REG16/32 ., \ BYTE CASE + 3 = + IF REG8 + ELSE .S" BYTE PTR " MOD-R/M + THEN + THEN ; + +: XAD ( ADDR OP -- ADDR' ) + .S" XADD " 1 AND TO SIZE R/M,R ; + +: BSF ( ADDR OP -- ADDR' ) + .S" BSF " DROP R,R/M ; + +: BSR ( ADDR OP -- ADDR' ) + .S" BSR " DROP R,R/M ; + +: CX8 ( ADDR OP -- ADDR' ) + .S" CMPXCHG8B " DROP COUNT R/M16/32 ; + +: BSP ( ADDR OP -- ADDR' ) + .S" BSWAP " REG32 ; + +\ : 0F. ( ADDR OP -- ADDR' ) +\ DROP COUNT +\ CASE +\ 0x00 OF GP6 ENDOF +\ 0x01 OF GP7 ENDOF +\ 0x02 OF .S" LAR " 1 TO SIZE R,R/M ENDOF +\ 0x03 OF .S" LSL " 1 TO SIZE R,R/M ENDOF +\ 0x06 OF .S" CLTS " ENDOF +\ 0x08 OF .S" INVD " ENDOF +\ 0x09 OF .S" WBINVD " ENDOF +\ 0x20 OF MRC ENDOF +\ 0x21 OF MRD ENDOF +\ 0x22 OF MCR ENDOF +\ 0x23 OF MDR ENDOF +\ 0x24 OF MRT ENDOF \ OBSOLETE +\ 0x26 OF MTR ENDOF \ OBSOLETE +\ 0x30 OF .S" WRMSR " ENDOF +\ 0x31 OF .S" RDTSC " ENDOF +\ 0x32 OF .S" RDMSR " ENDOF +\ 0x80 OF .S" JO " REL16/32 ENDOF +\ 0x81 OF .S" JNO " REL16/32 ENDOF +\ 0x82 OF .S" JC " REL16/32 ENDOF +\ 0x83 OF .S" JNC " REL16/32 ENDOF +\ 0x84 OF .S" JZ " REL16/32 ENDOF +\ 0x85 OF .S" JNE " REL16/32 ENDOF +\ 0x86 OF .S" JBE " REL16/32 ENDOF +\ 0x87 OF .S" JA " REL16/32 ENDOF +\ 0x88 OF .S" JS " REL16/32 ENDOF +\ 0x89 OF .S" JNS " REL16/32 ENDOF +\ 0x8A OF .S" JPE " REL16/32 ENDOF +\ 0x8B OF .S" JPO " REL16/32 ENDOF +\ 0x8C OF .S" JNGE " REL16/32 ENDOF +\ 0x8D OF .S" JGE " REL16/32 ENDOF +\ 0x8E OF .S" JNG " REL16/32 ENDOF +\ 0x8F OF .S" JG " REL16/32 ENDOF +\ 0x90 OF .S" SETO BYTE " R/M8 ENDOF +\ 0x91 OF .S" SETNO BYTE " R/M8 ENDOF +\ 0x92 OF .S" SETC BYTE " R/M8 ENDOF +\ 0x93 OF .S" SETNC BYTE " R/M8 ENDOF +\ 0x94 OF .S" SETZ BYTE " R/M8 ENDOF +\ 0x95 OF .S" SETNZ BYTE " R/M8 ENDOF +\ 0x96 OF .S" SETBE BYTE " R/M8 ENDOF +\ 0x97 OF .S" SETA BYTE " R/M8 ENDOF +\ 0x98 OF .S" SETS BYTE " R/M8 ENDOF +\ 0x99 OF .S" SETNS BYTE " R/M8 ENDOF +\ 0x9A OF .S" SETP BYTE " R/M8 ENDOF +\ 0x9B OF .S" SETNP BYTE " R/M8 ENDOF +\ 0x9C OF .S" SETL BYTE " R/M8 ENDOF +\ 0x9D OF .S" SETGE BYTE " R/M8 ENDOF +\ 0x9E OF .S" SETLE BYTE " R/M8 ENDOF +\ 0x9F OF .S" SETG BYTE " R/M8 ENDOF +\ 0xA0 OF .S" PUSH FS " ENDOF +\ 0xA1 OF .S" POP FS " ENDOF +\ 0xA2 OF .S" CPUID " ENDOF +\ 0xA3 OF .S" BT " 1 TO SIZE R/M,R ENDOF +\ 0xA4 OF .S" SHLD " R/M,R IMM8 ENDOF +\ 0xA5 OF .S" SHLD " R/M,R .S" , CL" ENDOF +\ 0xA8 OF .S" PUSH GS " ENDOF +\ 0xA9 OF .S" POP GS " ENDOF +\ 0xAA OF .S" RSM " ENDOF +\ 0xAB OF .S" BTS " 1 TO SIZE R/M,R ENDOF +\ 0xAC OF .S" SHRD " R/M,R IMM8 ENDOF +\ 0xAD OF .S" SHRD " R/M,R .S" , CL" ENDOF +\ 0xAF OF .S" IMUL " R,R/M ENDOF +\ 0xB0 OF .S" CMPXCH " 0 TO SIZE R/M,R ENDOF +\ 0xB1 OF .S" CMPXCH " 1 TO SIZE R/M,R ENDOF +\ 0xB2 OF .S" LSS " 1 TO SIZE R,R/M ENDOF +\ 0xB3 OF .S" BTR " 1 TO SIZE R/M,R ENDOF +\ 0xB4 OF .S" LFS " 1 TO SIZE R,R/M ENDOF +\ 0xB5 OF .S" LGS " 1 TO SIZE R,R/M ENDOF +\ 0xB6 OF .S" MOVZX " 0 TO SIZE R,R/M ENDOF +\ 0xB7 OF .S" MOVZX " 1 TO SIZE R,R/M ENDOF +\ 0xBA OF GP8 ENDOF +\ 0xBB OF .S" BTC " 1 TO SIZE R/M,R ENDOF +\ 0xBC OF .S" BSF " 1 TO SIZE R,R/M ENDOF +\ 0xBD OF .S" BSR " 1 TO SIZE R,R/M ENDOF +\ 0xBE OF .S" MOVSX " 0 TO SIZE R,R/M ENDOF +\ 0xBF OF .S" MOVSX " 1 TO SIZE R,R/M ENDOF +\ 0xC0 OF .S" XADD " 0 TO SIZE R/M,R ENDOF +\ 0xC1 OF .S" XADD " 1 TO SIZE R/M,R ENDOF +\ 0xC7 OF .S" CMPXCHG8B " R/M16/32 ENDOF +\ 0xC8 OF .S" BSWAP EAX " ENDOF +\ 0xC9 OF .S" BSWAP ECX " ENDOF +\ 0xCA OF .S" BSWAP EDX " ENDOF +\ 0xCB OF .S" BSWAP EBX " ENDOF +\ 0xCC OF .S" BSWAP ESP " ENDOF +\ 0xCD OF .S" BSWAP EBP " ENDOF +\ 0xCE OF .S" BSWAP ESI " ENDOF +\ 0xCF OF .S" BSWAP EDI " ENDOF +\ ( ELSE ) DUP ??? +\ ENDCASE +\ ; + +: F6. ( ADDR OP -- ADDR' ) +\ ?? + >R COUNT + DUP 3 RSHIFT 7 AND DUP>R S" TESTXXXXNOT NEG MUL IMULDIV IDIV" 4 SS. 3 SSPACES + MOD-R/M + R> 0= IF + R@ 1 AND IF IMM16/32 + ELSE IMM8 + THEN + THEN + R> DROP ; + +: FE. ( ADDR OP -- ADDR' ) + DROP COUNT + DUP 3 RSHIFT 7 AND + CASE + 0 OF .S" INC " ENDOF + 1 OF .S" DEC " ENDOF + ??? + ENDCASE R/M8 ; + +: FF. ( ADDR OP -- ADDR' ) + DROP COUNT + DUP 3 RSHIFT 7 AND + CASE + 0 OF .S" INC " ENDOF + 1 OF .S" DEC " ENDOF + 2 OF .S" CALL " ENDOF + 3 OF .S" CALL FAR " ENDOF + 4 OF .S" JMP " ENDOF + 5 OF .S" JMP FAR " ENDOF + 6 OF .S" PUSH " ENDOF + ??? + ENDCASE R/M16/32 ; + + +\ --------------------- CONDITIONAL MOVE --------------- + +: SET ( ADR OP -- ) + .S" SET" + TTTN 2 SSPACES + COUNT R/M8 ; + +: CMV ( ADR OP -- ) + .S" CMOV" + TTTN 1 SSPACES + COUNT R,R/M ; + +\ --------------------- MMX OPERATIONS ----------------- + +: MMX-SIZE ( OP -- ) + 3 AND S" BWDQ" 1 SS. ; + +: UPL ( ADR OP -- ADR' ) + 3 AND S" PUNPCKLBWPUNPCKLWDPUNPCKLDQ" 9 SS. R,R/M ; + +: UPH ( ADR OP -- ADR' ) + 3 AND S" PUNPCKHBWPUNPCKHWDPUNPCKHDQ" 9 SS. R,R/M ; + +: CGT ( ADR OP -- ADR' ) + .S" PCMPGT" MMX-SIZE R,R/M ; + +: CEQ ( ADR OP -- ADR' ) + .S" PCMPEQ" MMX-SIZE R,R/M ; + +: PSH. ( OP -- ) + 0x30 AND + CASE + 0x10 OF .S" PSRL" ENDOF + 0x20 OF .S" PSRA" ENDOF + 0x30 OF .S" PSLL" ENDOF + ENDCASE ; + +: GPA ( ADR OP -- ADR' ) + >R COUNT DUP PSH. R> MMX-SIZE 2 SSPACES MREG IMM8 ; + +: PUW ( ADR OP -- ADR' ) + .S" PACKUSDW " DROP R,R/M ; + +: PSB ( ADR OP -- ADR' ) + .S" PACKSSWB " DROP R,R/M ; + +: PSW ( ADR OP -- ADR' ) + .S" PACKSSDW " DROP R,R/M ; + +: MPD ( ADR OP -- ADR' ) + .S" MOVD " DROP COUNT MOD/SIB + SWAP MREG ., 3 = + IF REG32 + ELSE MOD-R/M + THEN ; + +: MDP ( ADR OP -- ADR' ) + .S" MOVD " DROP COUNT MOD/SIB + 3 = + IF SWAP REG32 + ELSE SWAP MOD-R/M + THEN ., MREG ; + +: MPQ ( ADR OP -- ADR' ) + .S" MOVQ " DROP R,R/M ; + +: MQP ( ADR OP -- ADR' ) + .S" MOVQ " DROP R/M,R ; + +: SHX ( ADR OP -- ADR' ) + DUP PSH. MMX-SIZE 2 SSPACES R,R/M ; + +: MLL ( ADR OP -- ADR' ) + .S" PMULLW " DROP R,R/M ; + +: MLH ( ADR OP -- ADR' ) + .S" PMULHW " DROP R,R/M ; + +: MAD ( ADR OP -- ADR' ) + .S" PMADDWD " DROP R,R/M ; + +: SUS ( ADR OP -- ADR' ) + .S" PSUBUS" MMX-SIZE R,R/M ; + +: SBS ( ADR OP -- ADR' ) + .S" PSUBS" MMX-SIZE SSPACE R,R/M ; + +: SUB ( ADR OP -- ADR' ) + .S" PSUB" MMX-SIZE 2 SSPACES R,R/M ; + +: AUS ( ADR OP -- ADR' ) + .S" PADDUS" MMX-SIZE R,R/M ; + +: ADS ( ADR OP -- ADR' ) + .S" PADDS" MMX-SIZE SSPACE R,R/M ; + +: ADD ( ADR OP -- ADR' ) + .S" PADD" MMX-SIZE 2 SSPACES R,R/M ; + +: PAD ( ADR OP -- ADR' ) + .S" PAND " DROP R,R/M ; + +: POR ( ADR OP -- ADR' ) + .S" POR " DROP R,R/M ; + +: PAN ( ADR OP -- ADR' ) + .S" PANDN " DROP R,R/M ; + +: PXR ( ADR OP -- ADR' ) + .S" PXOR " DROP R,R/M ; + + +\ -------------------- OPCODE TABLE -------------------- + +: OPS 0x10 0 DO ' , LOOP ; + + +CREATE OP-TABLE2 + +\ 0 1 2 3 4 5 6 7 8 9 A B C D E F + +OPS GP6 GP7 LAR LSL ??? ??? CLT ??? INV WIV ??? UD2 ??? ??? ??? ??? \ 0 +OPS ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? \ 1 +OPS MRC MRD MCR MDR MRT ??? MTR ??? ??? ??? ??? ??? ??? ??? ??? ??? \ 2 +OPS WMR RTC RMR RPC ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? \ 3 + +OPS CMV CMV CMV CMV CMV CMV CMV CMV CMV CMV CMV CMV CMV CMV CMV CMV \ 4 +OPS ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? \ 5 +OPS UPL UPL UPL PUW CGT CGT CGT PSB UPH UPH UPH PSW ??? ??? MPD MPQ \ 6 +OPS ??? GPA GPA GPA CEQ CEQ CEQ EMS ??? ??? ??? ??? ??? ??? MDP MQP \ 7 + +OPS LBR LBR LBR LBR LBR LBR LBR LBR LBR LBR LBR LBR LBR LBR LBR LBR \ 8 +OPS SET SET SET SET SET SET SET SET SET SET SET SET SET SET SET SET \ 9 +OPS PSS PPS CPU BTX SLI SLC ??? ??? PSS PPS RSM BTX SRI SRC ??? IML \ A +OPS CXC CXC LSS BTX LFS LGS MVX MVX ??? UD1 GP8 BTX BSF BSR MVX MVX \ B + +OPS XAD XAD ??? ??? ??? ??? ??? CX8 BSP BSP BSP BSP BSP BSP BSP BSP \ C +OPS ??? SHX SHX SHX ??? MLL ??? ??? SUS SUS ??? PAD AUS AUS ??? PAN \ D +OPS ??? SHX SHX ??? ??? MLH ??? ??? SBS SBS ??? POR ADS ADS ??? PXR \ E +OPS ??? ??? SHX SHX ??? MAD ??? ??? SUB SUB SUB ??? ADD ADD ADD ??? \ F + +\ 0 1 2 3 4 5 6 7 8 9 A B C D E F + +: 0F. ( ADR CODE -- ) + DROP COUNT DUP + DUP 0x70 AND 0x50 0x80 WITHIN TO MMX-REG + CELLS OP-TABLE2 + @ EXECUTE + 0 TO MMX-REG ; + + +CREATE OP-TABLE + +\ 0 1 2 3 4 5 6 7 8 9 A B C D E F + +OPS ALU ALU ALU ALU ALA ALA PSS PPS ALU ALU ALU ALU ALA ALA PSS 0F. \ 0 +OPS ALU ALU ALU ALU ALA ALA PSS PPS ALU ALU ALU ALU ALA ALA PSS PPS \ 1 +OPS ALU ALU ALU ALU ALA ALA ES: DAA ALU ALU ALU ALU ALA ALA CS: DAS \ 2 +OPS ALU ALU ALU ALU ALA ALA SS: AAA ALU ALU ALU ALU ALA ALA DS: AAS \ 3 + +OPS INC INC INC INC INC INC INC INC DEC DEC DEC DEC DEC DEC DEC DEC \ 4 +OPS PSH PSH PSH PSH PSH PSH PSH PSH POP POP POP POP POP POP POP POP \ 5 +OPS PSA PPA BND ARP FS: GS: D16 A16 PSI MLI PSI MLI INB ISD OSB OSD \ 6 +OPS BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA \ 7 + +OPS ALI ALI ??? ALI TXB TXB TXB TXB MOV MOV MOV MOV MRS LEA MSR 8F. \ 8 +OPS XGA XGA XGA XGA XGA XGA XGA XGA CBW CDQ CIS W8F PSF PPF SAH LAH \ 9 +OPS MV1 MV1 MV2 MV2 MVS MVS CPS CPS TST TST STS STS LDS LDS SCS SCS \ A +OPS MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI \ B + +OPS SHF SHF RTN RTN LXS LXS MVI MVI ENT LEV RTF RTF NT3 INT NTO IRT \ C +OPS SHF SHF SHF SHF AAM AAD ??? XLT FD8 FD9 FDA FDB FDC FDD FDE FDF \ D +OPS LUP LUP LUP LUP INP INP OTP OTP JSR JMP CIS JMP IND IND OTD OTD \ E +OPS LOK ??? RPZ REP HLT CMC F6. F6. CLC STC CLI STI CLD STD FE. FF. \ F + +\ 0 1 2 3 4 5 6 7 8 9 A B C D E F + +: DIS-OP ( ADR -- ADR' ) + 0>S + FALSE TO PREFIX-OP \ SMUB + COUNT + DUP 1 AND TO SIZE + DUP CELLS OP-TABLE + @ EXECUTE + PREFIX-OP 0= + IF DEFAULT-16BIT? 0= + IF FALSE TO 16-BIT-DATA + FALSE TO 16-BIT-ADDR + ELSE TRUE TO 16-BIT-DATA + TRUE TO 16-BIT-ADDR + THEN + THEN ; + + +0 VALUE NEXT-INST + +: X". ( ADDR -- ADDR' ) + CR DUP BASE-ADDR - 6 H.R SPACE + ." A; " DUP COUNT DUP . ." C, " 1+ OVER + SWAP + DO I C@ . ." C, " LOOP + COUNT + 1+ ; + + +: INST ( ADR -- ADR' ) + DUP TO NEXT-INST + COLS 0x29 < + IF DIS-OP + S-BUF COUNT TYPE + ELSE DUP DIS-OP + OVER BASE-ADDR - 6 H.R SPACE + DUP ROT + 2DUP - DUP>R 0x10 U> ABORT" DECOMPILER ERROR" + DO I C@ 2 H.N LOOP + R> 5 < IF 9 EMIT THEN + 9 EMIT S-BUF COUNT TYPE + THEN NEXT-INST C@ 0xE8 = + IF NEXT-INST 1+ @+ SWAP + + CASE + CLITERAL-CODE OF X". ENDOF + SLITERAL-CODE OF X". ENDOF + ENDCASE + THEN ; + + +: DIS-DB CR .S" DB " COUNT H.>S ; +: DIS-DW CR .S" DW " W@+ H.>S ; +: DIS-DD CR .S" DD " @+ H.>S ; +: DIS-DS CR .S" STRING " 0x22 EMIT>S COUNT 2DUP >S + 0x22 EMIT>S ; + + +: DIS ( ADR -- ) + BEGIN + DUP + CR INST + KEY UPC DUP 0x1B = OVER [CHAR] Q = OR INVERT + WHILE + CASE + [CHAR] B OF DROP DIS-DB ENDOF + [CHAR] W OF DROP DIS-DW ENDOF + [CHAR] D OF DROP DIS-DD ENDOF + [CHAR] S OF DROP DIS-DS ENDOF + ROT DROP + ENDCASE + + REPEAT 2DROP DROP ; + +\ CREATE STOPCODE 8 C, \ COUNT OF LENGTH +\ 0xAD C, 0x8B C, 0x0C C, 0x38 C, +\ 0x03 C, 0xCF C, 0xFF C, 0xE1 C, + + +0 VALUE SHOW-NEXT? \ DEFAULT TO NOT SHOWING NEXT INSTRUCTIONS + + +DECIMAL + + +FORTH DEFINITIONS + +TRUE VALUE SEE-KET-FL + +VARIABLE COUNT-LINE +: REST ( ADR -- ) + 20 COUNT-LINE ! + 0 TO MAX_REFERENCE + DUP TO NEXT-INST + BEGIN + CR + NEXT-INST C@ + DUP 0xC3 <> + SWAP 0xE9 <> AND \ NEXT, BEHIND US? + NEXT-INST MAX_REFERENCE U< OR + OVER HERE U< AND + WHILE INST + COUNT-LINE @ 1- DUP 0= SEE-KET-FL AND + IF 9 EMIT ." \ PRESS ENTER | Q | ANY" KEY + DUP 0xD = IF 2DROP 1 ELSE + [CHAR] Q = IF ABORT THEN + DROP 20 THEN + THEN + COUNT-LINE ! + REPEAT DROP ." END-CODE " + ; + +: SEE ( -- ) + ' REST ; + +ONLY FORTH ALSO DEFINITIONS + diff --git a/programs/develop/SPForth/devel/~mak/acceptgo.f b/programs/develop/SPForth/devel/~mak/acceptgo.f new file mode 100644 index 0000000000..a346d46872 --- /dev/null +++ b/programs/develop/SPForth/devel/~mak/acceptgo.f @@ -0,0 +1,24 @@ +REQUIRE ACCEPTHistory ~micro/lib/key/accept.f + +: REFILL ( -- flag ) \ 94 FILE EXT + SOURCE-ID IF + REFILL + ELSE + H-STDIN [ H-STDIN ] LITERAL <> IF + REFILL + ELSE + TIB 79 ACCEPT #TIB ! >IN 0!
 -1 EXIT
+    THEN
+  THEN
+;
+
+: MAIN2 ( -- )
+  BEGIN
+    REFILL
+  WHILE
+    INTERPRET OK
+  REPEAT BYE
+;
+
+' MAIN2 TO 
+ diff --git a/programs/develop/SPForth/devel/~mak/asm/ASM.FRT b/programs/develop/SPForth/devel/~mak/asm/ASM.FRT new file mode 100644 index 0000000000..b891aaf89b --- /dev/null +++ b/programs/develop/SPForth/devel/~mak/asm/ASM.FRT @@ -0,0 +1,1502 @@ +( Из SMAL32 + Модифицированно Максимовым М.О. + email:mak@rtc.ru + http://forth.spb.su:8888 + т д {812}705-92-03 + т р {812}552-47-64 +) +REQUIRE [IF] ~MAK\CompIF.f +REQUIRE PLACE ~MAK\PLACE.f +REQUIRE CASE lib\ext\case.f + +VOCABULARY S_ASSEM +C" HIDDEN" FIND NIP 0= +[IF] VOCABULARY HIDDEN +[THEN] + +ALSO HIDDEN DEFINITIONS + +C" FLOAD" FIND NIP +[IF] FLOAD asmbase.f +[ELSE] REQUIRE S= ~mak\asm\asmbase.f +[THEN] +: 1Op1 ( name ( byte --> ) + ( --> ) + CREATE C, DOES> C@ C, +; + +4 VALUE *DefDatasz +\ 4 VALUE *DefDatasz + +: 1Op1W ( name ( byte --> ) + ( --> ) + CREATE C, DOES> C@ C, *DefDatasz 4 = IF 0x66 C, THEN +; + +: 1Op1D ( name ( byte --> ) + ( --> ) + CREATE C, DOES> C@ C, *DefDatasz 2 = IF 0x66 C, THEN +; + +: 1Op2 ( name ( word --> ) + ( --> ) + CREATE W, DOES> W@ W, +; +: REF-ERROR IF 87 THROW THEN ; +: #OPER-ERROR SWAP IF H. 94 THROW THEN DROP ; + +0x2E 1Op1 CS: +0x3E 1Op1 DS: +0x26 1Op1 ES: +0x64 1Op1 FS: +0x65 1Op1 GS: +0x36 1Op1 SS: +: IFIND ( c-addr --> xt -1 | c-addr 0 ) + DUP COUNT CONTEXT @ SEARCH-WORDLIST + IF NIP -1 + ELSE 0 + THEN ; + +0 VALUE *OpcSize +0 VALUE *OpCode +0 VALUE *Mod +0 VALUE *Reg +0 VALUE *R/M +0 VALUE *Scale +0 VALUE *Index +0 VALUE *Base +0 VALUE *OpSize +0 VALUE *ImSize +0 VALUE *AdSize +0 VALUE *Imm +0 VALUE *OfSize +0 VALUE *Offset +0 VALUE *SegReg +0 VALUE *OpArray +0 VALUE *OfRel +0 VALUE *OpRel +CREATE *OffName 256 ALLOT +CREATE *ImmName 256 ALLOT +CREATE *GenName 256 ALLOT + +: (OthSz) ( n1 --> n2 ) 6 XOR ; + +: *OpSize>DEF *OpSize 4 = IF *DefDatasz TO *OpSize THEN ; + +: (Seg) ( --> ) + *SegReg CASE + 0 OF ES: ENDOF + 1 OF CS: ENDOF + 2 OF SS: ENDOF + 3 OF DS: ENDOF + 4 OF FS: ENDOF + 5 OF GS: ENDOF + ENDCASE +; + +: CompileCommand ( --> ) + *OpcSize IF + *AdSize *DefDatasz (OthSz) = IF 0x67 C, THEN + *OpSize *DefDatasz (OthSz) = IF 0x66 C, THEN + *SegReg 0< IFNOT (Seg) THEN + *OpCode HERE ! *OpcSize ALLOT + *Mod 0< IFNOT *Mod 3 AND 0x40 * *Reg 7 AND 8 * *R/M 7 AND OR OR C, THEN + *Scale 0< *Mod 0< OR IFNOT + *Scale 3 AND 0x40 * *Index 7 AND 8 * *Base 7 AND OR OR C, + THEN + *OfRel IF + *OfSize *DefDatasz <> IF 0x54 THROW THEN + *OffName C@ IFNOT 1 *OffName 1+ C! THEN + *OffName 1+ C@ IF *OffName HERE 2 AddStrObject + ELSE + *OffName C@ 1- *OffName 1+ C! + *OffName 1+ HERE 5 AddStrObject + THEN + THEN + *Offset HERE ! *OfSize ALLOT + *OpRel IF + *ImSize *DefDatasz <> IF 0x55 THROW THEN + *ImmName C@ IFNOT 1 *ImmName 1+ C! THEN + *ImmName 1+ C@ IF *ImmName HERE 2 AddStrObject + ELSE + *ImmName C@ 1- *ImmName 1+ C! + *ImmName 1+ HERE 5 AddStrObject + THEN + THEN + *Imm HERE ! *ImSize ALLOT + THEN +; +: InitCommand ( --> ) + 0 TO *OpcSize 0 TO *AdSize 0 TO *OpSize 0 TO *ImSize 0 TO *OfSize + 0 TO *OfRel 0 TO *OpRel 0 TO *Offset 0 TO *Imm -1 TO *SegReg -1 TO *Mod + -1 TO *Scale -1 TO *Base -1 TO *Index *OffName 0! *ImmName 0! *GenName 0! +; + +: GetOp ( --> c-addr|char|n type ) + (GetOp) CASE + 1 OF + 1+ C@ DUP [CHAR] ; = IF SOURCE >IN ! 2DROP NullString 0 ELSE 1 THEN + ENDOF + 2 OF + BASE @ >R + DUP C@ OVER + C@ CASE + [CHAR] H OF 16 BASE ! DUP 1-! ENDOF + [CHAR] B OF 2 BASE ! DUP 1-! ENDOF + [CHAR] O OF 8 BASE ! DUP 1-! ENDOF + [CHAR] D OF 10 BASE ! DUP 1-! ENDOF + ENDCASE + VAL 0= IF 0x61 THROW THEN DROP R> BASE ! 2 + ENDOF + 4 OF COUNT ConvertString OVER 1- C! 1- 4 ENDOF + 5 OF COUNT ConvertString OVER 1- C! 1- 5 ENDOF +\ HEX + DUP +\ [ HERE DROP ] + ENDCASE +; + +: SCopy ( c-addr1 c-addr2 --> ) + OVER C@ 1+ CMOVE +; + +: ?Reg8 ( --> n true | false ) + IN>R GetOp 3 = IF + C" AL" S= 0 ?S= + C" CL" S= 1 ?S= + C" DL" S= 2 ?S= + C" BL" S= 3 ?S= + C" AH" S= 4 ?S= + C" CH" S= 5 ?S= + C" DH" S= 6 ?S= + C" BH" S= 7 ?S= + THEN + DROP FALSE R>IN +; +: ?Reg16 ( --> n true | FALSE ) + IN>R GetOp 3 = IF + C" AX" S= 0 ?S= + C" CX" S= 1 ?S= + C" DX" S= 2 ?S= + C" BX" S= 3 ?S= + C" SP" S= 4 ?S= + C" BP" S= 5 ?S= + C" SI" S= 6 ?S= + C" DI" S= 7 ?S= + THEN + DROP FALSE R>IN +; +: ?Reg32 ( --> n true | FALSE ) + IN>R GetOp 3 = IF + C" EAX" S= 0 ?S= + C" ECX" S= 1 ?S= + C" EDX" S= 2 ?S= + C" EBX" S= 3 ?S= + C" ESP" S= 4 ?S= + C" EBP" S= 5 ?S= + C" ESI" S= 6 ?S= + C" EDI" S= 7 ?S= + THEN + DROP FALSE R>IN +; +: ?SegReg ( --> n true | FALSE ) + IN>R GetOp 3 = IF + C" ES" S= 0 ?S= + C" CS" S= 1 ?S= + C" SS" S= 2 ?S= + C" DS" S= 3 ?S= + C" FS" S= 4 ?S= + C" GS" S= 5 ?S= + THEN + DROP FALSE R>IN +; +: SEG ( --> ) + ?SegReg 0= IF 104 THROW THEN (Seg) +; +: (?Ptr_) ( --> n true | FALSE ) + IN>R GetOp 3 = IF + C" DWORD" S= 4 ?S= + C" BYTE" S= 1 ?S= + C" WORD" S= 2 ?S= + THEN + DROP FALSE R>IN +; + +' (?Ptr_) ->VECT (?Ptr) +: ?Ptr ( --> flag ) + (?Ptr) IF + *OpSize IF *OpSize <> IF 0x50 THROW THEN ELSE TO *OpSize THEN + IN>R GetOp 3 = IF + C" PTR" S= IF RDROP TRUE EXIT ELSE DROP THEN + ELSE DROP THEN + R>IN TRUE + ELSE FALSE THEN +; +: ?FWord ( ? --> ? ) + IN>R GetOp 3 = IF + C" FWORD" S= IF + RDROP IN>R GetOp 3 = IF + C" PTR" S= IF RDROP ELSE R>IN DROP THEN + ELSE R>IN DROP THEN TRUE EXIT + ELSE DROP FALSE THEN + ELSE DROP FALSE THEN R>IN +; +: ?Reg ( --> flag ) + ?Reg32 IF + *OpSize 1 2 BETWEEN IF 0x50 THROW THEN 4 TO *OpSize TO *Reg TRUE + ELSE + ?Reg8 IF + *OpSize 2 4 BETWEEN IF 0x50 THROW THEN 1 TO *OpSize TO *Reg TRUE + ELSE + ?Reg16 IF + *OpSize 4 = *OpSize 1 = OR IF 0x50 THROW THEN 2 TO *OpSize TO *Reg TRUE + ELSE FALSE THEN + THEN + THEN +; +: Comma ( --> ) + GetOp 1 = IF [CHAR] , = ?EXIT THEN 0x51 THROW +; +: ?Colon ( --> flag ) + IN>R GetOp 1 = IF [CHAR] : = ELSE DROP FALSE THEN + DUP IF RDROP ELSE R>IN THEN +; +: ?Bracket[ ( --> flag ) + IN>R GetOp 1 = IF [CHAR] [ = IF RDROP TRUE EXIT THEN + ELSE DROP THEN R>IN FALSE +; +: (?Label) ( --> addr|0 TRUE | FALSE ) + IN>R GetOp DUP 3 = IF + DROP DUP 1 FindStrObject IF RDROP NIP TRUE + ELSE + RDROP \ DUP FIND IF +\ SWAP >R DUP >Name Off_Attr + @ 0x1000000 AND IF \ IF PUBLIC +\ RDROP EXECUTE TRUE +\ ELSE +\ *GenName C@ REF-ERROR R> *GenName SCopy DROP 0 TRUE +\ THEN +\ ELSE + ( DROP ) *GenName C@ REF-ERROR *GenName SCopy 0 TRUE +\ THEN + THEN + ELSE + DUP 1 = IF + DROP [CHAR] $ = IF RDROP HERE TRUE + ELSE R>IN FALSE THEN + ELSE + 4 = IF + *GenName C@ REF-ERROR + *GenName 1+ SCopy *GenName 1+ C@ 1+ *GenName W! RDROP 0 TRUE + ELSE DROP R>IN FALSE THEN + THEN + THEN +; +: 'XFA ( --> cfa ) + GetOp 3 5 BETWEEN IF + CONTEXT @ >R PREVIOUS FIND ALSO R> CONTEXT ! + 0= IF 0x64 THROW THEN + ELSE 0x63 THROW THEN +; +: ?Label ( --> addr|0 TRUE | FALSE ) + IN>R GetOp +\ DUP 1 = +\ IF DROP [CHAR] { = +\ IF RDROP [CHAR] } PARSE EVALUATE TRUE +\ ELSE R>IN FALSE +\ THEN EXIT +\ ELSE + 3 = IF + C" OFFSET" S= IF RDROP (?Label) 0= IF 0x5D THROW THEN TRUE EXIT + THEN + C" CFA" S= IF RDROP 'XFA TRUE EXIT THEN + C" PFA" S= IF RDROP 'XFA >BODY TRUE EXIT THEN + C" NFA" S= IF RDROP 'XFA >NAME TRUE EXIT THEN + THEN +\ THEN + DROP R>IN (?Label) +; + +: ?Number ( --> n TRUE | FALSE ) + IN>R GetOp CASE + 2 OF TRUE RDROP ENDOF + 1 OF DUP + [CHAR] { = IF DROP [CHAR] } PARSE EVALUATE TRUE RDROP ELSE + [CHAR] - = IF GetOp 2 = IF NEGATE TRUE RDROP + ELSE DROP FALSE R>IN THEN ELSE + FALSE R>IN THEN THEN + ENDOF + 5 OF DUP C@ IF 1+ C@ ELSE DROP 0 THEN TRUE RDROP ENDOF + 3 OF 7 FindStrObject IF RDROP TRUE ELSE FALSE R>IN THEN ENDOF + 2DROP FALSE DUP R>IN + ENDCASE +; +VARIABLE *Sign +: Imm ( --> ) + *Sign 0! 0 TO *Imm 0 TO *OpRel *GenName 0! + BEGIN + ?Number IF +\ *Sign @ IF -To *Imm ELSE +To *Imm THEN + *Sign @ IF NEGATE THEN *Imm + TO *Imm + ELSE + ?Label IF + *GenName C@ IF + *ImmName C@ REF-ERROR *GenName *ImmName SCopy + *Sign @ REF-ERROR *GenName 0! + THEN +\ *Sign @ IF 1-To *OpRel -To *Imm ELSE 1+To *OpRel +To *Imm THEN + *Sign @ IF *OpRel 1- TO *OpRel NEGATE + ELSE *OpRel 1+ TO *OpRel + THEN *Imm + TO *Imm + ELSE + GetOp IF 0x59 ELSE 0x66 THEN THROW + THEN + THEN + *OpRel 0 1 BETWEEN 0= REF-ERROR + *OpRel IF + *OpSize 1 = + *OpSize *DefDatasz (OthSz) = OR IF 0x50 THROW THEN + *DefDatasz TO *OpSize + THEN + GetOp DUP 1 > REF-ERROR + IF + CASE + [CHAR] + OF *Sign 0! FALSE ENDOF + [CHAR] - OF *Sign ON FALSE ENDOF + [CHAR] , OF TRUE >IN 1-! ENDOF + 0x59 THROW + ENDCASE + ELSE DROP TRUE THEN + UNTIL + *OpRel IF *DefDatasz TO *ImSize EXIT THEN + *OpSize CASE + 1 OF *Imm -256 AND IF 0x5A THROW THEN 1 TO *ImSize ENDOF + 2 OF +\ *Imm -65536 AND IF 0x5A THROW THEN + *Imm -128 AND DUP 0= SWAP -128 = OR IF 1 ELSE 2 THEN TO *ImSize + ENDOF + 4 OF + *Imm -128 AND DUP 0= SWAP -128 = OR IF 1 ELSE 4 THEN TO *ImSize + ENDOF + DROP *Imm -32768 AND DUP 0= SWAP -32768 = OR + IF 0x5C THROW THEN + *DefDatasz TO *OpSize *DefDatasz TO *ImSize + DUP + ENDCASE +; +: Mult ( n1 --> n2 ) + CASE + 1 OF 0 ENDOF + 2 OF 1 ENDOF + 4 OF 2 ENDOF + 8 OF 3 ENDOF + TRUE IF 0x58 THROW THEN + ENDCASE +; + +0 VALUE *OldReg +: ?MemReg ( --> flag ) + *Reg ?Reg IF + *Reg TO *R/M TO *Reg 3 TO *Mod + ELSE + DROP ?Ptr *Sign ! *SegReg TO *OldReg IN>R + ?SegReg IF + TO *SegReg + ?Colon IFNOT + *Sign @ IF 82 THROW THEN *OldReg TO *SegReg R>IN FALSE EXIT + THEN + *Sign ON + THEN + RDROP ?Bracket[ DUP *Sign @ OR *Sign ! + *Sign @ IFNOT DROP FALSE EXIT THEN + 0= IF 0x56 THROW THEN *Sign 0! 0 TO *Offset + BEGIN + ?Reg32 IF + *Sign @ REF-ERROR + *AdSize 2 = IF 0x50 THROW THEN 4 TO *AdSize IN>R + GetOp 1 = SWAP [CHAR] * = AND IF + *Index 0< 0= REF-ERROR + GetOp 2 <> REF-ERROR + Mult TO *Scale TO *Index RDROP + *Index 4 = REF-ERROR + ELSE + R>IN *Base 0< IFNOT + *Index 0< 0= REF-ERROR + 0 TO *Scale *Base TO *Index + *Index 4 = REF-ERROR + THEN TO *Base + THEN + ELSE + ?Reg16 IF + *Sign @ REF-ERROR + *AdSize 4 = IF 0x50 THROW THEN + 2 TO *AdSize + CASE + 3 OF *Base 0< 0= REF-ERROR 3 TO *Base ENDOF + 5 OF *Base 0< 0= REF-ERROR 5 TO *Base ENDOF + 6 OF *Index 0< 0= REF-ERROR 6 TO *Index ENDOF + 7 OF *Index 0< 0= REF-ERROR 7 TO *Index ENDOF + TRUE REF-ERROR + ENDCASE + ELSE + ?Number IF + *AdSize IFNOT *DefDatasz TO *AdSize THEN + *Sign @ IF NEGATE *Offset + TO *Offset + ELSE + IN>R GetOp 1 = SWAP [CHAR] * = AND IF + *Index 0< 0= REF-ERROR + ?Reg32 0= REF-ERROR + TO *Index Mult TO *Scale RDROP + *Index 4 = REF-ERROR + ELSE R>IN *Offset + TO *Offset THEN + THEN + ELSE + ?Label IF + *AdSize 2 = IF 0x50 THROW THEN + *DefDatasz TO *AdSize + *GenName C@ IF + *OffName C@ REF-ERROR + *GenName *OffName SCopy + DUP HERE <> IF *Sign @ REF-ERROR THEN *GenName 0! + THEN + *Sign @ IF *OfRel 1- TO *OfRel NEGATE + ELSE *OfRel 1+ TO *OfRel THEN *Offset + TO *Offset + ELSE 89 THROW THEN + THEN + THEN + THEN + *OfRel 0 1 BETWEEN 0= REF-ERROR + GetOp 1 <> REF-ERROR + CASE + [CHAR] + OF *Sign 0! FALSE ENDOF + [CHAR] - OF *Sign ON FALSE ENDOF + [CHAR] ] OF TRUE ENDOF + 89 THROW + ENDCASE + UNTIL + THEN + *OfSize IFNOT + *Offset IF + *Offset 127 > *Offset -128 < OR IF + *DefDatasz TO *OfSize + *AdSize 2 = IF + *Offset 32767 > *Offset -32768 < OR + IF 91 THROW + ELSE 2 TO *OfSize + THEN + THEN + ELSE 1 TO *OfSize THEN + THEN + THEN + *OfRel IF *DefDatasz TO *OfSize THEN + *AdSize *DefDatasz = IF + *Base 0< IF + 0 TO *Mod + *Index 0< IF 5 TO *R/M ELSE 4 TO *R/M 5 TO *Base THEN + *DefDatasz TO *OfSize + ELSE + *OfSize 4 = IF 2 ELSE *OfSize THEN TO *Mod + *Base 5 = *Mod 0= AND IF 0 TO *Offset 1 TO *Mod 1 TO *OfSize THEN + *Index 0< IF + *Base 4 = IF 0 TO *Scale 4 TO *Index 4 TO *R/M THEN + *Base TO *R/M + ELSE 4 TO *R/M THEN + THEN + ELSE + *AdSize 2 = IF + *OfSize TO *Mod + *Base 6 = *Index 0< *OfSize 0= AND AND IF + 1 TO *Mod 0 TO *Offset 1 TO *OfSize + THEN + *Base CASE + 3 OF + *Index CASE + 6 OF 0 ENDOF + 7 OF 1 ENDOF + DROP 7 DUP + ENDCASE + ENDOF + 5 OF + *Index CASE + 6 OF 2 ENDOF + 7 OF 3 ENDOF + DROP 6 DUP + ENDCASE + ENDOF + *Index CASE + 6 OF 4 ENDOF + 7 OF 5 ENDOF + DROP 0 TO *Mod 2 TO *OfSize 6 DUP + ENDCASE + ENDCASE + TO *R/M + THEN + THEN TRUE +; +ALSO S_ASSEM DEFINITIONS PREVIOUS + +: FCALL ( --> ) + 0xE8 C, \ машинная команда CALL + ' HERE CELL+ - , ; + +: FOR + CONTEXT @ >R PREVIOUS + INTERPRET + ALSO R> CONTEXT ! ; + +: EQU ( --> ) + LSP @ C@ 1 = + LSP @ 3 + @ + HERE \ *DefDatasz 2 = IF 0xFFFF AND THEN + = AND IF + InitCommand *DefDatasz TO *OpSize + Imm *Imm LSP @ 3 + ! + *OpRel IFNOT 7 LSP @ C! THEN + ELSE 93 THROW THEN +; + +: DD ( --> ) + BEGIN + InitCommand 4 TO *OpSize + Imm 4 TO *ImSize + *OpRel IF *DefDatasz 4 <> REF-ERROR + *ImSize 4 <> IF 85 THROW THEN + *ImmName C@ IFNOT 1 *ImmName 1+ C! THEN + *ImmName 1+ C@ IF *ImmName HERE 2 AddStrObject + ELSE + *ImmName C@ 1- *ImmName 1+ C! + *ImmName 1+ HERE 5 AddStrObject + THEN + THEN + *Imm , + IN>R GetOp 1 = SWAP [CHAR] , = AND IF RDROP FALSE + ELSE R>IN TRUE THEN + UNTIL +; + +: DW ( --> ) + BEGIN + InitCommand 4 TO *OpSize + Imm *OpRel REF-ERROR + 2 TO *OpSize 2 TO *ImSize +\ *Imm -65536 AND DUP 0= SWAP -65536 = OR 0= IF 0x5A THROW THEN + *Imm W, + IN>R GetOp 1 = SWAP [CHAR] , = AND IF RDROP FALSE + ELSE R>IN TRUE THEN + UNTIL +; + +: DS ( --> ) + InitCommand 4 TO *OpSize + Imm 4 TO *ImSize + *OpRel IF 101 THROW THEN + HERE *Imm DUP ALLOT ERASE +; +: DB ( --> ) + BEGIN + InitCommand + IN>R GetOp 1 INVERT AND 4 = IF + RDROP COUNT ?DUP IF HERE SWAP DUP ALLOT CMOVE ELSE DROP THEN + ELSE + DROP R>IN 4 TO *OpSize + Imm *OpRel REF-ERROR + 1 TO *OpSize + *Imm -128 AND DUP 0= SWAP -128 = OR *Imm 256 U< OR 0= + IF 0x5A THROW THEN + *Imm C, + THEN + IN>R GetOp 1 = SWAP [CHAR] , = AND IF RDROP FALSE + ELSE R>IN TRUE THEN + UNTIL +; +HIDDEN DEFINITIONS +0 VALUE ?ENDCODE + +: DEF+! ( N ADDR -- ) + *DefDatasz 4 = IF +! ELSE DUP>R @ + R> W! THEN ; + +: DEF! ( N ADDR -- ) + *DefDatasz 4 = IF ! ELSE W! THEN ; + +: ENDCODE ( 0x5030F8 --> ) + TRUE TO ?ENDCODE + PREVIOUS 0x5030F8 ?PAIRS LSP @ >R + BEGIN + R@ C@ WHILE + R@ C@ 5 = IF + NullString R@ 3 + @ 2 AddStrObject + R@ 7 + 9 FindStrObject IF + R@ 3 + @ DEF+! 10 R@ C! + ELSE + HERE R@ 3 + @ DEF+! HERE R@ 3 + ! + R@ 8 + HERE R@ 7 + C@ DUP ALLOT CMOVE 9 R@ C! + THEN + THEN + R@ 1+ W@ R> + >R + REPEAT + RDROP LSP @ >R + BEGIN + R@ C@ WHILE + R@ C@ 8 = IF + NullString R@ 3 + @ 2 AddStrObject + NullString HERE 2 AddStrObject + HERE R@ 3 + @ DEF! R@ 7 + @ , + THEN + R@ 1+ W@ R> + >R + REPEAT + RDROP LSP @ >R + BEGIN + R@ C@ WHILE + R@ C@ 2 = IF + R@ 7 + C@ IF + R@ 7 + 1 FindStrObject IF + R@ 3 + @ DEF+! 0 R@ 7 + C! + ELSE +\ R@ 7 + >ASCIIZ 0x21 - ErrNo ! 0x53 Error + ." ASM: Label not found:" R@ 7 + COUNT TYPE ERR_ + THEN + THEN +\ R@ 3 + @ LAST @ Name> - RMark + ELSE + R@ C@ 4 = IF + R@ 7 + 1 FindStrObject IF + R@ 3 + @ - 1- DUP -128 AND DUP 0= SWAP -128 = OR IF + R@ 3 + @ C! + ELSE 96 THROW THEN + ELSE +\ R@ 7 + >ASCIIZ 0x21 - ErrNo ! 0x53 Error + ." ASM: Label not found:" R@ 7 + COUNT TYPE ERR_ + THEN + ELSE + R@ C@ 3 = IF + R@ 7 + 1 FindStrObject IF + R@ 3 + @ - *DefDatasz - R@ 3 + @ DEF! + ELSE +\ R@ 7 + >ASCIIZ 0x21 - ErrNo ! 0x53 Error + ." ASM: Label not found:" R@ 7 + COUNT TYPE ERR_ + THEN + THEN + THEN + THEN + R@ 1+ W@ R> + >R + REPEAT + RDROP ( Save-Input) LSP @ >R + BEGIN + R@ C@ WHILE + R@ C@ 6 = IF + R@ 7 + 1 FindStrObject IF +\ R@ 7 + COUNT SetStream VALUE 5 RMark Public + ELSE + R@ 7 + 7 FindStrObject IF +\ R@ 7 + COUNT SetStream VALUE Public + ELSE +\ R@ 7 + >ASCIIZ 0x21 - ErrNo ! 0x62 Error + ." ASM: Unresolved PUBLIC reference: R@ 7 + COUNT TYPE ERR_ + THEN + THEN + THEN + R@ 1+ W@ R> + >R + REPEAT + RDROP ( Restore-Input DROP ) +; + +: STARTCODE ( -- ) + ALSO S_ASSEM FALSE TO ?ENDCODE + LSP @ >R 0x5030F8 0 >L + BEGIN + BEGIN + GetOp DUP WHILE + DUP 3 = IF + DROP IFIND IF + EXECUTE + ?ENDCODE IF + R> LSP ! EXIT + THEN + ELSE + *GenName SCopy GetOp 1 = SWAP [CHAR] : = AND IF + *GenName 1 FindStrObject IF +\ *GenName >ASCIIZ 0x21 - ErrNo ! 0x5F Error + ." ASM: Label already defined:" R@ 7 + COUNT TYPE ERR_ + ELSE *GenName HERE \ *DefDatasz 2 = IF 0xFFFF AND THEN + 1 AddStrObject THEN + ELSE -321 THROW THEN + THEN + ELSE + 1 = IF + [CHAR] [ = IF + [CHAR] ] WORD COUNT EVALUATE + ELSE -321 THROW THEN + ELSE -321 THROW THEN + THEN + REPEAT + 2DROP REFILL 0= ABORT" endcode not found" + AGAIN +; + +: PUBLIC ( --> ) + BEGIN + GetOp 3 = IF 0 6 AddStrObject ELSE 0x5D THROW THEN + IN>R GetOp 1 = SWAP [CHAR] , = AND IF RDROP FALSE + ELSE R>IN TRUE THEN + UNTIL +; +: 2Op ( name ( c1opc c1reg ... c9opc c9reg --> ) + ( --> ) + \ One-byte opcodes only, but with possible "reg" modIFier + CREATE 9 0 DO SWAP C, C, LOOP +DOES> + TO *OpArray InitCommand 1 TO *OpcSize + ?Reg IF + Comma ?MemReg IF + *OpSize CASE + 1 OF *OpArray 2+ ENDOF + 2 OF *OpArray ENDOF + 4 OF *OpArray ENDOF + 0x5C THROW + ENDCASE + ELSE + 3 TO *Mod *Reg TO *R/M + Imm *OpSize + CASE + 1 OF + *OpArray + *Reg IF 12 ELSE -1 TO *Mod -1 TO *Scale 0 TO *OfSize 16 THEN + + DUP 1+ C@ TO *Reg + ENDOF + 2 OF + *OpArray + *Reg IF *ImSize 1 = IF 8 ELSE 10 THEN + ELSE -1 TO *Mod -1 TO *Scale 0 TO *OfSize *OpSize TO *ImSize 14 THEN + + DUP 1+ C@ TO *Reg + ENDOF + + 4 OF + *OpArray + *Reg *ImSize 1 = OR IF *ImSize 1 = IF 8 ELSE 10 THEN + ELSE -1 TO *Mod -1 TO *Scale 0 TO *OfSize *OpSize TO *ImSize 14 THEN + + DUP 1+ C@ TO *Reg + ENDOF + 0x5C THROW + ENDCASE + THEN + ELSE + ?MemReg 0= IF 94 THROW THEN + Comma ?Reg IF + *OpSize CASE + 1 OF *OpArray 6 + ENDOF + 2 OF *OpArray CELL+ ENDOF + 4 OF *OpArray CELL+ ENDOF + 0x5C THROW + ENDCASE + ELSE + Imm *OpSize CASE + 1 OF *OpArray 12 + DUP 1+ C@ TO *Reg ENDOF + 2 OF + *OpArray *ImSize 1 = IF 8 ELSE 10 THEN + DUP 1+ C@ TO *Reg + ENDOF + 4 OF + *OpArray *ImSize 1 = IF 8 ELSE 10 THEN + DUP 1+ C@ TO *Reg + ENDOF + 0x5C THROW + ENDCASE + THEN + THEN + C@ DUP TO *OpCode 0xF7 = IF *OpSize TO *ImSize THEN + CompileCommand +; +: PUSH ( --> ) + InitCommand + ?MemReg IF + 1 TO *OpcSize + *OpSize 2 < IF 0x50 THROW THEN + *Mod 3 = IF -1 TO *Mod *R/M 0x50 + TO *OpCode + ELSE 0xFF TO *OpCode 6 TO *Reg THEN + ELSE + ?SegReg IF + CASE + 0 OF 1 0x06 ENDOF + 1 OF 1 0x0E ENDOF + 2 OF 1 0x16 ENDOF + 3 OF 1 0x1E ENDOF + 4 OF 2 0xA00F ENDOF + 5 OF 2 0xA80F ENDOF + DUP + ENDCASE + TO *OpCode TO *OpcSize + ELSE + *DefDatasz TO *OpSize Imm 1 TO *OpcSize + *ImSize 4 = *Imm -32768 AND DUP 0= SWAP -32768 = OR AND *OpRel 0= AND + IF 2 TO *ImSize THEN + *ImSize TO *OpSize + *ImSize 1 = IF 0x6A ELSE 0x68 THEN TO *OpCode + THEN + THEN + CompileCommand +; + +: POP ( --> ) + InitCommand + ?MemReg IF + 1 TO *OpcSize + *OpSize 2 < IF 0x50 THROW THEN + *Mod 3 = IF -1 TO *Mod *R/M 0x58 + TO *OpCode + ELSE 0x8F TO *OpCode 0 TO *Reg THEN + ELSE + ?SegReg IF + CASE + 0 OF 1 0x07 ENDOF + 1 OF TRUE 1 #OPER-ERROR ENDOF + 2 OF 1 0x17 ENDOF + 3 OF 1 0x1F ENDOF + 4 OF 2 0xA10F ENDOF + 5 OF 2 0xA90F ENDOF + DUP + ENDCASE + TO *OpCode TO *OpcSize + ELSE 92 THROW THEN + THEN + CompileCommand +; + +: IncDec ( name ( byte_opc b_reg word_opc w_reg reg_baseopc dummy --> ) + ( --> ) + \ One-byte opcodes only, but with possible "reg" modIFier + CREATE 3 0 DO SWAP C, C, LOOP +DOES> + TO *OpArray InitCommand + ?MemReg IF + *OpSize 0= IF 92 THROW THEN + 1 TO *OpcSize + *Mod 3 = *OpSize 1 > AND IF -1 TO *Mod *OpArray C@ *R/M + + ELSE *OpSize 1 = IF 4 ELSE 2 THEN *OpArray + DUP 1+ C@ TO *Reg C@ THEN + TO *OpCode + ELSE TRUE 2 #OPER-ERROR THEN + CompileCommand +; +: NegNot ( name ( byte_opc b_reg word_opc w_reg --> ) + ( --> ) + \ One-byte opcodes only, but with possible "reg" modIFier + CREATE 2 0 DO SWAP C, C, LOOP +DOES> + TO *OpArray InitCommand + ?MemReg IF + *OpSize 0= IF 92 THROW THEN + 1 TO *OpcSize + *OpArray *OpSize 1 = IF 2 + THEN DUP 1+ C@ TO *Reg C@ TO *OpCode + ELSE TRUE 3 #OPER-ERROR THEN + CompileCommand +; +: MOV ( --> ) + InitCommand 1 TO *OpcSize + ?MemReg IF + Comma *Mod 3 = IF + *R/M TO *Reg -1 TO *Mod + ?MemReg IF + *Reg 0= *Mod 0= *R/M 5 = AND AND IF + -1 TO *Mod *OpSize 1 = IF 0xA0 ELSE 0xA1 THEN + ELSE + *OpSize 1 = IF 0x8A ELSE 0x8B THEN + THEN + ELSE + ?SegReg IF + *OpSize 2 < IF 0x50 THROW THEN + *Reg TO *R/M 3 TO *Mod TO *Reg 0x8C + ELSE + Imm *OpSize TO *ImSize + *Reg *OpSize 1 = IF 0xB0 ELSE 0xB8 THEN + + THEN + THEN + ELSE + ?Reg IF + *Reg 0= *Mod 0= *R/M 5 = AND AND IF + -1 TO *Mod *OpSize 1 = IF 0xA2 ELSE 0xA3 THEN + ELSE + *OpSize 1 = IF 0x88 ELSE 0x89 THEN + THEN + ELSE + Imm *OpSize TO *ImSize 0 TO *Reg + *OpSize 1 = IF 0xC6 ELSE 0xC7 THEN + THEN + THEN + ELSE + ?SegReg IF + Comma TO *Reg + ?MemReg IF *DefDatasz TO *OpSize 0x8E ELSE TRUE 4 #OPER-ERROR THEN + ELSE TRUE 5 #OPER-ERROR THEN + THEN + TO *OpCode CompileCommand +; +: INT ( --> ) + InitCommand 1 TO *OpSize + Imm *Imm 3 = IF 0xCC C, ELSE 0xCD C, *Imm C, THEN +; +: OUT ( --> ) + InitCommand + ?Reg IF + *Reg 2 = *OpSize 2 = AND IF + Comma InitCommand + ?Reg IF + *Reg IF TRUE 6 #OPER-ERROR THEN + *OpSize CASE + 1 OF 0xEE C, ENDOF + 2 OF 0xEF66 W, ENDOF + 4 OF 0xEF C, ENDOF + DUP + ENDCASE + ELSE TRUE 7 #OPER-ERROR THEN + ELSE TRUE 8 #OPER-ERROR THEN + ELSE + 1 TO *OpSize Imm Comma *Imm >R InitCommand + ?Reg IF + *Reg IF TRUE 9 #OPER-ERROR THEN + *OpSize CASE + 1 OF 0xE6 C, ENDOF + 2 OF 0xE766 W, ENDOF + 4 OF 0xE7 C, ENDOF + DUP + ENDCASE + ELSE TRUE 10 #OPER-ERROR THEN + R> C, + THEN +; +: IN ( --> ) + InitCommand + ?Reg IF *Reg 11 #OPER-ERROR ELSE TRUE 12 #OPER-ERROR THEN + Comma *OpSize >R InitCommand + ?Reg IF + *Reg 2 = *OpSize 2 = AND 0= 13 #OPER-ERROR + R> CASE + 1 OF 0xEC C, ENDOF + 2 OF 0xED66 W, ENDOF + 4 OF 0xED C, ENDOF + DUP + ENDCASE + ELSE + 1 TO *OpSize Imm + R> CASE + 1 OF 0xE4 C, ENDOF + 2 OF 0xE566 W, ENDOF + 4 OF 0xE5 C, ENDOF + DUP + ENDCASE + *Imm C, + THEN +; +: LxS ( name ( opcode opcsize --> ) + ( --> ) + CREATE C, W, +DOES> + InitCommand + DUP C@ TO *OpcSize 1+ W@ TO *OpCode + ?Reg IF + *OpSize TO *OpArray + Comma *OpSize 2 < IF 0x50 THROW THEN + *OpSize 2 = *OpCode 0x8D = OR IF \ Opcode 8D belongs TO LEA + *OpCode 0x8D = IF 0 ELSE 4 THEN TO *OpSize + ?MemReg IF + *Mod 3 = 14 #OPER-ERROR + *OpCode 0x8D = IF *OpArray ELSE 2 THEN TO *OpSize + ELSE TRUE 15 #OPER-ERROR THEN + ELSE + ?Ptr IF 0x50 THROW THEN + ?FWord DROP *DefDatasz TO *OpSize + ?MemReg IF *Mod 3 = 16 #OPER-ERROR + ELSE TRUE 17 #OPER-ERROR THEN + THEN + ELSE TRUE 18 #OPER-ERROR THEN + CompileCommand +; +: JShort ( --> ) + *OpArray C@ 0= 19 #OPER-ERROR + *DefDatasz TO *OpSize + Imm *ImmName C@ IF + *OpArray 1+ W@ HERE ! *OpArray C@ ALLOT + *ImmName HERE 4 AddStrObject + 0 C, + ELSE + *Imm HERE 2+ - -128 AND DUP 0= SWAP -128 = OR IF + *Imm HERE 2+ - *OpArray 1+ W@ HERE ! *OpArray C@ ALLOT C, + ELSE 96 THROW THEN + THEN +; +: Jxx ( name ( indir_opcsize i_opc i_reg near_sze n_opc short_sz s_opc --> ) + ( --> ) + CREATE SWAP C, W, SWAP C, W, ROT C, SWAP W, C, +DOES> + TO *OpArray + InitCommand + IN>R GetOp 3 = IF C" SHORT" S= IF RDROP JShort EXIT THEN THEN DROP R>IN + 0 TO *AdSize + ?MemReg IF + *OpArray 6 + C@ ?DUP IF TO *OpcSize ELSE 20 #OPER-ERROR THEN + *OpArray 7 + W@ TO *OpCode *OpArray 9 + C@ TO *Reg + CompileCommand EXIT + THEN + *DefDatasz TO *OpSize + Imm *OpSize>DEF *OpArray C@ *OpArray 3 + C@ OR 0= 21 #OPER-ERROR + *ImmName C@ IF + *OpArray 3 + C@ IF + *OpArray CELL+ W@ HERE ! *OpArray 3 + C@ ALLOT + *ImmName HERE 3 AddStrObject 0 *DefDatasz 4 = IF , ELSE W, THEN + ELSE + *OpArray 1+ W@ HERE ! *OpArray C@ ALLOT + *ImmName HERE 4 AddStrObject 0 C, + THEN + ELSE +\ *Imm 0x100 KernelSize + LAST @ Name> BETWEEN IF +\ 0 TO *OpRel *OffName 0! *ImmName 0! 0 TO *ImSize 0 TO *Offset 4 TO *OfSize +\ 4 TO *AdSize -1 TO *Base -1 TO *Index -1 TO *Scale 5 TO *R/M 0 TO *Mod +\ *OpArray 6 + C@ ?DUP 0= ABORT" ASM: External address reference not allowed" +\ TO *OpcSize +\ *OpArray 7 + W@ TO *OpCode *OpArray 9 + C@ TO *Reg +\ *Imm HERE *OpcSize + 1+ 8 AddNumObject +\ CompileCommand EXIT +\ THEN + *OpArray C@ *Imm HERE 2+ - -128 AND DUP 0= SWAP -128 = OR AND IF + *Imm HERE 1+ *OpArray C@ + - *OpArray 1+ W@ HERE ! *OpArray C@ ALLOT C, + ELSE + *OpArray 3 + C@ IF + *Imm HERE *DefDatasz 4 = IF CELL+ THEN *OpArray 3 + C@ + - + *OpArray CELL+ W@ HERE ! *OpArray 3 + C@ ALLOT + *DefDatasz 4 = IF , ELSE W, THEN + ELSE 96 THROW THEN + THEN + THEN +; +: ShIFt ( name ( reg --> ) + ( --> ) + \ Hardcoded opcodes - "reg" modIFiers only + CREATE C, +DOES> + InitCommand + C@ TO *Reg + ?MemReg IF + Comma ?Reg8 IF + 1 <> 22 #OPER-ERROR + *OpSize 1 = IF 0xD2 ELSE 0xD3 THEN + ELSE + Imm *Imm 0xFF U> IF 90 THROW THEN + *Imm 1 = IF + *OpSize 1 = IF 0xD0 ELSE 0xD1 THEN 0 TO *ImSize + ELSE + *OpSize 1 = IF 0xC0 ELSE 0xC1 THEN 1 TO *ImSize + THEN + THEN + ELSE TRUE 23 #OPER-ERROR THEN + TO *OpCode 1 TO *OpcSize + CompileCommand +; +: XCHG ( --> ) + InitCommand + ?MemReg IF + Comma *Mod 3 = IF + -1 TO *Mod *R/M TO *Reg + ?MemReg IF + *Mod 3 = *R/M 0= *Reg 0= OR AND *OpSize 1 > AND IF + *OpSize 2 = IF 0x66 C, THEN + 0x90 *Reg + *R/M + C, EXIT + THEN + ELSE TRUE 24 #OPER-ERROR THEN + ELSE + ?Reg 0= 25 #OPER-ERROR + THEN + ELSE 25 #OPER-ERROR THEN + *OpSize 1 = IF 0x86 ELSE 0x87 THEN TO *OpCode 1 TO *OpcSize + CompileCommand +; +: IMUL ( --> ) + InitCommand + ?MemReg IF + IN>R GetOp 1 = SWAP [CHAR] , = AND IF + RDROP *Mod 3 <> 26 #OPER-ERROR + *OpSize 1 > 0= 27 #OPER-ERROR + *R/M TO *Reg -1 TO *Mod + ?MemReg IF + IN>R GetOp 1 = SWAP [CHAR] , = AND IF + RDROP Imm 1 TO *OpcSize + *ImSize 1 = IF 0x6B ELSE 0x69 THEN TO *OpCode + ELSE + R>IN 0xAF0F TO *OpCode 2 TO *OpcSize + THEN + ELSE + Imm 3 TO *Mod *Reg TO *R/M 1 TO *OpcSize + *ImSize 1 = IF 0x6B ELSE 0x69 THEN TO *OpCode + THEN + ELSE + R>IN *OpSize 1 = IF 0xF6 ELSE 0xF7 THEN TO *OpCode 1 TO *OpcSize 5 TO *Reg + THEN + ELSE TRUE 28 #OPER-ERROR THEN + CompileCommand +; +: MOVxx ( name ( opc1 opc2 --> ) + ( --> ) + \ Two-byte opcodes only + CREATE W, W, +DOES> + InitCommand + TO *OpArray 2 TO *OpcSize + ?Reg IF + *OpSize >R 0 TO *OpSize + Comma ?MemReg IF + *OpSize 4 = IF 0x50 THROW THEN + *OpSize 2 = R> TO *OpSize IF + *OpSize 4 <> IF 0x50 THROW THEN + *OpArray W@ TO *OpCode + ELSE *OpArray 2+ W@ TO *OpCode THEN + ELSE TRUE 29 #OPER-ERROR THEN + ELSE TRUE 29 #OPER-ERROR THEN + CompileCommand +; +: Bit ( name ( c1opc c1reg c2opc c2reg --> ) + ( --> ) + \ Two-byte opcodes only, with possible "reg" modIFier + CREATE SWAP W, C, SWAP W, C, +DOES> + InitCommand + TO *OpArray 2 TO *OpcSize + ?MemReg IF + *OpSize 2 < 30 #OPER-ERROR + Comma ?Reg IF *OpArray 3 + + ELSE + Imm *Imm 0xFF > IF 90 THROW THEN + 1 TO *ImSize *OpArray 2+ C@ TO *Reg *OpArray + THEN + W@ TO *OpCode + ELSE TRUE 31 #OPER-ERROR THEN + CompileCommand +; +: SETxx ( name ( opc --> ) + ( --> ) + \ Two-byte opcodes only + CREATE W, +DOES> + InitCommand + W@ TO *OpCode 2 TO *OpcSize + ?MemReg IF + *OpSize 1 <> 33 #OPER-ERROR + 0 TO *Reg + ELSE TRUE 34 #OPER-ERROR THEN + CompileCommand +; +: SHxD ( name ( opc1 opc2 --> ) + ( --> ) + \ Two-byte opcodes only + CREATE W, W, +DOES> + InitCommand + TO *OpArray 2 TO *OpcSize + ?MemReg IF + *OpSize 2 < 0= 35 #OPER-ERROR + Comma ?Reg IF + Comma ?Reg8 IF 1 <> 36 #OPER-ERROR *OpArray + ELSE Imm *Imm 0xFF > IF 90 THROW THEN *OpArray 2+ THEN + ELSE TRUE 37 #OPER-ERROR THEN + ELSE TRUE 38 #OPER-ERROR THEN + W@ TO *OpCode + CompileCommand +; +: BSx ( name ( WORD --> ) + ( --> ) + CREATE W, +DOES> + InitCommand W@ TO *OpCode 2 TO *OpcSize + ?Reg IF + *OpSize 2 < 39 #OPER-ERROR + Comma ?MemReg 0= TRUE 40 #OPER-ERROR + ELSE TRUE 41 #OPER-ERROR THEN + CompileCommand +; +: Rxx ( name ( opc --> ) + ( --> ) + CREATE C, DOES> C@ C, 1 C, 0xC3 C, +; +: ALIGN ( --> ) + InitCommand *DefDatasz TO *OpSize Imm 4 TO *ImSize + *OpRel IF 101 THROW THEN + BEGIN + HERE *Imm MOD WHILE + 0 C, + REPEAT +; + +: I' BL WORD IFIND 0= IF -321 THROW THEN ( -? ) ; + +ALSO S_ASSEM DEFINITIONS + +S" ~mak\asm\ASM_SIF.F" INCLUDED + +0xC9 1Op1 LEAVE +0xCC 1Op1 INT3 +0xCE 1Op1 INTO +0x37 1Op1 AAA +0x3F 1Op1 AAS +0x99 1Op1D CDQ +0x98 1Op1D CWDE +0xF8 1Op1 CLC +0xFC 1Op1 CLD +0xFA 1Op1 CLI +0xF5 1Op1 CMC +0xA6 1Op1 CMPSB +0xA7 1Op1D CMPSD +0x27 1Op1 DAA +0x2F 1Op1 DAS +0xF4 1Op1 HLT +0x6C 1Op1 INSB +0x6D 1Op1D INSD +0xCF 1Op1D IRETD +0x9F 1Op1 LAHF +0xAC 1Op1 LODSB +0xAD 1Op1D LODSD +0xA4 1Op1 MOVSB +0xA5 1Op1D MOVSD +0x90 1Op1 NOP +0x6E 1Op1 OUTSB +0x6F 1Op1D OUTSD +0x61 1Op1D POPAD +0x60 1Op1D PUSHAD +0x9D 1Op1D POPFD +0x9C 1Op1D PUSHFD +0xC3 1Op1 RET +0xCB 1Op1 RETF +0x9E 1Op1 SAHF +0xAE 1Op1 SCASB +0xAF 1Op1D SCASD +0xF9 1Op1 STC +0xFD 1Op1 STD +0xFB 1Op1 STI +0xAA 1Op1 STOSB +0xAB 1Op1D STOSD +0x9B 1Op1 WAIT +0xD7 1Op1 XLAT +0xD7 1Op1 XLATB +0xF0 1Op1 LOCK +0xF3 1Op1 REP +0xF3 1Op1 REPE +0xF3 1Op1 REPZ +0xF2 1Op1 REPNE +0xF2 1Op1 REPNZ +0x0AD5 1Op2 AAD +0x0AD4 1Op2 AAM +0x310F 1Op2 RDTSC +0x98 1Op1W CBW +0x99 1Op1W CWD +0xA7 1Op1W CMPSW +0x6D 1Op1W INSW +0xCF 1Op1W IRET +0xAD 1Op1W LODSW +0xA5 1Op1W MOVSW +0x6F 1Op1W OUTSW +0x61 1Op1W POPA +0x60 1Op1W PUSHA +0x9D 1Op1W POPF +0x9C 1Op1W PUSHF +0xAF 1Op1W SCASW +0xAB 1Op1W STOSW +0x14 0 0x15 0 0x80 2 0x81 2 0x83 2 0x10 0 0x11 0 0x12 0 0x13 0 2Op ADC +0x04 0 0x05 0 0x80 0 0x81 0 0x83 0 0x00 0 0x01 0 0x02 0 0x03 0 2Op ADD +0x24 0 0x25 0 0x80 4 0x81 4 0x83 4 0x20 0 0x21 0 0x22 0 0x23 0 2Op AND +0x3C 0 0x3D 0 0x80 7 0x81 7 0x83 7 0x38 0 0x39 0 0x3A 0 0x3B 0 2Op CMP +0x1C 0 0x1D 0 0x80 3 0x81 3 0x83 3 0x18 0 0x19 0 0x1A 0 0x1B 0 2Op SBB +0x2C 0 0x2D 0 0x80 5 0x81 5 0x83 5 0x28 0 0x29 0 0x2A 0 0x2B 0 2Op SUB +0x34 0 0x35 0 0x80 6 0x81 6 0x83 6 0x30 0 0x31 0 0x32 0 0x33 0 2Op XOR +0x0C 0 0x0D 0 0x80 1 0x81 1 0x83 1 0x08 0 0x09 0 0x0A 0 0x0B 0 2Op OR +0xA8 0 0xA9 0 0xF6 0 0xF7 0 0xF7 0 0x84 0 0x85 0 0x84 0 0x85 0 2Op TEST +0xFE 0 0xFF 0 0x40 0 IncDec INC +0xFE 1 0xFF 1 0x48 0 IncDec DEC +0xF6 3 0xF7 3 NegNot NEG +0xF6 2 0xF7 2 NegNot NOT +0xF6 4 0xF7 4 NegNot MUL +0xF6 6 0xF7 6 NegNot DIV +0xF6 7 0xF7 7 NegNot IDIV +0x8D 1 LxS LEA +0xC5 1 LxS LDS +0xC4 1 LxS LES +0xB20F 2 LxS LSS +0xB40F 2 LxS LFS +0xB50F 2 LxS LGS +1 0xFF 4 1 0xE9 1 0xEB Jxx JMP +1 0xFF 2 1 0xE8 0 0 Jxx CALL +0 0 0 0 0 1 0xE3 Jxx JECXZ +0 0 0 0 0 2 0xE367 Jxx JCXZ +0 0 0 0 0 1 0xE2 Jxx LOOP +0 0 0 0 0 1 0xE1 Jxx LOOPZ +0 0 0 0 0 1 0xE0 Jxx LOOPNZ +0 0 0 2 0x840F 1 0x74 Jxx JZ +0 0 0 2 0x800F 1 0x70 Jxx JO +0 0 0 2 0x810F 1 0x71 Jxx JNO +0 0 0 2 0x820F 1 0x72 Jxx JC +0 0 0 2 0x830F 1 0x73 Jxx JNC +0 0 0 2 0x850F 1 0x75 Jxx JNZ +0 0 0 2 0x860F 1 0x76 Jxx JNA +0 0 0 2 0x870F 1 0x77 Jxx JA +0 0 0 2 0x880F 1 0x78 Jxx JS +0 0 0 2 0x890F 1 0x79 Jxx JNS +0 0 0 2 0x8A0F 1 0x7A Jxx JPE +0 0 0 2 0x8B0F 1 0x7B Jxx JPO +0 0 0 2 0x8C0F 1 0x7C Jxx JL +0 0 0 2 0x8D0F 1 0x7D Jxx JGE +0 0 0 2 0x8E0F 1 0x7E Jxx JLE +0 0 0 2 0x8F0F 1 0x7F Jxx JG +: JE JZ ; +: JB JC ; +: JNAE JC ; +: JAE JNC ; +: JNB JNC ; +: JNE JNZ ; +: JBE JNA ; +: JNBE JA ; +: JP JPE ; +: JNP JPO ; +: JNGE JL ; +: JNL JGE ; +: JNG JLE ; +: JNLE JG ; +: LOOPE LOOPZ ; +: LOOPNE LOOPNZ ; +0x02 ShIFt RCL +0x03 ShIFt RCR +0x00 ShIFt ROL +0x01 ShIFt ROR +0x04 ShIFt SAL +0x07 ShIFt SAR +0x04 ShIFt SHL +0x05 ShIFt SHR +0xBE0F 0xBF0F MOVxx MOVSX +0xB60F 0xB70F MOVxx MOVZX +0 0xA30F 4 0xBA0F Bit BT +0 0xBB0F 7 0xBA0F Bit BTC +0 0xB30F 6 0xBA0F Bit BTR +0 0xAB0F 5 0xBA0F Bit BTS +0x970F SETxx SETA +0x930F SETxx SETAE +0x920F SETxx SETC +0x960F SETxx SETNA +0x940F SETxx SETZ +0x9F0F SETxx SETG +0x9D0F SETxx SETGE +0x9C0F SETxx SETL +0x9E0F SETxx SETLE +0x950F SETxx SETNZ +0x900F SETxx SETO +0x910F SETxx SETNO +0x980F SETxx SETS +0x990F SETxx SETNS +0x9A0F SETxx SETP +0x9B0F SETxx SETNP +: SETNBE SETA ; +: SETNB SETAE ; +: SETNC SETAE ; +: SETB SETC ; +: SETNAE SETC ; +: SETBE SETNA ; +: SETE SETZ ; +: SETNLE SETG ; +: SETNL SETGE ; +: SETNGE SETL ; +: SETNG SETLE ; +: SETNE SETNZ ; +: SETPE SETP ; +: SETPO SETNP ; +0xA40F 0xA50F SHxD SHLD +0xAC0F 0xAD0F SHxD SHRD +0xBC0F BSx BSF +0xBD0F BSx BSR +0x73 Rxx RC +0x72 Rxx RNC +0x75 Rxx RZ +0x74 Rxx RNZ +0x76 Rxx RA +0x77 Rxx RNA +0x7A Rxx RPO +0x7B Rxx RPE +0x71 Rxx RO +0x70 Rxx RNO +0x7E Rxx RG +0x7F Rxx RNG +0x7D Rxx RL +0x7C Rxx RNL +: RE RZ ; +: RB RC ; +: RNAE RC ; +: RAE RNC ; +: RNB RNC ; +: RNE RNZ ; +: RBE RNA ; +: RNBE RA ; +: RP RPE ; +: RNP RPO ; +: RNGE RL ; +: RGE RNL ; +: RLE RNG ; +: RNLE RG ; + +PREVIOUS + +ALSO FORTH DEFINITIONS + +: Code ( -- ) + HEADER STARTCODE ; + +: STARTCODE STARTCODE ; + +: USE16 ( --> ) + 2 TO *DefDatasz +; +: USE32 ( --> ) + 4 TO *DefDatasz +; + +S_ASSEM DEFINITIONS + +: MOVSD 0xA5 C, *DefDatasz 2 = IF 0x66 C, THEN ; +: MOVSW 0xA5 C, *DefDatasz 4 = IF 0x66 C, THEN ; + +: SEG SEG ; +: PUBLIC PUBLIC ; +: ENDCODE ENDCODE ; +: PUSH PUSH ; +: POP POP ; +: MOV MOV ; +: INT INT ; +: OUT OUT ; +: IN IN ; +: XCHG XCHG ; +: IMUL IMUL ; +: ALIGN ALIGN ; + +PREVIOUS +PREVIOUS DEFINITIONS + +\EOF +USE16 +Code ZZ + mov bp, msg +msg: ; EQU 4444H + RET +ENDCODE +\EOF + +C" DBG" FIND NIP +[IF] + +ALSO S_ASSEM + mov Ebp, msg + +USE16 +DBG mov bp, msg +[THEN] +\S + +Code ZZ + ADD EBX, {KEY} + ADD EBX, 44H + ADD EBX, 4444444H +WWW: MOV EAX, WWW+4 + MOV EAX, [EBP+EDX*4] +FOR 0x44444 , + JMP SHORT SS1 +SS1: JMP SS2 +SS2: +EndCode + +' ZZ 20 DUMP +\ 4B22AE 09C0 OR EAX , EAX +\ http://win32asm.chat.ru/ \ No newline at end of file diff --git a/programs/develop/SPForth/devel/~mak/asm/ASM_SIF.F b/programs/develop/SPForth/devel/~mak/asm/ASM_SIF.F new file mode 100644 index 0000000000..b9be07eccb --- /dev/null +++ b/programs/develop/SPForth/devel/~mak/asm/ASM_SIF.F @@ -0,0 +1,40 @@ +REQUIRE [IF] ~MAK\CompIF.f + +C" I'" FIND NIP +[IF] +: I' BL WORD FIND 0= IF -321 THROW THEN ( -? ) ; +[THEN] + + + 0x75 CONSTANT 0= 0x74 CONSTANT 0<> 0x79 CONSTANT 0< + 0x78 CONSTANT 0>= 0x7D CONSTANT < 0x7C CONSTANT >= + 0x7F CONSTANT <= 0x7E CONSTANT > 0x73 CONSTANT U< + 0x72 CONSTANT U>= 0x77 CONSTANT U<= 0x76 CONSTANT U> + 0x71 CONSTANT OV 0x70 CONSTANT NOV 0xE1 CONSTANT <>C0= + 0xE2 CONSTANT C0= 0xE0 CONSTANT ?C0= 0xE3 CONSTANT C0<> + +: SIF ( - a) I' EXECUTE C, HERE ( origin) 0 C, ( blank) ; +: SWHILE ( a1 "opcode" - a2 a1) SIF SWAP ; +: STHEN ( a -) HERE OVER 1+ - SWAP C! ; +: SELSE ( a - a') 0xEB ( short jmp) C, + HERE OVER - SWAP C! HERE 0 C, ; +: SBEGIN ( - a) HERE ; +: SUNTIL_ ( a opc -) C, HERE 1+ - C, ; +: SUNTIL ( a -) I' EXECUTE SUNTIL_ ; +: SAGAIN ( a -) 0xEB SUNTIL_ ; +: SREPEAT ( a a1 -) SAGAIN STHEN ; + +: SLOOP ( a -) 0xE2 SUNTIL_ ; +: SLOOPZ ( a -) 0xE1 SUNTIL_ ; +: SLOOPNZ ( a -) 0xE0 SUNTIL_ ; + +: LIF ( opcode - a) I' EXECUTE 0xF10 + W, HERE ( origin) 0 , ( blank) ; +: LWHILE ( a1 opcode - a2 a1) LIF SWAP ; +: LTHEN ( a -) HERE OVER CELL+ - SWAP ! ; +: LELSE ( a - a') 0xE9 ( short jmp) C, + HERE OVER - SWAP ! HERE 0 , ; +: LUNTIL ( a opc -) I' EXECUTE 0xF10 + W, HERE CELL+ - , ; +: LAGAIN ( a -) 0xE9 C, HERE CELL+ - , ; +: LREPEAT ( a -) LAGAIN LTHEN ; + +: II BL WORD FIND1 0= ; \ No newline at end of file diff --git a/programs/develop/SPForth/devel/~mak/asm/asmbase.f b/programs/develop/SPForth/devel/~mak/asm/asmbase.f new file mode 100644 index 0000000000..f4aeefd888 --- /dev/null +++ b/programs/develop/SPForth/devel/~mak/asm/asmbase.f @@ -0,0 +1,237 @@ + +~mak\utils.f + +CREATE GetOp_STR 80 ALLOT +C" SkipDelimiters" FIND NIP 0= +[IF] +: 2+ 2 + ; +: 0! OFF ; +: 1+! incr ; +: 1-! DECR ; +: EndOfChunk ( -- flag ) + >IN @ SOURCE NIP < 0= \ >IN не меньше, чем длина чанка +; + +: CharAddr ( -- c-addr ) + SOURCE DROP >IN @ + +; + +: PeekChar ( -- char ) + CharAddr C@ \ символ из текущего значения >IN +; + +: GetChar ( -- char flag ) + EndOfChunk + IF 0 FALSE + ELSE PeekChar TRUE THEN +; + +: IsDelimiter ( char -- flag ) + BL 1+ < ; + +: OnDelimiter ( -- flag ) + GetChar SWAP IsDelimiter AND +; + +: SkipDelimiters ( -- ) \ пропустить пробельные символы + BEGIN + OnDelimiter + WHILE + >IN 1+! + REPEAT +; + +: RDROP POSTPONE R>DROP ; IMMEDIATE + +[THEN] + +: OnNotDelimiter_ ( C -- flag ) + DUP [CHAR] 0 U< IF DROP FALSE EXIT THEN + DUP [CHAR] : U< IF DROP TRUE EXIT THEN + DUP [CHAR] @ U< IF DROP FALSE EXIT THEN + DUP [CHAR] [ U< IF DROP TRUE EXIT THEN + DUP [CHAR] _ = IF DROP TRUE EXIT THEN + DUP [CHAR] a U< IF DROP FALSE EXIT THEN + DUP [CHAR] { U< IF DROP TRUE EXIT THEN + DROP FALSE +; + +: SkipWord_ ( -- ) \ пропустить term символы + BEGIN + GetChar IF OnNotDelimiter_ THEN + WHILE + >IN 1+! + REPEAT ; + +: ParseWord_ ( -- c-addr u ) + CharAddr >IN @ + SkipWord_ + >IN @ - NEGATE ; + +C" UPPER" FIND NIP 0= +[IF] + +BASE @ HEX +: UPC ( c -- c' ) + DUP [CHAR] Z U> + IF DF AND + THEN ; + +BASE ! + +: UPPER ( ADDR LEN -- ) + 0 ?DO COUNT UPC OVER 1- C! LOOP DROP ; + +[THEN] + +: IN>R POSTPONE >IN + POSTPONE @ + POSTPONE >R ; IMMEDIATE + +: R>IN POSTPONE R> + POSTPONE >IN + POSTPONE ! ; IMMEDIATE + +: GetOp_BS ParseWord_ GetOp_STR PLACE GetOp_STR ; + +: non-term 1 GetOp_STR C! PeekChar GetOp_STR 1+ C! >IN 1+! GetOp_STR ; + +: TERM-STR CharAddr SkipWord_ CharAddr OVER - + GetOp_STR PLACE GetOp_STR DUP COUNT UPPER ; + +\ types: 1 - non-term (comments, etc.) +\ 2 - number +\ 3 - name +\ 4 - "-bracketed string +\ 5 - '-bracketed string + +CREATE XXX 0 , +: (GetOp) ( --> string type ) + SkipDelimiters + GetChar 0= IF DROP XXX FALSE EXIT THEN + DUP [CHAR] 0 < + IF DUP [CHAR] " = + IF [CHAR] " GetOp_BS 4 EXIT + THEN + [CHAR] ' = + IF [CHAR] ' GetOp_BS 5 EXIT + THEN non-term 1 EXIT + THEN + DUP [CHAR] : < + IF DROP TERM-STR 2 EXIT + THEN + OnNotDelimiter_ + IF TERM-STR 3 EXIT + THEN non-term 1 ; + +: IFNOT POSTPONE 0= + POSTPONE IF ; IMMEDIATE + +1000 ALLOT +HERE CONSTANT LS0 +VARIABLE LSP +LS0 LSP ! + +: ADDNUMOBJECT ( name addr type --> ) + -11 LSP +! + LSP @ C! + 11 LSP @ 1+ W! + LSP @ 3 + ! + LSP @ 7 + ! ; + + +: AddStrObject ( name addr type --> ) + ROT + DUP C@ 1+ NEGATE LSP +! + COUNT LSP @ PLACE \ addr type + -7 LSP +! + LSP @ C! + LSP @ 7 + C@ 8 + + LSP @ 1+ W! + LSP @ 3 + ! ; + +0 +1 FIELD L_TYPE +2 FIELD L_SIZE +4 FIELD L_ADDR +0 FIELD L_NAME +DROP + +: FindStrObject ( name type --> addr true | false ) + LSP @ >R + BEGIN R@ L_SIZE W@ + WHILE + DUP R@ L_TYPE C@ = + IF OVER R@ L_SIZE W@ 7 - + R@ L_NAME R@ L_SIZE W@ 7 - COMPARE 0= + IF 2DROP R> L_ADDR @ TRUE EXIT + THEN + THEN R@ L_SIZE W@ R> + >R + REPEAT 2DROP RDROP FALSE ; + +CREATE NullString 0 , + + +: ConvertString ; + +: S= ( c-addr1 c-addr2 --> true | c-addr1 false ) + OVER COUNT ROT COUNT + COMPARE + IF FALSE + ELSE DROP TRUE + THEN ; +: ?S= ( flag n R: >IN --> R: >IN | -->> n true ) + SWAP + IF 2R> 2DROP TRUE EXIT + THEN DROP +; + + +ALSO FORTH DEFINITIONS + +: VAL ( ADDR -- UD2 FLAG ) + 0 0 ROT COUNT >NUMBER NIP 0= ; + +VARIABLE CUR-PAB +HERE 0 , CUR-PAB ! + +: ?PABLIC ( CFA -- FLAG ) + CUR-PAB @ + BEGIN 2DUP @ U< + WHILE @ + REPEAT CELL+ @ = ; + +: PABLIC ( -- ) + HERE CUR-PAB @ , LAST @ NAME> , CUR-PAB ! ; + +: >L + -4 LSP +! + LSP @ ! ; + +: L> + LSP @ @ + 4 LSP +! ; + +: ERR_ TRUE ABORT" " ; + +C" 1-!" FIND NIP 0= +[IF] +: 1-! ( ADDR -- ) + DUP>R @ 1- R> ! ; +[THEN] + +C" ON" FIND NIP 0= +[IF] +: ON ( ADDR -- ) + TRUE SWAP ! ; +[THEN] + +C" ?PAIRS" FIND NIP 0= +[IF] +: ?PAIRS XOR ABORT" conditionals not paired" ; +[THEN] + +\ : 'Alias ' Alias ; +PREVIOUS DEFINITIONS + + diff --git a/programs/develop/SPForth/devel/~mak/author.txt b/programs/develop/SPForth/devel/~mak/author.txt new file mode 100644 index 0000000000..dfb0a4e98c --- /dev/null +++ b/programs/develop/SPForth/devel/~mak/author.txt @@ -0,0 +1 @@ +Mihail Maksimov [mak@rtc.ru] diff --git a/programs/develop/SPForth/devel/~mak/case.f b/programs/develop/SPForth/devel/~mak/case.f new file mode 100644 index 0000000000..7dca6b520b --- /dev/null +++ b/programs/develop/SPForth/devel/~mak/case.f @@ -0,0 +1,33 @@ + + +VARIABLE CSP \ ╙ърчрЄхы№ ёЄхър ъюэЄЁюы  + +: CASE + CSP @ SP@ CSP ! ; IMMEDIATE + +: ?OF_ + POSTPONE IF POSTPONE DROP ; IMMEDIATE + +: OF + POSTPONE OVER POSTPONE = POSTPONE ?OF_ ; IMMEDIATE + +: ENDOF + POSTPONE ELSE ; IMMEDIATE + +: DUPENDCASE + BEGIN SP@ CSP @ <> WHILE POSTPONE THEN REPEAT + CSP ! ; IMMEDIATE + +: ENDCASE + POSTPONE DROP POSTPONE DUPENDCASE +; IMMEDIATE + +: OF\ + POSTPONE OVER POSTPONE <> POSTPONE IF ; IMMEDIATE + +: OF; + POSTPONE OVER POSTPONE = POSTPONE IF 2>R + POSTPONE DUPENDCASE 2R> + POSTPONE DROP ; IMMEDIATE + +HEX diff --git a/programs/develop/SPForth/devel/~mak/djgpp/gdis.F b/programs/develop/SPForth/devel/~mak/djgpp/gdis.F new file mode 100644 index 0000000000..0969045c5e --- /dev/null +++ b/programs/develop/SPForth/devel/~mak/djgpp/gdis.F @@ -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 diff --git a/programs/develop/SPForth/devel/~mak/do_want.f b/programs/develop/SPForth/devel/~mak/do_want.f new file mode 100644 index 0000000000..c58cdc2b7e --- /dev/null +++ b/programs/develop/SPForth/devel/~mak/do_want.f @@ -0,0 +1,13 @@ + +WANT_BUFF COUNT SFIND [IF] DROP \EOF [THEN] + +[WANT] WDS ~mak\wds.f +[WANT] SKIP : SKIP PSKIP ; +[WANT] PSKIP : PSKIP SKIP ; +[WANT] CASE ~mak\case.f +[WANT] [IF] ~mak/CompIF.f +[WANT] MS : MS 0 DO 100099 0 DO LOOP LOOP ; +[WANT] #define : #define HEADER ['] _CONSTANT-CODE COMPILE, 0 PARSE EVALUATE , ; + + +-321 THROW \ No newline at end of file diff --git a/programs/develop/SPForth/devel/~mak/lib/csr.f b/programs/develop/SPForth/devel/~mak/lib/csr.f new file mode 100644 index 0000000000..c4a90c2c41 --- /dev/null +++ b/programs/develop/SPForth/devel/~mak/lib/csr.f @@ -0,0 +1,25 @@ +[IFNDEF] CSP +VARIABLE CSP \ ╙ърчрЄхы№ ёЄхър ъюэЄЁюы  +[THEN] +6 CONSTANT L-CAS# \ ─юяєёЄшь√щ єЁютхэ№ тыюцхээюёЄш +CREATE S-CSP L-CAS# CELLS ALLOT \ ╤Єхъ ъюэЄЁюы  +S-CSP CSP ! + +: +CSP ( -> P) \ ─юсртшЄ№ єЁютхэ№ + CSP @ DUP CELL+ CSP ! +; +: -CSP ( -> ) \ ╙сЁрЄ№ єЁютхэ№ + CSP @ 1 CELLS - CSP ! +; + +: !CSP ( -> ) \ ╚эшЎшрышчшЁютрЄ№ єЁютхэ№ + SP@ +CSP ! +; + +: CSP@ ( -> A) + CSP @ 1 CELLS - @ +; +: ?CSP ( -> ) \ ╧ЁютхЁшЄ№ т√фхЁцрээюёЄ№ ёЄхър + SP@ CSP@ <> 37 ?ERROR ( ABORT" ╤сющ ёЄхър яю CSP !") + -CSP +; diff --git a/programs/develop/SPForth/devel/~mak/lib/locals-ans2.f b/programs/develop/SPForth/devel/~mak/lib/locals-ans2.f new file mode 100644 index 0000000000..622a395373 --- /dev/null +++ b/programs/develop/SPForth/devel/~mak/lib/locals-ans2.f @@ -0,0 +1,39 @@ +\ $Id: locals-ans.f,v 1.2 2003/01/10 16:44:16 anfilat Exp $ +\ Work in spf3, spf4 +\ LOCALS ёЄрэфрЁЄр 94. +\ ╬с· тыхэшх - +\ LOCALS| n1 n2 n3 | +REQUIRE { ~mak/lib/locals4.f + +GET-CURRENT ALSO vocLocalsSupport_M DEFINITIONS + +: CompileANSLocInit + uPrevCurrent @ SET-CURRENT + uLocalsUCnt @ ?DUP + IF NEGATE CELLS R_ALLOT, + THEN + uLocalsCnt @ uLocalsUCnt @ - ?DUP + IF DUP CELLS NEGATE uAddDepth +! + DUP 0 + DO uLocalsCnt @ uLocalsUCnt @ - I - 1- + LIT, S" PICK >R " EVALUATE LOOP + 0 DO POSTPONE DROP LOOP + THEN +;; + + +SET-CURRENT + +: LOCALS| + LocalsStartup + BEGIN + BL PSKIP PeekChar + [CHAR] | <> + WHILE + CREATE LocalsDoes@ IMMEDIATE + REPEAT + [CHAR] | PARSE 2DROP + CompileANSLocInit +;; IMMEDIATE + +PREVIOUS diff --git a/programs/develop/SPForth/devel/~mak/lib/locals4.f b/programs/develop/SPForth/devel/~mak/lib/locals4.f new file mode 100644 index 0000000000..dd63235b24 --- /dev/null +++ b/programs/develop/SPForth/devel/~mak/lib/locals4.f @@ -0,0 +1,401 @@ +( 28.Mar.2000 Andrey Cherezov Copyright [C] RU FIG + + Использованы идеи следующих авторов: + Ruvim Pinka; Dmitry Yakimov; Oleg Shalyopa; Yuriy Zhilovets; + Konstantin Tarasov; Michail Maximov. + + !! Работает только в SPF4. +) + +( Простое расширение СП-Форта локальными переменными. + Реализовано без использования LOCALS стандарта 94. + + Объявление временных переменных, видимых только внутри + текущего слова и ограниченных временем вызова данного + слова выполняется с помощью слова "{". Внутри определения + слова используется конструкция, подобная стековой нотации Форта + { список_инициализированных_локалов \ сп.неиниц.локалов -- что угодно } + Например: + + { a b c d \ e f -- i j } + + Или { a b c d \ e f[ EVALUATE_выражение ] -- i j } + Это значит что для переменной f[ будет выделен на стеке возвратов участок + памяти длиной n байт. Использование переменной f[ даст адрес начала этого + участка. \В стиле MPE\ + + Или { a b c d \ e [ 12 ] f -- i j } + Это значит что для переменной f будет выделен на стеке возвратов участок + памяти длиной 12 байт. Использование переменной f даст адрес начала этого + участка. + + Часть "\ сп.неиниц.локалов" может отсутствовать, например: + + { item1 item2 -- } + + Это заставляет СП-Форт автоматически выделять место в + стеке возвратов для этих переменных в момент вызова слова + и автоматически освобождать место при выходе из него. + + Обращение к таким локальным переменным - как к VALUE-переменным + по имени. Если нужен адрес переменной, то используется "^ имя" + или "AT имя". + + + Вместо \ можно использовать | + Вместо -> можно использовать TO + + Примеры: + + : TEST { a b c d \ e f -- } a . b . c . b c + -> e e . f . ^ a @ . ; + Ok + 1 2 3 4 TEST + 1 2 3 5 0 1 Ok + + : TEST { a b -- } a . b . CR 5 0 DO I . a . b . CR LOOP ; + Ok + 12 34 TEST + 12 34 + 0 12 34 + 1 12 34 + 2 12 34 + 3 12 34 + 4 12 34 + Ok + + : TEST { a b } a . b . ; + Ok + 1 2 TEST + 1 2 Ok + + : TEST { a b \ c } a . b . c . ; + Ok + 1 2 TEST + 1 2 0 Ok + + : TEST { a b -- } a . b . ; + Ok + 1 2 TEST + 1 2 Ok + + : TEST { a b \ c -- d } a . b . c . ; + Ok + 1 2 TEST + 1 2 0 Ok + + : TEST { \ a b } a . b . 1 -> a 2 -> b a . b . ; + Ok + TEST + 0 0 1 2 Ok + + Имена локальных переменных существуют в динамическом + временном словаре только в момент компиляции слова, а + после этого вычищаются и более недоступны. + + Использовать конструкцию "{ ... }" внутри одного определения можно + только один раз. + + Компиляция этой библиотеки добавляет в текущий словарь компиляции + Только два слова: + словарь "vocLocalsSupport" и "{" + Все остальные детали "спрятаны" в словаре, использовать их + не рекомендуется. +) + +REQUIRE [IF] ~MAK\CompIF.f + +C" 'DROP_V" FIND NIP 0= +[IF] ' DROP VALUE 'DROP_V +: 'DROP 'DROP_V ; +[THEN] + +C" 'DUP_V" FIND NIP 0= +[IF] ' DUP VALUE 'DUP_V +: 'DUP 'DUP_V ; +[THEN] + +C" 'DROP" FIND NIP 0= +[IF] ' DROP VALUE 'DROP +[THEN] + +C" 'DUP" FIND NIP 0= +[IF] ' DUP VALUE 'DUP +[THEN] + +\ C" '(LocalsExit)_V" FIND NIP 0= +\ [IF] ' (LocalsExit)_V VALUE '(LocalsExit)_V +\ [THEN] + +MODULE: vocLocalsSupport_M + +VARIABLE uLocalsCnt +VARIABLE uLocalsUCnt +VARIABLE uPrevCurrent +VARIABLE uAddDepth + +: LocalOffs ( n -- offs ) + 2+ CELLS uAddDepth @ + +; + +BASE @ HEX + +' RP@ 7 + @ 0xC3042444 = + +[IF] + +: R_ALLOT, + DUP SHORT? + OPT_INIT SetOP + IF 8D C, 64 C, 24 C, C, \ mov esp, offset [esp] + ELSE 8D C, A4 C, 24 C, , \ mov esp, offset [esp] + THEN + OPT_CLOSE +; + +C" MACRO," FIND NIP 0= +[IF] : MACRO, INLINE, ; +[THEN] + +: CompileLocalRec ( u -- ) + LocalOffs DUP + 'DUP MACRO, + SHORT? + OPT_INIT SetOP + IF 8D C, 44 C, 24 C, C, \ lea eax, offset [esp] + ELSE 8D C, 84 C, 24 C, , \ lea eax, offset [esp] + THEN OPT + OPT_CLOSE +; + +: CompileLocal@ ( n -- ) + 'DUP MACRO, + LocalOffs DUP SHORT? + OPT_INIT SetOP + IF 8B C, 44 C, 24 C, C, \ mov eax, offset [esp] + ELSE 8B C, 84 C, 24 C, , \ mov eax, offset [esp] + THEN OPT + OPT_CLOSE +; + +: CompileLocal! ( n -- ) + LocalOffs DUP SHORT? + OPT_INIT SetOP + IF 89 C, 44 C, 24 C, C, \ mov offset [esp], eax + ELSE 89 C, 84 C, 24 C, , \ mov offset [esp], eax + THEN OPT + OPT_CLOSE + 'DROP MACRO, +; + +\ : CompileLocal@ ( n -- ) +\ LocalOffs LIT, POSTPONE RP+@ +\ ; + + +[ELSE] + +: R_ALLOT, + ] POSTPONE LITERAL S" RP@ + RP! " EVALUATE + POSTPONE [ ; + +: CompileLocalRec ( u -- ) + LocalOffs + POSTPONE LITERAL +\ S" RP@ + " EVALUATE +; + +: CompileLocal@ ( n -- ) + CompileLocalRec + S" @ " EVALUATE +; + +: CompileLocal! ( n -- ) + CompileLocalRec + S" ! " EVALUATE +; + +[THEN] + +VARIABLE TEMP-DP + +: CompileLocalsInit + TEMP-DP @ DP ! + uPrevCurrent @ SET-CURRENT + uLocalsUCnt @ ?DUP + IF NEGATE CELLS R_ALLOT, + THEN + uLocalsCnt @ uLocalsUCnt @ - ?DUP + IF DUP CELLS NEGATE uAddDepth +! 0 DO S" >R " EVALUATE LOOP THEN + uLocalsCnt @ ?DUP + IF CELLS POSTPONE LITERAL S" >R ['] (LocalsExit) >R" EVALUATE + -2 CELLS uAddDepth +! + THEN +; + + +\ : CompileLocal@ ( n -- ) +\ LocalOffs LIT, POSTPONE RP+@ +\ ; + + +BASE ! + +WORDLIST CONSTANT widLocals@ + +CREATE TEMP-BUF 1000 ALLOT + +: LocalsStartup + GET-CURRENT uPrevCurrent ! + ALSO vocLocalsSupport_M + ALSO widLocals@ CONTEXT ! DEFINITIONS + HERE TEMP-DP ! + TEMP-BUF DP ! + widLocals@ 0! + uLocalsCnt 0! + uLocalsUCnt 0! + uAddDepth 0! +; +: LocalsCleanup + PREVIOUS PREVIOUS +; + +: ProcessLocRec ( "name" -- u ) + [CHAR] ] PARSE + STATE 0! + EVALUATE CELL 1- + CELL / \ делаем кратным 4 + -1 STATE ! +\ DUP uLocalsCnt +! + uLocalsCnt @ +; + +: CreateLocArray + [CHAR] [ PSKIP + ProcessLocRec + CREATE , + DUP uLocalsCnt +! +; + +: LocalsRecDoes@ ( -- u ) + DOES> @ CompileLocalRec +; + +: LocalsRecDoes@2 ( -- u ) + ProcessLocRec , + DUP uLocalsCnt +! + DOES> @ CompileLocalRec +; + +: LocalsDoes@ + uLocalsCnt @ , + uLocalsCnt 1+! + DOES> @ CompileLocal@ +; + +: ;; POSTPONE ; ; IMMEDIATE + + +: ^ + ' >BODY @ + CompileLocalRec +; IMMEDIATE + + +: -> ' >BODY @ CompileLocal! ; IMMEDIATE + +WARNING DUP @ SWAP 0! + +: AT + [COMPILE] ^ +; IMMEDIATE + +: TO ( "name" -- ) + >IN @ NextWord widLocals@ SEARCH-WORDLIST 1 = + IF >BODY @ CompileLocal! DROP + ELSE >IN ! [COMPILE] TO + THEN +; IMMEDIATE + +WARNING ! + +: в POSTPONE -> ; IMMEDIATE + +WARNING @ WARNING 0! +\ === +\ переопределение соответствующих слов для возможности использовать +\ временные переменные внутри цикла DO LOOP и независимо от изменения +\ содержимого стека возвратов словами >R R> +C" DO_SIZE" FIND NIP 0= +[IF] 3 CELLS CONSTANT DO_SIZE +[THEN] + + +: DO POSTPONE DO DO_SIZE uAddDepth +! ; IMMEDIATE +: ?DO POSTPONE ?DO DO_SIZE uAddDepth +! ; IMMEDIATE +: LOOP POSTPONE LOOP DO_SIZE NEGATE uAddDepth +! ; IMMEDIATE +: +LOOP POSTPONE +LOOP DO_SIZE NEGATE uAddDepth +! ; IMMEDIATE +: >R POSTPONE >R [ 1 CELLS ] LITERAL uAddDepth +! ; IMMEDIATE +: R> POSTPONE R> [ -1 CELLS ] LITERAL uAddDepth +! ; IMMEDIATE +: RDROP POSTPONE RDROP [ -1 CELLS ] LITERAL uAddDepth +! ; IMMEDIATE +: 2>R POSTPONE 2>R [ 2 CELLS ] LITERAL uAddDepth +! ; IMMEDIATE +: 2R> POSTPONE 2R> [ -2 CELLS ] LITERAL uAddDepth +! ; IMMEDIATE + +\ === + +\ uLocalsCnt @ ?DUP +\ IF CELLS RLIT, ['] (LocalsExit) RLIT, THEN + +: ; LocalsCleanup + S" ;" EVAL-WORD +; IMMEDIATE + +WARNING ! + +\ ===================================================================== + + +EXPORT + +: { + + LocalsStartup + BEGIN + BL PSKIP PeekChar DUP [CHAR] \ <> + OVER [CHAR] - <> AND + OVER [CHAR] } <> AND + OVER [CHAR] | <> AND + SWAP [CHAR] ) XOR AND + WHILE + CREATE LocalsDoes@ IMMEDIATE + REPEAT + PeekChar >IN 1+! DUP [CHAR] } <> + IF + DUP [CHAR] \ = + SWAP [CHAR] | = OR + IF + BEGIN + BL PSKIP PeekChar DUP + DUP [CHAR] - <> + SWAP [CHAR] } <> AND + SWAP [CHAR] ) XOR AND + WHILE + PeekChar [CHAR] [ = + IF CreateLocArray LocalsRecDoes@ + ELSE + CREATE LATEST DUP C@ + C@ + [CHAR] [ = + IF + LocalsRecDoes@2 + ELSE + LocalsDoes@ 1 + THEN + THEN DUP U. + uLocalsUCnt +! + IMMEDIATE + REPEAT + THEN + [CHAR] } PARSE 2DROP + ELSE DROP THEN + CompileLocalsInit +;; IMMEDIATE + +;MODULE diff --git a/programs/develop/SPForth/devel/~mak/lib/map.f b/programs/develop/SPForth/devel/~mak/lib/map.f new file mode 100644 index 0000000000..8e85a3a4b9 --- /dev/null +++ b/programs/develop/SPForth/devel/~mak/lib/map.f @@ -0,0 +1,35 @@ + +\ ~mak/want.f WANT #define + +0 VALUE M#define-CODE + +: M#define CREATE PARSE-WORD EVALUATE , + DOES> [ HERE 5 - TO M#define-CODE ] @ ; + +: Archive_ + PARSE-WORD EVALUATE + ' DUP 1+ REL@ CELL+ M#define-CODE = + IF + >BODY ! EXIT + THEN 1 THROW ; + + +: Archive \ F7_ED + BEGIN + PARSE-WORD DUP 0= + IF NIP REFILL 0= IF DROP TRUE THEN + ELSE S" size" COMPARE 0= THEN + UNTIL + REFILL DROP + BEGIN REFILL 0= IF \EOF EXIT THEN + SOURCE NIP + WHILE M#define + REPEAT + + BEGIN REFILL + WHILE SOURCE NIP 40 > + IF + ['] Archive_ CATCH DROP + THEN + REPEAT POSTPONE \ + ; diff --git a/programs/develop/SPForth/devel/~mak/lib/vt/colors.f b/programs/develop/SPForth/devel/~mak/lib/vt/colors.f new file mode 100644 index 0000000000..06a2e3bb80 --- /dev/null +++ b/programs/develop/SPForth/devel/~mak/lib/vt/colors.f @@ -0,0 +1,15 @@ + +: (ESC) 27 EMIT TYPE ; +: CLEAR S" [2J" (ESC) ; : HOME CLEAR S" [1;1H" (ESC) ; +: NORMAL S" [0m" (ESC) ; : BOLD S" [1m" (ESC) ; + +: BLACK S" [30m" (ESC) ; : RED S" [31m" (ESC) ; +: GREEN S" [32m" (ESC) ; : YELLOW S" [33m" (ESC) ; +: BLUE S" [34m" (ESC) ; : MAGENTA S" [35m" (ESC) ; +: CYAN S" [36m" (ESC) ; : WHITE S" [37m" (ESC) ; + +: ONBLACK S" [40m" (ESC) ; : ONRED S" [41m" (ESC) ; +: ONGREEN S" [42m" (ESC) ; : ONYELLOW S" [43m" (ESC) ; +: ONBLUE S" [44m" (ESC) ; : ONMAGENTA S" [45m" (ESC) ; +: ONCYAN S" [46m" (ESC) ; : ONWHITE S" [47m" (ESC) ; + diff --git a/programs/develop/SPForth/devel/~mak/listing3.f b/programs/develop/SPForth/devel/~mak/listing3.f new file mode 100644 index 0000000000..f9dbcd13de --- /dev/null +++ b/programs/develop/SPForth/devel/~mak/listing3.f @@ -0,0 +1,161 @@ + +REQUIRE PLACE ~mak/place.f +REQUIRE [IF] ~mak/CompIF.f +REQUIRE DISASSEMBLER lib/ext/disasm.f + +C" STREAM-FILE" FIND NIP +[IF] +: FROM_SOURCE-ID SOURCE-ID STREAM-FILE ; +: TO_SOURCE-ID FILE>RSTREAM TO SOURCE-ID ; +[ELSE] +: FROM_SOURCE-ID SOURCE-ID ; +: TO_SOURCE-ID TO SOURCE-ID ; +[THEN] + +: INST [ ALSO DISASSEMBLER ] INST + [ PREVIOUS ] ; + +C" -CELL" FIND NIP 0= +[IF] -1 CELLS CONSTANT -CELL +[THEN] + +CREATE FILE_NAME_L 120 ALLOT + +CREATE HERE-TAB 5000 CELLS ALLOT +HERE CELL- CONSTANT HERE-TAB-MAX +VARIABLE HERE-TAB-CUR +HERE-TAB HERE-TAB-CUR ! +VARIABLE S_STATE + +: HERE-TAB-CUR+ + HERE-TAB-CUR @ CELL+ HERE-TAB-MAX UMIN + HERE-TAB-CUR + ! +\ [ .( XXXX) DIS-OPT KEY DROP ] + ; + +: HERE-TO-TAB DP @ HERE-TAB-CUR @ ! HERE-TAB-CUR+ ; + + +CREATE SHERE-TAB 800 CELLS ALLOT +HERE CELL- CONSTANT SHERE-TAB-MAX +VARIABLE SHERE-TAB-CUR +SHERE-TAB SHERE-TAB-CUR ! + +: SHERE-TAB-CUR+ + SHERE-TAB-CUR @ CELL+ SHERE-TAB-MAX UMIN + SHERE-TAB-CUR ! ; + +: SHERE-TO-TAB DP @ SHERE-TAB-CUR @ ! SHERE-TAB-CUR+ ; + +80 VALUE DUMP_MAX + +: MDUMP ( addr u -- ) + DUP 0= IF 2DROP EXIT THEN + BASE @ >R HEX + BEGIN + CR OVER BASE-ADDR - 4 .0 SPACE + 2DUP 0x10 MIN + 2DUP 0 DO I 4 MOD 0= IF SPACE THEN + DUP C@ 2 .0 SPACE 1+ + LOOP DROP + DUP >R PTYPE + R@ - SWAP R> + SWAP DUP 0= + UNTIL 2DROP + R> BASE ! CR +; + +: .LIST ( ADDR ADDR1 -- ADDR1' ) + S_STATE @ + IF + SWAP + BEGIN 2DUP U> + WHILE INST CR + REPEAT NIP + ELSE + TUCK + OVER - DUP + IF DUP DUMP_MAX U> + + IF >R DUMP_MAX DUMP + CR DUP U. R> DUMP_MAX - U. ." bytes" + ELSE MDUMP + THEN CR + ELSE 2DROP + THEN + THEN +; +VECT INCLUDED$ + +' INCLUDED TO INCLUDED$ +: INCLUDED_L + [']
 >BODY @ >R
+   ['] HERE-TO-TAB TO 
+     HERE-TAB  HERE-TAB-CUR !
+    SHERE-TAB SHERE-TAB-CUR ! 
+  2DUP 2>R  INCLUDED$  2R>  R> TO 
+ -1 SHERE-TAB-CUR @ !  SHERE-TAB-CUR+
+    HERE-TO-TAB 
+    HERE-TO-TAB       -CELL HERE-TAB-CUR +!
+    HERE-TAB-CUR @ @  -CELL HERE-TAB-CUR +!
+    BEGIN HERE-TAB-CUR @ HERE-TAB <>
+    WHILE  HERE-TAB-CUR @ @ UMIN DUP HERE-TAB-CUR @ !
+          -CELL HERE-TAB-CUR +!
+    REPEAT DROP
+    S_STATE 0!
+    SHERE-TAB SHERE-TAB-CUR ! 
+
+    2DUP FILE_NAME_L  PLACE
+  S" _L" FILE_NAME_L +PLACE  
+  R/O OPEN-FILE  THROW
+  FILE_NAME_L COUNT 2DUP + 0!
+  W/O CREATE-FILE THROW
+
+  TIB >R >IN @ >R #TIB @ >R SOURCE-ID >R BLK @ >R CURSTR @ >R
+  H-STDOUT >R  BASE @ >R HEX
+  C/L 2 + ALLOCATE THROW TO TIB  BLK 0!
+  TO H-STDOUT
+  ." ZZ=" DUP .
+  TO_SOURCE-ID
+  CURSTR 0! HERE-TAB-CUR @ @
+  BEGIN    REFILL
+  WHILE
+        SOURCE TYPE CR
+        BEGIN  SHERE-TAB-CUR @ @ HERE-TAB-CUR @ CELL+ @ U<
+        WHILE  SHERE-TAB-CUR @ @ .LIST   SHERE-TAB-CUR+
+                 S_STATE @ INVERT S_STATE !
+        REPEAT  HERE-TAB-CUR+ HERE-TAB-CUR @ @ .LIST
+  REPEAT  DROP
+  TIB FREE THROW
+  FROM_SOURCE-ID
+  ." ZZ=" DUP .
+ CLOSE-FILE THROW ( ю°шсър чръЁ√Єш  Їрщыр )
+  H-STDOUT CLOSE-FILE THROW ( ю°шсър чръЁ√Єш  Їрщыр )
+  R> BASE ! R> TO H-STDOUT
+  R> CURSTR ! R> BLK ! R> TO SOURCE-ID R> #TIB ! R> >IN ! R> TO TIB
+;
+
+: REQUIRED_L ( waddr wu laddr lu -- )
+  2SWAP SFIND
+  IF DROP 2DROP EXIT
+  ELSE 2DROP INCLUDED_L THEN
+;
+
+[UNDEFINED] PSKIP [IF]
+  : PSKIP SKIP ;
+[THEN]
+
+: REQUIRE_L ( "word" "libpath" -- )
+  BL PSKIP BL PARSE
+  BL PSKIP BL PARSE 2DUP + 0 SWAP C!
+  REQUIRED_L
+;
+
+: : : SHERE-TO-TAB ;
+
+: ; POSTPONE ; SHERE-TO-TAB ; IMMEDIATE
+
+: SSSS
+     HERE-TAB  HERE-TAB-CUR !
+    SHERE-TAB SHERE-TAB-CUR ! 
+;
diff --git a/programs/develop/SPForth/devel/~mak/temps4.f b/programs/develop/SPForth/devel/~mak/temps4.f
new file mode 100644
index 0000000000..c38ca593fd
--- /dev/null
+++ b/programs/develop/SPForth/devel/~mak/temps4.f
@@ -0,0 +1,198 @@
+
+\ Temporary variables
+( 24.09.1997 Черезов А. )
+\ April 12th, 2000 - 14:44 Mihail Maksimov
+\ добавил конструкции !! ... !! и >| ... | , ликвидировал |DOES
+
+\ оптимизированный вариант. переменные можно использовать и внутри DO LOOP
+( 10.06.1999 Ruvim Pinka, idea - Mihail Maksimov )
+
+( Простое расширение СП-Форта локальными переменными.
+  Реализовано без использования LOCALS стандарта 94.
+
+  Объявление временных переменных, видимых только внутри
+  текущего слова и ограниченных временем вызова данного
+  слова выполняется с помощью слова "|" аналогично
+  Смолтолку: внутри определения слова используется
+  конструкция
+  | список локальных переменных через пробел |
+
+  Это заставляет СП-Форт автоматически выделять место в
+  стеке возвратов для этих переменных в момент вызова слова
+  и автоматически освобождать место при выходе из него.
+
+  Обращение к таким локальным переменным - как к обычным
+  переменным по имени и следующими @ и !
+  Имена локальных переменных существуют в динамическом
+  словаре TEMP-NAMES только в момент компиляции слова, а
+  после этого вычищаются и более недоступны.
+)
+\ Инициализация временных переменных значениями, лежащими на
+\ стеке (например, входными параметрами), возможна "списком"
+\ с помощью конструкции
+\ (( имена инициализируемых локальных переменных ))
+\ Имена должны быть ранее объявлены в слове с помощью | ... |
+
+( Использование локальных переменных внутри циклов DO LOOP
+  невозможно по причине, описанной в стандарте 94.
+
+  При желании использовать локальные переменные в стиле VALUE-переменных
+  можно использовать конструкцию
+  || список локальных переменных через пробел ||
+  Имена этих переменных будут давать не адрес, а свое значение.
+  Соответственно присвоение значений будет осуществляться конструкцией
+  -> имя
+  по аналогии с присвоением значений VALUE-переменным словом TO.
+)
+
+VARIABLE TEMP-CNT
+WORDLIST CONSTANT TEMP-NAMES
+
+: INIT-TEMP-NAMES
+  ALSO TEMP-NAMES CONTEXT !
+  TEMP-CNT 0!
+;
+: DEL-NAMES ( A -- )
+  DUP>R
+  @
+  BEGIN
+    DUP 0<>
+  WHILE
+    DUP CDR SWAP 5 - FREE THROW
+  REPEAT DROP
+  R> 0!
+;
+: DEL-TEMP-NAMES
+  TEMP-NAMES DEL-NAMES
+;
+HEX
+: COMPIL, ( A -- )
+  0E8 DOES>A @ C! DOES>A 1+!              \ машинная команда CALL
+  DOES>A @ CELL+ - DOES>A @ !
+  DOES>A @ 1- DOES>A !
+;
+DECIMAL
+C" LAST-HERE" FIND NIP
+[IF] 
+  : TEMP-DOES ( N -- ) ( -- ADDR )
+    ['] DUP MACRO,
+    0x8D C, 0x44 C, 0x24 C, C,  \  LEA     EAX , X [ESP]
+    HERE TO LAST-HERE  \  разрешено оптимизировать
+    ;
+[ELSE]
+  : TEMP-DOES ( N -- ) ( -- ADDR )
+     POSTPONE RP@ LIT, POSTPONE +  ;
+[THEN]
+
+: |TEMP-DOES ( N -- ) ( -- VALUE )
+  TEMP-DOES ['] @ COMPILE,
+;
+: |TEMP-DOES! ( N --  ) ( X -- )
+  TEMP-DOES ['] ! COMPILE,
+;
+
+VARIABLE  add_depth   add_depth 0!   
+
+\ глубина в стеке возвратов до начала переменных
+
+: !TEMP-CREATE ( addr u -- )
+  DUP 20 + ALLOCATE THROW >R
+  R@ CELL+ CHAR+ 2DUP C!
+  CHAR+ SWAP MOVE ( name )
+  TEMP-NAMES @
+  R@ CELL+ CHAR+ TEMP-NAMES ! ( latest )
+  R@ CELL+ CHAR+ COUNT + DUP>R ! ( link )
+  R> CELL+ DUP DOES>A ! R@ ! ( cfa )
+  &IMMEDIATE R> CELL+ C! ( flags )
+  ['] _CREATE-CODE COMPIL,
+  TEMP-CNT @ DOES>A @ 5 + !
+  TEMP-CNT 1+!
+  POSTPONE >R   DOES> @  2 +  CELLS  add_depth @ +  |TEMP-DOES ;
+
+: TEMP-CREATE ( addr u -- )
+ !TEMP-CREATE   DOES> @  2 +  CELLS  add_depth @ +   TEMP-DOES ;
+
+: ->            ' 5 + @  2 +  CELLS  add_depth @ +  |TEMP-DOES!
+; IMMEDIATE
+
+: |DROP    R> RP@ + RP! ;
+
+' |DROP VALUE '|DROP
+
+: !!!!;  ( N N1 -- )
+  DROP  TEMP-CNT @ CELLS LIT,    POSTPONE >R
+  DROP            '|DROP LIT,    POSTPONE >R ;
+
+: !!
+  BEGIN  NextWord 2DUP S" !!" COMPARE 0<>
+  WHILE          !TEMP-CREATE
+  REPEAT  !!!!;  ; IMMEDIATE
+
+: ||
+  BEGIN  NextWord 2DUP S" ||" COMPARE 0<>
+  WHILE  0 LIT,  !TEMP-CREATE
+  REPEAT !!!!;   ; IMMEDIATE
+
+: |
+  BEGIN  NextWord 2DUP S" |"  COMPARE 0<>
+  WHILE  0 LIT,   TEMP-CREATE
+  REPEAT !!!!;   ; IMMEDIATE
+
+: >|
+  BEGIN  NextWord 2DUP S" |"  COMPARE 0<>
+  WHILE           TEMP-CREATE
+  REPEAT !!!!;   ; IMMEDIATE
+
+: ((
+  0
+  BEGIN
+    BL WORD DUP COUNT S" ))" COMPARE 0<>
+  WHILE
+    FIND IF >R 1+ ELSE 5012 THROW THEN
+  REPEAT DROP
+  BEGIN
+    DUP 0<>
+  WHILE
+\    R> EXECUTE POSTPONE !     ( исправлено для поддержки || )
+    R> 5 + @    2 + CELLS add_depth @ + 
+    |TEMP-DOES!
+    1-
+  REPEAT DROP
+; IMMEDIATE
+
+
+\ ===
+\ переопределение соответствующих слов для возможности использовать
+\ временные переменные внутри  цикла DO LOOP  и независимо от изменения
+\ содержимого стека возвратов  словами   >R   R>
+
+
+: DO     POSTPONE DO     [  3 CELLS ] LITERAL  add_depth +!
+; IMMEDIATE
+
+: LOOP   POSTPONE LOOP   [ -3 CELLS ] LITERAL  add_depth +!
+; IMMEDIATE
+
+: +LOOP  POSTPONE +LOOP  [ -3 CELLS ] LITERAL  add_depth +!
+; IMMEDIATE
+
+: >R     POSTPONE >R     [  1 CELLS ] LITERAL  add_depth +!
+; IMMEDIATE
+
+: R>     POSTPONE R>     [ -1 CELLS ] LITERAL  add_depth +!
+; IMMEDIATE
+
+\ ===
+
+
+: :: : ;
+
+: : ( -- )
+  : INIT-TEMP-NAMES
+;
+:: ; ( -- )
+  DEL-TEMP-NAMES PREVIOUS
+  POSTPONE ;
+  add_depth 0!      \ на всякий случай ;)
+; IMMEDIATE
+
diff --git a/programs/develop/SPForth/devel/~mak/utils.f b/programs/develop/SPForth/devel/~mak/utils.f
new file mode 100644
index 0000000000..b083cc101b
--- /dev/null
+++ b/programs/develop/SPForth/devel/~mak/utils.f
@@ -0,0 +1,45 @@
+ 
+REQUIRE [IF] ~MAK\CompIF.f
+
+C" H." FIND NIP 0=
+[IF]
+ : H.  BASE @ HEX SWAP U. BASE !  ;
+\ OP1
+[THEN]
+
+C" FIELD" FIND NIP 0=
+[IF] : FIELD -- ;
+[THEN]
+
+C" BETWEEN" FIND NIP 0=
+[IF] : BETWEEN 1+ WITHIN ;
+[THEN]
+
+C" ?EXIT" FIND NIP 0=
+[IF]
+ : ?EXIT POSTPONE IF
+         POSTPONE EXIT
+         POSTPONE THEN ; IMMEDIATE
+\ : ?EXIT  IF RDROP THEN ;
+[THEN]
+
+C" DUP>R" FIND NIP 0=
+[IF]
+
+: DUP>R POSTPONE DUP
+        POSTPONE >R   ; IMMEDIATE
+[THEN]
+
+C" >NAME" FIND NIP 0=
+[IF] : >NAME  4 - DUP BEGIN 1- 2DUP COUNT + U< 0= UNTIL NIP ;
+[THEN]
+
+C" 2," FIND NIP 0=
+[IF] 
+ : 2,  ( D -- )
+ HERE 2! 2 CELLS ALLOT ;
+[THEN]
+
+C" C>S" FIND NIP 0=
+[IF] : C>S ( c -- n )  0xFF AND [ 0x7F INVERT ] LITERAL XOR 0x80 + ;
+[THEN]
diff --git a/programs/develop/SPForth/devel/~mak/utils_.f b/programs/develop/SPForth/devel/~mak/utils_.f
new file mode 100644
index 0000000000..60bda66dcc
--- /dev/null
+++ b/programs/develop/SPForth/devel/~mak/utils_.f
@@ -0,0 +1,510 @@
+CR .( UTILS_.F)
+REQUIRE [IF] ~MAK\CompIF.f
+\ WINAPI: GetCurrentDirectoryA         KERNEL32.DLL
+\ WINAPI: MoveFileA                    KERNEL32.DLL
+
+: DEFER VECT ;
+
+80 CONSTANT MAXSTRING
+
+C" PLACE" FIND NIP 0=
+[IF]
+
+255 CONSTANT MAXCOUNTED   \ maximum length of contents of a counted string
+
+
+: "CLIP"        ( a1 n1 -- a1 n1' )   \ clip a string to between 0 and MAXCOUNTED
+                MAXCOUNTED MIN 0 MAX ;
+
+: PLACE         ( addr len dest -- )
+                SWAP "CLIP" SWAP
+                2DUP 2>R
+                CHAR+ SWAP MOVE
+                2R> C! ;
+
+: +PLACE        ( addr len dest -- ) \ append string addr,len to counted
+                                     \ string dest
+                >R "CLIP" MAXCOUNTED  R@ C@ -  MIN R>
+                                        \ clip total to MAXCOUNTED string
+                2DUP 2>R
+
+                COUNT CHARS + SWAP MOVE
+                2R> +! ;
+
+: C+PLACE       ( c1 a1 -- )    \ append char c1 to the counted string at a1
+                DUP 1+! COUNT + 1- C! ;
+[THEN]
+: OFF     0! ;
+
+: BLANK         ( addr len -- )     \ fill addr for len with spaces (blanks)
+                BL FILL ;
+
+: START/STOP   ( -- )
+                KEY?
+                IF KEY  27 = IF ABORT THEN
+                THEN ;
+
+: .S            ( -- )
+     S0 @ SP@ CELL+ 2DUP =
+     IF  ." EMPTY"  2DROP 
+     ELSE DO I @ . START/STOP 1 CELLS +LOOP
+     THEN ;
+
+C" TUCK" FIND NIP 0=
+[IF]
+: TUCK       ( n1 n2 -- n2 n1 n2 ) \ copy top data stack to under second item
+   SWAP OVER ;
+[THEN]
+
+
+128 CONSTANT SPCS-MAX  ( optimization for SPACES )
+
+CREATE SPCS
+       SPCS-MAX ALLOT
+ SPCS  SPCS-MAX BLANK
+
+: (D.)          ( d -- addr len )       TUCK DABS  <# #S ROT SIGN #> ;
+
+C" WITHIN" FIND NIP 0=
+[IF]
+: WITHIN  ( n1 low high -- f1 ) \ f1=true if ((n1 >= low) & (n1 < high))
+  OVER - >R - R> U< ;
+[THEN]
+: BETWEEN 1+ WITHIN ;
+
+80 VALUE COLS
+
+: H.R           ( n1 n2 -- )    \ display n1 as a hex number right
+                                \ justified in a field of n2 characters
+                BASE @ >R HEX >R
+                0 <# #S #> R> OVER - SPACES TYPE
+                R> BASE ! ;
+
+: H.N           ( n1 n2 -- )    \ display n1 as a HEX number of n2 digits
+                BASE @ >R HEX >R
+                0 <# R> 0 ?DO # LOOP #> TYPE
+                R> BASE ! ;
+: COL ( N -- )
+      DROP 9 EMIT ;
+
+: UPC [ CHAR A CHAR a XOR INVERT ] LITERAL AND ;
+
+: 2,  ( D -- )
+  HERE 2! 2 CELLS ALLOT ;
+
+: VOC-STATE,
+   CONTEXT @ ,
+   CONTEXT @ @ ,
+  VOC-LIST @ VOC-LIST 2,
+   CURRENT @  CURRENT 2,
+      LAST @     LAST 2,
+  VOC-LIST @
+  BEGIN  ?DUP
+  WHILE  DUP CELL+ DUP @ SWAP 2, @
+  REPEAT
+;
+: INCLUDE BL WORD COUNT INCLUDED ;
+
+: CELLS+ CELLS + ;
+
+: ? @ . ;
+: DEFINED       ( -- str 0 | cfa flag )
+                BL WORD FIND ;
+                
+: [IFUNDEF] DEFINED NIP 0= POSTPONE [IF] ;
+\ C" CELL-"  FIND NIP 0=
+1
+[IF] : CELL- 1 CELLS - ; 
+[THEN]
+
+\ C" LCOUNT" FIND NIP 0=
+1
+[IF] : LCOUNT   CELL+ DUP CELL- @ ; 
+[THEN]
+: INCR   1 SWAP +! ;
+: FIELD+ -- ;
+0 [IF]
+: CUR_DIR PAD 256 GetCurrentDirectoryA PAD SWAP  ;
+CREATE FIRST-PATH-BUF CUR_DIR NIP 1+ ALLOT
+CUR_DIR  FIRST-PATH-BUF PLACE
+: FIRST-PATH" FIRST-PATH-BUF COUNT ;
+: RENAME-FILE ( adr1 len adr2 len -- ior )
+   4DUP + DUP @ 2>R + DUP @ 2>R
+   4DUP + 0! + 0!
+   DROP NIP SWAP MoveFileA
+   2R> SWAP !  2R> SWAP !
+;
+
+[THEN]
+: FILE-APPEND   ( fileid -- ior )
+     DUP >R  FILE-SIZE DROP
+          R> RESIZE-FILE  ;
+
+C" U>" FIND NIP 0=
+[IF]
+: U> ( U1 U2  -- FLAG )
+     SWAP U< ;
+[THEN]
+
+C" FOLLOWER" FIND NIP
+[IF]
+: 2,  ( D -- )
+  HERE 2! 2 CELLS ALLOT ;
+
+: VOC-STATE,
+   CONTEXT @ ,
+   CONTEXT @ @ ,
+  VOC-LIST @ VOC-LIST 2,
+   CURRENT @  CURRENT 2,
+      LAST @     LAST 2,
+  VOC-LIST @
+  BEGIN  ?DUP
+  WHILE  DUP CELL+ DUP @ SWAP 2, @
+  REPEAT
+;
+
+: MARKER, ( -- ADDR )
+  HERE
+  VOC-STATE,
+  FOLLOWER @ FOLLOWER 2,
+  HERE  4 CELLS + DP 2,  0. 2,
+;
+: MARKER! ( ADDR -- )
+   DUP @ CONTEXT ! CELL+
+   DUP @ CONTEXT @ ! CELL+
+   BEGIN  DUP 2@  DUP
+   WHILE ! 2 CELLS +
+   REPEAT 2DROP DROP ;
+[ELSE]
+: MARKER ( "name" -- ) \ 94 CORE EXT
+\ ╧ЁюяєёЄшЄ№ тхфє∙шх яЁюсхы√. ┬√фхышЄ№ name, юуЁрэшўхээюх яЁюсхырьш.
+\ ╤ючфрЄ№ юяЁхфхыхэшх ё ёхьрэЄшъющ т√яюыэхэш , юяшёрээющ эшцх.
+\ name ┬√яюыэхэшх: ( -- )
+\ ┬юёёЄрэютшЄ№ ЁрёяЁхфхыхэшх ярь Єш ёыютрЁ  ш єърчрЄхыш яюЁ фър яюшёър
+\ ъ ёюёЄю эш■, ъюЄюЁюх юэш шьхыш яхЁхф юяЁхфхыхэшхь name. ╙сЁрЄ№ 
+\ юяЁхфхыхэшх name ш тёх яюёыхфє■∙шх юяЁхфхыхэш . ═х ЄЁхсєхЄё  
+\ юс чрЄхы№эю тюёёЄрэртыштрЄ№ ы■с√х юёЄрт°шхё  ёЄЁєъЄєЁ√, ъюЄюЁ√х 
+\ ьюуєЄ с√Є№ ёт чрэ√ ё єфрыхээ√ьш юяЁхфхыхэш ьш шыш юётюсюцфхээ√ь 
+\ яЁюёЄЁрэёЄтюь фрээ√ї. ═шърър  фЁєур  ъюэЄхъёЄєры№эр  шэЇюЁьрЎш , 
+\ ъръ юёэютрэшх ёшёЄхь√ ёўшёыхэш , эх шчьхэ хЄё .
+  HERE
+\  [C]HERE , [E]HERE ,
+  GET-CURRENT ,
+  GET-ORDER DUP , 0 ?DO DUP , @ , LOOP
+  CREATE ,
+  DOES> @ DUP \ ONLY
+\  DUP @ [C]DP ! CELL+
+\  DUP @ [E]DP ! CELL+
+  DUP @ SET-CURRENT CELL+
+  DUP @ >R R@ CELLS 2* + 1 CELLS - R@ 0
+  ?DO DUP DUP @ SWAP CELL+ @ OVER ! SWAP 2 CELLS - LOOP
+  DROP R> SET-ORDER
+  DP !
+;
+
+[THEN]
+
+C" BODY>" FIND NIP 0=
+[IF] : BODY> 5 - ;
+[THEN]
+
+C" >NAME" FIND NIP 0=
+[IF] : >NAME  4 - DUP BEGIN 1- 2DUP COUNT + U< 0= UNTIL NIP ;
+[THEN]
+
+C" CELL/" FIND NIP 0=
+  [IF] : CELL/ ( N - N1 )  2 RSHIFT ;
+  [THEN]
+
+C" IMAGE-BEGIN" FIND NIP
+[IF]
+: ?NAME ( ADDR - FLAG )
+        DUP IMAGE-BEGIN U>
+        OVER HERE       U< AND
+        IF  DUP >NAME COUNT + CELL+ =
+        ELSE DROP FALSE
+        THEN ;
+[THEN]
+
+H-STDOUT CONSTANT FORTH-OUT
+
+: FORTH-IO
+   FORTH-OUT H-STDOUT <> 
+   IF  H-STDOUT CLOSE-FILE DROP
+       FORTH-OUT TO H-STDOUT
+   THEN
+;
+: H. BASE @ HEX SWAP U. BASE ! ;
+: 3DROP DROP 2DROP ;
+: 4DUP 2OVER 2OVER ;
+: 0.0 0 DUP ;
+: IS POSTPONE TO ; IMMEDIATE
+
+C" -ROT" FIND NIP 0=
+[IF] : -ROT ROT ROT ;
+[THEN]
+
+
+: SCAN ( adr len char -- adr' len' )
+\ Scan for char through addr for len, returning addr' and len' of char.
+        >R 2DUP R> -ROT
+        OVER + SWAP
+        ?DO DUP I C@ =
+                IF LEAVE
+                ELSE >R 1 -1 D+ R>
+                THEN
+        LOOP DROP ;
+
+: SSKIP ( adr len char -- adr' len' )
+\ Skip char through addr for len, returning addr' and len' of char+1.
+        >R 2DUP R> -ROT
+        OVER + SWAP
+        ?DO DUP I C@ <>
+                IF LEAVE
+                ELSE >R 1 -1 D+ R>
+                THEN
+        LOOP DROP ;
+
+1 CELLS CONSTANT CELL
+
+C" LSCAN" FIND NIP 0=
+[IF]
+: LSCAN ( adr len long -- adr' len' )
+\ Scan for char through addr for len, returning addr' and len' of char.
+        >R 2DUP CELLS R> -ROT   \ adr len long adr len
+        OVER + SWAP       \ adr len long adr+len adr
+        ?DO DUP I @ =
+                IF LEAVE
+                ELSE >R 1- >R CELL+ R> R>
+                THEN CELL
+       +LOOP DROP ;
+[THEN]
+
+C" /STRING" FIND NIP 0=
+[IF] : /STRING DUP >R - SWAP R> + SWAP ;
+[THEN]
+
+: "TO-PATHEND"  ( a1 n1 --- a2 n2 )     \ return a2 and count=n1 of filename
+                OVER 1+ C@ [CHAR] : =   \ second char is ':'
+                OVER 2 > AND            \ and name is longer than two characters
+                IF      2 /STRING       \ then remove first two characters
+                THEN                    \ now scan to end of last '\' in filename
+                BEGIN   2DUP [CHAR] \ SCAN ?DUP
+                WHILE   2SWAP 2DROP 1 /STRING
+                REPEAT  DROP ;
+
+: ON TRUE SWAP ! ;
+C" -ROT" FIND NIP 0=
+[IF] : -ROT ROT ROT ;
+[THEN]
+
+C" BOUNDS" FIND NIP 0=
+[IF] : BOUNDS OVER + SWAP ;
+[THEN]
+: >= < INVERT ;
+: 4DROP 2DROP 2DROP ;
+
+C" RECURSE" FIND NIP 0=
+[IF]
+: RECURSE       ( -- )          \ cause current definition to execute itself
+                ?COMP  LAST @ NAME> COMPILE, ; IMMEDIATE
+[THEN]
+C" DUP>R" FIND NIP 0=
+[IF] : DUP>R POSTPONE DUP POSTPONE >R ; IMMEDIATE
+[THEN]
+
+C" PICK" FIND NIP 0=
+[IF]
+: PICK ( n -- n' )
+  1+ CELLS SP@ + @ ;
+[THEN]
+
+C" ROLL" FIND NIP 0=
+[IF]
+
+: ROLL          ( n1 n2 .. nk k -- n2 n3 .. nk n1 )
+\  Rotate k values on the stack, bringing the deepest to the top.
+\   ?DUP IF 1- SWAP >R RECURSE R> SWAP THEN ;
+     DUP>R PICK SP@ DUP CELL+ R> 1+ CELLS MOVE DROP  ;
+[THEN]
+
+C" AHEAD" FIND NIP 0=
+[IF]
+: AHEAD POSTPONE FALSE POSTPONE IF ; IMMEDIATE
+[THEN]
+
+C" NOT" FIND NIP 0=
+[IF] : NOT 0= ;
+[THEN]
+
+C" ?EXIT" FIND NIP 0=
+[IF]
+ : ?EXIT POSTPONE IF
+         POSTPONE EXIT
+         POSTPONE THEN ; IMMEDIATE
+\ : ?EXIT  IF RDROP THEN ;
+[THEN]
+
+: BEEP 7 EMIT ;
+
+16 CONSTANT #VOCS 
+-1 CELLS CONSTANT -CELL
+C" D2*" FIND NIP 0=
+[IF] : D2* 2DUP D+ ;
+[THEN]
+: ,"  [CHAR] " WORD C@ 1+ ALLOT 0 C, ;
+: TAB 9 EMIT ;
+
+: (D.)          ( d -- addr len )       TUCK DABS  <# #S ROT SIGN #> ;
+: D.R           ( d w -- )              >R (D.) R> OVER - SPACES TYPE ;
+: U.R           ( u w -- )              0 SWAP D.R ;
+: $  SOURCE TYPE CR ; IMMEDIATE
+: +NULL         ( a1 -- )       \ append a NULL just beyond the counted chars
+                COUNT + 0 SWAP C! ;
+
+C" CELLS+" FIND NIP 0=
+[IF]
+: CELLS+  CELLS + ;
+[THEN]
+
+C" +CELLS" FIND NIP 0=
+[IF]
+: +CELLS  SWAP CELLS+ ;
+[THEN]
+C" PERFORM" FIND NIP 0=
+[IF]
+: PERFORM @ EXECUTE ;
+[THEN]
+
+C" UPPER" FIND NIP 0=
+[IF]
+: UPPER ( A L -- )
+        OVER + SWAP
+        ?DO I C@ DUP [CHAR] Z U>
+           IF  0xDF AND
+           THEN  I C!
+        LOOP ;
+[THEN]
+
+C" RESET-STACKS" FIND NIP 0=
+[IF]
+: RESET-STACKS  S0 @ SP! ;
+[THEN]
+C" D-" FIND NIP 0=
+[IF]
+: D- ( D1 D2  -- FLAG )
+      DNEGATE D+ ;
+[THEN]
+
+C" D=" FIND NIP 0=
+[IF]
+: D= ( D1 D2  -- FLAG )
+       D- D0= ;
+[THEN]
+
+C" D<>" FIND NIP 0=
+[IF]
+: D<> ( D1 D2  -- FLAG )
+       D= INVERT ;
+[THEN]
+
+C" <=" FIND NIP 0=
+[IF]
+: <= ( D1 D2  -- FLAG )
+      > INVERT ;
+[THEN]
+
+C" UMAX" FIND NIP 0=
+[IF]
+: UMAX ( D1 D2  -- FLAG )
+   2DUP U< IF NIP ELSE DROP THEN ;
+[THEN]
+
+C" D2/" FIND NIP 0=
+[IF]
+: D2/        ( d1 -- d2 ) \ divide the double number d1 by two
+   DUP 1 AND 0x1F RSHIFT ROT 2/ OR SWAP 2/ ;
+[THEN]
+
+C" D0<" FIND NIP 0=
+[IF]
+: D0<        ( d1 -- f1 )
+\ Signed compare d1 double number with zero.  If d1 < 0, RETNurn TRUE.
+ 0< NIP ;
+[THEN]
+C" \S" FIND NIP 0=
+[IF]
+: \S            \ comment to end of file
+  BEGIN REFILL 0= UNTIL
+
+\     SOURCE-ID FILE-SIZE DROP
+\     SOURCE-ID REPOSITION-FILE DROP
+     [COMPILE] \ ; IMMEDIATE
+[THEN]
+
+\ C" NEEDS" FIND NIP 0=
+0
+[IF]
+: NEEDS
+  BL WORD FIND NIP
+  BL WORD SWAP 0=
+  IF COUNT INCLUDED
+  ELSE  DROP
+  THEN
+;
+[THEN]
+C" 0MIN" FIND NIP 0=
+[IF] : 0MIN 0 MIN ;
+[THEN]
+C" 0MAX" FIND NIP 0=
+[IF] : 0MAX 0 MIN ;
+[THEN]
+
+C" H." FIND NIP 0=
+[IF] : H. BASE @ SWAP HEX U. BASE ! ;
+[THEN]
+
+C" .HS" FIND NIP 0=
+[IF]
+: .HS ( N -- N1 )
+  BASE @ >R HEX .S R> BASE ! ;
+[THEN]
+
+
+C" MS" FIND NIP 0=
+[IF]
+C" PAUSE" FIND NIP
+  [IF] : MS ( N -- ) PAUSE ;
+  [THEN]
+[THEN]
+
+C" 0>" FIND NIP 0=
+[IF]
+: 0> ( N -- ) NEGATE 0< ;
+[THEN]
+C" CS-DUP" FIND NIP 0=
+[IF] : CS-DUP 2DUP ;
+[THEN]
+C" M_WL" FIND NIP 0=
+[IF] : M_WL  CS-DUP POSTPONE WHILE ; IMMEDIATE
+[THEN]
+
+C" AHEAD" FIND NIP 0=
+[IF] : AHEAD  ?COMP HERE BRANCH, >MARK 1 ; IMMEDIATE
+[THEN]
+
+C" CS-DUP" FIND NIP 0=
+[IF] : CS-DUP 2DUP ;
+[THEN]
+
+C" CS-!" FIND NIP 0=
+[IF] : CS-! 2! ;
+[THEN]
+
+C" CS-@" FIND NIP 0=
+[IF] : CS-@ 2@ ;
+[THEN]
+
+C" CS-CELLS" FIND NIP 0=
+[IF] : CS-CELLS CELLS 2* ;
+[THEN]
diff --git a/programs/develop/SPForth/devel/~mak/want.f b/programs/develop/SPForth/devel/~mak/want.f
new file mode 100644
index 0000000000..62b345f067
--- /dev/null
+++ b/programs/develop/SPForth/devel/~mak/want.f
@@ -0,0 +1,22 @@
+REQUIRE [IF] ~mak/CompIF.f
+REQUIRE $! ~mak\place.f
+REQUIRE [IFNDEF] ~nn\lib\ifdef.f
+
+[IFNDEF] PARSE-WORD
+: PARSE-WORD NextWord ;
+[THEN]
+
+CREATE WANT_BUFF 0x101 ALLOT
+CREATE WANT_FILE 0x101 ALLOT
+  S" ~mak\do_want.f"  WANT_FILE $!
+
+: [WANT] ( addr len -- addr len | )
+   2DUP PARSE-WORD COMPARE
+   IF POSTPONE \ EXIT THEN
+   2DROP INTERPRET \EOF ;
+
+: WANT  ( -- )
+   PARSE-WORD WANT_BUFF $!
+   WANT_FILE COUNT INCLUDED ;
+  
+   
\ No newline at end of file
diff --git a/programs/develop/SPForth/devel/~mak/~af/lib/c/zstr.f b/programs/develop/SPForth/devel/~mak/~af/lib/c/zstr.f
new file mode 100644
index 0000000000..d4a7a05dc4
--- /dev/null
+++ b/programs/develop/SPForth/devel/~mak/~af/lib/c/zstr.f
@@ -0,0 +1,75 @@
+\ $Id: zstring.f,v 1.1 2003/01/18 09:02:11 anfilat Exp $
+\ Нуль-строки. Технология взята из ~yz\common.f
+
+\ Копирует строку addr u по адресу z. В конец строки записывает 0
+: CZMOVE ( a # z --) 2DUP + >R SWAP CMOVE R> 0 SWAP C! ;
+
+: ALITERAL  R> COUNT OVER + 1+ >R ;
+
+\ VOCABULARY ZStrSupport
+\ GET-CURRENT ALSO ZStrSupport DEFINITIONS
+
+USER toadr  USER fromadr  USER counter
+: zchar ( --c/0) counter @ 1 <
+  IF 0 ELSE -1 counter +! fromadr @ C@ fromadr 1+! THEN ;
+: unchar  counter 1+! -1 fromadr +! ;
+: c> ( c--) toadr @ C!  toadr 1+! ;
+: escape ( c--c )
+  DUP [CHAR] n = IF DROP 10 ELSE
+    DUP [CHAR] r = IF DROP 13 ELSE
+      DUP [CHAR] t = IF DROP 9 ELSE
+       DUP [CHAR] b = IF DROP 8 ELSE
+        DUP [CHAR] q = IF DROP [CHAR] " ELSE
+          DUP [ CHAR 0 1- ] LITERAL OVER < SWAP [ CHAR 9 1+ ] LITERAL < AND IF
+            [CHAR] 0 -
+            BEGIN ( n) zchar DUP
+              [ CHAR 0 1- ] LITERAL OVER < SWAP [ CHAR 9 1+ ] LITERAL < AND
+            WHILE
+              ( n c) [CHAR] 0 - SWAP 10 * +
+            REPEAT
+            0<> IF unchar THEN
+          THEN
+        THEN
+       THEN
+      THEN
+    THEN
+  THEN
+;
+: ESC-CZMOVE ( a # to --)
+  toadr ! counter ! fromadr !
+  BEGIN
+    zchar
+    DUP [CHAR] \ = IF DROP zchar escape THEN
+  DUP c> 0= UNTIL ;
+
+
+\ SET-CURRENT
+
+: Z\LITERAL ( addr u -- \ a) \ в режиме интерпретации возвращает адрес
+\ буфера в динамической памяти. Буфер желательно освободить
+  STATE @ IF
+    POSTPONE ALITERAL
+    HERE 1+ DUP >R ESC-CZMOVE
+    R@ ASCIIZ> NIP 2+ DUP ALLOT 2- R> 1- C!
+  ELSE
+    DUP 1+ ALLOCATE THROW DUP >R ESC-CZMOVE R>
+  THEN
+; IMMEDIATE
+
+: ZLITERAL ( addr u -- \ a)
+  STATE @ IF
+    POSTPONE ALITERAL
+    DUP C,
+    HERE SWAP DUP ALLOT MOVE 0 C,
+  ELSE
+    DUP 1+ ALLOCATE THROW DUP >R CZMOVE R>
+  THEN
+; IMMEDIATE
+
+\ Создает строку, оканчивающуюся нулем
+: Z" ( -->") [CHAR] " PARSE [COMPILE] ZLITERAL ; IMMEDIATE
+
+\ Создает 0-строку, при этом преобразует ее по C-правилам.
+: Z\" ( -->") [CHAR] " PARSE [COMPILE] Z\LITERAL ; IMMEDIATE
+
+\ PREVIOUS
diff --git a/programs/develop/SPForth/devel/~nn/lib/ifdef.f b/programs/develop/SPForth/devel/~nn/lib/ifdef.f
new file mode 100644
index 0000000000..cd2b0f46f2
--- /dev/null
+++ b/programs/develop/SPForth/devel/~nn/lib/ifdef.f
@@ -0,0 +1,21 @@
+C" [DEFINED]" FIND NIP 0=
+[IF]
+: [DEFINED] ( -- f ) \ "name"
+  NextWord  SFIND  IF DROP TRUE ELSE 2DROP FALSE THEN
+; IMMEDIATE
+
+: [UNDEFINED]  ( -- f ) \ "name"
+  POSTPONE [DEFINED] 0=
+; IMMEDIATE
+[THEN]
+
+: [IFDEF]
+    POSTPONE [DEFINED]
+    0= IF POSTPONE [ELSE] THEN
+; IMMEDIATE
+
+: [IFNDEF]
+    POSTPONE [UNDEFINED]
+    0= IF POSTPONE [ELSE] THEN
+; IMMEDIATE
+
diff --git a/programs/develop/SPForth/gif_lite.inc b/programs/develop/SPForth/gif_lite.inc
new file mode 100644
index 0000000000..367e054e1e
--- /dev/null
+++ b/programs/develop/SPForth/gif_lite.inc
@@ -0,0 +1,318 @@
+; GIF LITE v2.0 by Willow
+; Written in pure assembler by Ivushkin Andrey aka Willow
+;
+; This include file will contain functions to handle GIF image format
+;
+; Created: August 15, 2004
+; Last changed: September 9, 2004
+
+; Change COLOR_ORDER in your program
+; if colors are displayed improperly
+
+if ~ (COLOR_ORDER in )
+; This message may not appear under MenuetOS, so watch...
+  display 'Please define COLOR_ORDER: MENUETOS or OTHER',13,10
+end if
+
+struc GIF_info
+{
+;    .NextImg rd 1 ; used internally
+    .Left   rw 1
+    .Top    rw 1
+    .Width  rw 1
+    .Height rw 1
+}
+
+_null fix 0x1000
+
+; ****************************************
+;   FUNCTION GetGIFinfo - retrieve Nth image info
+; ****************************************
+; in:
+;   esi - pointer to image list header
+;   ecx - image_index (0...img_count-1)
+;   edi - pointer to GIF_info structure to be filled
+
+; out:
+;   eax - pointer to RAW data, or 0, if error
+
+GetGIFinfo:
+    push  esi ecx edi
+    xor   eax,eax
+    jecxz .eloop
+  .lp:
+    mov   esi,[esi]
+    test  esi,esi
+    jz    .error
+    loop  .lp
+  .eloop:
+    add   esi,4
+    movsd
+    movsd
+    mov   eax,esi
+  .error:
+    pop   edi ecx esi
+    ret
+
+; ****************************************
+;   FUNCTION ReadGIF - unpacks GIF image
+; ****************************************
+; in:
+;   esi - pointer to GIF file in memory
+;   edi - pointer to output image list
+;   eax - pointer to work area (MIN 16 KB!)
+
+; out:
+;   eax - 0, all OK;
+;   eax - 1, invalid signature;
+;   eax >=8, unsupported image attributes
+;
+;   ecx - number of images
+
+ReadGIF:
+    push esi edi
+    mov  [.table_ptr],eax
+    mov  [.cur_info],edi
+    xor  eax,eax
+    mov  [.globalColor],eax
+    mov  [.img_count],eax
+    inc  eax
+    cmp  dword[esi],'GIF8'
+    jne  .er            ; signature
+    mov  ecx,[esi+0xa]
+    inc  eax
+    add  esi,0xd
+    mov  edi,esi
+    bt   ecx,7
+    jnc  .nextblock
+    mov  [.globalColor],esi
+    call .Gif_skipmap
+  .nextblock:
+    cmp  byte[edi],0x21
+    jne  .noextblock
+    inc  edi
+    cmp  byte[edi],0xf9 ; Graphic Control Ext
+    jne  .no_gc
+    add  edi,7
+    jmp  .nextblock
+  .no_gc:
+    cmp  byte[edi],0xfe ; Comment Ext
+    jne  .no_comm
+    inc  edi
+  .block_skip:
+    movzx eax,byte[edi]
+    lea  edi,[edi+eax+1]
+    cmp  byte[edi],0
+    jnz  .block_skip
+    inc  edi
+    jmp  .nextblock
+  .no_comm:
+    cmp  byte[edi],0xff ; Application Ext
+    jne  .nextblock
+    add  edi,13
+    jmp  .block_skip
+  .noextblock:
+    cmp  byte[edi],0x2c    ; image beginning
+    jne  .er
+    inc  [.img_count]
+    inc  edi
+    mov  esi,[.cur_info]
+    add  esi,4
+    xchg esi,edi
+    movsd
+    movsd
+    push edi
+    movzx ecx,word[esi]
+    inc  esi
+    bt   ecx,7
+    jc   .uselocal
+    push [.globalColor]
+    mov  edi,esi
+    jmp  .setPal
+  .uselocal:
+    call .Gif_skipmap
+    push esi
+  .setPal:
+    movzx ecx,byte[edi]
+    inc  ecx
+    mov  [.codesize],ecx
+    dec  ecx
+    pop  [.Palette]
+    lea  esi,[edi+1]
+    mov  edi,[.table_ptr]
+    xor  eax,eax
+    cld
+    lodsb               ; eax - block_count
+    add  eax,esi
+    mov  [.block_ofs],eax
+    mov  [.bit_count],8
+    mov  eax,1
+    shl  eax,cl
+    mov  [.CC],eax
+    inc  eax
+    mov  [.EOI],eax
+    lea  ecx,[eax-1]
+    mov  eax, _null shl 16
+  .filltable:
+    stosd
+    inc  eax
+    loop .filltable
+    pop  edi
+    mov  [.img_start],edi
+  .reinit:
+    mov  edx,[.EOI]
+    inc  edx
+    push [.codesize]
+    pop  [.compsize]
+    call .Gif_get_sym
+    cmp  eax,[.CC]
+    je   .reinit
+    call .Gif_output
+  .cycle:
+    movzx ebx,ax
+    call .Gif_get_sym
+    cmp  eax,edx
+    jae  .notintable
+    cmp  eax,[.CC]
+    je   .reinit
+    cmp  eax,[.EOI]
+    je   .end
+    call .Gif_output
+  .add:
+    push eax
+    mov  eax,[.table_ptr]
+    mov  [eax+edx*4],ebx
+    pop  eax
+    cmp  edx,0xFFF
+    jae  .cycle
+    inc  edx
+    bsr  ebx,edx
+    cmp  ebx,[.compsize]
+    jne  .noinc
+    inc  [.compsize]
+  .noinc:
+    jmp  .cycle
+  .notintable:
+    push eax
+    mov  eax,ebx
+    call .Gif_output
+    push ebx
+    movzx eax,bx
+    call .Gif_output
+    pop  ebx eax
+    jmp  .add
+  .er:
+    pop  edi
+    jmp  .ex
+  .end:
+    mov  eax,[.cur_info]
+    mov  [eax],edi
+    mov  [.cur_info],edi
+    add  esi,2
+    xchg esi,edi
+  .nxt:  
+    cmp  byte[edi],0
+    jnz  .continue
+    inc  edi
+    jmp  .nxt
+  .continue:  
+    cmp  byte[edi],0x3b
+    jne  .nextblock
+    xor  eax,eax
+    stosd
+    mov  ecx,[.img_count]
+  .ex:
+    pop  edi esi
+    ret
+
+.Gif_skipmap:
+; in: ecx - image descriptor, esi - pointer to colormap
+; out: edi - pointer to area after colormap
+
+    and  ecx,111b
+    inc  ecx            ; color map size
+    mov  ebx,1
+    shl  ebx,cl
+    lea  ebx,[ebx*2+ebx]
+    lea  edi,[esi+ebx]
+    ret
+
+.Gif_get_sym:
+    mov  ecx,[.compsize]
+    push ecx
+    xor  eax,eax
+  .shift:
+    ror  byte[esi],1
+    rcr  eax,1
+    dec  [.bit_count]
+    jnz  .loop1
+    inc  esi
+    cmp  esi,[.block_ofs]
+    jb   .noblock
+    push eax
+    xor  eax,eax
+    lodsb
+    test eax,eax
+    jnz  .nextbl
+    mov  eax,[.EOI]
+    sub  esi,2
+    add  esp,8
+    jmp  .exx
+  .nextbl:
+    add  eax,esi
+    mov  [.block_ofs],eax
+    pop  eax
+  .noblock:
+    mov  [.bit_count],8
+  .loop1:
+    loop .shift
+    pop  ecx
+    rol  eax,cl
+  .exx:
+    xor  ecx,ecx
+    ret
+
+.Gif_output:
+    push esi eax edx
+    mov  edx,[.table_ptr]
+  .next:
+    push word[edx+eax*4]
+    mov  ax,word[edx+eax*4+2]
+    inc  ecx
+    cmp  ax,_null
+    jnz  .next
+    shl  ebx,16
+    mov  bx,[esp]
+  .loop2:
+    pop  ax
+
+    lea  esi,[eax+eax*2]
+    add  esi,[.Palette]
+
+    if COLOR_ORDER eq MENUETOS
+        mov  esi,[esi]
+        bswap esi
+        shr  esi,8
+        mov  [edi],esi
+        add  edi,3
+    else
+        movsw
+        movsb
+    end if
+
+    loop .loop2
+    pop  edx eax esi
+    ret
+
+    .globalColor rd 1
+    .img_count rd 1
+    .cur_info rd 1        ; image table pointer
+    .img_start rd 1
+    .codesize rd 1
+    .compsize rd 1
+    .bit_count rd 1
+    .CC rd 1
+    .EOI rd 1
+    .Palette rd 1
+    .block_ofs rd 1
+    .table_ptr rd 1
diff --git a/programs/develop/SPForth/img.asm b/programs/develop/SPForth/img.asm
new file mode 100644
index 0000000000..551c09732a
--- /dev/null
+++ b/programs/develop/SPForth/img.asm
@@ -0,0 +1,29075 @@
+
+MUSEROFFS EQU 4144 
+
+AHEADER 0 ,'TST1',cfa_TST1
+
+ call cfa__SLITERALminusCODE+00H
+ DB 05H
+ DB 'WORDS',0
+ call cfa_EVALUATE+00H
+ DB 0C3H
+AHEADER 0 ,'TST',cfa_TST
+
+ call cfa__SLITERALminusCODE+00H
+ DB 010H
+ DB '/rd/1/autoload.f',0
+ call cfa_INCLUDED_+00H
+ DB 0C3H
+AHEADER 0 ,'H.',cfa_Hdot
+
+ call cfa_BASE+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ call cfa_HEX+00H
+ call cfa_Udot+00H
+ call cfa_BASE+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'EMIT',cfa_EMIT
+
+ call cfa__VECTminusCODE+00H
+ DD cfa__EMIT+00H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'TYPE',cfa_TYPE
+
+ call cfa__VECTminusCODE+00H
+ DD cfa__TYPE+00H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'INCLUDED',cfa_INCLUDED
+
+ call cfa_INCLUDED_+00H
+ DB 0C3H
+AHEADER 0 ,':NONAME',cfa_dcomaNONAME
+
+ call cfa_HERE+00H
+ call cfa__y+00H
+ call cfa_HERE+00H
+ call cfa_dcomaminusSET+09H
+ DB 0C3H
+AHEADER 0 ,'IMMEDIATE',cfa_IMMEDIATE
+
+ call cfa_LAST+00H
+ DB 08BH,00H
+ DB 08DH,040H,0F7H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_and_IMMEDIATE+00H
+ DB 0BH,045H,00H
+ DB 08BH,055H,04H
+ DB 089H,045H,04H
+ DB 08BH,0C2H
+ DB 08BH,055H,04H
+ DB 088H,010H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+ DB 0C3H
+AHEADER 0 ,'ALIGN-NOP',cfa_ALIGNminusNOP
+
+ call cfa_HERE+00H
+ DB 089H,045H,0FCH
+ DB 08BH,055H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 089H,055H,00H
+ DB 08BH,055H,0FCH
+ DB 089H,045H,0F8H
+ DB 089H,055H,0F4H
+ DB 08BH,0C8H
+ DB 08BH,045H,0F4H
+ DB 099H
+ DB 0F7H,0F9H
+ DB 089H,055H,0F4H
+ DB 08BH,045H,0F4H
+ DB 08DH,06DH,0F8H
+ DB 0BH,0C0H
+;je  cfa_ALIGNminusNOP+03FH
+ DB 074H,0DH
+ DB 0F7H,0D8H
+ DB 03H,045H,00H
+ DB 03H,045H,04H
+ DB 08DH,06DH,08H
+ DB 0EBH,06H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 0F7H,0D8H
+ DB 03H,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 090H
+ DB 08DH,06DH,0FCH
+ call cfa_FILL+00H
+ DB 0C3H
+AHEADER 0 ,'ALIGN',cfa_ALIGN
+
+ call cfa_DP+00H
+ DB 08BH,00H
+ call cfa_ALIGNED+00H
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 0F7H,0D8H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_ALLOT+00H
+ DB 0C3H
+AHEADER 0 ,'ALIGNED',cfa_ALIGNED
+
+ call cfa_ALIGNminusBYTES+00H
+ DB 08BH,00H
+ DB 0BH,0C0H
+;jne cfa_ALIGNED+024H
+ DB 075H,019H
+ DB 08DH,040H,01H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_ALIGNminusBYTES+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 08BH,055H,00H
+ DB 089H,045H,0FCH
+ DB 089H,055H,0F8H
+ DB 08BH,0C8H
+ DB 08BH,045H,0F8H
+ DB 099H
+ DB 0F7H,0F9H
+ DB 089H,055H,0F8H
+ DB 08BH,045H,0F8H
+ DB 08DH,06DH,0FCH
+ DB 0BH,0C0H
+;je  cfa_ALIGNED+04FH
+ DB 074H,0DH
+ DB 0F7H,0D8H
+ DB 03H,045H,00H
+ DB 03H,045H,04H
+ DB 08DH,06DH,08H
+ DB 0EBH,06H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'ALIGN-BYTES',cfa_ALIGNminusBYTES
+
+ call cfa__USERminusCODE+00H
+ DD reserve+0102CH
+AHEADER 0 ,'H-STDERR',cfa_HminusSTDERR
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 01H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'H-STDOUT',cfa_HminusSTDOUT
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 01H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'H-STDIN',cfa_HminusSTDIN
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 00H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'HLD',cfa_HLD
+
+ call cfa__USERminusCODE+00H
+ DD reserve+01028H
+AHEADER 0 ,'.S',cfa_dotS
+
+ call cfa_DEPTH+00H
+ call cfa_dotSN+00H
+ DB 0C3H
+AHEADER 1 ,'$"',cfa_doldtic
+
+ call cfa_Cdtic+00H
+ DB 0C3H
+AHEADER 1 ,'}}',cfa_rskrsk
+
+ call cfa_PREVIOUS+00H
+ DB 0C3H
+AHEADER 1 ,'{{',cfa_lsklsk
+
+ call cfa_DEPTH+00H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_ALSO+00H
+ call cfa_tic+00H
+ call cfa_EXECUTE+00H
+ call cfa_DEPTH+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 033H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_lsklsk+03FH
+ DB 074H,010H
+ call cfa__CONTEXT+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,';MODULE',cfa__endMODULE
+
+ call cfa_SETminusCURRENT+00H
+ call cfa_PREVIOUS+00H
+ DB 0C3H
+AHEADER 0 ,'EXPORT',cfa__EXPORT
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_SETminusCURRENT+00H
+ DB 0C3H
+AHEADER 0 ,'MODULE:',cfa_MODULEdcoma
+
+ call cfa_greatIN+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08DH,05H
+ DD cfa_tic+00H
+ call cfa_CATCH+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_MODULEdcoma+055H
+ DB 074H,033H
+ call cfa_greatIN+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_VOCABULARY+00H
+ call cfa_GETminusCURRENT+00H
+ call cfa_ALSO+00H
+ call cfa_LATEST+00H
+ DB 08BH,040H,0F8H
+ call cfa_EXECUTE+00H
+ call cfa_DEFINITIONS+00H
+ DB 0EBH,01FH
+ DB 08DH,06DH,04H
+ call cfa_GETminusCURRENT+00H
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ call cfa_ALSO+00H
+ call cfa_EXECUTE+00H
+ call cfa_DEFINITIONS+00H
+ DB 0C3H
+AHEADER 0 ,'INIT',cfa_INIT
+
+ call cfa_CURFILE+00H
+ DB 0C7H,00H
+ DD 00H
+ DB 0B8H
+ DD 01H
+ call cfa_ALIGNminusBYTES+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ DB 0C7H,00H
+ DD 00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_JP0+00H
+ call cfa_JpBuffSize+00H
+ call cfa_ERASE+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_LITcom+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 020H
+ DB 08DH,06DH,0FCH
+ call cfa_MM_SIZE+09H
+ call cfa_SETminusOPT+00H
+ call cfa_TITLE+00H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08DH,05H
+ DD cfa_AUTOEXEC+00H
+ call cfa_CATCH+00H
+ call cfa_queDUP+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_INIT+08CH
+ DB 074H,05H
+ call cfa_ERROR_DO+00H
+ DB 090H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08DH,05H
+ DD cfa_QUIT+00H
+ call cfa_CATCH+00H
+ call cfa_ERROR_DO+00H
+ DB 0EBH,0E8H
+ DB 0C3H
+AHEADER 0 ,'HH.',cfa_HHdot
+
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 010000000H
+ DB 08DH,06DH,0FCH
+ call cfa_U_divMOD+00H
+ call cfa_DIGITgreat+00H
+ call cfa_EMIT+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01000000H
+ DB 08DH,06DH,0FCH
+ call cfa_U_divMOD+00H
+ call cfa_DIGITgreat+00H
+ call cfa_EMIT+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0100000H
+ DB 08DH,06DH,0FCH
+ call cfa_U_divMOD+00H
+ call cfa_DIGITgreat+00H
+ call cfa_EMIT+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 010000H
+ DB 08DH,06DH,0FCH
+ call cfa_U_divMOD+00H
+ call cfa_DIGITgreat+00H
+ call cfa_EMIT+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01000H
+ DB 08DH,06DH,0FCH
+ call cfa_U_divMOD+00H
+ call cfa_DIGITgreat+00H
+ call cfa_EMIT+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0100H
+ DB 08DH,06DH,0FCH
+ call cfa_U_divMOD+00H
+ call cfa_DIGITgreat+00H
+ call cfa_EMIT+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 010H
+ DB 08DH,06DH,0FCH
+ call cfa_U_divMOD+00H
+ call cfa_DIGITgreat+00H
+ call cfa_EMIT+00H
+ call cfa_DIGITgreat+00H
+ call cfa_EMIT+00H
+ DB 0C3H
+AHEADER 0 ,'ERR-EXIT',cfa_ERRminusEXIT
+
+ call cfa_CATCH+00H
+ call cfa_queDUP+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_ERRminusEXIT+019H
+ DB 074H,05H
+ call cfa__BYE+00H
+ DB 0C3H
+AHEADER 0 ,'TITLE',cfa_TITLE
+
+ call cfa__SLITERALminusCODE+00H
+ DB 01EH
+ DB 'SP-FOPTH ANS FORTH 94 for fasm',0
+ call cfa_TYPE+00H
+ call cfa_CR+00H
+ call cfa__SLITERALminusCODE+00H
+ DB 024H
+ DB 'A.Cherezov  http://www.forth.org.ru/',0
+ call cfa_TYPE+00H
+ call cfa_CR+00H
+ call cfa__SLITERALminusCODE+00H
+ DB 03EH
+ DB 'M.Maksimov  http://forth.spb.su:8888/  http://www.chat.ru/~mak',0
+ call cfa_TYPE+00H
+ call cfa_CR+00H
+ call cfa__SLITERALminusCODE+00H
+ DB 01BH
+ DB 'PAGE - Clearing of a screen',0
+ call cfa_TYPE+00H
+ call cfa_CR+00H
+ call cfa__SLITERALminusCODE+00H
+ DB 01BH
+ DB 'WORDS - list of forth-words',0
+ call cfa_TYPE+00H
+ call cfa_CR+00H
+ call cfa__SLITERALminusCODE+00H
+ DB 01CH
+ DB 'BYE - KolibriOS  continuance',0
+ call cfa_TYPE+00H
+ call cfa_CR+00H
+ DB 0C3H
+AHEADER 0 ,'',cfa_lessFLOATminusINITgreat
+
+ call cfa__VECTminusCODE+00H
+ DD cfa_NOOP+00H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'MAINX',cfa_MAINX
+
+ call cfa__CREATEminusCODE+00H
+ DD 00H
+AHEADER 0 ,'REFILL',cfa_REFILL
+
+ call cfa_SOURCEminusID+00H
+ DB 03DH
+ DD 0FFFFFFFFH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_REFILL+01CH
+ DB 075H,0AH
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ DB 0EBH,02BH
+ call cfa_SOURCEminusID+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_REFILL+037H
+ DB 074H,0CH
+ call cfa_SOURCEminusID+00H
+ call cfa_FREFILL+00H
+ DB 0EBH,010H
+ call cfa_QUERY+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ DB 0C3H
+AHEADER 0 ,'FREFILL',cfa_FREFILL
+
+ call cfa_TIB+00H
+ call cfa_C_divL+00H
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,045H,04H
+ DB 089H,055H,04H
+ call cfa_READminusLINE+00H
+ call cfa_THROW+00H
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ call cfa_nTIB+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 033H,0C0H
+ DB 08DH,06DH,04H
+ call cfa_greatIN+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_CURSTR+00H
+ DB 0FFH,00H
+ DB 033H,0C0H
+ call cfa_SOURCE+00H
+ DB 03H,045H,00H
+ DB 08BH,055H,04H
+ DB 088H,010H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+ DB 0C3H
+AHEADER 0 ,'QUERY',cfa_QUERY
+
+ call cfa_TIB+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 050H
+ DB 08DH,06DH,0FCH
+ call cfa_ACCEPT+00H
+ call cfa_nTIB+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 033H,0C0H
+ DB 08DH,06DH,04H
+ call cfa_greatIN+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'CONSOLE-HANDLES',cfa_CONSOLEminusHANDLES
+
+ DB 0C3H
+AHEADER 0 ,'
',cfa_lessPREgreat
+
+ call cfa__VECTminusCODE+00H
+ DD cfa_NOOP+00H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'PSKIP',cfa_PSKIP
+
+ DB 090H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_GetChar+00H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 033H,045H,04H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 089H,045H,04H
+ DB 058H
+ DB 023H,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+ DW 0840FH
+ DD cfa_PSKIP+03AH-$-4
+ call cfa_greatIN+00H
+ DB 0FFH,00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0EBH,0C7H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'PARSE',cfa_PARSE
+
+ call cfa_CharAddr+00H
+ call cfa_greatIN+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,045H,04H
+ DB 089H,055H,04H
+ call cfa_SkipUpTo+00H
+ call cfa_greatIN+00H
+ DB 08BH,00H
+ DB 0F7H,0D8H
+ DB 03H,045H,00H
+ DB 0F7H,0D8H
+ DB 08DH,06DH,04H
+ call cfa_greatIN+00H
+ DB 0FFH,00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'PARSE-NAME',cfa_PARSEminusNAME
+
+ call cfa_PARSEminusWORD+00H
+ DB 0C3H
+AHEADER 0 ,'NextWord',cfa_NextWord
+
+ call cfa_PARSEminusWORD+00H
+ DB 0C3H
+AHEADER 0 ,'PARSE-WORD',cfa_PARSEminusWORD
+
+ call cfa_SkipDelimiters+00H
+ call cfa_ParseWord+00H
+ call cfa_greatIN+00H
+ DB 0FFH,00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'UPPER_NW',cfa_UPPER_NW
+
+ call cfa_UPPER_SCR+00H
+ call cfa_PLACE+00H
+ call cfa_UPPER_SCR+00H
+ DB 08DH,050H,01H
+ DB 089H,055H,0FCH
+ DB 0FH,0B6H,00H
+ DB 08BH,055H,0FCH
+ DB 089H,045H,0F8H
+ DB 089H,055H,0F4H
+ DB 08DH,06DH,0F4H
+ call cfa_UPPER+00H
+ DB 0C3H
+AHEADER 0 ,'UPPER',cfa_UPPER
+
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,04H
+ DB 0BBH
+ DD cfa_UPPER+055H
+ DB 03BH,045H,0F8H
+;jne cfa_UPPER+017H
+ DB 075H,05H
+ DB 08BH,045H,0FCH
+ DB 0FFH,0E3H
+ DB 053H
+ DB 0BBH
+ DD 080000000H
+ DB 02BH,05DH,0F8H
+ DB 053H
+ DB 03H,0D8H
+ DB 053H
+ DB 08BH,045H,0FCH
+ DB 08DH,050H,01H
+ DB 089H,055H,0FCH
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_UPC+00H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FFH
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0FFH,04H,024H
+;jno cfa_UPPER+027H
+ DB 071H,0D6H
+ DB 08DH,064H,024H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'UPC',cfa_UPC
+
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 05AH
+ DB 03BH,045H,0F8H
+ DB 08BH,045H,0FCH
+;jae cfa_UPC+01EH
+ DB 073H,0BH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0DFH
+ DB 023H,045H,0FCH
+ DB 0C3H
+AHEADER 0 ,'UPPER_SCR',cfa_UPPER_SCR
+
+ call cfa__CREATEminusCODE+00H
+ DD 00H
+ DB 00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H
+AHEADER 0 ,'ParseWord',cfa_ParseWord
+
+ call cfa_CharAddr+00H
+ call cfa_greatIN+00H
+ DB 08BH,00H
+ call cfa_SkipWord+00H
+ call cfa_greatIN+00H
+ DB 08BH,00H
+ DB 0F7H,0D8H
+ DB 03H,045H,00H
+ DB 0F7H,0D8H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'SkipUpTo',cfa_SkipUpTo
+
+ DB 090H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_GetChar+00H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 033H,045H,04H
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 089H,045H,04H
+ DB 058H
+ DB 023H,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+ DW 0840FH
+ DD cfa_SkipUpTo+039H-$-4
+ call cfa_greatIN+00H
+ DB 0FFH,00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0EBH,0C8H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'SkipWord',cfa_SkipWord
+
+ DB 090H
+ call cfa_OnNotDelimiter+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_SkipWord+023H-$-4
+ call cfa_greatIN+00H
+ DB 0FFH,00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0EBH,0DEH
+ DB 0C3H
+AHEADER 0 ,'OnNotDelimiter',cfa_OnNotDelimiter
+
+ call cfa_GetChar+00H
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ call cfa_IsDelimiter+00H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 023H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'SkipDelimiters',cfa_SkipDelimiters
+
+ DB 090H
+ call cfa_OnDelimiter+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_SkipDelimiters+023H-$-4
+ call cfa_greatIN+00H
+ DB 0FFH,00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0EBH,0DEH
+ call cfa_greatIN+00H
+ DB 08BH,00H
+ call cfa_greatIN_WORD+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'OnDelimiter',cfa_OnDelimiter
+
+ call cfa_GetChar+00H
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ call cfa_IsDelimiter+00H
+ DB 023H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'GetChar',cfa_GetChar
+
+ call cfa_EndOfChunk+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_GetChar+01EH
+ DB 074H,0FH
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_FALSE+00H
+ DB 0EBH,0AH
+ call cfa_PeekChar+00H
+ call cfa_TRUE+00H
+ DB 0C3H
+AHEADER 0 ,'IsDelimiter',cfa_IsDelimiter
+
+ call cfa_BL+00H
+ DB 08DH,040H,01H
+ DB 039H,045H,00H
+ DB 0FH,09DH,0C0H
+ DB 083H,0E0H,01H
+ DB 048H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'PeekChar',cfa_PeekChar
+
+ call cfa_CharAddr+00H
+ DB 0FH,0B6H,00H
+ DB 0C3H
+AHEADER 0 ,'CharAddr',cfa_CharAddr
+
+ call cfa_SOURCE+00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_greatIN+00H
+ DB 08BH,00H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'EndOfChunk',cfa_EndOfChunk
+
+ call cfa_greatIN+00H
+ DB 08BH,00H
+ call cfa_SOURCE+00H
+ DB 039H,045H,04H
+ DB 0FH,09DH,0C0H
+ DB 083H,0E0H,01H
+ DB 048H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'SOURCE!',cfa_SOURCEsave
+
+ call cfa_nTIB+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_TIB+09H
+ call cfa_greatIN+00H
+ DB 0C7H,00H
+ DD 00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'SOURCE',cfa_SOURCE
+
+ call cfa_TIB+00H
+ call cfa_nTIB+00H
+ DB 08BH,00H
+ DB 0C3H
+AHEADER 0 ,'C/L',cfa_C_divL
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 0200H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 1 ,'>r',cfa_greatr
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08DH,05H
+ DD cfa_CminusgreatR+00H
+ call cfa_INLINEcom+00H
+ DB 0C3H
+AHEADER 1 ,'r>',cfa_rgreat
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08DH,05H
+ DD cfa_CminusRgreat+00H
+ call cfa_INLINEcom+00H
+ DB 0C3H
+AHEADER 0 ,'>RESOLVE',cfa_greatRESOLVE
+
+ DB 03DH
+ DD 01H
+;jne cfa_greatRESOLVE+014H
+ DB 075H,0DH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_greatRESOLVE1+00H
+ DB 0EBH,022H
+ DB 03DH
+ DD 02H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_greatRESOLVE+031H
+ DB 074H,010H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFF829H
+ DB 08DH,06DH,0FCH
+ call cfa_THROW+00H
+ call cfa_greatRESOLVE1+00H
+ DB 0C3H
+AHEADER 0 ,'>RESOLVE1',cfa_greatRESOLVE1
+
+ call cfa_HERE+00H
+ DB 08BH,04DH,00H
+ DB 0F7H,0D9H
+ DB 08DH,04H,01H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04H
+ DB 0F7H,0D8H
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'>ORESOLVE',cfa_greatORESOLVE
+
+ DB 03DH
+ DD 01H
+;jne cfa_greatORESOLVE+014H
+ DB 075H,0DH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_greatORESOLVE1+00H
+ DB 0EBH,022H
+ DB 03DH
+ DD 02H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_greatORESOLVE+031H
+ DB 074H,010H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFF829H
+ DB 08DH,06DH,0FCH
+ call cfa_THROW+00H
+ call cfa_greatORESOLVE1+00H
+ DB 0C3H
+AHEADER 0 ,'>ORESOLVE1',cfa_greatORESOLVE1
+
+ call cfa_queSET+00H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_dcomaminusSET+09H
+ DB 08BH,04DH,00H
+ DB 0F7H,0D9H
+ DB 08DH,04H,01H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04H
+ DB 0F7H,0D8H
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_RESOLVE_OPT+00H
+ DB 0C3H
+AHEADER 0 ,'MARK',cfa_greatMARK
+
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_dcomaminusSET+09H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04H
+ DB 0F7H,0D8H
+ DB 03H,045H,0FCH
+ DB 0C3H
+AHEADER 0 ,'",',cfa_dticcom
+
+ DB 08DH,050H,01H
+ DB 089H,055H,0FCH
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_Sdticcom+00H
+ DB 0C3H
+AHEADER 0 ,'CLIT,',cfa_CLITcom
+
+ DB 08DH,050H,01H
+ DB 089H,055H,0FCH
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_PAD+00H
+ call cfa_dolsave+00H
+ call cfa_CLITERALminusCODE+00H
+ call cfa__COMPILEcom+00H
+ call cfa_PAD+00H
+ DB 08DH,050H,01H
+ DB 089H,055H,0FCH
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_Sdticcom+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ DB 0C3H
+AHEADER 0 ,'SLIT,',cfa_SLITcom
+
+ call cfa_SLITERALminusCODE+00H
+ call cfa_COMPILEcom+00H
+ call cfa_Sdticcom+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ DB 0C3H
+AHEADER 0 ,'S",',cfa_Sdticcom
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ call cfa_Scom+00H
+ DB 0C3H
+AHEADER 0 ,'S,',cfa_Scom
+
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_CMOVE+00H
+ DB 0C3H
+AHEADER 0 ,'?BRANCH,',cfa_queBRANCHcom
+
+ call cfa_queSET+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 084H
+ DB 08DH,06DH,0FCH
+ call cfa_J_COD+09H
+ call cfa_quequequeBRminusOPT+00H
+ call cfa_SetJP+00H
+ call cfa_SetOP+00H
+ call cfa_J_COD+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FH
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ call cfa_Ccom+00H
+ DB 0BH,0C0H
+;je  cfa_queBRANCHcom+054H
+ DB 074H,012H
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 08DH,040H,04H
+ DB 0F7H,0D8H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_com+00H
+ call cfa_DP+00H
+ DB 08BH,00H
+ call cfa_LASTminusHERE+09H
+ DB 0C3H
+AHEADER 0 ,'RLIT,',cfa_RLITcom
+
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 068H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ call cfa_com+00H
+ DB 0C3H
+AHEADER 0 ,'DLIT,',cfa_DLITcom
+
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ call cfa_LITcom+00H
+ call cfa_LITcom+00H
+ DB 0C3H
+AHEADER 0 ,'LIT,',cfa_LITcom
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08DH,05H
+ DD cfa_DUP+00H
+ call cfa_INLINEcom+00H
+ call cfa_OPT_INIT+00H
+ call cfa_SetOP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ call cfa_com+00H
+ call cfa_OPT+00H
+ call cfa_OPT_CLOSE+00H
+ DB 0C3H
+AHEADER 0 ,'RET,',cfa_RETcom
+
+ call cfa_queSET+00H
+ call cfa_SetOP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C3H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ call cfa_OPT+00H
+ call cfa_OPT_CLOSE+00H
+ DB 0C3H
+AHEADER 0 ,'BRANCH,',cfa_BRANCHcom
+
+ call cfa_queSET+00H
+ call cfa_SetOP+00H
+ call cfa_SetJP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0E9H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ DB 0BH,0C0H
+;je  cfa_BRANCHcom+035H
+ DB 074H,012H
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 08DH,040H,04H
+ DB 0F7H,0D8H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_com+00H
+ call cfa_DP+00H
+ DB 08BH,00H
+ call cfa_LASTminusHERE+09H
+ DB 0C3H
+AHEADER 0 ,'COMPILE,',cfa_COMPILEcom
+
+ call cfa_CONgreatLIT+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_COMPILEcom+02AH
+ DB 074H,01BH
+ call cfa_INLINEque+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_COMPILEcom+025H
+ DB 074H,07H
+ call cfa_INLINEcom+00H
+ DB 0EBH,05H
+ call cfa__COMPILEcom+00H
+ DB 0C3H
+AHEADER 0 ,'_COMPILE,',cfa__COMPILEcom
+
+ call cfa_queSET+00H
+ call cfa_SetOP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0E8H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 08DH,040H,04H
+ DB 0F7H,0D8H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_com+00H
+ call cfa_DP+00H
+ DB 08BH,00H
+ call cfa_LASTminusHERE+09H
+ DB 0C3H
+AHEADER 0 ,'HERE',cfa_HERE
+
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_dcomaminusSET+09H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_JminusSET+09H
+ DB 0C3H
+AHEADER 0 ,'RESOLVE_OPT',cfa_RESOLVE_OPT
+
+ call cfa_OPTque+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_RESOLVE_OPT+016H
+ DB 075H,07H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+ call cfa_J_OPTque+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_RESOLVE_OPT+02CH
+ DB 075H,07H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_JP0+00H
+ call cfa_JpBuffSize+00H
+ DB 03H,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08BH,00H
+ DB 03BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jbe cfa_RESOLVE_OPT+075H
+ DB 076H,023H
+ DB 089H,045H,0FCH
+ DB 08DH,040H,0FCH
+ DB 089H,045H,0F8H
+ DB 08BH,00H
+ DB 03H,045H,0F8H
+ DB 08DH,040H,04H
+ DB 08DH,06DH,0FCH
+ call cfa_JminusSET+00H
+ call cfa_UMAX+00H
+ call cfa_JminusSET+09H
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 08BH,04DH,00H
+ DB 0F7H,0D9H
+ DB 08DH,04H,01H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 07EH
+ DB 03BH,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jge cfa_RESOLVE_OPT+09EH
+ DB 07DH,07H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+ call cfa_DP+00H
+ DB 08BH,00H
+ call cfa_LASTminusHERE+00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;je  cfa_RESOLVE_OPT+0C1H
+ DB 074H,0CH
+ call cfa_queSET+00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+ call cfa_OPTque+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_RESOLVE_OPT+0D7H
+ DB 075H,07H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+ DB 08DH,040H,04H
+ call cfa_OP0+00H
+ DB 090H
+ DB 090H
+ call cfa_Jque_STEP+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_RESOLVE_OPT+0E1H
+ DB 074H,0F1H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_RESOLVE_OPT+016FH
+ DB 074H,075H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 089H,045H,0F8H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0E9H
+ DB 08BH,045H,0F8H
+ DB 08DH,06DH,0FCH
+;jne cfa_RESOLVE_OPT+012EH
+ DB 075H,01CH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0EBH
+ DB 08BH,055H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,0C2H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 0B8H
+ DD 03H
+ DB 0EBH,02FH
+ DB 089H,045H,0FCH
+ DB 0FH,0B7H,040H,01H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 010H
+ DB 0F7H,0D8H
+ DB 03H,045H,0F8H
+ DB 08BH,055H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,0C2H
+ DB 08DH,06DH,0FCH
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04H
+ DB 08DH,06DH,0FCH
+ call cfa_J_MOVE+00H
+ call cfa_DP+00H
+ DB 08BH,00H
+ call cfa_LASTminusHERE+09H
+ DB 0C3H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'J_OPT?',cfa_J_OPTque
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 0FFFFFFFFH
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'J_MOVE',cfa_J_MOVE
+
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0840FH
+ DD cfa_J_MOVE+0E5H-$-4
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08BH,00H
+ DB 08BH,055H,0FCH
+ DB 089H,045H,0F8H
+ DB 089H,055H,0F4H
+ DB 0F7H,0D8H
+ DB 03H,045H,0F4H
+ DB 0F7H,0D8H
+ DB 089H,045H,0F4H
+ DB 08BH,045H,0F8H
+ DB 08DH,06DH,0F4H
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 0F7H,0D8H
+ DB 03H,045H,00H
+ DB 0F7H,0D8H
+ DB 08DH,06DH,04H
+ call cfa_CMOVE+00H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08DH,06DH,08H
+ DB 0BBH
+ DD cfa_J_MOVE+0E5H
+ DB 03BH,045H,0F8H
+;jne cfa_J_MOVE+077H
+ DB 075H,05H
+ DB 08BH,045H,0FCH
+ DB 0FFH,0E3H
+ DB 053H
+ DB 0BBH
+ DD 080000000H
+ DB 02BH,05DH,0F8H
+ DB 053H
+ DB 03H,0D8H
+ DB 053H
+ DB 08BH,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 0F7H,0D8H
+ DB 089H,045H,0F8H
+ DB 08BH,04H,024H
+ DB 02BH,044H,024H,04H
+ DB 08BH,055H,0F8H
+ DB 01H,010H
+ DB 08BH,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,04H,024H
+ DB 02BH,044H,024H,04H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0E8H
+ DB 08BH,045H,0FCH
+;jne cfa_J_MOVE+0D1H
+ DB 075H,01AH
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 08BH,04H,024H
+ DB 02BH,044H,024H,04H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0F8H
+ DB 01H,010H
+ DB 08BH,045H,0FCH
+ call cfa_CELL+00H
+ DB 01H,04H,024H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jno cfa_J_MOVE+087H
+ DB 071H,0A6H
+ DB 08DH,064H,024H,0CH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ call cfa_JP0+00H
+ call cfa_JpBuffSize+00H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_JP0+00H
+ DB 08DH,06DH,08H
+ DB 0BBH
+ DD cfa_J_MOVE+0210H
+ DB 03BH,045H,0F8H
+;jne cfa_J_MOVE+0117H
+ DB 075H,05H
+ DB 08BH,045H,0FCH
+ DB 0FFH,0E3H
+ DB 053H
+ DB 0BBH
+ DD 080000000H
+ DB 02BH,05DH,0F8H
+ DB 053H
+ DB 03H,0D8H
+ DB 053H
+ DB 08BH,045H,0FCH
+ DB 08BH,0CH,024H
+ DB 02BH,04CH,024H,04H
+ DB 08BH,09H
+ DB 0BH,0C9H
+ DW 0840FH
+ DD cfa_J_MOVE+01F8H-$-4
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 08BH,04H,024H
+ DB 02BH,044H,024H,04H
+ DB 08BH,00H
+ DB 03BH,045H,0F8H
+ DB 08BH,045H,0FCH
+;jbe cfa_J_MOVE+01A7H
+ DB 076H,058H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 0F7H,0D8H
+ DB 089H,045H,0F8H
+ DB 08BH,04H,024H
+ DB 02BH,044H,024H,04H
+ DB 08BH,055H,0F8H
+ DB 01H,010H
+ DB 08BH,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 08BH,04H,024H
+ DB 02BH,044H,024H,04H
+ DB 08BH,00H
+ DB 08DH,06DH,0F8H
+ call cfa_J__ld+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jae cfa_J_MOVE+01A5H
+ DB 073H,01AH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 089H,045H,0F8H
+ DB 08BH,04H,024H
+ DB 02BH,044H,024H,04H
+ DB 08BH,00H
+ DB 08DH,06DH,0F8H
+ call cfa_J_plussave+00H
+ DB 0EBH,051H
+ DB 089H,045H,0FCH
+ DB 08BH,0CH,024H
+ DB 02BH,04CH,024H,04H
+ DB 08BH,09H
+ DB 033H,0C1H
+ DB 08BH,045H,0FCH
+;je  cfa_J_MOVE+01F8H
+ DB 074H,03EH
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 08BH,04H,024H
+ DB 02BH,044H,024H,04H
+ DB 08BH,00H
+ DB 08DH,06DH,0F8H
+ call cfa_J__ld+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_J_MOVE+01F8H
+ DB 076H,01CH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 0F7H,0D8H
+ DB 089H,045H,0F8H
+ DB 08BH,04H,024H
+ DB 02BH,044H,024H,04H
+ DB 08BH,00H
+ DB 08DH,06DH,0F8H
+ call cfa_J_plussave+00H
+ call cfa_CELL+00H
+ DB 01H,04H,024H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0810FH
+ DD cfa_J_MOVE+0127H-$-4
+ DB 08DH,064H,024H,0CH
+ DB 08BH,045H,00H
+ DB 0F7H,0D8H
+ DB 089H,045H,04H
+ DB 08DH,06DH,04H
+ call cfa_ALLOT+00H
+ call cfa_dcomaminusSET+00H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_dcomaminusSET+09H
+ DB 0C3H
+ DB 0C3H
+AHEADER 0 ,'J_+!',cfa_J_plussave
+
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 025H
+ DD 0F0H
+ DB 03DH
+ DD 070H
+ DB 08BH,045H,0FCH
+;jne cfa_J_plussave+01DH
+ DB 075H,08H
+ DB 08DH,040H,01H
+ DB 0E9H
+ DD cfa_J_plussave+083H-$-4
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0EBH
+ DB 08BH,045H,0FCH
+;jne cfa_J_plussave+035H
+ DB 075H,08H
+ DB 08DH,040H,01H
+ DB 0E9H
+ DD cfa_J_plussave+083H-$-4
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0E9H
+ DB 08BH,045H,0FCH
+;jne cfa_J_plussave+04DH
+ DB 075H,08H
+ DB 08DH,040H,01H
+ DB 0E9H
+ DD cfa_J_plussave+083H-$-4
+ DB 089H,045H,0FCH
+ DB 0FH,0B7H,00H
+ DB 025H
+ DD 0F0FFH
+ DB 03DH
+ DD 0800FH
+ DB 08BH,045H,0FCH
+;jne cfa_J_plussave+06AH
+ DB 075H,08H
+ DB 08DH,040H,02H
+ DB 0E9H
+ DD cfa_J_plussave+083H-$-4
+ call cfa__SLITERALminusCODE+00H
+ DB 08H
+ DB 'J_+! ERR',0
+ call cfa_TYPE+00H
+ call cfa_ABORT+00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'J?_STEP',cfa_Jque_STEP
+
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_JminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jb  cfa_Jque_STEP+02AH
+ DB 072H,011H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_Jque_STEP+053H
+ DB 075H,0EH
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 08BH,08H
+ DB 08BH,09H
+ DB 081H,0E1H
+ DD 0FFFFF0FFH
+ DB 081H,0F9H
+ DD 0800FH
+;jne cfa_Jque_STEP+076H
+ DB 075H,011H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 08BH,08H
+ DB 08BH,09H
+ DB 081H,0F9H
+ DD 0E9H
+;jne cfa_Jque_STEP+093H
+ DB 075H,011H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08DH,040H,04H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ call cfa_OpBuffSize+00H
+ DB 03H,045H,00H
+ DB 03BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jae cfa_Jque_STEP+0C5H
+ DB 073H,011H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 08BH,055H,00H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 033H,0C2H
+ DB 0BH,0C0H
+ DB 08BH,045H,0FCH
+;jne cfa_Jque_STEP+0E7H
+ DB 075H,011H
+ DB 08DH,040H,04H
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 08DH,040H,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+AHEADER 0 ,'CON>LIT',cfa_CONgreatLIT
+
+ call cfa_OPTque+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_CONgreatLIT+015H
+ DB 075H,06H
+ call cfa_TRUE+00H
+ DB 0C3H
+ call cfa_queSET+00H
+ call cfa_MM_SIZE+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_CONgreatLIT+02FH
+ DB 075H,06H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0E8H
+ DB 08BH,045H,0FCH
+;je  cfa_CONgreatLIT+045H
+ DB 074H,06H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08DH,040H,01H
+ DB 089H,045H,0F8H
+ DB 08BH,00H
+ DB 03H,045H,0F8H
+ DB 08DH,040H,04H
+ DB 089H,045H,0F8H
+ DB 08DH,06DH,0F8H
+ call cfa_CREATEminusCODE+00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_CONgreatLIT+092H
+ DB 075H,026H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OPT_INIT+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05H
+ DB 03H,045H,0FCH
+ call cfa_FORLITcom+00H
+ call cfa_FALSE+00H
+ call cfa_OPT_CLOSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_USERminusCODE+00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_CONgreatLIT+0FAH
+ DB 075H,052H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OPT_INIT+00H
+ DB 089H,045H,0FCH
+ DB 0A1H
+ DD cfa_ticDUP_V+05H
+ DB 08DH,06DH,0FCH
+ call cfa__INLINEcom+00H
+ call cfa_SetOP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0878DH
+ DB 08DH,06DH,0FCH
+ call cfa_Wcom+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05H
+ DB 03H,045H,0FCH
+ DB 08BH,00H
+ call cfa_com+00H
+ call cfa_OPT+00H
+ call cfa_FALSE+00H
+ call cfa_OPT_CLOSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_USERminusVALUEminusCODE+00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_CONgreatLIT+0162H
+ DB 075H,052H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OPT_INIT+00H
+ DB 089H,045H,0FCH
+ DB 0A1H
+ DD cfa_ticDUP_V+05H
+ DB 08DH,06DH,0FCH
+ call cfa__INLINEcom+00H
+ call cfa_SetOP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0878BH
+ DB 08DH,06DH,0FCH
+ call cfa_Wcom+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05H
+ DB 03H,045H,0FCH
+ DB 08BH,00H
+ call cfa_com+00H
+ call cfa_OPT+00H
+ call cfa_FALSE+00H
+ call cfa_OPT_CLOSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_CONSTANTminusCODE+00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_CONgreatLIT+0201H-$-4
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OPT_INIT+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05H
+ DB 03H,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 05H
+ DB 03H,045H,0F8H
+ DB 089H,045H,0F8H
+ DB 08BH,00H
+ DB 03H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_TOVALUEminusCODE+00H
+ DB 08DH,040H,0FCH
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_CONgreatLIT+01EFH
+ DB 075H,031H
+ DB 089H,045H,0FCH
+ DB 0A1H
+ DD cfa_ticDUP_V+05H
+ DB 08DH,06DH,0FCH
+ call cfa__INLINEcom+00H
+ call cfa_SetOP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0A1H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ call cfa_com+00H
+ call cfa_OPT+00H
+ DB 0EBH,07H
+ DB 08BH,00H
+ call cfa_FORLITcom+00H
+ call cfa_FALSE+00H
+ call cfa_OPT_CLOSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08DH,040H,01H
+ DB 089H,045H,0F8H
+ DB 08BH,00H
+ DB 03H,045H,0F8H
+ DB 08DH,040H,04H
+ DB 08DH,06DH,0FCH
+ call cfa_DOESminusCODE+00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_CONgreatLIT+0256H
+ DB 075H,031H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05H
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 089H,055H,0FCH
+ DB 0B8H
+ DD 05H
+ DB 03H,045H,0FCH
+ call cfa_OPT_INIT+00H
+ call cfa_FORLITcom+00H
+ call cfa_TRUE+00H
+ call cfa_OPT_CLOSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_TOUSERminusVALUEminusCODE+00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_CONgreatLIT+02B6H
+ DB 075H,04AH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OPT_INIT+00H
+ call cfa_SetOP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 08789H
+ DB 08DH,06DH,0FCH
+ call cfa_Wcom+00H
+ DB 08DH,040H,0FCH
+ DB 08BH,00H
+ call cfa_com+00H
+ call cfa_OPT+00H
+ DB 089H,045H,0FCH
+ DB 0A1H
+ DD cfa_ticDROP_V+05H
+ DB 08DH,06DH,0FCH
+ call cfa__INLINEcom+00H
+ call cfa_FALSE+00H
+ call cfa_OPT_CLOSE+00H
+ DB 0C3H
+ call cfa_TOVALUEminusCODE+00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_CONgreatLIT+0308H
+ DB 075H,042H
+ call cfa_OPT_INIT+00H
+ call cfa_SetOP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0A3H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ DB 08DH,040H,0FCH
+ call cfa_com+00H
+ call cfa_OPT+00H
+ DB 089H,045H,0FCH
+ DB 0A1H
+ DD cfa_ticDROP_V+05H
+ DB 08DH,06DH,0FCH
+ call cfa__INLINEcom+00H
+ call cfa_FALSE+00H
+ call cfa_OPT_CLOSE+00H
+ DB 0C3H
+ call cfa_TRUE+00H
+ DB 0C3H
+AHEADER 0 ,'FORLIT,',cfa_FORLITcom
+
+ DB 089H,045H,0FCH
+ DB 0A1H
+ DD cfa_ticDUP_V+05H
+ DB 08DH,06DH,0FCH
+ call cfa__INLINEcom+00H
+ call cfa_SetOP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ call cfa_com+00H
+ call cfa_OPT+00H
+ DB 0C3H
+AHEADER 0 ,'OPT',cfa_OPT
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08DH,05H
+ DD cfa_NOOP+00H
+ call cfa_DO_OPT+00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'???BR-OPT',cfa_quequequeBRminusOPT
+
+ call cfa_OPTque+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_quequequeBRminusOPT+01FH
+ DB 075H,010H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C00BH
+ DB 08DH,06DH,0FCH
+ call cfa_Wcom+00H
+ call cfa_FALSE+00H
+ call cfa_tilBRminusOPT+09H
+ DB 089H,045H,0FCH
+ DB 0A1H
+ DD cfa_ticDROP_V+05H
+ DB 08DH,06DH,0FCH
+ call cfa_quequeBRminusOPT+00H
+ call cfa_INLINEcom+00H
+ call cfa_TRUE+00H
+ call cfa_tilBRminusOPT+09H
+ call cfa_OPTque+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_quequequeBRminusOPT+0E8H-$-4
+ call cfa_OPT_INIT+00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C00BH
+ DB 033H,045H,0FCH
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 089H,045H,0FCH
+ DB 050H
+ DB 083H,07DH,0FCH,00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_quequequeBRminusOPT+094H
+ DB 074H,0AH
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08DH,05H
+ DD cfa_NOOP+00H
+ call cfa_queBRminusOPT+00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C00BH
+ DB 033H,045H,0FCH
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 023H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_quequequeBRminusOPT+0E3H
+ DB 074H,0AH
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ call cfa_OPT_CLOSE+00H
+ DB 0C3H
+AHEADER 0 ,'??BR-OPT',cfa_quequeBRminusOPT
+
+ call cfa_OPTque+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_quequeBRminusOPT+01EH
+ DB 074H,0FH
+ call cfa_OPT_INIT+00H
+ call cfa_queBRminusOPT+00H
+ call cfa_OPT_CLOSE+00H
+ DB 0C3H
+AHEADER 0 ,'?BR-OPT',cfa_queBRminusOPT
+
+ DB 090H
+ call cfa_queBRminusOPTminusRULES+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_queBRminusOPT+01H
+ DB 074H,0F1H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08DH,05H
+ DD cfa_NOOP+00H
+ call cfa_OPTminusRULES+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;je  cfa_queBRminusOPT+01H
+ DB 074H,0D6H
+ call cfa_BRminusEVENminusEAX+00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_queBRminusOPT+05DH
+ DB 076H,016H
+ call cfa_SetOP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C00BH
+ DB 08DH,06DH,0FCH
+ call cfa_Wcom+00H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 025H
+ DD 0C7H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 05H
+ DB 033H,045H,0F8H
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 089H,045H,0F4H
+ DB 0B8H
+ DD 040H
+ DB 033H,045H,0F4H
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,0F8H
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 089H,045H,0F4H
+ DB 0B8H
+ DD 048H
+ DB 033H,045H,0F4H
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,0F8H
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 089H,045H,0F4H
+ DB 0B8H
+ DD 03BH
+ DB 033H,045H,0F4H
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,0F8H
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 089H,045H,0F4H
+ DB 0B8H
+ DD 0BH
+ DB 033H,045H,0F4H
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,0F8H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 04000H
+ DB 0BH,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_ADDlXORlORlAND_equ+00H
+ DB 0F7H,0D0H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C01BH
+ DB 033H,045H,0F8H
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0D02BH
+ DB 033H,045H,0F8H
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 04539H
+ DB 033H,045H,0F8H
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C083H
+ DB 033H,045H,0F8H
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C203H
+ DB 033H,045H,0F8H
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C133H
+ DB 033H,045H,0F8H
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0F8C1H
+ DB 033H,045H,0F8H
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 07D83H
+ DB 033H,045H,0F8H
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 03D81H
+ DB 033H,045H,0F8H
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 03C81H
+ DB 033H,045H,0F8H
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 07C81H
+ DB 033H,045H,0F8H
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 03D83H
+ DB 033H,045H,0F8H
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 03C83H
+ DB 033H,045H,0F8H
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0240433H
+ DB 033H,045H,0FCH
+ DB 023H,045H,00H
+ DB 023H,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;je  cfa_queBRminusOPT+0277H
+ DB 074H,015H
+ call cfa_SetOP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C00BH
+ DB 08DH,06DH,0FCH
+ call cfa_Wcom+00H
+ DB 0C3H
+AHEADER 0 ,'BR-EVEN-EAX',cfa_BRminusEVENminusEAX
+
+ call cfa_OFFminusEAX+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_BRminusEVENminusEAX+03BH
+ DB 074H,02CH
+ call cfa_SetOP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ call cfa_OFFminusEAX+00H
+ call cfa_com+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_OFFminusEAX+09H
+ DB 0C3H
+AHEADER 0 ,'?BR-OPT-RULES',cfa_queBRminusOPTminusRULES
+
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_queBRminusOPTminusRULES+01DH
+ DB 076H,06H
+ call cfa_TRUE+00H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 05H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_queBRminusOPTminusRULES+070H
+ DB 075H,03CH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OFFminusEAX+00H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OFFminusEAX+09H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFBH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0A1H
+ DD cfa_ticDROP_V+05H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OFFminusEAX+00H
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_queBRminusOPTminusRULES+0D3H-$-4
+ call cfa_DP+00H
+ DB 08BH,00H
+ call cfa_LASTminusHERE+09H
+ call cfa_INLINEcom+00H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08DH,05H
+ DD cfa_NOOP+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0A1H
+ DD cfa_ticDROP_V+05H
+ DB 033H,045H,0F8H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_OFFminusEAX+00H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0A1H
+ DB 033H,045H,0FCH
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 023H,045H,00H
+ DB 023H,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;je  cfa_queBRminusOPTminusRULES+015DH
+ DB 074H,042H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_Wcom+00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 03D83H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OFFminusEAX+00H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 024048BH
+ DB 033H,045H,0FCH
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 023H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;je  cfa_queBRminusOPTminusRULES+01C3H
+ DB 074H,033H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0243C83H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0A1H
+ DD cfa_ticDROP_V+05H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0458BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+021EH
+ DB 075H,02AH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 07D83H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0A1H
+ DD cfa_ticDROP_V+05H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C20BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+026CH
+ DB 075H,01DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D00BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0408DH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_queBRminusOPTminusRULES+02A0H
+ DB 075H,01DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C083H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0808DH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_queBRminusOPTminusRULES+030BH
+ DB 075H,054H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_TRUE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0A1H
+ DD cfa_ticDROP_V+05H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01FF8C1H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+0386H
+ DB 075H,046H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 08DH
+ DB 08DH,06DH,0FCH
+ call cfa_J_COD+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 023H,045H,0FCH
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_J_COD+09H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0A1H
+ DD cfa_ticDROP_V+05H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 035H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+03DAH
+ DB 075H,023H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0A1H
+ DD cfa_ticDROP_V+05H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0240433H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+0432H
+ DB 075H,023H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 04539H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_queBRminusOPTminusRULES+0471H
+ DB 075H,028H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_XC_J+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_queBRminusOPTminusRULES+048EH
+ DB 076H,06H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0A1H
+ DD cfa_ticDROP_V+05H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C01BD8F7H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+04DEH
+ DB 075H,020H
+ call cfa_OP2+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFCH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0A1H
+ DD cfa_ticDROP_V+05H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01B01E883H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C01BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+055EH
+ DB 075H,035H
+ call cfa_OP2+00H
+ call cfa_ToOP0+00H
+ call cfa_J_COD+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 033H,045H,0FCH
+ call cfa_J_COD+09H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFBH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0A1H
+ DD cfa_ticDROP_V+05H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03DH
+ DB 033H,045H,0FCH
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03BH
+ DB 033H,045H,0FCH
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFDH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04539H
+ DB 033H,045H,0FCH
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C01BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jne cfa_queBRminusOPTminusRULES+0633H
+ DB 075H,046H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 083H
+ DB 08DH,06DH,0FCH
+ call cfa_J_COD+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 023H,045H,0FCH
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_J_COD+09H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0240C8BH
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C13BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+06A3H
+ DB 075H,037H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 043BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0240C8BH
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C133H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+0713H
+ DB 075H,037H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0433H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 03DH
+ DD 0C13BCA8BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_queBRminusOPTminusRULES+0760H
+ DB 075H,037H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C23BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C23BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+07CCH
+ DB 075H,037H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0453BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0A1H
+ DD cfa_ticDROP_V+05H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C83B008BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+0833H
+ DB 075H,037H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 083BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0A1H
+ DD cfa_ticDROP_V+05H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D03B008BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+089AH
+ DB 075H,037H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0103BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0A1H
+ DD cfa_ticDROP_V+05H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C13B008BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+0906H
+ DB 075H,03CH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 083BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_XC_J+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B9H
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C133H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+0978H
+ DB 075H,03DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C23BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+09EAH
+ DB 075H,03DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0453BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B9H
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C83BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+0A61H
+ DB 075H,042H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_XC_J+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 03DH
+ DD 0C23B008BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_queBRminusOPTminusRULES+0AB3H
+ DB 075H,03CH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0103BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_XC_J+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0A1H
+ DD cfa_ticDROP_V+05H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 024448BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+0B58H
+ DB 075H,055H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 07C81H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0244C8BH
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C83BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+0BEBH
+ DB 075H,05AH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0443BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_XC_J+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D8BH
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C83BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+0C7AH
+ DB 075H,05AH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 053BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_XC_J+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0A1H
+ DD cfa_ticDROP_V+05H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 085048BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+0D1FH
+ DB 075H,055H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03C81H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0A1H
+ DD cfa_ticDROP_V+05H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0A1H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+0DAAH
+ DB 075H,03FH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 03D81H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0A1H
+ DD cfa_ticDROP_V+05H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D8F7H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C203H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+0E2DH
+ DB 075H,037H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D02BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 03DH
+ DD 0C90BCA8BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_queBRminusOPTminusRULES+0E7AH
+ DB 075H,037H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D20BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03DFF408DH
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+0EE2H
+ DB 075H,03DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 048H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFF9H
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_queBRminusOPTminusRULES+0EFFH
+ DB 076H,06H
+ call cfa_TRUE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0453BC033H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jne cfa_queBRminusOPTminusRULES+0F9EH
+ DB 075H,048H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 0C7H,00H
+ DD 00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_XC_J+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0453B008BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jne cfa_queBRminusOPTminusRULES+01022H
+ DB 075H,02DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C23BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04D89H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0453B008BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jne cfa_queBRminusOPTminusRULES+010A6H
+ DB 075H,02DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C13BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 08BH
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04539H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+ DW 0850FH
+ DD cfa_queBRminusOPTminusRULES+0118AH-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 04D89H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_queBRminusOPTminusRULES+01146H
+ DB 075H,02DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C83BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 05589H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_queBRminusOPTminusRULES+0118AH
+ DB 075H,02DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D03BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_queBRminusOPTminusRULES+011A7H
+ DB 076H,06H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0A1H
+ DD cfa_ticDROP_V+05H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 025H
+ DD 0FFFFFCFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 083C09C0FH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04801E083H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queBRminusOPTminusRULES+0124CH
+ DB 075H,053H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,040H,01H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 010H
+ DB 0F7H,0D8H
+ DB 03H,045H,0FCH
+ call cfa_J_COD+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 023H,045H,0FCH
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_J_COD+09H
+ call cfa_OP3+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFF9H
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 04533H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_queBRminusOPTminusRULES+0137AH-$-4
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0A1H
+ DD cfa_ticDROP_V+05H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 045C7H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0458BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jne cfa_queBRminusOPTminusRULES+0137AH
+ DB 075H,066H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ call cfa_ToOP0+00H
+ call cfa_TRUE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFF8H
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_TRUE+00H
+ DB 0C3H
+AHEADER 0 ,'MACRO,',cfa_MACROcom
+
+ call cfa_INLINEcom+00H
+ DB 0C3H
+AHEADER 0 ,'INLINE,',cfa_INLINEcom
+
+ call cfa_OPT_INIT+00H
+ call cfa__INLINEcom+00H
+ call cfa_OPT_CLOSE+00H
+ DB 0C3H
+AHEADER 0 ,'OPT_INIT',cfa_OPT_INIT
+
+ call cfa_queSET+00H
+ call cfa_minusEVENminusEBP+00H
+ DB 0C3H
+AHEADER 0 ,'OPT_CLOSE',cfa_OPT_CLOSE
+
+ call cfa_EVENminusEBP+00H
+ call cfa_DP+00H
+ DB 08BH,00H
+ call cfa_LASTminusHERE+09H
+ DB 0C3H
+AHEADER 0 ,'XC_J',cfa_XC_J
+
+ call cfa_J_COD+00H
+ DB 025H
+ DD 0FEH
+ DB 03DH
+ DD 04H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_XC_J+018H
+ DB 075H,01H
+ DB 0C3H
+ call cfa_J_COD+00H
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 08H
+;je  cfa_XC_J+034H
+ DB 074H,0DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 08DH,06DH,0FCH
+ DB 0EBH,0BH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05H
+ DB 08DH,06DH,0FCH
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_J_COD+09H
+ DB 0C3H
+AHEADER 0 ,'_INLINE,',cfa__INLINEcom
+
+ DB 090H
+ call cfa_DO_OPT+00H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 089H,045H,0F8H
+ DB 089H,045H,0F4H
+ DB 0B8H
+ DD 08BE08B5BH
+ DB 033H,045H,0F4H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 08DH,06DH,0F8H
+ DB 0BH,0C0H
+;je  cfa__INLINEcom+058H
+ DB 074H,033H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 08BH,045H,04H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,050H,04H
+ DB 089H,055H,0FCH
+ DB 08BH,00H
+ DB 089H,045H,0F8H
+ DB 0C7H,045H,0F4H
+ DD 0E3FF046DH
+ DB 0B8H
+ DD 08D00458BH
+ DB 08DH,06DH,0F4H
+ call cfa_D_equ+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa__INLINEcom+09DH
+ DB 074H,03BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_SetOP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 08BH
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0E0H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 0A1H
+ DD cfa_ticDROP_V+05H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFH
+ DB 023H,045H,0FCH
+ DB 03DH
+ DD 0C3H
+;jne cfa__INLINEcom+0B6H
+ DB 075H,07H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+ call cfa_DUP5Bque+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa__INLINEcom+0CFH
+ DB 074H,0AH
+ call cfa__5_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0E0H
+ DB 081H,0F9H
+ DD 040H
+;jne cfa__INLINEcom+0E9H
+ DB 075H,0AH
+ call cfa__1_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0F4H
+ DB 081H,0F9H
+ DD 064H
+;jne cfa__INLINEcom+0103H
+ DB 075H,0AH
+ call cfa__1_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 099H
+;jne cfa__INLINEcom+0114H
+ DB 075H,0AH
+ call cfa__1_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 089H,045H,0FCH
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0FCH
+ DB 081H,0F9H
+ DD 0ECH
+;jne cfa__INLINEcom+0131H
+ DB 075H,0AH
+ call cfa__1_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 0CDH
+;jne cfa__INLINEcom+0142H
+ DB 075H,0AH
+ call cfa__2_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0F0H
+ DB 081H,0F9H
+ DD 070H
+;jne cfa__INLINEcom+015CH
+ DB 075H,0AH
+ call cfa__2_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 0E8H
+;jne cfa__INLINEcom+016DH
+ DB 075H,0AH
+ call cfa__1A_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 0E9H
+;jne cfa__INLINEcom+017EH
+ DB 075H,0AH
+ call cfa__1A_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 0FH,0B7H,00H
+ call cfa_DUP3Bque_xEBP_y+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa__INLINEcom+01A5H
+ DB 074H,0FH
+ call cfa__2_com_STEP+00H
+ call cfa_plusEBP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ call cfa_DUP3Bque+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa__INLINEcom+01BEH
+ DB 074H,0AH
+ call cfa__3_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ call cfa_DUP2Bque+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa__INLINEcom+01D7H
+ DB 074H,0AH
+ call cfa__2_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 0C48BH
+;jne cfa__INLINEcom+01E8H
+ DB 075H,0AH
+ call cfa__2_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 0C58BH
+;jne cfa__INLINEcom+01FEH
+ DB 075H,0FH
+ call cfa_EVENminusEBP+00H
+ call cfa__2_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 0EC87H
+;jne cfa__INLINEcom+0214H
+ DB 075H,0FH
+ call cfa_EVENminusEBP+00H
+ call cfa__2_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 06D8DH
+;jne cfa__INLINEcom+0241H
+ DB 075H,026H
+ DB 08BH,045H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02H
+ DB 03H,045H,0FCH
+ DB 0FH,0B6H,00H
+ call cfa_plusgreatOFFminusEBP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 0C583H
+;jne cfa__INLINEcom+026EH
+ DB 075H,026H
+ DB 08BH,045H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02H
+ DB 03H,045H,0FCH
+ DB 0FH,0B6H,00H
+ call cfa_plusgreatOFFminusEBP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 0ED83H
+;jne cfa__INLINEcom+02A2H
+ DB 075H,02DH
+ DB 08BH,045H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02H
+ DB 03H,045H,0FCH
+ DB 0FH,0B6H,00H
+ call cfa_CgreatS+00H
+ DB 0F7H,0D8H
+ call cfa_plusgreatOFFminusEBP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 0C483H
+;jne cfa__INLINEcom+02B3H
+ DB 075H,0AH
+ call cfa__3_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ call cfa_DUP6Bque+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa__INLINEcom+02CCH
+ DB 074H,0AH
+ call cfa__6_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 0E3FFH
+;jne cfa__INLINEcom+02E2H
+ DB 075H,0FH
+ call cfa_EVENminusEBP+00H
+ call cfa__2_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 0D2FFH
+;jne cfa__INLINEcom+02F8H
+ DB 075H,0FH
+ call cfa_EVENminusEBP+00H
+ call cfa__2_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 0810FH
+;jne cfa__INLINEcom+0309H
+ DB 075H,0AH
+ call cfa__2A_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 045C7H
+;jne cfa__INLINEcom+0324H
+ DB 075H,014H
+ call cfa__2_com_STEP+00H
+ call cfa_plusEBP+00H
+ call cfa__4_com_STEP_+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 05C7H
+;jne cfa__INLINEcom+0335H
+ DB 075H,0AH
+ call cfa_A_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 0581H
+;jne cfa__INLINEcom+0346H
+ DB 075H,0AH
+ call cfa_A_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 08BH,00H
+ DB 03DH
+ DD 0424448BH
+;jne cfa__INLINEcom+03A0H
+ DB 075H,04BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_SetOP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 08BH
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 024H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04H
+ DB 03H,045H,0FCH
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 0424448DH
+;jne cfa__INLINEcom+03E2H
+ DB 075H,03BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_SetOP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 08BH
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C4H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04H
+ DB 03H,045H,0FCH
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFH
+ DB 023H,045H,0FCH
+ DB 03DH
+ DD 0C09D0FH
+;jne cfa__INLINEcom+03FEH
+ DB 075H,0AH
+ call cfa__3_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 0C09E0FH
+;jne cfa__INLINEcom+040FH
+ DB 075H,0AH
+ call cfa__3_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 090048DH
+;jne cfa__INLINEcom+0420H
+ DB 075H,0AH
+ call cfa__3_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 02048DH
+;jne cfa__INLINEcom+0431H
+ DB 075H,0AH
+ call cfa__3_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 040B70FH
+;jne cfa__INLINEcom+0442H
+ DB 075H,0AH
+ call cfa__4_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 0240401H
+;jne cfa__INLINEcom+0453H
+ DB 075H,0AH
+ call cfa__3_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0FFF8FFH
+ DB 081H,0F9H
+ DD 0B00FH
+;jne cfa__INLINEcom+046DH
+ DB 075H,0AH
+ call cfa__3_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 0244403H
+;jne cfa__INLINEcom+047EH
+ DB 075H,0AH
+ call cfa__4_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 024442BH
+;jne cfa__INLINEcom+048FH
+ DB 075H,0AH
+ call cfa__4_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 024448BH
+;jne cfa__INLINEcom+04A0H
+ DB 075H,0AH
+ call cfa__4_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 085448BH
+;jne cfa__INLINEcom+04B6H
+ DB 075H,0FH
+ call cfa__3_com_STEP+00H
+ call cfa_plusEBP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 024048BH
+;jne cfa__INLINEcom+04C7H
+ DB 075H,0AH
+ call cfa__3_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 020488BH
+;jne cfa__INLINEcom+04D8H
+ DB 075H,0AH
+ call cfa__3_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 020488DH
+;jne cfa__INLINEcom+04E9H
+ DB 075H,0AH
+ call cfa__3_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 021C8DH
+;jne cfa__INLINEcom+04FAH
+ DB 075H,0AH
+ call cfa__3_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 085048DH
+;jne cfa__INLINEcom+050BH
+ DB 075H,0AH
+ call cfa__7_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 02404FFH
+;jne cfa__INLINEcom+051CH
+ DB 075H,0AH
+ call cfa__3_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ DB 03DH
+ DD 018B60FH
+;jne cfa__INLINEcom+052DH
+ DB 075H,0AH
+ call cfa__3_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ call cfa_DUP7Bque+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa__INLINEcom+0546H
+ DB 074H,0AH
+ call cfa__7_com_STEP+00H
+ DB 0E9H
+ DD cfa__INLINEcom+01H-$-4
+ call cfa_HEX+00H
+ call cfa_Udot+00H
+ call cfa__SLITERALminusCODE+00H
+ DB 0BH
+ DB '@COD, ERROR',0
+ call cfa_TYPE+00H
+ call cfa_ABORT+00H
+ DB 0C3H
+AHEADER 0 ,'2A_,_STEP',cfa__2A_com_STEP
+
+ call cfa__2_com_STEP+00H
+ call cfa__0A_com_STEP+00H
+ DB 0C3H
+AHEADER 0 ,'1A_,_STEP',cfa__1A_com_STEP
+
+ call cfa__1_com_STEP+00H
+ call cfa__0A_com_STEP+00H
+ DB 0C3H
+AHEADER 0 ,'0A_,_STEP',cfa__0A_com_STEP
+
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 08BH,00H
+ DB 03H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 0F7H,0D8H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_com+00H
+ DB 08DH,040H,04H
+ DB 0C3H
+AHEADER 0 ,'A_,_STEP',cfa_A_com_STEP
+
+ call cfa__2_com_STEP+00H
+ call cfa__4_com_STEP_+00H
+ call cfa__4_com_STEP_+00H
+ DB 0C3H
+AHEADER 0 ,'7_,_STEP',cfa__7_com_STEP
+
+ call cfa__3_com_STEP+00H
+ call cfa__4_com_STEP_+00H
+ DB 0C3H
+AHEADER 0 ,'6_,_STEP',cfa__6_com_STEP
+
+ call cfa__2_com_STEP+00H
+ call cfa__4_com_STEP_+00H
+ DB 0C3H
+AHEADER 0 ,'5_,_STEP',cfa__5_com_STEP
+
+ call cfa__1_com_STEP+00H
+ call cfa__4_com_STEP_+00H
+ DB 0C3H
+AHEADER 0 ,'4_,_STEP',cfa__4_com_STEP
+
+ call cfa_SetOP+00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa__4_com_STEP_+00H
+ DB 0C3H
+AHEADER 0 ,'4_,_STEP_',cfa__4_com_STEP_
+
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ call cfa_com+00H
+ DB 08DH,040H,04H
+ DB 0C3H
+AHEADER 0 ,'3_,_STEP',cfa__3_com_STEP
+
+ call cfa__2_com_STEP+00H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ DB 08DH,040H,01H
+ DB 0C3H
+AHEADER 0 ,'2_,_STEP',cfa__2_com_STEP
+
+ call cfa_SetOP+00H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 0FH,0B7H,00H
+ call cfa_Wcom+00H
+ DB 08DH,040H,02H
+ DB 0C3H
+AHEADER 0 ,'1_,_STEP',cfa__1_com_STEP
+
+ call cfa_SetOP+00H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 0FH,0B6H,00H
+ call cfa_Ccom+00H
+ DB 08DH,040H,01H
+ DB 0C3H
+AHEADER 0 ,'+EBP',cfa_plusEBP
+
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_CgreatS+00H
+ call cfa_OFFminusEBP+00H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_Ccom+00H
+ DB 08DH,040H,01H
+ DB 0C3H
+AHEADER 0 ,'MACRO?',cfa_MACROque
+
+ call cfa_INLINEque+00H
+ DB 0C3H
+AHEADER 0 ,'INLINE?',cfa_INLINEque
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 08BH,055H,00H
+ DB 089H,045H,0FCH
+ DB 089H,055H,0F8H
+ DB 08DH,06DH,0F8H
+ call cfa_MM_SIZE+00H
+ DB 0F7H,0D8H
+ DB 03H,045H,00H
+ DB 03BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jb  cfa_INLINEque+036H
+ DB 072H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0C3H
+ DB 08DH,06DH,0FCH
+;jne cfa_INLINEque+052H
+ DB 075H,0CH
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_TRUE+00H
+ DB 0C3H
+ call cfa_DUP5Bque+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_INLINEque+072H-$-4
+ DB 0B8H
+ DD 05H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0EBH,097H
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0F4H
+ DB 081H,0F9H
+ DD 040H
+;jne cfa_INLINEque+090H
+ DB 075H,0EH
+ DB 08BH,045H,00H
+ DB 08DH,040H,01H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 03DH
+ DD 099H
+;jne cfa_INLINEque+0A5H
+ DB 075H,0EH
+ DB 08BH,045H,00H
+ DB 08DH,040H,01H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 089H,045H,0FCH
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0FCH
+ DB 081H,0F9H
+ DD 0ECH
+;jne cfa_INLINEque+0C6H
+ DB 075H,0EH
+ DB 08BH,045H,00H
+ DB 08DH,040H,01H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 03DH
+ DD 0CDH
+;jne cfa_INLINEque+0DBH
+ DB 075H,0EH
+ DB 08BH,045H,00H
+ DB 08DH,040H,02H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 0FH,0B7H,00H
+ call cfa_DUP3Bque_xEBP_y+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_INLINEque+0103H
+ DB 074H,010H
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ call cfa_DUP3Bque+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_INLINEque+0122H
+ DB 074H,010H
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 03DH
+ DD 06D8DH
+;jne cfa_INLINEque+0139H
+ DB 075H,010H
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 03DH
+ DD 0C583H
+;jne cfa_INLINEque+0150H
+ DB 075H,010H
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 03DH
+ DD 0ED83H
+;jne cfa_INLINEque+0167H
+ DB 075H,010H
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ call cfa_DUP2Bque+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_INLINEque+0184H
+ DB 074H,0EH
+ DB 08BH,045H,00H
+ DB 08DH,040H,02H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 03DH
+ DD 0EC87H
+;jne cfa_INLINEque+0199H
+ DB 075H,0EH
+ DB 08BH,045H,00H
+ DB 08DH,040H,02H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 03DH
+ DD 0C58BH
+;jne cfa_INLINEque+01AEH
+ DB 075H,0EH
+ DB 08BH,045H,00H
+ DB 08DH,040H,02H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ call cfa_DUP6Bque+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_INLINEque+01CDH
+ DB 074H,010H
+ DB 0B8H
+ DD 06H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 03DH
+ DD 045C7H
+;jne cfa_INLINEque+01E4H
+ DB 075H,010H
+ DB 0B8H
+ DD 07H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 03DH
+ DD 05C7H
+;jne cfa_INLINEque+01FBH
+ DB 075H,010H
+ DB 0B8H
+ DD 0AH
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 03DH
+ DD 0581H
+;jne cfa_INLINEque+0212H
+ DB 075H,010H
+ DB 0B8H
+ DD 0AH
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 08BH,00H
+ DB 03DH
+ DD 0424448BH
+;jne cfa_INLINEque+0231H
+ DB 075H,010H
+ DB 0B8H
+ DD 04H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 03DH
+ DD 0424448DH
+;jne cfa_INLINEque+0248H
+ DB 075H,010H
+ DB 0B8H
+ DD 04H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 03DH
+ DD 08BE08B5BH
+;jne cfa_INLINEque+0295H
+ DB 075H,046H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0F8H
+ DB 08BH,050H,04H
+ DB 089H,055H,0F8H
+ DB 08BH,00H
+ DB 089H,045H,0F4H
+ DB 0C7H,045H,0F0H
+ DD 0E3FF046DH
+ DB 0B8H
+ DD 08D00458BH
+ DB 08DH,06DH,0F0H
+ call cfa_D_equ+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_INLINEque+0295H
+ DB 074H,0CH
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFH
+ DB 023H,045H,0FCH
+ DB 03DH
+ DD 0C09D0FH
+;jne cfa_INLINEque+02B7H
+ DB 075H,010H
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 03DH
+ DD 0C09E0FH
+;jne cfa_INLINEque+02CEH
+ DB 075H,010H
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 03DH
+ DD 090048DH
+;jne cfa_INLINEque+02E5H
+ DB 075H,010H
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 03DH
+ DD 02048DH
+;jne cfa_INLINEque+02FCH
+ DB 075H,010H
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 03DH
+ DD 040B70FH
+;jne cfa_INLINEque+0313H
+ DB 075H,010H
+ DB 0B8H
+ DD 04H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0FFF8FFH
+ DB 081H,0F9H
+ DD 0B00FH
+;jne cfa_INLINEque+0333H
+ DB 075H,010H
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 03DH
+ DD 020488BH
+;jne cfa_INLINEque+034AH
+ DB 075H,010H
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 03DH
+ DD 020488DH
+;jne cfa_INLINEque+0361H
+ DB 075H,010H
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 03DH
+ DD 085448BH
+;jne cfa_INLINEque+0378H
+ DB 075H,010H
+ DB 0B8H
+ DD 04H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 03DH
+ DD 02048DH
+;jne cfa_INLINEque+038FH
+ DB 075H,010H
+ DB 0B8H
+ DD 04H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ call cfa_DUP7Bque+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_INLINEque+03AEH
+ DB 074H,010H
+ DB 0B8H
+ DD 07H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_INLINEque+09H-$-4
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+AHEADER 0 ,'DO_OPT',cfa_DO_OPT
+
+ call cfa_OPTque+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_DO_OPT+014H
+ DB 074H,05H
+ call cfa_OPT_+00H
+ DB 0C3H
+AHEADER 0 ,'OPT_',cfa_OPT_
+
+ DB 090H
+ call cfa_OPTminusRULES+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_OPT_+01H
+ DB 074H,0F1H
+ call cfa_EVENminusEAX+00H
+ DB 0C3H
+AHEADER 0 ,'-EVEN-EBP',cfa_minusEVENminusEBP
+
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_minusEVENminusEBP+018H
+ DB 076H,01H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 06D8DH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_minusEVENminusEBP+05CH
+ DB 075H,02DH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_plusgreatOFFminusEBP+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 0C3H
+AHEADER 0 ,'OPT-RULES',cfa_OPTminusRULES
+
+ DB 090H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_OPTminusRULES+01EH
+ DB 076H,06H
+ call cfa_TRUE+00H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0408DH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OPTminusRULES+077H-$-4
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_CgreatS+00H
+ call cfa_OFFminusEAX+00H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OFFminusEAX+09H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0EBH,08AH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05H
+ DB 033H,045H,0FCH
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ call cfa_tilBRminusOPT+00H
+ DB 023H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;je  cfa_OPTminusRULES+0DDH
+ DB 074H,03CH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OFFminusEAX+00H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OFFminusEAX+09H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFBH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0808DH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+0130H
+ DB 075H,03CH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,00H
+ call cfa_OFFminusEAX+00H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OFFminusEAX+09H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFAH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OFFminusEAX+00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C033H
+ DB 033H,045H,0FCH
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 023H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;je  cfa_OPTminusRULES+01ABH
+ DB 074H,051H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OFFminusEAX+00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 033H,0C0H
+ DB 08DH,06DH,04H
+ call cfa_OFFminusEAX+09H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 03FFFFFH
+ DB 03DH
+ DD 05048DH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OPTminusRULES+02A7H-$-4
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0870FH
+ DD cfa_OPTminusRULES+0281H-$-4
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,00H
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+0281H
+ DB 075H,068H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0C00000H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 016H
+ DB 08BH,0C8H
+ DB 08BH,045H,0FCH
+ DB 0D3H,0E8H
+ DB 08BH,0C8H
+ DB 08BH,045H,00H
+ DB 0D3H,0E0H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFF9H
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OFFminusEAX+00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 033H,0C0H
+ DB 08DH,06DH,04H
+ call cfa_OFFminusEAX+09H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0B8H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OPTminusRULES+0398H-$-4
+ call cfa_OFFminusEAX+00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 033H,0C0H
+ DB 08DH,06DH,04H
+ call cfa_OFFminusEAX+09H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,040H,01H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+031BH
+ DB 075H,027H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C033H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_OPTminusRULES+0338H
+ DB 076H,06H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 045C7H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+0398H
+ DB 075H,02CH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_CgreatS+00H
+ call cfa_OFFminusEBP+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_OPTminusRULES+0398H
+ DB 076H,0AH
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0C3H
+ DB 08BH,045H,0FCH
+;jne cfa_OPTminusRULES+041AH
+ DB 075H,072H
+ call cfa_OFFminusEBP+00H
+ DB 050H
+ DB 0B8H
+ DD 05555H
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ call cfa_OP0+00H
+ call cfa_minusEBPCLR+00H
+ call cfa_OP0+00H
+ call cfa_minusEBPCLR+00H
+ call cfa_OP0+00H
+ call cfa_minusEBPCLR+00H
+ call cfa_OP0+00H
+ call cfa_minusEBPCLR+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_OPTminusRULES+040EH
+ DB 074H,012H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08DH,06DH,0FCH
+ call cfa_OFFminusEBP+09H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08DH,06DH,0FCH
+ call cfa_OFFminusEBP+09H
+ call cfa_OFFminusEAX+00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C28BH
+ DB 033H,045H,0FCH
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C18BH
+ DB 033H,045H,0FCH
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 0BH,045H,00H
+ DB 023H,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+ DW 0840FH
+ DD cfa_OPTminusRULES+04F0H-$-4
+ call cfa_OFFminusEAX+00H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_SHORTque+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_OPTminusRULES+04AFH
+ DB 074H,030H
+ DB 089H,045H,0FCH
+ DB 0C7H,045H,0F8H
+ DD 0418DH
+ DB 0B8H
+ DD 0C18BH
+ DB 0F7H,0D8H
+ DB 03H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_Ccom+00H
+ DB 0EBH,02EH
+ DB 089H,045H,0FCH
+ DB 0C7H,045H,0F8H
+ DD 0828DH
+ DB 0B8H
+ DD 0C28BH
+ DB 0F7H,0D8H
+ DB 03H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_com+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_OFFminusEAX+09H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,040H,02H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05H
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C069H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+054FH
+ DB 075H,02AH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 080048DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,04H
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0D28BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+0576H
+ DB 075H,010H
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ call cfa_TRUE+00H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 03DH
+ DD 01004583H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+05B9H
+ DB 075H,02DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 045FFH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_OPTminusRULES+05D6H
+ DB 076H,06H
+ call cfa_TRUE+00H
+ DB 0C3H
+ call cfa_quetilEAX+00H
+ DB 0C7H,00H
+ DD 00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFDH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0244489H
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 023H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 023H,045H,0FCH
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jne cfa_OPTminusRULES+0656H
+ DB 075H,020H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFCH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05089H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0408BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+06DEH
+ DB 075H,02DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C28BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 03DH
+ DD 08B0889H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+0711H
+ DB 075H,01DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C18BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 058H
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_picqueEAX_equ+00H
+ DB 023H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+0743H
+ DB 075H,06H
+ call cfa_queEAX_equRULES+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 03DH
+ DD 04503C033H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+0786H
+ DB 075H,02DH
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 08BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 03DH
+ DD 048DC033H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+0811H
+ DB 075H,075H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,040H,02H
+ DB 03DH
+ DD 085H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+0811H
+ DB 075H,05DH
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,04H
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_queCminusJMP+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_OPTminusRULES+0899H
+ DB 074H,079H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0E8H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+0899H
+ DB 075H,044H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FFH,00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFAH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_SetJP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05H
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 025H
+ DD 038FFH
+ DB 03DH
+ DD 08DH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OPTminusRULES+097FH-$-4
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 08BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+090DH
+ DB 075H,03DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 08BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFEFFH
+ DB 03DH
+ DD 0B60FH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+097FH
+ DB 075H,057H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,050H,04H
+ DB 089H,055H,0FCH
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ call cfa__2save+00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jne cfa_OPTminusRULES+09F3H
+ DB 075H,037H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0458BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+09F3H
+ DB 075H,020H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0B8H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OPTminusRULES+0B8BH-$-4
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0D8F7H
+;jne cfa_OPTminusRULES+0A68H
+ DB 075H,049H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ DB 0F7H,0D8H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 03DH
+ DD 0D0F7H
+;jne cfa_OPTminusRULES+0AB8H
+ DB 075H,049H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ DB 0F7H,0D0H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 03DH
+ DD 08BH
+;jne cfa_OPTminusRULES+0AF6H
+ DB 075H,037H
+ DB 0B8H
+ DD 0A1H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 03DH
+ DD 085448BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+0B8BH
+ DB 075H,074H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 0FH,0B6H,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ DB 08DH,04H,085H
+ DD 00H
+ DB 03H,045H,00H
+ DB 089H,045H,00H
+ DB 0B8H
+ DD 0458BH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFAH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589H
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04503H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jne cfa_OPTminusRULES+0C06H
+ DB 075H,023H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02048DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04D89H
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jne cfa_OPTminusRULES+0C8BH
+ DB 075H,02DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D18BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0408DH
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0C7H,045H,0F8H
+ DD 085048DH
+ DB 0B8H
+ DD 0FFFFFFH
+ DB 023H,045H,0F8H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+0D0FH
+ DB 075H,046H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_CgreatS+00H
+ DB 08DH,04H,085H
+ DD 00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 085048DH
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02048DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,00H
+ DB 08DH,080H
+ DD 080H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFF00H
+ DB 023H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+0DB1H
+ DB 075H,03AH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 08244H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFAH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 025H
+ DD 0FFFDH
+ DB 03DH
+ DD 05589H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OPTminusRULES+0E12H-$-4
+ call cfa_OP1+00H
+ DB 090H
+ DB 090H
+ DB 090H
+ call cfa_MOV_EDX__xEBP_y+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_OPTminusRULES+0DD9H
+ DB 074H,0F1H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_OPTminusRULES+0E12H
+ DB 074H,020H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 06DF7H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_CgreatS+00H
+ call cfa_OFFminusEBP+00H
+ DB 03BH,045H,00H
+ DB 0FH,09DH,0C0H
+ DB 083H,0E0H,01H
+ DB 048H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jne cfa_OPTminusRULES+0EE2H
+ DB 075H,037H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0E8F7H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFCH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 025H
+ DD 0E7FFH
+ DB 03DH
+ DD 04589H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+0F5BH
+ DB 075H,05DH
+ call cfa_OFFminusEBP+00H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_CgreatS+00H
+ DB 08DH,040H,04H
+ call cfa_OFFminusEBP+09H
+ call cfa_FALSE+00H
+ call cfa_OP1+00H
+ call cfa_minusEBPCLR+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_OPTminusRULES+0F4FH
+ DB 074H,012H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08DH,06DH,0FCH
+ call cfa_OFFminusEBP+09H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08DH,06DH,0FCH
+ call cfa_OFFminusEBP+09H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0CA8BH
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 088048DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+0FB7H
+ DB 075H,023H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 090048DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0CA8BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 090048DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+0101AH
+ DB 075H,010H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 08D0C8DH
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01048DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+010AEH
+ DB 075H,03DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 088048DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFF9H
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 090048DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+01128H
+ DB 075H,041H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 095H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_com+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 048DD9F7H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+01192H
+ DB 075H,037H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C12BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0244C8BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C12BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+0121CH
+ DB 075H,037H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0442BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D8BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C12BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+012A2H
+ DB 075H,037H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 052BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0A3H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+01351H
+ DB 075H,060H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 05C7H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0244489H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+013E2H
+ DB 075H,03EH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_com+00H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C7H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01001H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+01443H
+ DB 075H,02CH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,040H,01H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01501H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_com+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01089H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+014A4H
+ DB 075H,02CH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,040H,01H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01589H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_com+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 03DH
+ DD 01501D08BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+014D7H
+ DB 075H,01DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0501H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0A4CB60FH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C133H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+01577H
+ DB 075H,052H
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0A443200H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,04H
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0850C8DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01189H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+015F1H
+ DB 075H,027H
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01489H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+016BDH-$-4
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0450BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+01679H
+ DB 075H,02DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C20BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0453BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+016BDH
+ DB 075H,02DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C23BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C28BH
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+0170FH
+ DB 075H,01DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D08BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 045C7H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+0176EH
+ DB 075H,010H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 045C7H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+017D9H
+ DB 075H,010H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0501D08BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+0181CH
+ DB 075H,010H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B9H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01C7H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+018DBH
+ DB 075H,070H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 05C7H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C88BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+01952H
+ DB 075H,042H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 0B9H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 0B8H
+ DD 03H
+ DB 08DH,06DH,04H
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B9H
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D9F7H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+019CAH
+ DB 075H,043H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ DB 0F7H,0D8H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B9H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 025H
+ DD 0F7FFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0E0D3H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+01A5CH
+ DB 075H,03EH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C1H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_Ccom+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 085048BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+01B04H
+ DB 075H,06FH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0A1H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ DB 08DH,04H,085H
+ DD 00H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C033H
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 085048BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+01B7CH
+ DB 075H,03FH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 0B8H
+ DD 0A1H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 025H
+ DD 0F7FFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0E0C1H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+01C21H
+ DB 075H,06BH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 025H
+ DD 0800H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_OPTminusRULES+01BF2H
+ DB 074H,0CH
+ DB 08BH,0C8H
+ DB 08BH,045H,00H
+ DB 0D3H,0E8H
+ DB 08DH,06DH,04H
+ DB 0EBH,0AH
+ DB 08BH,0C8H
+ DB 08BH,045H,00H
+ DB 0D3H,0E0H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0CA8BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C12BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+01C97H
+ DB 075H,027H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C22BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_OPTminusRULES+01CB4H
+ DB 076H,06H
+ call cfa_TRUE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D8F7H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04501H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+01D16H
+ DB 075H,02DH
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 029H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04503D8F7H
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D8F7H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+01D90H
+ DB 075H,046H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0452BH
+ DB 0BH,045H,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ call cfa_ToOP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFCH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ call cfa_ADDlXORlORlAND_equ+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_OPTminusRULES+02200H-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+ DW 0850FH
+ DD cfa_OPTminusRULES+01F81H-$-4
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0878BH
+;jne cfa_OPTminusRULES+01E67H
+ DB 075H,068H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 08700H
+ DB 03H,045H,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFAH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 03DH
+ DD 0458BH
+;jne cfa_OPTminusRULES+01EB5H
+ DB 075H,047H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04500H
+ DB 03H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFH
+ DB 023H,045H,0FCH
+ DB 03DH
+ DD 0B8H
+;jne cfa_OPTminusRULES+01F0CH
+ DB 075H,045H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 08DH,040H,02H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 03DH
+ DD 0A1H
+;jne cfa_OPTminusRULES+01F7BH
+ DB 075H,068H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0500H
+ DB 03H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 045C7H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+0203CH-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,040H,01H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C300H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_EXECUTE+00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04D89H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jne cfa_OPTminusRULES+020AFH
+ DB 075H,036H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C1H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP1+00H
+ call cfa_minusEBPLIT+00H
+ DB 089H,045H,00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 045C7H
+ DB 033H,045H,0FCH
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 023H,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;je  cfa_OPTminusRULES+02165H
+ DB 074H,056H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 04503H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+02165H
+ DB 075H,03FH
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,00H
+ call cfa_OFFminusEAX+00H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OFFminusEAX+09H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 045C7H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+02200H
+ DB 075H,055H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 08DH,040H,02H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,04H
+ call cfa_ALLOT+00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0558BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OPTminusRULES+022C8H-$-4
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP1+00H
+ call cfa_minusEBPLIT+00H
+ DB 089H,045H,00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 045C7H
+ DB 033H,045H,0FCH
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 023H,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;je  cfa_OPTminusRULES+022C2H
+ DB 074H,047H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0BAH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08BH,00H
+ DB 089H,045H,04H
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,04H
+ DB 08BH,00H
+ DB 08DH,06DH,08H
+ call cfa_com+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 04539H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OPTminusRULES+024B3H-$-4
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jne cfa_OPTminusRULES+0234DH
+ DB 075H,02DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D03BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jne cfa_OPTminusRULES+02403H
+ DB 075H,05EH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFAH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0A1H
+ DB 033H,045H,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jne cfa_OPTminusRULES+024B3H
+ DB 075H,058H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 053BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFBH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0458BH
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01089H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+027EDH-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0408DH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+02556H
+ DB 075H,039H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05089H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_Ccom+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_OPTminusRULES+02573H
+ DB 076H,06H
+ call cfa_TRUE+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+027EDH-$-4
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 04589H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OPTminusRULES+02684H-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0B8H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+0262CH
+ DB 075H,05EH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0A3H
+ DB 08DH,06DH,0FCH
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP3+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFF8H
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0878DH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+02684H
+ DB 075H,041H
+ call cfa_OP3+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 08789H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP2+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFBH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 045C7H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OPTminusRULES+027EDH-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0B8H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OPTminusRULES+02749H-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFC000H
+ DB 08DH,06DH,0FCH
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 06H
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP3+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFF9H
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0878DH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OPTminusRULES+027EDH-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 087C7H
+ DB 08DH,06DH,0FCH
+ call cfa_OP3+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,00H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 06H
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP3+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFF8H
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 085048DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04503H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jne cfa_OPTminusRULES+028A1H
+ DB 075H,03DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 048DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04D89H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_queChEAX+00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589H
+ DB 033H,045H,0FCH
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,00H
+ DB 0BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jne cfa_OPTminusRULES+0295DH
+ DB 075H,036H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D1H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 03DH
+ DD 08BC28BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+029AAH
+ DB 075H,037H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 028BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0C3H
+ DB 08BH,045H,0FCH
+;jne cfa_OPTminusRULES+02A26H
+ DB 075H,06CH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D18BH
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01089H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+02A26H
+ DB 075H,037H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0889H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 06DF7H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+ DW 0850FH
+ DD cfa_OPTminusRULES+02B76H-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 045C7H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+02B0EH
+ DB 075H,05BH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ DB 0F7H,06DH,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 04589H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+02B76H
+ DB 075H,051H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 069H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ call cfa_com+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0A1H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 06DF7H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+ DW 0850FH
+ DD cfa_OPTminusRULES+02D25H-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 04589H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+02C5BH
+ DB 075H,058H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02DF7H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFBH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 045C7H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OPTminusRULES+02D25H-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 0B8H
+ DD 02DF7H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFCH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04503008BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jne cfa_OPTminusRULES+02DB9H
+ DB 075H,03DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0CA8BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 051H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+02E5AH
+ DB 075H,037H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 075FFH
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP2+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFBFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 024048BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04503H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jne cfa_OPTminusRULES+02F0EH
+ DB 075H,03DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_queChEAX+00H
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jne cfa_OPTminusRULES+02F98H
+ DB 075H,020H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 025H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPTminusRULES+03064H
+ DB 075H,056H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ call cfa_OP1+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,0FCH
+ call cfa_OPinsert+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D08BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ call cfa_ADDlXORlORlAND_equ+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_OPTminusRULES+033D9H-$-4
+ call cfa_TRUE+00H
+ call cfa_quetilEAX+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ DB 090H
+ DB 090H
+ call cfa_queEAXgreatECX+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_OPTminusRULES+0309DH
+ DB 074H,0F1H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_OPTminusRULES+0315DH-$-4
+ call cfa_quetilEAX+00H
+ DB 08BH,00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_OPTminusRULES+030D5H
+ DB 074H,0AH
+ call cfa_ECXdcoma_equEAX+00H
+ DB 0E9H
+ DD cfa_OPTminusRULES+030E4H-$-4
+ call cfa_EAXgreatECX0+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_OPTminusRULES+030D5H
+ DB 074H,0F1H
+ DB 090H
+ call cfa_EAXgreatECX+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_OPTminusRULES+030E5H
+ DB 074H,0F1H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 04503H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+03130H
+ DB 075H,01FH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01048DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0EBH,027H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C1H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,04H
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_TRUE+00H
+ call cfa_quetilEAX+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ DB 090H
+ DB 090H
+ call cfa_queEAXgreatEBX+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_OPTminusRULES+03179H
+ DB 074H,0F1H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_OPTminusRULES+032BCH-$-4
+ call cfa_quetilEAX+00H
+ DB 08BH,00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_OPTminusRULES+031B1H
+ DB 074H,0AH
+ call cfa_EBXdcoma_equEAX+00H
+ DB 0E9H
+ DD cfa_OPTminusRULES+031C0H-$-4
+ call cfa_EAXgreatEBX0+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_OPTminusRULES+031B1H
+ DB 074H,0F1H
+ DB 090H
+ call cfa_EAXgreatEBX+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_OPTminusRULES+031C1H
+ DB 074H,0F1H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 04503H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+0320FH
+ DB 075H,022H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03048DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0E9H
+ DD cfa_OPTminusRULES+032B6H-$-4
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 04539H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+0324FH
+ DB 075H,029H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C33BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0EBH,067H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0453BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+0328FH
+ DB 075H,029H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D83BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0EBH,027H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C3H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,04H
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 03DH
+ DD 04503D8F7H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OPTminusRULES+033D9H-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0458BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+03355H
+ DB 075H,068H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 0B8H
+ DD 02BH
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0A1H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_OPTminusRULES+033D9H
+ DB 075H,06DH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 08BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_SetOP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02BH
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ call cfa_com+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 025H
+ DD 0FFFDH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 025H
+ DD 0FFFDH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+ DW 0850FH
+ DD cfa_OPTminusRULES+0344FH-$-4
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 03DH
+ DD 0458BC28BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OPTminusRULES+03479H-$-4
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 0B9H
+ DD 0B9H
+ DB 0F7H,0D9H
+ DB 08DH,04H,01H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FEH
+ DB 023H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01189H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+0353DH-$-4
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0BAH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OPTminusRULES+03501H-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01C7H
+ DB 08DH,06DH,0FCH
+ DB 0E9H
+ DD cfa_OPTminusRULES+0350CH-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01589H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 08DH,06DH,0FCH
+ call cfa_OPresize+00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B9H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04D89H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+035C8H-$-4
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 045C7H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_com+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 08D0C8DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01C7H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+03658H-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04C7H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,00H
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ call cfa_com+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C18BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 085048DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+036E0H-$-4
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 08DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 08D048DH
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0FCH
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,00H
+ DB 0BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+037B7H-$-4
+ call cfa_OP1+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,0FCH
+ call cfa_OPinsert+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D08BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 024448BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+03871H-$-4
+ call cfa_OP1+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,0FCH
+ call cfa_OPinsert+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D08BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D9F7CA8BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,040H,0FFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01048DD9H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+038F3H-$-4
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02048DDAH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 045C7D08BH
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0BAH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+0393BH-$-4
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0BAH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05501H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04513H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+03A20H-$-4
+ call cfa_OP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04H
+ DB 08DH,06DH,0FCH
+ call cfa_OPresize+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 04581H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 024448BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0244489H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+03B1FH-$-4
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 03DH
+ DD 08901408DH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OPTminusRULES+03ADEH-$-4
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 03DH
+ DD 089FF408DH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OPTminusRULES+03B1FH-$-4
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04CFFH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0408DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0244403H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B60FH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+03BEEH-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0548BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0244B60FH
+ DB 08DH,06DH,0FCH
+ call cfa_com+00H
+ call cfa_Ccom+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D8F7H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D0F7H
+ DB 033H,045H,0FCH
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 058H
+ DB 033H,045H,0FCH
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C123H
+ DB 033H,045H,0FCH
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,00H
+ DB 0BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ call cfa_ADDlXORlORlAND_equ+00H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0458BH
+ DB 033H,045H,0FCH
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+ DW 0850FH
+ DD cfa_OPTminusRULES+03D0AH-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C2H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,04H
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04D8BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04D89C82BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+03D93H-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04529H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP2+00H
+ call cfa_ToOP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFBH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0458BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+03E1DH-$-4
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0458BH
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C88BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+03EA5H-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04D8BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C18BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_SHORTque+00H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 048DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+03F5DH-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0428DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0428DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+03FEAH-$-4
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04583H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_Ccom+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ call cfa_queEDX__xEBP_y+00H
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+04095H-$-4
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ call cfa_OP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,0FCH
+ call cfa_OPinsert+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D08BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D08BH
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 095048DH
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 095048BH
+ DB 033H,045H,0FCH
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,00H
+ DB 0BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+0413DH-$-4
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 085H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0E1C1CA8BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C10BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+041CDH-$-4
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0E2C1H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C20BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0878DD08BH
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01088H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+04248H-$-4
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,040H,02H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 09788H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0878DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_com+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589D98BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C323H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+042C1H-$-4
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C123H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04D8BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 023F05589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+0433AH-$-4
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04523H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0BF04523H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C20BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+043E0H-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0450BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_Ccom+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04523H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+0447BH-$-4
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_OP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,0FCH
+ call cfa_OPinsert+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C223H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04D89H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04523H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+04516H-$-4
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_OP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,0FCH
+ call cfa_OPinsert+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C123H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_CgreatS+00H
+ call cfa_OFFminusEBP+00H
+ DB 039H,045H,00H
+ DB 01BH,0C0H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 0BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C20BC123H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+045C8H-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0450BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_Ccom+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C123CA8BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0450BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+04641H-$-4
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C223H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04D8BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C10BCA23H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C10BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+046ECH-$-4
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05523H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C20BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0528DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+0479DH-$-4
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04583H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_Ccom+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0E0D3H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C20BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+0484DH-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 045H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_Ccom+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0458BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+04913H-$-4
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_OP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,0FCH
+ call cfa_OPinsert+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D08BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04D8BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01048DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+049ACH-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04503H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04503H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C22BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+04A53H-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0452BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_Ccom+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 0BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02048DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+04B36H-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04503H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 0BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04503H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 06DF7H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+04C52H-$-4
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ call cfa_OP1+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,0FCH
+ call cfa_OPinsert+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C88BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0E9F7H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0AF0FH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04503H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+04D46H-$-4
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ call cfa_OP1+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,0FCH
+ call cfa_OPinsert+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C88BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C103H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C28BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 06DF7H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+04DEDH-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0EAF7H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0860FH
+ DD cfa_OPTminusRULES+04E0EH-$-4
+ call cfa_TRUE+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 03DH
+ DD 0D08BC28BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OPTminusRULES+04E38H-$-4
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0453BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OPTminusRULES+05124H-$-4
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 025H
+ DD 0FFFCFFH
+ DB 03DH
+ DD 0C09C0FH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OPTminusRULES+05124H-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0FCH
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+ DW 0850FH
+ DD cfa_OPTminusRULES+04F67H-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0300H
+ DB 033H,045H,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFAH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0A1H
+ DB 033H,045H,0FCH
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+ DW 0850FH
+ DD cfa_OPTminusRULES+05124H-$-4
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 04589H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OPTminusRULES+05053H-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 053BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP3+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 03H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0300H
+ DB 033H,045H,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFBH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 045C7H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OPTminusRULES+05124H-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03D81H
+ DB 08DH,06DH,0FCH
+ call cfa_OP3+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 06H
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 03H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFBH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0458B1089H
+ DB 033H,045H,0F8H
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 089H,045H,0F4H
+ DB 0B8H
+ DD 05H
+ DB 03H,045H,0F4H
+ DB 08BH,00H
+ DB 089H,045H,0F4H
+ DB 0B8H
+ DD 0C3086D8DH
+ DB 033H,045H,0F4H
+ DB 0BH,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D18BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+0519CH-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0889H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 08DH,040H,02H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 090048DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+ DW 0850FH
+ DD cfa_OPTminusRULES+05296H-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,040H,01H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 085048DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFCH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C28BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+ DW 0850FH
+ DD cfa_OPTminusRULES+053D5H-$-4
+ call cfa_OP3+00H
+ call cfa_OPexcise+00H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D08BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0458BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_DO_EAXgreatECX+00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_SetOP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 089H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 055H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_Ccom+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C033H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04581H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04513H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+05497H-$-4
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D083H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0BAH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0552BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+05586H-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D02BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,04H
+ call cfa_ALLOT+00H
+ call cfa_SetOP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ call cfa_com+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ call cfa_queEDX__xEBP_y+00H
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ call cfa_queEDX__xEBP_y+00H
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+05641H-$-4
+ call cfa_OP2+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,0FCH
+ call cfa_OPinsert+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D08BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP3+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B9H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04D03H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+05733H-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C803H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_SetOP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ call cfa_com+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0A1H
+ DB 033H,045H,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D08BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0A1H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+057DEH-$-4
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ call cfa_OP2+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 08DH,06DH,0FCH
+ call cfa_OPresize+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0158BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0428DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+05908H-$-4
+ call cfa_OP3+00H
+ call cfa_OPexcise+00H
+ call cfa_OP2+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,0FCH
+ call cfa_OPinsert+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C88BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP3+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_OP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,0FCH
+ call cfa_OPinsert+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D18BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP4+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0860FH
+ DD cfa_OPTminusRULES+05929H-$-4
+ call cfa_TRUE+00H
+ DB 0C3H
+ call cfa_OP4+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0458BC88BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 025H
+ DD 0F7FFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0E0D3H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP4+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+ DW 0850FH
+ DD cfa_OPTminusRULES+05A23H-$-4
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 012H
+ DB 0F7H,0D8H
+ DB 03H,045H,0FCH
+ call cfa_OP4+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP4+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP4+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFF4H
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 082448DH
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0889H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+05A97H-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04C89H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP4+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP4+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C203D8F7H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+05BAFH-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP4+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 0B8H
+ DD 0D08BH
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C103D8F7H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP4+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589H
+ DB 033H,045H,0FCH
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04D8BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+05C3FH-$-4
+ call cfa_OP3+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,0FCH
+ call cfa_OPinsert+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0CA8BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP4+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C28BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0EAF7H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04503H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_OPTminusRULES+05D6FH-$-4
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_OP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 08DH,06DH,0FCH
+ call cfa_OPinsert+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0AF0FH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D2H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 0B8H
+ DD 0C203H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP5+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0860FH
+ DD cfa_OPTminusRULES+05D90H-$-4
+ call cfa_TRUE+00H
+ DB 0C3H
+ call cfa_TRUE+00H
+ DB 0C3H
+AHEADER 0 ,'?C-JMP',cfa_queCminusJMP
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 00H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'?EAX=RULES',cfa_queEAX_equRULES
+
+ DB 090H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_queEAX_equRULES+01EH
+ DB 076H,06H
+ call cfa_TRUE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_queChEAX+00H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ call cfa_tilBRminusOPT+00H
+ DB 023H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0840FH
+ DD cfa_queEAX_equRULES+04FH-$-4
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ DB 0EBH,0B2H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 03DH
+ DD 0FC458B58H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_queEAX_equRULES+092H
+ DB 075H,02DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0424648DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0870FH
+ DD cfa_queEAX_equRULES+02BCH-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0B8H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_queEAX_equRULES+0245H-$-4
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 03DH
+ DD 0240401H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_queEAX_equRULES+017BH-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,040H,01H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0240481H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,050H,04H
+ DB 089H,055H,0FCH
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa__2save+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0C7H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_queEAX_equRULES+0245H-$-4
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,040H,01H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05C7H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 06H
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 05H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,050H,04H
+ DB 089H,055H,0FCH
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa__2save+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_queChEAX+00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01501H
+ DB 033H,045H,0FCH
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01589H
+ DB 033H,045H,0FCH
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jne cfa_queEAX_equRULES+02BCH
+ DB 075H,010H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0458BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_queEAX_equRULES+066CH-$-4
+ call cfa_OP1+00H
+ DB 090H
+ call cfa_XX_STEP+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_queEAX_equRULES+02DDH
+ DB 074H,0F1H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_queEAX_equRULES+0316H
+ DB 074H,020H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_DO_EAXgreatECX+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_queEAX_equRULES+032BH
+ DB 074H,06H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_TRUE+00H
+ call cfa_quetilEAX+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_queEAXgreatEBX+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_queEAX_equRULES+0345H
+ DB 074H,0F1H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_queEAX_equRULES+03C2H-$-4
+ call cfa_quetilEAX+00H
+ DB 08BH,00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_queEAX_equRULES+037DH
+ DB 074H,0AH
+ call cfa_EBXdcoma_equEAX+00H
+ DB 0E9H
+ DD cfa_queEAX_equRULES+038CH-$-4
+ call cfa_EAXgreatEBX0+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_queEAX_equRULES+037DH
+ DB 074H,0F1H
+ DB 090H
+ call cfa_EAXgreatEBX+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_queEAX_equRULES+038DH
+ DB 074H,0F1H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_dcomaminusSET+00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0860FH
+ DD cfa_queEAX_equRULES+066CH-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0889H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jne cfa_queEAX_equRULES+0462H
+ DB 075H,02DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C28BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 050H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jne cfa_queEAX_equRULES+04F7H
+ DB 075H,03DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 050H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ call cfa_ToOP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFAH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0BAH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01089H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+0582H
+ DB 075H,03CH
+ call cfa_OP2+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 08DH,06DH,0FCH
+ call cfa_OPresize+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C7H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_dcomaminusSET+00H
+ call cfa_OP4+00H
+ DB 08BH,00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0860FH
+ DD cfa_queEAX_equRULES+066CH-$-4
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP4+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04D89H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01089H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05089H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP4+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;jne cfa_queEAX_equRULES+066CH
+ DB 075H,027H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04889H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0A1H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_queEAX_equRULES+07EAH-$-4
+ call cfa_OP1+00H
+ call cfa_queEAXgreatECX+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_queEAX_equRULES+06C2H
+ DB 074H,0AH
+ call cfa_TqueEAXgreatECX+00H
+ DB 0E9H
+ DD cfa_queEAX_equRULES+0785H-$-4
+ DB 08DH,040H,0FCH
+ call cfa_queOPlast+00H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 039H,045H,00H
+ DB 01BH,0C0H
+ DB 089H,045H,00H
+ DB 058H
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;je  cfa_queEAX_equRULES+0701H
+ DB 074H,015H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0E9H
+ DD cfa_queEAX_equRULES+0785H-$-4
+ DB 089H,045H,0FCH
+ DB 050H
+ DB 08BH,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,04H,024H
+ DB 08DH,040H,0FCH
+ DB 08BH,00H
+ DB 08DH,040H,0FCH
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+0772H
+ DB 075H,040H
+ DB 089H,045H,0FCH
+ DB 08BH,04H,024H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 025H
+ DD 0FDH
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0A1H
+ DB 033H,045H,0F8H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 08DH,06DH,0FCH
+ DB 0BH,0C0H
+;je  cfa_queEAX_equRULES+0760H
+ DB 074H,07H
+ call cfa_FqueEAXgreatECX+00H
+ DB 0EBH,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0EBH,010H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 083H,0C4H,04H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_queEAX_equRULES+06A9H-$-4
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_queEAX_equRULES+07EAH-$-4
+ DB 08DH,040H,0FCH
+ DB 090H
+ call cfa_EAXgreatECX0+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_queEAX_equRULES+07A5H
+ DB 074H,0F1H
+ DB 090H
+ call cfa_EAXgreatECX+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_queEAX_equRULES+07B5H
+ DB 074H,0F1H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFBH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 058H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_queEAX_equRULES+0952H-$-4
+ call cfa_OP1+00H
+ DB 090H
+ DB 090H
+ call cfa_queEAXgreatECX+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_queEAX_equRULES+0842H
+ DB 074H,0AH
+ call cfa_TqueEAXgreatECX+00H
+ DB 0E9H
+ DD cfa_queEAX_equRULES+08C7H-$-4
+ DB 08DH,040H,0FCH
+ call cfa_queOPlast+00H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ call cfa_dcomaminusSET+00H
+ DB 039H,045H,00H
+ DB 01BH,0C0H
+ DB 0BH,045H,04H
+ DB 089H,045H,04H
+ DB 08BH,045H,08H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,00H
+ DB 025H
+ DD 0FF00FFH
+ DB 089H,045H,00H
+ DB 0B8H
+ DD 024008BH
+ DB 033H,045H,00H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 0BH,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+;je  cfa_queEAX_equRULES+08A1H
+ DB 074H,012H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0EBH,026H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 050H
+ DB 08BH,045H,0FCH
+;jne cfa_queEAX_equRULES+08BFH
+ DB 075H,0CH
+ call cfa_TRUE+00H
+ call cfa_TRUE+00H
+ DB 0EBH,08H
+ DB 08DH,040H,04H
+ call cfa_FALSE+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_queEAX_equRULES+0829H-$-4
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_queEAX_equRULES+0952H-$-4
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_OPexcise+00H
+ DB 08DH,040H,0FCH
+ call cfa_quetilEAX+00H
+ DB 08BH,00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_queEAX_equRULES+090CH
+ DB 074H,0AH
+ call cfa_ECXdcoma_equEAX+00H
+ DB 0E9H
+ DD cfa_queEAX_equRULES+091CH-$-4
+ DB 090H
+ call cfa_EAXgreatECX0+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_queEAX_equRULES+090DH
+ DB 074H,0F1H
+ DB 090H
+ call cfa_EAXgreatECX+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_queEAX_equRULES+091DH
+ DB 074H,0F1H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 03DH
+ DD 024048B50H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_queEAX_equRULES+0978H
+ DB 075H,010H
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D08BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 095048BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+09FBH
+ DB 075H,030H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 085H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0A1H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+0A64H
+ DB 075H,010H
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_queEAX_equRULES+0A81H
+ DB 076H,06H
+ call cfa_TRUE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0A3H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_queEAX_equRULES+0D84H-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0B8H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_queEAX_equRULES+0B2AH
+ DB 075H,077H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 05C7H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_OP1+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0C033H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_queEAX_equRULES+0BEFH-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 05C7H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,04H
+ DB 0C7H,00H
+ DD 00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 08H
+ DB 03H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_queEAX_equRULES+0C0CH
+ DB 076H,06H
+ call cfa_TRUE+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0A1H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_queEAX_equRULES+0D7EH-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 025H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_queEAX_equRULES+0D09H-$-4
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP3+00H
+ call cfa_OPexcise+00H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_OP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0AH
+ DB 08DH,06DH,0FCH
+ call cfa_OPinsert+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02581H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 06H
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0408DH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_queEAX_equRULES+0D7EH
+ DB 075H,05EH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,040H,02H
+ DB 03DH
+ DD 0FFH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_queEAX_equRULES+0D7EH
+ DB 075H,046H
+ call cfa_OP3+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 08DH,06DH,0FCH
+ call cfa_OPresize+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0DFFH
+ DB 08DH,06DH,0FCH
+ call cfa_OP3+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_TRUE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0A1H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+0E0FH
+ DB 075H,056H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 03D81H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_OP1+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 050H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_queEAX_equRULES+0E98H
+ DB 075H,072H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0B8H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_queEAX_equRULES+0E98H
+ DB 075H,05BH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 068H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,050H,04H
+ DB 089H,055H,0FCH
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa__2save+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 04589H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_queEAX_equRULES+0F7EH-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0B8H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_queEAX_equRULES+0F7EH-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,040H,01H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 045C7H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08BH,050H,04H
+ DB 089H,055H,0FCH
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa__2save+00H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C88BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+0FE0H
+ DB 075H,02DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B9H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0878DH
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+01042H
+ DB 075H,02DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFH
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 08D048DH
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01089H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+010A2H
+ DB 075H,027H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01489H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D08BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 08D1489H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+0111CH
+ DB 075H,027H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0489H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0458BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+011BFH
+ DB 075H,02DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C28BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C033H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+01260H
+ DB 075H,06CH
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ call cfa_OP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04H
+ DB 08DH,06DH,0FCH
+ call cfa_OPresize+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 0B8H
+ DD 045C7H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 0C7H,00H
+ DD 00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 045C7D08BH
+ DB 033H,045H,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C28BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+012A4H
+ DB 075H,010H
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0BAH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01088H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+01351H
+ DB 075H,05EH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 0FH,0B6H,00H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ call cfa_OP1+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 08DH,06DH,0FCH
+ call cfa_OPresize+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C6H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0808DH
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C6H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+013DEH
+ DB 075H,058H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 080C6H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 0B8H
+ DD 01H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D18BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01089H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+01454H
+ DB 075H,027H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0889H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 024448BH
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 025H
+ DD 0F7FFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 044FFH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+014A2H
+ DB 075H,010H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 021C8DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+01517H
+ DB 075H,03CH
+ call cfa_OP2+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 08DH,06DH,0FCH
+ call cfa_OPresize+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 09A8DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0BAH
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 09A8DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+015C1H
+ DB 075H,075H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,00H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_OP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05H
+ DB 08DH,06DH,0FCH
+ call cfa_OPinsert+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0BBH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C28BH
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C28BC00BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+01622H
+ DB 075H,02DH
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C28BD20BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D18BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C28BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+016B3H
+ DB 075H,027H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C18BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0501D08BH
+ DB 033H,045H,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0589D08BH
+ DB 033H,045H,0FCH
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,00H
+ DB 0BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0458BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+0172CH
+ DB 075H,010H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 03DH
+ DD 01589D08BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_queEAX_equRULES+0175FH
+ DB 075H,01DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0589H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0408DH
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0458BC88BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+017BAH
+ DB 075H,027H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0488DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_queChEAX+00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_picqueEAX_equ+00H
+ DB 023H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B9H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+01808H
+ DB 075H,010H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ call cfa_queEDX__xEBP_y+00H
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0458BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+018A0H
+ DB 075H,02DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C28BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 09788D08BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+018FAH
+ DB 075H,027H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 08788H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 050H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 048BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+0195AH
+ DB 075H,010H
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_queEAX_equRULES+01977H
+ DB 076H,06H
+ call cfa_TRUE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0C28BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_queEAX_equRULES+019D2H
+ DB 075H,044H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 04589H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_queEAX_equRULES+019D2H
+ DB 075H,02DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01000H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0408DC48BH
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0E08BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+01A52H
+ DB 075H,04CH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 0B8H
+ DD 024648D00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,0FFH
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP3+00H
+ call cfa_OPexcise+00H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0C88BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_queEAX_equRULES+01B7BH-$-4
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0428DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C18BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+01B1FH
+ DB 075H,048H
+ call cfa_OP3+00H
+ call cfa_OPexcise+00H
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0528DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP5+00H
+ DB 08BH,00H
+ call cfa_JminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;ja  cfa_queEAX_equRULES+01B7BH
+ DB 077H,045H
+ call cfa_OP5+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C18BH
+ DB 033H,045H,0FCH
+ call cfa_OP4+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0840FH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+01B7BH
+ DB 075H,010H
+ call cfa_OP3+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C103D8F7H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C28BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+01C22H
+ DB 075H,03EH
+ call cfa_OP3+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C82BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04D89H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C82BD08BH
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04D89H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C28BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+01C9BH
+ DB 075H,02AH
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0C3H
+ DB 08BH,045H,0FCH
+;jne cfa_queEAX_equRULES+01C8BH
+ DB 075H,0AH
+ call cfa_OP3+00H
+ call cfa_OPexcise+00H
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0418DD08BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C28BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+01D4CH
+ DB 075H,048H
+ call cfa_OP3+00H
+ call cfa_OPexcise+00H
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0498DH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04D89H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ call cfa_queEDX__xEBP_y+00H
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ call cfa_queEDX__xEBP_y+00H
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0458BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+01DF4H
+ DB 075H,02DH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C28BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0BAH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0458B1001H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+01E7EH
+ DB 075H,03CH
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_OP1+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 08DH,06DH,0FCH
+ call cfa_OPresize+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 081H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 081H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0458BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_queEAX_equRULES+01F4DH-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,00H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 0581H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 045C7H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B9H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0458BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_queEAX_equRULES+02058H-$-4
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 03H,045H,0FCH
+ DB 08BH,00H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 0B8H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_OPinsert+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFEH
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP2+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_queEAX_equRULES+02075H
+ DB 076H,06H
+ call cfa_TRUE+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0A1H
+ DB 033H,045H,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D08BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+02118H
+ DB 075H,053H
+ call cfa_OP3+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 08DH,06DH,0FCH
+ call cfa_OPresize+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0158BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP3+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589H
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 058H
+ DB 033H,045H,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 025H
+ DD 0FFFFFFH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FF408DH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 050H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+021A3H
+ DB 075H,037H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0240CFFH
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP3+00H
+ call cfa_OPexcise+00H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0458BD08BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C28BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+02254H
+ DB 075H,048H
+ call cfa_OP3+00H
+ call cfa_OPexcise+00H
+ call cfa_OP0+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05589H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0C3H
+ DB 033H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D08BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0458BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01089H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0458BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+02317H
+ DB 075H,03EH
+ call cfa_OP3+00H
+ call cfa_OPexcise+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0558BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP2+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0289H
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_OP4+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_queEAX_equRULES+02334H
+ DB 076H,06H
+ call cfa_TRUE+00H
+ DB 0C3H
+ call cfa_OP5+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_queEAX_equRULES+02351H
+ DB 076H,06H
+ call cfa_TRUE+00H
+ DB 0C3H
+ call cfa_OP5+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0FCH
+ call cfa_OP4+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP3+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0BAH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D02BH
+ DB 033H,045H,0FCH
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAX_equRULES+0240AH
+ DB 075H,033H
+ call cfa_OP5+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,00H
+ DB 0F7H,0D8H
+ call cfa_OP2+00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_OPexcise+00H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_TRUE+00H
+ DB 0C3H
+AHEADER 0 ,'FPOP',cfa_FPOP
+
+ call cfa__VECTminusCODE+00H
+ DD cfa_NOOP+00H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'DO_EAX>ECX',cfa_DO_EAXgreatECX
+
+ call cfa_OP1+00H
+ call cfa_queEAXgreatECX+00H
+ DB 0BH,0C0H
+ DW 0850FH
+ DD cfa_DO_EAXgreatECX+0104H-$-4
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_queOPlast+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_DO_EAXgreatECX+036H
+ DB 074H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_DO_EAXgreatECX+05AH
+ DB 076H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 04D89H
+ DB 08BH,045H,0FCH
+ DW 0850FH
+ DD cfa_DO_EAXgreatECX+0FCH-$-4
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_DO_EAXgreatECX+0EAH
+ DB 075H,054H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_quetilEAX+00H
+ DB 0C7H,00H
+ DD 00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,0FCH
+ call cfa_OPinsert+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C18BH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ call cfa_Wsave+00H
+ call cfa_OP0+00H
+ call cfa_TRUE+00H
+ call cfa_TRUE+00H
+ DB 0EBH,010H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0EBH,08H
+ DB 08DH,040H,04H
+ call cfa_FALSE+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_DO_EAXgreatECX+05H-$-4
+ DB 089H,045H,0FCH
+ DB 050H
+ DB 083H,07DH,0FCH,00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_DO_EAXgreatECX+0180H-$-4
+ call cfa_quetilEAX+00H
+ DB 08BH,00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_DO_EAXgreatECX+0141H
+ DB 074H,0AH
+ call cfa_ECXdcoma_equEAX+00H
+ DB 0E9H
+ DD cfa_DO_EAXgreatECX+0150H-$-4
+ call cfa_EAXgreatECX0+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_DO_EAXgreatECX+0141H
+ DB 074H,0F1H
+ DB 090H
+ call cfa_EAXgreatECX+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_DO_EAXgreatECX+0151H
+ DB 074H,0F1H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFDH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08DH,06DH,0FCH
+ DB 0C3H
+AHEADER 0 ,'?EAX:=ECX',cfa_queEAXdcoma_equECX
+
+ call cfa_quetilEAX+00H
+ DB 08BH,00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_queEAXdcoma_equECX+036H
+ DB 074H,025H
+ call cfa_SetOP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 08BH
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C1H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ DB 0C3H
+AHEADER 0 ,'~BR-OPT',cfa_tilBRminusOPT
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 0FFFFFFFFH
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'EBX:=EAX',cfa_EBXdcoma_equEAX
+
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,0F8H
+ call cfa_OPinsert+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D88BH
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 08DH,040H,04H
+ DB 08BH,00H
+ DB 08DH,06DH,0F8H
+ call cfa_Wsave+00H
+ DB 0C3H
+AHEADER 0 ,'ECX:=EAX',cfa_ECXdcoma_equEAX
+
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,0F8H
+ call cfa_OPinsert+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0C88BH
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 08DH,040H,04H
+ DB 08BH,00H
+ DB 08DH,06DH,0F8H
+ call cfa_Wsave+00H
+ DB 0C3H
+AHEADER 0 ,'F?EAX>ECX',cfa_FqueEAXgreatECX
+
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_FqueEAXgreatECX+034H
+ DB 074H,02AH
+ call cfa_quetilEAX+00H
+ DB 08BH,00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_FqueEAXgreatECX+028H
+ DB 074H,0DH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0EBH,05H
+ call cfa_TRUE+00H
+ call cfa_TRUE+00H
+ DB 0EBH,05H
+ call cfa_FALSE+00H
+ DB 0C3H
+AHEADER 0 ,'T?EAX>ECX',cfa_TqueEAXgreatECX
+
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_TqueEAXgreatECX+017H
+ DB 074H,0DH
+ DB 08DH,040H,04H
+ DB 08DH,040H,04H
+ call cfa_FALSE+00H
+ DB 0EBH,0AH
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0C3H
+AHEADER 0 ,'-EBPCLR',cfa_minusEBPCLR
+
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_minusEBPCLR+01FH
+ DB 076H,07H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+ call cfa_OFFminusEBP+00H
+ DB 08DH,040H,0FCH
+ call cfa_OFFminusEBP+09H
+ DB 090H
+ call cfa_queOPlast+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_minusEBPCLR+043H
+ DB 074H,07H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 06D8DH
+ DB 08BH,045H,0FCH
+;jne cfa_minusEBPCLR+05CH
+ DB 075H,07H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0E8H
+ DB 08BH,045H,0FCH
+;jne cfa_minusEBPCLR+075H
+ DB 075H,07H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0E9H
+ DB 08BH,045H,0FCH
+;jne cfa_minusEBPCLR+08EH
+ DB 075H,07H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 025H
+ DD 0F0H
+ DB 03DH
+ DD 070H
+ DB 08BH,045H,0FCH
+;jne cfa_minusEBPCLR+0ACH
+ DB 075H,07H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0EBH
+ DB 08BH,045H,0FCH
+;jne cfa_minusEBPCLR+0C5H
+ DB 075H,07H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 025H
+ DD 0F0FFH
+ DB 03DH
+ DD 0800FH
+ DB 08BH,045H,0FCH
+;jne cfa_minusEBPCLR+0E3H
+ DB 075H,07H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+ DB 08BH,08H
+ DB 08BH,09H
+ DB 081H,0E1H
+ DD 0FFFFFFH
+ DB 081H,0F9H
+ DD 085448BH
+;jne cfa_minusEBPCLR+0FCH
+ DB 075H,07H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_OFFminusEBP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFH
+ DB 023H,045H,0FCH
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_minusEBPCLR+018CH
+ DB 075H,067H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 025H
+ DD 0E7FFH
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0F8H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0F4H
+ DB 0B8H
+ DD 045C7H
+ DB 033H,045H,0F4H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 0BH,045H,0F8H
+ DB 08BH,045H,0FCH
+;je  cfa_minusEBPCLR+0185H
+ DB 074H,020H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_OPexcise+00H
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ DB 08DH,040H,0FCH
+ DB 0EBH,07H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+ DB 08DH,040H,04H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0860FH
+ DD cfa_minusEBPCLR+02DH-$-4
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'-EBPLIT',cfa_minusEBPLIT
+
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jb  cfa_minusEBPLIT+019H
+ DB 072H,01H
+ DB 0C3H
+ call cfa_queOPlast+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_minusEBPLIT+029H
+ DB 074H,01H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 06D8DH
+ DB 08BH,045H,0FCH
+;jne cfa_minusEBPLIT+03CH
+ DB 075H,01H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0E8H
+ DB 08BH,045H,0FCH
+;jne cfa_minusEBPLIT+04FH
+ DB 075H,01H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0E9H
+ DB 08BH,045H,0FCH
+;jne cfa_minusEBPLIT+062H
+ DB 075H,01H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 025H
+ DD 0F0H
+ DB 03DH
+ DD 070H
+ DB 08BH,045H,0FCH
+;jne cfa_minusEBPLIT+07AH
+ DB 075H,01H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0EBH
+ DB 08BH,045H,0FCH
+;jne cfa_minusEBPLIT+08DH
+ DB 075H,01H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 025H
+ DD 0F0FFH
+ DB 03DH
+ DD 0800FH
+ DB 08BH,045H,0FCH
+;jne cfa_minusEBPLIT+0A5H
+ DB 075H,01H
+ DB 0C3H
+ DB 08BH,055H,00H
+ DB 089H,045H,0FCH
+ DB 089H,055H,0F8H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,0F8H
+ DB 08BH,045H,0FCH
+;jne cfa_minusEBPLIT+0BFH
+ DB 075H,01H
+ DB 0C3H
+ DB 08DH,040H,04H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0820FH
+ DD cfa_minusEBPLIT+019H-$-4
+ DB 0C3H
+AHEADER 0 ,'EAX>ECX',cfa_EAXgreatECX
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_EAXgreatECX+01CH
+ DB 075H,06H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 05589H
+ DB 08DH,06DH,0FCH
+;jne cfa_EAXgreatECX+03DH
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 03AFFH
+ DB 081H,0F9H
+ DD 028BH
+;jne cfa_EAXgreatECX+06EH
+ DB 075H,021H
+ DB 0B8H
+ DD 0800H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08BH,055H,0FCH
+ DB 01H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0458BH
+;jne cfa_EAXgreatECX+099H
+ DB 075H,024H
+ DB 0B8H
+ DD 04DH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 08BH
+;jne cfa_EAXgreatECX+0C4H
+ DB 075H,024H
+ DB 0B8H
+ DD 09H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0D08BH
+;jne cfa_EAXgreatECX+0EFH
+ DB 075H,024H
+ DB 0B8H
+ DD 0D1H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0C28BH
+;jne cfa_EAXgreatECX+011AH
+ DB 075H,024H
+ DB 0B8H
+ DD 0CAH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0E0C1H
+;jne cfa_EAXgreatECX+0145H
+ DB 075H,024H
+ DB 0B8H
+ DD 0E1H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0C223H
+;jne cfa_EAXgreatECX+0170H
+ DB 075H,024H
+ DB 0B8H
+ DD 0CAH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0501H
+;jne cfa_EAXgreatECX+0195H
+ DB 075H,01EH
+ DB 0B8H
+ DD 0D01H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ call cfa_Wsave+00H
+ DB 08DH,040H,0FCH
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0508BH
+;jne cfa_EAXgreatECX+01C0H
+ DB 075H,024H
+ DB 0B8H
+ DD 051H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 053BH
+;jne cfa_EAXgreatECX+01EBH
+ DB 075H,024H
+ DB 0B8H
+ DD 0DH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0103BH
+;jne cfa_EAXgreatECX+0216H
+ DB 075H,024H
+ DB 0B8H
+ DD 011H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0C23BH
+;jne cfa_EAXgreatECX+0241H
+ DB 075H,024H
+ DB 0B8H
+ DD 0CAH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0C00BH
+;jne cfa_EAXgreatECX+026CH
+ DB 075H,024H
+ DB 0B8H
+ DD 0C9H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0C01BH
+;jne cfa_EAXgreatECX+0297H
+ DB 075H,024H
+ DB 0B8H
+ DD 0C9H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0F8H
+ DB 03DH
+ DD 0F8D1H
+;jne cfa_EAXgreatECX+02C5H
+ DB 075H,024H
+ DB 0B8H
+ DD 0F9H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0E8C1H
+;jne cfa_EAXgreatECX+02F0H
+ DB 075H,024H
+ DB 0B8H
+ DD 0E9H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 04589H
+;jne cfa_EAXgreatECX+031BH
+ DB 075H,024H
+ DB 0B8H
+ DD 04DH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 05089H
+;jne cfa_EAXgreatECX+0346H
+ DB 075H,024H
+ DB 0B8H
+ DD 051H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 01089H
+;jne cfa_EAXgreatECX+0371H
+ DB 075H,024H
+ DB 0B8H
+ DD 011H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 080C6H
+;jne cfa_EAXgreatECX+039CH
+ DB 075H,024H
+ DB 0B8H
+ DD 081H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0408DH
+;jne cfa_EAXgreatECX+03C7H
+ DB 075H,024H
+ DB 0B8H
+ DD 049H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0408BH
+;jne cfa_EAXgreatECX+03F2H
+ DB 075H,024H
+ DB 0B8H
+ DD 049H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0428DH
+;jne cfa_EAXgreatECX+041AH
+ DB 075H,021H
+ DB 0B8H
+ DD 0800H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08BH,055H,0FCH
+ DB 01H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0808DH
+;jne cfa_EAXgreatECX+0445H
+ DB 075H,024H
+ DB 0B8H
+ DD 089H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0C28BH
+;jne cfa_EAXgreatECX+0470H
+ DB 075H,024H
+ DB 0B8H
+ DD 0CAH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0D8F7H
+;jne cfa_EAXgreatECX+049BH
+ DB 075H,024H
+ DB 0B8H
+ DD 0D9H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0D0F7H
+;jne cfa_EAXgreatECX+04C6H
+ DB 075H,024H
+ DB 0B8H
+ DD 0D1H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0D0F7H
+;jne cfa_EAXgreatECX+04F1H
+ DB 075H,024H
+ DB 0B8H
+ DD 0D1H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 04503H
+;jne cfa_EAXgreatECX+051CH
+ DB 075H,024H
+ DB 0B8H
+ DD 04DH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0523H
+;jne cfa_EAXgreatECX+0547H
+ DB 075H,024H
+ DB 0B8H
+ DD 0DH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0558BH
+;jne cfa_EAXgreatECX+055DH
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0158BH
+;jne cfa_EAXgreatECX+0573H
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 045C7H
+;jne cfa_EAXgreatECX+0589H
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 03DH
+ DD 0244B60FH
+;jne cfa_EAXgreatECX+05BBH
+ DB 075H,021H
+ DB 0B8H
+ DD 0A4CH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08DH,06DH,0FCH
+ call cfa_Wsave+00H
+ DB 08DH,040H,0FCH
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFH
+ DB 023H,045H,0FCH
+ DB 03DH
+ DD 085048DH
+;jne cfa_EAXgreatECX+05EEH
+ DB 075H,021H
+ DB 0B8H
+ DD 08D0CH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08DH,06DH,0FCH
+ call cfa_Wsave+00H
+ DB 08DH,040H,0FCH
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 085048BH
+;jne cfa_EAXgreatECX+0616H
+ DB 075H,021H
+ DB 0B8H
+ DD 08D0CH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08DH,06DH,0FCH
+ call cfa_Wsave+00H
+ DB 08DH,040H,0FCH
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 080B60FH
+;jne cfa_EAXgreatECX+0641H
+ DB 075H,024H
+ DB 0B8H
+ DD 089H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 040B70FH
+;jne cfa_EAXgreatECX+066CH
+ DB 075H,024H
+ DB 0B8H
+ DD 049H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0B70FH
+;jne cfa_EAXgreatECX+0697H
+ DB 075H,024H
+ DB 0B8H
+ DD 09H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 082448BH
+;jne cfa_EAXgreatECX+06BFH
+ DB 075H,021H
+ DB 0B8H
+ DD 08A4CH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08DH,06DH,0FCH
+ call cfa_Wsave+00H
+ DB 08DH,040H,0FCH
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 024048BH
+;jne cfa_EAXgreatECX+06EAH
+ DB 075H,024H
+ DB 0B8H
+ DD 0CH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 024448BH
+;jne cfa_EAXgreatECX+0715H
+ DB 075H,024H
+ DB 0B8H
+ DD 04CH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 024043BH
+;jne cfa_EAXgreatECX+0740H
+ DB 075H,024H
+ DB 0B8H
+ DD 0CH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 024443BH
+;jne cfa_EAXgreatECX+076BH
+ DB 075H,024H
+ DB 0B8H
+ DD 04CH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 024548BH
+;jne cfa_EAXgreatECX+0781H
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 024442BH
+;jne cfa_EAXgreatECX+07ACH
+ DB 075H,024H
+ DB 0B8H
+ DD 04CH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFH
+ DB 023H,045H,0FCH
+ DB 03DH
+ DD 050H
+;jne cfa_EAXgreatECX+07DFH
+ DB 075H,021H
+ DB 0B8H
+ DD 051H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0B8H
+;jne cfa_EAXgreatECX+0807H
+ DB 075H,021H
+ DB 0B8H
+ DD 0B9H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0A3H
+;jne cfa_EAXgreatECX+0842H
+ DB 075H,034H
+ DB 08BH,045H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 08DH,06DH,0FCH
+ call cfa_OPresize+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D89H
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 08BH,00H
+ DB 08DH,06DH,0F8H
+ call cfa_Wsave+00H
+ DB 08DH,040H,0FCH
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0A1H
+;jne cfa_EAXgreatECX+087DH
+ DB 075H,034H
+ DB 08BH,045H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 08DH,06DH,0FCH
+ call cfa_OPresize+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D8BH
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 08BH,00H
+ DB 08DH,06DH,0F8H
+ call cfa_Wsave+00H
+ DB 08DH,040H,0FCH
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 025H
+;jne cfa_EAXgreatECX+08B8H
+ DB 075H,034H
+ DB 08BH,045H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 08DH,06DH,0FCH
+ call cfa_OPresize+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0E181H
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 08BH,00H
+ DB 08DH,06DH,0F8H
+ call cfa_Wsave+00H
+ DB 08DH,040H,0FCH
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0BAH
+;jne cfa_EAXgreatECX+08CEH
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 03DH
+;jne cfa_EAXgreatECX+0909H
+ DB 075H,034H
+ DB 08BH,045H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 08DH,06DH,0FCH
+ call cfa_OPresize+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0F981H
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 08BH,00H
+ DB 08DH,06DH,0F8H
+ call cfa_Wsave+00H
+ DB 08DH,040H,0FCH
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_Udot+00H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ call cfa_Udot+00H
+ call cfa_Udot+00H
+ call cfa__SLITERALminusCODE+00H
+ DB 07H
+ DB 'EAX>ECX',0
+ call cfa_TYPE+00H
+ call cfa_ABORT+00H
+ DB 0C3H
+AHEADER 0 ,'EAX>ECX0',cfa_EAXgreatECX0
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_EAXgreatECX0+01CH
+ DB 075H,06H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0EFFFH
+ DB 081H,0F9H
+ DD 04589H
+ DB 08DH,06DH,0FCH
+;jne cfa_EAXgreatECX0+046H
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0501H
+;jne cfa_EAXgreatECX0+05CH
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 05589H
+;jne cfa_EAXgreatECX0+072H
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 038FFH
+ DB 081H,0F9H
+ DD 08BH
+;jne cfa_EAXgreatECX0+0A3H
+ DB 075H,021H
+ DB 0B8H
+ DD 0800H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08BH,055H,0FCH
+ DB 01H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0C28BH
+;jne cfa_EAXgreatECX0+0CEH
+ DB 075H,024H
+ DB 0B8H
+ DD 0CAH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0808DH
+;jne cfa_EAXgreatECX0+0F9H
+ DB 075H,024H
+ DB 0B8H
+ DD 088H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0408DH
+;jne cfa_EAXgreatECX0+0124H
+ DB 075H,024H
+ DB 0B8H
+ DD 048H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0408BH
+;jne cfa_EAXgreatECX0+014FH
+ DB 075H,024H
+ DB 0B8H
+ DD 048H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0FFH
+ DB 081H,0F9H
+ DD 08BH
+;jne cfa_EAXgreatECX0+016EH
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 038FFH
+ DB 081H,0F9H
+ DD 08DH
+;jne cfa_EAXgreatECX0+019FH
+ DB 075H,021H
+ DB 0B8H
+ DD 0800H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08BH,055H,0FCH
+ DB 01H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0428DH
+;jne cfa_EAXgreatECX0+01C7H
+ DB 075H,021H
+ DB 0B8H
+ DD 0800H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08BH,055H,0FCH
+ DB 01H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0C00BH
+;jne cfa_EAXgreatECX0+01DDH
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 05089H
+;jne cfa_EAXgreatECX0+01F3H
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 01089H
+;jne cfa_EAXgreatECX0+0209H
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 080C6H
+;jne cfa_EAXgreatECX0+021FH
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 045C7H
+;jne cfa_EAXgreatECX0+0235H
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 03DH
+ DD 0244B60FH
+;jne cfa_EAXgreatECX0+026AH
+ DB 075H,024H
+ DB 0B8H
+ DD 04CH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFH
+ DB 023H,045H,0FCH
+ DB 03DH
+ DD 080B60FH
+;jne cfa_EAXgreatECX0+02A0H
+ DB 075H,024H
+ DB 0B8H
+ DD 088H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 03DH
+ DD 040B70FH
+;jne cfa_EAXgreatECX0+02CBH
+ DB 075H,024H
+ DB 0B8H
+ DD 048H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0B70FH
+;jne cfa_EAXgreatECX0+02F6H
+ DB 075H,024H
+ DB 0B8H
+ DD 08H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFH
+ DB 023H,045H,0FCH
+ DB 03DH
+ DD 050H
+;jne cfa_EAXgreatECX0+0317H
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0B8H
+;jne cfa_EAXgreatECX0+033FH
+ DB 075H,021H
+ DB 0B8H
+ DD 0B9H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0BAH
+;jne cfa_EAXgreatECX0+0355H
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 03DH
+;jne cfa_EAXgreatECX0+036BH
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 03BH
+;jne cfa_EAXgreatECX0+0381H
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0A3H
+;jne cfa_EAXgreatECX0+0397H
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0A1H
+;jne cfa_EAXgreatECX0+03D2H
+ DB 075H,034H
+ DB 08BH,045H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 08DH,06DH,0FCH
+ call cfa_OPresize+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0D8BH
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 08BH,00H
+ DB 08DH,06DH,0F8H
+ call cfa_Wsave+00H
+ DB 08DH,040H,0FCH
+ call cfa_TRUE+00H
+ DB 0C3H
+ call cfa_HEX+00H
+ call cfa_Udot+00H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ call cfa_Udot+00H
+ call cfa_Udot+00H
+ call cfa__SLITERALminusCODE+00H
+ DB 08H
+ DB 'EAX>ECX0',0
+ call cfa_TYPE+00H
+ call cfa_ABORT+00H
+ DB 0C3H
+AHEADER 0 ,'?EAX>ECX',cfa_queEAXgreatECX
+
+ call cfa_queOPlast+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_queEAXgreatECX+020H
+ DB 074H,011H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_queEAXgreatECX+049H
+ DB 076H,011H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0F8H
+ DB 089H,045H,0F4H
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0F4H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 089H,045H,0F4H
+ DB 08BH,045H,0F8H
+ DB 089H,045H,0F0H
+ DB 0B8H
+ DD 0458BH
+ DB 033H,045H,0F0H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 0BH,045H,0F4H
+ DB 08BH,045H,0F8H
+ DB 08DH,06DH,0FCH
+;je  cfa_queEAXgreatECX+0E6H
+ DB 074H,061H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAXgreatECX+0BAH
+ DB 075H,0FH
+ DB 08DH,040H,0FCH
+ call cfa_TRUE+00H
+ call cfa_TRUE+00H
+ DB 0EBH,02BH
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0458BH
+ DB 08BH,045H,0FCH
+;jne cfa_queEAXgreatECX+0DDH
+ DB 075H,011H
+ call cfa_quetilEAX+00H
+ DB 0C7H,00H
+ DD 00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 08DH,040H,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 05589H
+;jne cfa_queEAXgreatECX+012EH
+ DB 075H,041H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAXgreatECX+0125H
+ DB 075H,012H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0EBH,08H
+ DB 08DH,040H,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_quetilEAXlsk+00H
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 03AFFH
+ DB 081H,0F9H
+ DD 028BH
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 08BH
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 0408DH
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 0408BH
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 0428DH
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 0C28BH
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ call cfa_TRUE+00H
+ call cfa_quetilEAX+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 03DH
+ DD 0C00BH
+ DB 08DH,06DH,08H
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 0C01BH
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 089H,045H,0F8H
+ DB 03DH
+ DD 0F8D1H
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 0E8C1H
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 0D8F7H
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 0D0F7H
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 0D0F7H
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 04503H
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 0523H
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 0E0C1H
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 0C223H
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ call cfa_rskquetilEAX+00H
+ DB 03DH
+ DD 0508BH
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 053BH
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 0103BH
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 0558BH
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 0158BH
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 0D08BH
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 0501H
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 05089H
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 01089H
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 080C6H
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 045C7H
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFH
+ DB 023H,045H,0FCH
+ DB 03DH
+ DD 050H
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 0A3H
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_quetilEAXlsk+00H
+ DB 03DH
+ DD 0B8H
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 0A1H
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ call cfa_TRUE+00H
+ call cfa_quetilEAX+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 089H,045H,00H
+ DB 03DH
+ DD 025H
+ DB 08DH,06DH,08H
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ call cfa_rskquetilEAX+00H
+ DB 03DH
+ DD 0BAH
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 03DH
+ DD 03DH
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_quetilEAXlsk+00H
+ DB 03DH
+ DD 0244B60FH
+ DW 0840FH
+ DD cfa_queEAXgreatECX+03C3H-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFH
+ DB 023H,045H,0FCH
+ DB 03DH
+ DD 085048DH
+;je  cfa_queEAXgreatECX+03C3H
+ DB 074H,078H
+ DB 03DH
+ DD 085048BH
+;je  cfa_queEAXgreatECX+03C3H
+ DB 074H,071H
+ DB 03DH
+ DD 080B60FH
+;je  cfa_queEAXgreatECX+03C3H
+ DB 074H,06AH
+ DB 03DH
+ DD 040B70FH
+;je  cfa_queEAXgreatECX+03C3H
+ DB 074H,063H
+ DB 03DH
+ DD 0B70FH
+;je  cfa_queEAXgreatECX+03C3H
+ DB 074H,05CH
+ DB 03DH
+ DD 082448BH
+;je  cfa_queEAXgreatECX+03C3H
+ DB 074H,055H
+ DB 03DH
+ DD 024048BH
+;je  cfa_queEAXgreatECX+03C3H
+ DB 074H,04EH
+ DB 03DH
+ DD 024448BH
+;je  cfa_queEAXgreatECX+03C3H
+ DB 074H,047H
+ call cfa_TRUE+00H
+ call cfa_quetilEAX+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 03DH
+ DD 024442BH
+ DB 08DH,06DH,08H
+;je  cfa_queEAXgreatECX+03C3H
+ DB 074H,02BH
+ call cfa_rskquetilEAX+00H
+ DB 03DH
+ DD 024043BH
+;je  cfa_queEAXgreatECX+03C3H
+ DB 074H,01FH
+ DB 03DH
+ DD 024443BH
+;je  cfa_queEAXgreatECX+03C3H
+ DB 074H,018H
+ DB 03DH
+ DD 024548BH
+;je  cfa_queEAXgreatECX+03C3H
+ DB 074H,011H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 08BH,045H,00H
+ DB 08DH,040H,04H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+AHEADER 0 ,'EAX>EBX',cfa_EAXgreatEBX
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_EAXgreatEBX+01CH
+ DB 075H,06H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0508BH
+ DB 08DH,06DH,0FCH
+;jne cfa_EAXgreatEBX+052H
+ DB 075H,024H
+ DB 0B8H
+ DD 053H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 083BH
+;jne cfa_EAXgreatEBX+07AH
+ DB 075H,021H
+ DB 0B8H
+ DD 0BH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08DH,06DH,0FCH
+ call cfa_Wsave+00H
+ DB 08DH,040H,0FCH
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0C83BH
+;jne cfa_EAXgreatEBX+0A2H
+ DB 075H,021H
+ DB 0B8H
+ DD 0CBH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08DH,06DH,0FCH
+ call cfa_Wsave+00H
+ DB 08DH,040H,0FCH
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0C13BH
+;jne cfa_EAXgreatEBX+0CAH
+ DB 075H,021H
+ DB 0B8H
+ DD 0D9H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08DH,06DH,0FCH
+ call cfa_Wsave+00H
+ DB 08DH,040H,0FCH
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 088BH
+;jne cfa_EAXgreatEBX+0F5H
+ DB 075H,024H
+ DB 0B8H
+ DD 0BH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0458BH
+;jne cfa_EAXgreatEBX+0120H
+ DB 075H,024H
+ DB 0B8H
+ DD 05DH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 098BH
+;jne cfa_EAXgreatEBX+0136H
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 04D8BH
+;jne cfa_EAXgreatEBX+014CH
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 05589H
+;jne cfa_EAXgreatEBX+0162H
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0C88BH
+;jne cfa_EAXgreatEBX+018DH
+ DB 075H,024H
+ DB 0B8H
+ DD 0CBH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0889H
+;jne cfa_EAXgreatEBX+01B8H
+ DB 075H,024H
+ DB 0B8H
+ DD 0BH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 01089H
+;jne cfa_EAXgreatEBX+01E3H
+ DB 075H,024H
+ DB 0B8H
+ DD 013H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 04889H
+;jne cfa_EAXgreatEBX+020EH
+ DB 075H,024H
+ DB 0B8H
+ DD 04BH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 04589H
+;jne cfa_EAXgreatEBX+0239H
+ DB 075H,024H
+ DB 0B8H
+ DD 05DH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0408DH
+;jne cfa_EAXgreatEBX+0264H
+ DB 075H,024H
+ DB 0B8H
+ DD 05BH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0808DH
+;jne cfa_EAXgreatEBX+028FH
+ DB 075H,024H
+ DB 0B8H
+ DD 09BH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 08BH
+;jne cfa_EAXgreatEBX+02BAH
+ DB 075H,024H
+ DB 0B8H
+ DD 01BH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0C18BH
+;jne cfa_EAXgreatEBX+02E5H
+ DB 075H,024H
+ DB 0B8H
+ DD 0D9H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0D8F7H
+;jne cfa_EAXgreatEBX+0310H
+ DB 075H,024H
+ DB 0B8H
+ DD 0DBH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFH
+ DB 023H,045H,0FCH
+ DB 03DH
+ DD 08D0489H
+;jne cfa_EAXgreatEBX+0350H
+ DB 075H,024H
+ DB 0B8H
+ DD 01CH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 024048BH
+;jne cfa_EAXgreatEBX+037BH
+ DB 075H,024H
+ DB 0B8H
+ DD 01CH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0240C8BH
+;jne cfa_EAXgreatEBX+0391H
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 024442BH
+;jne cfa_EAXgreatEBX+03BCH
+ DB 075H,024H
+ DB 0B8H
+ DD 05CH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_HEX+00H
+ call cfa_Udot+00H
+ call cfa_Udot+00H
+ call cfa__SLITERALminusCODE+00H
+ DB 07H
+ DB 'EAX>EBX',0
+ call cfa_TYPE+00H
+ call cfa_ABORT+00H
+ DB 0C3H
+AHEADER 0 ,'EAX>EBX0',cfa_EAXgreatEBX0
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_EAXgreatEBX0+01CH
+ DB 075H,06H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0508BH
+ DB 08DH,06DH,0FCH
+;jne cfa_EAXgreatEBX0+03DH
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 088BH
+;jne cfa_EAXgreatEBX0+053H
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 098BH
+;jne cfa_EAXgreatEBX0+069H
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 04D8BH
+;jne cfa_EAXgreatEBX0+07FH
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 05589H
+;jne cfa_EAXgreatEBX0+095H
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0C88BH
+;jne cfa_EAXgreatEBX0+0ABH
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0889H
+;jne cfa_EAXgreatEBX0+0C1H
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 01089H
+;jne cfa_EAXgreatEBX0+0D7H
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 04889H
+;jne cfa_EAXgreatEBX0+0EDH
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0408DH
+;jne cfa_EAXgreatEBX0+0118H
+ DB 075H,024H
+ DB 0B8H
+ DD 058H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0808DH
+;jne cfa_EAXgreatEBX0+0143H
+ DB 075H,024H
+ DB 0B8H
+ DD 098H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 03DH
+ DD 08BH
+;jne cfa_EAXgreatEBX0+016EH
+ DB 075H,024H
+ DB 0B8H
+ DD 018H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0C18BH
+;jne cfa_EAXgreatEBX0+0199H
+ DB 075H,024H
+ DB 0B8H
+ DD 0D9H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0458BH
+;jne cfa_EAXgreatEBX0+01C4H
+ DB 075H,024H
+ DB 0B8H
+ DD 05DH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0D8F7H
+;jne cfa_EAXgreatEBX0+01EFH
+ DB 075H,024H
+ DB 0B8H
+ DD 0DBH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFH
+ DB 023H,045H,0FCH
+ DB 03DH
+ DD 08D0489H
+;jne cfa_EAXgreatEBX0+021AH
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 024048BH
+;jne cfa_EAXgreatEBX0+0245H
+ DB 075H,024H
+ DB 0B8H
+ DD 01CH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0240C8BH
+;jne cfa_EAXgreatEBX0+025BH
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFH
+ DB 023H,045H,0FCH
+ DB 03DH
+ DD 03BH
+;jne cfa_EAXgreatEBX0+027CH
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_HEX+00H
+ call cfa_Udot+00H
+ call cfa_Udot+00H
+ call cfa__SLITERALminusCODE+00H
+ DB 08H
+ DB 'EAX>EBX0',0
+ call cfa_TYPE+00H
+ call cfa_ABORT+00H
+ DB 0C3H
+AHEADER 0 ,'?EAX>EBX',cfa_queEAXgreatEBX
+
+ call cfa_queOPlast+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_queEAXgreatEBX+020H
+ DB 074H,011H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_queEAXgreatEBX+049H
+ DB 076H,011H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0F8H
+ DB 089H,045H,0F4H
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0F4H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 089H,045H,0F4H
+ DB 08BH,045H,0F8H
+ DB 089H,045H,0F0H
+ DB 0B8H
+ DD 0458BH
+ DB 033H,045H,0F0H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 0BH,045H,0F4H
+ DB 08BH,045H,0F8H
+ DB 08DH,06DH,0FCH
+;je  cfa_queEAXgreatEBX+0E6H
+ DB 074H,061H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAXgreatEBX+0BAH
+ DB 075H,0FH
+ DB 08DH,040H,0FCH
+ call cfa_TRUE+00H
+ call cfa_TRUE+00H
+ DB 0EBH,02BH
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0458BH
+ DB 08BH,045H,0FCH
+;jne cfa_queEAXgreatEBX+0DDH
+ DB 075H,011H
+ call cfa_quetilEAX+00H
+ DB 0C7H,00H
+ DD 00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 08DH,040H,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 083BH
+ DW 0840FH
+ DD cfa_queEAXgreatEBX+027AH-$-4
+ DB 03DH
+ DD 0C83BH
+ DW 0840FH
+ DD cfa_queEAXgreatEBX+027AH-$-4
+ DB 03DH
+ DD 0C13BH
+ DW 0840FH
+ DD cfa_queEAXgreatEBX+027AH-$-4
+ DB 03DH
+ DD 0508BH
+ DW 0840FH
+ DD cfa_queEAXgreatEBX+027AH-$-4
+ DB 03DH
+ DD 088BH
+ DW 0840FH
+ DD cfa_queEAXgreatEBX+027AH-$-4
+ DB 03DH
+ DD 098BH
+ DW 0840FH
+ DD cfa_queEAXgreatEBX+027AH-$-4
+ DB 03DH
+ DD 0C88BH
+ DW 0840FH
+ DD cfa_queEAXgreatEBX+027AH-$-4
+ DB 03DH
+ DD 0889H
+ DW 0840FH
+ DD cfa_queEAXgreatEBX+027AH-$-4
+ DB 03DH
+ DD 01089H
+ DW 0840FH
+ DD cfa_queEAXgreatEBX+027AH-$-4
+ DB 03DH
+ DD 04889H
+ DW 0840FH
+ DD cfa_queEAXgreatEBX+027AH-$-4
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_quetilEAXlsk+00H
+ DB 03DH
+ DD 0408DH
+ DW 0840FH
+ DD cfa_queEAXgreatEBX+027AH-$-4
+ DB 03DH
+ DD 0808DH
+ DW 0840FH
+ DD cfa_queEAXgreatEBX+027AH-$-4
+ DB 03DH
+ DD 08BH
+ DW 0840FH
+ DD cfa_queEAXgreatEBX+027AH-$-4
+ DB 03DH
+ DD 0C18BH
+ DW 0840FH
+ DD cfa_queEAXgreatEBX+027AH-$-4
+ call cfa_TRUE+00H
+ call cfa_quetilEAX+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 03DH
+ DD 0D8F7H
+ DB 08DH,06DH,08H
+ DW 0840FH
+ DD cfa_queEAXgreatEBX+027AH-$-4
+ call cfa_rskquetilEAX+00H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFH
+ DB 023H,045H,0FCH
+ DB 03DH
+ DD 0240C8BH
+ DW 0840FH
+ DD cfa_queEAXgreatEBX+027AH-$-4
+ DB 03DH
+ DD 08D0489H
+ DW 0840FH
+ DD cfa_queEAXgreatEBX+027AH-$-4
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_quetilEAXlsk+00H
+ DB 03DH
+ DD 024048BH
+ DW 0840FH
+ DD cfa_queEAXgreatEBX+027AH-$-4
+ call cfa_TRUE+00H
+ call cfa_quetilEAX+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 03DH
+ DD 024442BH
+ DB 08DH,06DH,08H
+;je  cfa_queEAXgreatEBX+027AH
+ DB 074H,069H
+ call cfa_rskquetilEAX+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFH
+ DB 023H,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_queEAXgreatEBX+025BH
+ DB 075H,011H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 03DH
+ DD 04D8BH
+;je  cfa_queEAXgreatEBX+027AH
+ DB 074H,018H
+ DB 03DH
+ DD 05589H
+;je  cfa_queEAXgreatEBX+027AH
+ DB 074H,011H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 08BH,045H,00H
+ DB 08DH,040H,04H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+AHEADER 0 ,'}?~EAX',cfa_rskquetilEAX
+
+ call cfa_SAVEminusquetilEAX+00H
+ DB 08BH,00H
+ call cfa_quetilEAX+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'?~EAX{',cfa_quetilEAXlsk
+
+ call cfa_quetilEAX+00H
+ DB 08BH,00H
+ call cfa_SAVEminusquetilEAX+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_quetilEAX+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'SAVE-?~EAX',cfa_SAVEminusquetilEAX
+
+ call cfa__CREATEminusCODE+00H
+ DD 00H
+AHEADER 0 ,'?~EAX',cfa_quetilEAX
+
+ call cfa__CREATEminusCODE+00H
+ DD 00H
+AHEADER 0 ,'OPinsert',cfa_OPinsert
+
+ DB 089H,045H,0FCH
+ DB 050H
+ DB 08BH,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,045H,0FCH
+ DB 089H,055H,0F8H
+ DB 08DH,06DH,0F8H
+ call cfa_OPresize+00H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_CELL+00H
+ DB 03H,045H,00H
+ DB 089H,045H,00H
+ DB 08BH,045H,04H
+ call cfa_OP0+00H
+ DB 0F7H,0D8H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OpBuffSize+00H
+ DB 08DH,040H,0FCH
+ DB 0F7H,0D8H
+ DB 03H,045H,00H
+ DB 0F7H,0D8H
+ DB 08DH,06DH,04H
+ call cfa_MOVE+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08BH,055H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,0C2H
+ DB 08BH,055H,0FCH
+ DB 01H,010H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'OPresize',cfa_OPresize
+
+ DB 089H,045H,0FCH
+ DB 050H
+ DB 08BH,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08DH,06DH,08H
+ DB 0BBH
+ DD cfa_OPresize+060H
+ DB 03BH,045H,0F8H
+;jne cfa_OPresize+027H
+ DB 075H,05H
+ DB 08BH,045H,0FCH
+ DB 0FFH,0E3H
+ DB 053H
+ DB 0BBH
+ DD 080000000H
+ DB 02BH,05DH,0F8H
+ DB 053H
+ DB 03H,0D8H
+ DB 053H
+ DB 08BH,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 08BH,04H,024H
+ DB 02BH,044H,024H,04H
+ DB 08BH,055H,0F8H
+ DB 01H,010H
+ DB 08BH,045H,0FCH
+ call cfa_CELL+00H
+ DB 01H,04H,024H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jno cfa_OPresize+037H
+ DB 071H,0DBH
+ DB 08DH,064H,024H,0CH
+ call cfa_ALLOT+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 058H
+ DB 03H,045H,0F8H
+ DB 089H,045H,0F8H
+ DB 08DH,06DH,0F8H
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 0F7H,0D8H
+ DB 03H,045H,00H
+ DB 0F7H,0D8H
+ DB 08DH,06DH,04H
+ call cfa_MOVE+00H
+ DB 0C3H
+AHEADER 0 ,'MOV_EDX_[EBP]',cfa_MOV_EDX__xEBP_y
+
+ call cfa_queOPlast+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_MOV_EDX__xEBP_y+020H
+ DB 074H,011H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_MOV_EDX__xEBP_y+049H
+ DB 076H,011H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ call cfa_queChEAX+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_MOV_EDX__xEBP_y+069H
+ DB 075H,09H
+ DB 08DH,040H,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_queEDX__xEBP_y+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_MOV_EDX__xEBP_y+087H
+ DB 075H,09H
+ DB 08DH,040H,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0448BH
+ DB 08DH,06DH,0FCH
+;jne cfa_MOV_EDX__xEBP_y+0A8H
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,04H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 01489H
+;jne cfa_MOV_EDX__xEBP_y+0BEH
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,04H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 08BCAH
+;jne cfa_MOV_EDX__xEBP_y+0D4H
+ DB 075H,0FH
+ DB 08BH,045H,00H
+ DB 08DH,040H,04H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0FFFDH
+ DB 081H,0F9H
+ DD 05589H
+;jne cfa_MOV_EDX__xEBP_y+0110H
+ DB 075H,02CH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0C3H
+AHEADER 0 ,'?EDX_[EBP]',cfa_queEDX__xEBP_y
+
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0FFFFFFH
+ DB 023H,045H,0F8H
+ DB 03DH
+ DD 024048BH
+ DB 08DH,06DH,0FCH
+;jne cfa_queEDX__xEBP_y+028H
+ DB 075H,0CH
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFH
+ DB 023H,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0458BH
+ DB 033H,045H,0F8H
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 089H,045H,0F4H
+ DB 0B8H
+ DD 04589H
+ DB 033H,045H,0F4H
+ DB 0BH,045H,0F8H
+ DB 08BH,045H,0FCH
+;jne cfa_queEDX__xEBP_y+081H
+ DB 075H,027H
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,04H
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 08DH,06DH,04H
+ DB 0C3H
+ DB 089H,045H,00H
+ call cfa_ADDlXORlORlAND_equ+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_queEDX__xEBP_y+09FH
+ DB 074H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0E8C1H
+;jne cfa_queEDX__xEBP_y+0B2H
+ DB 075H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0418DH
+;jne cfa_queEDX__xEBP_y+0C5H
+ DB 075H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0408DH
+;jne cfa_queEDX__xEBP_y+0D8H
+ DB 075H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0878DH
+;jne cfa_queEDX__xEBP_y+0EBH
+ DB 075H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0D0F7H
+;jne cfa_queEDX__xEBP_y+0FEH
+ DB 075H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0D8F7H
+;jne cfa_queEDX__xEBP_y+0111H
+ DB 075H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0C123H
+;jne cfa_queEDX__xEBP_y+0124H
+ DB 075H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0C033H
+;jne cfa_queEDX__xEBP_y+0137H
+ DB 075H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0808DH
+;jne cfa_queEDX__xEBP_y+014AH
+ DB 075H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 088BH
+;jne cfa_queEDX__xEBP_y+015DH
+ DB 075H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0C00BH
+;jne cfa_queEDX__xEBP_y+0170H
+ DB 075H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0488DH
+;jne cfa_queEDX__xEBP_y+0183H
+ DB 075H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0E0D3H
+;jne cfa_queEDX__xEBP_y+0196H
+ DB 075H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFH
+ DB 023H,045H,0FCH
+ DB 03DH
+ DD 0A1H
+;jne cfa_queEDX__xEBP_y+01B4H
+ DB 075H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 058H
+;jne cfa_queEDX__xEBP_y+01C7H
+ DB 075H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0B9H
+;jne cfa_queEDX__xEBP_y+01DAH
+ DB 075H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 0C3H
+AHEADER 0 ,'XX_STEP',cfa_XX_STEP
+
+ call cfa_queOPlast+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_XX_STEP+020H
+ DB 074H,011H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 089H,045H,0F8H
+ DB 08DH,06DH,0F8H
+ call cfa_dcomaminusSET+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_XX_STEP+04CH
+ DB 076H,011H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 03DH
+ DW 0840FH
+ DD cfa_XX_STEP+01CCH-$-4
+ DB 03DH
+ DD 03BH
+ DW 0840FH
+ DD cfa_XX_STEP+01CCH-$-4
+ DB 03DH
+ DD 0A3H
+ DW 0840FH
+ DD cfa_XX_STEP+01CCH-$-4
+ DB 03DH
+ DD 0B9H
+ DW 0840FH
+ DD cfa_XX_STEP+01CCH-$-4
+ DB 03DH
+ DD 0BAH
+ DW 0840FH
+ DD cfa_XX_STEP+01CCH-$-4
+ DB 03DH
+ DD 0BBH
+ DW 0840FH
+ DD cfa_XX_STEP+01CCH-$-4
+ DB 03DH
+ DD 050H
+ DW 0840FH
+ DD cfa_XX_STEP+01CCH-$-4
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 08BH,00H
+ DB 0FH,0B7H,00H
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 04FFH
+ DB 081H,0F9H
+ DD 04C7H
+ DW 0840FH
+ DD cfa_XX_STEP+01CCH-$-4
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 040FEH
+ DB 081H,0F9H
+ DD 088H
+ DW 0840FH
+ DD cfa_XX_STEP+01CCH-$-4
+ DB 03DH
+ DD 04D89H
+ DW 0840FH
+ DD cfa_XX_STEP+01CCH-$-4
+ DB 03DH
+ DD 0558BH
+ DW 0840FH
+ DD cfa_XX_STEP+01CCH-$-4
+ DB 03DH
+ DD 04C8BH
+ DW 0840FH
+ DD cfa_XX_STEP+01CCH-$-4
+ DB 03DH
+ DD 0648DH
+ DW 0840FH
+ DD cfa_XX_STEP+01CCH-$-4
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 034FFH
+ DB 081H,0F9H
+ DD 04FFH
+ DW 0840FH
+ DD cfa_XX_STEP+01CCH-$-4
+ DB 03DH
+ DD 0C00BH
+ DW 0840FH
+ DD cfa_XX_STEP+01CCH-$-4
+ DB 03DH
+ DD 0D00BH
+ DW 0840FH
+ DD cfa_XX_STEP+01CCH-$-4
+ DB 03DH
+ DD 0D02BH
+ DW 0840FH
+ DD cfa_XX_STEP+01CCH-$-4
+ DB 03DH
+ DD 0401H
+ DW 0840FH
+ DD cfa_XX_STEP+01CCH-$-4
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 06FDH
+ DB 081H,0F9H
+ DD 0481H
+ DW 0840FH
+ DD cfa_XX_STEP+01CCH-$-4
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0FFFDH
+ DB 081H,0F9H
+ DD 04589H
+;jne cfa_XX_STEP+01BBH
+ DB 075H,05CH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_XX_STEP+0194H
+ DB 075H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 03DH
+ DD 0458BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_XX_STEP+01B2H
+ DB 075H,011H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 08DH,040H,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 08BH,045H,00H
+ DB 08DH,040H,04H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+AHEADER 0 ,'?OPlast',cfa_queOPlast
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ call cfa_OpBuffSize+00H
+ DB 03H,045H,00H
+ DB 08DH,040H,0FCH
+ DB 08DH,040H,0FCH
+ DB 03BH,045H,04H
+ DB 01BH,0C0H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'OPexcise',cfa_OPexcise
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_OPexcise+033H
+ DB 075H,01DH
+ DB 08BH,00H
+ call cfa_DP+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_OP1+00H
+ call cfa_ToOP0+00H
+ DB 0C3H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 08BH,04H,024H
+ DB 08DH,040H,0FCH
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 08BH,04H,024H
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 08BH,04H,024H
+ DB 08DH,040H,0FCH
+ DB 08BH,00H
+ DB 0F7H,0D8H
+ DB 03H,045H,0FCH
+ call cfa_CMOVE+00H
+ DB 089H,045H,0FCH
+ DB 08BH,04H,024H
+ DB 08DH,06DH,0FCH
+ call cfa_OP_SIZE+00H
+ DB 0F7H,0D8H
+ DB 089H,045H,0FCH
+ DB 08BH,04H,024H
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 0BAH
+ DD 080000000H
+ DB 02BH,055H,00H
+ DB 08DH,01CH,02H
+ DB 08BH,045H,04H
+ DB 08BH,0D2H
+ DB 08DH,06DH,08H
+ DB 068H
+ DD cfa_OPexcise+0CAH
+ DB 052H
+ DB 053H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 08BH,04H,024H
+ DB 02BH,044H,024H,04H
+ DB 08BH,055H,0F8H
+ DB 01H,010H
+ DB 08BH,045H,0FCH
+ call cfa_CELL+00H
+ DB 01H,04H,024H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jno cfa_OPexcise+0A1H
+ DB 071H,0DBH
+ DB 08DH,064H,024H,0CH
+ call cfa_ALLOT+00H
+ DB 089H,045H,0FCH
+ DB 08BH,04H,024H
+ DB 08DH,040H,04H
+ DB 089H,045H,0F8H
+ DB 08BH,04H,024H
+ DB 08DH,06DH,0F8H
+ call cfa_OpBuffSize+00H
+ DB 08DH,040H,0FCH
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 0F7H,0D8H
+ DB 03H,045H,0FCH
+ call cfa_OP0+00H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_CMOVE+00H
+ DB 0C3H
+AHEADER 0 ,'OP_SIZE',cfa_OP_SIZE
+
+ DB 0BH,0C0H
+;je  cfa_OP_SIZE+04H
+ DB 074H,00H
+ DB 089H,045H,0FCH
+ DB 08DH,040H,0FCH
+ DB 08BH,00H
+ DB 08BH,055H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,0C2H
+ DB 08BH,00H
+ DB 0F7H,0D8H
+ DB 03H,045H,0FCH
+ DB 0C3H
+AHEADER 0 ,'^?EAX=',cfa_picqueEAX_equ
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_queChEAX+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_picqueEAX_equ+021H
+ DB 074H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0FH,0B7H,00H
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0F9H
+ DB 081H,0F9H
+ DD 089H
+ DB 08DH,06DH,0FCH
+;je  cfa_picqueEAX_equ+046H
+ DB 074H,0CH
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FF00H
+ DB 023H,045H,0FCH
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0100H
+ DB 081H,0F9H
+ DD 0100H
+;je  cfa_picqueEAX_equ+0A0H
+ DB 074H,03FH
+ DB 03DH
+ DD 0C200H
+;je  cfa_picqueEAX_equ+0A0H
+ DB 074H,038H
+ DB 03DH
+ DD 0D800H
+;je  cfa_picqueEAX_equ+0A0H
+ DB 074H,031H
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFF00H
+ DB 023H,045H,0FCH
+ DB 03DH
+ DD 0240400H
+;je  cfa_picqueEAX_equ+0A0H
+ DB 074H,01AH
+ DB 03DH
+ DD 0244400H
+;je  cfa_picqueEAX_equ+0A0H
+ DB 074H,013H
+ DB 03DH
+ DD 095048BH
+;je  cfa_picqueEAX_equ+0A0H
+ DB 074H,0CH
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+AHEADER 0 ,'?ChEAX',cfa_queChEAX
+
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0B8H
+ DB 08DH,06DH,0FCH
+;je  cfa_queChEAX+071H
+ DB 074H,061H
+ DB 03DH
+ DD 0A1H
+;je  cfa_queChEAX+071H
+ DB 074H,05AH
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 0C033H
+;je  cfa_queChEAX+071H
+ DB 074H,04AH
+ DB 03DH
+ DD 0C031H
+;je  cfa_queChEAX+071H
+ DB 074H,043H
+ DB 03DH
+ DD 0D889H
+;je  cfa_queChEAX+071H
+ DB 074H,03CH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 038FFH
+ DB 023H,045H,0FCH
+ DB 03DH
+ DD 08BH
+;je  cfa_queChEAX+071H
+ DB 074H,02AH
+ DB 03DH
+ DD 08DH
+;je  cfa_queChEAX+071H
+ DB 074H,023H
+ DB 08BH,045H,00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFH
+ DB 023H,045H,0FCH
+ DB 03DH
+ DD 02048DH
+;je  cfa_queChEAX+071H
+ DB 074H,0CH
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_TRUE+00H
+ DB 0C3H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 0C3H
+AHEADER 0 ,'TTTT',cfa_TTTT
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 00H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'DUP7B?',cfa_DUP7Bque
+
+ DB 089H,045H,0FCH
+ DB 025H
+ DD 03FFFFDH
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 050489H
+ DB 033H,045H,0F8H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 025H
+ DD 03FFFFBH
+ DB 089H,045H,0F4H
+ DB 0B8H
+ DD 050489H
+ DB 033H,045H,0F4H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 0BH,045H,0F8H
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 089H,045H,0F4H
+ DB 0B8H
+ DD 080B60FH
+ DB 033H,045H,0F4H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 0BH,045H,0F8H
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 089H,045H,0F4H
+ DB 0B8H
+ DD 045048DH
+ DB 033H,045H,0F4H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 0BH,045H,0F8H
+ DB 08DH,06DH,0FCH
+ DB 0C3H
+AHEADER 0 ,'DUP5B?',cfa_DUP5Bque
+
+ DB 089H,045H,0FCH
+ DB 025H
+ DD 0C7H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 05H
+ DB 033H,045H,0F8H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 025H
+ DD 0FCH
+ DB 089H,045H,0F4H
+ DB 0B8H
+ DD 0B8H
+ DB 033H,045H,0F4H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 0BH,045H,0F8H
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 025H
+ DD 0FDH
+ DB 089H,045H,0F4H
+ DB 0B8H
+ DD 0A1H
+ DB 033H,045H,0F4H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 0BH,045H,0F8H
+ DB 08DH,06DH,0FCH
+ DB 0C3H
+AHEADER 0 ,'DUP6B?',cfa_DUP6Bque
+
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 067FDH
+ DB 081H,0F9H
+ DD 0589H
+;je  cfa_DUP6Bque+088H
+ DB 074H,078H
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0C3FFH
+ DB 081H,0F9H
+ DD 0C081H
+;je  cfa_DUP6Bque+088H
+ DB 074H,068H
+ DB 03DH
+ DD 0501H
+;je  cfa_DUP6Bque+088H
+ DB 074H,061H
+ DB 03DH
+ DD 0503H
+;je  cfa_DUP6Bque+088H
+ DB 074H,05AH
+ DB 03DH
+ DD 053BH
+;je  cfa_DUP6Bque+088H
+ DB 074H,053H
+ DB 03DH
+ DD 0873BH
+;je  cfa_DUP6Bque+088H
+ DB 074H,04CH
+ DB 03DH
+ DD 0F281H
+;je  cfa_DUP6Bque+088H
+ DB 074H,045H
+ DB 03DH
+ DD 0928DH
+;je  cfa_DUP6Bque+088H
+ DB 074H,03EH
+ DB 03DH
+ DD 0808BH
+;je  cfa_DUP6Bque+088H
+ DB 074H,037H
+ DB 03DH
+ DD 0808DH
+;je  cfa_DUP6Bque+088H
+ DB 074H,030H
+ DB 03DH
+ DD 08703H
+;je  cfa_DUP6Bque+088H
+ DB 074H,029H
+ DB 03DH
+ DD 0878BH
+;je  cfa_DUP6Bque+088H
+ DB 074H,022H
+ DB 03DH
+ DD 0878DH
+;je  cfa_DUP6Bque+088H
+ DB 074H,01BH
+ DB 03DH
+ DD 0C7H
+;je  cfa_DUP6Bque+088H
+ DB 074H,014H
+ DB 03DH
+ DD 081H
+;je  cfa_DUP6Bque+088H
+ DB 074H,0DH
+ DB 03DH
+ DD 05FFH
+;je  cfa_DUP6Bque+088H
+ DB 074H,06H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_TRUE+00H
+ DB 0C3H
+AHEADER 0 ,'DUP2B?',cfa_DUP2Bque
+
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0E4C5H
+ DB 081H,0F9H
+ DD 0C001H
+ DW 0840FH
+ DD cfa_DUP2Bque+01D1H-$-4
+ DB 03DH
+ DD 01001H
+ DW 0840FH
+ DD cfa_DUP2Bque+01D1H-$-4
+ DB 03DH
+ DD 03H
+ DW 0840FH
+ DD cfa_DUP2Bque+01D1H-$-4
+ DB 03DH
+ DD 0F633H
+ DW 0840FH
+ DD cfa_DUP2Bque+01D1H-$-4
+ DB 03DH
+ DD 0108BH
+ DW 0840FH
+ DD cfa_DUP2Bque+01D1H-$-4
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0C0FFH
+ DB 081H,0F9H
+ DD 0C085H
+ DW 0840FH
+ DD cfa_DUP2Bque+01D1H-$-4
+ DB 089H,045H,0FCH
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0E4FCH
+ DB 081H,0F9H
+ DD 0C088H
+ DW 0840FH
+ DD cfa_DUP2Bque+01D1H-$-4
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0C4FEH
+ DB 081H,0F9H
+ DD 088H
+ DW 0840FH
+ DD cfa_DUP2Bque+01D1H-$-4
+ DB 03DH
+ DD 08BH
+ DW 0840FH
+ DD cfa_DUP2Bque+01D1H-$-4
+ DB 03DH
+ DD 028BH
+ DW 0840FH
+ DD cfa_DUP2Bque+01D1H-$-4
+ DB 03DH
+ DD 0C78BH
+ DW 0840FH
+ DD cfa_DUP2Bque+01D1H-$-4
+ DB 089H,045H,0F8H
+ DB 03DH
+ DD 0F88BH
+ DW 0840FH
+ DD cfa_DUP2Bque+01D1H-$-4
+ DB 03DH
+ DD 0F08BH
+ DW 0840FH
+ DD cfa_DUP2Bque+01D1H-$-4
+ DB 03DH
+ DD 0C88BH
+ DW 0840FH
+ DD cfa_DUP2Bque+01D1H-$-4
+ DB 03DH
+ DD 0D18BH
+ DW 0840FH
+ DD cfa_DUP2Bque+01D1H-$-4
+ DB 03DH
+ DD 0C68BH
+ DW 0840FH
+ DD cfa_DUP2Bque+01D1H-$-4
+ DB 089H,045H,0FCH
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0E4FCH
+ DB 081H,0F9H
+ DD 0E0D0H
+ DW 0840FH
+ DD cfa_DUP2Bque+01D1H-$-4
+ DB 03DH
+ DD 0C0DDH
+ DW 0840FH
+ DD cfa_DUP2Bque+01D1H-$-4
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0F0FFH
+ DB 081H,0F9H
+ DD 0C0D9H
+ DW 0840FH
+ DD cfa_DUP2Bque+01D1H-$-4
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0FAFFH
+ DB 081H,0F9H
+ DD 0E0D9H
+ DW 0840FH
+ DD cfa_DUP2Bque+01D1H-$-4
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0E8FFH
+ DB 081H,0F9H
+ DD 0E8D9H
+ DW 0840FH
+ DD cfa_DUP2Bque+01D1H-$-4
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0F0FFH
+ DB 081H,0F9H
+ DD 0F0D9H
+ DW 0840FH
+ DD cfa_DUP2Bque+01D1H-$-4
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0E8FFH
+ DB 081H,0F9H
+ DD 020DBH
+;je  cfa_DUP2Bque+01D1H
+ DB 074H,075H
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0E8FFH
+ DB 081H,0F9H
+ DD 0DDH
+;je  cfa_DUP2Bque+01D1H
+ DB 074H,065H
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0F0FFH
+ DB 081H,0F9H
+ DD 0C0DEH
+;je  cfa_DUP2Bque+01D1H
+ DB 074H,055H
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0E0FFH
+ DB 081H,0F9H
+ DD 0E0DEH
+;je  cfa_DUP2Bque+01D1H
+ DB 074H,045H
+ DB 03DH
+ DD 0FFH
+;je  cfa_DUP2Bque+01D1H
+ DB 074H,03EH
+ DB 03DH
+ DD 0D0F7H
+;je  cfa_DUP2Bque+01D1H
+ DB 074H,037H
+ DB 03DH
+ DD 0D1F7H
+;je  cfa_DUP2Bque+01D1H
+ DB 074H,030H
+ DB 03DH
+ DD 0D8F7H
+;je  cfa_DUP2Bque+01D1H
+ DB 074H,029H
+ DB 03DH
+ DD 0D9F7H
+;je  cfa_DUP2Bque+01D1H
+ DB 074H,022H
+ DB 03DH
+ DD 0DAF7H
+;je  cfa_DUP2Bque+01D1H
+ DB 074H,01BH
+ DB 03DH
+ DD 0E9F7H
+;je  cfa_DUP2Bque+01D1H
+ DB 074H,014H
+ DB 03DH
+ DD 0F1F7H
+;je  cfa_DUP2Bque+01D1H
+ DB 074H,0DH
+ DB 03DH
+ DD 0F9F7H
+;je  cfa_DUP2Bque+01D1H
+ DB 074H,06H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_TRUE+00H
+ DB 0C3H
+AHEADER 0 ,'DUP3B?',cfa_DUP3Bque
+
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0C7FFH
+ DB 081H,0F9H
+ DD 0C083H
+ DW 0840FH
+ DD cfa_DUP3Bque+098H-$-4
+ DB 03DH
+ DD 0478BH
+ DW 0840FH
+ DD cfa_DUP3Bque+098H-$-4
+ DB 03DH
+ DD 0488BH
+;je  cfa_DUP3Bque+098H
+ DB 074H,072H
+ DB 03DH
+ DD 0588BH
+;je  cfa_DUP3Bque+098H
+ DB 074H,06BH
+ DB 03DH
+ DD 0508BH
+;je  cfa_DUP3Bque+098H
+ DB 074H,064H
+ DB 03DH
+ DD 0788BH
+;je  cfa_DUP3Bque+098H
+ DB 074H,05DH
+ DB 03DH
+ DD 0708BH
+;je  cfa_DUP3Bque+098H
+ DB 074H,056H
+ DB 03DH
+ DD 0588DH
+;je  cfa_DUP3Bque+098H
+ DB 074H,04FH
+ DB 03DH
+ DD 0508DH
+;je  cfa_DUP3Bque+098H
+ DB 074H,048H
+ DB 03DH
+ DD 05089H
+;je  cfa_DUP3Bque+098H
+ DB 074H,041H
+ DB 03DH
+ DD 05189H
+;je  cfa_DUP3Bque+098H
+ DB 074H,03AH
+ DB 03DH
+ DD 07589H
+;je  cfa_DUP3Bque+098H
+ DB 074H,033H
+ DB 089H,045H,0F8H
+ DB 03DH
+ DD 0F8C1H
+;je  cfa_DUP3Bque+098H
+ DB 074H,029H
+ DB 03DH
+ DD 0E0C1H
+;je  cfa_DUP3Bque+098H
+ DB 074H,022H
+ DB 03DH
+ DD 0E1C1H
+;je  cfa_DUP3Bque+098H
+ DB 074H,01BH
+ DB 03DH
+ DD 0E8C1H
+;je  cfa_DUP3Bque+098H
+ DB 074H,014H
+ DB 03DH
+ DD 0408DH
+;je  cfa_DUP3Bque+098H
+ DB 074H,0DH
+ DB 03DH
+ DD 0408BH
+;je  cfa_DUP3Bque+098H
+ DB 074H,06H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_TRUE+00H
+ DB 0C3H
+AHEADER 0 ,'DUP3B?[EBP]',cfa_DUP3Bque_xEBP_y
+
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0E7C4H
+ DB 081H,0F9H
+ DD 04500H
+;je  cfa_DUP3Bque_xEBP_y+059H
+ DB 074H,049H
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0E7FDH
+ DB 081H,0F9H
+ DD 04589H
+;je  cfa_DUP3Bque_xEBP_y+059H
+ DB 074H,039H
+ DB 03DH
+ DD 0758BH
+;je  cfa_DUP3Bque_xEBP_y+059H
+ DB 074H,032H
+ DB 08BH,0C8H
+ DB 081H,0E1H
+ DD 0EFFFH
+ DB 081H,0F9H
+ DD 06DDBH
+;je  cfa_DUP3Bque_xEBP_y+059H
+ DB 074H,022H
+ DB 03DH
+ DD 045DBH
+;je  cfa_DUP3Bque_xEBP_y+059H
+ DB 074H,01BH
+ DB 03DH
+ DD 065F7H
+;je  cfa_DUP3Bque_xEBP_y+059H
+ DB 074H,014H
+ DB 03DH
+ DD 06DF7H
+;je  cfa_DUP3Bque_xEBP_y+059H
+ DB 074H,0DH
+ DB 03DH
+ DD 04587H
+;je  cfa_DUP3Bque_xEBP_y+059H
+ DB 074H,06H
+ call cfa_FALSE+00H
+ DB 0C3H
+ call cfa_TRUE+00H
+ DB 0C3H
+AHEADER 0 ,'ADD|XOR|OR|AND=',cfa_ADDlXORlORlAND_equ
+
+ DB 03DH
+ DD 04503H
+;je  cfa_ADDlXORlORlAND_equ+028H
+ DB 074H,021H
+ DB 03DH
+ DD 0450BH
+;je  cfa_ADDlXORlORlAND_equ+028H
+ DB 074H,01AH
+ DB 03DH
+ DD 04523H
+;je  cfa_ADDlXORlORlAND_equ+028H
+ DB 074H,013H
+ DB 03DH
+ DD 04533H
+;je  cfa_ADDlXORlORlAND_equ+028H
+ DB 074H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALSE+00H
+ DB 0C3H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 0C3H
+AHEADER 0 ,'+>OFF-EBP',cfa_plusgreatOFFminusEBP
+
+ call cfa_CgreatS+00H
+ call cfa_OFFminusEBP+00H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_OFFminusEBP+09H
+ DB 0C3H
+AHEADER 0 ,'EVEN-EBP',cfa_EVENminusEBP
+
+ call cfa_OFFminusEBP+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_EVENminusEBP+03BH
+ DB 074H,02CH
+ call cfa_SetOP+00H
+ call cfa_OFFminusEBP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 06D8DH
+ DB 08DH,06DH,0FCH
+ call cfa_Wcom+00H
+ call cfa_Ccom+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_OFFminusEBP+09H
+ DB 0C3H
+AHEADER 0 ,'EVEN-EAX',cfa_EVENminusEAX
+
+ call cfa_OFFminusEAX+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_EVENminusEAX+067H
+ DB 074H,058H
+ call cfa_SetOP+00H
+ call cfa_OFFminusEAX+00H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_SHORTque+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_EVENminusEAX+045H
+ DB 074H,017H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0408DH
+ DB 08DH,06DH,0FCH
+ call cfa_Wcom+00H
+ call cfa_Ccom+00H
+ DB 0EBH,015H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0808DH
+ DB 08DH,06DH,0FCH
+ call cfa_Wcom+00H
+ call cfa_com+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_OFFminusEAX+09H
+ DB 0C3H
+AHEADER 0 ,'SHORT?',cfa_SHORTque
+
+ DB 08DH,080H
+ DD 080H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0100H
+ DB 039H,045H,0FCH
+ DB 01BH,0C0H
+ DB 0C3H
+AHEADER 0 ,'?SET',cfa_queSET
+
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_LASTminusHERE+00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;je  cfa_queSET+033H
+ DB 074H,016H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_dcomaminusSET+09H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_JminusSET+09H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_OP0+00H
+ DB 08BH,00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_queSET+05CH
+ DB 076H,011H
+ call cfa_OP0+00H
+ DB 0C7H,00H
+ DD 00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_OP1+00H
+ DB 08BH,00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_queSET+085H
+ DB 076H,011H
+ call cfa_OP1+00H
+ DB 0C7H,00H
+ DD 00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_JP0+00H
+ DB 08BH,00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_queSET+0AEH
+ DB 076H,011H
+ call cfa_JP0+00H
+ DB 0C7H,00H
+ DD 00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_JP1+00H
+ DB 08BH,00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_queSET+0D1H
+ DB 076H,011H
+ call cfa_JP1+00H
+ DB 0C7H,00H
+ DD 00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'SetJP',cfa_SetJP
+
+ call cfa_JP0+00H
+ call cfa_JpBuffSize+00H
+ DB 03H,045H,00H
+ DB 08BH,040H,0FCH
+ DB 08DH,06DH,04H
+ DB 0BH,0C0H
+;je  cfa_SetJP+01CH
+ DB 074H,05H
+ call cfa_J__ld+00H
+ call cfa_JminusSET+00H
+ call cfa_UMAX+00H
+ call cfa_JminusSET+09H
+ call cfa_JP0+00H
+ call cfa_JP1+00H
+ call cfa_JpBuffSize+00H
+ DB 08DH,040H,0FCH
+ call cfa_CMOVEgreat+00H
+ call cfa_DP+00H
+ DB 08BH,00H
+ call cfa_JP0+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'J_@',cfa_J__ld
+
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 025H
+ DD 0F0H
+ DB 03DH
+ DD 070H
+ DB 08BH,045H,0FCH
+;jne cfa_J__ld+01FH
+ DB 075H,0AH
+ call cfa_SJ_ld+00H
+ DB 0E9H
+ DD cfa_J__ld+0B4H-$-4
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0EBH
+ DB 08BH,045H,0FCH
+;jne cfa_J__ld+039H
+ DB 075H,0AH
+ call cfa_SJ_ld+00H
+ DB 0E9H
+ DD cfa_J__ld+0B4H-$-4
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 0E9H
+ DB 08BH,045H,0FCH
+;jne cfa_J__ld+05CH
+ DB 075H,013H
+ DB 08DH,040H,01H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 03H,045H,0FCH
+ DB 08DH,040H,04H
+ DB 0E9H
+ DD cfa_J__ld+0B4H-$-4
+ DB 089H,045H,0FCH
+ DB 0FH,0B7H,00H
+ DB 025H
+ DD 0F0FFH
+ DB 03DH
+ DD 0800FH
+ DB 08BH,045H,0FCH
+;jne cfa_J__ld+087H
+ DB 075H,016H
+ DB 08DH,040H,01H
+ DB 08DH,040H,01H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 03H,045H,0FCH
+ DB 08DH,040H,04H
+ DB 0E9H
+ DD cfa_J__ld+0B4H-$-4
+ call cfa_HEX+00H
+ call cfa_Udot+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 08DH,06DH,0FCH
+ call cfa__SLITERALminusCODE+00H
+ DB 07H
+ DB 'J_@ ERR',0
+ call cfa_TYPE+00H
+ call cfa_ABORT+00H
+ DB 0C3H
+AHEADER 0 ,'SJ@',cfa_SJ_ld
+
+ DB 08DH,040H,01H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_CgreatS+00H
+ DB 03H,045H,00H
+ DB 08DH,040H,01H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'J@',cfa_J_ld
+
+ DB 08DH,040H,01H
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 03H,045H,0FCH
+ DB 08DH,040H,04H
+ DB 0C3H
+AHEADER 0 ,'ClearJpBuff',cfa_ClearJpBuff
+
+ call cfa_JP0+00H
+ call cfa_JpBuffSize+00H
+ call cfa_ERASE+00H
+ DB 0C3H
+AHEADER 0 ,'JP4',cfa_JP4
+
+ call cfa__CONSTANTminusCODE+00H
+ DD cfa_JP0+015H
+AHEADER 0 ,'JP3',cfa_JP3
+
+ call cfa__CONSTANTminusCODE+00H
+ DD cfa_JP0+011H
+AHEADER 0 ,'JP2',cfa_JP2
+
+ call cfa__CONSTANTminusCODE+00H
+ DD cfa_JP0+0DH
+AHEADER 0 ,'JP1',cfa_JP1
+
+ call cfa__CONSTANTminusCODE+00H
+ DD cfa_JP0+09H
+AHEADER 0 ,'JP0',cfa_JP0
+
+ call cfa__CREATEminusCODE+00H
+ DD 00H
+ DB 00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+AHEADER 0 ,'JpBuffSize',cfa_JpBuffSize
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 044H
+AHEADER 0 ,'ToOP0',cfa_ToOP0
+
+ call cfa_OP0+00H
+ call cfa_OpBuffSize+00H
+ DB 08DH,040H,0FCH
+ call cfa_CMOVE+00H
+ DB 0C3H
+AHEADER 0 ,'SetOP',cfa_SetOP
+
+ call cfa_OP0+00H
+ call cfa_OP1+00H
+ call cfa_OpBuffSize+00H
+ DB 08DH,040H,0FCH
+ call cfa_CMOVEgreat+00H
+ call cfa_DP+00H
+ DB 08BH,00H
+ call cfa_OP0+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'OP8',cfa_OP8
+
+ call cfa__CONSTANTminusCODE+00H
+ DD cfa_OP0+025H
+AHEADER 0 ,'OP7',cfa_OP7
+
+ call cfa__CONSTANTminusCODE+00H
+ DD cfa_OP0+021H
+AHEADER 0 ,'OP6',cfa_OP6
+
+ call cfa__CONSTANTminusCODE+00H
+ DD cfa_OP0+01DH
+AHEADER 0 ,'OP5',cfa_OP5
+
+ call cfa__CONSTANTminusCODE+00H
+ DD cfa_OP0+019H
+AHEADER 0 ,'OP4',cfa_OP4
+
+ call cfa__CONSTANTminusCODE+00H
+ DD cfa_OP0+015H
+AHEADER 0 ,'OP3',cfa_OP3
+
+ call cfa__CONSTANTminusCODE+00H
+ DD cfa_OP0+011H
+AHEADER 0 ,'OP2',cfa_OP2
+
+ call cfa__CONSTANTminusCODE+00H
+ DD cfa_OP0+0DH
+AHEADER 0 ,'OP1',cfa_OP1
+
+ call cfa__CONSTANTminusCODE+00H
+ DD cfa_OP0+09H
+AHEADER 0 ,'OPLast',cfa_OPLast
+
+ call cfa__CONSTANTminusCODE+00H
+ DD cfa_OP0+0111H
+AHEADER 0 ,'OP0',cfa_OP0
+
+ call cfa__CREATEminusCODE+00H
+ DD cfa_OP0+05H
+ DB 00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+AHEADER 0 ,'OpBuffSize',cfa_OpBuffSize
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 0110H
+AHEADER 0 ,'LAST-HERE',cfa_LASTminusHERE
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 00H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'J-SET',cfa_JminusSET
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 00H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,':-SET',cfa_dcomaminusSET
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 00H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'OFF-EAX',cfa_OFFminusEAX
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 00H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'OFF-EBP',cfa_OFFminusEBP
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 00H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'MM_SIZE',cfa_MM_SIZE
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 020H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'DIS-OPT',cfa_DISminusOPT
+
+ call cfa_FALSE+00H
+ call cfa_OPTque+09H
+ DB 0C3H
+AHEADER 0 ,'SET-OPT',cfa_SETminusOPT
+
+ call cfa_TRUE+00H
+ call cfa_OPTque+09H
+ DB 0C3H
+AHEADER 0 ,'J_COD',cfa_J_COD
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 084H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'OPT?',cfa_OPTque
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 0FFFFFFFFH
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'REL@',cfa_REL_ld
+
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 03H,045H,0FCH
+ DB 0C3H
+AHEADER 0 ,'RESIZE',cfa__RESIZE
+
+ call cfa_THROW+00H
+ call cfa__CLITERALminusCODE+00H
+ DB 015H
+ DB 'RESIZE is''t in system',0
+ call cfa__cABORTdticcend+00H
+ DB 0C3H
+AHEADER 0 ,'FREE',cfa_FREE
+
+ DB 089H,045H,0FCH
+ DB 0C7H,045H,0F8H
+ DD 05H
+ DB 0B8H
+ DD 044H
+ DB 08BH,04DH,0FCH
+ DB 08BH,05DH,0F8H
+ DB 0CDH,040H
+ DB 033H,0C0H
+ DB 0C3H
+AHEADER 0 ,'ALLOCATE',cfa_ALLOCATE
+
+ DB 089H,045H,0FCH
+ DB 0C7H,045H,0F8H
+ DD 05H
+ DB 0B8H
+ DD 044H
+ DB 08BH,04DH,0FCH
+ DB 08BH,05DH,0F8H
+ DB 0CDH,040H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ DB 0C3H
+AHEADER 0 ,'USER-HERE',cfa_USERminusHERE
+
+ call cfa_USERminusOFFS+00H
+ DB 08BH,00H
+ DB 0C3H
+AHEADER 0 ,'USER-ALLOT',cfa_USERminusALLOT
+
+ call cfa_USERminusOFFS+00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'ERR',cfa__ERR
+
+ DB 0C3H
+AHEADER 0 ,'THREAD-HEAP',cfa_THREADminusHEAP
+
+ call cfa__USERminusCODE+00H
+ DD reserve+01024H
+AHEADER 0 ,'REPOSITION-FILE',cfa_REPOSITIONminusFILE
+
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04H
+ DB 03H,045H,0FCH
+ call cfa_Dsave+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ DB 0C3H
+AHEADER 0 ,'FILE-POSITION',cfa_FILEminusPOSITION
+
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04H
+ DB 03H,045H,0FCH
+ DB 08BH,010H
+ DB 089H,055H,0FCH
+ DB 08BH,040H,04H
+ DB 089H,045H,0F8H
+ DB 033H,0C0H
+ DB 08DH,06DH,0F8H
+ DB 0C3H
+AHEADER 0 ,'READ-LINE',cfa_READminusLINE
+
+ DB 089H,045H,0FCH
+ DB 050H
+ DB 08BH,045H,0FCH
+ call cfa_FILEminusPOSITION+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_READminusLINE+01FH
+ DB 074H,09H
+ DB 0C7H,045H,00H
+ DD 00H
+ DB 033H,0C0H
+ call cfa__fp1+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa__fp2+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,040H,01H
+ DB 089H,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,04H
+ call cfa__addr+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 089H,045H,04H
+ DB 08BH,04H,024H
+ DB 08DH,06DH,04H
+ call cfa_READminusFILE+00H
+ call cfa_queDUP+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_READminusLINE+091H
+ DB 074H,01FH
+ DB 083H,0C4H,04H
+ DB 089H,045H,00H
+ DB 0C7H,045H,0FCH
+ DD 00H
+ DB 033H,0C0H
+ DB 08BH,055H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 089H,055H,00H
+ DB 08DH,06DH,0FCH
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 050H
+ DB 083H,07DH,0FCH,00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_READminusLINE+0BEH
+ DB 075H,01DH
+ DB 083H,0C4H,04H
+ DB 083H,0C4H,04H
+ DB 089H,045H,0FCH
+ DB 0C7H,045H,0F8H
+ DD 00H
+ DB 0C7H,045H,0F4H
+ DD 00H
+ DB 033H,0C0H
+ DB 08DH,06DH,0F4H
+ DB 0C3H
+ call cfa__addr+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 08BH,04H,024H
+ DB 08DH,06DH,0FCH
+ call cfa_LT+00H
+ DB 08DH,040H,01H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 08DH,06DH,0FCH
+ call cfa_SEARCH+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_READminusLINE+0160H
+ DB 074H,070H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa__addr+00H
+ DB 08BH,00H
+ DB 0F7H,0D8H
+ DB 03H,045H,00H
+ DB 089H,045H,00H
+ DB 08DH,040H,01H
+ DB 089H,045H,0FCH
+ DB 099H
+ DB 08BH,0C2H
+ DB 08DH,06DH,0FCH
+ call cfa__fp2+00H
+ DB 08BH,00H
+ call cfa__fp1+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 01H,055H,08H
+ DB 013H,045H,04H
+ DB 083H,0C4H,04H
+ DB 089H,045H,04H
+ DB 058H
+ DB 08DH,06DH,04H
+ call cfa_REPOSITIONminusFILE+00H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ call cfa__addr+00H
+ DB 08BH,00H
+ DB 03H,045H,00H
+ DB 0FH,0B6H,040H,0FFH
+ DB 089H,045H,00H
+ DB 03DH
+ DD 0DH
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_READminusLINE+015EH
+ DB 075H,03H
+ DB 08DH,040H,0FFH
+ DB 0EBH,0DH
+ DB 08BH,045H,04H
+ DB 089H,045H,04H
+ DB 058H
+ DB 083H,0C4H,04H
+ DB 08DH,06DH,04H
+ call cfa_TRUE+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ DB 0C3H
+AHEADER 0 ,'_addr',cfa__addr
+
+ call cfa__USERminusCODE+00H
+ DD reserve+01020H
+AHEADER 0 ,'_fp2',cfa__fp2
+
+ call cfa__USERminusCODE+00H
+ DD reserve+0101CH
+AHEADER 0 ,'_fp1',cfa__fp1
+
+ call cfa__USERminusCODE+00H
+ DD reserve+01018H
+AHEADER 0 ,'CLOSE-FILE',cfa_CLOSEminusFILE
+
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 014H
+ DB 03H,045H,0FCH
+ DB 0C7H,00H
+ DD 00H
+ DB 033H,0C0H
+ DB 0C3H
+AHEADER 0 ,'OPEN-FILE',cfa_OPENminusFILE
+
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FALLOC+00H
+ DB 0BH,0C0H
+;je  cfa_OPENminusFILE+051H
+ DB 074H,042H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 08BH,04H,024H
+ call cfa_FILE_STR+00H
+ call cfa_ERASE+00H
+ DB 089H,045H,0FCH
+ DB 08BH,04H,024H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 014H
+ DB 03H,045H,0F8H
+ DB 08BH,055H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,0C2H
+ DB 08DH,06DH,0FCH
+ call cfa_MOVE+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 089H,045H,0F8H
+ DB 033H,0C0H
+ DB 08DH,06DH,0F8H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ DB 0C3H
+AHEADER 0 ,'FALLOC',cfa_FALLOC
+
+ call cfa_FILE_STR_BUF+00H
+ call cfa_FILE_STR+00H
+ call cfa_MAX_OPEN_FILES+00H
+ DB 0F7H,06DH,00H
+ DB 03H,045H,04H
+ DB 08BH,055H,04H
+ DB 089H,045H,04H
+ DB 08BH,0C2H
+ DB 08DH,06DH,04H
+ DB 090H
+ DB 089H,045H,0F8H
+ DB 0B9H
+ DD 014H
+ DB 03H,04DH,0F8H
+ DB 08BH,09H
+ DB 0BH,0C9H
+;jne cfa_FALLOC+036H
+ DB 075H,04H
+ DB 08DH,06DH,04H
+ DB 0C3H
+ call cfa_FILE_STR+00H
+ DB 03H,045H,00H
+ DB 03BH,045H,04H
+ DB 08DH,06DH,04H
+;jbe cfa_FALLOC+021H
+ DB 076H,0DBH
+ DB 033H,0C0H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'FILE_STR_BUF',cfa_FILE_STR_BUF
+
+ call cfa__CREATEminusCODE+00H
+ DD 00H
+ DB 00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H
+AHEADER 0 ,'MAX_OPEN_FILES',cfa_MAX_OPEN_FILES
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 016H
+AHEADER 0 ,'READ-FILE',cfa_READminusFILE
+
+ DB 089H,045H,0FCH
+ DB 050H
+ DB 08BH,045H,0FCH
+ DB 0C7H,00H
+ DD 00H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 08BH,04H,024H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0CH
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 089H,045H,04H
+ DB 08BH,04H,024H
+ DB 089H,045H,00H
+ DB 0B8H
+ DD 010H
+ DB 03H,045H,00H
+ DB 08BH,055H,04H
+ DB 089H,010H
+ DB 08BH,045H,08H
+ DB 089H,045H,08H
+ DB 08BH,04H,024H
+ DB 089H,045H,04H
+ DB 0B8H
+ DD 046H
+ DB 08BH,05DH,04H
+ DB 0CDH,040H
+ DB 089H,045H,04H
+ DB 08BH,0C3H
+ DB 08BH,055H,04H
+ DB 089H,045H,04H
+ DB 08BH,0C2H
+ DB 089H,055H,00H
+ DB 03DH
+ DD 06H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_READminusFILE+074H
+ DB 075H,02H
+ DB 033H,0C0H
+ DB 0BH,0C0H
+;jne cfa_READminusFILE+0CBH
+ DB 075H,053H
+ DB 089H,045H,0FCH
+ DB 08BH,04H,024H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 04H
+ DB 03H,045H,0F8H
+ DB 08BH,010H
+ DB 089H,055H,0F8H
+ DB 08BH,040H,04H
+ DB 089H,045H,0F4H
+ DB 08BH,04H,024H
+ DB 089H,045H,0F0H
+ DB 0B8H
+ DD 0CH
+ DB 03H,045H,0F0H
+ DB 08BH,00H
+ DB 089H,045H,0F0H
+ DB 033H,0C0H
+ DB 08BH,055H,0F0H
+ DB 01H,055H,0F8H
+ DB 013H,045H,0F4H
+ DB 089H,045H,0F4H
+ DB 08BH,04H,024H
+ DB 089H,045H,0F0H
+ DB 0B8H
+ DD 04H
+ DB 03H,045H,0F0H
+ DB 08DH,06DH,0F4H
+ call cfa_Dsave+00H
+ DB 083H,0C4H,04H
+ DB 0C3H
+AHEADER 0 ,'UNIX-LINES',cfa_UNIXminusLINES
+
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0A0AH
+ DB 08DH,06DH,0FCH
+ call cfa_LT+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 01H
+ DB 08DH,06DH,04H
+ call cfa_LTL+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'DOS-LINES',cfa_DOSminusLINES
+
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0A0DH
+ DB 08DH,06DH,0FCH
+ call cfa_LT+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,04H
+ call cfa_LTL+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'LTL',cfa_LTL
+
+ call cfa__CREATEminusCODE+00H
+ DD 02H
+AHEADER 0 ,'LT',cfa_LT
+
+ call cfa__CREATEminusCODE+00H
+ DD 0A0D0A0DH
+AHEADER 0 ,'KEY',cfa_KEY
+
+ call cfa__VECTminusCODE+00H
+ DD cfa__KEY+00H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'KEY?',cfa_KEYque
+
+ call cfa_EVENTminusCASE+00H
+ call cfa_DOminusKEYque+00H
+ call cfa_and_KEY+00H
+ DB 08BH,00H
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 0C3H
+AHEADER 0 ,'DO-KEY?',cfa_DOminusKEYque
+
+ call cfa__VECTminusCODE+00H
+ DD cfa_NOOP+00H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'PENDING-CHAR',cfa_PENDINGminusCHAR
+
+ call cfa__CREATEminusCODE+00H
+ DD 00H
+AHEADER 0 ,'SPACES',cfa_SPACES
+
+ DB 090H
+ DB 0BH,0C0H
+ DW 0840FH
+ DD cfa_SPACES+018H-$-4
+ call cfa_BL+00H
+ call cfa_EMIT+00H
+ DB 08DH,040H,0FFH
+ DB 0EBH,0E9H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'SPACE',cfa_SPACE
+
+ call cfa_BL+00H
+ call cfa_EMIT+00H
+ DB 0C3H
+AHEADER 0 ,'BL',cfa_BL
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 020H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'PAGE',cfa__PAGE
+
+ call cfa_draw_window+00H
+ call cfa_SCR_BUF+00H
+ call cfa_SCR_WIDTH+00H
+ call cfa_SCR_HEIGHT+00H
+ DB 0F7H,06DH,00H
+ DB 08DH,06DH,04H
+ call cfa_BLANK+00H
+ DB 089H,045H,0FCH
+ DB 0C7H,045H,0F8H
+ DD 00H
+ DB 033H,0C0H
+ DB 08DH,06DH,0F8H
+ call cfa_ATminusXY+00H
+ call cfa_DRAW_LINS+00H
+ DB 0C3H
+AHEADER 0 ,'_KEY',cfa__KEY
+
+ call cfa_CORSOR_DROW+00H
+ call cfa_KEYque+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa__KEY+05H
+ DB 074H,0F1H
+ call cfa_and_KEY+00H
+ DB 0FH,0B6H,00H
+ call cfa_and_KEY+00H
+ DB 0C7H,00H
+ DD 00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_SWITCH_CHAR+00H
+ DB 0C3H
+AHEADER 0 ,'KEY_M',cfa_KEY_M
+
+ call cfa_DR_CUR+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_queKEY+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_KEY_M+05H
+ DB 074H,0E9H
+ call cfa_CL_CUR+00H
+ call cfa_SWITCH_CHAR+00H
+ DB 0C3H
+AHEADER 0 ,'SWITCH_CHAR',cfa_SWITCH_CHAR
+
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0C7H,045H,0F4H
+ DD 061H
+ DB 0B8H
+ DD 07AH
+ DB 08DH,040H,01H
+ DB 08DH,06DH,0F4H
+ call cfa_WITHIN+00H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 089H,045H,0F8H
+ DB 0C7H,045H,0F4H
+ DD 041H
+ DB 0B8H
+ DD 05AH
+ DB 08DH,040H,01H
+ DB 08DH,06DH,0F4H
+ call cfa_WITHIN+00H
+ DB 0BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;je  cfa_SWITCH_CHAR+053H
+ DB 074H,0BH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 020H
+ DB 033H,045H,0FCH
+ DB 0C3H
+AHEADER 0 ,'_EMIT',cfa__EMIT
+
+ DB 03DH
+ DD 0DH
+;jne cfa__EMIT+013H
+ DB 075H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_SCR_CR+00H
+ DB 0C3H
+ DB 03DH
+ DD 08H
+;jne cfa__EMIT+08EH
+ DB 075H,074H
+ DB 0B8H
+ DD 0800000H
+ call cfa_and_ATminusXY+00H
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0DH
+ DB 0F7H,06DH,0FCH
+ DB 08DH,040H,015H
+ DB 0C1H,0E0H,010H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0BH
+ DB 0BH,045H,0FCH
+ call cfa_and_ATminusXY+00H
+ DB 0FH,0B7H,040H,02H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 06H
+ DB 0F7H,06DH,0FCH
+ DB 0C1H,0E0H,010H
+ DB 0DH
+ DD 06H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0DH
+ DB 08BH,055H,04H
+ DB 08BH,04DH,00H
+ DB 08BH,05DH,0FCH
+ DB 0CDH,040H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+ call cfa_ATminusXYque+00H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 08DH,040H,0FFH
+ DB 089H,045H,00H
+ DB 058H
+ call cfa_ATminusXY+00H
+ DB 0C3H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 08BH,0C4H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 08DH,06DH,0FCH
+ call cfa__TYPE+00H
+ DB 083H,0C4H,04H
+ DB 0C3H
+AHEADER 0 ,'CR',cfa_CR
+
+ call cfa__VECTminusCODE+00H
+ DD cfa__CR+00H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'_CR',cfa__CR
+
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0DH
+ DB 08DH,06DH,0FCH
+ call cfa_EMIT+00H
+ DB 0C3H
+AHEADER 0 ,'_TYPE',cfa__TYPE
+
+ DB 08BH,055H,00H
+ DB 089H,045H,0FCH
+ DB 089H,055H,0F8H
+ DB 08DH,06DH,0F8H
+ call cfa_SCR_BUF+00H
+ call cfa_ATminusXYque+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 050H
+ DB 0F7H,06DH,0FCH
+ DB 03H,045H,00H
+ DB 03H,045H,04H
+ DB 08BH,055H,08H
+ DB 089H,045H,08H
+ DB 08BH,0C2H
+ DB 08DH,06DH,08H
+ call cfa_CMOVE+00H
+ call cfa_SCR_TYPE+00H
+ DB 0C3H
+AHEADER 0 ,'TYPE_M',cfa_TYPE_M
+
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ DB 08BH,055H,00H
+ DB 02BH,0D0H
+ DW 0840FH
+ DD cfa_TYPE_M+02FH-$-4
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_EMIT_N+00H
+ DB 08DH,040H,01H
+ DB 0EBH,0E2H
+ call cfa_CC_LINES+00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'ACCEPT',cfa_ACCEPT
+
+ call cfa__VECTminusCODE+00H
+ DD cfa_ACCEPT0+00H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'ACCEPT0',cfa_ACCEPT0
+
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 03H,045H,0FCH
+ DB 08DH,040H,0FFH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_NMNM+00H
+ DB 090H
+ DB 090H
+ DB 090H
+ call cfa_KEY+00H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0AH
+ DB 033H,045H,0F8H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 089H,045H,0F4H
+ DB 0B8H
+ DD 0DH
+ DB 033H,045H,0F4H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 0BH,045H,0F8H
+ DB 08BH,045H,0FCH
+ DW 0850FH
+ DD cfa_ACCEPT0+0142H-$-4
+ DB 03DH
+ DD 01BH
+;jne cfa_ACCEPT0+071H
+ DB 075H,013H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 0FH,0B6H,00H
+ call cfa_EMIT+00H
+ DB 0E9H
+ DD cfa_ACCEPT0+012CH-$-4
+ DB 03DH
+ DD 08H
+;jne cfa_ACCEPT0+0B5H
+ DB 075H,03DH
+ call cfa_EMIT+00H
+ call cfa_BL+00H
+ call cfa_EMIT+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 08H
+ DB 08DH,06DH,0FCH
+ call cfa_EMIT+00H
+ DB 08DH,040H,0FEH
+ DB 050H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,040H,0FFH
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08DH,06DH,0FCH
+ call cfa_UMAX+00H
+ DB 0EBH,077H
+ DB 03DH
+ DD 09H
+;jne cfa_ACCEPT0+0110H
+ DB 075H,054H
+ DB 08BH,045H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 08H
+ DB 08DH,06DH,0FCH
+ call cfa_BLANK+00H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 08BH,045H,04H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08BH,055H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,0C2H
+ DB 08BH,04DH,0FCH
+ DB 0F7H,0D9H
+ DB 08DH,04H,01H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 08H
+ DB 08BH,0C8H
+ DB 08BH,045H,0F8H
+ DB 099H
+ DB 0F7H,0F9H
+ DB 08DH,040H,01H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 08H
+ DB 0F7H,06DH,0F8H
+ DB 03H,045H,0FCH
+ DB 0EBH,01CH
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_EMIT+00H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 08DH,040H,01H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_UMIN+00H
+ DB 0E9H
+ DD cfa_ACCEPT0+01DH-$-4
+ DB 08BH,045H,00H
+ DB 0F7H,0D8H
+ DB 03H,045H,08H
+ DB 0F7H,0D8H
+ DB 08DH,06DH,0CH
+ DB 0C3H
+AHEADER 0 ,'NMNM',cfa_NMNM
+
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 0BH,0C0H
+ DB 08BH,045H,0FCH
+;je  cfa_NMNM+0CH
+ DB 074H,00H
+ DB 0C3H
+AHEADER 0 ,'SOURCE-NAME',cfa_SOURCEminusNAME
+
+ call cfa_CURFILE+00H
+ DB 08BH,00H
+ DB 0BH,0C0H
+;je  cfa_SOURCEminusNAME+012H
+ DB 074H,07H
+ call cfa_ASCIIZgreat+00H
+ DB 0EBH,08H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ DB 0C3H
+AHEADER 0 ,'+LibraryDirName',cfa_plusLibraryDirName
+
+ call cfa__2greatR+00H
+ call cfa_ModuleDirName+00H
+ DB 08BH,055H,00H
+ DB 089H,045H,0FCH
+ DB 089H,055H,0F8H
+ DB 03H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa__SLITERALminusCODE+00H
+ DB 06H
+ DB 'devel\',0
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,045H,04H
+ DB 089H,055H,04H
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ call cfa_MOVE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 06H
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,045H,0FCH
+ DB 089H,055H,0F8H
+ DB 03H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa__2Rgreat+00H
+ DB 089H,045H,0FCH
+ DB 050H
+ DB 08BH,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,045H,04H
+ DB 089H,055H,04H
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ DB 08DH,040H,01H
+ call cfa_MOVE+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 03H,045H,0FCH
+ DB 0C3H
+AHEADER 0 ,'+ModuleDirName',cfa_plusModuleDirName
+
+ call cfa__2greatR+00H
+ call cfa_ModuleDirName+00H
+ DB 08BH,055H,00H
+ DB 089H,045H,0FCH
+ DB 089H,055H,0F8H
+ DB 03H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa__2Rgreat+00H
+ DB 089H,045H,0FCH
+ DB 050H
+ DB 08BH,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,045H,04H
+ DB 089H,055H,04H
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ DB 08DH,040H,01H
+ call cfa_MOVE+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 03H,045H,0FCH
+ DB 0C3H
+AHEADER 0 ,'ModuleDirName',cfa_ModuleDirName
+
+ call cfa_ModuleName+00H
+ call cfa_CUTminusPATH+00H
+ DB 0C3H
+AHEADER 0 ,'ModuleName',cfa_ModuleName
+
+ call cfa_ABORT+00H
+ DB 0C3H
+AHEADER 0 ,'CUT-PATH',cfa_CUTminusPATH
+
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,045H,0FCH
+ DB 089H,055H,0F8H
+ DB 033H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DW 0840FH
+ DD cfa_CUTminusPATH+042H-$-4
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_is_path_delimiter+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_CUTminusPATH+03FH-$-4
+ DB 08DH,040H,0FFH
+ DB 0EBH,0CAH
+ DB 08DH,040H,01H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 0F7H,0D8H
+ DB 03H,045H,0FCH
+ DB 0C3H
+AHEADER 0 ,'is_path_delimiter',cfa_is_path_delimiter
+
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 05CH
+ DB 033H,045H,0F8H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 08BH,055H,0FCH
+ DB 089H,045H,0FCH
+ DB 089H,055H,0F8H
+ DB 0B8H
+ DD 02FH
+ DB 033H,045H,0F8H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 0BH,045H,0FCH
+ DB 0C3H
+AHEADER 0 ,'SCREEN-LENGTH',cfa_SCREENminusLENGTH
+
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,045H,0FCH
+ DB 089H,055H,0FCH
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 03H,045H,0F8H
+ DB 08BH,055H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,0C2H
+ DB 08DH,06DH,04H
+ DB 0BBH
+ DD cfa_SCREENminusLENGTH+07EH
+ DB 03BH,045H,0F8H
+;jne cfa_SCREENminusLENGTH+034H
+ DB 075H,05H
+ DB 08BH,045H,0FCH
+ DB 0FFH,0E3H
+ DB 053H
+ DB 0BBH
+ DD 080000000H
+ DB 02BH,05DH,0F8H
+ DB 053H
+ DB 03H,0D8H
+ DB 053H
+ DB 08BH,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,04H,024H
+ DB 02BH,044H,024H,04H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 09H
+ DB 08BH,045H,0FCH
+;jne cfa_SCREENminusLENGTH+072H
+ DB 075H,017H
+ DB 0C1H,0E8H,03H
+ DB 08DH,040H,01H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 08BH,0C8H
+ DB 08BH,045H,0FCH
+ DB 0D3H,0E0H
+ DB 0EBH,03H
+ DB 08DH,040H,01H
+ DB 0FFH,04H,024H
+;jno cfa_SCREENminusLENGTH+044H
+ DB 071H,0CAH
+ DB 08DH,064H,024H,0CH
+ DB 0C3H
+AHEADER 0 ,'>NUMBER',cfa_greatNUMBER
+
+ DB 090H
+ DB 0BH,0C0H
+ DW 0840FH
+ DD cfa_greatNUMBER+090H-$-4
+ DB 050H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,04H
+ call cfa_BASE+00H
+ DB 08BH,00H
+ call cfa_DIGIT+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_greatNUMBER+03CH
+ DB 075H,0CH
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 089H,045H,0F8H
+ DB 058H
+ DB 08DH,06DH,0F8H
+ DB 0C3H
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ call cfa_BASE+00H
+ DB 08BH,00H
+ DB 0F7H,065H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ DB 08BH,045H,00H
+ DB 08BH,055H,04H
+ DB 089H,045H,04H
+ DB 08BH,045H,08H
+ DB 089H,055H,08H
+ DB 08DH,06DH,04H
+ call cfa_BASE+00H
+ DB 08BH,00H
+ DB 0F7H,065H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ DB 08BH,055H,00H
+ DB 01H,055H,08H
+ DB 013H,045H,04H
+ DB 089H,045H,04H
+ DB 058H
+ DB 08DH,040H,01H
+ DB 089H,045H,00H
+ DB 058H
+ DB 08DH,040H,0FFH
+ DB 0E9H
+ DD cfa_greatNUMBER+01H-$-4
+ DB 0C3H
+AHEADER 0 ,'DIGIT',cfa_DIGIT
+
+ DB 050H
+ DB 0B8H
+ DD 030H
+ DB 0F7H,0D8H
+ DB 03H,045H,00H
+ DB 089H,045H,00H
+ DB 0B8H
+ DD 0AH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 03BH,045H,0FCH
+ DB 08DH,06DH,04H
+;jbe cfa_DIGIT+09AH
+ DB 076H,079H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0C7H,045H,0F4H
+ DD 041H
+ DB 0B8H
+ DD 030H
+ DB 0F7H,0D8H
+ DB 03H,045H,0F4H
+ DB 03BH,045H,0F8H
+ DB 08BH,045H,0FCH
+;jle cfa_DIGIT+046H
+ DB 07EH,06H
+ DB 083H,0C4H,04H
+ DB 033H,0C0H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0C7H,045H,0F4H
+ DD 061H
+ DB 0B8H
+ DD 030H
+ DB 0F7H,0D8H
+ DB 03H,045H,0F4H
+ DB 08DH,040H,0FFH
+ DB 03BH,045H,0F8H
+ DB 08BH,045H,0FCH
+;jge cfa_DIGIT+081H
+ DB 07DH,019H
+ DB 089H,045H,0FCH
+ DB 0C7H,045H,0F8H
+ DD 061H
+ DB 0B8H
+ DD 041H
+ DB 0F7H,0D8H
+ DB 03H,045H,0F8H
+ DB 0F7H,0D8H
+ DB 03H,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 0C7H,045H,0F8H
+ DD 011H
+ DB 0B8H
+ DD 0AH
+ DB 0F7H,0D8H
+ DB 03H,045H,0F8H
+ DB 0F7H,0D8H
+ DB 03H,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 03BH,045H,0F8H
+ DB 01BH,0C0H
+ DB 08DH,06DH,0FCH
+ DB 0BH,0C0H
+;jne cfa_DIGIT+0B3H
+ DB 075H,03H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'(.")',cfa__cdotdticcend
+
+ DB 08DH,050H,01H
+ DB 089H,055H,0FCH
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_TYPE+00H
+ DB 0C3H
+AHEADER 0 ,'DUMP',cfa_DUMP
+
+ DB 0BH,0C0H
+;jne cfa_DUMP+0BH
+ DB 075H,07H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+ call cfa_BASE+00H
+ DB 08BH,00H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_HEX+00H
+ DB 08DH,040H,0FH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 010H
+ DB 08BH,0C8H
+ DB 08BH,045H,0FCH
+ DB 033H,0D2H
+ DB 0F7H,0F1H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 0BAH
+ DD 080000000H
+ DB 02BH,055H,0FCH
+ DB 08DH,01CH,02H
+ DB 08BH,045H,00H
+ DB 08BH,0D2H
+ DB 08DH,06DH,04H
+ DB 068H
+ DD cfa_DUMP+010FH
+ DB 052H
+ DB 053H
+ call cfa_CR+00H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 04H
+ DB 08DH,06DH,0F8H
+ call cfa_dot0+00H
+ call cfa_SPACE+00H
+ call cfa_SPACE+00H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0C7H,045H,0F4H
+ DD 010H
+ DB 033H,0C0H
+ DB 0BAH
+ DD 080000000H
+ DB 02BH,055H,0F4H
+ DB 08DH,01CH,02H
+ DB 08BH,045H,0F8H
+ DB 08BH,0D2H
+ DB 08DH,06DH,0FCH
+ DB 068H
+ DD cfa_DUMP+0ECH
+ DB 052H
+ DB 053H
+ DB 090H
+ DB 089H,045H,0FCH
+ DB 08BH,04H,024H
+ DB 02BH,044H,024H,04H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 04H
+ DB 08BH,0C8H
+ DB 08BH,045H,0F8H
+ DB 099H
+ DB 0F7H,0F9H
+ DB 08BH,0C2H
+ DB 0BH,0C0H
+ DB 08BH,045H,0FCH
+;jne cfa_DUMP+0C5H
+ DB 075H,05H
+ call cfa_SPACE+00H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,0F8H
+ call cfa_dot0+00H
+ call cfa_SPACE+00H
+ DB 08DH,040H,01H
+ DB 0FFH,04H,024H
+;jno cfa_DUMP+09DH
+ DB 071H,0B5H
+ DB 08DH,064H,024H,0CH
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 089H,055H,0FCH
+ DB 0B8H
+ DD 010H
+ DB 08DH,06DH,0FCH
+ call cfa_PTYPE+00H
+ DB 0FFH,04H,024H
+ DW 0810FH
+ DD cfa_DUMP+051H-$-4
+ DB 08DH,064H,024H,0CH
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 058H
+ call cfa_BASE+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'PTYPE',cfa_PTYPE
+
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 0BAH
+ DD 080000000H
+ DB 02BH,055H,0FCH
+ DB 08DH,01CH,02H
+ DB 08BH,045H,00H
+ DB 08BH,0D2H
+ DB 08DH,06DH,04H
+ DB 068H
+ DD cfa_PTYPE+040H
+ DB 052H
+ DB 053H
+ DB 090H
+ DB 090H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_greatPRT+00H
+ call cfa_EMIT+00H
+ DB 08DH,040H,01H
+ DB 0FFH,04H,024H
+;jno cfa_PTYPE+021H
+ DB 071H,0E5H
+ DB 08DH,064H,024H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'>PRT',cfa_greatPRT
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_BL+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_greatPRT+01BH
+ DB 076H,05H
+ DB 0B8H
+ DD 02EH
+ DB 0C3H
+AHEADER 0 ,'.0',cfa_dot0
+
+ DB 050H
+ DB 033H,0C0H
+ call cfa_lessn+00H
+ call cfa_nS+00H
+ call cfa_ngreat+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08BH,04DH,0FCH
+ DB 0F7H,0D9H
+ DB 08DH,04H,01H
+ DB 089H,045H,0F8H
+ DB 033H,0C0H
+ DB 08DH,06DH,0F8H
+ call cfa_MAX+00H
+ DB 0BH,0C0H
+ DW 0840FH
+ DD cfa_dot0+070H-$-4
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 0BAH
+ DD 080000000H
+ DB 02BH,055H,0FCH
+ DB 08DH,01CH,02H
+ DB 08BH,045H,00H
+ DB 08BH,0D2H
+ DB 08DH,06DH,04H
+ DB 068H
+ DD cfa_dot0+06EH
+ DB 052H
+ DB 053H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 030H
+ DB 08DH,06DH,0FCH
+ call cfa_EMIT+00H
+ DB 0FFH,04H,024H
+;jno cfa_dot0+055H
+ DB 071H,0EBH
+ DB 08DH,064H,024H,0CH
+ DB 0EBH,06H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_TYPE+00H
+ DB 0C3H
+AHEADER 0 ,'U.',cfa_Udot
+
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_Ddot+00H
+ DB 0C3H
+AHEADER 0 ,'U.R',cfa_UdotR
+
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08BH,055H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,0C2H
+ DB 08DH,06DH,0FCH
+ call cfa_DdotR+00H
+ DB 0C3H
+AHEADER 0 ,'.R',cfa_dotR
+
+ DB 050H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 099H
+ DB 08BH,0C2H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08DH,06DH,0FCH
+ call cfa_DdotR+00H
+ DB 0C3H
+AHEADER 0 ,'D.R',cfa_DdotR
+
+ DB 050H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa__cDdotcend+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 0F7H,0D8H
+ DB 03H,045H,0F8H
+ DB 08DH,06DH,0FCH
+ call cfa__0MAX+00H
+ call cfa_SPACES+00H
+ call cfa_TYPE+00H
+ DB 0C3H
+AHEADER 0 ,'.',cfa_dot
+
+ DB 089H,045H,0FCH
+ DB 099H
+ DB 08BH,0C2H
+ DB 08DH,06DH,0FCH
+ call cfa_Ddot+00H
+ DB 0C3H
+AHEADER 0 ,'D.',cfa_Ddot
+
+ call cfa__cDdotcend+00H
+ call cfa_TYPE+00H
+ call cfa_SPACE+00H
+ DB 0C3H
+AHEADER 0 ,'(D.)',cfa__cDdotcend
+
+ DB 089H,045H,0FCH
+ DB 050H
+ DB 08BH,045H,0FCH
+ call cfa_DABS+00H
+ call cfa_lessn+00H
+ call cfa_nS+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08DH,06DH,0FCH
+ call cfa_SIGN+00H
+ call cfa_ngreat+00H
+ DB 0C3H
+AHEADER 0 ,'SIGN',cfa_SIGN
+
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jge cfa_SIGN+01AH
+ DB 07DH,010H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02DH
+ DB 08DH,06DH,0FCH
+ call cfa_HOLD+00H
+ DB 0C3H
+AHEADER 0 ,'#>',cfa_ngreat
+
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_HLD+00H
+ DB 08BH,00H
+ call cfa_PAD+00H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 0F7H,0D8H
+ DB 03H,045H,0FCH
+ DB 08DH,040H,0FFH
+ DB 0C3H
+AHEADER 0 ,'#S',cfa_nS
+
+ DB 090H
+ call cfa_n+00H
+ DB 08BH,055H,00H
+ DB 0BH,0D0H
+;jne cfa_nS+01H
+ DB 075H,0F4H
+ DB 0C3H
+AHEADER 0 ,'#',cfa_n
+
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_BASE+00H
+ DB 08BH,00H
+ call cfa_UM_divMOD+00H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_BASE+00H
+ DB 08BH,00H
+ call cfa_UM_divMOD+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08BH,055H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 089H,055H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_DIGITgreat+00H
+ call cfa_HOLD+00H
+ DB 0C3H
+AHEADER 0 ,'DIGIT>',cfa_DIGITgreat
+
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 0AH
+ DB 03BH,045H,0F8H
+ DB 08BH,045H,0FCH
+;jg  cfa_DIGITgreat+01EH
+ DB 07FH,0BH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 07H
+ DB 03H,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 030H
+ DB 03H,045H,0FCH
+ DB 0C3H
+AHEADER 0 ,'<#',cfa_lessn
+
+ call cfa_PAD+00H
+ DB 08DH,040H,0FFH
+ call cfa_HLD+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 033H,0C0H
+ DB 08DH,06DH,04H
+ call cfa_PAD+00H
+ DB 08DH,040H,0FFH
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'HOLDS',cfa_HOLDS
+
+ DB 08BH,055H,00H
+ DB 089H,055H,0FCH
+ DB 089H,045H,00H
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 089H,055H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,04H
+ DB 0BBH
+ DD cfa_HOLDS+062H
+ DB 03BH,045H,0F8H
+;jne cfa_HOLDS+029H
+ DB 075H,05H
+ DB 08BH,045H,0FCH
+ DB 0FFH,0E3H
+ DB 053H
+ DB 0BBH
+ DD 080000000H
+ DB 02BH,05DH,0F8H
+ DB 053H
+ DB 03H,0D8H
+ DB 053H
+ DB 08BH,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 08BH,04H,024H
+ DB 02BH,044H,024H,04H
+ DB 0F7H,0D8H
+ DB 03H,045H,0F8H
+ DB 08DH,040H,0FFH
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_HOLD+00H
+ DB 0FFH,04H,024H
+;jno cfa_HOLDS+039H
+ DB 071H,0DBH
+ DB 08DH,064H,024H,0CH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'HOLD',cfa_HOLD
+
+ call cfa_HLD+00H
+ DB 08BH,00H
+ DB 08DH,040H,0FFH
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_HLD+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08BH,055H,08H
+ DB 088H,010H
+ DB 08BH,045H,0CH
+ DB 08DH,06DH,010H
+ DB 0C3H
+AHEADER 0 ,'DECIMAL',cfa_DECIMAL
+
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0AH
+ DB 08DH,06DH,0FCH
+ call cfa_BASE+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'HEX',cfa_HEX
+
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 010H
+ DB 08DH,06DH,0FCH
+ call cfa_BASE+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'SYSTEM-PAD',cfa_SYSTEMminusPAD
+
+ call cfa__USERminusCODE+00H
+ DD reserve+018H
+AHEADER 0 ,'NUMERIC-OUTPUT-LENGTH',cfa_NUMERICminusOUTPUTminusLENGTH
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 01000H
+AHEADER 0 ,'ABORT',cfa_ABORT
+
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_THROW+00H
+ DB 0C3H
+AHEADER 0 ,'CATCH',cfa_CATCH
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08BH,0C5H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_HANDLER+00H
+ DB 08BH,00H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C4H
+ call cfa_HANDLER+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_EXECUTE+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08DH,06DH,0FCH
+ call cfa_HANDLER+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 083H,0C4H,04H
+ DB 089H,045H,04H
+ DB 033H,0C0H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'',cfa_lessSETminusEXCminusHANDLERgreat
+
+ call cfa__VECTminusCODE+00H
+ DD cfa_NOOP+00H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'THROW',cfa_THROW
+
+ call cfa_queDUP+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_THROW+061H
+ DB 074H,052H
+ call cfa_HANDLER+00H
+ DB 08BH,00H
+ call cfa_queDUP+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_THROW+05CH
+ DB 074H,037H
+ DB 08BH,0E0H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 058H
+ call cfa_HANDLER+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 089H,045H,04H
+ DB 058H
+ DB 08BH,055H,04H
+ DB 089H,045H,04H
+ DB 08BH,0C2H
+ DB 050H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_SPsave+00H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 058H
+ DB 0EBH,05H
+ call cfa_FATALminusHANDLER+00H
+ DB 0C3H
+AHEADER 0 ,'(THROW)',cfa__cTHROWcend
+
+ DB 0BH,0C0H
+;je  cfa__cTHROWcend+05FH
+ DB 074H,05BH
+ DB 03DH
+ DD 06DH
+;jne cfa__cTHROWcend+012H
+ DB 075H,07H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+ call cfa_HANDLER+00H
+ DB 08BH,00H
+ DB 0BH,0C0H
+;je  cfa__cTHROWcend+054H
+ DB 074H,037H
+ DB 08BH,0E0H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 058H
+ call cfa_HANDLER+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 089H,045H,04H
+ DB 058H
+ DB 08BH,055H,04H
+ DB 089H,045H,04H
+ DB 08BH,0C2H
+ DB 050H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_SPsave+00H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 058H
+ DB 0EBH,0BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FATALminusHANDLER+00H
+ DB 0C3H
+AHEADER 0 ,'FATAL-HANDLER',cfa_FATALminusHANDLER
+
+ call cfa__VECTminusCODE+00H
+ DD cfa_NOOP+00H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 1 ,'Z\"',cfa_Zsldtic
+
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 022H
+ DB 08DH,06DH,0FCH
+ call cfa_PARSE+00H
+ call cfa_ZslLITERAL+00H
+ DB 0C3H
+AHEADER 1 ,'Z"',cfa_Zdtic
+
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 022H
+ DB 08DH,06DH,0FCH
+ call cfa_PARSE+00H
+ call cfa_ZLITERAL+00H
+ DB 0C3H
+AHEADER 1 ,'ZLITERAL',cfa_ZLITERAL
+
+ call cfa_STATE+00H
+ DB 08BH,00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_ZLITERAL+058H
+ DB 074H,047H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD cfa_ALITERAL+00H
+ DB 08DH,06DH,0FCH
+ call cfa_COMPILEcom_M+00H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ call cfa_HERE+00H
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_MOVE+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ DB 0EBH,026H
+ DB 089H,045H,0FCH
+ DB 08DH,040H,01H
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOCATE+00H
+ call cfa_THROW+00H
+ DB 089H,045H,0FCH
+ DB 050H
+ DB 08BH,045H,0FCH
+ call cfa_CZMOVE+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08DH,06DH,0FCH
+ DB 0C3H
+AHEADER 1 ,'Z\LITERAL',cfa_ZslLITERAL
+
+ call cfa_STATE+00H
+ DB 08BH,00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_ZslLITERAL+065H
+ DB 074H,054H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD cfa_ALITERAL+00H
+ DB 08DH,06DH,0FCH
+ call cfa_COMPILEcom_M+00H
+ call cfa_HERE+00H
+ DB 08DH,040H,01H
+ DB 089H,045H,0FCH
+ DB 050H
+ DB 08BH,045H,0FCH
+ call cfa_ESCminusCZMOVE+00H
+ DB 089H,045H,0FCH
+ DB 08BH,04H,024H
+ DB 08DH,06DH,0FCH
+ call cfa_ASCIIZgreat+00H
+ DB 08DH,040H,02H
+ DB 089H,045H,00H
+ call cfa_ALLOT+00H
+ DB 08DH,040H,0FEH
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08DH,040H,0FFH
+ DB 08BH,055H,0FCH
+ DB 088H,010H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0EBH,026H
+ DB 089H,045H,0FCH
+ DB 08DH,040H,01H
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOCATE+00H
+ call cfa_THROW+00H
+ DB 089H,045H,0FCH
+ DB 050H
+ DB 08BH,045H,0FCH
+ call cfa_ESCminusCZMOVE+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08DH,06DH,0FCH
+ DB 0C3H
+AHEADER 0 ,'ESC-CZMOVE',cfa_ESCminusCZMOVE
+
+ call cfa_toadr+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_counter+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_fromadr+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 090H
+ call cfa_zchar+00H
+ DB 03DH
+ DD 05CH
+;jne cfa_ESCminusCZMOVE+04DH
+ DB 075H,010H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_zchar+00H
+ call cfa_escape+00H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_cgreat+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_ESCminusCZMOVE+031H
+ DB 075H,0CFH
+ DB 0C3H
+AHEADER 0 ,'escape',cfa_escape
+
+ DB 03DH
+ DD 06EH
+;jne cfa_escape+011H
+ DB 075H,0AH
+ DB 0B8H
+ DD 0AH
+ DB 0E9H
+ DD cfa_escape+011AH-$-4
+ DB 03DH
+ DD 072H
+;jne cfa_escape+022H
+ DB 075H,0AH
+ DB 0B8H
+ DD 0DH
+ DB 0E9H
+ DD cfa_escape+011AH-$-4
+ DB 03DH
+ DD 074H
+;jne cfa_escape+033H
+ DB 075H,0AH
+ DB 0B8H
+ DD 09H
+ DB 0E9H
+ DD cfa_escape+011AH-$-4
+ DB 03DH
+ DD 062H
+;jne cfa_escape+044H
+ DB 075H,0AH
+ DB 0B8H
+ DD 08H
+ DB 0E9H
+ DD cfa_escape+011AH-$-4
+ DB 03DH
+ DD 071H
+;jne cfa_escape+055H
+ DB 075H,0AH
+ DB 0B8H
+ DD 022H
+ DB 0E9H
+ DD cfa_escape+011AH-$-4
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 02FH
+ DB 089H,045H,0F4H
+ DB 08BH,045H,0F8H
+ DB 039H,045H,0F4H
+ DB 0FH,09DH,0C0H
+ DB 083H,0E0H,01H
+ DB 048H
+ DB 08BH,055H,0F8H
+ DB 089H,045H,0F8H
+ DB 089H,055H,0F4H
+ DB 0B8H
+ DD 03AH
+ DB 039H,045H,0F4H
+ DB 0FH,09DH,0C0H
+ DB 083H,0E0H,01H
+ DB 048H
+ DB 023H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DW 0840FH
+ DD cfa_escape+011AH-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 030H
+ DB 0F7H,0D8H
+ DB 03H,045H,0FCH
+ call cfa_zchar+00H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 02FH
+ DB 089H,045H,0F4H
+ DB 08BH,045H,0F8H
+ DB 039H,045H,0F4H
+ DB 0FH,09DH,0C0H
+ DB 083H,0E0H,01H
+ DB 048H
+ DB 08BH,055H,0F8H
+ DB 089H,045H,0F8H
+ DB 089H,055H,0F4H
+ DB 0B8H
+ DD 03AH
+ DB 039H,045H,0F4H
+ DB 0FH,09DH,0C0H
+ DB 083H,0E0H,01H
+ DB 048H
+ DB 023H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DW 0840FH
+ DD cfa_escape+010BH-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 030H
+ DB 0F7H,0D8H
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 089H,055H,0FCH
+ DB 0B8H
+ DD 0AH
+ DB 0F7H,06DH,0FCH
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0EBH,096H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_escape+011AH
+ DB 074H,05H
+ call cfa_unchar+00H
+ DB 0C3H
+AHEADER 0 ,'c>',cfa_cgreat
+
+ call cfa_toadr+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_toadr+00H
+ DB 0FFH,00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'unchar',cfa_unchar
+
+ call cfa_counter+00H
+ DB 0FFH,00H
+ DB 0B8H
+ DD 0FFFFFFFFH
+ call cfa_fromadr+00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'zchar',cfa_zchar
+
+ call cfa_counter+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 03BH,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jle cfa_zchar+024H
+ DB 07EH,0AH
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ DB 0EBH,032H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_counter+00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_fromadr+00H
+ DB 08BH,00H
+ DB 0FH,0B6H,00H
+ call cfa_fromadr+00H
+ DB 0FFH,00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'counter',cfa_counter
+
+ call cfa__USERminusCODE+00H
+ DD reserve+014H
+AHEADER 0 ,'fromadr',cfa_fromadr
+
+ call cfa__USERminusCODE+00H
+ DD reserve+010H
+AHEADER 0 ,'toadr',cfa_toadr
+
+ call cfa__USERminusCODE+00H
+ DD reserve+0CH
+AHEADER 0 ,'ALITERAL',cfa_ALITERAL
+
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08DH,050H,01H
+ DB 089H,055H,0F8H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F4H
+ DB 08BH,045H,0F8H
+ DB 03H,045H,0F4H
+ DB 08DH,040H,01H
+ DB 050H
+ DB 08BH,045H,0F8H
+ DB 08DH,06DH,0FCH
+ DB 0C3H
+AHEADER 0 ,'CZMOVE',cfa_CZMOVE
+
+ DB 08BH,055H,00H
+ DB 089H,045H,0FCH
+ DB 089H,055H,0F8H
+ DB 03H,045H,0F8H
+ DB 050H
+ DB 08BH,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ call cfa_CMOVE+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 089H,045H,0F8H
+ DB 033H,0C0H
+ DB 08BH,055H,0F8H
+ DB 089H,045H,0F8H
+ DB 08BH,0C2H
+ DB 08BH,055H,0F8H
+ DB 088H,010H
+ DB 08BH,045H,0FCH
+ DB 0C3H
+AHEADER 0 ,'W,',cfa_Wcom
+
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ call cfa_Wsave+00H
+ DB 0C3H
+AHEADER 0 ,'C,',cfa_Ccom
+
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,',',cfa_com
+
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04H
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'ALLOT',cfa_ALLOT
+
+ call cfa_DP+00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'IS-TEMP-WL',cfa_ISminusTEMPminusWL
+
+ call cfa_GETminusCURRENT+00H
+ DB 08BH,040H,0FCH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 033H,045H,0FCH
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 0C3H
+AHEADER 0 ,'GET-CURRENT',cfa_GETminusCURRENT
+
+ call cfa_CURRENT+00H
+ DB 08BH,00H
+ DB 0C3H
+AHEADER 0 ,'SET-CURRENT',cfa_SETminusCURRENT
+
+ call cfa_CURRENT+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'CFL',cfa_CFL
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 05H
+AHEADER 1 ,'3RDROP',cfa__3RDROP
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08DH,05H
+ DD cfa_Cminus3RDROP+00H
+ call cfa_INLINEcom+00H
+ DB 0C3H
+AHEADER 1 ,'2RDROP',cfa__2RDROP
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08DH,05H
+ DD cfa_Cminus2RDROP+00H
+ call cfa_INLINEcom+00H
+ DB 0C3H
+AHEADER 1 ,'RDROP',cfa_RDROP
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08DH,05H
+ DD cfa_CminusRDROP+00H
+ call cfa_INLINEcom+00H
+ DB 0C3H
+AHEADER 0 ,'WORDS',cfa_WORDS
+
+ call cfa__CONTEXT+00H
+ DB 08BH,00H
+ call cfa_NLIST+00H
+ DB 0C3H
+AHEADER 0 ,'NLIST',cfa_NLIST
+
+ DB 08BH,00H
+ call cfa_CR+00H
+ call cfa_WminusCNT+00H
+ DB 0C7H,00H
+ DD 00H
+ DB 0B8H
+ DD 010H
+ call cfa_NNN+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 090H
+ DB 090H
+ call cfa_queCRminusBREAK+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_NLIST+084H-$-4
+ call cfa_WminusCNT+00H
+ DB 0FFH,00H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ call cfa_IDdot+00H
+ call cfa_SPACE+00H
+ call cfa_ATminusXYque+00H
+ DB 050H
+ DB 0B8H
+ DD 08H
+ DB 08BH,0C8H
+ DB 08BH,045H,00H
+ DB 099H
+ DB 0F7H,0F9H
+ DB 08DH,040H,01H
+ DB 089H,045H,00H
+ DB 0B8H
+ DD 08H
+ DB 0F7H,06DH,00H
+ DB 089H,045H,00H
+ DB 058H
+ call cfa_ATminusXY+00H
+ call cfa_CDR+00H
+ DB 0EBH,0A5H
+ call cfa_KEYque+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_NLIST+09EH
+ DB 074H,0BH
+ call cfa_KEY+00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_CR+00H
+ call cfa_CR+00H
+ call cfa__SLITERALminusCODE+00H
+ DB 07H
+ DB 'Words: ',0
+ call cfa_TYPE+00H
+ call cfa_WminusCNT+00H
+ DB 08BH,00H
+ call cfa_Udot+00H
+ call cfa_CR+00H
+ DB 0C3H
+AHEADER 0 ,'?CR-BREAK',cfa_queCRminusBREAK
+
+ DB 0BH,0C0H
+ DW 0840FH
+ DD cfa_queCRminusBREAK+0CEH-$-4
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_ZCOUNT+00H
+ DB 08DH,06DH,04H
+ call cfa_ATminusXYque+00H
+ DB 08BH,045H,00H
+ DB 03H,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_SCR_WIDTHminusS+00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 08D0FH
+ DD cfa_queCRminusBREAK+0C9H-$-4
+ call cfa_CR+00H
+ call cfa_NNN+00H
+ DB 08BH,00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_queCRminusBREAK+073H
+ DB 074H,025H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_NNN+00H
+ DB 08BH,055H,00H
+ DB 01H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_TRUE+00H
+ DB 0E9H
+ DD cfa_queCRminusBREAK+0C7H-$-4
+ call cfa__SLITERALminusCODE+00H
+ DB 05H
+ DB 'more?',0
+ call cfa_TYPE+00H
+ call cfa_CR+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 010H
+ DB 08DH,06DH,0FCH
+ call cfa_NNN+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_KEY+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 051H
+ DB 033H,045H,0FCH
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 023H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_queDUP+00H
+ DB 0F7H,0D8H
+ DB 01BH,0C0H
+ DB 0EBH,05H
+ call cfa_TRUE+00H
+ DB 0C3H
+AHEADER 0 ,'NNN',cfa_NNN
+
+ call cfa__CREATEminusCODE+00H
+ DD 00H
+AHEADER 0 ,'LATEST',cfa_LATEST
+
+ call cfa_CURRENT+00H
+ DB 08BH,00H
+ DB 08BH,00H
+ DB 0C3H
+AHEADER 0 ,'ORDER',cfa_ORDER
+
+ call cfa_GETminusORDER+00H
+ call cfa__SLITERALminusCODE+00H
+ DB 09H
+ DB 'Context: ',0
+ call cfa_TYPE+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,04H
+ DB 0BBH
+ DD cfa_ORDER+054H
+ DB 03BH,045H,0F8H
+;jne cfa_ORDER+031H
+ DB 075H,05H
+ DB 08BH,045H,0FCH
+ DB 0FFH,0E3H
+ DB 053H
+ DB 0BBH
+ DD 080000000H
+ DB 02BH,05DH,0F8H
+ DB 053H
+ DB 03H,0D8H
+ DB 053H
+ DB 08BH,045H,0FCH
+ call cfa_VOCminusNAMEdot+00H
+ call cfa_SPACE+00H
+ DB 0FFH,04H,024H
+;jno cfa_ORDER+041H
+ DB 071H,0F1H
+ DB 08DH,064H,024H,0CH
+ call cfa_CR+00H
+ call cfa__SLITERALminusCODE+00H
+ DB 09H
+ DB 'Current: ',0
+ call cfa_TYPE+00H
+ DB 089H,045H,0FCH
+ mov eax,[T_CURRENT-main_task+edi]
+ DB 08DH,06DH,0FCH
+ call cfa_VOCminusNAMEdot+00H
+ call cfa_CR+00H
+ DB 0C3H
+AHEADER 0 ,'VOC-NAME.',cfa_VOCminusNAMEdot
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_FORTHminusWORDLIST+00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_VOCminusNAMEdot+032H-$-4
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa__SLITERALminusCODE+00H
+ DB 05H
+ DB 'FORTH',0
+ call cfa_TYPE+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 08BH,040H,04H
+ DB 08DH,06DH,0FCH
+ DB 0BH,0C0H
+;je  cfa_VOCminusNAMEdot+04FH
+ DB 074H,010H
+ call cfa_IDdot+00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0E9H
+ DD cfa_VOCminusNAMEdot+06FH-$-4
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa__SLITERALminusCODE+00H
+ DB 09H
+ DB ':',0
+ call cfa_TYPE+00H
+ call cfa_Udot+00H
+ DB 0C3H
+AHEADER 0 ,'_PREVIOUS',cfa__PREVIOUS
+
+ call cfa__CONTEXT+00H
+ DB 08DH,040H,04H
+ call cfa__CONTEXT+00H
+ call cfa_CONTEXT_SIZE+00H
+ call cfa_CMOVE+00H
+ DB 0C3H
+AHEADER 0 ,'PREVIOUS',cfa_PREVIOUS
+
+ call cfa__PREVIOUS+00H
+ DB 0C3H
+AHEADER 0 ,'ALSO',cfa_ALSO
+
+ call cfa__CONTEXT+00H
+ call cfa__CONTEXT+00H
+ DB 08DH,040H,04H
+ call cfa_CONTEXT_SIZE+00H
+ call cfa_CMOVEgreat+00H
+ DB 0C3H
+AHEADER 0 ,'ONLY',cfa_ONLY
+
+ call cfa__CONTEXT+00H
+ DB 08DH,040H,04H
+ DB 0C7H,00H
+ DD 00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_FORTH+00H
+ DB 0C3H
+AHEADER 0 ,'FORTH',cfa_FORTH
+
+ call cfa_FORTHminusWORDLIST+00H
+ call cfa__CONTEXT+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'SET-ORDER',cfa_SETminusORDER
+
+ DB 0BH,0C0H
+;jge cfa_SETminusORDER+014H
+ DB 07DH,010H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_ONLY+00H
+ DB 0E9H
+ DD cfa_SETminusORDER+077H-$-4
+ call cfa__CONTEXT+00H
+ call cfa_CONTEXT_SIZE+00H
+ call cfa_ERASE+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,04H
+ DB 0BBH
+ DD cfa_SETminusORDER+077H
+ DB 03BH,045H,0F8H
+;jne cfa_SETminusORDER+03AH
+ DB 075H,05H
+ DB 08BH,045H,0FCH
+ DB 0FFH,0E3H
+ DB 053H
+ DB 0BBH
+ DD 080000000H
+ DB 02BH,05DH,0F8H
+ DB 053H
+ DB 03H,0D8H
+ DB 053H
+ DB 08BH,045H,0FCH
+ call cfa__CONTEXT+00H
+ DB 089H,045H,0FCH
+ DB 08BH,04H,024H
+ DB 02BH,044H,024H,04H
+ DB 08DH,04H,085H
+ DD 00H
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0FFH,04H,024H
+;jno cfa_SETminusORDER+04AH
+ DB 071H,0D7H
+ DB 08DH,064H,024H,0CH
+ DB 0C3H
+AHEADER 0 ,'GET-ORDER',cfa_GETminusORDER
+
+ call cfa_DEPTH+00H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa__CONTEXT+00H
+ call cfa_GETminusORDER_DROP+00H
+ call cfa_DEPTH+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 0F7H,0D8H
+ DB 03H,045H,0FCH
+ DB 0C3H
+AHEADER 0 ,'GET-ORDER_DROP',cfa_GETminusORDER_DROP
+
+ DB 089H,045H,0FCH
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ DB 0BH,0C0H
+;je  cfa_GETminusORDER_DROP+023H
+ DB 074H,017H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 08DH,040H,04H
+ DB 08DH,06DH,04H
+ call cfa_GETminusORDER_DROP+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08DH,06DH,0FCH
+ DB 0C3H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'DEFINITIONS',cfa_DEFINITIONS
+
+ call cfa__CONTEXT+00H
+ DB 08BH,00H
+ call cfa_SETminusCURRENT+00H
+ DB 0C3H
+AHEADER 0 ,'FIND1',cfa_FIND1
+
+ DB 08DH,050H,01H
+ DB 089H,055H,0FCH
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_SFIND+00H
+ DB 0BH,0C0H
+;jne cfa_FIND1+023H
+ DB 075H,0EH
+ DB 08BH,045H,04H
+ DB 08DH,040H,0FFH
+ DB 089H,045H,04H
+ DB 033H,0C0H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'SFIND',cfa_SFIND
+
+ call cfa__CONTEXT+00H
+ DB 08BH,08H
+ DB 0BH,0C9H
+ DW 0840FH
+ DD cfa_SFIND+050H-$-4
+ DB 050H
+ DB 08BH,045H,00H
+ DB 08BH,055H,04H
+ DB 089H,045H,00H
+ DB 089H,055H,0FCH
+ DB 089H,045H,0F8H
+ DB 08BH,04H,024H
+ DB 08BH,00H
+ DB 08DH,06DH,0F8H
+ call cfa_SEARCHminusWORDLIST+00H
+ call cfa_queDUP+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_SFIND+044H
+ DB 074H,09H
+ DB 083H,0C4H,04H
+ call cfa__2NIP+00H
+ DB 0C3H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08DH,040H,04H
+ DB 08DH,06DH,0FCH
+ DB 0EBH,0B5H
+ DB 08BH,00H
+ DB 0C3H
+AHEADER 0 ,'SEARCH-WORDLIST',cfa_SEARCHminusWORDLIST
+
+ DB 050H
+ DB 0B8H
+ DD 07FH
+ DB 023H,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_SEARCHminusBUFF+00H
+ call cfa_ASCIIminusZ+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08DH,06DH,0FCH
+ call cfa_ZSEARCHminusWORDLIST+00H
+ DB 0C3H
+AHEADER 0 ,'ZSEARCH-WORDLIST',cfa_ZSEARCHminusWORDLIST
+
+ DB 08BH,055H,00H
+ DB 052H
+ DB 08BH,00H
+ DB 050H
+ DB 08DH,06DH,04H
+ call cfa_GETPR+00H
+ DB 085H,0C0H
+ DW 0840FH
+ DD cfa_ZSEARCHminusWORDLIST+025H-$-4
+ DB 08DH,06DH,0FCH
+ DB 089H,045H,00H
+ DB 0FH,0B6H,042H,0F7H
+ DB 048H
+ DB 083H,0C8H,01H
+ DB 0C3H
+AHEADER 0 ,'SEARCH-BUFF',cfa_SEARCHminusBUFF
+
+ call cfa__CREATEminusCODE+00H
+ DD 00H
+ DB 00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H,00H,00H,00H,00H,00H,00H,00H
+ DB 00H
+AHEADER 0 ,'CONTEXT_SIZE',cfa_CONTEXT_SIZE
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 040H
+AHEADER 0 ,'FIND',cfa_FIND
+
+ call cfa__VECTminusCODE+00H
+ DD cfa_FIND1+00H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'WordByAddr',cfa_WordByAddr
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0830FH
+ DD cfa_WordByAddr+03CH-$-4
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa__SLITERALminusCODE+00H
+ DB 012H
+ DB '',0
+ DB 0C3H
+ call cfa_NEAR_NFA+00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0BH,0C0H
+ DW 0850FH
+ DD cfa_WordByAddr+068H-$-4
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa__SLITERALminusCODE+00H
+ DB 0BH
+ DB '',0
+ DB 0C3H
+ DB 08DH,050H,01H
+ DB 089H,055H,0FCH
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ DB 0C3H
+AHEADER 0 ,'NEAR_NFA',cfa_NEAR_NFA
+
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08BH,055H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,0C2H
+ DB 08DH,06DH,0FCH
+ call cfa_VOCminusLIST+00H
+ DB 08BH,00H
+ DB 0BH,0C0H
+ DW 0840FH
+ DD cfa_NEAR_NFA+044H-$-4
+ DB 089H,045H,0FCH
+ DB 050H
+ DB 08BH,045H,0FCH
+ call cfa_WL_NEAR_NFA_M+00H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_N_UMAX+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 089H,045H,0F8H
+ DB 058H
+ DB 08DH,06DH,0F8H
+ DB 0EBH,0D1H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'WL_NEAR_NFA_M',cfa_WL_NEAR_NFA_M
+
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,045H,0FCH
+ DB 089H,055H,0FCH
+ DB 08DH,040H,04H
+ DB 08BH,00H
+ DB 08DH,06DH,0FCH
+ DB 0BH,0C0H
+ DW 0840FH
+ DD cfa_WL_NEAR_NFA_M+062H-$-4
+ call cfa_WL_NEAR_NFA_N+00H
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_N_UMAX+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08DH,06DH,0FCH
+ DB 0BH,0C0H
+;je  cfa_WL_NEAR_NFA_M+051H
+ DB 074H,05H
+ call cfa_CDR+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08BH,055H,0FCH
+ DB 089H,045H,0FCH
+ DB 08BH,0C2H
+ DB 08DH,06DH,0FCH
+ DB 0EBH,0B7H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'WL_NEAR_NFA_N',cfa_WL_NEAR_NFA_N
+
+ DB 090H
+ DB 08BH,055H,00H
+ DB 089H,045H,0FCH
+ DB 089H,055H,0F8H
+ DB 08DH,06DH,0F8H
+ DB 0BH,0C0H
+;je  cfa_WL_NEAR_NFA_N+014H
+ DB 074H,03H
+ DB 08BH,040H,0F8H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0860FH
+ DD cfa_WL_NEAR_NFA_N+02AH-$-4
+ call cfa_CDR+00H
+ DB 0EBH,0D7H
+ DB 0C3H
+AHEADER 0 ,'WL_NEAR_NFA',cfa_WL_NEAR_NFA
+
+ DB 08BH,00H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 08BH,055H,00H
+ DB 089H,045H,0FCH
+ DB 089H,055H,0F8H
+ DB 08DH,06DH,0F8H
+ DB 0BH,0C0H
+;je  cfa_WL_NEAR_NFA+018H
+ DB 074H,03H
+ DB 08BH,040H,0F8H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0860FH
+ DD cfa_WL_NEAR_NFA+02EH-$-4
+ call cfa_CDR+00H
+ DB 0EBH,0D7H
+ DB 0C3H
+AHEADER 0 ,'N_UMAX',cfa_N_UMAX
+
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,0FCH
+ DB 0BH,0C0H
+;je  cfa_N_UMAX+010H
+ DB 074H,03H
+ DB 08BH,040H,0F8H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,0FCH
+ DB 0BH,0C0H
+;je  cfa_N_UMAX+020H
+ DB 074H,03H
+ DB 08BH,040H,0F8H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_N_UMAX+02FH
+ DB 076H,04H
+ DB 08DH,06DH,04H
+ DB 0C3H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'VOC',cfa_VOC
+
+ call cfa_LAST+00H
+ DB 08BH,00H
+ DB 08DH,040H,0F7H
+ DB 089H,045H,0FCH
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_and_VOC+00H
+ DB 0BH,045H,00H
+ DB 08BH,055H,04H
+ DB 089H,045H,04H
+ DB 08BH,0C2H
+ DB 08BH,055H,04H
+ DB 088H,010H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+ DB 0C3H
+AHEADER 0 ,'?VOC',cfa_queVOC
+
+ DB 08DH,040H,0F7H
+ DB 0FH,0B6H,00H
+ call cfa_and_VOC+00H
+ DB 023H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'?IMMEDIATE',cfa_queIMMEDIATE
+
+ DB 08DH,040H,0F7H
+ DB 0FH,0B6H,00H
+ call cfa_and_IMMEDIATE+00H
+ DB 023H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'CDR',cfa_CDR
+
+ DB 0BH,0C0H
+;je  cfa_CDR+07H
+ DB 074H,03H
+ DB 08BH,040H,0FCH
+ DB 0C3H
+AHEADER 0 ,'NAME>F',cfa_NAMEgreatF
+
+ DB 08DH,040H,0F7H
+ DB 0C3H
+AHEADER 0 ,'NAME>',cfa_NAMEgreat
+
+ DB 08BH,040H,0F8H
+ DB 0C3H
+AHEADER 0 ,'NAME>C',cfa_NAMEgreatC
+
+ DB 08DH,040H,0F8H
+ DB 0C3H
+AHEADER 0 ,'NAME>L',cfa_NAMEgreatL
+
+ DB 08DH,040H,0FCH
+ DB 0C3H
+AHEADER 0 ,'ID.',cfa_IDdot
+
+ call cfa_ZCOUNT+00H
+ call cfa_TYPE+00H
+ DB 0C3H
+AHEADER 0 ,'PAR@',cfa_PAR_ld
+
+ DB 08DH,040H,04H
+ DB 08DH,040H,04H
+ DB 08BH,00H
+ DB 0C3H
+AHEADER 0 ,'PAR!',cfa_PARsave
+
+ DB 08DH,040H,04H
+ DB 08DH,040H,04H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'CLASS@',cfa_CLASS_ld
+
+ DB 08DH,040H,04H
+ DB 08DH,040H,04H
+ DB 08DH,040H,04H
+ DB 08BH,00H
+ DB 0C3H
+AHEADER 0 ,'CLASS!',cfa_CLASSsave
+
+ DB 08DH,040H,04H
+ DB 08DH,040H,04H
+ DB 08DH,040H,04H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'WORDLIST',cfa_WORDLIST
+
+ call cfa_HERE+00H
+ call cfa_VOCminusLIST+00H
+ DB 08BH,00H
+ call cfa_com+00H
+ call cfa_VOCminusLIST+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_HERE+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_com+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_com+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_com+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_com+00H
+ DB 0C3H
+AHEADER 0 ,'SWORD,',cfa_SWORDcom
+
+ call cfa_HERE+00H
+ DB 08DH,040H,04H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_LAST+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08BH,055H,08H
+ DB 089H,045H,08H
+ DB 08BH,0C2H
+ DB 089H,045H,04H
+ DB 08BH,00H
+ DB 08DH,06DH,04H
+ call cfa_com+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_Scom+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ DB 0C3H
+AHEADER 0 ,'>BODY',cfa_greatBODY
+
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05H
+ DB 03H,045H,0FCH
+ DB 0C3H
+AHEADER 0 ,'&VOC',cfa_and_VOC
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 02H
+AHEADER 0 ,'&IMMEDIATE',cfa_and_IMMEDIATE
+
+ call cfa__CONSTANTminusCODE+00H
+ DD 01H
+AHEADER 1 ,'RECURSE',cfa_RECURSE
+
+ call cfa_queCOMP+00H
+ call cfa_LASTminusNON+00H
+ DB 0BH,0C0H
+;jne cfa_RECURSE+01FH
+ DB 075H,011H
+ DB 08BH,045H,00H
+ DB 089H,045H,00H
+ mov eax,[T_CURRENT-main_task+edi]
+ DB 08BH,00H
+ DB 08BH,040H,0FBH
+ call cfa__COMPILEcom+00H
+ DB 0C3H
+AHEADER 1 ,'AGAIN',cfa_AGAIN
+
+ call cfa_queCOMP+00H
+ DB 03DH
+ DD 03H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_AGAIN+022H
+ DB 074H,010H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFF82AH
+ DB 08DH,06DH,0FCH
+ call cfa_THROW+00H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0F7H,0D8H
+ DB 03H,045H,00H
+ DB 089H,045H,00H
+ DB 08DH,080H
+ DD 080H
+ DB 03DH
+ DD 0100H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jae cfa_AGAIN+06FH
+ DB 073H,022H
+ call cfa_SetJP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0EBH
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ call cfa_Ccom+00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0EBH,0BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_BRANCHcom+00H
+ call cfa_DP+00H
+ DB 08BH,00H
+ call cfa_dcomaminusSET+09H
+ DB 0C3H
+AHEADER 1 ,'REPEAT',cfa__REPEAT
+
+ call cfa_queCOMP+00H
+ DB 03DH
+ DD 03H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa__REPEAT+022H
+ DB 074H,010H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFF82BH
+ DB 08DH,06DH,0FCH
+ call cfa_THROW+00H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 08DH,040H,02H
+ DB 0F7H,0D8H
+ DB 03H,045H,00H
+ DB 089H,045H,00H
+ DB 08DH,080H
+ DD 080H
+ DB 03DH
+ DD 0100H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jae cfa__REPEAT+06FH
+ DB 073H,022H
+ call cfa_SetJP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0EBH
+ DB 08DH,06DH,0FCH
+ call cfa_Ccom+00H
+ call cfa_Ccom+00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0EBH,0BH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_BRANCHcom+00H
+ call cfa_greatORESOLVE+00H
+ DB 0C3H
+AHEADER 1 ,'WHILE',cfa__WHILE
+
+ call cfa_queCOMP+00H
+ call cfa__IF+00H
+ call cfa__2SWAP+00H
+ DB 0C3H
+AHEADER 1 ,'UNTIL',cfa_UNTIL
+
+ call cfa_queCOMP+00H
+ DB 03DH
+ DD 03H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_UNTIL+022H
+ DB 074H,010H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFF82CH
+ DB 08DH,06DH,0FCH
+ call cfa_THROW+00H
+ call cfa_queBRANCHcom+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFF80H
+ DB 08DH,06DH,0FCH
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04H
+ DB 0F7H,0D8H
+ DB 03H,045H,0FCH
+ DB 08BH,00H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_UNTIL+09EH
+ DB 076H,04BH
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 05H
+ DB 0F7H,0D8H
+ DB 03H,045H,0FCH
+ DB 0FH,0B7H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03F0H
+ DB 03H,045H,0FCH
+ call cfa_DP+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 06H
+ DB 0F7H,0D8H
+ DB 03H,045H,0FCH
+ call cfa_Wsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFCH
+ DB 08DH,06DH,0FCH
+ call cfa_ALLOT+00H
+ DB 0C3H
+AHEADER 1 ,'BEGIN',cfa_BEGIN
+
+ call cfa_queCOMP+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04H
+ DB 08DH,06DH,0FCH
+ call cfa_ALIGNminusNOP+00H
+ call cfa_lessMARK+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 03H
+ DB 08DH,06DH,0FCH
+ DB 0C3H
+AHEADER 1 ,'BREAK',cfa__BREAK
+
+ call cfa_EXIT+00H
+ call cfa_THEN+00H
+ DB 0C3H
+AHEADER 1 ,'THEN',cfa_THEN
+
+ call cfa_queCOMP+00H
+ call cfa_greatORESOLVE+00H
+ DB 0C3H
+AHEADER 1 ,'ELSE',cfa__ELSE
+
+ call cfa_queCOMP+00H
+ call cfa_DP+00H
+ DB 08BH,00H
+ call cfa_BRANCHcom+00H
+ call cfa_greatORESOLVE+00H
+ call cfa_greatMARK+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02H
+ DB 08DH,06DH,0FCH
+ DB 0C3H
+AHEADER 1 ,'IF',cfa__IF
+
+ call cfa_queCOMP+00H
+ call cfa_DP+00H
+ DB 08BH,00H
+ call cfa_queBRANCHcom+00H
+ call cfa_greatMARK+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 08DH,06DH,0FCH
+ DB 0C3H
+AHEADER 0 ,'?LITERAL2',cfa_queLITERAL2
+
+ DB 08DH,050H,01H
+ DB 089H,055H,0FCH
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_queSLITERAL2+00H
+ DB 0C3H
+AHEADER 0 ,'?SLITERAL2',cfa_queSLITERAL2
+
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 01H
+ DB 03BH,045H,0F8H
+ DB 08BH,045H,0FCH
+;jge cfa_queSLITERAL2+058H
+ DB 07DH,045H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 0FH,0B7H,00H
+ DB 03DH
+ DD 07830H
+ DB 08BH,045H,0FCH
+;jne cfa_queSLITERAL2+058H
+ DB 075H,032H
+ DB 08BH,055H,00H
+ DB 089H,045H,0FCH
+ DB 089H,055H,0F8H
+ DB 08DH,06DH,0F8H
+ call cfa__2greatR+00H
+ call cfa_HEXminusSLITERAL+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_queSLITERAL2+053H-$-4
+ DB 083H,0C4H,04H
+ DB 083H,0C4H,04H
+ DB 0C3H
+ DB 0EBH,05H
+ call cfa__2Rgreat+00H
+ DB 08BH,055H,00H
+ DB 089H,045H,0FCH
+ DB 089H,055H,0F8H
+ DB 08DH,06DH,0F8H
+ call cfa__2greatR+00H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08DH,05H
+ DD cfa_queSLITERAL1+00H
+ call cfa_CATCH+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_queSLITERAL2+0182H-$-4
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa__2Rgreat+00H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 022H
+ DB 033H,045H,0F8H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 089H,045H,0F4H
+ DB 0B8H
+ DD 02H
+ DB 03BH,045H,0F4H
+ DB 0FH,09DH,0C0H
+ DB 083H,0E0H,01H
+ DB 048H
+ DB 023H,045H,0F8H
+ DB 08BH,045H,0FCH
+;je  cfa_queSLITERAL2+0ECH
+ DB 074H,020H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02H
+ DB 0F7H,0D8H
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ DB 08BH,055H,00H
+ DB 089H,045H,0FCH
+ DB 08DH,04H,02H
+ DB 089H,045H,0F8H
+ DB 033H,0C0H
+ DB 08BH,055H,0F8H
+ DB 089H,045H,0F8H
+ DB 08BH,0C2H
+ DB 08BH,055H,0F8H
+ DB 088H,010H
+ DB 08BH,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08DH,05H
+ DD cfa_INCLUDED_S+00H
+ call cfa_CATCH+00H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 02H
+ DB 033H,045H,0F8H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 089H,045H,0F4H
+ DB 0B8H
+ DD 03H
+ DB 033H,045H,0F4H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 0BH,045H,0F8H
+ DB 089H,045H,0F8H
+ DB 08BH,045H,0FCH
+ DB 089H,045H,0F4H
+ DB 0B8H
+ DD 0A1H
+ DB 033H,045H,0F4H
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 0BH,045H,0F8H
+ DB 08BH,045H,0FCH
+ DW 0840FH
+ DD cfa_queSLITERAL2+017BH-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFF82DH
+ DB 08DH,06DH,0FCH
+ call cfa_THROW+00H
+ DB 0EBH,05H
+ call cfa_THROW+00H
+ DB 0EBH,06H
+ DB 083H,0C4H,04H
+ DB 083H,0C4H,04H
+ DB 0C3H
+AHEADER 0 ,'INCLUDED_S',cfa_INCLUDED_S
+
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFF82DH
+ DB 08DH,06DH,0FCH
+ call cfa_THROW+00H
+ call cfa_INCLUDED+00H
+ DB 0C3H
+AHEADER 0 ,'HEX-SLITERAL',cfa_HEXminusSLITERAL
+
+ call cfa_BASE+00H
+ DB 08BH,00H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_HEX+00H
+ DB 089H,045H,0FCH
+ DB 0C7H,045H,0F8H
+ DD 00H
+ DB 033H,0C0H
+ DB 08DH,06DH,0F8H
+ call cfa__2SWAP+00H
+ DB 08DH,040H,0FEH
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ DB 08DH,040H,02H
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ call cfa_greatNUMBER+00H
+ call cfa_queDUP+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_HEXminusSLITERAL+0B0H-$-4
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 033H,045H,0FCH
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ DB 0FH,0B6H,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 04CH
+ DB 033H,045H,0FCH
+ DB 083H,0E8H,01H
+ DB 01BH,0C0H
+ DB 023H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jne cfa_HEXminusSLITERAL+0AEH
+ DB 075H,023H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_FALSE+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08DH,06DH,0FCH
+ call cfa_BASE+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+ DB 0EBH,06H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_LITERAL+00H
+ call cfa_TRUE+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08DH,06DH,0FCH
+ call cfa_BASE+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'?LITERAL1',cfa_queLITERAL1
+
+ DB 08DH,050H,01H
+ DB 089H,055H,0FCH
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,0FCH
+ call cfa_queSLITERAL1+00H
+ DB 0C3H
+AHEADER 0 ,'?SLITERAL1',cfa_queSLITERAL1
+
+ DB 089H,045H,0FCH
+ DB 0C7H,045H,0F8H
+ DD 00H
+ DB 033H,0C0H
+ DB 08DH,06DH,0F8H
+ call cfa__2SWAP+00H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 02DH
+ DB 08BH,045H,0FCH
+ DW 0850FH
+ DD cfa_queSLITERAL1+048H-$-4
+ DB 08DH,040H,0FFH
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ call cfa_TRUE+00H
+ DB 0EBH,05H
+ call cfa_FALSE+00H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_greatNUMBER+00H
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 0B8H
+ DD 01H
+ DB 03BH,045H,0F8H
+ DB 08BH,045H,0FCH
+ DW 08D0FH
+ DD cfa_queSLITERAL1+08EH-$-4
+ call cfa__SLITERALminusCODE+00H
+ DB 02H
+ DB '-?',0
+ call cfa_TYPE+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFF82FH
+ DB 08DH,06DH,0FCH
+ call cfa_THROW+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_queSLITERAL1+0DBH-$-4
+ DB 0FH,0B6H,00H
+ DB 03DH
+ DD 02EH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_queSLITERAL1+0BCH
+ DB 074H,010H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFF82EH
+ DB 08DH,06DH,0FCH
+ call cfa_THROW+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 0BH,0C0H
+ DB 08BH,045H,0FCH
+;je  cfa_queSLITERAL1+0D4H
+ DB 074H,0DH
+ DB 08BH,055H,00H
+ DB 0F7H,0D8H
+ DB 0F7H,0DAH
+ DB 083H,0D8H,00H
+ DB 089H,055H,00H
+ call cfa__2LITERAL+00H
+ DB 0EBH,01BH
+ DB 08BH,045H,00H
+ DB 08BH,045H,04H
+ DB 089H,045H,04H
+ DB 058H
+ DB 0BH,0C0H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;je  cfa_queSLITERAL1+0F1H
+ DB 074H,02H
+ DB 0F7H,0D8H
+ call cfa_LITERAL+00H
+ DB 0C3H
+AHEADER 0 ,'--',cfa_minusminus
+
+ call cfa_FIELD+00H
+ DB 0C3H
+AHEADER 0 ,'FIELD',cfa_FIELD
+
+ call cfa_dcoma+00H
+ DB 089H,045H,0FCH
+ DB 08BH,045H,00H
+ DB 08DH,06DH,0FCH
+ DB 0BH,0C0H
+ DW 0840FH
+ DD cfa_FIELD+032H-$-4
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_LITcom+00H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08DH,05H
+ DD cfa_plus+00H
+ call cfa_COMPILEcom+00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa__end+00H
+ DB 03H,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'\EOF',cfa_slEOF
+
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ call cfa_REFILL+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_slEOF+05H
+ DB 075H,0F1H
+ call cfa_sl+00H
+ DB 0C3H
+AHEADER 1 ,'EXIT',cfa_EXIT
+
+ call cfa_RETcom+00H
+ DB 0C3H
+AHEADER 0 ,'[;]',cfa__x_end_y
+
+ call cfa_RETcom+00H
+ call cfa__x+00H
+ call cfa_REVEAL+00H
+ call cfa_ClearJpBuff+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_LASTminusNON+09H
+ DB 0C3H
+AHEADER 1 ,';',cfa__end
+
+ call cfa__x_end_y+00H
+ DB 0C3H
+AHEADER 1 ,'[COMPILE]',cfa__xCOMPILE_y
+
+ call cfa_queCOMP+00H
+ call cfa_tic+00H
+ call cfa_COMPILEcom+00H
+ DB 0C3H
+AHEADER 1 ,'(',cfa__c
+
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 029H
+ DB 089H,045H,0F8H
+ DB 08DH,06DH,0F8H
+ call cfa_PARSE+00H
+ DB 03H,045H,00H
+ DB 0FH,0B6H,00H
+ DB 033H,045H,04H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+ DW 0840FH
+ DD cfa__c+03FH-$-4
+ call cfa_REFILL+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa__c+03DH
+ DB 075H,01H
+ DB 0C3H
+ DB 0EBH,0C6H
+ DB 0C3H
+AHEADER 1 ,'.(',cfa_dot_c
+
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 029H
+ DB 08DH,06DH,0FCH
+ call cfa_PARSE+00H
+ call cfa_TYPE+00H
+ DB 0C3H
+AHEADER 1 ,'\',cfa_sl
+
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 01H
+ DB 08DH,06DH,0FCH
+ call cfa_PARSE+00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 1 ,'POSTPONE',cfa_POSTPONE
+
+ call cfa_queCOMP+00H
+ call cfa_PARSEminusWORD+00H
+ call cfa_SFIND+00H
+ DB 0BH,0C0H
+;jne cfa_POSTPONE+023H
+ DB 075H,010H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFEBFH
+ DB 08DH,06DH,0FCH
+ call cfa_THROW+00H
+ DB 03DH
+ DD 01H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_POSTPONE+03EH-$-4
+ call cfa_COMPILEcom+00H
+ DB 0E9H
+ DD cfa_POSTPONE+054H-$-4
+ call cfa_LITcom+00H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08DH,05H
+ DD cfa_COMPILEcom_M+00H
+ call cfa_COMPILEcom+00H
+ DB 0C3H
+AHEADER 0 ,'COMPILE,_M',cfa_COMPILEcom_M
+
+ call cfa_COMPILEcom+00H
+ DB 0C3H
+AHEADER 1 ,'TO',cfa_TO
+
+ call cfa_tic+00H
+ DB 08DH,040H,05H
+ DB 08DH,040H,04H
+ call cfa_STATE+00H
+ DB 08BH,00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_TO+027H-$-4
+ call cfa_COMPILEcom+00H
+ DB 0EBH,05H
+ call cfa_EXECUTE+00H
+ DB 0C3H
+AHEADER 0 ,'AUTOEXEC',cfa_AUTOEXEC
+
+ call cfa__SLITERALminusCODE+00H
+ DB 0BH
+ DB '/sys/INIT.F',0
+ call cfa_INCLUDED_+00H
+ DB 0C3H
+AHEADER 0 ,'REQUIRE',cfa_REQUIRE
+
+ call cfa_PARSEminusNAME+00H
+ call cfa_PARSEminusNAME+00H
+ DB 08BH,055H,00H
+ DB 089H,045H,0FCH
+ DB 08DH,04H,02H
+ DB 089H,045H,0F8H
+ DB 033H,0C0H
+ DB 08BH,055H,0F8H
+ DB 089H,045H,0F8H
+ DB 08BH,0C2H
+ DB 08BH,055H,0F8H
+ DB 088H,010H
+ DB 08BH,045H,0FCH
+ call cfa_REQUIRED+00H
+ DB 0C3H
+AHEADER 0 ,'REQUIRED',cfa_REQUIRED
+
+ call cfa__2SWAP+00H
+ call cfa_SFIND+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_REQUIRED+023H-$-4
+ DB 08BH,045H,00H
+ DB 08BH,045H,08H
+ DB 08DH,06DH,0CH
+ DB 0EBH,0BH
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_INCLUDED_+00H
+ DB 0C3H
+AHEADER 0 ,'INCLUDED_',cfa_INCLUDED_
+
+ call cfa_R_divO+00H
+ call cfa_OPENminusFILE+00H
+ call cfa_THROW+00H
+ DB 089H,045H,0FCH
+ DB 050H
+ DB 08BH,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08DH,05H
+ DD cfa_INCLUDEminusFILE+00H
+ call cfa_CATCH+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08DH,06DH,0FCH
+ call cfa_CLOSEminusFILE+00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_THROW+00H
+ DB 0C3H
+AHEADER 0 ,'INCLUDE-FILE',cfa_INCLUDEminusFILE
+
+ call cfa_greatIN+00H
+ DB 08BH,00H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_SOURCEminusID+00H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_SOURCEminusID+09H
+ DB 089H,045H,0FCH
+ DB 08BH,0C4H
+ DB 08DH,06DH,0FCH
+ call cfa_nTIB+00H
+ DB 08BH,00H
+ call cfa_ALIGNED+00H
+ DB 0F7H,0D8H
+ DB 03H,045H,00H
+ DB 08BH,0E0H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_TIB+00H
+ DB 089H,045H,0FCH
+ DB 08BH,0C4H
+ DB 08DH,06DH,0FCH
+ call cfa_nTIB+00H
+ DB 08BH,00H
+ call cfa_CMOVE+00H
+ call cfa_SOURCE+00H
+ call cfa__2greatR+00H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08DH,05H
+ DD cfa_FQUIT+00H
+ call cfa_CATCH+00H
+ call cfa_SAVEERR+00H
+ call cfa__2Rgreat+00H
+ call cfa_SOURCEsave+00H
+ DB 089H,045H,0FCH
+ DB 08BH,0C4H
+ DB 08DH,06DH,0FCH
+ call cfa_TIB+00H
+ call cfa_nTIB+00H
+ DB 08BH,00H
+ call cfa_CMOVE+00H
+ DB 089H,045H,0FCH
+ DB 08BH,0C4H
+ DB 08DH,06DH,0FCH
+ call cfa_nTIB+00H
+ DB 08BH,00H
+ call cfa_ALIGNED+00H
+ DB 03H,045H,00H
+ DB 08BH,0E0H
+ DB 08BH,045H,04H
+ DB 089H,045H,04H
+ DB 058H
+ DB 08DH,06DH,04H
+ call cfa_SOURCEminusID+09H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08DH,06DH,0FCH
+ call cfa_greatIN+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_THROW+00H
+ DB 0C3H
+AHEADER 0 ,'FQUIT',cfa_FQUIT
+
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ call cfa_REFILL+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_FQUIT+01FH-$-4
+ call cfa_INTERPRET+00H
+ DB 0EBH,0E6H
+ DB 0C3H
+AHEADER 0 ,'EVALUATE',cfa_EVALUATE
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08DH,05H
+ DD cfa_INTERPRET+00H
+ call cfa_EVALUATEminusWITH+00H
+ DB 0C3H
+AHEADER 0 ,'EVALUATE-WITH',cfa_EVALUATEminusWITH
+
+ call cfa_SAVEminusSOURCE+00H
+ call cfa_NgreatR+00H
+ DB 050H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ call cfa_SOURCEsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFFH
+ DB 08DH,06DH,0FCH
+ call cfa_SOURCEminusID+09H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08DH,06DH,0FCH
+ call cfa_CATCH+00H
+ call cfa_NRgreat+00H
+ call cfa_RESTOREminusSOURCE+00H
+ call cfa_THROW+00H
+ DB 0C3H
+AHEADER 0 ,'RESTORE-SOURCE',cfa_RESTOREminusSOURCE
+
+ DB 03DH
+ DD 06H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;je  cfa_RESTOREminusSOURCE+012H
+ DB 074H,05H
+ call cfa_ABORT+00H
+ call cfa_CURSTR+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_SOURCEsave+00H
+ call cfa_greatIN+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_SOURCEminusID+09H
+ call cfa_SOURCEminusIDminusXT+09H
+ DB 0C3H
+AHEADER 0 ,'SAVE-SOURCE',cfa_SAVEminusSOURCE
+
+ call cfa_SOURCEminusIDminusXT+00H
+ call cfa_SOURCEminusID+00H
+ call cfa_greatIN+00H
+ DB 08BH,00H
+ call cfa_SOURCE+00H
+ call cfa_CURSTR+00H
+ DB 08BH,00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 06H
+ DB 08DH,06DH,0FCH
+ DB 0C3H
+AHEADER 0 ,'MAIN1',cfa_MAIN1
+
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ call cfa_REFILL+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_MAIN1+024H-$-4
+ call cfa_INTERPRET+00H
+ call cfa_OKdot+00H
+ DB 0EBH,0E1H
+ call cfa__BYE+00H
+ DB 0C3H
+AHEADER 0 ,'QUIT',cfa_QUIT
+
+ call cfa_CONSOLEminusHANDLES+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_SOURCEminusID+09H
+ call cfa__x+00H
+ call cfa_lessMAINgreat+00H
+ DB 0C3H
+AHEADER 0 ,']',cfa__y
+
+ call cfa_TRUE+00H
+ call cfa_STATE+00H
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 1 ,'[',cfa__x
+
+ call cfa_STATE+00H
+ DB 0C7H,00H
+ DD 00H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'EVAL-WORD',cfa_EVALminusWORD
+
+ call cfa_SFIND+00H
+ call cfa_queDUP+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_EVALminusWORD+03CH-$-4
+ call cfa_STATE+00H
+ DB 08BH,00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_EVALminusWORD+035H-$-4
+ call cfa_COMPILEcom+00H
+ DB 0EBH,05H
+ call cfa_EXECUTE+00H
+ DB 0EBH,010H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFF82DH
+ DB 08DH,06DH,0FCH
+ call cfa_THROW+00H
+ DB 0C3H
+AHEADER 0 ,'OK1',cfa_OK1
+
+ call cfa_STATE+00H
+ DB 08BH,00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0850FH
+ DD cfa_OK1+07EH-$-4
+ call cfa__SLITERALminusCODE+00H
+ DB 03H
+ DB ' Ok',0
+ call cfa_TYPE+00H
+ call cfa_DEPTH+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 046H
+ DB 08DH,06DH,0FCH
+ call cfa_UMIN+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,04H
+ DB 0BBH
+ DD cfa_OK1+079H
+ DB 03BH,045H,0F8H
+;jne cfa_OK1+050H
+ DB 075H,05H
+ DB 08BH,045H,0FCH
+ DB 0FFH,0E3H
+ DB 053H
+ DB 0BBH
+ DD 080000000H
+ DB 02BH,05DH,0F8H
+ DB 053H
+ DB 03H,0D8H
+ DB 053H
+ DB 08BH,045H,0FCH
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02EH
+ DB 08DH,06DH,0FCH
+ call cfa_EMIT+00H
+ DB 0FFH,04H,024H
+;jno cfa_OK1+060H
+ DB 071H,0EBH
+ DB 08DH,064H,024H,0CH
+ call cfa_CR+00H
+ DB 0C3H
+AHEADER 0 ,'.SN',cfa_dotSN
+
+ DB 050H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 083H,03CH,024H,00H
+ DW 0840FH
+ DD cfa_dotSN+0C6H-$-4
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08BH,0C5H
+ DB 089H,045H,0FCH
+ DB 08BH,04H,024H
+ DB 08DH,040H,0FFH
+ DB 08DH,04H,085H
+ DD 00H
+ DB 03H,045H,0FCH
+ DB 08BH,00H
+ DB 0BH,0C0H
+ DW 08D0FH
+ DD cfa_dotSN+0B1H-$-4
+ DB 089H,045H,0FCH
+ DB 089H,045H,0F8H
+ DB 033H,0C0H
+ DB 08DH,06DH,0F8H
+ call cfa_lessn+00H
+ call cfa_nS+00H
+ call cfa_ngreat+00H
+ call cfa_TYPE+00H
+ call cfa__SLITERALminusCODE+00H
+ DB 01H
+ DB '(',0
+ call cfa_TYPE+00H
+ call cfa_ABS+00H
+ DB 089H,045H,0FCH
+ DB 033H,0C0H
+ DB 08DH,06DH,0FCH
+ call cfa_lessn+00H
+ call cfa_nS+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 02DH
+ DB 08DH,06DH,0FCH
+ call cfa_HOLD+00H
+ call cfa_ngreat+00H
+ call cfa_TYPE+00H
+ call cfa__SLITERALminusCODE+00H
+ DB 02H
+ DB ') ',0
+ call cfa_TYPE+00H
+ DB 0EBH,05H
+ call cfa_dot+00H
+ DB 089H,045H,0FCH
+ DB 058H
+ DB 08DH,040H,0FFH
+ DB 050H
+ DB 08BH,045H,0FCH
+ DB 0E9H
+ DD cfa_dotSN+015H-$-4
+ DB 083H,0C4H,04H
+ DB 0C3H
+AHEADER 0 ,'INTERPRET',cfa_INTERPRET
+
+ call cfa_and_INTERPRET+00H
+ DB 08BH,00H
+ call cfa_EXECUTE+00H
+ DB 0C3H
+AHEADER 0 ,'&INTERPRET',cfa_and_INTERPRET
+
+ call cfa__CREATEminusCODE+00H
+ DD cfa_INTERPRET_+00H
+AHEADER 0 ,'INTERPRET_',cfa_INTERPRET_
+
+ call cfa_SAVEERRque+00H
+ call cfa_ON+00H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ DB 090H
+ call cfa_PARSEminusWORD+00H
+ DB 0BH,0C0H
+ DW 0840FH
+ DD cfa_INTERPRET_+0B5H-$-4
+ DB 08BH,055H,00H
+ DB 089H,045H,0FCH
+ DB 089H,055H,0F8H
+ DB 08DH,06DH,0F8H
+ call cfa_ILASTminusWORD+00H
+ call cfa__2save+00H
+ call cfa_SFIND+00H
+ call cfa_queDUP+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_INTERPRET_+077H-$-4
+ call cfa_STATE+00H
+ DB 08BH,00H
+ DB 033H,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DW 0850FH
+ DD cfa_INTERPRET_+06DH-$-4
+ call cfa_COMPILEcom+00H
+ DB 0EBH,05H
+ call cfa_EXECUTE+00H
+ DB 0E9H
+ DD cfa_INTERPRET_+0ABH-$-4
+ call cfa__SLITERALminusCODE+00H
+ DB 08H
+ DB 'NOTFOUND',0
+ call cfa_SFIND+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+ DW 0840FH
+ DD cfa_INTERPRET_+0A0H-$-4
+ call cfa_EXECUTE+00H
+ DB 0EBH,0BH
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_queSLITERAL+00H
+ call cfa_queSTACK+00H
+ DB 0E9H
+ DD cfa_INTERPRET_+015H-$-4
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ DB 0C3H
+AHEADER 0 ,'ILAST-WORD',cfa_ILASTminusWORD
+
+ call cfa__CREATEminusCODE+00H
+ DD 00H
+ DB 00H,00H,00H,00H
+AHEADER 0 ,'CHAR',cfa__CHAR
+
+ call cfa_PARSEminusWORD+00H
+ DB 08BH,045H,00H
+ DB 0FH,0B6H,00H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'''',cfa_tic
+
+ call cfa_PARSEminusWORD+00H
+ call cfa_SFIND+00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_tic+024H
+ DB 075H,010H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFEBFH
+ DB 08DH,06DH,0FCH
+ call cfa_THROW+00H
+ DB 0C3H
+AHEADER 0 ,'WORD',cfa__WORD
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_PSKIP+00H
+ call cfa_PARSE+00H
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ call cfa_HERE+00H
+ DB 08BH,055H,00H
+ DB 088H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_HERE+00H
+ DB 08DH,040H,01H
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ call cfa_CMOVE+00H
+ call cfa_BL+00H
+ call cfa_HERE+00H
+ DB 08DH,050H,01H
+ DB 089H,055H,0FCH
+ DB 0FH,0B6H,00H
+ DB 03H,045H,0FCH
+ DB 08BH,055H,00H
+ DB 089H,010H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+ call cfa_HERE+00H
+ DB 0C3H
+AHEADER 0 ,'?COMP',cfa_queCOMP
+
+ call cfa_STATE+00H
+ DB 08BH,00H
+ DB 0BH,0C0H
+ DB 08BH,045H,00H
+ DB 08DH,06DH,04H
+;jne cfa_queCOMP+021H
+ DB 075H,010H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFEC8H
+ DB 08DH,06DH,0FCH
+ call cfa_THROW+00H
+ DB 0C3H
+AHEADER 0 ,'?STACK',cfa_queSTACK
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08BH,0C5H
+ call cfa_S0+00H
+ DB 08BH,00H
+ DB 08BH,055H,00H
+ DB 089H,045H,00H
+ DB 08BH,0C2H
+ DB 03BH,045H,00H
+ DB 08BH,045H,04H
+ DB 08DH,06DH,08H
+;jbe cfa_queSTACK+03EH
+ DB 076H,01CH
+ call cfa_S0+00H
+ DB 08BH,00H
+ call cfa_SPsave+00H
+ DB 089H,045H,0FCH
+ DB 0B8H
+ DD 0FFFFFFFCH
+ DB 08DH,06DH,0FCH
+ call cfa_THROW+00H
+ DB 0C3H
+AHEADER 0 ,'DEPTH',cfa_DEPTH
+
+ DB 089H,045H,0FCH
+ DB 08DH,06DH,0FCH
+ DB 08BH,0C5H
+ call cfa_S0+00H
+ DB 08BH,00H
+ DB 02BH,045H,00H
+ DB 089H,045H,00H
+ DB 0B8H
+ DD 04H
+ DB 08BH,0C8H
+ DB 08BH,045H,00H
+ DB 033H,0D2H
+ DB 0F7H,0F1H
+ DB 08DH,06DH,04H
+ DB 0C3H
+AHEADER 0 ,'SOURCE-ID-XT',cfa_SOURCEminusIDminusXT
+
+ call cfa__USERminusVALUEminusCODE+00H
+ DD reserve+08H
+ call cfa__TOUSERminusVALUEminusCODE+00H
+AHEADER 0 ,'?SLITERAL',cfa_queSLITERAL
+
+ call cfa__VECTminusCODE+00H
+ DD cfa_queSLITERAL2+00H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'?LITERAL',cfa_queLITERAL
+
+ call cfa__VECTminusCODE+00H
+ DD cfa_queLITERAL2+00H
+ call cfa__TOVALUEminusCODE+00H
+AHEADER 0 ,'
',cfa_lessMAINgreat + + call cfa__VECTminusCODE+00H + DD cfa_MAIN1+00H + call cfa__TOVALUEminusCODE+00H +AHEADER 0 ,'OK.',cfa_OKdot + + call cfa__VECTminusCODE+00H + DD cfa_OK1+00H + call cfa__TOVALUEminusCODE+00H +AHEADER 0 ,'ERROR_DO',cfa_ERROR_DO + + call cfa_SAVEERR+00H + call cfa_CR+00H + call cfa_ERRFILE+00H + DB 08DH,050H,01H + DB 089H,055H,0FCH + DB 0FH,0B6H,00H + DB 08DH,06DH,0FCH + call cfa_TYPE+00H + call cfa_CR+00H + call cfa_ERRTIB+00H + DB 08DH,050H,01H + DB 089H,055H,0FCH + DB 0FH,0B6H,00H + DB 08DH,06DH,0FCH + call cfa_TYPE+00H + call cfa_CR+00H + call cfa_ERgreatIN+00H + DB 08BH,00H + DB 090H + DB 090H + DB 090H + DB 090H + DB 090H + DB 090H + DB 090H + DB 090H + DB 090H + DB 090H + DB 090H + DB 090H + DB 090H + DB 090H + call cfa_SPACE+00H + DB 08DH,040H,0FFH + DB 089H,045H,0FCH + DB 089H,045H,0F8H + DB 033H,0C0H + DB 08DH,06DH,0F8H + call cfa_MAX+00H + DB 0BH,0C0H + DB 08BH,045H,00H + DB 08DH,06DH,04H +;jne cfa_ERROR_DO+055H + DB 075H,0DEH + call cfa__SLITERALminusCODE+00H + DB 01H + DB '^',0 + call cfa_TYPE+00H + DB 08BH,045H,00H + DB 08DH,06DH,04H + call cfa_CR+00H + call cfa__SLITERALminusCODE+00H + DB 04H + DB 'ERR=',0 + call cfa_TYPE+00H + call cfa_dot+00H + call cfa_CR+00H + call cfa_S0+00H + DB 08BH,00H + call cfa_SPsave+00H + call cfa_STATE+00H + DB 0C7H,00H + DD 00H + DB 08BH,045H,00H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'SAVEERR',cfa_SAVEERR + + DB 089H,045H,0FCH + DB 08DH,06DH,0FCH + call cfa_SAVEERRque+00H + DB 08BH,00H + DB 023H,045H,00H + DB 08BH,045H,04H + DB 08DH,06DH,08H + DW 0840FH + DD cfa_SAVEERR+0A0H-$-4 + call cfa_SOURCE+00H + call cfa_ERRTIB+00H + call cfa_dolsave+00H + call cfa_greatIN_WORD+00H + DB 08BH,00H + call cfa_ERgreatIN+00H + DB 08BH,055H,00H + DB 089H,010H + DB 08BH,045H,04H + DB 08DH,06DH,08H + call cfa_SAVEERRque+00H + DB 0C7H,00H + DD 00H + DB 08BH,045H,00H + DB 08DH,06DH,04H + call cfa_SOURCEminusID+00H + DB 089H,045H,0FCH + DB 0B8H + DD 03E7H + DB 08DH,06DH,0FCH + call cfa_HERE+00H + call cfa_WITHIN+00H + DB 0BH,0C0H + DB 08BH,045H,00H + DB 08DH,06DH,04H +;je cfa_SAVEERR+0A0H + DB 074H,029H + call cfa_SOURCEminusID+00H + DB 089H,045H,0FCH + DB 0B8H + DD 014H + DB 03H,045H,0FCH + call cfa_ZCOUNT+00H + call cfa_C_divL+00H + call cfa_UMIN+00H + call cfa_ERRFILE+00H + call cfa_dolsave+00H + DB 0C3H +AHEADER 0 ,'>IN_WORD',cfa_greatIN_WORD + + call cfa__CREATEminusCODE+00H + DD 00H +AHEADER 0 ,'SAVEERR?',cfa_SAVEERRque + + call cfa__CREATEminusCODE+00H + DD 00H +AHEADER 0 ,'ER>IN',cfa_ERgreatIN + + call cfa__CREATEminusCODE+00H + DD 00H +AHEADER 0 ,'ERRFILE',cfa_ERRFILE + + call cfa__CREATEminusCODE+00H + DD 00H + DB 00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H +AHEADER 0 ,'ERRTIB',cfa_ERRTIB + + call cfa__CREATEminusCODE+00H + DD 00H + DB 00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H +AHEADER 0 ,'(ABORT1")',cfa__cABORT1dticcend + + DB 08BH,055H,00H + DB 0BH,0D2H + DB 08DH,06DH,04H + DW 0840FH + DD cfa__cABORT1dticcend+043H-$-4 + DB 08DH,050H,01H + DB 089H,055H,0FCH + DB 0FH,0B6H,00H + DB 08DH,06DH,0FCH + call cfa_ERminusU+00H + DB 08BH,055H,00H + DB 089H,010H + DB 08BH,045H,04H + DB 08DH,06DH,08H + call cfa_ERminusA+00H + DB 08BH,055H,00H + DB 089H,010H + DB 0B8H + DD 0FFFFFFFEH + DB 08DH,06DH,04H + call cfa_THROW+00H + DB 0EBH,06H + DB 08BH,045H,00H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'(ABORT")',cfa__cABORTdticcend + + call cfa__VECTminusCODE+00H + DD cfa__cABORT1dticcend+00H + call cfa__TOVALUEminusCODE+00H +AHEADER 0 ,'ERROR',cfa_ERROR + + call cfa__VECTminusCODE+00H + DD cfa_NOOP+00H + call cfa__TOVALUEminusCODE+00H +AHEADER 1 ,'UNLOOP',cfa_UNLOOP + + call cfa_queCOMP+00H + call cfa_SetOP+00H + DB 089H,045H,0FCH + DB 0B8H + DD 0C24648DH + DB 08DH,06DH,0FCH + call cfa_com+00H + DB 0C3H +AHEADER 1 ,'LEAVE',cfa__LEAVE + + call cfa_queCOMP+00H + call cfa_SetOP+00H + DB 089H,045H,0FCH + DB 0B8H + DD 0824648DH + DB 08DH,06DH,0FCH + call cfa_com+00H + call cfa_SetOP+00H + DB 089H,045H,0FCH + DB 0B8H + DD 0C3H + DB 08DH,06DH,0FCH + call cfa_Ccom+00H + DB 0C3H +AHEADER 1 ,'J',cfa_J + + call cfa_queCOMP+00H + DB 089H,045H,0FCH + DB 08DH,06DH,0FCH + DB 08DH,05H + DD cfa_CminusJ+00H + call cfa_INLINEcom+00H + DB 0C3H +AHEADER 1 ,'I',cfa_I + + call cfa_queCOMP+00H + DB 089H,045H,0FCH + DB 08DH,06DH,0FCH + DB 08DH,05H + DD cfa_CminusI+00H + call cfa_INLINEcom+00H + DB 0C3H +AHEADER 1 ,'+LOOP',cfa_plusLOOP + + call cfa_queCOMP+00H + DB 089H,045H,0FCH + DB 08DH,06DH,0FCH + DB 08DH,05H + DD cfa_ADD_xESP_ycomEAX+00H + call cfa_INLINEcom+00H + DB 089H,045H,0FCH + DB 08DH,06DH,0FCH + DB 08DH,05H + DD cfa_DROP+00H + call cfa_INLINEcom+00H + call cfa_HERE+00H + DB 08DH,040H,02H + DB 0F7H,0D8H + DB 03H,045H,00H + DB 089H,045H,00H + DB 08DH,080H + DD 080H + DB 03DH + DD 0100H + DB 01BH,0C0H + call cfa_SetOP+00H + call cfa_SetJP+00H + DB 0BH,0C0H + DB 08BH,045H,00H + DB 08DH,06DH,04H + DW 0840FH + DD cfa_plusLOOP+073H-$-4 + DB 089H,045H,0FCH + DB 0B8H + DD 071H + DB 08DH,06DH,0FCH + call cfa_Ccom+00H + call cfa_Ccom+00H + DB 0EBH,02FH + DB 0B9H + DD 04H + DB 0F7H,0D9H + DB 08DH,04H,01H + DB 089H,045H,0FCH + DB 0B8H + DD 0FH + DB 08DH,06DH,0FCH + call cfa_Ccom+00H + DB 089H,045H,0FCH + DB 0B8H + DD 081H + DB 08DH,06DH,0FCH + call cfa_Ccom+00H + call cfa_com+00H + call cfa_SetOP+00H + DB 089H,045H,0FCH + DB 0B8H + DD 0C24648DH + DB 08DH,06DH,0FCH + call cfa_com+00H + call cfa_DP+00H + DB 08BH,00H + DB 08BH,055H,00H + DB 089H,045H,00H + DB 08BH,0C2H + DB 08BH,055H,00H + DB 089H,010H + DB 08BH,045H,04H + DB 08DH,06DH,08H + DB 0C3H +AHEADER 1 ,'LOOP',cfa_LOOP + + call cfa_queCOMP+00H + DB 089H,045H,0FCH + DB 0C7H,045H,0F8H + DD 024H + DB 0B8H + DD 04FFH + DB 08DH,06DH,0F8H + call cfa_Wcom+00H + call cfa_Ccom+00H + call cfa_HERE+00H + DB 08DH,040H,02H + DB 0F7H,0D8H + DB 03H,045H,00H + DB 089H,045H,00H + DB 08DH,080H + DD 080H + DB 03DH + DD 0100H + DB 01BH,0C0H + call cfa_SetOP+00H + call cfa_SetJP+00H + DB 0BH,0C0H + DB 08BH,045H,00H + DB 08DH,06DH,04H + DW 0840FH + DD cfa_LOOP+06DH-$-4 + DB 089H,045H,0FCH + DB 0B8H + DD 071H + DB 08DH,06DH,0FCH + call cfa_Ccom+00H + call cfa_Ccom+00H + DB 0EBH,02FH + DB 0B9H + DD 04H + DB 0F7H,0D9H + DB 08DH,04H,01H + DB 089H,045H,0FCH + DB 0B8H + DD 0FH + DB 08DH,06DH,0FCH + call cfa_Ccom+00H + DB 089H,045H,0FCH + DB 0B8H + DD 081H + DB 08DH,06DH,0FCH + call cfa_Ccom+00H + call cfa_com+00H + call cfa_SetOP+00H + DB 089H,045H,0FCH + DB 0B8H + DD 0C24648DH + DB 08DH,06DH,0FCH + call cfa_com+00H + call cfa_DP+00H + DB 08BH,00H + DB 08BH,055H,00H + DB 089H,045H,00H + DB 08BH,0C2H + DB 08BH,055H,00H + DB 089H,010H + DB 08BH,045H,04H + DB 08DH,06DH,08H + DB 0C3H +AHEADER 1 ,'?DO',cfa_queDO + + call cfa_queCOMP+00H + call cfa_OP0+00H + DB 08BH,00H + call cfa_dcomaminusSET+00H + call cfa_UMAX+00H + call cfa_dcomaminusSET+09H + DB 089H,045H,0FCH + DB 08DH,06DH,0FCH + DB 08DH,05H + DD cfa_NIP+00H + DB 089H,045H,0FCH + DB 08DH,06DH,0FCH + call cfa_INLINEcom+00H + call cfa_INLINEcom+00H + DB 089H,045H,0FCH + DB 0B8H + DD 0BBH + DB 08DH,06DH,0FCH + call cfa_Ccom+00H + call cfa_HERE+00H + DB 089H,045H,0FCH + DB 0B8H + DD 04H + DB 08DH,06DH,0FCH + call cfa_ALLOT+00H + DB 089H,045H,0FCH + DB 08DH,06DH,0FCH + DB 08DH,05H + DD cfa_CminusqueDO+00H + call cfa_INLINEcom+00H + call cfa_DP+00H + DB 08BH,00H + DB 089H,045H,0FCH + DB 08DH,06DH,0FCH + call cfa_dcomaminusSET+09H + DB 0C3H +AHEADER 1 ,'DO',cfa_DO + + call cfa_queCOMP+00H + DB 089H,045H,0FCH + DB 08DH,06DH,0FCH + DB 08DH,05H + DD cfa_CminusDO+00H + call cfa_INLINEcom+00H + call cfa_SetOP+00H + DB 089H,045H,0FCH + DB 0B8H + DD 068H + DB 08DH,06DH,0FCH + call cfa_Ccom+00H + call cfa_DP+00H + DB 08BH,00H + DB 089H,045H,0FCH + DB 0B8H + DD 04H + DB 08DH,06DH,0FCH + call cfa_ALLOT+00H + call cfa_SetOP+00H + DB 089H,045H,0FCH + DB 0B8H + DD 052H + DB 08DH,06DH,0FCH + call cfa_Ccom+00H + call cfa_SetOP+00H + DB 089H,045H,0FCH + DB 0B8H + DD 053H + DB 08DH,06DH,0FCH + call cfa_Ccom+00H + DB 089H,045H,0FCH + DB 0B8H + DD 04H + DB 08DH,06DH,0FCH + call cfa_ALIGNminusNOP+00H + call cfa_DP+00H + DB 08BH,00H + DB 089H,045H,0FCH + DB 08DH,06DH,0FCH + call cfa_dcomaminusSET+09H + DB 0C3H +AHEADER 0 ,'_:',cfa__dcoma + + call cfa_PARSEminusWORD+00H + call cfa__SHEADER+00H + call cfa__y+00H + call cfa_HERE+00H + call cfa_dcomaminusSET+09H + DB 0C3H +AHEADER 0 ,':',cfa_dcoma + + call cfa__dcoma+00H + DB 0C3H +AHEADER 0 ,'->VECT',cfa_minusgreatVECT + + call cfa_HEADER+00H + call cfa_VECTminusCODE+00H + call cfa_COMPILEcom+00H + call cfa_com+00H + call cfa_TOVALUEminusCODE+00H + call cfa_COMPILEcom+00H + DB 0C3H +AHEADER 0 ,'USER-VALUE',cfa_USERminusVALUE + + call cfa_HEADER+00H + call cfa_USERminusVALUEminusCODE+00H + call cfa_COMPILEcom+00H + call cfa_USERminusALIGNED+00H + DB 08BH,055H,00H + DB 089H,045H,00H + DB 08BH,0C2H + call cfa_com+00H + DB 08DH,040H,04H + call cfa_USERminusALLOT+00H + call cfa_TOUSERminusVALUEminusCODE+00H + call cfa_COMPILEcom+00H + DB 0C3H +AHEADER 0 ,'USER',cfa_USER + + call cfa_USERminusCREATE+00H + DB 089H,045H,0FCH + DB 0B8H + DD 04H + DB 08DH,06DH,0FCH + call cfa_USERminusALLOT+00H + DB 0C3H +AHEADER 0 ,'USER-CREATE',cfa_USERminusCREATE + + call cfa_HEADER+00H + call cfa_HERE+00H + call cfa_DOESgreatA+00H + DB 08BH,055H,00H + DB 089H,010H + DB 08BH,045H,04H + DB 08DH,06DH,08H + call cfa_USERminusCODE+00H + call cfa_COMPILEcom+00H + call cfa_USERminusALIGNED+00H + call cfa_USERminusALLOT+00H + call cfa_com+00H + DB 0C3H +AHEADER 0 ,'USER-ALIGNED',cfa_USERminusALIGNED + + DB 089H,045H,0FCH + DB 0A1H + DD cfa_USERminusOFFS+05H + DB 08DH,040H,03H + DB 0C1H,0E8H,02H + DB 089H,045H,0F8H + DB 0B8H + DD 04H + DB 0F7H,06DH,0F8H + DB 089H,045H,0F8H + DB 089H,045H,0F4H + DB 0A1H + DD cfa_USERminusOFFS+05H + DB 0F7H,0D8H + DB 03H,045H,0F4H + DB 08DH,06DH,0F8H + DB 0C3H +AHEADER 0 ,'->VARIABLE',cfa_minusgreatVARIABLE + + call cfa_HEADER+00H + call cfa_CREATEminusCODE+00H + call cfa_COMPILEcom+00H + call cfa_com+00H + DB 0C3H +AHEADER 0 ,'VECT',cfa_VECT + + call cfa_HEADER+00H + call cfa_VECTminusCODE+00H + call cfa_COMPILEcom+00H + DB 089H,045H,0FCH + DB 08DH,06DH,0FCH + DB 08DH,05H + DD cfa_NOOP+00H + call cfa_com+00H + call cfa_TOVALUEminusCODE+00H + call cfa_COMPILEcom+00H + DB 0C3H +AHEADER 0 ,'VALUE',cfa_VALUE + + call cfa_HEADER+00H + call cfa_CONSTANTminusCODE+00H + call cfa_COMPILEcom+00H + call cfa_com+00H + call cfa_TOVALUEminusCODE+00H + call cfa_COMPILEcom+00H + DB 0C3H +AHEADER 0 ,'CONSTANT',cfa_CONSTANT + + call cfa_HEADER+00H + call cfa_CONSTANTminusCODE+00H + call cfa_COMPILEcom+00H + call cfa_com+00H + DB 0C3H +AHEADER 0 ,'VARIABLE',cfa_VARIABLE + + call cfa_CREATE+00H + DB 089H,045H,0FCH + DB 033H,0C0H + DB 08DH,06DH,0FCH + call cfa_com+00H + DB 0C3H +AHEADER 0 ,'VOCABULARY',cfa_VOCABULARY + + call cfa_WORDLIST+00H + DB 089H,045H,0FCH + DB 08DH,06DH,0FCH + call cfa_CREATE+00H + call cfa_com+00H + DB 089H,045H,0FCH + mov eax,[T_CURRENT-main_task+edi] + DB 08BH,00H + DB 089H,045H,0F8H + DB 08BH,045H,0FCH + DB 08DH,040H,04H + DB 08BH,055H,0F8H + DB 089H,010H + DB 08BH,045H,0FCH + DB 089H,045H,0FCH + mov eax,[T_CURRENT-main_task+edi] + DB 08BH,055H,0FCH + DB 089H,045H,0FCH + DB 08BH,0C2H + DB 08BH,055H,0FCH + DB 089H,050H,08H + DB 08BH,045H,00H + DB 08DH,06DH,04H + call cfa_VOC+00H + call cfa__cDOES1cend+00H + call cfa__cDOES2cend+00H + DB 08BH,00H + call cfa__CONTEXT+00H + DB 08BH,055H,00H + DB 089H,010H + DB 08BH,045H,04H + DB 08DH,06DH,08H + DB 0C3H +AHEADER 1 ,'DOES>',cfa_DOESgreat + + DB 089H,045H,0FCH + DB 08DH,06DH,0FCH + DB 08DH,05H + DD cfa__cDOES1cend+00H + call cfa_COMPILEcom+00H + DB 089H,045H,0FCH + DB 08DH,06DH,0FCH + DB 08DH,05H + DD cfa__cDOES2cend+00H + call cfa_COMPILEcom+00H + DB 0C3H +AHEADER 0 ,'(DOES2)',cfa__cDOES2cend + + DB 083H,0EDH,04H + DB 089H,045H,00H + DB 05BH + DB 058H + DB 053H + DB 0C3H +AHEADER 0 ,'(DOES1)',cfa__cDOES1cend + + DB 089H,045H,0FCH + DB 058H + DB 08DH,06DH,0FCH + call cfa_DOESgreatA+00H + DB 08BH,00H + call cfa_CFL+00H + DB 03H,045H,00H + DB 0F7H,0D8H + DB 03H,045H,04H + DB 08DH,06DH,08H + call cfa_DOESgreatA+00H + DB 08BH,00H + DB 08DH,040H,01H + DB 08BH,055H,00H + DB 089H,010H + DB 08BH,045H,04H + DB 08DH,06DH,08H + DB 0C3H +AHEADER 0 ,'CREATE',cfa_CREATE + + call cfa_PARSEminusWORD+00H + call cfa_CREATED+00H + DB 0C3H +AHEADER 0 ,'CREATED',cfa_CREATED + + call cfa_SHEADER+00H + call cfa_HERE+00H + call cfa_DOESgreatA+00H + DB 08BH,055H,00H + DB 089H,010H + DB 08BH,045H,04H + DB 08DH,06DH,08H + call cfa_CREATEminusCODE+00H + call cfa_COMPILEcom+00H + DB 0C3H +AHEADER 0 ,'HEADER',cfa_HEADER + + call cfa_PARSEminusWORD+00H + call cfa_SHEADER+00H + DB 0C3H +AHEADER 0 ,'_SHEADER',cfa__SHEADER + + DB 089H,045H,0FCH + DB 033H,0C0H + DB 08DH,06DH,0FCH + call cfa_Ccom+00H + call cfa_HERE+00H + DB 089H,045H,0FCH + DB 033H,0C0H + DB 08DH,06DH,0FCH + call cfa_com+00H + DB 089H,045H,0FCH + DB 08DH,06DH,0FCH + call cfa_LASTminusCFA+00H + DB 08BH,055H,00H + DB 089H,010H + DB 08BH,045H,04H + DB 08BH,055H,0CH + DB 089H,045H,0CH + DB 08BH,045H,08H + DB 089H,055H,08H + DB 08DH,06DH,08H + call cfa_WARNING+00H + DB 08BH,00H + DB 0BH,0C0H + DB 08BH,045H,00H + DB 08DH,06DH,04H + DW 0840FH + DD cfa__SHEADER+0B0H-$-4 + DB 08BH,055H,00H + DB 089H,045H,0FCH + DB 089H,055H,0F8H + DB 089H,045H,0F4H + mov eax,[T_CURRENT-main_task+edi] + DB 08DH,06DH,0F4H + call cfa_SEARCHminusWORDLIST+00H + DB 0BH,0C0H + DB 08BH,045H,00H + DB 08DH,06DH,04H + DW 0840FH + DD cfa__SHEADER+0B0H-$-4 + DB 08BH,045H,00H + DB 08BH,055H,04H + DB 089H,045H,00H + DB 089H,055H,0FCH + DB 08DH,06DH,0FCH + call cfa_TYPE+00H + call cfa__SLITERALminusCODE+00H + DB 0DH + DB ' isn''t unique',0 + call cfa_TYPE+00H + call cfa_CR+00H + call cfa_CURRENT+00H + DB 08BH,00H + call cfa_SWORDcom+00H + call cfa_ALIGN+00H + call cfa_HERE+00H + DB 08BH,055H,00H + DB 089H,045H,00H + DB 08BH,0C2H + DB 08BH,055H,00H + DB 089H,010H + DB 08BH,045H,04H + DB 08DH,06DH,08H + DB 0C3H +AHEADER 0 ,'SHEADER',cfa_SHEADER + + call cfa__SHEADER+00H + call cfa_REVEAL+00H + DB 0C3H +AHEADER 0 ,'REVEAL',cfa_REVEAL + + call cfa_LAST+00H + DB 08BH,00H + call cfa_CURRENT+00H + DB 08BH,00H + DB 08BH,055H,00H + DB 089H,010H + DB 08BH,045H,04H + DB 08DH,06DH,08H + DB 0C3H +AHEADER 0 ,'LAST-NON',cfa_LASTminusNON + + call cfa__USERminusVALUEminusCODE+00H + DD reserve+04H + call cfa__TOUSERminusVALUEminusCODE+00H +AHEADER 0 ,'LAST-CFA',cfa_LASTminusCFA + + call cfa__USERminusCODE+00H + DD reserve+00H +AHEADER 1 ,'ABORT"',cfa_ABORTdtic + + call cfa_queCOMP+00H + call cfa_queCOMP+00H + call cfa_Cdtic+00H + DB 089H,045H,0FCH + DB 08DH,06DH,0FCH + DB 08DH,05H + DD cfa__cABORTdticcend+00H + call cfa_COMPILEcom+00H + DB 0C3H +AHEADER 1 ,'[CHAR]',cfa__xCHAR_y + + call cfa_queCOMP+00H + call cfa_PARSEminusWORD+00H + DB 08BH,045H,00H + DB 0FH,0B6H,00H + DB 08DH,06DH,04H + call cfa_LITERAL+00H + DB 0C3H +AHEADER 1 ,'."',cfa_dotdtic + + call cfa_queCOMP+00H + call cfa_Sdtic+00H + DB 089H,045H,0FCH + DB 08DH,06DH,0FCH + DB 08DH,05H + DD cfa_TYPE+00H + call cfa_COMPILEcom+00H + DB 0C3H +AHEADER 1 ,'CLITERAL',cfa_CLITERAL + + call cfa_STATE+00H + DB 08BH,00H + DB 0BH,0C0H + DB 08BH,045H,00H + DB 08DH,06DH,04H +;je cfa_CLITERAL+016H + DB 074H,05H + call cfa_CLITcom+00H + DB 0C3H +AHEADER 1 ,'C"',cfa_Cdtic + + DB 089H,045H,0FCH + DB 0B8H + DD 022H + DB 08DH,06DH,0FCH + call cfa__WORD+00H + call cfa_CLITERAL+00H + DB 0C3H +AHEADER 1 ,'S"',cfa_Sdtic + + DB 089H,045H,0FCH + DB 0B8H + DD 022H + DB 08DH,06DH,0FCH + call cfa_PARSE+00H + call cfa_SLITERAL+00H + DB 0C3H +AHEADER 0 ,'PSLITERAL',cfa_PSLITERAL + + call cfa_STATE+00H + DB 08BH,00H + DB 0BH,0C0H + DB 08BH,045H,00H + DB 08DH,06DH,04H +;je cfa_PSLITERAL+016H + DB 074H,05H + call cfa_SLITcom+00H + DB 0C3H +AHEADER 1 ,'SLITERAL',cfa_SLITERAL + + call cfa_PSLITERAL+00H + DB 0C3H +AHEADER 1 ,'2LITERAL',cfa__2LITERAL + + call cfa_STATE+00H + DB 08BH,00H + DB 0BH,0C0H + DB 08BH,045H,00H + DB 08DH,06DH,04H +;je cfa__2LITERAL+016H + DB 074H,05H + call cfa_DLITcom+00H + DB 0C3H +AHEADER 1 ,'LITERAL',cfa_LITERAL + + call cfa_STATE+00H + DB 08BH,00H + DB 0BH,0C0H + DB 08BH,045H,00H + DB 08DH,06DH,04H +;je cfa_LITERAL+016H + DB 074H,05H + call cfa_LITcom+00H + DB 0C3H +AHEADER 1 ,'['']',cfa__xtic_y + + call cfa_queCOMP+00H + call cfa_tic+00H + call cfa__xLIT_ycom+00H + DB 0C3H +AHEADER 0 ,'[LIT],',cfa__xLIT_ycom + + DB 089H,045H,0FCH + DB 08DH,06DH,0FCH + DB 08DH,05H + DD cfa_DUP+00H + call cfa_INLINEcom+00H + DB 089H,045H,0FCH + DB 0B8H + DD 058DH + DB 08DH,06DH,0FCH + call cfa_Wcom+00H + call cfa_com+00H + DB 0C3H +AHEADER 0 ,'WINDOW',cfa_WINDOW + + call cfa_draw_window+00H + call cfa_CC_LINES+00H + DB 0C3H +AHEADER 0 ,'FILE_STR',cfa_FILE_STR + + call cfa__CONSTANTminusCODE+00H + DD 0F2H +AHEADER 0 ,'.NAME',cfa_dotNAME + + DB 089H,045H,0FCH + DB 0B8H + DD 014H + DB 03H,045H,0FCH + DB 0C3H +AHEADER 0 ,'.DATA',cfa_dotDATA + + DB 089H,045H,0FCH + DB 0B8H + DD 010H + DB 03H,045H,0FCH + DB 0C3H +AHEADER 0 ,'.SIZE',cfa_dotSIZE + + DB 089H,045H,0FCH + DB 0B8H + DD 0CH + DB 03H,045H,0FCH + DB 0C3H +AHEADER 0 ,'.FIRST',cfa_dotFIRST + + DB 089H,045H,0FCH + DB 0B8H + DD 04H + DB 03H,045H,0FCH + DB 0C3H +AHEADER 0 ,'.CODE',cfa_dotCODE + + DB 0C3H +AHEADER 0 ,'EVENT-CASE',cfa_EVENTminusCASE + + DB 089H,045H,0FCH + DB 0B8H + DD 0BH + DB 0CDH,040H + DB 03DH + DD 01H + DB 08DH,06DH,0FCH +;jne cfa_EVENTminusCASE+020H + DB 075H,0CH + DB 08BH,045H,00H + DB 08DH,06DH,04H + call cfa_REDRAW+00H + DB 0C3H + DB 03DH + DD 02H +;jne cfa_EVENTminusCASE+04EH + DB 075H,027H + DB 0B8H + DD 02H + DB 0CDH,040H + DB 089H,045H,0FCH + DB 0B8H + DD 08H + DB 08BH,0C8H + DB 08BH,045H,0FCH + DB 0D3H,0E8H + call cfa_and_KEY+00H + DB 08BH,055H,00H + DB 088H,010H + DB 08BH,045H,04H + DB 08DH,06DH,08H + DB 0C3H + DB 03DH + DD 03H + DB 08BH,045H,00H + DB 08DH,06DH,04H +;jne cfa_EVENTminusCASE+069H + DB 075H,0EH + DB 089H,045H,0FCH + DB 0B8H + DD 0FFFFFFFFH + DB 0CDH,040H + DB 08DH,06DH,0FCH + DB 0C3H + DB 0C3H +AHEADER 0 ,'REDRAW',cfa_REDRAW + + call cfa_draw_window+00H + call cfa_DRAW_LINS+00H + call cfa_CORSOR_DROW+00H + DB 0C3H +AHEADER 0 ,'CORSOR_DROW',cfa_CORSOR_DROW + + DB 089H,045H,0FCH + DB 033H,0C0H + DB 08DH,06DH,0FCH + call cfa_LAST_CUR+00H + DB 08BH,050H,04H + DB 089H,055H,0FCH + DB 08BH,00H + DB 089H,045H,0F8H + DB 0B8H + DD 026H + DB 08BH,055H,00H + DB 08BH,04DH,0FCH + DB 08BH,05DH,0F8H + DB 0CDH,040H + DB 0B8H + DD 0FF00FFH + DB 08DH,06DH,04H + call cfa_and_ATminusXY+00H + DB 0FH,0B7H,00H + DB 089H,045H,0FCH + DB 0B8H + DD 0DH + DB 0F7H,06DH,0FCH + DB 089H,045H,0FCH + DB 0B8H + DD 021H + DB 03H,045H,0FCH + DB 089H,045H,0FCH + DB 089H,045H,0F8H + DB 0B8H + DD 010H + DB 08BH,0C8H + DB 08BH,045H,0F8H + DB 0D3H,0E0H + DB 03H,045H,0FCH + call cfa_and_ATminusXY+00H + DB 0FH,0B7H,040H,02H + DB 089H,045H,0FCH + DB 0B8H + DD 06H + DB 0F7H,06DH,0FCH + DB 089H,045H,0FCH + DB 0B8H + DD 06H + DB 03H,045H,0FCH + DB 089H,045H,0FCH + DB 08DH,040H,06H + DB 089H,045H,0F8H + DB 0B8H + DD 010H + DB 08BH,0C8H + DB 08BH,045H,0F8H + DB 0D3H,0E0H + DB 03H,045H,0FCH + DB 08BH,055H,00H + DB 089H,045H,0FCH + DB 089H,055H,0F8H + DB 08DH,06DH,0F8H + call cfa_LAST_CUR+00H + call cfa__2save+00H + DB 089H,045H,0FCH + DB 0B8H + DD 026H + DB 08BH,055H,04H + DB 08BH,04DH,00H + DB 08BH,05DH,0FCH + DB 0CDH,040H + DB 08BH,045H,08H + DB 08DH,06DH,0CH + DB 0C3H +AHEADER 0 ,'LAST_CUR',cfa_LAST_CUR + + call cfa__CREATEminusCODE+00H + DD 00H + DB 00H + DB 00H,00H,00H +AHEADER 0 ,'_PAGE-UP',cfa__PAGEminusUP + + call cfa_draw_window+00H + call cfa___PAGEminusUP+00H + call cfa_DRAW_LINS+00H + DB 0C3H +AHEADER 0 ,'DRAW_LINS',cfa_DRAW_LINS + + DB 089H,045H,0FCH + DB 0B8H + DD cfa_PAGEminusUP+00H + DB 08BH,040H,05H + DB 089H,045H,0F8H + DB 0B8H + DD cfa_NOOP+00H + DB 08DH,06DH,0F8H + call cfa_PAGEminusUP+09H + call cfa_ATminusXYque+00H + DB 089H,045H,0FCH + DB 0C7H,045H,0F8H + DD 00H + DB 033H,0C0H + DB 08DH,06DH,0F8H + call cfa_ATminusXY+00H + call cfa_SCR_BUF+00H + call cfa_SCR_WIDTH+00H + call cfa_SCR_HEIGHT+00H + DB 0F7H,06DH,00H + DB 03H,045H,04H + DB 08BH,055H,04H + DB 089H,045H,04H + DB 08BH,0C2H + DB 0BAH + DD 080000000H + DB 02BH,055H,04H + DB 08DH,01CH,02H + DB 08BH,045H,08H + DB 08DH,06DH,0CH + DB 068H + DD cfa_DRAW_LINS+0A0H + DB 052H + DB 053H + DB 090H + DB 090H + DB 090H + DB 090H + DB 090H + DB 090H + DB 090H + DB 090H + DB 090H + DB 090H + DB 090H + DB 090H + DB 089H,045H,0FCH + DB 08BH,04H,024H + DB 02BH,044H,024H,04H + DB 08DH,06DH,0FCH + call cfa_SCR_WIDTH+00H + call cfa_SCR_TYPE+00H + call cfa_SCR_WIDTH+00H + DB 01H,04H,024H + DB 08BH,045H,00H + DB 08DH,06DH,04H +;jno cfa_DRAW_LINS+075H + DB 071H,0D9H + DB 08DH,064H,024H,0CH + call cfa_ATminusXY+00H + call cfa_PAGEminusUP+09H + DB 0C3H +AHEADER 0 ,'SCR_TYPE',cfa_SCR_TYPE + + DB 08BH,055H,00H + DB 089H,055H,0FCH + DB 089H,045H,00H + DB 08BH,055H,0FCH + DB 089H,045H,0FCH + DB 08BH,0C2H + DB 08DH,06DH,0FCH + call cfa_and_ATRIB+00H + DB 08BH,00H + call cfa_and_ATminusXY+00H + DB 0FH,0B7H,040H,02H + DB 089H,045H,0FCH + DB 0B8H + DD 060000H + DB 0F7H,06DH,0FCH + call cfa_and_ATminusXY+00H + DB 0FH,0B7H,00H + DB 089H,045H,0FCH + DB 0B8H + DD 0DH + DB 0F7H,06DH,0FCH + DB 03H,045H,00H + DB 08DH,080H + DD 060018H + DB 089H,045H,00H + DB 0B8H + DD 04H + call cfa_SYS5+00H + DB 08BH,045H,00H + DB 08DH,06DH,04H + call cfa_quePAGEminusUP+00H + DB 0C3H +AHEADER 0 ,'SCR_CR',cfa_SCR_CR + + call cfa_and_ATminusXY+00H + DB 08BH,00H + DB 089H,045H,0FCH + DB 0B8H + DD 0FFFFH + DB 023H,045H,0FCH + DB 08DH,040H,01H + call cfa_and_ATminusXY+00H + DB 08BH,055H,00H + DB 089H,010H + DB 033H,0C0H + DB 08DH,06DH,04H + call cfa_quePAGEminusUP+00H + DB 0C3H +AHEADER 0 ,'?PAGE-UP',cfa_quePAGEminusUP + + call cfa_and_ATminusXY+00H + DB 08DH,040H,02H + DB 0FH,0B7H,00H + DB 03H,045H,00H + DB 08DH,06DH,04H + call cfa_SCR_WIDTH+00H + DB 08BH,0C8H + DB 08BH,045H,00H + DB 099H + DB 0F7H,0F9H + DB 089H,055H,00H + DB 08BH,055H,00H + DB 089H,045H,00H + DB 08BH,0C2H + call cfa_and_ATminusXY+00H + DB 08DH,040H,02H + call cfa_Wsave+00H + call cfa_and_ATminusXY+00H + DB 0FH,0B7H,00H + DB 03H,045H,00H + DB 08DH,06DH,04H + call cfa_SCR_HEIGHT+00H + DB 08BH,0C8H + DB 08BH,045H,00H + DB 099H + DB 0F7H,0F9H + DB 0BH,0C0H + DB 08BH,0C2H + DB 08DH,06DH,04H +;je cfa_quePAGEminusUP+06DH + DB 074H,013H + call cfa_PAGEminusUP+00H + DB 08BH,045H,00H + DB 08DH,06DH,04H + call cfa_SCR_HEIGHT+00H + DB 08DH,040H,0FFH + call cfa_and_ATminusXY+00H + call cfa_Wsave+00H + DB 0C3H +AHEADER 0 ,'PAGE-UP',cfa_PAGEminusUP + + call cfa__VECTminusCODE+00H + DD cfa__PAGEminusUP+00H + call cfa__TOVALUEminusCODE+00H +AHEADER 0 ,'__PAGE-UP',cfa___PAGEminusUP + + call cfa_SCR_BUF+00H + call cfa_SCR_WIDTH+00H + DB 03H,045H,00H + DB 08DH,06DH,04H + call cfa_SCR_BUF+00H + call cfa_SCR_WIDTH+00H + call cfa_SCR_HEIGHT+00H + DB 0F7H,06DH,00H + DB 08DH,06DH,04H + call cfa_CMOVE+00H + call cfa_SCR_BUF+00H + call cfa_SCR_WIDTH+00H + call cfa_SCR_HEIGHT+00H + DB 08DH,040H,0FFH + DB 0F7H,06DH,00H + DB 03H,045H,04H + DB 08DH,06DH,08H + call cfa_SCR_WIDTH+00H + call cfa_BLANK+00H + call cfa_ATminusXYque+00H + DB 08DH,040H,0FFH + DB 089H,045H,0FCH + DB 033H,0C0H + DB 08DH,06DH,0FCH + call cfa_MAX+00H + call cfa_ATminusXY+00H + DB 0C3H +AHEADER 0 ,'AT-XY?',cfa_ATminusXYque + + call cfa_and_ATminusXY+00H + DB 08DH,040H,02H + DB 0FH,0B7H,00H + call cfa_and_ATminusXY+00H + DB 0FH,0B7H,00H + DB 0C3H +AHEADER 0 ,'AT-XY',cfa_ATminusXY + + DB 08BH,055H,00H + DB 089H,045H,00H + DB 089H,055H,0FCH + DB 0B8H + DD 010H + DB 08BH,0C8H + DB 08BH,045H,0FCH + DB 0D3H,0E0H + DB 03H,045H,00H + DB 08DH,06DH,04H + call cfa_and_ATminusXY+00H + DB 08BH,055H,00H + DB 089H,010H + DB 08BH,045H,04H + DB 08DH,06DH,08H + DB 0C3H +AHEADER 0 ,'SCR_BUF',cfa_SCR_BUF + + call cfa__CREATEminusCODE+00H + DD 00H + DB 00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H,00H,00H,00H,00H,00H + DB 00H,00H,00H +AHEADER 0 ,'>PIC',cfa_greatPIC + + call cfa__CONSTANTminusCODE+00H + DD 011000DH + call cfa__TOVALUEminusCODE+00H +AHEADER 0 ,'&ATRIB',cfa_and_ATRIB + + call cfa__CREATEminusCODE+00H + DD 0FFFFH +AHEADER 0 ,'&KEY',cfa_and_KEY + + call cfa__CREATEminusCODE+00H + DD 00H +AHEADER 0 ,'&AT-XY',cfa_and_ATminusXY + + call cfa__CREATEminusCODE+00H + DD 00H + DB 00H + DB 00H,00H,00H +AHEADER 0 ,'SCR_HEIGHT',cfa_SCR_HEIGHT + + call cfa__CONSTANTminusCODE+00H + DD 019H + call cfa__TOVALUEminusCODE+00H +AHEADER 0 ,'SCR_WIDTH-S',cfa_SCR_WIDTHminusS + + call cfa__CONSTANTminusCODE+00H + DD 03CH + call cfa__TOVALUEminusCODE+00H +AHEADER 0 ,'SCR_WIDTH',cfa_SCR_WIDTH + + call cfa__CONSTANTminusCODE+00H + DD 050H + call cfa__TOVALUEminusCODE+00H +AHEADER 0 ,'SYSV',cfa_SYSV + + DB 08DH,06DH,0FCH + DB 089H,045H,00H + DB 0B8H + DD cfa_reg_struc+00H + DB 057H + DB 08BH,078H,014H + DB 08BH,070H,010H + DB 08BH,050H,0CH + DB 08BH,048H,08H + DB 08BH,058H,04H + DB 08BH,00H + DB 0CDH,040H + DB 05FH + DB 0C3H +AHEADER 0 ,'reg_struc',cfa_reg_struc + + call cfa__CREATEminusCODE+00H + DD 00H +AHEADER 0 ,'SYS6',cfa_SYS6 + + DB 057H + DB 08BH,07DH,010H + DB 08BH,075H,0CH + DB 08BH,055H,08H + DB 08BH,04DH,04H + DB 08BH,05DH,00H + DB 0CDH,040H + DB 08DH,06DH,014H + DB 05FH + DB 0C3H +AHEADER 0 ,'SYS5',cfa_SYS5 + + DB 08BH,075H,0CH + DB 08BH,055H,08H + DB 08BH,04DH,04H + DB 08BH,05DH,00H + DB 0CDH,040H + DB 08DH,06DH,010H + DB 0C3H +AHEADER 0 ,'SYS4',cfa_SYS4 + + DB 08BH,055H,08H + DB 08BH,04DH,04H + DB 08BH,05DH,00H + DB 0CDH,040H + DB 08DH,06DH,0CH + DB 0C3H +AHEADER 0 ,'SYS3',cfa_SYS3 + + DB 08BH,04DH,04H + DB 08BH,05DH,00H + DB 0CDH,040H + DB 08DH,06DH,08H + DB 0C3H +AHEADER 0 ,'SYS2',cfa_SYS2 + + DB 08BH,05DH,00H + DB 0CDH,040H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'SYS1',cfa_SYS1 + + DB 0CDH,040H + DB 0C3H +AHEADER 0 ,'R/W',cfa_R_divW + + call cfa__CONSTANTminusCODE+00H + DD 0C0000000H +AHEADER 0 ,'W/O',cfa_W_divO + + call cfa__CONSTANTminusCODE+00H + DD 040000000H +AHEADER 0 ,'R/O',cfa_R_divO + + call cfa__CONSTANTminusCODE+00H + DD 080000000H +AHEADER 0 ,'OFF',cfa_OFF + + DB 0C7H,00H + DD 00H + DB 08BH,045H,00H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'ON',cfa_ON + + call cfa_TRUE+00H + DB 08BH,055H,00H + DB 089H,045H,00H + DB 08BH,0C2H + DB 08BH,055H,00H + DB 089H,010H + DB 08BH,045H,04H + DB 08DH,06DH,08H + DB 0C3H +AHEADER 0 ,'2NIP',cfa__2NIP + + call cfa__2SWAP+00H + DB 08BH,045H,04H + DB 08DH,06DH,08H + DB 0C3H +AHEADER 0 ,'U/MOD',cfa_U_divMOD + + DB 089H,045H,0FCH + DB 033H,0C0H + DB 08BH,055H,0FCH + DB 089H,045H,0FCH + DB 08BH,0C2H + DB 08DH,06DH,0FCH + call cfa_UM_divMOD+00H + DB 0C3H +AHEADER 0 ,'2CONSTANT',cfa__2CONSTANT + + call cfa_CREATE+00H + call cfa_HERE+00H + call cfa__2save+00H + DB 089H,045H,0FCH + DB 0B8H + DD 08H + DB 08DH,06DH,0FCH + call cfa_ALLOT+00H + call cfa__cDOES1cend+00H + call cfa__cDOES2cend+00H + DB 08BH,050H,04H + DB 089H,055H,0FCH + DB 08BH,00H + DB 08DH,06DH,0FCH + DB 0C3H +AHEADER 1 ,'>R',cfa_greatR + + DB 089H,045H,0FCH + DB 0B8H + DD cfa_CminusgreatR+00H + DB 08DH,06DH,0FCH + call cfa_INLINEcom+00H + DB 0C3H +AHEADER 1 ,'R>',cfa_Rgreat + + DB 089H,045H,0FCH + DB 0B8H + DD cfa_CminusRgreat+00H + DB 08DH,06DH,0FCH + call cfa_INLINEcom+00H + DB 0C3H +AHEADER 0 ,'ASCIIZ>',cfa_ASCIIZgreat + + call cfa_ZCOUNT+00H + DB 0C3H +AHEADER 0 ,'0MAX',cfa__0MAX + + DB 089H,045H,0FCH + DB 033H,0C0H + DB 08DH,06DH,0FCH + call cfa_MAX+00H + DB 0C3H +AHEADER 0 ,'ASCII-Z',cfa_ASCIIminusZ + + DB 050H + call cfa_dolsave+00H + DB 089H,045H,0FCH + DB 058H + DB 08DH,050H,01H + DB 089H,055H,0F8H + DB 0FH,0B6H,00H + DB 03H,045H,0F8H + DB 089H,045H,0F4H + DB 033H,0C0H + DB 08BH,055H,0F4H + DB 089H,045H,0F4H + DB 08BH,0C2H + DB 08BH,055H,0F4H + DB 088H,010H + DB 08BH,045H,0F8H + DB 08DH,06DH,0FCH + DB 0C3H +AHEADER 0 ,'$!',cfa_dolsave + + call cfa_PLACE+00H + DB 0C3H +AHEADER 0 ,'DOES-CODE',cfa_DOESminusCODE + + call cfa__CONSTANTminusCODE+00H + DD 00H + call cfa__TOVALUEminusCODE+00H +AHEADER 0 ,'STR>R',cfa_STRgreatR + + DB 0C3H +AHEADER 0 ,'C+PLACE',cfa_CplusPLACE + + DB 089H,045H,0FCH + DB 0FFH,00H + DB 08BH,045H,0FCH + DB 08DH,050H,01H + DB 089H,055H,0FCH + DB 0FH,0B6H,00H + DB 03H,045H,0FCH + DB 08DH,040H,0FFH + DB 08BH,055H,00H + DB 088H,010H + DB 08BH,045H,04H + DB 08DH,06DH,08H + DB 0C3H +AHEADER 0 ,'+PLACE',cfa_plusPLACE + + DB 050H + DB 08BH,045H,00H + DB 08DH,06DH,04H + call cfa_dticCLIPdtic+00H + call cfa_MAXCOUNTED+00H + DB 089H,045H,0FCH + DB 08BH,04H,024H + DB 0FH,0B6H,00H + DB 0F7H,0D8H + DB 03H,045H,0FCH + call cfa_MIN+00H + DB 089H,045H,0FCH + DB 058H + DB 08BH,055H,0FCH + DB 089H,045H,0F8H + DB 089H,055H,0F4H + DB 08DH,06DH,0F4H + call cfa__2greatR+00H + DB 08DH,050H,01H + DB 089H,055H,0FCH + DB 0FH,0B6H,00H + DB 03H,045H,0FCH + DB 08BH,055H,00H + DB 089H,045H,00H + DB 08BH,0C2H + call cfa_MOVE+00H + call cfa__2Rgreat+00H + DB 08BH,055H,00H + DB 01H,010H + DB 08BH,045H,04H + DB 08DH,06DH,08H + DB 0C3H +AHEADER 0 ,'PLACE',cfa_PLACE + + DB 08BH,055H,00H + DB 089H,045H,00H + DB 08BH,0C2H + call cfa_dticCLIPdtic+00H + DB 08BH,055H,00H + DB 089H,045H,00H + DB 08BH,0C2H + DB 08BH,055H,00H + DB 089H,045H,0FCH + DB 089H,055H,0F8H + DB 08BH,055H,0F8H + DB 088H,010H + DB 08BH,045H,0FCH + DB 08DH,040H,01H + DB 08BH,055H,00H + DB 089H,045H,00H + DB 08BH,0C2H + call cfa_MOVE+00H + DB 0C3H +AHEADER 0 ,'"CLIP"',cfa_dticCLIPdtic + + call cfa_MAXCOUNTED+00H + DB 023H,045H,00H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'MAXCOUNTED',cfa_MAXCOUNTED + + call cfa__CONSTANTminusCODE+00H + DD 0FFH +AHEADER 0 ,'DABS',cfa_DABS + + DB 0BH,0C0H +;jge cfa_DABS+011H + DB 07DH,0DH + DB 08BH,055H,00H + DB 0F7H,0D8H + DB 0F7H,0DAH + DB 083H,0D8H,00H + DB 089H,055H,00H + DB 0C3H +AHEADER 0 ,'BLANK',cfa_BLANK + + call cfa_BL+00H + call cfa_FILL+00H + DB 0C3H +AHEADER 0 ,'ERASE',cfa_ERASE + + DB 089H,045H,0FCH + DB 033H,0C0H + DB 08DH,06DH,0FCH + call cfa_FILL+00H + DB 0C3H +AHEADER 0 ,'MOVE',cfa_MOVE + + DB 050H + DB 08BH,045H,00H + DB 08BH,055H,04H + DB 089H,045H,00H + DB 089H,055H,0FCH + DB 08BH,055H,0FCH + DB 089H,045H,0FCH + DB 08BH,0C2H + DB 089H,045H,0F8H + DB 08BH,04H,024H + DB 03H,045H,0F8H + DB 03BH,045H,0FCH + DB 08BH,045H,00H + DB 08DH,06DH,04H + DW 0860FH + DD cfa_MOVE+052H-$-4 + DB 03BH,045H,00H + DW 0860FH + DD cfa_MOVE+044H-$-4 + DB 089H,045H,0FCH + DB 058H + DB 08DH,06DH,0FCH + call cfa_CMOVEgreat+00H + DB 0EBH,0CH + DB 089H,045H,0FCH + DB 058H + DB 08DH,06DH,0FCH + call cfa_CMOVE+00H + DB 0EBH,0CH + DB 089H,045H,0FCH + DB 058H + DB 08DH,06DH,0FCH + call cfa_CMOVE+00H + DB 0C3H +AHEADER 1 ,'CHARS',cfa_CHARS + + DB 0C3H +AHEADER 0 ,'CHAR+',cfa_CHARplus + + DB 08DH,040H,01H + DB 0C3H +AHEADER 0 ,'*/',cfa__mul_div + + call cfa__mul_divMOD+00H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'CELL',cfa_CELL + + call cfa__CONSTANTminusCODE+00H + DD 04H +AHEADER 0 ,'TRUE',cfa_TRUE + + call cfa__CONSTANTminusCODE+00H + DD 0FFFFFFFFH +AHEADER 0 ,'FALSE',cfa_FALSE + + call cfa__CONSTANTminusCODE+00H + DD 00H +AHEADER 0 ,'TRAP-CODE',cfa_TRAPminusCODE + + DB 05AH + DB 05EH + DB 0BH,0F6H + DW 0840FH + DD cfa_TRAPminusCODE+022H-$-4 + DB 08DH,034H,0B5H + DD 00H + DB 08BH,0CEH + DB 08BH,05CH,034H,0FCH + DB 089H,05CH,035H,0FCH + DB 083H,0EEH,04H +;jne cfa_TRAPminusCODE+013H + DB 075H,0F3H + DB 03H,0E1H + DB 0FFH,0E2H +AHEADER 0 ,'TIMER@',cfa_TIMER_ld + + DB 089H,045H,0FCH + DB 0FH,031H + DB 089H,055H,0F8H + DB 08DH,06DH,0F8H + DB 087H,045H,00H + DB 0C3H +AHEADER 0 ,'(LocalsExit)',cfa__cLocalsExitcend + + DB 05BH + DB 03H,0E3H + DB 0C3H +AHEADER 0 ,'RFREE',cfa_RFREE + + DB 05AH + DB 08DH,024H,084H + DB 08BH,045H,00H + DB 08DH,06DH,04H + DB 0FFH,0E2H +AHEADER 0 ,'(RALLOT)',cfa__cRALLOTcend + + DB 05AH + DB 08BH,0C8H + DB 033H,0C0H + DB 050H + DB 049H +;jne cfa__cRALLOTcend+05H + DB 075H,0FCH + DB 08BH,045H,00H + DB 08DH,06DH,04H + DB 0FFH,0E2H +AHEADER 0 ,'RALLOT',cfa_RALLOT + + DB 05AH + DB 08BH,0C8H + DB 033H,0C0H + DB 050H + DB 049H +;jne cfa_RALLOT+05H + DB 075H,0FCH + DB 08BH,0C4H + DB 0FFH,0E2H +AHEADER 0 ,'RP+!',cfa_RPplussave + + DB 08BH,05DH,00H + DB 089H,05CH,04H,04H + DB 08DH,06DH,08H + DB 08BH,045H,0FCH + DB 0C3H +AHEADER 0 ,'RP+',cfa_RPplus + + DB 08DH,044H,04H,04H + DB 0C3H +AHEADER 0 ,'RP+@',cfa_RPplus_ld + + DB 08BH,044H,04H,04H + DB 0C3H +AHEADER 0 ,'NRCOPY',cfa_NRCOPY + + DB 08BH,0C8H + DB 08DH,0CH,08DH + DD 00H + DB 05AH + DB 0E3H,0BH + DB 08BH,0F1H + DB 0FFH,074H,035H,0FCH + DB 083H,0EEH,04H +;jne cfa_NRCOPY+0EH + DB 075H,0F7H + DB 050H + DB 0FFH,0E2H +AHEADER 0 ,'N>R',cfa_NgreatR + + DB 08DH,06DH,0FCH + DB 089H,045H,00H + DB 08DH,04H,085H + DD 04H + DB 05AH + DB 08BH,0F0H + DB 0FFH,074H,02EH,0FCH + DB 083H,0EEH,04H +;jne cfa_NgreatR+010H + DB 075H,0F7H + DB 03H,0E8H + DB 08BH,045H,00H + DB 08DH,06DH,04H + DB 0FFH,0E2H +AHEADER 0 ,'NR>',cfa_NRgreat + + DB 05AH + DB 08DH,06DH,0FCH + DB 089H,045H,00H + DB 058H + DB 0BH,0C0H + DW 0850FH + DD cfa_NRgreat+012H-$-4 + DB 0FFH,0E2H + DB 08DH,04H,085H + DD 00H + DB 08BH,0F0H + DB 08BH,0DDH + DB 02BH,0DEH + DB 08FH,03H + DB 083H,0EEH,04H +;jne cfa_NRgreat+01BH + DB 075H,0F5H + DB 02BH,0E8H + DB 0C1H,0F8H,02H + DB 0FFH,0E2H +AHEADER 0 ,'DRMOVE',cfa_DRMOVE + + DB 05AH + DB 08BH,0F0H + DB 0FFH,074H,02EH,0FCH + DB 083H,0EEH,04H +;jne cfa_DRMOVE+03H + DB 075H,0F7H + DB 03H,0E8H + DB 08BH,045H,00H + DB 08DH,06DH,04H + DB 0FFH,0E2H +AHEADER 0 ,'@EXECUTE',cfa__ldEXECUTE + + DB 08BH,0D8H + DB 08BH,045H,00H + DB 08DH,06DH,04H + DB 0FFH,023H +AHEADER 0 ,'EXECUTE',cfa_EXECUTE + + DB 08BH,0D8H + DB 08BH,045H,00H + DB 08DH,06DH,04H + DB 0FFH,0E3H +AHEADER 0 ,'C-EXECUTE',cfa_CminusEXECUTE + + DB 08BH,0D0H + DB 08BH,045H,00H + DB 08DH,06DH,04H + DB 0FFH,0D2H + DB 0C3H +AHEADER 0 ,'C-3RDROP',cfa_Cminus3RDROP + + DB 083H,0C4H,0CH + DB 0C3H +AHEADER 0 ,'C-2RDROP',cfa_Cminus2RDROP + + DB 083H,0C4H,08H + DB 0C3H +AHEADER 0 ,'C-RDROP',cfa_CminusRDROP + + DB 083H,0C4H,04H + DB 0C3H +AHEADER 0 ,'C-R>',cfa_CminusRgreat + + DB 08DH,06DH,0FCH + DB 089H,045H,00H + DB 058H + DB 0C3H +AHEADER 0 ,'C->R',cfa_CminusgreatR + + DB 050H + DB 08BH,045H,00H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'C-I',cfa_CminusI + + DB 08DH,06DH,0FCH + DB 089H,045H,00H + DB 08BH,04H,024H + DB 02BH,044H,024H,04H + DB 0C3H +AHEADER 0 ,'ADD[ESP],EAX',cfa_ADD_xESP_ycomEAX + + DB 01H,04H,024H + DB 0C3H +AHEADER 0 ,'C-?DO',cfa_CminusqueDO + + DB 03BH,045H,0F8H +;jne cfa_CminusqueDO+0AH + DB 075H,05H + DB 08BH,045H,0FCH + DB 0FFH,0E3H + DB 053H + DB 0BBH + DD 080000000H + DB 02BH,05DH,0F8H + DB 053H + DB 03H,0D8H + DB 053H + DB 08BH,045H,0FCH + DB 0C3H +AHEADER 0 ,'C-DO',cfa_CminusDO + + DB 08DH,06DH,08H + DB 0BAH + DD 080000000H + DB 02BH,055H,0F8H + DB 08DH,01CH,02H + DB 08BH,045H,0FCH + DB 08BH,0D2H + DB 0C3H +AHEADER 0 ,'C-J',cfa_CminusJ + + DB 08DH,06DH,0FCH + DB 089H,045H,00H + DB 08BH,044H,024H,0CH + DB 02BH,044H,024H,010H + DB 0C3H +AHEADER 0 ,'TlsIndex@',cfa_TlsIndex_ld + + DB 08DH,06DH,0FCH + DB 089H,045H,00H + DB 08BH,0C7H + DB 0C3H +AHEADER 0 ,'TlsIndex!',cfa_TlsIndexsave + + DB 08BH,0F8H + DB 08BH,045H,00H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'RP@',cfa_RP_ld + + DB 08DH,06DH,0FCH + DB 089H,045H,00H + DB 08DH,044H,024H,04H + DB 0C3H +AHEADER 0 ,'SP@',cfa_SP_ld + + DB 08DH,06DH,0FCH + DB 089H,045H,00H + DB 08BH,0C5H + DB 0C3H +AHEADER 0 ,'RP!',cfa_RPsave + + DB 05BH + DB 08BH,0E0H + DB 08BH,045H,00H + DB 08DH,06DH,04H + DB 0FFH,0E3H +AHEADER 0 ,'SP!',cfa_SPsave + + DB 08DH,068H,04H + DB 08BH,045H,0FCH + DB 0C3H +AHEADER 0 ,'ZCOUNT',cfa_ZCOUNT + + DB 08DH,06DH,0FCH + DB 089H,045H,00H + DB 033H,0DBH + DB 08AH,018H + DB 040H + DB 0AH,0DBH +;jne cfa_ZCOUNT+08H + DB 075H,0F9H + DB 048H + DB 02BH,045H,00H + DB 0C3H +AHEADER 0 ,'FILL',cfa_FILL + + DB 08BH,0D7H + DB 08BH,04DH,00H + DB 08BH,07DH,04H + DB 0FCH + DB 0F3H,0AAH + DB 08BH,0FAH + DB 08DH,06DH,0CH + DB 08BH,045H,0FCH + DB 0C3H +AHEADER 0 ,'CMOVE>',cfa_CMOVEgreat + + DB 08BH,0D7H + DB 08BH,0C8H + DB 08BH,07DH,00H + DB 08BH,075H,04H + DB 0FDH + DB 03H,0F9H + DB 04FH + DB 03H,0F1H + DB 04EH + DB 0F3H,0A4H + DB 08BH,0FAH + DB 08DH,06DH,0CH + DB 08BH,045H,0FCH + DB 0C3H +AHEADER 0 ,'QCMOVE',cfa_QCMOVE + + call cfa_CMOVE+00H + DB 0C3H +AHEADER 0 ,'CMOVE',cfa_CMOVE + + DB 08BH,0D7H + DB 08BH,0C8H + DB 08BH,07DH,00H + DB 08BH,075H,04H + DB 0FCH + DB 0F3H,0A4H + DB 08DH,06DH,0CH + DB 08BH,045H,0FCH + DB 08BH,0FAH + DB 0C3H +AHEADER 0 ,'SEARCH',cfa_SEARCH + + DB 08DH,06DH,0FCH + DB 089H,045H,00H + DB 057H + DB 0FCH + DB 08BH,05DH,00H + DB 0BH,0DBH +;je cfa_SEARCH+044H + DB 074H,035H + DB 08BH,055H,08H + DB 08BH,07DH,0CH + DB 03H,0D7H + DB 08BH,075H,04H + DB 0ACH + DB 08BH,0CAH + DB 02BH,0CFH + DB 0E3H,02AH + DB 0F2H + DB 0AEH +;jne cfa_SEARCH+04BH + DB 075H,026H + DB 083H,0FBH,01H +;je cfa_SEARCH+03BH + DB 074H,011H + DB 08BH,0CBH + DB 049H + DB 08BH,0C2H + DB 02BH,0C7H + DB 03BH,0C1H +;jb cfa_SEARCH+04BH + DB 072H,016H + DB 057H + DB 0F3H,0A6H + DB 05FH +;jne cfa_SEARCH+017H + DB 075H,0DCH + DB 04FH + DB 02BH,0D7H + DB 089H,07DH,0CH + DB 089H,055H,08H + DB 0B8H + DD 0FFFFFFFFH + DB 0EBH,02H + DB 033H,0C0H + DB 08DH,06DH,04H + DB 089H,045H,00H + DB 05FH + DB 08BH,045H,00H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'COMPARE',cfa_COMPARE + + DB 057H + DB 08BH,0C8H + DB 02BH,0C0H + DB 03BH,04DH,04H +;je cfa_COMPARE+013H + DB 074H,09H +;jae cfa_COMPARE+0FH + DB 073H,03H + DB 040H + DB 0EBH,04H + DB 048H + DB 08BH,04DH,04H + DB 08BH,075H,08H + DB 08BH,07DH,00H + DB 0F3H,0A6H +;je cfa_COMPARE+02BH + DB 074H,0EH +;jb cfa_COMPARE+026H + DB 072H,07H + DB 0B8H + DD 01H + DB 0EBH,05H + DB 0B8H + DD 0FFFFFFFFH + DB 08DH,06DH,0CH + DB 05FH + DB 0C3H +AHEADER 0 ,'-TRAILING',cfa_minusTRAILING + + DB 057H + DB 08BH,0C8H + DB 0E3H,011H + DB 08BH,07DH,00H + DB 03H,0F9H + DB 04FH + DB 0B0H,020H + DB 0FDH + DB 0F3H,0AEH +;je cfa_minusTRAILING+013H + DB 074H,01H + DB 041H + DB 0FCH + DB 08BH,0C1H + DB 05FH + DB 0C3H +AHEADER 0 ,'D2/',cfa_D2_div + + DB 0D1H,0F8H + DB 0D1H,05DH,00H + DB 0C3H +AHEADER 0 ,'D2*',cfa_D2_mul + + DB 0D1H,065H,00H + DB 0D1H,0D0H + DB 0C3H +AHEADER 0 ,'D=',cfa_D_equ + + DB 08BH,055H,00H + DB 033H,045H,04H + DB 033H,055H,08H + DB 0BH,0C2H + DB 083H,0E8H,01H + DB 01BH,0C0H + DB 08DH,06DH,0CH + DB 0C3H +AHEADER 0 ,'D0=',cfa_D0_equ + + DB 0BH,045H,00H + DB 083H,0E8H,01H + DB 01BH,0C0H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'0<>',cfa__0lessgreat + + DB 0F7H,0D8H + DB 01BH,0C0H + DB 0C3H +AHEADER 0 ,'0=',cfa__0_equ + + DB 083H,0E8H,01H + DB 01BH,0C0H + DB 0C3H +AHEADER 0 ,'0<',cfa__0less + + DB 0C1H,0F8H,01FH + DB 0C3H +AHEADER 0 ,'U>',cfa_Ugreat + + DB 03BH,045H,00H + DB 01BH,0C0H + DB 083H,0C5H,04H + DB 0C3H +AHEADER 0 ,'U<',cfa_Uless + + DB 039H,045H,00H + DB 01BH,0C0H + DB 083H,0C5H,04H + DB 0C3H +AHEADER 0 ,'D>',cfa_Dgreat + + DB 08BH,05DH,00H + DB 03BH,05DH,08H + DB 01BH,045H,04H + DB 0C1H,0F8H,01FH + DB 083H,0C5H,0CH + DB 0C3H +AHEADER 0 ,'D<',cfa_Dless + + DB 08BH,05DH,00H + DB 039H,05DH,08H + DB 019H,045H,04H + DB 0B8H + DD 00H +;jge cfa_Dless+011H + DB 07DH,01H + DB 048H + DB 083H,0C5H,0CH + DB 0C3H +AHEADER 0 ,'WITHIN',cfa_WITHIN + + DB 08BH,05DH,04H + DB 02BH,045H,00H + DB 02BH,05DH,00H + DB 02BH,0D8H + DB 01BH,0C0H + DB 083H,0C5H,08H + DB 0C3H +AHEADER 0 ,'>',cfa_great + + DB 03BH,045H,00H + DB 0FH,09DH,0C0H + DB 083H,0E0H,01H + DB 048H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'<',cfa_less + + DB 039H,045H,00H + DB 0FH,09DH,0C0H + DB 083H,0E0H,01H + DB 048H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'<>',cfa_lessgreat + + DB 033H,045H,00H + DB 0F7H,0D8H + DB 01BH,0C0H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'=',cfa__equ + + DB 033H,045H,00H + DB 083H,0E8H,01H + DB 01BH,0C0H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'FM/MOD',cfa_FM_divMOD + + DB 08BH,0C8H + DB 08BH,055H,00H + DB 08BH,0DAH + DB 08BH,045H,04H + DB 0F7H,0F9H + DB 085H,0D2H +;je cfa_FM_divMOD+017H + DB 074H,07H + DB 033H,0D9H +;jns cfa_FM_divMOD+017H + DB 079H,03H + DB 048H + DB 03H,0D1H + DB 08DH,06DH,04H + DB 089H,055H,00H + DB 0C3H +AHEADER 0 ,'SM/REM',cfa_SM_divREM + + DB 08BH,0D8H + DB 08BH,055H,00H + DB 08BH,045H,04H + DB 0F7H,0FBH + DB 08DH,06DH,04H + DB 089H,055H,00H + DB 0C3H +AHEADER 0 ,'RSHIFT',cfa_RSHIFT + + DB 08BH,0C8H + DB 08BH,045H,00H + DB 0D3H,0E8H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'LSHIFT',cfa_LSHIFT + + DB 08BH,0C8H + DB 08BH,045H,00H + DB 0D3H,0E0H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'M*',cfa_M_mul + + DB 0F7H,06DH,00H + DB 089H,045H,00H + DB 08BH,0C2H + DB 0C3H +AHEADER 0 ,'*/MOD',cfa__mul_divMOD + + DB 08BH,0D8H + DB 08BH,045H,00H + DB 08BH,04DH,04H + DB 0F7H,0E9H + DB 0F7H,0FBH + DB 089H,055H,04H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'2/',cfa__2_div + + DB 0D1H,0F8H + DB 0C3H +AHEADER 0 ,'UM/MOD',cfa_UM_divMOD + + DB 08BH,0C8H + DB 08BH,055H,00H + DB 08BH,045H,04H + DB 0F7H,0F1H + DB 08DH,06DH,04H + DB 089H,055H,00H + DB 0C3H +AHEADER 0 ,'UMOD',cfa_UMOD + + DB 08BH,0C8H + DB 033H,0D2H + DB 08BH,045H,00H + DB 08DH,06DH,04H + DB 0F7H,0F1H + DB 08BH,0C2H + DB 0C3H +AHEADER 0 ,'/MOD',cfa__divMOD + + DB 08BH,0C8H + DB 08BH,045H,00H + DB 099H + DB 0F7H,0F9H + DB 089H,055H,00H + DB 0C3H +AHEADER 0 ,'MOD',cfa_MOD + + DB 08BH,0C8H + DB 08BH,045H,00H + DB 08DH,06DH,04H + DB 099H + DB 0F7H,0F9H + DB 08BH,0C2H + DB 0C3H +AHEADER 0 ,'+!',cfa_plussave + + DB 08BH,055H,00H + DB 01H,010H + DB 08BH,045H,04H + DB 08DH,06DH,08H + DB 0C3H +AHEADER 0 ,'U/',cfa_U_div + + DB 08BH,0C8H + DB 08BH,045H,00H + DB 033H,0D2H + DB 08DH,06DH,04H + DB 0F7H,0F1H + DB 0C3H +AHEADER 0 ,'/',cfa__div + + DB 08BH,0C8H + DB 08BH,045H,00H + DB 099H + DB 0F7H,0F9H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'UM*',cfa_UM_mul + + DB 0F7H,065H,00H + DB 089H,045H,00H + DB 08BH,0C2H + DB 0C3H +AHEADER 0 ,'C>S',cfa_CgreatS + + DB 0FH,0BEH,0C0H + DB 0C3H +AHEADER 0 ,'U>D',cfa_UgreatD + + DB 08DH,06DH,0FCH + DB 089H,045H,00H + DB 033H,0C0H + DB 0C3H +AHEADER 0 ,'D>S',cfa_DgreatS + + DB 08BH,045H,00H + DB 083H,0C5H,04H + DB 0C3H +AHEADER 0 ,'S>D',cfa_SgreatD + + DB 08DH,06DH,0FCH + DB 089H,045H,00H + DB 099H + DB 08BH,0C2H + DB 0C3H +AHEADER 0 ,'NOOP',cfa_NOOP + + DB 0C3H +AHEADER 0 ,'DNEGATE',cfa_DNEGATE + + DB 08BH,055H,00H + DB 0F7H,0D8H + DB 0F7H,0DAH + DB 083H,0D8H,00H + DB 089H,055H,00H + DB 0C3H +AHEADER 0 ,'ABS',cfa_ABS + + DB 085H,0C0H +;js cfa_NEGATE+00H +js cfa_NEGATE+00H + DB 0C3H +AHEADER 0 ,'NEGATE',cfa_NEGATE + + DB 0F7H,0D8H + DB 0C3H +AHEADER 0 ,'INVERT',cfa_INVERT + + DB 0F7H,0D0H + DB 0C3H +AHEADER 0 ,'XOR',cfa_XOR + + DB 033H,045H,00H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'OR',cfa_OR + + DB 0BH,045H,00H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'AND',cfa_AND + + DB 023H,045H,00H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'*',cfa__mul + + DB 0F7H,06DH,00H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'COUNT',cfa_COUNT + + DB 08DH,06DH,0FCH + DB 08DH,050H,01H + DB 089H,055H,00H + DB 0FH,0B6H,00H + DB 0C3H +AHEADER 0 ,'0!',cfa__0save + + DB 0C7H,00H + DD 00H + DB 08BH,045H,00H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'1+!',cfa__1plussave + + DB 0FFH,00H + DB 08BH,045H,00H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'-',cfa_minus + + DB 0F7H,0D8H + DB 03H,045H,00H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'D-',cfa_Dminus + + DB 08BH,055H,00H + DB 029H,055H,08H + DB 019H,045H,04H + DB 08BH,045H,04H + DB 08DH,06DH,08H + DB 0C3H +AHEADER 0 ,'D+',cfa_Dplus + + DB 08BH,055H,00H + DB 01H,055H,08H + DB 013H,045H,04H + DB 08DH,06DH,08H + DB 0C3H +AHEADER 0 ,'+',cfa_plus + + DB 03H,045H,00H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'CELLS',cfa_CELLS + + DB 08DH,04H,085H + DD 00H + DB 0C3H +AHEADER 0 ,'CELL-',cfa_CELLminus + + DB 08DH,040H,0FCH + DB 0C3H +AHEADER 0 ,'CELL+',cfa_CELLplus + + DB 08DH,040H,04H + DB 0C3H +AHEADER 0 ,'2*',cfa__2_mul + + DB 08DH,04H,045H + DD 00H + DB 0C3H +AHEADER 0 ,'2-',cfa__2minus + + DB 08DH,040H,0FEH + DB 0C3H +AHEADER 0 ,'2+',cfa__2plus + + DB 08DH,040H,02H + DB 0C3H +AHEADER 0 ,'1-',cfa__1minus + + DB 08DH,040H,0FFH + DB 0C3H +AHEADER 0 ,'1+',cfa__1plus + + DB 08DH,040H,01H + DB 0C3H +AHEADER 0 ,'EBX@',cfa_EBX_ld + + DB 08DH,06DH,0FCH + DB 089H,045H,00H + DB 08BH,0C3H + DB 0C3H +AHEADER 0 ,'D!',cfa_Dsave + + DB 08BH,055H,00H + DB 089H,050H,04H + DB 08BH,055H,04H + DB 089H,010H + DB 08DH,06DH,0CH + DB 08BH,045H,0FCH + DB 0C3H +AHEADER 0 ,'D@',cfa_D_ld + + DB 08BH,010H + DB 08DH,06DH,0FCH + DB 089H,055H,00H + DB 08BH,040H,04H + DB 0C3H +AHEADER 0 ,'2!',cfa__2save + + DB 08BH,055H,00H + DB 089H,010H + DB 08BH,055H,04H + DB 089H,050H,04H + DB 08DH,06DH,0CH + DB 08BH,045H,0FCH + DB 0C3H +AHEADER 0 ,'2@',cfa__2_ld + + DB 08BH,050H,04H + DB 08DH,06DH,0FCH + DB 089H,055H,00H + DB 08BH,00H + DB 0C3H +AHEADER 0 ,'W!',cfa_Wsave + + DB 08BH,055H,00H + DB 066H + DB 089H,010H + DB 08BH,045H,04H + DB 083H,0C5H,08H + DB 0C3H +AHEADER 0 ,'W@',cfa_W_ld + + DB 0FH,0B7H,00H + DB 0C3H +AHEADER 0 ,'C!',cfa_Csave + + DB 08BH,055H,00H + DB 088H,010H + DB 08BH,045H,04H + DB 083H,0C5H,08H + DB 0C3H +AHEADER 0 ,'C@',cfa_C_ld + + DB 0FH,0B6H,00H + DB 0C3H +AHEADER 0 ,'!',cfa_save + + DB 08BH,055H,00H + DB 089H,010H + DB 08BH,045H,04H + DB 083H,0C5H,08H + DB 0C3H +AHEADER 0 ,'@',cfa__ld + + DB 08BH,00H + DB 0C3H +AHEADER 0 ,'2R@',cfa__2R_ld + + DB 08DH,06DH,0F8H + DB 089H,045H,04H + DB 08BH,044H,024H,08H + DB 089H,045H,00H + DB 08BH,044H,024H,04H + DB 0C3H +AHEADER 0 ,'R@',cfa_R_ld + + DB 08DH,06DH,0FCH + DB 089H,045H,00H + DB 08BH,044H,024H,04H + DB 0C3H +AHEADER 0 ,'2R>',cfa__2Rgreat + + DB 08DH,06DH,0F8H + DB 05BH + DB 089H,045H,04H + DB 058H + DB 08FH,045H,00H + DB 053H + DB 0C3H +AHEADER 0 ,'2>R',cfa__2greatR + + DB 05BH + DB 0FFH,075H,00H + DB 050H + DB 08DH,06DH,08H + DB 08BH,045H,0FCH + DB 0FFH,0E3H +AHEADER 0 ,'TUCK',cfa_TUCK + + DB 08DH,06DH,0FCH + DB 08BH,055H,04H + DB 089H,055H,00H + DB 089H,045H,04H + DB 0C3H +AHEADER 0 ,'ROLL',cfa_ROLL + + DB 0BH,0C0H +;je cfa_ROLL+022H + DB 074H,01EH + DB 08BH,0C8H + DB 08DH,04H,085H + DD 00H + DB 08BH,0D5H + DB 03H,0D0H + DB 08BH,01AH + DB 08DH,052H,0FCH + DB 08BH,02H + DB 089H,042H,04H + DB 049H +;jne cfa_ROLL+013H + DB 075H,0F5H + DB 08BH,0C3H + DB 0EBH,03H + DB 08BH,045H,00H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'PICK',cfa_PICK + + DB 08BH,044H,085H,00H + DB 0C3H +AHEADER 0 ,'-ROT',cfa_minusROT + + DB 08BH,055H,04H + DB 089H,045H,04H + DB 08BH,045H,00H + DB 089H,055H,00H + DB 0C3H +AHEADER 0 ,'ROT',cfa_ROT + + DB 08BH,055H,00H + DB 089H,045H,00H + DB 08BH,045H,04H + DB 089H,055H,04H + DB 0C3H +AHEADER 0 ,'NIP',cfa_NIP + + DB 083H,0C5H,04H + DB 0C3H +AHEADER 0 ,'2OVER',cfa__2OVER + + DB 08BH,055H,08H + DB 089H,045H,0FCH + DB 089H,055H,0F8H + DB 08BH,045H,04H + DB 08DH,06DH,0F8H + DB 0C3H +AHEADER 0 ,'OVER',cfa_OVER + + DB 08DH,06DH,0FCH + DB 089H,045H,00H + DB 08BH,045H,04H + DB 0C3H +AHEADER 0 ,'2SWAP',cfa__2SWAP + + DB 08BH,04DH,00H + DB 08BH,05DH,04H + DB 08BH,055H,08H + DB 089H,04DH,08H + DB 089H,045H,04H + DB 089H,055H,00H + DB 08BH,0C3H + DB 0C3H +AHEADER 0 ,'SWAP',cfa_SWAP + + DB 08BH,055H,00H + DB 089H,045H,00H + DB 08BH,0C2H + DB 0C3H +AHEADER 0 ,'2DROP',cfa__2DROP + + DB 08BH,045H,04H + DB 083H,0C5H,08H + DB 0C3H +AHEADER 0 ,'UMIN',cfa_UMIN + + DB 03BH,045H,00H + DW 0870FH + DD cfa_DROP+00H-$-4 + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'UMAX',cfa_UMAX + + DB 03BH,045H,00H + DW 0820FH + DD cfa_DROP+00H-$-4 + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'MIN',cfa_MIN + + DB 03BH,045H,00H +;jg cfa_DROP+00H +jg cfa_DROP+00H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'MAX',cfa_MAX + + DB 03BH,045H,00H +;jl cfa_DROP+00H +jl cfa_DROP+00H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'DROP',cfa_DROP + + DB 08BH,045H,00H + DB 08DH,06DH,04H + DB 0C3H +AHEADER 0 ,'2DUP',cfa__2DUP + + DB 08BH,055H,00H + DB 089H,045H,0FCH + DB 089H,055H,0F8H + DB 08DH,06DH,0F8H + DB 0C3H +AHEADER 0 ,'?DUP',cfa_queDUP + + DB 0BH,0C0H +;jne cfa_DUP+00H +jne cfa_DUP+00H + DB 0C3H +AHEADER 0 ,'DUP',cfa_DUP + + DB 08DH,06DH,0FCH + DB 089H,045H,00H + DB 0C3H diff --git a/programs/develop/SPForth/lib/asm/486asm.f b/programs/develop/SPForth/lib/asm/486asm.f new file mode 100644 index 0000000000..91b4721db1 --- /dev/null +++ b/programs/develop/SPForth/lib/asm/486asm.f @@ -0,0 +1,2103 @@ +( 486 AND PENTIUM ASSEMBLER FOR WINDOWS 32BIT FORTH, VERSION 1.26 ) +( COPYRIGHT [C] 1994, 1995, BY JIM SCHNEIDER ) + +( THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY ) +( IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY ) +( THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR ) +( ANY LATER VERSION. ) +( ) +( THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, ) +( BUT WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF ) +( MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE ) +( GNU GENERAL PUBLIC LICENSE FOR MORE DETAILS. ) +( ) +( YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE ) +( ALONG WITH THIS PROGRAM; IF NOT, WRITE TO THE FREE SOFTWARE ) +( FOUNDATION, INC., 675 MASS AVE, CAMBRIDGE, MA 02139, USA. ) + +( DECLARE THE VOCABULARIES NEEDED ) +ONLY FORTH DEFINITIONS ( VOCABULARY ASSEMBLER ) ALSO ASSEMBLER DEFINITIONS +VOCABULARY ASM-HIDDEN ALSO ASM-HIDDEN DEFINITIONS ALSO ASSEMBLER +( THE ALSO ASSEMBLER IS STRICTLY TO TURN OFF STACK WARNINGS ) + +( WORDS TO MANIPULATE THE VOCABULARY SEARCH ORDER ) +: IN-ASM ( ALL LATER WORDS ARE DEFINED IN THE ASSEMBLER VOCABULARY ) + ONLY FORTH ALSO ASM-HIDDEN ALSO ASSEMBLER DEFINITIONS ; +: IN-HIDDEN ( ALL LATER WORDS ARE DEFINED IN THE HIDDEN VOCABULARY ) + ONLY FORTH ALSO ASM-HIDDEN DEFINITIONS ALSO ASSEMBLER ; +: IN-FORTH ( ALL LATER WORDS ARE DEFINED IN THE FORTH VOCABULARY ) + ONLY FORTH DEFINITIONS ALSO ASM-HIDDEN ALSO ASSEMBLER ; +IN-HIDDEN + +( MISCELLANEOUS HOUSEKEEPING ) +BASE @ DECIMAL ( SAVE THE BASE BECAUSE I HATE GRATUITOUS BASE BASHING ) +: CELL- [ 1 CELLS ] LITERAL - ; +: CELL/ [ 1 CELLS ] LITERAL / ; +: 8* 8 * ; +: 8/ 8 / ; +: 8+ 8 + ; +: 8- 8 - ; +: 4+ 4 + ; +: 2+ 2 + ; +: 2- 2 - ; +: 8*+ 8* + ; +: 16*+ 16 * + ; +: 16/MOD 16 /MOD ; +HEX +: C0-8* 0C0 - 8* ; +: C0+ 0C0 + ; +: C0- 0C0 - ; + +( DEFER SOME WORDS FOR EASE IN PORTING TO A CROSS ASSEMBLER ) +DEFER CODE-C, ' C, IS CODE-C, ( X -- ) +DEFER CODE-W, ' W, IS CODE-W, ( X -- ) +DEFER CODE-D, ' , IS CODE-D, ( X -- ) +DEFER DATA-, ' , IS DATA-, ( X -- ) +DEFER CODE-C! ' C! IS CODE-C! ( X \ A -- ) +DEFER CODE-W! ' W! IS CODE-W! ( X \ A -- ) +DEFER CODE-D! ' ! IS CODE-D! ( X \ A -- ) +DEFER DATA-! ' ! IS DATA-! ( X \ A -- ) +DEFER DATA-+! ' +! IS DATA-+! ( X \ A -- ) +DEFER CODE-C@ ' C@ IS CODE-C@ ( A -- X ) +DEFER CODE-W@ ' W@ IS CODE-W@ ( A -- X ) +DEFER CODE-D@ ' @ IS CODE-D@ ( A -- X ) +DEFER DATA-@ ' @ IS DATA-@ ( A -- X ) +DEFER DATA-HERE ' HERE IS DATA-HERE ( -- A ) +DEFER CODE-HERE ' HERE IS CODE-HERE ( -- A ) +DEFER CODE-ALIGN ' ALIGN IS CODE-ALIGN ( -- ) +DEFER CODE-HEADER ' HEADER IS CODE-HEADER ( -- ) + +( REGISTER OUT OF SCOPE FORWARD REFERENCES, FOR USE BY A CROSS-COMPILER ) +DEFER REGISTER-REF ' DROP IS REGISTER-REF ( ADDRESS \ TYPE -- ADDRESS ) +( REGISTER ACTUAL CODE CREATION, FOR USE IN OPTOMIZERS, DEBUGGERS, ETC. ) +DEFER REGISTER-ASM ' NOOP IS REGISTER-ASM ( DATA \ XT -- DATA \ XT ) + +IN-FORTH +( SET UP THE REGISTRATION CALLBACK FUNCTIONS ) +: SET-REGISTER-REF IS REGISTER-REF ; +: SET-REGISTER-ASM IS REGISTER-ASM ; +IN-HIDDEN + +( CONSTANTS FOR THE TYPE ARGUMENT ) +1 CONSTANT 8B-ABS ( 8 BIT ABSOLUTE ADDRESSING ) +2 CONSTANT 16B-ABS ( 16 BIT ABSOLUTE ADDRESSING ) +3 CONSTANT 32B-ABS ( 32 BIT ABSOLUTE ADDRESSING ) +5 CONSTANT 8B-REL ( 8 BIT RELATIVE ADDRESSING ) +6 CONSTANT 16B-REL ( 16 BIT RELATIVE ADDRESSING ) +7 CONSTANT 32B-REL ( 32 BIT RELATIVE ADDRESSING ) + +( DEFER THE ERROR HANDLER WORDS SO THEY CAN BE INDIVIDUALLY TURNED OFF ) +( DEFER THEM HERE SO THEY CAN BE USED BEFORE THEY ARE ACTUALLY DEFINED ) +: DEF-ERR-HAND ( THE DEFAULT ERROR HANDLER FOR UNINITIALIZED ERROR HANDLERS ) + ( X*I -- X*J ) + -1 ABORT" NO ERROR HANDLER INSTALLED" ; +' DEF-ERR-HAND CONSTANT DEH-XT + +DEFER ?PARAMS DEH-XT IS ?PARAMS ( -- ) \ ARE THERE PARAMETERS? +DEFER ?SEG DEH-XT IS ?SEG ( -- ) \ IS THERE A SEG OVERRIDE? +DEFER ?LOCK DEH-XT IS ?LOCK ( -- ) \ IS THERE A LOCK PREFIX? +DEFER ?REP DEH-XT IS ?REP ( -- ) \ IS THERE A REP TYPE PREFIX? +DEFER ?INST-PRE DEH-XT IS ?INST-PRE ( -- ) \ IS THERE AN INST PREFIX? +DEFER ?OPERANDS DEH-XT IS ?OPERANDS ( -- ) \ ARE THERE OPERANDS? +DEFER ?OPSIZE DEH-XT IS ?OPSIZE ( N -- ) \ IS THE OPERAND SIZE MISMATCHED? +DEFER ?ADSIZE DEH-XT IS ?ADSIZE ( N -- ) \ IS THE ADDRESS SIZE MISMATCHED? +DEFER ?SHORT DEH-XT IS ?SHORT ( -- ) \ IS THERE AN ILLEGAL SHORT? +DEFER ?TOOFAR DEH-XT IS ?TOOFAR ( FLAG -- ) \ IS THE DEST OF A BRANCH TO BIG? +DEFER ?UNRES DEH-XT IS ?UNRES ( -- ) \ IS THERE AN UNRESOLVED FORWARD REFERENCE? +DEFER ?NOADSIZE DEH-XT IS ?NOADSIZE ( -- ) \ IS THE FWD REF ADDR SIZE UNKNOWN? +DEFER ?TOOMANYOPS DEH-XT IS ?TOOMANYOPS ( N -- ) \ ARE THERE TOO MANY OPERANDS? +DEFER ?NOFAR DEH-XT IS ?NOFAR ( -- ) \ IS THERE A FAR REFERENCE? +DEFER ?MATCH DEH-XT IS ?MATCH ( X1 \ X2 -- ) \ ERROR IF X1==X2 +DEFER ?NOMATCH DEH-XT IS ?NOMATCH ( X1 \ X2 -- ) \ ERROR IF X1!=X2 +DEFER ?FINISHED DEH-XT IS ?FINISHED ( -- ) \ ARE THERE OPERANDS LEFT OVER? +DEFER ?BADTYPE DEH-XT IS ?BADTYPE ( MAX TYPE VAL -- ) \ IS THE TYPE UNALLOWED? +DEFER ?BADCOMBINE DEH-XT IS ?BADCOMBINE ( FLAG -- ) \ CAN THE TYPES BE COMBINED? +DEFER ?NOTENOUGH DEH-XT IS ?NOTENOUGH ( N -- ) \ ARE THERE TOO FEW OPERANDS? +DEFER ?NOIMMED DEH-XT IS ?NOIMMED ( -- ) \ IS THERE AN ILLEGAL IMMEDIATE OP? +DEFER ?BADMODE DEH-XT IS ?BADMODE ( FLAG -- ) \ IS THE ADDRESS MODE ILLEGAL? +DEFER ?REG,R/M DEH-XT IS ?REG,R/M ( -- ) \ IS THE DEST A REG? +DEFER ?R/M,REG DEH-XT IS ?R/M,REG ( -- ) \ IS THE SOURCE A REG? +DEFER ?MEM DEH-XT IS ?MEM ( -- ) \ DO WE HAVE AN ILLEGAL REGISTER OPERAND? +DEFER ?REG DEH-XT IS ?REG ( -- ) \ DO WE HAVE AN ILLEGAL MEMORY OPERAND? + +( DEFER THE WORD THAT CALLS THE WORDS THAT CREATE THE CODE ) +( IT COMES IN TWO FLAVORS -- PREFIX AND POSTFIX ) +( IT'S DEFERRED HERE SO I CAN USE IT NOW ) +: NO-OPCODE-HANDLER -1 ABORT" NO OPCODE CREATOR INSTALLED" ; +DEFER DO-OPCODE ' NO-OPCODE-HANDLER IS DO-OPCODE ( X? \ X? \ 0|ADDR -- ) + \ POSTFIX MODE: THIS ACTUALLY SAVES THE CURRENT INSTRUCTION AND + \ DOES THE PREVIOUS ONE. + +IN-ASM +: A; ( FINISH THE ASSEMBLY OF THE PREVIOUS INSTRUCTION ) + ( -- ) + 0 DO-OPCODE ; + +( ADDRESS AND DATA SIZES ) +IN-HIDDEN +0 CONSTANT UNKNOWN ( ALSO, OPERAND TYPE AND NUMBER ) +1 CONSTANT 8BIT +2 CONSTANT 16BIT +3 CONSTANT 32BIT +4 CONSTANT 64BIT +5 CONSTANT 80BIT + +( DETERMINE WHAT SIZE CODE TO GENERATE ) +32BIT VALUE DEFAULT-SIZE ( THE DEFAULT USE SIZE ) +: !DEFAULT-SIZE ( NOT THE DEFAULT SIZE, EG. CHANGE 16BIT TO 32BIT ) + ( -- SIZE ) + DEFAULT-SIZE 16BIT = IF 32BIT ELSE 16BIT THEN ; +IN-ASM +: USE16 ( GENERATE 16 BIT CODE BY DEFAULT ) + 16BIT TO DEFAULT-SIZE ; +: USE32 ( GENERATE 32 BIT CODE BY DEFAULT ) + 32BIT TO DEFAULT-SIZE ; + +( CREATE A STACK FOR OPERANDS ) +IN-HIDDEN +7 CONSTANT MAX-OPERANDS ( MAXIMUM NUMBER OF OPERANDS ON THE OPSTACK ) +CREATE OPSTACK MAX-OPERANDS 1+ CELLS ALLOT HERE CONSTANT OPSTACK-END +: CLR-OPSTACK OPSTACK DUP CELL+ SWAP DATA-! ; +CLR-OPSTACK ( INITIALIZE THE OPSTACK ) +: ?CLR-OPSTACK ( CLEAR THE OPERAND STACK WHEN THE FLAG IS NON-ZERO ) + ( F -- ) + IF CLR-OPSTACK THEN ; +IN-ASM +: PUSH-OP ( MOVE A PARAMETER STACK ITEM TO THE OPSTACK ) + ( X -- ) + OPSTACK DATA-@ OPSTACK-END = DUP ?CLR-OPSTACK + ABORT" OPSTACK OVERFLOW" OPSTACK DUP DATA-@ DUP CELL+ ROT DATA-! + DATA-! ; +: POP-OP ( MOVE AN ITEM FROM THE OPERAND STACK TO THE PARAMETER STACK ) + ( -- X ) + OPSTACK DUP DATA-@ SWAP CELL+ = DUP ?CLR-OPSTACK + ABORT" OPSTACK UNDERFLOW" OPSTACK DUP DATA-@ CELL- DUP ROT + DATA-! DATA-@ ; +IN-HIDDEN +: OP-DEPTH ( CHECK THE DEPTH OF THE OPERAND STACK ) + OPSTACK DUP DATA-@ SWAP - CELL- CELL/ ; + +( WORDS TO SUPPORT FORWARD REFERENCED LOCAL LABELS ) +100 CONSTANT FRMAX ( MAX NUMBER OF UNRESOLVED FORWARD REFERENCES ) +140 CONSTANT LBMAX ( MAX NUMBER OF LOCAL LABELS ) +CREATE FRTABLE FRMAX 2* CELLS ALLOT ( HOLDS UNRESOLVED FORWARD REFERENCES ) +CREATE LBTABLE LBMAX CELLS ALLOT ( HOLDS LOCAL LABEL BINDINGS ) +: ADDREF ( ADD A FORWARD REFERENCE AT CODE-HERE ) + ( REF# -- REF# ) + FRTABLE [ FRMAX 1+ ] LITERAL 0 DO + FRMAX I = DUP ?CLR-OPSTACK + ABORT" TOO MANY UNRESOLVED FORWARD REFERENCES" + DUP DATA-@ IF + CELL+ CELL+ ELSE 2DUP DATA-! CODE-HERE OVER CELL+ + DATA-! LEAVE + THEN + LOOP DROP ; +: BACKPATCH ( BACKPATCH A FORWARD REFERENCE TO HERE ) + ( ADDRESS \ SIZE -- ) + CASE 8BIT OF + CODE-HERE OVER 1+ - DUP ABS 7F > ?TOOFAR SWAP CODE-C! + ENDOF 16BIT OF + CODE-HERE OVER 2+ - DUP ABS 7FFF > ?TOOFAR SWAP CODE-W! + ENDOF 32BIT OF + CODE-HERE OVER 4+ - SWAP CODE-D! + ENDOF ?NOADSIZE DROP ENDCASE ; +: REFSIZE ( DETERMINE THE SIZE OF A BOUND REFERENCE ) + ( ADDR OF INSTR -- ADDR OF OPERAND \ SIZE ) + DUP CODE-C@ 67 ( ADDR SIZE OVERRIDE PREFIX ) = IF + 1+ !DEFAULT-SIZE + ELSE + DEFAULT-SIZE + THEN + ( STACK: ADDRESS OF ACTUAL INSTRUCTION \ PROVISIONAL SIZE ) + >R DUP CODE-C@ CASE + 0F OF ( A NEAR CONDITIONAL BRANCH ) + 1+ ( ADJUST FOR THE FIRST BYTE OF THE OPCODE ) + ENDOF 0E9 OF ( A JMP NEAR, DON'T NEED TO DO ANYTHING ) + ENDOF 0E8 OF ( A NEAR CALL, DON'T NEED TO DO ANYTHING ) + ENDOF ( IF WE GET TO HERE, IT MUST BE 8 BIT ) + R> DROP 8BIT >R + ENDCASE 1+ R> ; +: RESOLVE ( RESOLVE A FORWARD REFERENCE TO CODE-HERE ) + ( REF# -- REF# ) + FRTABLE FRMAX 0 DO + 2DUP DATA-@ = IF + DUP CELL+ DATA-@ REFSIZE BACKPATCH 0 OVER DATA-! + THEN + CELL+ CELL+ + LOOP + DROP ; +: !LABEL ( BIND A LABEL TO CODE-HERE ) + ( REF# -- ) + RESOLVE CODE-HERE SWAP CELLS LBTABLE + DATA-! ; +: @LABEL ( FETCH THE BINDING OF A LABEL, OR RETURN A PSEUDO ADDRESS IF NOT ) + ( YET BOUND TO AN ADDRESS ) + ( REF# -- ADDR ) + DUP CELLS LBTABLE + DATA-@ ?DUP IF SWAP DROP ELSE ADDREF DROP + CODE-HERE THEN ; +: CREATE-REF ( CREATE WORDS TO REFERENCE LOCAL LABELS ) + ( C:: INDEX -- ) + ( R:: -- ADDR ) + CREATE DATA-, DOES> DATA-@ @LABEL ; +: CREATE-BIND ( CREATE WORDS TO BIND LOCAL LABELS ) + ( C:: INDEX -- ) + ( R:: -- ) + CREATE DATA-, DOES> >R A; R> DATA-@ !LABEL ; + +( THESE REFERENCES AND BINDINGS ARE NAMED FOR GENERAL USE. DO NOT USE THEM ) +( IN MACROS ) +IN-ASM +1 CREATE-REF @@1 1 CREATE-BIND @@1: +2 CREATE-REF @@2 2 CREATE-BIND @@2: +3 CREATE-REF @@3 3 CREATE-BIND @@3: +4 CREATE-REF @@4 4 CREATE-BIND @@4: +5 CREATE-REF @@5 5 CREATE-BIND @@5: +6 CREATE-REF @@6 6 CREATE-BIND @@6: +7 CREATE-REF @@7 7 CREATE-BIND @@7: +8 CREATE-REF @@8 8 CREATE-BIND @@8: +9 CREATE-REF @@9 9 CREATE-BIND @@9: + +IN-HIDDEN +0 VALUE IN-MACRO? ( A SEMAPHORE TO TELL IF WE'RE IN EXECUTION OF A MACRO ) +0A VALUE MACRO-LABELS ( THE FIRST LABEL USED FOR MACROS ) +VARIABLE MACRO-LABEL-LEVEL ( FOR LABELS TO USE IN MACROS ) +: IN-MACRO ( FLAG THE FACT THAT WE ARE IN A MACRO ) + ( -- ) + 1 +TO IN-MACRO? ; +: !IN-MACRO ( FLAG THE FACT THAT WE'VE LEFT A MACRO ) + ( -- ) + -1 +TO IN-MACRO? ; +: +MACRO ( GET AN INDEX INTO THE LABEL TABLE FROM AN OFFSET ) + ( OFFSET -- INDEX ) + MACRO-LABEL-LEVEL DATA-@ + DUP LBMAX > + ABORT" TOO MANY LOCAL LABELS IN MACROS" ; +: +MACRO-REF ( REFERENCE A LABEL OFFSET FROM THE MACRO LEVEL ) + ( OFFSET -- ADDR ) + +MACRO @LABEL ; +: +MACRO-BIND ( BIND A LABEL OFFSET FROM THE MACRO LEVEL ) + ( OFFSET -- ) + +MACRO !LABEL ; +: ENTER-MACRO ( SET UP MACRO RELATIVE LOCAL LABELS ) + ( -- ) + MACRO-LABELS MACRO-LABEL-LEVEL DUP DATA-@ ROT + DUP ROT DATA-! CELLS + LBTABLE + MACRO-LABELS CELLS ERASE IN-MACRO ; +: LEAVE-MACRO ( GO BACK TO THE OLD REGIME ) + ( OLD MACRO LABEL LEVEL -- ) + MACRO-LABELS MACRO-LABEL-LEVEL DUP DATA-@ ROT - SWAP DATA-! !IN-MACRO ; +: CREATE-MACRO-REF ( CREATE MACRO-SAFE LOCAL LABEL REFERENCES ) + ( C:: LABEL OFFSET -- ) + ( R:: -- ADDR ) + CREATE DATA-, DOES> DATA-@ +MACRO-REF ; +: CREATE-MACRO-BIND ( CREATE MACRO-SAFE LOCAL LABEL BINDINGS ) + ( C:: LABEL OFFSET -- ) + ( R:: -- ) + CREATE DATA-, DOES> >R A; R> DATA-@ +MACRO-BIND ; +: LOC-INIT ( INITIALIZE THE TABLES AND VARIABLES ) + ( -- ) + FRTABLE [ FRMAX 2* CELLS ] LITERAL ERASE LBTABLE [ LBMAX CELLS ] + LITERAL ERASE MACRO-LABELS MACRO-LABEL-LEVEL DATA-! ; + +( MACRO SAFE LOCAL LABELS ) +IN-ASM +0 CREATE-MACRO-REF @@M0 0 CREATE-MACRO-BIND @@M0: +1 CREATE-MACRO-REF @@M1 1 CREATE-MACRO-BIND @@M1: +2 CREATE-MACRO-REF @@M2 2 CREATE-MACRO-BIND @@M2: +3 CREATE-MACRO-REF @@M3 3 CREATE-MACRO-BIND @@M3: +4 CREATE-MACRO-REF @@M4 4 CREATE-MACRO-BIND @@M4: +5 CREATE-MACRO-REF @@M5 5 CREATE-MACRO-BIND @@M5: +6 CREATE-MACRO-REF @@M6 6 CREATE-MACRO-BIND @@M6: +7 CREATE-MACRO-REF @@M7 7 CREATE-MACRO-BIND @@M7: +8 CREATE-MACRO-REF @@M8 8 CREATE-MACRO-BIND @@M8: +9 CREATE-MACRO-REF @@M9 9 CREATE-MACRO-BIND @@M9: +( CREATE ALTERNATIVE LABEL REFERENCE AND BINDING NAMES FOR TOM ) +0 CREATE-MACRO-REF L$0 0 CREATE-MACRO-BIND L$0: +1 CREATE-MACRO-REF L$1 1 CREATE-MACRO-BIND L$1: +2 CREATE-MACRO-REF L$2 2 CREATE-MACRO-BIND L$2: +3 CREATE-MACRO-REF L$3 3 CREATE-MACRO-BIND L$3: +4 CREATE-MACRO-REF L$4 4 CREATE-MACRO-BIND L$4: +5 CREATE-MACRO-REF L$5 5 CREATE-MACRO-BIND L$5: +6 CREATE-MACRO-REF L$6 6 CREATE-MACRO-BIND L$6: +7 CREATE-MACRO-REF L$7 7 CREATE-MACRO-BIND L$7: +8 CREATE-MACRO-REF L$8 8 CREATE-MACRO-BIND L$8: +9 CREATE-MACRO-REF L$9 9 CREATE-MACRO-BIND L$9: + +( CONSTANTS FOR OPERAND TYPING ) +( OPERAND TYPES ) +IN-HIDDEN + 1 CONSTANT INDIRECT ( 16 BIT REGISTER INDIRECT ) + 2 CONSTANT BASED ( 32 BIT REGISTER INDIRECT OR SCALED INDEX/BASE ) + 3 CONSTANT INDEX ( 32 BIT SCALED INDEX ) + 4 CONSTANT IMMEDIATE ( AN IMMEDIATE OPERAND ) + 5 CONSTANT REGISTER ( A GENERAL PURPOSE MACHINE REGISTER ) + 6 CONSTANT SREG ( A SEGMENT REGISTER ) + 7 CONSTANT CREG ( A CONTROL REGISTER ) + 8 CONSTANT DREG ( A DEBUG REGISTER ) + 9 CONSTANT TREG ( A TEST REGISTER ) +0A CONSTANT FREG ( A FLOATING POINT REGISTER ) + +( ENCODE AND DECODE REGISTER REPRESENTATIONS ) +( REGISTER ENCODING: ) + ( BITS USE ) + ( 0-3 DATA SIZE ) + ( 4-7 ADDRESS SIZE ) + ( 8-11 TYPE ) + ( 12-13 R/M OR S-I-B ) +: ( ENCODE THE SINGLE CELL OPERAND REPRESENTATION FROM THE VALUES ) + ( ON THE STACK ) + ( DATA SIZE \ ADDR SIZE \ TYPE \ R/M OR S-I-B -- REG VAL ) + 16*+ 16*+ 16*+ ; +: ( DECODE THE SINGLE CELL OPERAND REPRESENTATION TO ITS ) + ( CONSTITUENT PARTS ) + ( REG VAL -- DATA SIZE \ ADDR SIZE \ TYPE \ R/M OR S-I-B ) + 16/MOD 16/MOD 16/MOD ; +: ASM-OP ( CREATE THE ASSEMBLER OPERANDS FROM OPERAND DESCRIPTIONS ) + ( C:: DATA SIZE \ ADDR SIZE \ TYPE \ R/M OR S-I-B -- ) + ( R:: -- ) + ( R::OS: -- X ) + CREATE DATA-, DOES> DATA-@ PUSH-OP ; + +( THE ASSEMBLER OPERANDS ) +IN-ASM + 8BIT UNKNOWN REGISTER 0 ASM-OP AL + 8BIT UNKNOWN REGISTER 1 ASM-OP CL + 8BIT UNKNOWN REGISTER 2 ASM-OP DL + 8BIT UNKNOWN REGISTER 3 ASM-OP BL + 8BIT UNKNOWN REGISTER 4 ASM-OP AH + 8BIT UNKNOWN REGISTER 5 ASM-OP CH + 8BIT UNKNOWN REGISTER 6 ASM-OP DH + 8BIT UNKNOWN REGISTER 7 ASM-OP BH + 16BIT UNKNOWN REGISTER 0 ASM-OP AX + 16BIT UNKNOWN REGISTER 1 ASM-OP CX + 16BIT UNKNOWN REGISTER 2 ASM-OP DX + 16BIT UNKNOWN REGISTER 3 ASM-OP BX + 16BIT UNKNOWN REGISTER 4 ASM-OP SP + 16BIT UNKNOWN REGISTER 5 ASM-OP BP + 16BIT UNKNOWN REGISTER 6 ASM-OP SI + 16BIT UNKNOWN REGISTER 7 ASM-OP DI + 32BIT UNKNOWN REGISTER 0 ASM-OP EAX + 32BIT UNKNOWN REGISTER 1 ASM-OP ECX + 32BIT UNKNOWN REGISTER 2 ASM-OP EDX + 32BIT UNKNOWN REGISTER 3 ASM-OP EBX + 32BIT UNKNOWN REGISTER 4 ASM-OP ESP + 32BIT UNKNOWN REGISTER 5 ASM-OP EBP + 32BIT UNKNOWN REGISTER 6 ASM-OP ESI + 32BIT UNKNOWN REGISTER 7 ASM-OP EDI +UNKNOWN 16BIT INDIRECT 0 ASM-OP [BX+SI] +UNKNOWN 16BIT INDIRECT 1 ASM-OP [BX+DI] +UNKNOWN 16BIT INDIRECT 2 ASM-OP [BP+SI] +UNKNOWN 16BIT INDIRECT 3 ASM-OP [BP+DI] +UNKNOWN 16BIT INDIRECT 4 ASM-OP [SI] +UNKNOWN 16BIT INDIRECT 5 ASM-OP [DI] +UNKNOWN 16BIT INDIRECT 6 ASM-OP [BP] +UNKNOWN 16BIT INDIRECT 7 ASM-OP [BX] +UNKNOWN 32BIT BASED 0 ASM-OP [EAX] +UNKNOWN 32BIT BASED 1 ASM-OP [ECX] +UNKNOWN 32BIT BASED 2 ASM-OP [EDX] +UNKNOWN 32BIT BASED 3 ASM-OP [EBX] +UNKNOWN 32BIT BASED 4 ASM-OP [ESP] +UNKNOWN 32BIT BASED 5 ASM-OP [EBP] +UNKNOWN 32BIT BASED 6 ASM-OP [ESI] +UNKNOWN 32BIT BASED 7 ASM-OP [EDI] +UNKNOWN 32BIT INDEX 8 ASM-OP [EAX*2] +UNKNOWN 32BIT INDEX 9 ASM-OP [ECX*2] +UNKNOWN 32BIT INDEX 0A ASM-OP [EDX*2] +UNKNOWN 32BIT INDEX 0B ASM-OP [EBX*2] +UNKNOWN 32BIT INDEX 0D ASM-OP [EBP*2] +UNKNOWN 32BIT INDEX 0E ASM-OP [ESI*2] +UNKNOWN 32BIT INDEX 0F ASM-OP [EDI*2] +UNKNOWN 32BIT INDEX 10 ASM-OP [EAX*4] +UNKNOWN 32BIT INDEX 11 ASM-OP [ECX*4] +UNKNOWN 32BIT INDEX 12 ASM-OP [EDX*4] +UNKNOWN 32BIT INDEX 13 ASM-OP [EBX*4] +UNKNOWN 32BIT INDEX 15 ASM-OP [EBP*4] +UNKNOWN 32BIT INDEX 16 ASM-OP [ESI*4] +UNKNOWN 32BIT INDEX 17 ASM-OP [EDI*4] +UNKNOWN 32BIT INDEX 18 ASM-OP [EAX*8] +UNKNOWN 32BIT INDEX 19 ASM-OP [ECX*8] +UNKNOWN 32BIT INDEX 1A ASM-OP [EDX*8] +UNKNOWN 32BIT INDEX 1B ASM-OP [EBX*8] +UNKNOWN 32BIT INDEX 1D ASM-OP [EBP*8] +UNKNOWN 32BIT INDEX 1E ASM-OP [ESI*8] +UNKNOWN 32BIT INDEX 1F ASM-OP [EDI*8] + 16BIT UNKNOWN SREG 0 ASM-OP ES + 16BIT UNKNOWN SREG 1 ASM-OP CS + 16BIT UNKNOWN SREG 2 ASM-OP SS + 16BIT UNKNOWN SREG 3 ASM-OP DS + 16BIT UNKNOWN SREG 4 ASM-OP FS + 16BIT UNKNOWN SREG 5 ASM-OP GS + 32BIT UNKNOWN CREG 0 ASM-OP CR0 + 32BIT UNKNOWN CREG 2 ASM-OP CR2 + 32BIT UNKNOWN CREG 3 ASM-OP CR3 + 32BIT UNKNOWN CREG 4 ASM-OP CR4 + 32BIT UNKNOWN DREG 0 ASM-OP DR0 + 32BIT UNKNOWN DREG 1 ASM-OP DR1 + 32BIT UNKNOWN DREG 2 ASM-OP DR2 + 32BIT UNKNOWN DREG 3 ASM-OP DR3 + 32BIT UNKNOWN DREG 6 ASM-OP DR6 + 32BIT UNKNOWN DREG 7 ASM-OP DR7 + 32BIT UNKNOWN TREG 3 ASM-OP TR3 + 32BIT UNKNOWN TREG 4 ASM-OP TR4 + 32BIT UNKNOWN TREG 5 ASM-OP TR5 + 32BIT UNKNOWN TREG 6 ASM-OP TR6 + 32BIT UNKNOWN TREG 7 ASM-OP TR7 +UNKNOWN UNKNOWN FREG 0 ASM-OP ST +UNKNOWN UNKNOWN FREG 0 ASM-OP ST(0) +UNKNOWN UNKNOWN FREG 1 ASM-OP ST(1) +UNKNOWN UNKNOWN FREG 2 ASM-OP ST(2) +UNKNOWN UNKNOWN FREG 3 ASM-OP ST(3) +UNKNOWN UNKNOWN FREG 4 ASM-OP ST(4) +UNKNOWN UNKNOWN FREG 5 ASM-OP ST(5) +UNKNOWN UNKNOWN FREG 6 ASM-OP ST(6) +UNKNOWN UNKNOWN FREG 7 ASM-OP ST(7) + 8BIT UNKNOWN UNKNOWN UNKNOWN ASM-OP BYTE + 16BIT UNKNOWN UNKNOWN UNKNOWN ASM-OP WORD + 32BIT UNKNOWN UNKNOWN UNKNOWN ASM-OP DWORD + 64BIT UNKNOWN UNKNOWN UNKNOWN ASM-OP QWORD + 32BIT UNKNOWN UNKNOWN UNKNOWN ASM-OP FLOAT + 64BIT UNKNOWN UNKNOWN UNKNOWN ASM-OP DOUBLE + 80BIT UNKNOWN UNKNOWN UNKNOWN ASM-OP LONG + 80BIT UNKNOWN UNKNOWN UNKNOWN ASM-OP EXTENDED + 80BIT UNKNOWN UNKNOWN UNKNOWN ASM-OP TBYTE +UNKNOWN 8BIT UNKNOWN UNKNOWN ASM-OP SHORT +UNKNOWN 16BIT UNKNOWN UNKNOWN ASM-OP NEAR +UNKNOWN 32BIT UNKNOWN UNKNOWN ASM-OP FAR +UNKNOWN UNKNOWN IMMEDIATE UNKNOWN ASM-OP # +UNKNOWN UNKNOWN UNKNOWN UNKNOWN ASM-OP , + +( VARIABLES USED FOR INSTRUCTION CODING ) +IN-HIDDEN +VARIABLE INST-PREFIX ( INSTRUCTION PREFIXES ) +VARIABLE ADDR-PREFIX ( ADDRESS SIZE PREFIX ) +VARIABLE DATA-PREFIX ( DATA SIZE PREFIX ) +VARIABLE SEG-PREFIX ( SEGMENT OVERRIDE PREFIX ) +VARIABLE SV-INST-PREFIX ( THE SAVED INSTRUCTION PREFIX ) +VARIABLE INST-SAVE ( THE PREVIOUSLY EXECUTED INSTRUCTION ) +VARIABLE SP-SAVE ( THE STACK POINTER ) +VARIABLE OFFSET-SV ( SAVE THE OFFSET PART ) +VARIABLE IMMED-SV ( SAVE THE IMMEDIATE PART ) +VARIABLE DT-SIZE ( DATA ITEM SIZE ) +VARIABLE AD-SIZE ( ADDRESS SIZE ) +VARIABLE RTYPE ( THE WORKING REGISTER TYPE ) +VARIABLE MAXTYPE ( THE MAXIMUM NUMERICAL TYPE VALUE ENCOUNTERED ) +VARIABLE MOD-R/M ( THE WORKING AREA FOR THE MOD-R/M BYTE ) +VARIABLE S-I-B ( THE WORKING AREA FOR THE S-I-B BYTE ) +VARIABLE ADDMODE ( ADDRESSING MODE FLAGS ) + +: RESET-VARS ( STORE 0 INTO ALL INSTRUCTION CODING VARIABLES ) + 0 INST-PREFIX DATA-! 0 ADDR-PREFIX DATA-! 0 DATA-PREFIX DATA-! + 0 SEG-PREFIX DATA-! 0 SV-INST-PREFIX DATA-! 0 INST-SAVE DATA-! + 0 SP-SAVE DATA-! 0 OFFSET-SV DATA-! 0 IMMED-SV DATA-! 0 DT-SIZE DATA-! + 0 AD-SIZE DATA-! 0 RTYPE DATA-! 0 MAXTYPE DATA-! 0 MOD-R/M DATA-! + 0 S-I-B DATA-! 0 ADDMODE DATA-! ; + +: RESET-FOR-NEXT-INSTR ( STORE A 0 INTO INTERMEDIATE CODING VARIABLES ) + 0 OFFSET-SV DATA-! 0 IMMED-SV DATA-! 0 DT-SIZE DATA-! + 0 AD-SIZE DATA-! 0 RTYPE DATA-! 0 MAXTYPE DATA-! 0 MOD-R/M DATA-! + 0 S-I-B DATA-! 0 ADDMODE DATA-! ; + +( SET/RESET MODE BITS ) + 1 CONSTANT IMMED-BIT ( FLAG AN IMMEDIATE OPERAND ) + 2 CONSTANT DIRECT-BIT ( FLAG THE DIRECTION ) + 4 CONSTANT MOD-R/M-BIT ( FLAG THAT WE'VE STARTED THE MOD-R/M ) + 8 CONSTANT S-I-B-BIT ( FLAG THE BEGINNING OF S-I-B CREATION ) + 10 CONSTANT FULL-OFF-BIT ( FLAG A FULL OFFSET ) + 20 CONSTANT BASED-BIT ( FLAG THAT WE'VE SEEN A BASE ) + 40 CONSTANT OFFSET-BIT ( FLAG AN OFFSET ) + 80 CONSTANT SHORT-BIT ( FLAG SHORT ) +100 CONSTANT NEAR-BIT ( FLAG NEAR ) +200 CONSTANT FAR-BIT ( FLAG FAR ) +400 CONSTANT DO-1OP-BIT ( FLAG WE'VE BEEN THROUGH DO-1OP ONCE ) +800 CONSTANT MAYBE-OFFSET-BIT ( FLAG THAT MAYBE WE'VE GOT AN OFFSET ) +IMMED-BIT +DIRECT-BIT OR +MOD-R/M-BIT OR +S-I-B-BIT OR +FULL-OFF-BIT OR +BASED-BIT OR +OFFSET-BIT OR +SHORT-BIT OR +NEAR-BIT OR +FAR-BIT OR +DO-1OP-BIT OR +MAYBE-OFFSET-BIT OR +CONSTANT MODE-MASK ( ALL MODE BITS SET ) + +: 1MODE-BIT! ( SET A MODE BIT ) + ( BIT CONSTANT -- ) + ADDMODE SWAP OVER DATA-@ OR SWAP DATA-! ; +: 0MODE-BIT! ( CLEAR A MODE BIT ) + ( BIT CONSTANT -- ) + MODE-MASK XOR ADDMODE SWAP OVER DATA-@ AND SWAP DATA-! ; +: MODE-BIT@ ( FETCH A MODE BIT ) + ( BIT MASK -- FLAG ) + ADDMODE DATA-@ AND 0<> ; +: HAS-IMMED ( FLAG AN IMMEDIATE OPERAND ) + ( -- ) + IMMED-BIT 1MODE-BIT! ; +: HAS-IMMED? ( DO WE HAVE AN IMMEDIATE OPERAND? ) + ( -- FLAG ) + IMMED-BIT MODE-BIT@ ; +: HAS-MOD-R/M ( WE'VE SEEN AT LEAST ONE OPERAND ) + ( -- ) + MOD-R/M-BIT 1MODE-BIT! ; +: HAS-MOD-R/M? ( HAVE WE SEEN AN OPERAND? ) + ( -- FLAG ) + MOD-R/M-BIT MODE-BIT@ ; +: HAS-S-I-B ( WE'VE STARTED WORK ON THE S-I-B ) + ( -- ) + S-I-B-BIT 1MODE-BIT! ; +: HAS-S-I-B? ( HAVE WE STARTED WORK ON THE S-I-B ) + ( -- FLAG ) + S-I-B-BIT MODE-BIT@ ; +: REG,R/M ( ADDRESSING MODE IS REGISTER, REGISTER/MEMORY ) + ( -- ) + DIRECT-BIT 1MODE-BIT! ; +: R/M,REG ( ADDRESSING MODE IS REGISTER/MEMORY, REGISTER ) + ( -- ) + DIRECT-BIT 0MODE-BIT! ; +: DIRECTION? ( IS THE DESTINATION A REGISTER? ) + ( -- FLAG ) + DIRECT-BIT MODE-BIT@ ; +: HAS-FULL-OFF ( MUST GENERATE A FULL OFFSET ) + ( -- ) + FULL-OFF-BIT 1MODE-BIT! ; +: HAS-FULL-OFF? ( DO WE NEED A FULL OFFSET? ) + ( -- FLAG ) + FULL-OFF-BIT MODE-BIT@ ; +: HAS-BASE ( WE HAVE A BASE ) + ( -- ) + BASED-BIT 1MODE-BIT! ; +: HAS-BASE? ( DO WE HAVE A BASE? ) + ( -- FLAG ) + BASED-BIT MODE-BIT@ ; +: MAYBE-S-I-B? ( DO WE HAVE A POSSIBLE S-I-B? ) + ( -- FLAG ) + BASED-BIT MODE-BIT@ S-I-B-BIT MODE-BIT@ OR ; +: HAS-OFFSET ( FLAG THAT WE DO HAVE AN OFFSET ) + ( -- ) + OFFSET-BIT 1MODE-BIT! ; +: HAS-OFFSET? ( DO WE HAVE AN OFFSET? ) + ( -- FLAG ) + OFFSET-BIT MODE-BIT@ FULL-OFF-BIT MODE-BIT@ OR ; +: IS-SHORT ( WE HAVE A SHORT DISPLACEMENT ) + ( -- ) + SHORT-BIT 1MODE-BIT! ; +: IS-SHORT? ( IS THE DISPLACEMENT SHORT? ) + ( -- FLAG ) + SHORT-BIT MODE-BIT@ ; +: IS-NEAR ( WE HAVE A NEAR DISPLACEMENT ) + ( -- ) + NEAR-BIT 1MODE-BIT! ; +: IS-NEAR? ( DO WE HAVE A NEAR DISPLACEMENT? ) + ( -- FLAG ) + NEAR-BIT MODE-BIT@ FAR-BIT MODE-BIT@ 0= OR ; +: IS-FAR ( WE HAVE A FAR POINTER ) + ( -- ) + FAR-BIT 1MODE-BIT! ; +: IS-FAR? ( DO WE HAVE A FAR DISPLACEMENT? ) + ( -- FLAG ) + FAR-BIT MODE-BIT@ ; +: DO-1OP-EXED ( WE'VE EXEC'D DO-1OP ) + ( -- ) + DO-1OP-BIT 1MODE-BIT! ; +( NOTE: WHEN WE START TO ASSEMBLE AN OPCODE, ALL FLAGS ARE OFF ) +: DO-1OP-EXED? ( HAVE WE EXEC'D DO-1OP? ) + ( -- FLAG ) + DO-1OP-BIT MODE-BIT@ ; +: MAYBE-HAS-OFFSET ( FLAG THAT WE'VE PICKED SOMETHING UP FROM THE STACK ) + ( -- ) + MAYBE-OFFSET-BIT 1MODE-BIT! ; +: MAYBE-HAS-OFFSET? ( HAVE WE PICKED UP SOMETHING FROM THE STACK? ) + ( -- FLAG ) + MAYBE-OFFSET-BIT MODE-BIT@ ; + +( TEST FOR ERROR CONDITIONS ) +: _?PARAMS ( ARE THERE PARAMETERS ON THE STACK? ) + SP@ SP-SAVE DATA-@ - DUP ?CLR-OPSTACK + ABORT" OFFSET OR IMMEDIATE OPERAND NOT ALLOWED WITH THIS INSTRUCTION" ; +' _?PARAMS IS ?PARAMS + +: _?SEG ( IS THERE A SEGMENT OVERRIDE? ) + SEG-PREFIX DATA-@ DUP ?CLR-OPSTACK + ABORT" SEGMENT OVERRIDE NOT ALLOWED WITH THIS INSTRUCTION" ; +' _?SEG IS ?SEG + +: _?LOCK ( IS THERE A LOCK PREFIX? ) + INST-PREFIX DATA-@ 0F0 = DUP ?CLR-OPSTACK + ABORT" LOCK PREFIX NOT ALLOWED WITH THIS INSTRUCTION" ; +' _?LOCK IS ?LOCK + +: _?REP ( IS THERE A REPEAT PREFIX? ) + INST-PREFIX DATA-@ 0F3 OVER = 0F2 ROT = OR DUP ?CLR-OPSTACK + ABORT" REP, ETC. NOT ALLOWED WITH THIS INSTRUCTION" ; +' _?REP IS ?REP + +: _?INST-PRE ( IS THERE ANY INSTRUCTION PREFIX? ) + INST-PREFIX DATA-@ DUP ?CLR-OPSTACK + ABORT" INSTRUCTION PREFIXES NOT ALLOWED WITH THIS INSTRUCTION" ; +' _?INST-PRE IS ?INST-PRE + +: _?OPERANDS ( ARE THERE ANY OPERANDS? ) + OP-DEPTH DUP ?CLR-OPSTACK + ABORT" OPERANDS NOT ALLOWED WITH THIS INSTRUCTION" ; +' _?OPERANDS IS ?OPERANDS + +: _?OPSIZE1 ( IS THE OPERAND SIZE MISMATCHED? ) + ( N -- ) + ?DUP IF DT-SIZE DATA-@ ?DUP IF - DUP ?CLR-OPSTACK + ABORT" OPERAND SIZE MISMATCHED" ELSE DT-SIZE DATA-! THEN THEN ; +: _?OPSIZE2 ( JUST STORE THE OPERAND SIZE ) + ( N -- ) + ?DUP IF DT-SIZE DATA-! THEN ; +' _?OPSIZE1 IS ?OPSIZE + +: _?ADSIZE1 ( IS THE ADDRESS SIZE MISMATCHED? ) + ( N -- ) + ?DUP IF AD-SIZE DATA-@ ?DUP IF - DUP ?CLR-OPSTACK + ABORT" ADDRESS SIZE MISMATCHED" ELSE AD-SIZE DATA-! THEN THEN ; +: _?ADSIZE2 ( JUST STORE THE ADDRESS SIZE ) + ( N -- ) + ?DUP IF AD-SIZE DATA-! THEN ; +' _?ADSIZE1 IS ?ADSIZE + +: _?SHORT ( IS THE ADDRESS SHORT? ) + ( -- ) + AD-SIZE DATA-@ 8BIT = DUP ?CLR-OPSTACK + ABORT" SHORT NOT ALLOWED WITH THIS INSTRUCTION" ; +' _?SHORT IS ?SHORT + +: ?NOSHORT ( DO WE HAVE AN ILLEGAL SHORT? ) + ( -- ) + IS-SHORT? IF 8BIT AD-SIZE DATA-! ?SHORT THEN ; + +: _?TOOFAR ( IS THE BRANCH OFFSET TO FAR? ) + ( FLAG -- ) + DUP ?CLR-OPSTACK + ABORT" BRANCH OFFSET TOO BIG TO FIT SPECIFIED WIDTH" ; +' _?TOOFAR IS ?TOOFAR + +: _?UNRES ( ARE THERE ANY UNRESOLVED FORWARD REFERENCE LABELS? ) + ( -- ) + FRTABLE FRMAX 0 DO DUP DATA-@ DUP ?CLR-OPSTACK + ABORT" UNRESOLVED FORWARD REFERENCE" CELL+ CELL+ LOOP DROP ; +' _?UNRES IS ?UNRES + +: _?NOADSIZE ( NO OR UNKNOWN ADDRESS SIZE ) + ( -- ) + CLR-OPSTACK -1 + ABORT" NO OR UNKNOWN ADDRESS SIZE" ; +' _?NOADSIZE IS ?NOADSIZE + +: _?TOOMANYOPS ( ARE THERE TOO MANY OPERANDS? ) + ( MAX ALLOWED OPERANDS -- ) + OP-DEPTH < DUP ?CLR-OPSTACK + ABORT" TOO MANY OPERANDS" ; +' _?TOOMANYOPS IS ?TOOMANYOPS + +: _?NOFAR ( IS THERE AN UNALLOWED FAR REFERENCE? ) + ( -- ) + AD-SIZE DATA-@ 32BIT = DUP ?CLR-OPSTACK + ABORT" FAR REFERENCES NOT ALLOWED WITH THIS INSTRUCTION" ; +' _?NOFAR IS ?NOFAR + +: <_?MATCH> ( THE ERROR ACTION FOR ?MATCH AND ?NOMATCH ) + ( FLAG -- ) + DUP ?CLR-OPSTACK + ABORT" OPERAND MISMATCH" ; + +: _?MATCH ( ERROR IF THE PARAMETERS MATCH ) + ( X1 \ X2 -- ) + = <_?MATCH> ; +' _?MATCH IS ?MATCH + +: _?NOMATCH ( ERROR IF THE PARAMETERS DON'T MATCH ) + ( X1 \ X2 -- ) + - <_?MATCH> ; +' _?NOMATCH IS ?NOMATCH + +: _?FINISHED ( ARE THERE OPERANDS LEFT? ) + ( -- ) + OP-DEPTH DUP ?CLR-OPSTACK + ABORT" UNCONSUMED OPERANDS" ; +' _?FINISHED IS ?FINISHED + +: _?BADTYPE ( IS THE OPERAND TYPE ALLOWED? ) + ( MAX TYPE ALLOWED -- ) + MAXTYPE DATA-@ < DUP ?CLR-OPSTACK + ABORT" ADDRESSING MODE NOT ALLOWED" ; +' _?BADTYPE IS ?BADTYPE + +: _?BADCOMBINE ( CAN THE OPERAND TYPES BE COMBINED? ) + ( FLAG -- ) + DUP ?CLR-OPSTACK + ABORT" ILLEGAL OPERAND COMBINATION" ; +' _?BADCOMBINE IS ?BADCOMBINE + +: _?NOTENOUGH ( ARE THERE NOT ENOUGH OPERANDS? ) + ( N -- ) + OP-DEPTH > DUP ?CLR-OPSTACK + ABORT" NOT ENOUGH OPERANDS" ; +' _?NOTENOUGH IS ?NOTENOUGH + +: _?NOIMMED ( IS THERE AN ILLEGAL IMMEDIATE OPERAND? ) + ( -- ) HAS-IMMED? DUP ?CLR-OPSTACK + ABORT" IMMEDIATE OPERANDS NOT ALLOWED WITH THIS INSTRUCTION" ; +' _?NOIMMED IS ?NOIMMED + +: _?BADMODE ( IS THE ADDRESS MODE ILLEGAL? ) + ( FLAG -- ) + DUP ?CLR-OPSTACK + ABORT" ILLEGAL ADDRESS MODE" ; +' _?BADMODE IS ?BADMODE + +: _?REG,R/M ( IS THE DESTINATION A REGISTER? ) + ( -- ) + DIRECTION? 0= MOD-R/M DATA-@ 0C0 < AND DUP ?CLR-OPSTACK + ABORT" DESTINATION MUST BE A REGISTER" ; +' _?REG,R/M IS ?REG,R/M + +: _?R/M,REG ( IS THE SOURCE A REGISTER? ) + ( -- ) + DIRECTION? MOD-R/M DATA-@ 0C0 < AND DUP ?CLR-OPSTACK + ABORT" SOURCE MUST BE A REGISTER" ; +' _?R/M,REG IS ?R/M,REG + +: _?MEM ( IS ONE OF THE OPERANDS IN MEMORY? ) + ( -- ) + MOD-R/M DATA-@ 0BF > MAYBE-HAS-OFFSET? 0= AND DUP ?CLR-OPSTACK + ABORT" INSTRUCTION REQUIRES A MEMORY OPERAND" ; +' _?MEM IS ?MEM + +: _?REG ( ARE ALL OF THE OPERANDS REGISTER? ) + ( -- ) + MOD-R/M DATA-@ 0C0 < HAS-OFFSET? OR DUP ?CLR-OPSTACK + ABORT" THIS INSTRUCTION MAY ONLY USE REGISTERS" ; +' _?REG IS ?REG + +: ?MEM,REG ( IS THE INSTRUCTION CODED AS MEMORY,REGISTER? ) + ( -- ) + ?R/M,REG ?MEM ; + +: ?REG,MEM ( IS THE INSTRUCTION CODED AS REGISTER,MEMORY? ) + ( -- ) + ?REG,R/M ?MEM ; + +: ?REGEXCLUS ( IS THE ADDRESSING MODE EXCLUSIVE? ) + ( -- ) + RTYPE DATA-@ 0 ?NOMATCH ; + +IN-ASM +: REPORT-ERRORS ( TURN ON ERROR REPORTING ) + ['] _?PARAMS IS ?PARAMS + ['] _?SEG IS ?SEG + ['] _?LOCK IS ?LOCK + ['] _?REP IS ?REP + ['] _?INST-PRE IS ?INST-PRE + ['] _?OPERANDS IS ?OPERANDS + ['] _?OPSIZE1 IS ?OPSIZE + ['] _?ADSIZE1 IS ?ADSIZE + ['] _?SHORT IS ?SHORT + ['] _?TOOFAR IS ?TOOFAR + ['] _?UNRES IS ?UNRES + ['] _?NOADSIZE IS ?NOADSIZE + ['] _?TOOMANYOPS IS ?TOOMANYOPS + ['] _?NOFAR IS ?NOFAR + ['] _?MATCH IS ?MATCH + ['] _?NOMATCH IS ?NOMATCH + ['] _?FINISHED IS ?FINISHED + ['] _?BADTYPE IS ?BADTYPE + ['] _?BADCOMBINE IS ?BADCOMBINE + ['] _?NOTENOUGH IS ?NOTENOUGH + ['] _?NOIMMED IS ?NOIMMED + ['] _?BADMODE IS ?BADMODE + ['] _?REG,R/M IS ?REG,R/M + ['] _?R/M,REG IS ?R/M,REG + ['] _?MEM IS ?MEM + ['] _?REG IS ?REG ; + +: NO-ERRORS ( TURN OFF ERROR REPORTING ) + ['] NOOP IS ?PARAMS + ['] NOOP IS ?SEG + ['] NOOP IS ?LOCK + ['] NOOP IS ?REP + ['] NOOP IS ?INST-PRE + ['] NOOP IS ?OPERANDS + ['] _?OPSIZE2 IS ?OPSIZE + ['] _?ADSIZE2 IS ?ADSIZE + ['] NOOP IS ?SHORT + ['] DROP IS ?TOOFAR + ['] NOOP IS ?UNRES + ['] NOOP IS ?NOADSIZE + ['] DROP IS ?TOOMANYOPS + ['] NOOP IS ?NOFAR + ['] 2DROP IS ?MATCH + ['] 2DROP IS ?NOMATCH + ['] NOOP IS ?FINISHED + ['] DROP IS ?BADTYPE + ['] DROP IS ?BADCOMBINE + ['] DROP IS ?NOTENOUGH + ['] NOOP IS ?NOIMMED + ['] DROP IS ?BADMODE + ['] NOOP IS ?REG,R/M + ['] NOOP IS ?R/M,REG + ['] NOOP IS ?MEM + ['] NOOP IS ?REG ; + +( GENERATE PREFIX SEQUENCES ) +IN-HIDDEN +: INST, ( GENERATE A NECESSARY INSTRUCTION PREFIX ) + ( -- ) + INST-PREFIX DATA-@ ?DUP IF CODE-C, 0 INST-PREFIX DATA-! THEN ; +: ADDR, ( GENERATE A NECESSARY ADDRESS SIZE PREFIX ) + ( -- ) + ADDR-PREFIX DATA-@ IF 67 CODE-C, 0 ADDR-PREFIX DATA-! THEN ; +: DATA, ( GENERATE A NECESSARY DATA SIZE PREFIX ) + ( -- ) + DATA-PREFIX DATA-@ IF 66 CODE-C, 0 DATA-PREFIX DATA-! THEN ; +: SEG, ( GENERATE A NECESSARY SEGMENT OVERRIDE PREFIX ) + ( -- ) + SEG-PREFIX DATA-@ ?DUP IF CODE-C, 0 SEG-PREFIX DATA-! THEN ; + +: GENERATE-PREFIXES ( GENERATE NECESSARY PREFIXES ) + ( -- ) + INST, ADDR, DATA, SEG, ; + +( THE PREFIXES ) +: SEG-PRE CREATE DATA-, DOES> DATA-@ SEG-PREFIX DATA-! ; +: INST-PRE CREATE DATA-, DOES> DATA-@ INST-PREFIX DATA-! ; +IN-ASM + 2E SEG-PRE CS: + 36 SEG-PRE SS: + 3E SEG-PRE DS: + 26 SEG-PRE ES: + 64 SEG-PRE FS: + 65 SEG-PRE GS: +0F3 INST-PRE REP +0F3 INST-PRE REPE +0F3 INST-PRE REPZ +0F2 INST-PRE REPNE +0F2 INST-PRE REPNZ +0F0 INST-PRE LOCK + +( SAVE THE P-STACK DEPTH ) +IN-HIDDEN +: SAVE-DEPTH ( -- ) + SP@ SP-SAVE DATA-! ; +: DEPTH-CHANGE ( REPORT ON A CHANGE OF DEPTH ) + SP@ SP-SAVE DATA-@ SWAP - CELL/ ; + +( CREATE AN ASSEMBLY MNEMONIC ) +: COMPILE-OPCODE ( COMPILE THE BYTES IN AN OPCODE ) + ( 0 -- | A -- | X \ A -- | X \ X' \ A -- ) + ( OS: X ... -- ) + ( A IS THE ADDRESS OF A TWO CELL DATA STRUCTURE: ) + ( OFFSET 0 -- XT OF THE ACTUAL ROUTINE TO COMPILE THE CODE ) + ( OFFSET 1 -- PARAMETER USED TO GENERATE THE CODE ) + ?DUP IF + DUP CELL+ DATA-@ SWAP DATA-@ REGISTER-ASM EXECUTE + THEN ; + +DEFER SAVE-INST ( SAVE THE CURRENT INSTRUCTION -- USED IN POSTFIX MODE ) +: _SAVE-INST ( SAVE THE CURRENT INSTRUCTION, AND FETCH THE PREVIOUS ONE ) + ( ALSO SWAPS INSTRUCTION PREFIXES ) + ( A -- A' ) + INST-SAVE DUP DATA-@ >R DATA-! R> INST-PREFIX SV-INST-PREFIX + 2DUP DATA-@ SWAP DATA-@ ROT DATA-! SWAP DATA-! ; +' _SAVE-INST IS SAVE-INST + +IN-ASM +: POSTFIX ['] _SAVE-INST IS SAVE-INST ; +: PREFIX ['] NOOP IS SAVE-INST ; + +IN-HIDDEN +: _DO-OPCODE ( CREATE THE ACTUAL OPCODE, OR AT LEAST CALL THE FUNCTIONS ) + ( THAT DO ... ) + ( X? \ X? \ 0|ADDR -- ) + SAVE-INST COMPILE-OPCODE RESET-FOR-NEXT-INSTR SAVE-DEPTH ; +' _DO-OPCODE IS DO-OPCODE + +: OPCODE ( C:: PARAMETER \ XT -- ) + ( R:: -- | X -- | X \ X' -- ) + ( R::OS: X ... -- ) + CREATE DATA-, DATA-, DOES> DO-OPCODE ; + +( SUPPORT ROUTINES FOR CREATING ASSEMBLY CODE ) +: ALL-EXCEPT ( PROCESS ALL OPERANDS EXCEPT ONE IN PARTICULAR ) + ( X \ N -- TYPE \ MOD-R/M {X!=N} | -- 0 \ 0 ) + OVER = IF DROP 0 0 ELSE >R >R ?ADSIZE ?OPSIZE R> R> THEN ; + +: OFFSET8, ( CREATE AN 8 BIT CODE-HERE RELATIVE OFFSET ) + ( ADDR -- ) + 8B-REL REGISTER-REF CODE-HERE 1+ - DUP ABS 7F > ?TOOFAR CODE-C, ; +: OFFSET16, ( CREATE A 16 BIT CODE-HERE RELATIVE OFFSET ) + ( ADDR -- ) + 16B-REL REGISTER-REF CODE-HERE 2+ - DUP ABS 7FFF > ?TOOFAR CODE-W, ; +: OFFSET32, ( CREATE A 32 BIT CODE-HERE RELATIVE OFFSET ) + ( ADDR -- ) + 32B-REL REGISTER-REF CODE-HERE 4+ - CODE-D, ; +: OFFSET16/32, ( CREATE A 16 OR 32 BIT CODE-HERE RELATIVE OFFSET ) + ( ADDR \ 16BIT? -- ) + IF OFFSET16, ELSE OFFSET32, THEN ; + +: FLAG-FOR-SIZE-PREFIX ( DO WE NEED A SIZE PREFIX? ) + ( SIZE -- FLAG ) + DUP IF DUP 8BIT - IF DEFAULT-SIZE - ELSE DROP 0 THEN THEN ; +: CHECK-AD-SIZE ( CHECK THE ADDRESS SIZE ) + ( -- ) + AD-SIZE DATA-@ FLAG-FOR-SIZE-PREFIX ADDR-PREFIX DATA-! ; +: CHECK-DT-SIZE ( CHECK THE OPERAND SIZE ) + ( -- ) + DT-SIZE DATA-@ FLAG-FOR-SIZE-PREFIX DATA-PREFIX DATA-! ; +: CHECK-SIZES ( CHECK THE ADDRESS AND OPERAND SIZES ) + ( -- ) + CHECK-AD-SIZE CHECK-DT-SIZE ; +: RTYPE! ( STORE THE ADDRESSING MODE TYPE AND UPDATE MAXTYPE ) + ( TYPE -- ) + DUP RTYPE DATA-! MAXTYPE DATA-@ OVER < IF MAXTYPE DATA-! ELSE + DROP THEN ; +: SPECIAL-PROCESS? ( DO WE NEED TO SPECIALLY PROCESS THIS REGISTER? ) + ( -- FLAG ) + MAXTYPE DATA-@ DUP REGISTER > SWAP FREG < AND ; +: SPECIAL-REGISTER? ( IS THIS A SPECIAL REGISTER? ) + ( -- FLAG ) + RTYPE DATA-@ DUP REGISTER > SWAP FREG < AND ; +: DO-REG ( DO ANY REGISTER ADDRESSING MODE TRANSLATION ) + ( REG \ TYPE -- ) + ?REGEXCLUS RTYPE! DO-1OP-EXED? IF + HAS-MOD-R/M? IF + MOD-R/M DATA-@ SWAP SPECIAL-PROCESS? IF + SPECIAL-REGISTER? IF + 8*+ REG,R/M + ELSE + MAXTYPE DATA-@ SREG = IF + C0+ SWAP C0-8* + + ELSE + C0+ + + THEN R/M,REG + THEN + ELSE + 8*+ REG,R/M + THEN + ELSE ( *MUST* BE REG,DISP OR REG,IMMED ) + C0+ REG,R/M HAS-MOD-R/M HAS-IMMED? 0= IF + HAS-OFFSET + THEN + THEN + ELSE ( FIRST TIME THROUGH DO-1OP ) + SPECIAL-REGISTER? RTYPE DATA-@ SREG <> AND IF + 8* + ELSE ( EITHER A GENERAL OR SEGMENT REGISTER ) + C0+ + THEN HAS-MOD-R/M R/M,REG + THEN MOD-R/M DATA-! ; +: DO-IMMED ( DO AN IMMEDIATE ADDRESSING MODE OPERAND ) + ( X \ 0 -- ) + DROP IMMED-SV DATA-! HAS-IMMED IMMEDIATE RTYPE! ; +: DO-INDIRE ( DO AN INDIRECT ADDRESSING MODE OPERAND ) + ( REG -- ) + HAS-MOD-R/M? IF + MOD-R/M DATA-@ DUP 0BF > IF + C0-8* + + ELSE + + + THEN + ELSE + HAS-MOD-R/M + THEN MOD-R/M DATA-! HAS-BASE ; +: DO-INDEX ( DO A SCALED INDEX ADDRESSING MODE ) + ( REG -- ) + HAS-S-I-B 8* S-I-B DATA-@ 8/ + S-I-B DATA-! HAS-MOD-R/M? IF + MOD-R/M DATA-@ DUP 0BF > IF + C0-8* 4+ + ELSE + [ 7 -1 XOR ] LITERAL AND 4+ + THEN + ELSE + 4 HAS-MOD-R/M + THEN MOD-R/M DATA-! ; +: DO-BASED ( DO A BASE REGISTER ADDRESSING MODE ) + ( REG -- ) + HAS-MOD-R/M? IF + MOD-R/M DATA-@ DUP 0BF > IF + C0-8* OVER 8* S-I-B DATA-! + + ELSE + MAYBE-S-I-B? IF + HAS-S-I-B S-I-B ROT OVER DATA-@ + SWAP + DATA-! [ 7 -1 XOR ] LITERAL AND 4+ + ELSE + OVER 8* S-I-B DATA-! + + THEN + THEN + ELSE + DUP 8* S-I-B DATA-! HAS-MOD-R/M + THEN MOD-R/M DATA-! HAS-BASE ; + +: OPERAND-CASES ( PROCESS AN OPERAND BASED ON ITS TYPE ) + ( REG \ TYPE -- | X \ REG \ TYPE -- ) + CASE UNKNOWN OF + DROP + ENDOF IMMEDIATE OF + DO-IMMED + ENDOF INDIRECT OF + ?REGEXCLUS INDIRECT RTYPE! DO-INDIRE + ENDOF INDEX OF + RTYPE DATA-@ ?DUP IF BASED ?NOMATCH THEN INDEX RTYPE! DO-INDEX + ENDOF BASED OF + RTYPE DATA-@ ?DUP IF BASED OVER = INDEX ROT = OR 0= ?BADCOMBINE + THEN BASED RTYPE! DO-BASED + ENDOF ( MUST BE A REGISTER TYPE ) DO-REG DUP ( SO ENDCASE HAS ) + ( SOMETHING TO DISCARD ) ENDCASE ; +: SAVE-OFFSET ( SAVE THE OFFSET, IF IT'S PRESENT ) + ( X -- | -- ) + DEPTH-CHANGE IF MAYBE-HAS-OFFSET ?DUP IF OFFSET-SV DATA-! HAS-OFFSET + THEN THEN ; +: DO-1OP ( PROCESS A SINGLE OPERAND ) + ( -- | X -- | X \ X' -- ) + 0 RTYPE DATA-! BEGIN OP-DEPTH IF POP-OP ELSE FALSE THEN ?DUP WHILE + 0 ALL-EXCEPT SWAP OPERAND-CASES REPEAT SAVE-OFFSET DO-1OP-EXED ; +: LIT-OP ( INSTERT THE LITERAL VALUE OF AN OPERAND INTO CODE ) + ( C:: -- ) + ( R:: -- X ) + ' >BODY DATA-@ POSTPONE LITERAL ; ALSO FORTH IMMEDIATE IN-HIDDEN +: PARSE-CALL/JMP-OPERANDS ( PARSE THE OPERANDS FOR CALLS AND JUMPS ) + ( -- | X -- ) + 0 RTYPE DATA-! BEGIN OP-DEPTH WHILE POP-OP DUP LIT-OP SHORT = OVER + LIT-OP NEAR = OR OVER LIT-OP FAR = OR IF CASE LIT-OP SHORT OF + IS-SHORT ENDOF LIT-OP NEAR OF IS-NEAR ENDOF IS-FAR ENDCASE ELSE + 0 ALL-EXCEPT SWAP OPERAND-CASES THEN REPEAT ?NOIMMED SAVE-OFFSET ; +: DO-2OPS ( DO TWO OPERANDS AND SET SIZE PREFIXES ) + ( -- | X -- | X \ X -- ) + DO-1OP DO-1OP CHECK-SIZES ; +: INSTALL-/R ( INSTALL THE /R FIELD IN A MOD-R/M BYTE ) + ( /R VALUE -- ) + 8* MOD-R/M DATA-@ [ 7 8* -1 XOR ] LITERAL AND OR MOD-R/M DATA-! ; + +: DISP, ( COMPILE THE DISPLACEMENT ) + ( -- ) + HAS-OFFSET? IF OFFSET-SV DATA-@ DUP ABS 7F > HAS-FULL-OFF? OR + IF AD-SIZE DATA-@ 16BIT = IF 16B-ABS REGISTER-REF CODE-W, ELSE 32B-ABS + REGISTER-REF CODE-D, THEN ELSE 8B-ABS REGISTER-REF CODE-C, THEN THEN ; + +: DEFAULT-8BIT ( CHANGE A ZERO SIZE TO 8BIT ) + ( SIZE -- SIZE' ) + ?DUP 0= IF 8BIT THEN ; +: >DEFAULT-SIZE ( CHANGE A ZERO SIZE TO THE DEFAULT SIZE ) + ( SIZE -- SIZE' ) + ?DUP 0= IF DEFAULT-SIZE THEN ; +: GET-DT-SIZE ( GET THE CURRENT DATA SIZE, DEFAULT IS 8 BIT ) + ( -- DATA SIZE ) + DT-SIZE DATA-@ DEFAULT-8BIT ; +: GET-AD-SIZE ( GET THE CURRENT ADDRESS SIZE, DEFAULT IS DEFAULT-SIZE ) + ( -- ADDRESS SIZE ) + AD-SIZE DATA-@ >DEFAULT-SIZE ; +: GET-FP-SIZE ( GET THE SIZE OF FP OPERAND, DEFAULT IS DEFAULT-SIZE ) + DT-SIZE DATA-@ >DEFAULT-SIZE ; + +: IMMED, ( COMPILE THE IMMEDIATE OPERAND ) + ( -- ) + HAS-IMMED? IF + IMMED-SV DATA-@ GET-DT-SIZE CASE + 8BIT OF 8B-ABS REGISTER-REF CODE-C, ENDOF + 16BIT OF 16B-ABS REGISTER-REF CODE-W, ENDOF + 32BIT OF 32B-ABS REGISTER-REF CODE-D, ENDOF + ?NOADSIZE DROP + ENDCASE + THEN ; + +: 8BIT? ( IS THE OPERATION 8 BITS WIDE? ) + ( -- FLAG ) + GET-DT-SIZE 8BIT = ; +: A16BIT? ( IS THE ADDRESS SIZE 16 BITS? ) + ( -- FLAG ) + GET-AD-SIZE 16BIT = ; +: A32BIT? ( IS THE ADDRESS SIZE 32 BITS? ) + ( -- FLAG ) + GET-AD-SIZE 32BIT = ; + +: S-I-B, ( COMPILE THE S-I-B BYTE ) + ( -- ) + HAS-S-I-B? A32BIT? AND IF S-I-B DATA-@ CODE-C, THEN ; + +: +SIZE-BIT ( ADJUST AN OPCODE FOR THE SIZE OF THE OPERATION ) + ( OP-CODE -- OP-CODE' ) + 8BIT? 0= IF 1+ THEN ; +: +DIRECT-BIT ( ADJUST AN OPCODE FOR THE DIRECTION OF THE OPERANDS ) + ( OP-CODE -- OP-CODE' ) + DIRECTION? IF 2+ THEN ; + +: MATCH-R/M? ( DOES THE VALUE MATCH THE R/M FIELD OF THE MOD-R/M? ) + ( VALUE -- FLAG ) + MOD-R/M DATA-@ 7 AND = ; +: PURE-REG? ( IS THE MOD FIELD OF THE MOD-R/M = 3? ) + ( -- FLAG ) + MOD-R/M DATA-@ 0BF > ; +: DISPLACEMENT? ( DOES THE ADDRESS MODE HAVE A PURE DISPLACEMENT? ) + ( -- FLAG ) + HAS-MOD-R/M? IF PURE-REG? MAYBE-HAS-OFFSET? AND ELSE TRUE THEN ; +: [(E)BP]? ( DOES THE ADDRESS MODE HAVE EITHER [BP] OR [EBP] ALONE? ) + ( -- FLAG ) + A16BIT? 6 MATCH-R/M? AND A32BIT? 5 MATCH-R/M? AND OR MOD-R/M + DATA-@ 40 < AND ; +: [REG*N]? ( DOES IT HAVE ONLY AN INDEX REGISTER? ) + ( -- FLAG ) + HAS-S-I-B? HAS-BASE? 0= AND ; +: [ESP][REG]? ( DOES IT HAVE ESP AS AN INDEX REGISTER? ) + ( -- FLAG ) + S-I-B DATA-@ 8/ 4 = ; +: [ESP]? ( DOES IT HAVE ONLY A BASE OF ESP? ) + ( -- FLAG ) + A32BIT? HAS-BASE? HAS-S-I-B? 0= 4 MATCH-R/M? AND AND AND ; + +: DO-[(E)BP] ( DO A NAKED [BP] OR [EBP] ) + ( -- ) + [(E)BP]? IF HAS-OFFSET THEN ; +: DO-DISP ( PROCESS A DISPLACEMENT ) + ( -- ) + MOD-R/M DATA-@ DUP 0BF > IF C0-8* THEN 5 + A16BIT? IF 1+ THEN + CODE-C, HAS-FULL-OFF ; +: DO-[REG*N] ( PROCESS A NAKED INDEX ) + ( -- ) + [REG*N]? IF HAS-FULL-OFF 5 S-I-B DATA-+! -80 MOD-R/M DATA-+! THEN ; +: DO-[ESP][REG] ( SWAP INDEX AND BASE REGISTERS IN S-I-B ) + ( -- ) + [ESP][REG]? IF S-I-B DATA-@ 7 AND 8* 4+ S-I-B DATA-! THEN ; +: DO-[ESP] ( DO [ESP] ONLY ) + ( -- ) + [ESP]? IF 24 S-I-B DATA-! HAS-S-I-B THEN ; +: MOD-R/M, ( COMPILE THE MOD-R/M FIELD ) + ( -- ) + DISPLACEMENT? IF DO-DISP ELSE DO-[(E)BP] DO-[ESP][REG] DO-[REG*N] + DO-[ESP] MOD-R/M DATA-@ HAS-OFFSET? IF OFFSET-SV DATA-@ ABS + 7F > HAS-FULL-OFF? OR IF 80 ELSE 40 THEN + THEN CODE-C, THEN ; +: COMPILE-FIELDS ( COMPILE THE MOD-R/M, S-I-B, DISPLACEMENT, AND IMMED FIELDS ) + ( -- ) + MOD-R/M, S-I-B, DISP, IMMED, ; +: GENERIC-ENTRY2 ( GENERIC ENTRY SEQUENCE FOR TWO OPERAND INSTRUCTIONS ) + ( PARAM \ MAX TYPE -- ) + ( | X \ PARAM \ MAX TYPE -- ) + ( | X \ X' \ PARAM \ MAX TYPE -- ) + 2>R DO-2OPS ?FINISHED 2R> ?BADTYPE GENERATE-PREFIXES ; +: +FP-SIZE ( ADD 4 IF THE OPERATION SIZE IS 64BIT: IE., DEFAULT FLOAT ) + ( N -- N' ) + DT-SIZE DATA-@ 64BIT = IF 4+ THEN ; +: /R&FREG>MOD-R/M ( TURN /R AND FP REG INTO THE RQD MOD-R/M ) + ( /R \ FREG -- MOD-R/M ) + SWAP 8*+ C0+ ; +: SWAP-REGS ( SWAP THE ORDER OF REGISTERS IN THE MOD-R/M BYTE ) + ( -- ) + MOD-R/M DATA-@ DUP 0BF > IF 3F AND 8 /MOD /R&FREG>MOD-R/M THEN MOD-R/M + DATA-! ; +: PARSE-FP-OPS ( PARSE FLOATING POINT INSTRUCTION OPERANDS ) + ( -- N | X -- N ) + DEPTH-CHANGE 0<> OP-DEPTH 0<> OR IF DO-1OP OP-DEPTH IF DO-1OP 2 ELSE + 1 THEN ELSE 0 THEN ?NOIMMED ?FINISHED CHECK-SIZES ; +: MOD-R/M>FREG ( CONVERT MOD-R/M BYTE INTO AN FP REGISTER NUMBER ) + ( -- N ) + MOD-R/M DATA-@ C0- DUP 7 > IF 8/ THEN ; +: FP-DIRECTION? ( WHICH DIRECTION IS THE FLOATING POINT DATA GOING? ) + ( -- FLAG ) + MOD-R/M DATA-@ 0C7 > ; +: +FP-DIRECT-BIT ( ADD 4, DEPENDING ON THE DIRECTION OF THE OPERANDS ) + ( X -- X' ) + FP-DIRECTION? IF 4+ THEN ; +: FP-GENERIC-ASSEMBLE ( GENERIC ASSEMBLY OF FLOATING POINT INSTRUCTIONS ) + ( OPCODE \ /R FIELD -- ) + INSTALL-/R ADDR, SEG, CODE-C, COMPILE-FIELDS ; +: SAVE-IMMED ( SAVE IMMEDIATE OPERANDS FOR DOUBLE-SHIFT ) + ( X \ PARAM -- PARAM ) + SWAP IMMED-SV DATA-! HAS-IMMED ; +: NEXT-IS-, ( MAKE SURE THE NEXT OPERAND IS A COMMA ) + ( -- ) + POP-OP LIT-OP , - ?BADMODE ; + +( THE ASSEMBLY ENGINE WORDS -- ACTUALLY DO THE ASSEMBLY ) +( SIMPLE ASSEMBLY INSTRUCTIONS -- NO-BRAINERS ) +: 1BYTE ( COMPILE A SINGLE BYTE, NO OPERAND, NO OVERRIDE OPCODE ) + ( PARAM -- ) + >R ?PARAMS R> ?SEG ?INST-PRE ?OPERANDS CODE-C, ; +: 2BYTE ( COMPILE A TWO BYTE, NO OPERAND, NO OVERRIDE OPCODE ) + ( PARAM -- ) + >R ?PARAMS R> ?SEG ?INST-PRE ?OPERANDS CODE-W, ; +: 3BYTE ( COMPILE A THREE BYTE, NO OPERAND, NO OVERRIDE OPCODE ) + ( PARAM -- ) + >R ?PARAMS R> ?SEG ?INST-PRE ?OPERANDS 10000 /MOD SWAP CODE-W, + CODE-C, ; +: SIZE-COND-COMP ( COMPILE A SIZE CONDITIONAL ASSEMBLY SEQUENCE ) + ( PARAM -- ) + >R ?PARAMS R> ?SEG ?INST-PRE ?OPERANDS 100 /MOD DEFAULT-SIZE - IF + 66 CODE-C, THEN CODE-C, ; + +( STRING INSTRUCTIONS ) +: STR-ENTRY ( CHECK FOR ENTRY ERROR CONDITIONS ) + ( PARAM -- PARAM ) + >R ?PARAMS R> ?LOCK SEG-PREFIX DATA-@ ?DUP IF 3E OVER - 0<> + 26 ROT - 0<> AND IF ?SEG THEN 0 SEG-PREFIX DATA-! THEN ; +: STR-OPERANDS ( PROCESS OPERANDS FOR STRING INSTRUCTIONS ) + ( -- ) + BEGIN OP-DEPTH WHILE POP-OP LIT-OP DX ALL-EXCEPT 2DROP REPEAT ; +: STR-INST ( THE ENGINE TO CREATE STRING INSTRUCTIONS ) + ( PARAM -- ) + STR-ENTRY STR-OPERANDS ?SHORT CHECK-SIZES + DT-SIZE DATA-@ DUP 0= 8BIT ROT = OR 0= IF 1+ THEN + GENERATE-PREFIXES CODE-C, ; +: BYTE-STR-INST ( BYTE STRING INSTRUCTIONS ) + ( PARAM -- ) + BYTE STR-INST ; +: WORD-STR-INST ( WORD STRING INSTRUCTIONS ) + ( PARAM -- ) + WORD STR-INST ; +: DWORD-STR-INST ( DWORD STRING INSTRUCTIONS ) + ( PARAM -- ) + DWORD STR-INST ; + +( CONDITIONAL BRANCH INSTRUCTIONS ) +: JCC-ENTRY ( THE ENTRY SEQUENCE FOR CONDITIONAL BRANCH INSTRUCTIONS ) + ( -- ) + ?SEG ?INST-PRE 1 ?TOOMANYOPS OP-DEPTH IF POP-OP 0 ALL-EXCEPT + 2DROP ?NOFAR AD-SIZE DATA-@ 16BIT = IF DEFAULT-SIZE AD-SIZE DATA-! + THEN DT-SIZE DATA-@ ?DUP IF AD-SIZE DATA-! THEN THEN ; +: JCC-8BIT ( COMPILE AN 8 BIT CONDITIONAL BRANCH ) + ( ADDR \ PARAM -- ) + CODE-C, OFFSET8, ; +: JCC-16/32BIT ( COMPILE A 16 OR 32BIT CONDITIONAL BRANCH ) + ( ADDR \ PARAM \ SIZE -- ) + DUP >R FLAG-FOR-SIZE-PREFIX IF 67 ( ADDRESS SIZE PREFIX ) CODE-C, + THEN 0F CODE-C, 10 + CODE-C, R> 16BIT = OFFSET16/32, ; +: JCC-UNKNOWN ( COMPILE A CONDITIONAL BRANCH WITH AN UNKNOWN SIZE ) + ( ADDR \ PARAM -- ) + OVER CODE-HERE = IF ( UNRESOLVED FORWARD REFERENCE ) + DEFAULT-SIZE JCC-16/32BIT + ELSE + OVER CODE-HERE 2+ SWAP - ABS 7F > IF ( CAN'T BE SHORT ) + DEFAULT-SIZE JCC-16/32BIT + ELSE ( IT CAN BE SHORT ) + JCC-8BIT + THEN + THEN ; +: JCC-COMPILE ( COMPILE A CONDITIONAL BRANCH ) + ( ADDR \ PARAM -- ) + JCC-ENTRY AD-SIZE DATA-@ CASE + UNKNOWN OF JCC-UNKNOWN ENDOF + 8BIT OF JCC-8BIT ENDOF + 16BIT OF 16BIT JCC-16/32BIT ENDOF + 32BIT OF 32BIT JCC-16/32BIT ENDOF + ?NOADSIZE 2DROP ENDCASE ; + +( LOOP INSTRUCTIONS ) +: LOOP-ENTRY ( THE ENTRY SEQUENCE FOR LOOP INSTRUCTIONS ) + ( -- ) + ?SEG ?INST-PRE 2 ?TOOMANYOPS OP-DEPTH IF POP-OP ?DUP 0= IF POP-OP + THEN 0 ALL-EXCEPT OP-DEPTH IF POP-OP DROP THEN 1 ?NOMATCH + REGISTER ?NOMATCH DT-SIZE DATA-@ DUP 8BIT ?MATCH ELSE DEFAULT-SIZE + THEN AD-SIZE DATA-! ; +: LOOP-COMPILE ( COMPILE A LOOP INSTRUCTION ) + ( ADDRESS \ PARAM -- ) + LOOP-ENTRY AD-SIZE DATA-@ FLAG-FOR-SIZE-PREFIX IF 67 CODE-C, THEN + JCC-8BIT ; + +( JCXZ/JECXZ ) +: JCXZ-COMPILE ( COMPILE JCXZ ) + ( ADDRESS \ PARAM -- ) + CX LOOP-COMPILE ; +: JECXZ-COMPILE ( COMPILE JECXZ ) + ( ADDRESS \ PARAM -- ) + ECX LOOP-COMPILE ; + +( GROUP 1 INSTRUCTIONS -- ADD, ETC. ) +: GROUP1-COMPILE ( COMPILE GROUP 1 INSTRUCTIONS ) + ( PARAM -- | X \ PARAM -- | X \ X \ PARAM -- ) + ?REP REGISTER GENERIC-ENTRY2 HAS-IMMED? IF 80 +SIZE-BIT IMMED-SV + DATA-@ 80 OVER > -81 ROT < AND GET-DT-SIZE 8BIT <> AND IF 2+ 8BIT + DT-SIZE DATA-! THEN SWAP INSTALL-/R ELSE 8* +SIZE-BIT +DIRECT-BIT + THEN GENERATE-PREFIXES CODE-C, COMPILE-FIELDS ; + +( GROUP 2 INSTRUCTIONS -- RCL, ETC. ) +: GROUP2-COMPILE ( COMPILE GROUP 2 INSTRUCTIONS ) + ( PARAM -- | X \ PARAM -- | X \ X \ PARAM -- ) + ?INST-PRE 1 ?NOTENOUGH >R POP-OP CASE + LIT-OP , OF 0 SAVE-IMMED DROP ENDOF + LIT-OP # OF 0 SAVE-IMMED DROP NEXT-IS-, ENDOF + LIT-OP CL OF NEXT-IS-, ENDOF + DUP PUSH-OP 1 0 SAVE-IMMED DROP + ENDCASE DO-1OP CHECK-SIZES REGISTER ?BADTYPE HAS-IMMED? IF 0C0 + ELSE 0D2 THEN +SIZE-BIT GENERATE-PREFIXES CODE-C, R> INSTALL-/R + MOD-R/M, S-I-B, DISP, 8BIT DT-SIZE DATA-! IMMED, ; + +( GROUP 3 INSTRUCTIONS -- DIV, ETC. ) +: GROUP3-COMPILE ( COMPILE GROUP 3 INSTRUCTIONS ) + ( PARAM -- | X \ PARAM -- ) + ?REP >R DO-1OP BEGIN OP-DEPTH WHILE POP-OP 0 ALL-EXCEPT 2DROP REPEAT + ?NOIMMED REGISTER ?BADTYPE CHECK-SIZES GENERATE-PREFIXES R> INSTALL-/R + 0F6 +SIZE-BIT CODE-C, COMPILE-FIELDS ; +: TEST-COMPILE ( COMPILE THE TEST INSTRUCTION, WHICH IS A SPECIAL GROUP3 INS ) + ( PARAM -- | X \ PARAM -- | X \ X' \ PARAM -- ) + ?INST-PRE REGISTER GENERIC-ENTRY2 DROP HAS-IMMED? IF 0F6 0 INSTALL-/R + ELSE 84 THEN +SIZE-BIT CODE-C, COMPILE-FIELDS ; + + +( INC AND DEC ) +: INC-DEC-ENTRY ( PARAM -- | X \ PARAM -- ) + ?REP >R DO-1OP R> + CHECK-SIZES ?FINISHED REGISTER ?BADTYPE + GENERATE-PREFIXES + MAXTYPE @ REGISTER = +; + +: INC-COMPILE ( COMPILE AN INC OR DEC ) + ( PARAM -- | X \ PARAM -- ) + INC-DEC-ENTRY + IF MOD-R/M DATA-@ [ 40 C0 - ] LITERAL + CODE-C, DROP EXIT + ELSE 0FE +SIZE-BIT CODE-C, + THEN + INSTALL-/R COMPILE-FIELDS +; + +: DEC-COMPILE ( COMPILE AN INC OR DEC ) + ( PARAM -- | X \ PARAM -- ) + INC-DEC-ENTRY + IF MOD-R/M DATA-@ [ 48 C0 - ] LITERAL + CODE-C, DROP EXIT + ELSE 0FE +SIZE-BIT CODE-C, + THEN + INSTALL-/R COMPILE-FIELDS +; + +( GROUP 6 AND 7 INSTRUCTIONS -- SLDT, SGDT, ETC. ) +: GROUP6&7-COMPILE ( COMPILE A GROUP 6 OR 7 INSTRUCTION ) + ( PARAM -- | X \ PARAM -- ) + ?INST-PRE >R DO-1OP R> ?FINISHED DUP 100 > OVER 0FF AND 4 <> AND + IF ?MEM THEN CHECK-SIZES ADDR, SEG, 0F CODE-C, 100 /MOD CODE-C, + INSTALL-/R COMPILE-FIELDS ; + +( GROUP 8 INSTRUCTIONS -- BT, ETC. ) +: GROUP8-COMPILE ( COMPILE A GROUP 8 INSTRUCTION ) + ( PARAM -- | X \ PARAM -- | X \ X' \ PARAM -- ) + ?REP REGISTER GENERIC-ENTRY2 0F CODE-C, HAS-IMMED? IF INSTALL-/R BA + ELSE 8* 83 + ?R/M,REG THEN CODE-C, MOD-R/M, S-I-B, DISP, 8BIT DT-SIZE + DATA-! IMMED, ; + +( ENTER ) +: ENTER-COMPILE ( COMPILE THE ENTER INSTRUCTION ) + ( X \ X' \ PARAM -- ) + 3 ?TOOMANYOPS ?INST-PRE ?SEG CLR-OPSTACK DROP 0C8 CODE-C, SWAP + CODE-W, CODE-C, ; + +( ARPL ) +: ARPL-COMPILE ( COMPILE THE ARPL INSTRUCTION ) + ( PARAM -- | X \ PARAM -- ) + ?INST-PRE DROP DO-2OPS ?FINISHED REGISTER ?BADTYPE ?R/M,REG ?NOIMMED + ADDR, SEG, 63 CODE-C, SWAP-REGS COMPILE-FIELDS ; + +( ECHANGE & ALU INSTRUCTIONS -- CMPXCHG, XADD ) +: XCHG&ALU-COMPILE ( COMPILE CMPXCHG OR XADD ) + ( PARAM -- | X \ PARAM -- ) + ?REP REGISTER GENERIC-ENTRY2 ?R/M,REG ?NOIMMED 0F CODE-C, +SIZE-BIT + CODE-C, SWAP-REGS COMPILE-FIELDS ; + +( CMPXCHG8B -- PENTIUM INSTRUCTION SET ) +: CMPXCHG8B-COMP ( ASSEMBLE CMPXCHG8B ) + ( PARAM -- ) + ?REP DROP ?PARAMS DO-1OP CHECK-AD-SIZE DT-SIZE DATA-@ ?DUP IF 64BIT <> + ?BADMODE THEN ?MEM ?NOIMMED GENERATE-PREFIXES 0C70F CODE-W, + COMPILE-FIELDS ; + +( BOUND CHECKING ) +: BOUND-COMPILE ( COMPILE THE BOUND INSTRUCTION ) + ( PARAM -- | X \ PARAM -- ) + ?INST-PRE REGISTER GENERIC-ENTRY2 ?REG,MEM ?NOIMMED DROP 62 CODE-C, + COMPILE-FIELDS ; + +( BSWAP ) +: BSWAP-COMPILE ( COMPILE BSWAP ) + ( PARAM -- ) + ?INST-PRE ?SEG DROP ?PARAMS 1 ?TOOMANYOPS POP-OP 0 ALL-EXCEPT SWAP + REGISTER ?NOMATCH 0F CODE-C, 0C8 + CODE-C, ; + +( PUSH AND POP ) +: PUSH/POP-ENTRY ( ENTRY SEQUENCE FOR PUSH AND POP COMPILERS ) + ( PARAM -- ) + ?INST-PRE DROP DO-1OP ?FINISHED SREG ?BADTYPE CHECK-SIZES + SREG MAXTYPE DATA-@ - IF GENERATE-PREFIXES THEN MAXTYPE DATA-@ ; + +: PUSH-COMPILE ( COMPILE PUSH ) + ( PARAM -- | X \ PARAM -- ) + PUSH/POP-ENTRY CASE + UNKNOWN OF A16BIT? IF 6 ELSE 5 THEN MOD-R/M DATA-! 6 + INSTALL-/R 0FF CODE-C, MOD-R/M DATA-@ CODE-C, + HAS-FULL-OFF DISP, + ENDOF REGISTER OF MOD-R/M DATA-@ [ 50 C0- ] LITERAL + + CODE-C, + ENDOF SREG OF MOD-R/M DATA-@ C0-8* 6 + DUP 1E > IF 0F CODE-C, + [ 0A0 26 - ] LITERAL + THEN CODE-C, + ENDOF IMMEDIATE OF IMMED-SV DATA-@ ABS 7F > IF 68 GET-FP-SIZE + DT-SIZE DATA-! ELSE 6A 8BIT DT-SIZE DATA-! THEN + CODE-C, IMMED, + ENDOF 0FF CODE-C, 6 INSTALL-/R COMPILE-FIELDS + ENDCASE ; + +: POP-COMPILE ( COMPILE POP ) + ( PARAM -- | X \ PARAM -- ) + PUSH/POP-ENTRY ?NOIMMED CASE + UNKNOWN OF A16BIT? IF 6 ELSE 5 THEN MOD-R/M DATA-! 0 + INSTALL-/R 8F CODE-C, MOD-R/M DATA-@ CODE-C, + HAS-FULL-OFF DISP, + ENDOF REGISTER OF MOD-R/M DATA-@ [ 58 C0- ] LITERAL + + CODE-C, + ENDOF SREG OF MOD-R/M DATA-@ C0-8* 7 + DUP 1F > IF 0F CODE-C, + [ 0A1 27 - ] LITERAL + THEN CODE-C, + ENDOF 8F CODE-C, 0 INSTALL-/R COMPILE-FIELDS + ENDCASE ; + +( CALL AND JMP ) +: CALL/JMP-ENTRY ( ENTRY FOR CALL AND JUMP ) + ( PARAM -- ) + DROP ?INST-PRE PARSE-CALL/JMP-OPERANDS REGISTER ?BADTYPE CHECK-SIZES ; +: CALL-COMPILE ( COMPILE CALL ) + ( PARAM -- | X \ PARAM -- ) + CALL/JMP-ENTRY ?NOSHORT GENERATE-PREFIXES IS-NEAR? IF HAS-MOD-R/M? + IF 0FF CODE-C, 2 INSTALL-/R COMPILE-FIELDS ELSE 0E8 CODE-C, OFFSET-SV + DATA-@ A16BIT? OFFSET16/32, THEN ELSE HAS-MOD-R/M? IF 0FF CODE-C, 3 + INSTALL-/R COMPILE-FIELDS ELSE 9A CODE-C, OFFSET-SV DATA-@ A16BIT? + IF CODE-W, ELSE CODE-D, THEN CODE-W, THEN THEN ; +: JMP-COMPILE ( COMPILE JMP ) + ( PARAM -- | X \ PARAM -- ) + CALL/JMP-ENTRY GENERATE-PREFIXES IS-SHORT? IF OFFSET-SV DATA-@ 0EB + CODE-C, OFFSET8, ELSE IS-NEAR? IF HAS-MOD-R/M? IF 0FF CODE-C, 4 + INSTALL-/R COMPILE-FIELDS ELSE 0E9 CODE-C, OFFSET-SV DATA-@ A16BIT? + OFFSET16/32, THEN ELSE HAS-MOD-R/M? IF 0FF CODE-C, 5 INSTALL-/R + COMPILE-FIELDS ELSE 0EA CODE-C, OFFSET-SV DATA-@ A16BIT? IF CODE-W, + ELSE CODE-D, THEN CODE-W, THEN THEN THEN ; + +( I/O INSTRUCTIONS ) +: I/O-COMPILE ( COMPILE AN IN OR OUT ) + ( PARAM -- | X \ PARAM -- ) + ?INST-PRE ?SEG 3 ?TOOMANYOPS >R DEPTH-CHANGE IF IMMED-SV DATA-! + HAS-IMMED THEN R> BEGIN OP-DEPTH WHILE POP-OP CASE + LIT-OP , OF ( DISCARD IT ) ENDOF + LIT-OP DX OF ( DISCARD IT ) ENDOF + LIT-OP # OF ( DISCARD IT ) ENDOF + LIT-OP AL OF 8BIT ?OPSIZE ENDOF + LIT-OP BYTE OF 8BIT ?OPSIZE ENDOF + LIT-OP AX OF 16BIT ?OPSIZE ENDOF + LIT-OP WORD OF 16BIT ?OPSIZE ENDOF + LIT-OP EAX OF 32BIT ?OPSIZE ENDOF + LIT-OP DWORD OF 32BIT ?OPSIZE ENDOF + -1 ?BADMODE + ENDCASE REPEAT CHECK-DT-SIZE DATA, +SIZE-BIT HAS-IMMED? + IF CODE-C, IMMED-SV DATA-@ CODE-C, ELSE 8+ CODE-C, THEN ; + +( BIT SCAN INSTRUCTIONS ) +: BS-COMPILE ( COMPILE A BIT SCAN INSTRUCTION, AND ALSO SELECTOR VALIDATION ) + ( PARAM -- | X \ PARAM -- ) + ?INST-PRE REGISTER GENERIC-ENTRY2 ?NOIMMED ?REG,R/M 0F CODE-C, CODE-C, + COMPILE-FIELDS ; + +( MOV INSTRUCTION ) +: MOV-COMPILE ( COMPILE A MOV INSTRUCTION ) + ( PARAM -- | X \ PARAM -- | X \ X' \ PARAM -- ) + ?REP TREG GENERIC-ENTRY2 DROP HAS-IMMED? IF 0C6 +SIZE-BIT ELSE + MAXTYPE DATA-@ CASE + REGISTER OF 88 +SIZE-BIT ENDOF + SREG OF 8C ENDOF + CREG OF ?REG 0F CODE-C, 20 ENDOF + DREG OF ?REG 0F CODE-C, 21 ENDOF + TREG OF ?REG 0F CODE-C, 24 ENDOF + -1 ?BADMODE 0 + ENDCASE +DIRECT-BIT THEN CODE-C, COMPILE-FIELDS ; + +( XCHG INSTRUCTION ) +: XCHG-COMPILE ( COMPILE THE XCHG INSTRUCTION ) + ( PARAM -- | X \ PARAM -- ) + ?REP REGISTER GENERIC-ENTRY2 ?NOIMMED +SIZE-BIT CODE-C, + COMPILE-FIELDS ; + +( RET INSTRUCTION ) +: RETF? ( ADJUST OPCODE FOR FAR RETURN ) + ( X -- X' ) + IS-FAR? IF 8+ THEN ; +: RET-COMPILE ( COMPILE THE RET INSTRUCTION ) + ( PARAM -- | X \ PARAM -- ) + ?INST-PRE 2 ?TOOMANYOPS DROP DEPTH-CHANGE IF IMMED-SV DATA-! HAS-IMMED + THEN BEGIN OP-DEPTH WHILE POP-OP CASE + LIT-OP NEAR OF IS-NEAR ENDOF + LIT-OP FAR OF IS-FAR ENDOF + LIT-OP # OF ENDOF + -1 ?BADMODE + ENDCASE REPEAT HAS-IMMED? IF 0C2 RETF? CODE-C, IMMED-SV DATA-@ CODE-W, + ELSE 0C3 RETF? CODE-C, THEN ; + +: RETF-COMPILE ( COMPILE RETF ) + ( PARAM -- | X \ PARAM -- ) + FAR RET-COMPILE ; + +( INT INSTRUCTION ) +: INT-COMPILE ( COMPILE THE INT INSTRUCTION ) + ( X \ PARAM -- ) + ?INST-PRE DROP 0 ?TOOMANYOPS DEPTH-CHANGE 0= IF 2 ?NOTENOUGH THEN + DUP 3 = IF DROP 0CC ELSE 0CD CODE-C, THEN CODE-C, ; + +( SETCC INSTRUCTIONS ) +: SETCC-COMPILE ( COMPILE SETCC INSTRUCTIONS ) + ( PARAM -- | X \ PARAM -- ) + ?INST-PRE >R DO-1OP ?FINISHED ?NOIMMED REGISTER ?BADTYPE CHECK-SIZES + GENERATE-PREFIXES 0F CODE-C, R> CODE-C, COMPILE-FIELDS ; + +( XLAT/XLATB ) +: XLAT-COMPILE ( COMPILE XLAT ) + ( PARAM -- ) + ?INST-PRE DROP ?PARAMS 3 ?TOOMANYOPS BEGIN OP-DEPTH WHILE POP-OP CASE + LIT-OP AL OF ENDOF + LIT-OP [BX] OF 16BIT ?OPSIZE ENDOF + LIT-OP [EBX] OF 32BIT ?OPSIZE ENDOF + -1 ?BADMODE + ENDCASE REPEAT CHECK-SIZES GENERATE-PREFIXES 0D7 CODE-C, ; + +: XLATB-COMPILE ( COMPILE XLATB ) + ( PARAM -- ) + ?SEG ?OPERANDS DEFAULT-SIZE 16BIT = IF [BX] ELSE [EBX] THEN + XLAT-COMPILE ; + +( DOUBLE PRECISION SHIFT INSTRUCTIONS ) +: DOUBLE-SHIFT ( COMPILE SHLD, SHRD ) + ( PARAM -- | X \ PARAM -- | X \ X' \ PARAM -- ) + ?INST-PRE POP-OP CASE LIT-OP , OF SAVE-IMMED ENDOF LIT-OP # OF + SAVE-IMMED NEXT-IS-, ENDOF LIT-OP CL OF 1+ NEXT-IS-, ENDOF -1 + ?BADMODE ENDCASE REGISTER GENERIC-ENTRY2 0F CODE-C, CODE-C, MOD-R/M, + S-I-B, DISP, 8BIT DT-SIZE DATA-! IMMED, ; + +( POINTER LOADING INSTRUCTIONS ) +: LOAD-PTR-COMP ( COMPILE A POINTER LOAD INSTRUCTION ) + ( PARAM -- | X \ PARAM -- ) + ?INST-PRE REGISTER GENERIC-ENTRY2 ?NOIMMED ?REG,R/M ?MEM DUP 100 > + IF CODE-W, ELSE CODE-C, THEN COMPILE-FIELDS ; + +( EXTENDED MOV INSTRUCTIONS ) +: MOVX-COMPILE ( COMPILE MOVSX/MOVZX ) + ( PARAM -- | X \ PARAM -- ) + ?INST-PRE >R DO-1OP R> +SIZE-BIT 0 DT-SIZE DATA-! >R DO-1OP R> + ?FINISHED ?NOIMMED ?REG,R/M CHECK-SIZES GENERATE-PREFIXES 0F CODE-C, + CODE-C, COMPILE-FIELDS ; + +( FADD & FMUL ) +: FAD/FMUL-COMPILE ( COMPILE FADD AND FMUL ) + ( PARAM -- | X \ PARAM -- ) + ?INST-PRE >R PARSE-FP-OPS R> SWAP CASE + 0 OF 1 /R&FREG>MOD-R/M ?SEG 0DE CODE-C, CODE-C, ENDOF + 1 OF 0D8 +FP-SIZE SWAP FP-GENERIC-ASSEMBLE ENDOF + 2 OF ?SEG 0D8 +FP-DIRECT-BIT CODE-C, MOD-R/M>FREG + /R&FREG>MOD-R/M CODE-C, ENDOF + ENDCASE ; + +( FST & FSTP ) +: FST-COMPILE ( COMPILE FST AND FSTP ) + ( PARAM -- | X \ PARAM -- ) + ?INST-PRE >R DO-1OP R> ?FINISHED ?NOIMMED MAXTYPE DATA-@ FREG = IF + ?SEG 0DD CODE-C, MOD-R/M>FREG /R&FREG>MOD-R/M CODE-C, + ELSE + REGISTER ?BADTYPE ?MEM CHECK-SIZES DT-SIZE DATA-@ + CASE + UNKNOWN OF ( FLOAT BY DEFAULT ) 0D9 ENDOF + 32BIT OF 0D9 ENDOF + 64BIT OF 0DD ENDOF + 80BIT OF 4+ 0DB ENDOF + -1 ?BADMODE 0 + ENDCASE SWAP FP-GENERIC-ASSEMBLE + THEN ; + +( INTEGER/FLOATING POINT OPERATIONS ) +: FIX-COMPILE ( COMPILE FIX INSTRUCTIONS ) + ( PARAM -- | X \ PARAM -- ) + ?INST-PRE >R DO-1OP ?FINISHED REGISTER ?BADTYPE ?NOIMMED ?MEM + CHECK-SIZES 0DA DT-SIZE DATA-@ 16BIT = IF 4+ THEN R> + FP-GENERIC-ASSEMBLE ; + +( FLOAT OPS THAT POP THE STACK ) +: FXP-COMPILE ( COMPILE FXP INSTRUCTIONS ) + ( PARAM -- ) + ?INST-PRE ?SEG >R PARSE-FP-OPS 2- ?BADMODE R> 0DE CODE-C, + MOD-R/M>FREG + CODE-C, ; + +( FCOM ) +: FCOM-COMPILE ( COMPILE FCOM AND FCOMP ) + ( PARAM -- | X \ PARAM -- ) + ?INST-PRE >R PARSE-FP-OPS R> SWAP CASE + 0 OF 0D8 CODE-C, 1 /R&FREG>MOD-R/M CODE-C, ENDOF + 1 OF MAXTYPE DATA-@ FREG = IF + 0D8 CODE-C, MOD-R/M>FREG /R&FREG>MOD-R/M CODE-C, + ELSE + REGISTER ?BADTYPE ?MEM 0D8 +FP-SIZE SWAP + FP-GENERIC-ASSEMBLE + THEN ENDOF + -1 ?BADMODE DROP + ENDCASE ; + +( MISCELLANEOUS FLOATING POINT INSTRUCTIONS ) +: FMISC-COMPILE ( COMPILE MISCELLANEOUS FP INSTRUCTIONS ) + ( PARAM -- ) + ?INST-PRE ?SEG >R ?PARAMS PARSE-FP-OPS R> 100 /MOD ROT CASE + 0 OF 1+ ENDOF + 1 OF MAXTYPE DATA-@ FREG - ?BADMODE MOD-R/M>FREG + ENDOF + -1 ?BADMODE + ENDCASE SWAP CODE-C, CODE-C, ; + +( FBLD & FBSTP, AND LOAD AND STORE CONTROL WORD, ENVIRONMENT, ETC. ) +: GENERIC-FP-ENTRY1 ( GENERIC ENTRY SEQUENCE FOR FP INST THAT TAKE ONE MEMORY ) + ( OPERAND ) + ( PARAM -- PARAM | X \ PARAM -- PARAM ) + ?INST-PRE >R PARSE-FP-OPS 1- ?BADMODE R> REGISTER ?BADTYPE ?MEM ; +: FBLD/STP-COMPILE ( COMPILE FBLD & FBSTP ) + ( PARAM -- | X \ PARAM -- ) + GENERIC-FP-ENTRY1 100 /MOD DUP 7 > IF 8- 9B CODE-C, THEN + FP-GENERIC-ASSEMBLE ; + +( FIST ) +: FIST-COMPILE ( COMPILE FIST & FISTP ) + ( PARAM -- | X \ PARAM -- ) + GENERIC-FP-ENTRY1 GET-FP-SIZE CASE + 16BIT OF 0DF ENDOF + 32BIT OF 0DB ENDOF + 64BIT OF 4+ 0DF ENDOF + -1 ?BADMODE 0 + ENDCASE SWAP FP-GENERIC-ASSEMBLE ; + +( FSTSW ) +: FSTSW-COMPILE ( COMPILE FSTSW & FNSTSW ) + ( PARAM -- | X \ PARAM -- ) + ?INST-PRE >R PARSE-FP-OPS DUP 1 > ?BADMODE REGISTER ?BADTYPE R> IF + 9B CODE-C, THEN CASE + 0 OF ?SEG 0E0DF CODE-W, ENDOF + 1 OF MAXTYPE DATA-@ REGISTER = IF + MOD-R/M DATA-@ C0- ?BADMODE ?SEG 0E0DF CODE-W, + ELSE + 0DD 7 FP-GENERIC-ASSEMBLE + THEN ENDOF + ENDCASE ; + +( FILD ) +: FILD-COMPILE ( COMPILE FILD ) + ( PARAM -- | X \ PARAM -- ) + GENERIC-FP-ENTRY1 DROP GET-FP-SIZE CASE + 16BIT OF 0DF 0 ENDOF + 32BIT OF 0DB 0 ENDOF + 64BIT OF 0DF 5 ENDOF + -1 ?BADMODE 0 0 + ENDCASE FP-GENERIC-ASSEMBLE ; + +( FLD COMPILE ) +: FLD-COMPILE ( COMPILE FLD ) + ( PARAM -- | X \ PARAM -- ) + ?INST-PRE DROP PARSE-FP-OPS 1- ?BADMODE MAXTYPE DATA-@ FREG = IF + ?SEG 0D9 CODE-C, MOD-R/M>FREG C0+ CODE-C, + ELSE + REGISTER ?BADTYPE ?MEM DT-SIZE DATA-@ CASE + UNKNOWN OF ( ASSUME FLOAT ) 0D9 0 ENDOF + 32BIT OF 0D9 0 ENDOF + 64BIT OF 0DD 0 ENDOF + 80BIT OF 0DB 5 ENDOF + -1 ?BADMODE 0 0 + ENDCASE FP-GENERIC-ASSEMBLE + THEN ; + +( FDIV, FDIVR, FSUB, FSUBR ) +: FDIV/SUB-COMPILE ( COMPILE FDIV, FDIVR, FSUB, & FSUBR ) + ( PARAM -- | X \ PARAM -- ) + ?INST-PRE >R PARSE-FP-OPS R> SWAP CASE + 0 OF ?SEG 1 XOR 0DE CODE-C, 1 /R&FREG>MOD-R/M CODE-C, ENDOF + 1 OF ?MEM 0D8 +FP-SIZE SWAP FP-GENERIC-ASSEMBLE ENDOF + 2 OF ?SEG MAXTYPE DATA-@ FREG ?NOMATCH 0D8 +FP-DIRECT-BIT + CODE-C, FP-DIRECTION? IF 1 XOR THEN MOD-R/M>FREG + /R&FREG>MOD-R/M CODE-C, ENDOF + ENDCASE ; + +( THE INSTRUCTIONS ) +IN-ASM + 37 ' 1BYTE OPCODE AAA + 0AD5 ' 2BYTE OPCODE AAD + 0AD4 ' 2BYTE OPCODE AAM + 3F ' 1BYTE OPCODE AAS + 02 ' GROUP1-COMPILE OPCODE ADC + 00 ' GROUP1-COMPILE OPCODE ADD + 04 ' GROUP1-COMPILE OPCODE AND + 0 ' ARPL-COMPILE OPCODE ARPL + 0 ' BOUND-COMPILE OPCODE BOUND + 0BC ' BS-COMPILE OPCODE BSF + 0BD ' BS-COMPILE OPCODE BSR + 0 ' BSWAP-COMPILE OPCODE BSWAP + 04 ' GROUP8-COMPILE OPCODE BT + 07 ' GROUP8-COMPILE OPCODE BTC + 06 ' GROUP8-COMPILE OPCODE BTR + 05 ' GROUP8-COMPILE OPCODE BTS + 0 ' CALL-COMPILE OPCODE CALL + 298 ' SIZE-COND-COMP OPCODE CBW + 399 ' SIZE-COND-COMP OPCODE CDQ + 0F8 ' 1BYTE OPCODE CLC + 0FC ' 1BYTE OPCODE CLD + 0FA ' 1BYTE OPCODE CLI + 060F ' 2BYTE OPCODE CLTS + 0F5 ' 1BYTE OPCODE CMC + 07 ' GROUP1-COMPILE OPCODE CMP + 0A6 ' STR-INST OPCODE CMPS + 0A6 ' BYTE-STR-INST OPCODE CMPSB + 0A6 ' DWORD-STR-INST OPCODE CMPSD + 0A6 ' WORD-STR-INST OPCODE CMPSW + 0BC ' XCHG&ALU-COMPILE OPCODE CMPXCHG + 0 ' CMPXCHG8B-COMP OPCODE CMPXCHG8B + 0A20F ' 2BYTE OPCODE CPUID + 299 ' SIZE-COND-COMP OPCODE CWD + 398 ' SIZE-COND-COMP OPCODE CWDE + 27 ' 1BYTE OPCODE DAA + 2F ' 1BYTE OPCODE DAS + 01 ' DEC-COMPILE OPCODE DEC + 06 ' GROUP3-COMPILE OPCODE DIV + 0 ' ENTER-COMPILE OPCODE ENTER + 0F0D9 ' 2BYTE OPCODE F2XM1 + 0E1D9 ' 2BYTE OPCODE FABS + 00 ' FAD/FMUL-COMPILE OPCODE FADD + 0C0 ' FXP-COMPILE OPCODE FADDP + 4DF ' FBLD/STP-COMPILE OPCODE FBLD + 6DF ' FBLD/STP-COMPILE OPCODE FBSTP + 0E0D9 ' 2BYTE OPCODE FCHS +0E2DB9B ' 3BYTE OPCODE FCLEX + 02 ' FCOM-COMPILE OPCODE FCOM + 03 ' FCOM-COMPILE OPCODE FCOMP + 0D9DE ' 2BYTE OPCODE FCOMPP + 0FFD9 ' 2BYTE OPCODE FCOS + 0F6D9 ' 2BYTE OPCODE FDECSTP + 06 ' FDIV/SUB-COMPILE OPCODE FDIV + 0F8 ' FXP-COMPILE OPCODE FDIVP + 07 ' FDIV/SUB-COMPILE OPCODE FDIVR + 0F0 ' FXP-COMPILE OPCODE FDIVPR + 0C0DD ' FMISC-COMPILE OPCODE FFREE + 00 ' FIX-COMPILE OPCODE FIADD + 02 ' FIX-COMPILE OPCODE FICOM + 03 ' FIX-COMPILE OPCODE FICOMP + 06 ' FIX-COMPILE OPCODE FIDIV + 07 ' FIX-COMPILE OPCODE FIDIVR + 0 ' FILD-COMPILE OPCODE FILD + 01 ' FIX-COMPILE OPCODE FIMUL + 0F7D9 ' 2BYTE OPCODE FINCSTP +0E3DB9B ' 3BYTE OPCODE FINIT + 04 ' FIX-COMPILE OPCODE FISUB + 05 ' FIX-COMPILE OPCODE FISUBR + 02 ' FIST-COMPILE OPCODE FIST + 03 ' FIST-COMPILE OPCODE FISTP + 0 ' FLD-COMPILE OPCODE FLD + 0E8D9 ' 2BYTE OPCODE FLD1 + 5D9 ' FBLD/STP-COMPILE OPCODE FLDCW + 4D9 ' FBLD/STP-COMPILE OPCODE FLDENV + 0E9D9 ' 2BYTE OPCODE FLDL2T + 0EAD9 ' 2BYTE OPCODE FLDL2E + 0EBD9 ' 2BYTE OPCODE FLDPI + 0ECD9 ' 2BYTE OPCODE FLDLG2 + 0EDD9 ' 2BYTE OPCODE FLDLN2 + 0EED9 ' 2BYTE OPCODE FLDZ + 01 ' FAD/FMUL-COMPILE OPCODE FMUL + 0C8 ' FXP-COMPILE OPCODE FMULP + 0E2DB ' 2BYTE OPCODE FNCLEX + 0E3DB ' 2BYTE OPCODE FNINIT + 0D0D9 ' 2BYTE OPCODE FNOP + 6DD ' FBLD/STP-COMPILE OPCODE FNSAVE + 7D9 ' FBLD/STP-COMPILE OPCODE FNSTCW + 00 ' FSTSW-COMPILE OPCODE FNSTSW + 6D9 ' FBLD/STP-COMPILE OPCODE FNSTENV + 0F3D9 ' 2BYTE OPCODE FPATAN + 0F8D9 ' 2BYTE OPCODE FPREM + 0F5D9 ' 2BYTE OPCODE FPREM1 + 0F2D9 ' 2BYTE OPCODE FPTAN + 0FCD9 ' 2BYTE OPCODE FRNDINT + 4DD ' FBLD/STP-COMPILE OPCODE FRSTOR + 0EDD ' FBLD/STP-COMPILE OPCODE FSAVE + 0FDD9 ' 2BYTE OPCODE FSCALE + 0FED9 ' 2BYTE OPCODE FSIN + 0FBD9 ' 2BYTE OPCODE FSINCOS + 0FAD9 ' 2BYTE OPCODE FSQRT + 02 ' FST-COMPILE OPCODE FST + 0FD9 ' FBLD/STP-COMPILE OPCODE FSTCW + 0ED9 ' FBLD/STP-COMPILE OPCODE FSTENV + 03 ' FST-COMPILE OPCODE FSTP + 01 ' FSTSW-COMPILE OPCODE FSTSW + 04 ' FDIV/SUB-COMPILE OPCODE FSUB + 0E8 ' FXP-COMPILE OPCODE FSUBP + 0E0 ' FXP-COMPILE OPCODE FSUBPR + 05 ' FDIV/SUB-COMPILE OPCODE FSUBR + 0E4D9 ' 2BYTE OPCODE FTST + 0E0DD ' FMISC-COMPILE OPCODE FUCOM + 0E8DD ' FMISC-COMPILE OPCODE FUCOMP + 0E9DA ' 2BYTE OPCODE FUCOMPP + 9B ' 1BYTE OPCODE FWAIT + 0E5D9 ' 2BYTE OPCODE FXAM + 0C8D9 ' FMISC-COMPILE OPCODE FXCH + 0F4D9 ' 2BYTE OPCODE FXTRACT + 0F1D9 ' 2BYTE OPCODE FYL2X + 0F9D9 ' 2BYTE OPCODE FYL2XP1 + 0F4 ' 1BYTE OPCODE HLT + 07 ' GROUP3-COMPILE OPCODE IDIV + 05 ' GROUP3-COMPILE OPCODE IMUL + 0E4 ' I/O-COMPILE OPCODE IN + 00 ' INC-COMPILE OPCODE INC + 6C ' STR-INST OPCODE INS + 6C ' BYTE-STR-INST OPCODE INSB + 6C ' DWORD-STR-INST OPCODE INSD + 6C ' WORD-STR-INST OPCODE INSW + 0 ' INT-COMPILE OPCODE INT + 0C3 ' 1BYTE OPCODE INTO + 080F ' 2BYTE OPCODE INVD + 107 ' GROUP6&7-COMPILE OPCODE INVLPG + 2CF ' SIZE-COND-COMP OPCODE IRET + 3CF ' SIZE-COND-COMP OPCODE IRETD + 77 ' JCC-COMPILE OPCODE JA + 73 ' JCC-COMPILE OPCODE JAE + 72 ' JCC-COMPILE OPCODE JB + 76 ' JCC-COMPILE OPCODE JBE + 72 ' JCC-COMPILE OPCODE JC + 0E3 ' JCXZ-COMPILE OPCODE JCXZ + 0E3 ' JECXZ-COMPILE OPCODE JECXZ + 74 ' JCC-COMPILE OPCODE JE + 7F ' JCC-COMPILE OPCODE JG + 7D ' JCC-COMPILE OPCODE JGE + 7C ' JCC-COMPILE OPCODE JL + 7E ' JCC-COMPILE OPCODE JLE + 0 ' JMP-COMPILE OPCODE JMP + 76 ' JCC-COMPILE OPCODE JNA + 72 ' JCC-COMPILE OPCODE JNAE + 73 ' JCC-COMPILE OPCODE JNB + 77 ' JCC-COMPILE OPCODE JNBE + 73 ' JCC-COMPILE OPCODE JNC + 75 ' JCC-COMPILE OPCODE JNE + 7E ' JCC-COMPILE OPCODE JNG + 7C ' JCC-COMPILE OPCODE JNGE + 7D ' JCC-COMPILE OPCODE JNL + 7F ' JCC-COMPILE OPCODE JNLE + 71 ' JCC-COMPILE OPCODE JNO + 7B ' JCC-COMPILE OPCODE JNP + 79 ' JCC-COMPILE OPCODE JNS + 75 ' JCC-COMPILE OPCODE JNZ + 70 ' JCC-COMPILE OPCODE JO + 7A ' JCC-COMPILE OPCODE JP + 7A ' JCC-COMPILE OPCODE JPE + 7B ' JCC-COMPILE OPCODE JPO + 78 ' JCC-COMPILE OPCODE JS + 74 ' JCC-COMPILE OPCODE JZ + 9F ' 1BYTE OPCODE LAHF + 02 ' BS-COMPILE OPCODE LAR + 0C5 ' LOAD-PTR-COMP OPCODE LDS + 8D ' LOAD-PTR-COMP OPCODE LEA + 0C9 ' 1BYTE OPCODE LEAVE + 0C4 ' LOAD-PTR-COMP OPCODE LES + 0B40F ' LOAD-PTR-COMP OPCODE LFS + 0B50F ' LOAD-PTR-COMP OPCODE LGS + 03 ' BS-COMPILE OPCODE LSL + 0B20F ' LOAD-PTR-COMP OPCODE LSS + 102 ' GROUP6&7-COMPILE OPCODE LGDT + 103 ' GROUP6&7-COMPILE OPCODE LIDT + 02 ' GROUP6&7-COMPILE OPCODE LLDT + 106 ' GROUP6&7-COMPILE OPCODE LMSW + 0AC ' STR-INST OPCODE LODS + 0AC ' BYTE-STR-INST OPCODE LODSB + 0AC ' DWORD-STR-INST OPCODE LODSD + 0AC ' WORD-STR-INST OPCODE LODSW + 0E2 ' LOOP-COMPILE OPCODE LOOP + 0E1 ' LOOP-COMPILE OPCODE LOOPE + 0E0 ' LOOP-COMPILE OPCODE LOOPNE + 0E0 ' LOOP-COMPILE OPCODE LOOPNZ + 0E1 ' LOOP-COMPILE OPCODE LOOPZ + 03 ' GROUP6&7-COMPILE OPCODE LTR + 0 ' MOV-COMPILE OPCODE MOV + 0A4 ' STR-INST OPCODE MOVS + 0BE ' MOVX-COMPILE OPCODE MOVSX + 0A4 ' BYTE-STR-INST OPCODE MOVSB + 0A4 ' DWORD-STR-INST OPCODE MOVSD + 0A4 ' WORD-STR-INST OPCODE MOVSW + 0B6 ' MOVX-COMPILE OPCODE MOVZX + 04 ' GROUP3-COMPILE OPCODE MUL + 03 ' GROUP3-COMPILE OPCODE NEG + 90 ' 1BYTE OPCODE NOP + 02 ' GROUP3-COMPILE OPCODE NOT + 01 ' GROUP1-COMPILE OPCODE OR + 0E6 ' I/O-COMPILE OPCODE OUT + 6E ' STR-INST OPCODE OUTS + 6E ' BYTE-STR-INST OPCODE OUTSB + 6E ' DWORD-STR-INST OPCODE OUTSD + 6E ' WORD-STR-INST OPCODE OUTSW + 0 ' POP-COMPILE OPCODE POP + 261 ' SIZE-COND-COMP OPCODE POPA + 361 ' SIZE-COND-COMP OPCODE POPAD + 29D ' SIZE-COND-COMP OPCODE POPF + 39D ' SIZE-COND-COMP OPCODE POPFD + 0 ' PUSH-COMPILE OPCODE PUSH + 260 ' SIZE-COND-COMP OPCODE PUSHA + 360 ' SIZE-COND-COMP OPCODE PUSHAD + 29C ' SIZE-COND-COMP OPCODE PUSHF + 39C ' SIZE-COND-COMP OPCODE PUSHFD + 02 ' GROUP2-COMPILE OPCODE RCL + 03 ' GROUP2-COMPILE OPCODE RCR + 320F ' 2BYTE OPCODE RDMSR + 310F ' 2BYTE OPCODE RDTSC + 0 ' RET-COMPILE OPCODE RET + 0 ' RETF-COMPILE OPCODE RETF + 00 ' GROUP2-COMPILE OPCODE ROL + 01 ' GROUP2-COMPILE OPCODE ROR + 0AA0F ' 2BYTE OPCODE RSM + 9E ' 1BYTE OPCODE SAHF + 04 ' GROUP2-COMPILE OPCODE SAL + 07 ' GROUP2-COMPILE OPCODE SAR + 03 ' GROUP1-COMPILE OPCODE SBB + 0AE ' STR-INST OPCODE SCAS + 0AE ' BYTE-STR-INST OPCODE SCASB + 0AE ' DWORD-STR-INST OPCODE SCASD + 0AE ' WORD-STR-INST OPCODE SCASW + 97 ' SETCC-COMPILE OPCODE SETA + 93 ' SETCC-COMPILE OPCODE SETAE + 92 ' SETCC-COMPILE OPCODE SETB + 96 ' SETCC-COMPILE OPCODE SETBE + 92 ' SETCC-COMPILE OPCODE SETC + 94 ' SETCC-COMPILE OPCODE SETE + 9F ' SETCC-COMPILE OPCODE SETG + 9D ' SETCC-COMPILE OPCODE SETGE + 9C ' SETCC-COMPILE OPCODE SETL + 9E ' SETCC-COMPILE OPCODE SETLE + 96 ' SETCC-COMPILE OPCODE SETNA + 92 ' SETCC-COMPILE OPCODE SETNAE + 93 ' SETCC-COMPILE OPCODE SETNB + 97 ' SETCC-COMPILE OPCODE SETNBE + 93 ' SETCC-COMPILE OPCODE SETNC + 95 ' SETCC-COMPILE OPCODE SETNE + 9E ' SETCC-COMPILE OPCODE SETNG + 9C ' SETCC-COMPILE OPCODE SETNGE + 9D ' SETCC-COMPILE OPCODE SETNL + 9F ' SETCC-COMPILE OPCODE SETNLE + 91 ' SETCC-COMPILE OPCODE SETNO + 9B ' SETCC-COMPILE OPCODE SETNP + 99 ' SETCC-COMPILE OPCODE SETNS + 95 ' SETCC-COMPILE OPCODE SETNZ + 90 ' SETCC-COMPILE OPCODE SETO + 9A ' SETCC-COMPILE OPCODE SETP + 9A ' SETCC-COMPILE OPCODE SETPE + 9B ' SETCC-COMPILE OPCODE SETPO + 98 ' SETCC-COMPILE OPCODE SETS + 94 ' SETCC-COMPILE OPCODE SETZ + 100 ' GROUP6&7-COMPILE OPCODE SGDT + 04 ' GROUP2-COMPILE OPCODE SHL + 0A4 ' DOUBLE-SHIFT OPCODE SHLD + 05 ' GROUP2-COMPILE OPCODE SHR + 0AC ' DOUBLE-SHIFT OPCODE SHRD + 101 ' GROUP6&7-COMPILE OPCODE SIDT + 00 ' GROUP6&7-COMPILE OPCODE SLDT + 104 ' GROUP6&7-COMPILE OPCODE SMSW + 0F9 ' 1BYTE OPCODE STC + 0FD ' 1BYTE OPCODE STD + 0FB ' 1BYTE OPCODE STI + 0AA ' STR-INST OPCODE STOS + 0AA ' BYTE-STR-INST OPCODE STOSB + 0AA ' DWORD-STR-INST OPCODE STOSD + 0AA ' WORD-STR-INST OPCODE STOSW + 01 ' GROUP6&7-COMPILE OPCODE STR + 05 ' GROUP1-COMPILE OPCODE SUB + 0 ' TEST-COMPILE OPCODE TEST + 04 ' GROUP6&7-COMPILE OPCODE VERR + 05 ' GROUP6&7-COMPILE OPCODE VERW + 9B ' 1BYTE OPCODE WAIT + 090F ' 2BYTE OPCODE WBINVD + 300F ' 2BYTE OPCODE WRMSR + 0C0 ' XCHG&ALU-COMPILE OPCODE XADD + 86 ' XCHG-COMPILE OPCODE XCHG + 0 ' XLAT-COMPILE OPCODE XLAT + 0 ' XLATB-COMPILE OPCODE XLATB + 06 ' GROUP1-COMPILE OPCODE XOR + +( CREATE CODE DEFINITIONS ) +IN-HIDDEN +VARIABLE CURRENT-SV ( NEEDED FOR STASHING THE CURRENT VOCABULARY ) +: SAVE-CURRENT ( SAVE THE CURRENT VOCABULARY LINKAGE ) + ( -- ) + CURRENT DATA-@ CURRENT-SV DATA-! ; + +: UNSAVE-CURRENT ( RESET CURRENT-SV ) + ( -- ) + 0 CURRENT-SV DATA-! ; + +: RESTORE-CURRENT ( RESTORE CURRENT TO ITS PREVIOUSLY SAVED VALUE ) + ( -- ) + CURRENT-SV DATA-@ ?DUP IF CURRENT DATA-! UNSAVE-CURRENT THEN ; + +( DEBUGGING ) +: RESET-ASM RESET-VARS CLR-OPSTACK LOC-INIT SAVE-DEPTH ; + +IN-ASM +: INIT-ASM ( INITALIZE ASSEMBLY ) + ( -- ) + ALSO ASSEMBLER RESET-ASM ; + +( FORTH HEADER CREATION WORDS ) +IN-HIDDEN +: _CODE ( START A NATIVE CODE DEFINITION ) + CODE-HEADER CODE-HERE CELL+ CODE-D, HIDE !CSP INIT-ASM ; + +: _;CODE ( CREATE THE [;CODE] PART OF A LOW LEVEL DEFINING WORD ) + ?CSP !CSP COMPILE (;CODE) POSTPONE [ INIT-ASM ; + +IN-FORTH +DEFER CODE ' _CODE IS CODE +DEFER ;CODE ' _;CODE IS ;CODE +ALSO FORTH IMMEDIATE PREVIOUS ( NECESSARY BECAUSE OF ASM-HIDDEN IMMEDIATE ) + +: SUBR: ( CREATE A SUBROUTINE IN THE ASSEMBLER VOCABULARY ) + SAVE-CURRENT INIT-ASM DEFINITIONS !CSP CREATE HIDE DATA-HERE 0 + DATA-, CODE-ALIGN CODE-HERE SWAP DATA-! DOES> DATA-@ ; + +: MACRO: ( CREATE A MACRO IN THE ASSEMBLER VOCABULARY ) + SAVE-CURRENT ALSO ASSEMBLER DEFINITIONS : POSTPONE ENTER-MACRO ; + +( END CODE DEFINITIONS ) +IN-ASM +: END-ASM A; PREVIOUS ; + +IN-HIDDEN +: _END-CODE ( END A CODE DEFINITION ) + END-ASM ?FINISHED ?UNRES ?CSP REVEAL RESTORE-CURRENT CODE-ALIGN + EXIT-ASSEMBLER ; + +IN-ASM +DEFER END-CODE ' _END-CODE IS END-CODE +DEFER ;C ' _END-CODE IS ;C + +: ENDM ( END A MACRO DEFINITION ) + POSTPONE LEAVE-MACRO POSTPONE ; PREVIOUS RESTORE-CURRENT ; + + +ALSO FORTH IMMEDIATE PREVIOUS + +: ;MACRO ( END A MACRO DEFINITION ) + POSTPONE ENDM ; ALSO FORTH IMMEDIATE PREVIOUS + +\ : EXIT ( REDEFINE EXIT TO TAKE CARE OF MACROS ) +\ IN-MACRO? IF LEAVE-MACRO THEN R> DROP ; +( REDEFINE EXIT TO BE CLOSER TO STANDARD ) +: ?LEAVE-MACRO ( CONDITIONALLY UNNEST A MACRO ) + IN-MACRO? IF LEAVE-MACRO THEN ; + +: EXIT ( REDEFINE EXIT TO TAKE CARE OF MACROS ) + STATE @ IF POSTPONE ?LEAVE-MACRO POSTPONE EXIT ELSE + ?LEAVE-MACRO EXIT THEN ; ALSO FORTH IMMEDIATE PREVIOUS + +( UTILITY WORDS ) +: PREFIX? ( ARE WE IN PREFIX MODE? ) + ( -- FLAG ) + DEFER@ SAVE-INST ['] NOOP = ; + +: POSTFIX? ( ARE WE IN POSTFIX MODE? ) + ( -- FLAG ) + PREFIX? 0= ; + +( SETTING AND RESTORING THE ASSEMBLER SYNTAX ) +: SET-POSTFIX ( SET THE ASSEMBLER TO POSTFIX MODE, LEAVE A MODE FLAG ) + ( -- PREV. MODE==PREFIX ) + PREFIX? DUP IF >R A; POSTFIX R> THEN ; + +: SET-PREFIX ( SET THE ASSEMBLER TO PREFIX MODE, LEAVE A MODE FLAG ) + ( -- PREV. MODE==PREFIX ) + PREFIX? DUP 0= IF >R A; PREFIX R> THEN ; + +: RESET-SYNTAX ( RESET THE ASSEMBLER TO THE PREVIOUSLY FLAGGED SYNTAX ) + ( PREV. MODE==PREFIX -- ) + IF A; PREFIX ELSE A; POSTFIX THEN ; + +ONLY FORTH DEFINITIONS BASE ! diff --git a/programs/develop/SPForth/lib/asm/asmmac.f b/programs/develop/SPForth/lib/asm/asmmac.f new file mode 100644 index 0000000000..c9efb24087 --- /dev/null +++ b/programs/develop/SPForth/lib/asm/asmmac.f @@ -0,0 +1,111 @@ +( Miscellaneous macros for Win32FORTH 486ASM version 1.24 ) +( copyright [c] 1994 by Jim Schneider ) +( This file version 1.2 ) + +( This program is free software; you can redistribute it and/or modify ) +( it under the terms of the GNU General Public License as published by ) +( the Free Software Foundation; either version 2 of the License, or ) +( any later version. ) +( ) +( This program is distributed in the hope that it will be useful, ) +( but WITHOUT ANY WARRANTY; without even the implied warranty of ) +( MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ) +( GNU General Public License for more details. ) +( ) +( You should have received a copy of the GNU General Public License ) +( along with this program; if not, write to the Free Software ) +( Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ) + +MACRO: ;M POSTPONE ;MACRO ENDM IMMEDIATE +MACRO: AL, AL , ;M +MACRO: CL, CL , ;M +MACRO: DL, DL , ;M +MACRO: BL, BL , ;M +MACRO: AH, AH , ;M +MACRO: CH, CH , ;M +MACRO: DH, DH , ;M +MACRO: BH, BH , ;M +MACRO: AX, AX , ;M +MACRO: CX, CX , ;M +MACRO: DX, DX , ;M +MACRO: BX, BX , ;M +MACRO: SP, SP , ;M +MACRO: BP, BP , ;M +MACRO: SI, SI , ;M +MACRO: DI, DI , ;M +MACRO: EAX, EAX , ;M +MACRO: ECX, ECX , ;M +MACRO: EDX, EDX , ;M +MACRO: EBX, EBX , ;M +MACRO: ESP, ESP , ;M +MACRO: EBP, EBP , ;M +MACRO: ESI, ESI , ;M +MACRO: EDI, EDI , ;M +MACRO: [BX+SI], [BX+SI] , ;M +MACRO: [BX+DI], [BX+DI] , ;M +MACRO: [BP+SI], [BP+SI] , ;M +MACRO: [BP+DI], [BP+DI] , ;M +MACRO: [SI], [SI] , ;M +MACRO: [DI], [DI] , ;M +MACRO: [BP], [BP] , ;M +MACRO: [BX], [BX] , ;M +MACRO: [EAX], [EAX] , ;M +MACRO: [ECX], [ECX] , ;M +MACRO: [EDX], [EDX] , ;M +MACRO: [EBX], [EBX] , ;M +MACRO: [ESP], [ESP] , ;M +MACRO: [EBP], [EBP] , ;M +MACRO: [ESI], [ESI] , ;M +MACRO: [EDI], [EDI] , ;M +MACRO: [EAX*2], [EAX*2] , ;M +MACRO: [ECX*2], [ECX*2] , ;M +MACRO: [EDX*2], [EDX*2] , ;M +MACRO: [EBX*2], [EBX*2] , ;M +\ MACRO: [ESP*2], [ESP*2] , ;M +MACRO: [EBP*2], [EBP*2] , ;M +MACRO: [ESI*2], [ESI*2] , ;M +MACRO: [EDI*2], [EDI*2] , ;M +MACRO: [EAX*4], [EAX*4] , ;M +MACRO: [ECX*4], [ECX*4] , ;M +MACRO: [EDX*4], [EDX*4] , ;M +MACRO: [EBX*4], [EBX*4] , ;M +MACRO: [EBP*4], [EBP*4] , ;M +MACRO: [ESI*4], [ESI*4] , ;M +MACRO: [EDI*4], [EDI*4] , ;M +MACRO: [EAX*8], [EAX*8] , ;M +MACRO: [ECX*8], [ECX*8] , ;M +MACRO: [EDX*8], [EDX*8] , ;M +MACRO: [EBX*8], [EBX*8] , ;M +MACRO: [EBP*8], [EBP*8] , ;M +MACRO: [ESI*8], [ESI*8] , ;M +MACRO: [EDI*8], [EDI*8] , ;M +MACRO: ES, ES , ;M +MACRO: CS, CS , ;M +MACRO: SS, SS , ;M +MACRO: DS, DS , ;M +MACRO: FS, FS , ;M +MACRO: GS, GS , ;M +MACRO: CR0, CR0 , ;M +MACRO: CR2, CR2 , ;M +MACRO: CR3, CR3 , ;M +MACRO: CR4, CR4 , ;M +MACRO: DR0, DR0 , ;M +MACRO: DR1, DR1 , ;M +MACRO: DR2, DR2 , ;M +MACRO: DR3, DR3 , ;M +MACRO: DR6, DR6 , ;M +MACRO: DR7, DR7 , ;M +MACRO: TR3, TR3 , ;M +MACRO: TR4, TR4 , ;M +MACRO: TR5, TR5 , ;M +MACRO: TR6, TR6 , ;M +MACRO: TR7, TR7 , ;M +MACRO: ST, ST , ;M +MACRO: ST(0), ST(0) , ;M +MACRO: ST(1), ST(1) , ;M +MACRO: ST(2), ST(2) , ;M +MACRO: ST(3), ST(3) , ;M +MACRO: ST(4), ST(4) , ;M +MACRO: ST(5), ST(5) , ;M +MACRO: ST(6), ST(6) , ;M +MACRO: ST(7), ST(7) , ;M diff --git a/programs/develop/SPForth/lib/ext/case.f b/programs/develop/SPForth/lib/ext/case.f new file mode 100644 index 0000000000..a44800862d --- /dev/null +++ b/programs/develop/SPForth/lib/ext/case.f @@ -0,0 +1,42 @@ +\ ╩юэёЄЁєъЎш  т√сюЁр CASE +\ ё єўхЄюь тючьюцэющ тыюцхээюёЄш юяхЁрЄюЁют CASE + + +DECIMAL +VARIABLE CSP \ ╙ърчрЄхы№ ёЄхър ъюэЄЁюы  +6 CONSTANT L-CAS# \ ─юяєёЄшь√щ єЁютхэ№ тыюцхээюёЄш +CREATE S-CSP L-CAS# CELLS ALLOT \ ╤Єхъ ъюэЄЁюы  +S-CSP CSP ! + +: +CSP ( -> P) \ ─юсртшЄ№ єЁютхэ№ + CSP @ DUP CELL+ CSP ! +; +: -CSP ( -> ) \ ╙сЁрЄ№ єЁютхэ№ + CSP @ 1 CELLS - CSP ! +; + +: !CSP ( -> ) \ ╚эшЎшрышчшЁютрЄ№ єЁютхэ№ + SP@ +CSP ! +; + +: CSP@ ( -> A) + CSP @ 1 CELLS - @ +; +: ?CSP ( -> ) \ ╧ЁютхЁшЄ№ т√фхЁцрээюёЄ№ ёЄхър +\ SP@ CSP@ <> 37 ?ERROR ( ABORT" ╤сющ ёЄхър яю CSP !") + -CSP +; +: CASE ( -> ) + !CSP +; IMMEDIATE +: OF + POSTPONE OVER POSTPONE = + [COMPILE] IF POSTPONE DROP +; IMMEDIATE +: ENDOF + [COMPILE] ELSE +; IMMEDIATE +: ENDCASE + POSTPONE DROP BEGIN SP@ CSP@ = + 0= WHILE [COMPILE] THEN REPEAT -CSP +; IMMEDIATE diff --git a/programs/develop/SPForth/lib/ext/disasm.f b/programs/develop/SPForth/lib/ext/disasm.f new file mode 100644 index 0000000000..d61a6f3104 --- /dev/null +++ b/programs/develop/SPForth/lib/ext/disasm.f @@ -0,0 +1,1555 @@ +\ 80386 DISASSEMBLER +\ ANDREW MCKEWAN, APRIL 1994 +\ TOM ZIMMER, 05/18/94 PORT TO WIN32F +\ MODIFIED TO WORD IN DECIMAL 08/03/94 10:04 TJZ +\ 06-??-95 SMUB NEXT SEQUENCE DEFINED IN FKERNEL +\ 06-21-95 SMUB REMOVED REDUNDANT COUNT CALLS FROM TXB, LXS. +\ 04-??-97 EXTENDED BY C.L. TO INCLUDE P6 AND MMX INSTRUCTIONS +\ 14-11-2000 Adapted from SPFOPT (Michael Maximov) by Dmitry Yakimov + +\ ??-11-2000 Fixed FE. FF. (Bandaletov) and H.R (Yakimov) +\ 15-11-2000 Fixed MV2 (Yakimov) +\ 25-12-2000 Added float literals recognition (Yakimov) +\ 26-07-2001 Fixed MVX (Maksimov) +\ 11-05-2004 Fixed FDA and CMV (Serguei Jidkov) + +CR .( Loading Intel Pentium MMX disassembler...) + +WARNING @ +BASE @ +GET-CURRENT +( warn base wid ) + +WARNING 0! +DECIMAL + +REQUIRE [DEFINED] lib/include/tools.f +\ REQUIRE [IF] ~mak\CompIF.f +REQUIRE CASE lib/ext/case.f +\ REQUIRE WITHIN lib\include\core-ext.f +REQUIRE NextNFA lib/ext/vocs.f + +: DEFER VECT ; + +: DUP>R R> OVER >R >R ; + +: UMAX ( D1 D2 -- FLAG ) + 2DUP U< IF NIP ELSE DROP THEN ; + + +80 CONSTANT MAXSTRING + +255 CONSTANT MAXCOUNTED \ maximum length of contents of a counted string + +: 0X BASE @ HEX >R BL WORD ?LITERAL + R> BASE ! ; IMMEDIATE + +: "CLIP" ( a1 n1 -- a1 n1' ) \ clip a string to between 0 and MAXCOUNTED + MAXCOUNTED MIN 0 MAX ; + +: PLACE ( addr len dest -- ) + SWAP "CLIP" SWAP + 2DUP 2>R + CHAR+ SWAP MOVE + 2R> C! ; + +: +PLACE ( addr len dest -- ) \ append string addr,len to counted + \ string dest + >R "CLIP" MAXCOUNTED R@ C@ - MIN R> + \ clip total to MAXCOUNTED string + 2DUP 2>R + + COUNT CHARS + SWAP MOVE + 2R> +! ; + +: C+PLACE ( c1 a1 -- ) \ append char c1 to the counted string at a1 + DUP 1+! COUNT + 1- C! ; + + +: OFF 0! ; + +: BLANK ( addr len -- ) \ fill addr for len with spaces (blanks) + BL FILL ; + +128 CONSTANT SPCS-MAX ( optimization for SPACES ) + +CREATE SPCS SPCS-MAX ALLOT + SPCS SPCS-MAX BLANK + +C" UPC" FIND NIP 0= +[IF] +: UPC ( c -- c' ) + DUP [CHAR] Z U> + IF 0xDF AND + THEN ; +[THEN] + +: (D.) ( d -- addr len ) TUCK DABS <# #S ROT SIGN #> ; + + +80 VALUE COLS + +: H.R ( n1 n2 -- ) \ display n1 as a hex number right + \ justified in a field of n2 characters + BASE @ >R HEX >R + 0 <# #S #> R> OVER - 0 MAX SPACES TYPE + R> BASE ! ; + +: H.N ( n1 n2 -- ) \ display n1 as a HEX number of n2 digits + BASE @ >R HEX >R + 0 <# R> 0 ?DO # LOOP #> TYPE + R> BASE ! ; + +0 VALUE DEFAULT-16BIT? + +: DEFAULT-16BIT ( -- ) + TRUE TO DEFAULT-16BIT? ; + +: DEFAULT-32BIT ( -- ) + FALSE TO DEFAULT-16BIT? ; + + DEFER SHOW-NAME ( CFA -- ) \ DISPLAY NEAREST SYMBOL + +0 VALUE BASE-ADDR + +VOCABULARY DISASSEMBLER +ALSO DISASSEMBLER DEFINITIONS + +CREATE S-BUF MAXSTRING ALLOT + +: >S ( A1 N1 -- ) + S-BUF +PLACE ; + +: 0>S ( -- ) \ RESET S-BUF + S-BUF OFF ; + +: SSPACES ( N1 -- ) + SPCS SWAP S-BUF +PLACE ; + +: SSPACE ( -- ) + 1 SSPACES ; + +: EMIT>S ( C1 -- ) + S-BUF C+PLACE ; + +: S> ( -- A1 N1 ) + S-BUF COUNT ; + +: (.S") ( addr len -- ) + S-BUF +PLACE ; + +: .S" ( 'TEXT' -- ) + [CHAR] " PARSE + POSTPONE SLITERAL + POSTPONE (.S") ; IMMEDIATE + + +: D.R>S ( D W -- ) + >R (D.) R> OVER - SSPACES >S ; + +: .R>S ( N W -- ) + >R S>D R> D.R>S ; + +: U.R>S ( U W -- ) + 0 SWAP D.R>S ; + +: H.>S ( U -- ) + BASE @ SWAP HEX 0 (D.) >S SSPACE BASE ! ; + +: H.R>S ( N1 N2 -- ) + BASE @ >R HEX >R + 0 <# #S #> R> OVER - SSPACES >S + R> BASE ! ; + +: ?.NAME>S ( CFA -- ) +\ ELIMINATE " 0X" + DUP 1 H.R>S SSPACE + NEAR_NFA + >R DUP + IF .S" ( " DUP COUNT >S + NAME> R> - DUP + IF DUP .S" +" NEGATE H.>S + THEN DROP .S" ) " + ELSE RDROP DROP + THEN + ; + +' ?.NAME>S TO SHOW-NAME + +\ 32 CONSTANT COMMENT-COL + +0 VALUE SIZE +0 VALUE 16-BIT-DATA +0 VALUE 16-BIT-ADDR +0 VALUE PREFIX-OP +0 VALUE MMX-REG + +: @+ ( ADDR -- ADDR N ) DUP CELL+ SWAP @ ; +: W@+ ( ADDR -- ADDR N ) DUP 2 + SWAP W@ ; + +: SEXT ( BYTE -- N ) DUP 128 AND IF 0xFFFFFF00 OR THEN ; +: MOD/SIB ( MOD-R-R/M -- R/M R MOD ) \ R INCLUDING GENERAL, SPECIAL, SEGMENT, MMX + ( MOD-OP-R/M -- R/M OP MOD ) + ( S-I-B -- B I S ) + 255 AND 8 /MOD 8 /MOD ; + +: ??? ( N1 -- ) + .S" ??? " DROP ; + +: SS. ( N ADR LEN W ) >R DROP SWAP R@ * + R> >S SSPACE ; + +: TTTN ( CODE -- ) 15 AND S" O NOB AEE NEBEA S NSP NPL GELEG " 2 SS. ; + +: SREG ( SREG -- ) 3 RSHIFT 7 AND S" ESCSSSDSFSGSXXXX" 2 SS. ; +: CREG ( EEE -- ) 3 RSHIFT 7 AND S" CR0???CR2CR3CR4?????????" 3 SS. ; +: DREG ( EEE -- ) 3 RSHIFT 7 AND S" DR0DR1DR2DR3??????DR6DR7" 3 SS. ; +: TREG ( EEE -- ) 3 RSHIFT 7 AND S" ?????????TR3TR4TR5TR6TR7" 3 SS. ; \ OBSOLETE +: MREG ( N -- ) 7 AND S" MM0MM1MM2MM3MM4MM5MM6MM7" 3 SS. ; + +: REG8 ( N -- ) 7 AND S" ALCLDLBLAHCHDHBH" 2 SS. ; +: REG16 ( N -- ) 7 AND S" AXCXDXBXSPBPSIDI" 2 SS. ; +: REG32 ( N -- ) 7 AND S" EAXECXEDXEBXESPEBPESIEDI" 3 SS. ; +: REG16/32 ( N -- ) + 16-BIT-DATA + IF REG16 + ELSE REG32 + THEN ; +: REG ( A N -- A ) + MMX-REG + IF MREG + ELSE SIZE + IF REG16/32 + ELSE REG8 + THEN + THEN + ; + +: [BASE16] ( R/M -- ) 4 - S" [SI][DI][BP][BX]" 4 SS. ; + \ R/M = 4 , 5 , 6 , 7 +: [IND16] ( R/M -- ) S" [BX+SI][BX+DI][BP+SI][BP+DI]" 7 SS. ; + \ R/M = 0 , 1 , 2 , 3 +: [REG16] ( R/M -- ) DUP 4 < + IF [IND16] + ELSE [BASE16] + THEN ; +: [REG32] ( N -- ) 7 AND S" [EAX][ECX][EDX][EBX][ESP][EBP][ESI][EDI]" 5 SS. ; + + +: [REG*2] ( I -- ) S" [EAX*2][ECX*2][EDX*2][EBX*2][XXX*2][EBP*2][ESI*2][EDI*2]" 7 SS. ; +: [REG*4] ( I -- ) S" [EAX*4][ECX*4][EDX*4][EBX*4][XXX*4][EBP*4][ESI*4][EDI*4]" 7 SS. ; +: [REG*8] ( I -- ) S" [EAX*8][ECX*8][EDX*8][EBX*8][XXX*8][EBP*8][ESI*8][EDI*8]" 7 SS. ; +: [INDEX] ( SIB -- ) MOD/SIB OVER 4 = + IF 2DROP \ NO ESP SCALED INDEX + ELSE CASE ( S ) + 0 OF [REG32] ENDOF + 1 OF [REG*2] ENDOF + 2 OF [REG*4] ENDOF + 3 OF [REG*8] ENDOF + ENDCASE + THEN DROP ; + +: DISP8 ( ADR -- ADR' ) COUNT H.>S ; +: DISP16 ( ADR -- ADR' ) W@+ SHOW-NAME ; +: DISP32 ( ADR -- ADR' ) @+ ( BODY> ) SHOW-NAME ; +: DISP16/32 ( ADR -- ADR' ) + 16-BIT-ADDR + IF DISP16 + ELSE DISP32 + THEN ; + +: ., ( -- ) .S" , " ; + +: .# ., .S" # " ; + +: IMM8 ( ADR -- ADR' ) .# COUNT H.>S ; + +\ : IMM16 ( ADR -- ADR' ) .# W@+ H.>S ; + +: IMM16/32 ( ADR -- ADR' ) + .# 16-BIT-DATA + IF W@+ + ELSE @+ + THEN H.>S ; + +: SIB ( ADR MOD -- ADR ) + >R COUNT TUCK 7 AND 5 = R@ 0= AND + IF DISP32 SWAP [INDEX] R> DROP \ EBP BASE AND MOD = 00 + ELSE R> CASE ( MOD ) + 1 OF DISP8 ENDOF + 2 OF DISP32 ENDOF + ENDCASE + SWAP DUP [REG32] [INDEX] + THEN ; + + +: MOD-R/M32 ( ADR R/M MOD -- ADR' ) + DUP 3 = + IF DROP REG \ MOD = 3, REGISTER CASE + ELSE OVER 4 = + IF NIP SIB \ R/M = 4, SIB CASE + ELSE 2DUP 0= SWAP 5 = AND \ MOD = 0, R/M = 5, + IF 2DROP DISP32 \ DISP32 CASE + ELSE ROT SWAP + CASE ( MOD ) + 1 OF DISP8 ENDOF + 2 OF DISP32 ENDOF + ENDCASE + SWAP [REG32] + THEN + THEN + THEN ; + +: MOD-R/M16 ( ADR R/M MOD -- ADR' ) + 2DUP 0= SWAP 6 = AND + IF 2DROP DISP16 \ DISP16 CASE + ELSE CASE ( MOD ) + 0 OF [REG16] ENDOF + 1 OF SWAP DISP8 SWAP [REG16] ENDOF + 2 OF SWAP DISP16 SWAP [REG16] ENDOF + 3 OF REG ENDOF + ENDCASE + THEN ; + +: MOD-R/M ( ADR MODR/M -- ADR' ) + MOD/SIB NIP 16-BIT-ADDR + IF MOD-R/M16 + ELSE MOD-R/M32 + THEN ; + + +: R/M8 0 TO SIZE MOD-R/M ; +: R/M16/32 1 TO SIZE MOD-R/M ; +: R/M16 TRUE TO 16-BIT-DATA R/M16/32 ; + +: R,R/M ( ADR -- ADR' ) + COUNT DUP 3 RSHIFT REG ., MOD-R/M ; + +: R/M,R ( ADR -- ADR' ) + COUNT DUP>R MOD-R/M ., R> 3 RSHIFT REG ; + +: R/M ( ADR OP -- ADR' ) + 2 AND + IF R,R/M + ELSE R/M,R + THEN ; + +\ -------------------- SIMPLE OPCODES -------------------- + +: INH ( -- ) + CREATE + BL WORD COUNT HERE PLACE + HERE C@ 1+ ALLOT + DOES> COUNT >S SSPACE DROP ; + +INH CLC CLC +INH STC STC +INH CLD CLD +INH STD STD +\ INH RPNZ REPNZ +\ INH REPZ REPZ +INH CBW CBW +INH CDQ CDQ +INH DAA DAA +INH DAS DAS +INH AAA AAA +INH AAS AAS +\ INH LOCK LOCK +INH INB INSB +INH OSB OUTSB +INH SAH SAHF +INH LAH LAHF +\ INH AAM AAM +\ INH AAD AAD +INH HLT HLT +INH CMC CMC +INH XLT XLAT +INH CLI CLI +INH STI STI + +INH CLT CLTS +INH INV INVD +INH WIV WBINVD +INH UD2 UD2 +INH WMR WRMSR +INH RTC RDTSC +INH RMR RDMSR +INH RPC RDPMC +INH EMS EMMS +INH RSM RSM +INH CPU CPUID +INH UD1 UD1 +\ INH LSS LSS +\ INH LFS LFS +\ INH LGS LGS + +\ INH D16: D16: +\ INH A16: A16: +\ INH ES: ES: +\ INH CS: CS: +\ INH DS: DS: +\ INH FS: FS: +\ INH GS: GS: + +: AAM ( ADR CODE -- ADR' ) + .S" AAM" DROP COUNT DROP ; + +: AAD ( ADR CODE -- ADR' ) + .S" AAD" DROP COUNT DROP ; + +: D16 ( ADR CODE -- ADR' ) + DROP .S" D16:" + TRUE TO 16-BIT-DATA + TRUE TO PREFIX-OP + ; + +: A16 ( ADR CODE -- ADR' ) + DROP .S" A16:" + TRUE TO 16-BIT-ADDR + TRUE TO PREFIX-OP + ; + +: RPZ ( ADR CODE -- ADR' ) + DROP .S" REPNZ" + TRUE TO PREFIX-OP + ; + +: REP ( ADR CODE -- ADR' ) + DROP .S" REPZ" + TRUE TO PREFIX-OP + ; + +: LOK ( ADR CODE -- ADR' ) \ THIS SHOULD HAVE ERROR CHECKING ADDED + DROP .S" LOCK" + TRUE TO PREFIX-OP + ; + +: CS: ( ADR CODE -- ADR' ) + DROP .S" CS:" + TRUE TO PREFIX-OP + ; + +: DS: ( ADR CODE -- ADR' ) + DROP .S" DS:" + TRUE TO PREFIX-OP + ; + +: SS: ( ADR CODE -- ADR' ) + DROP .S" SS:" + TRUE TO PREFIX-OP + ; + +: ES: ( ADR CODE -- ADR' ) + DROP .S" ES:" + TRUE TO PREFIX-OP + ; + +: GS: ( ADR CODE -- ADR' ) + DROP .S" GS:" + TRUE TO PREFIX-OP + ; + +: FS: ( ADR CODE -- ADR' ) + DROP .S" FS:" + TRUE TO PREFIX-OP + ; + +: ISD ( ADR CODE -- ADR' ) + DROP 16-BIT-DATA + IF .S" INSW " + ELSE .S" INSD " + THEN ; + +: OSD ( ADR CODE -- ADR' ) + DROP 16-BIT-DATA + IF .S" OUTSW " + ELSE .S" OUTSD " + THEN ; + +: INP ( ADDR CODE -- ADDR' ) + .S" IN " 1 AND + IF 16-BIT-DATA + IF .S" AX , " + ELSE .S" EAX , " + THEN + ELSE .S" AL , " + THEN + COUNT H.>S ; + +: OTP ( ADDR CODE -- ADDR' ) + .S" OUT " 1 AND + IF COUNT H.>S 16-BIT-DATA + IF .S" , AX" + ELSE .S" , EAX" + THEN + ELSE COUNT H.>S .S" , AL" + THEN + ; + +: IND ( ADDR CODE -- ADDR' ) + .S" IN " 1 AND + IF 16-BIT-DATA + IF .S" AX , DX" + ELSE .S" EAX , DX" + THEN + ELSE .S" AL , DX" + THEN + ; + +: OTD ( ADDR CODE -- ADDR' ) + .S" OUT " 1 AND + IF 16-BIT-DATA + IF .S" DX , AX" + ELSE .S" DX , EAX" + THEN + ELSE .S" DX , AL" + THEN + ; + +\ -------------------- ALU OPCODES -------------------- + +: .ALU ( N -- ) + 7 AND S" ADDOR ADCSBBANDSUBXORCMP" 3 SS. 4 SSPACES + ; + +: ALU ( ADR OP -- ADR' ) + DUP 3 RSHIFT .ALU R/M ; + +: ALI ( ADR OP -- ADR' ) + >R COUNT + DUP 3 RSHIFT .ALU + MOD-R/M + R> 3 AND ?DUP + IF 1 = + IF IMM16/32 + ELSE .# COUNT SEXT 0 .R>S SSPACE + THEN + ELSE IMM8 + THEN ; + +: ALA ( ADR OP -- ADR' ) + DUP 3 RSHIFT .ALU + 1 AND IF 0 REG IMM16/32 ELSE 0 REG8 IMM8 THEN ; + + +\ -------------------- TEST/XCHG -------------------- + +: TXB ( ADDR OP -- ADDR' ) + DUP 3 AND S" TESTTESTXCHGXCHG" 4 SS. 3 SSPACES + 1 AND + IF 1 TO SIZE R,R/M \ SMUB REMOVED COUNT + ELSE 0 TO SIZE R,R/M \ SMUB REMOVED COUNT + THEN + ; + +: TST ( ADDR OP -- ADDR' ) + .S" TEST " 1 AND + IF 16-BIT-DATA + IF .S" AX , " + ELSE .S" EAX , " + THEN + IMM16/32 + ELSE .S" AL , " IMM8 + THEN + ; + +\ -------------------- INC/DEC ---------------------- + +: INC ( ADDR OP -- ADDR' ) + .S" INC " REG16/32 ; + +: DEC ( ADDR OP -- ADDR' ) + .S" DEC " REG16/32 ; + + +\ -------------------- PUSH/POP -------------------- + +: PSH ( ADDR OP -- ADDR' ) + .S" PUSH " REG16/32 ; + +: POP ( ADDR OP -- ADDR' ) + .S" POP " REG16/32 ; + +: PSS ( ADDR OP -- ADDR' ) + .S" PUSH " SREG ; + +: PPS ( ADDR OP -- ADDR' ) + .S" POP " SREG ; + +: PSA ( ADDR OP -- ADDR' ) + DROP 16-BIT-DATA + IF .S" PUSHA " + ELSE .S" PUSHAD " + THEN ; + +: PPA ( ADDR OP -- ADDR' ) + DROP 16-BIT-DATA + IF .S" POPA " + ELSE .S" POPAD " + THEN ; + +: PSI ( ADDR OP -- ADDR' ) + .S" PUSH " 2 AND + IF IMM8 + ELSE IMM16/32 + THEN ; + +: PSF ( ADDR OP -- ADDR' ) + DROP 16-BIT-DATA + IF .S" PUSHF " + ELSE .S" PUSHFD " + THEN ; + +: PPF ( ADDR OP -- ADDR' ) + DROP 16-BIT-DATA + IF .S" POPF " + ELSE .S" POPFD " + THEN ; + +: 8F. ( ADDR OP -- ADDR' ) + DROP COUNT .S" POP " R/M16/32 ; + +\ -------------------- MOVE -------------------- + +: MOV ( ADDR OP -- ADDR' ) + .S" MOV " R/M ; + +: MRI ( ADDR OP -- ADDR' ) ( MOV REGISTER, IMM ) + .S" MOV " DUP 8 AND + IF REG16/32 IMM16/32 + ELSE REG8 IMM8 + THEN ; + +: MVI ( ADR OP -- ADR' ) ( MOV MEM, IMM ) + .S" MOV " DROP COUNT MOD-R/M + SIZE + IF IMM16/32 + ELSE IMM8 + THEN + ; + +: MRS ( ADDR OP -- ADDR' ) +\ ? REMOVE REDUNDANT >R , R> + 16-BIT-DATA + IF .S" MOV " DROP + 1 TO SIZE + COUNT DUP MOD-R/M ., + SREG + ELSE ??? + THEN ; + +: MSR ( ADDR OP -- ADDR' ) + 16-BIT-DATA + IF .S" MOV " DROP + 1 TO SIZE + COUNT DUP SREG ., + MOD-R/M + ELSE ??? + THEN ; + +: MRC ( ADDR OP -- ADDR' ) + .S" MOV " + DROP COUNT DUP REG32 .S" , " + CREG ; + +: MCR ( ADDR OP -- ADDR' ) + .S" MOV " + DROP COUNT DUP CREG .S" , " + REG32 ; + +: MRD ( ADDR OP -- ADDR' ) + .S" MOV " + DROP COUNT DUP REG32 .S" , " + DREG ; + +: MDR ( ADDR OP -- ADDR' ) + .S" MOV " + DROP COUNT DUP DREG .S" , " + REG32 ; + +: MRT ( ADDR OP -- ADDR' ) +\ OBSOLETE + .S" MOV " + DROP COUNT DUP REG32 .S" , " + TREG ; + +: MTR ( ADDR OP -- ADDR' ) +\ OBSOLETE + .S" MOV " + DROP COUNT DUP TREG .S" , " + REG32 ; + +: MV1 ( ADDR OP -- ADDR' ) + .S" MOV " 1 AND + IF 16-BIT-DATA + IF .S" AX , " + ELSE .S" EAX , " + THEN + ELSE .S" AL , " + THEN + DISP16/32 ; + +: MV2 ( ADDR OP -- ADDR' ) + .S" MOV " SWAP DISP16/32 ., + SWAP 1 AND + IF 16-BIT-DATA + IF .S" AX" + ELSE .S" EAX" + THEN + ELSE .S" AL" + THEN + ; + +: LEA ( ADDR OP -- ADDR' ) + .S" LEA " DROP 1 TO SIZE R,R/M ; + +: LXS ( ADDR OP -- ADDR' ) + 1 AND + IF .S" LDS " + ELSE .S" LES " + THEN + R,R/M \ SMUB REMOVED COUNT + ; + +: BND ( ADDR OP -- ADDR' ) + .S" BOUND " DROP 1 TO SIZE R,R/M ; + +: ARP ( ADDR OP -- ADDR' ) + .S" ARPL " DROP + 1 TO SIZE + TRUE TO 16-BIT-DATA + R,R/M + ; + +: MLI ( ADDR OP -- ADDR' ) + 1 TO SIZE + .S" IMUL " 0x69 = + IF R,R/M IMM16/32 + ELSE R,R/M IMM8 + THEN ; + +\ -------------------- JUMPS AND CALLS -------------------- + +0 VALUE MAX_REFERENCE + +: >MAX_R DUP MAX_REFERENCE UMAX TO MAX_REFERENCE ; + +: REL8 ( ADDR OP -- ADDR' ) + COUNT SEXT OVER + BASE-ADDR - >MAX_R H.>S ; + + + +: REL16/32 ( ADDR OP -- ADDR' ) + 16-BIT-ADDR + IF W@+ + ELSE @+ + THEN OVER + BASE-ADDR - >MAX_R SHOW-NAME ; + +: JSR ( ADDR OP -- ADDR' ) + .S" CALL " DROP REL16/32 ; + +: JMP ( ADDR OP -- ADDR' ) + .S" JMP " 2 AND IF REL8 ELSE REL16/32 THEN ; + +: .JXX ( ADDR OP -- ADDR' ) + .S" J" TTTN 4 SSPACES ; + +: BRA ( ADDR OP -- ADDR' ) + .JXX REL8 ; + +: LUP ( ADDR OP -- ADDR' ) + 3 AND S" LOOPNZLOOPZ LOOP JECXZ " 6 SS. 1 SSPACES REL8 ; + +: LBR ( ADDR OP -- ADDR' ) + .JXX REL16/32 ; + +: RTN ( ADDR OP -- ADDR' ) + .S" RET NEAR " 1 AND 0= + IF W@+ H.>S + THEN ; + +: RTF ( ADDR OP -- ADDR' ) + .S" RET FAR " 1 AND 0= + IF W@+ H.>S + THEN ; + +: ENT ( ADDR OP -- ADDR' ) + DROP + .S" ENTER " W@+ H.>S ., COUNT H.>S ; + +: CIS ( ADDR OP -- ADDR' ) + 0x9A = + IF .S" CALL " + ELSE .S" JMP " + THEN + 16-BIT-DATA + IF .S" PTR16:16 " + ELSE .S" PTR16:32 " + THEN + COUNT MOD-R/M ; + +: NT3 ( ADDR OP -- ADDR' ) + DROP .S" INT 3 " + ; + +: INT ( ADDR OP -- ADDR' ) + DROP .S" INT " + COUNT H.>S ; + +INH LEV LEAVE +INH IRT IRET +INH NTO INTO + +\ -------------------- STRING OPS -------------------- + +: STR INH DOES> COUNT >S 1 AND IF .S" D" ELSE .S" B" THEN ; + +STR MVS MOVS +STR CPS CMPS +STR STS STOS +STR LDS LODS +STR SCS SCAS + +\ -------------------- EXCHANGE -------------------- + +: XGA ( ADDR OP -- ADDR' ) + .S" XCHG EAX, " REG16/32 ; + +\ : XCH ( ADDR OP -- ADDR' ) +\ .S" XCHG " DROP R,R/M ; + + +\ -------------------- SHIFTS & ROTATES -------------------- + +: .SHIFT ( N -- ) + 7 AND S" ROLRORRCLRCRSHLSHRXXXSAR" 3 SS. 4 SSPACES ; + +: SHF ( ADDR OP -- ADDR' ) + >R COUNT + DUP 3 RSHIFT .SHIFT + MOD-R/M ., + R> 0xD2 AND + CASE + 0xC0 OF COUNT H.>S ENDOF + 0xD0 OF 1 H.>S ENDOF + 0xD2 OF 1 REG8 ENDOF + ENDCASE ; + +\ -------------------- EXTENDED OPCODES -------------------- + +: WF1 ( ADDR -- ADDR' ) + 1+ COUNT DUP + 0x0C0 < + IF DUP + 3 RSHIFT 7 AND + CASE 6 OF .S" FSTENV " MOD-R/M ENDOF + 7 OF .S" FSTCW WORD " MOD-R/M ENDOF + 2DROP 2 - DUP .S" FWAIT " + ENDCASE + ELSE DROP 2 - .S" FWAIT " + THEN ; + +: WF2 ( ADDR -- ADDR' ) + 1+ COUNT + CASE 0xE2 OF .S" FCLEX " ENDOF + 0xE3 OF .S" FINIT " ENDOF + SWAP 2 - SWAP .S" FWAIT " + ENDCASE ; + +: WF3 ( ADDR -- ADDR' ) + 1+ COUNT DUP 3 RSHIFT 7 AND + CASE 6 OF .S" FSAVE " MOD-R/M ENDOF + 7 OF .S" FSTSW WORD " MOD-R/M ENDOF + 2DROP 2 - DUP .S" FWAIT " + ENDCASE ; + +: WF4 ( ADDR -- ADDR' ) + 1+ COUNT 0xE0 = + IF .S" FSTSW AX " + ELSE 2 - .S" FWAIT " + THEN ; + +: FWAITOPS ( ADDR OP -- ADDR' ) + CASE 0xD9 OF WF1 ENDOF + 0xDB OF WF2 ENDOF + 0xDD OF WF3 ENDOF + 0xDF OF WF4 ENDOF + .S" FWAIT " + ENDCASE ; + +: W8F ( ADDR OP -- ADDR' ) + DROP DUP C@ DUP 0xF8 AND 0xD8 = + IF FWAITOPS + ELSE DROP .S" WAIT " + THEN ; + +: FALU1 ( XOPCODE -- ) + 3 RSHIFT 7 AND + S" FADD FMUL FCOM FCOMPFSUB FSUBRFDIV FDIVR" + 5 SS. 2 SSPACES ; + +: FALU5 ( XOPCODE -- ) + 3 RSHIFT 7 AND + S" FADD FMUL ???? ???? FSUBRFSUB FDIVRFDIV " + 5 SS. 2 SSPACES ; + +: STI. ( OP -- ) + 7 AND .S" ST(" 1 .R>S .S" )"; + +\ : STI.ST ( OP -- ) +\ 7 AND +\ .S" ST(" 1 .R>S .S" )" .S" ST " ; + +: FD8 ( ADDR OPCODE -- ADDR' ) + DROP COUNT DUP FALU1 + DUP 0xC0 < + IF .S" FLOAT " MOD-R/M + ELSE DUP 0xF0 AND 0xD0 = + IF STI. + ELSE .S" ST , " STI. + THEN + THEN ; + +: FDC ( ADDR OPCODE -- ADDR' ) + DROP COUNT + DUP DUP 0xC0 < + IF FALU1 .S" DOUBLE " MOD-R/M + ELSE FALU5 STI. .S" , ST" + THEN ; + +: FNULLARY-F ( OP -- ) + 0x0F AND DUP 8 < + IF + S" F2XM1 FYL2X FPTAN FPATAN FXTRACTFPREM1 FDECSTPFINCSTP" + ELSE 8 - + S" FPREM FYL2XP1FSQRT FSINCOSFRNDINTFSCALE FSIN FCOS " + THEN + 7 SS. ; + +: FNULLARY-E ( OP -- ) + 0x0F AND DUP 8 < + IF + S" FCHS FABS ??? ??? FTST FXAM ??? ??? " + ELSE 8 - + S" FLD1 FLDL2T FLDL2E FLDPI FLDLG2 FLDLN2 FLDZ ??? " + THEN + 7 SS. ; + +: FNULLARY ( OP -- ) + DUP 0xEF > + IF FNULLARY-F EXIT + THEN + DUP 0xE0 < + IF 0xD0 = + IF .S" FNOP" + ELSE DUP ??? + THEN + EXIT + THEN + FNULLARY-E ; + + +\ : FALU2 ( OP -- ) +\ 3 RSHIFT 7 AND +\ S" FLD ??? FST FSTP FLDENV FLDCW FNSTENVFNSTCW " +\ 7 SS. ; + +: FD9 ( ADDR OP -- ADDR' ) + DROP COUNT DUP 0xC0 < + IF DUP 0x38 AND + CASE + 0x00 OF .S" FLD FLOAT " ENDOF + 0x10 OF .S" FST FLOAT " ENDOF + 0x18 OF .S" FSTP FLOAT " ENDOF + 0x20 OF .S" FLDENV " ENDOF + 0x28 OF .S" FLDCW WORD " ENDOF + 0x30 OF .S" FNSTENV " ENDOF + 0x38 OF .S" FNSTCW WORD " ENDOF + DUP ??? + ENDCASE + MOD-R/M + ELSE + DUP 0xD0 < + IF DUP 0xC8 < + IF .S" FLD " + ELSE .S" FXCH " + THEN + STI. + ELSE FNULLARY + THEN + THEN ; + +: FALU3 ( OP -- ) + 3 RSHIFT 7 AND + S" FIADD FIMUL FICOM FICOMPFISUB FISUBRFIDIV FIDIVR" + 6 SS. 1 SSPACES ; + +: FCMOVA ( OP -- ) + 3 RSHIFT 7 AND + S" FCMOVB FCMOVE FCMOVBEFCMOVU ??? ??? ??? ??? " + 7 SS. ; + +: FDA ( ADDR OP -- ) + DROP COUNT DUP 0xC0 < + IF DUP FALU3 .S" DWORD " MOD-R/M + ELSE DUP 0xE9 = + IF .S" FUCOMPP" DROP + ELSE DUP FCMOVA STI. + THEN + THEN ; + +: FALU7 ( OP -- ) + 3 RSHIFT 7 AND + S" FADDP FMULP ??? ??? FSUBRPFSUBP FDIVRPFDIVP " + 6 SS. SSPACE ; + +: FDE ( ADDR OP -- ADDR' ) + DROP COUNT DUP 0xC0 < + IF DUP FALU3 .S" WORD " MOD-R/M + ELSE DUP 0xD9 = + IF .S" FCOMPP" DROP + ELSE DUP FALU7 STI. + THEN + THEN ; + + +: FCMOVB ( OP -- ) + 3 RSHIFT 7 AND + S" FCMOVNB FCMOVNE FCMOVNBEFCMOVNU ??? FUCOMI FCOMI ??? " + 8 SS. ; + +: FDB ( ADDR OP -- ADDR' ) + DROP COUNT DUP 0xC0 < + IF DUP 0x38 AND + CASE 0x00 OF .S" FILD DWORD " ENDOF + 0x10 OF .S" FIST DWORD " ENDOF + 0x18 OF .S" FISTP DWORD " ENDOF + 0x28 OF .S" FLD EXTENDED " ENDOF + 0x38 OF .S" FSTP EXTENDED " ENDOF + DUP ??? + ENDCASE + MOD-R/M + ELSE + CASE 0xE2 OF .S" FNCLEX" ENDOF + 0xE3 OF .S" FNINIT" ENDOF + DUP DUP FCMOVB STI. + ENDCASE + THEN ; + +: FALU6 ( OP -- ) + 3 RSHIFT 7 AND + S" FFREE ??? FST FSTP FUCOM FUCOMP??? ??? " + 6 SS. SSPACE ; + +: FDD ( ADDR OP -- ADDR' ) + DROP COUNT DUP 0xC0 < + IF DUP 0x38 AND + CASE 0x00 OF .S" FLD DOUBLE " ENDOF + 0x10 OF .S" FST DOUBLE " ENDOF + 0x18 OF .S" FSTP DOUBLE " ENDOF + 0x20 OF .S" FRSTOR " ENDOF + 0x30 OF .S" FNSAVE " ENDOF + 0x38 OF .S" FNSTSW WORD " ENDOF + DUP ??? + ENDCASE + MOD-R/M + ELSE DUP FALU6 STI. + THEN ; + +: FDF ( ADDR OP -- ADDR' ) + DROP COUNT DUP 0xC0 < + IF DUP 0x38 AND + CASE 0x00 OF .S" FILD WORD " ENDOF + 0x10 OF .S" FIST WORD " ENDOF + 0x18 OF .S" FISTP WORD " ENDOF + 0x20 OF .S" FBLD TBYTE " ENDOF + 0x28 OF .S" FILD QWORD " ENDOF + 0x30 OF .S" FBSTP TBYTE " ENDOF + 0x38 OF .S" FISTP QWORD " ENDOF + DUP ??? + ENDCASE + MOD-R/M + ELSE DUP 0xE0 = + IF .S" FNSTSW AX " DROP + ELSE DUP 0x38 AND + CASE 0x28 OF .S" FUCOMIP " STI. ENDOF + 0x30 OF .S" FCOMIP " STI. ENDOF + ??? + ENDCASE + THEN + THEN ; + +: GP6 ( ADDR OP -- ADDR' ) + DROP COUNT DUP 3 RSHIFT + 7 AND S" SLDTSTR LLDTLTR VERRVERW??? ???" 4 SS. 3 SSPACES + R/M16 ; + +: GP7 ( ADDR OP -- ADDR' ) + DROP COUNT DUP 3 RSHIFT + 7 AND DUP S" SGDT SIDT LGDT LIDT SMSW ??? LMSW INVLPG" 6 SS. 1 SSPACES + 4 AND 4 = + IF R/M16 + ELSE R/M16/32 + THEN ; + +: BTX. ( N -- ) + 3 RSHIFT + 3 AND S" BT BTSBTRBTC" 3 SS. 4 SSPACES ; + +: GP8 ( ADDR OP -- ADDR' ) + DROP COUNT DUP BTX. + R/M16/32 IMM8 ; + +: LAR ( ADDR OP -- ADDR' ) + .S" LAR " DROP R,R/M ; + +: LSL ( ADDR OP -- ADDR' ) + .S" LSL " DROP R,R/M ; + +: LSS ( ADDR OP -- ADDR' ) + .S" LSS " DROP R,R/M ; + +: LFS ( ADDR OP -- ADDR' ) + .S" LFS " DROP R,R/M ; + +: LGS ( ADDR OP -- ADDR' ) + .S" LGS " DROP R,R/M ; + +: BTX ( ADDR OP -- ADDR' ) + BTX. R/M,R ; + +: SLI ( ADDR OP -- ADDR' ) + .S" SHLD " DROP R/M,R IMM8 ; + +: SRI ( ADDR OP -- ADDR' ) + .S" SHRD " DROP R/M,R IMM8 ; + +: SLC ( ADDR OP -- ADDR' ) + .S" SHLD " DROP R/M,R .S" , CL" ; + +: SRC ( ADDR OP -- ADDR' ) + .S" SHRD " DROP R/M,R .S" , CL" ; + +: IML ( ADDR OP -- ADDR' ) + .S" IMUL " DROP R,R/M ; + +: CXC ( ADDR OP -- ADDR' ) + .S" CMPXCHG " 1 AND TO SIZE R/M,R ; + +: MVX ( ADDR OP -- ADDR' ) + DUP 8 AND + IF .S" MOVSX " + ELSE .S" MOVZX " + THEN + 1 AND >R + COUNT MOD/SIB R> \ SIZE BIT + IF SWAP REG32 ., \ WORD TO DWORD CASE + 3 = + IF REG16 + ELSE .S" WORD PTR " DROP DUP 1- C@ MOD-R/M + THEN + ELSE SWAP REG16/32 ., \ BYTE CASE + 3 = + IF REG8 + ELSE .S" BYTE PTR " DROP DUP 1- C@ MOD-R/M + THEN + THEN ; + +: XAD ( ADDR OP -- ADDR' ) + .S" XADD " 1 AND TO SIZE R/M,R ; + +: BSF ( ADDR OP -- ADDR' ) + .S" BSF " DROP R,R/M ; + +: BSR ( ADDR OP -- ADDR' ) + .S" BSR " DROP R,R/M ; + +: CX8 ( ADDR OP -- ADDR' ) + .S" CMPXCHG8B " DROP COUNT R/M16/32 ; + +: BSP ( ADDR OP -- ADDR' ) + .S" BSWAP " REG32 ; + + +: F6. ( ADDR OP -- ADDR' ) +\ ?? + >R COUNT + DUP 3 RSHIFT 7 AND DUP>R S" TESTXXXXNOT NEG MUL IMULDIV IDIV" 4 SS. 3 SSPACES + MOD-R/M + R> 0= IF + R@ 1 AND IF IMM16/32 + ELSE IMM8 + THEN + THEN + R> DROP ; + +: FE. ( ADDR OP -- ADDR' ) + DROP COUNT + DUP 3 RSHIFT 7 AND + CASE + 0 OF .S" INC " ENDOF + 1 OF .S" DEC " ENDOF + .S" ??? " + ENDCASE R/M8 ; + +: FF. ( ADDR OP -- ADDR' ) + DROP COUNT + DUP 3 RSHIFT 7 AND + CASE + 0 OF .S" INC " ENDOF + 1 OF .S" DEC " ENDOF + 2 OF .S" CALL " ENDOF + 3 OF .S" CALL FAR " ENDOF + 4 OF .S" JMP " ENDOF + 5 OF .S" JMP FAR " ENDOF + 6 OF .S" PUSH " ENDOF + .S" ??? " + ENDCASE R/M16/32 ; + + +\ --------------------- CONDITIONAL MOVE --------------- + +: SET ( ADR OP -- ) + .S" SET" + TTTN 2 SSPACES + COUNT R/M8 ; + +: CMV ( ADR OP -- ) + .S" CMOV" + TTTN 1 SSPACES + R,R/M ; + +\ --------------------- MMX OPERATIONS ----------------- + +: MMX-SIZE ( OP -- ) + 3 AND S" BWDQ" 1 SS. ; + +: UPL ( ADR OP -- ADR' ) + 3 AND S" PUNPCKLBWPUNPCKLWDPUNPCKLDQ" 9 SS. R,R/M ; + +: UPH ( ADR OP -- ADR' ) + 3 AND S" PUNPCKHBWPUNPCKHWDPUNPCKHDQ" 9 SS. R,R/M ; + +: CGT ( ADR OP -- ADR' ) + .S" PCMPGT" MMX-SIZE R,R/M ; + +: CEQ ( ADR OP -- ADR' ) + .S" PCMPEQ" MMX-SIZE R,R/M ; + +: PSH. ( OP -- ) + 0x30 AND + CASE + 0x10 OF .S" PSRL" ENDOF + 0x20 OF .S" PSRA" ENDOF + 0x30 OF .S" PSLL" ENDOF + ENDCASE ; + +: GPA ( ADR OP -- ADR' ) + >R COUNT DUP PSH. R> MMX-SIZE 2 SSPACES MREG IMM8 ; + +: PUW ( ADR OP -- ADR' ) + .S" PACKUSDW " DROP R,R/M ; + +: PSB ( ADR OP -- ADR' ) + .S" PACKSSWB " DROP R,R/M ; + +: PSW ( ADR OP -- ADR' ) + .S" PACKSSDW " DROP R,R/M ; + +: MPD ( ADR OP -- ADR' ) + .S" MOVD " DROP COUNT MOD/SIB + SWAP MREG ., 3 = + IF REG32 + ELSE MOD-R/M + THEN ; + +: MDP ( ADR OP -- ADR' ) + .S" MOVD " DROP COUNT MOD/SIB + 3 = + IF SWAP REG32 + ELSE SWAP MOD-R/M + THEN ., MREG ; + +: MPQ ( ADR OP -- ADR' ) + .S" MOVQ " DROP R,R/M ; + +: MQP ( ADR OP -- ADR' ) + .S" MOVQ " DROP R/M,R ; + +: SHX ( ADR OP -- ADR' ) + DUP PSH. MMX-SIZE 2 SSPACES R,R/M ; + +: MLL ( ADR OP -- ADR' ) + .S" PMULLW " DROP R,R/M ; + +: MLH ( ADR OP -- ADR' ) + .S" PMULHW " DROP R,R/M ; + +: MAD ( ADR OP -- ADR' ) + .S" PMADDWD " DROP R,R/M ; + +: SUS ( ADR OP -- ADR' ) + .S" PSUBUS" MMX-SIZE R,R/M ; + +: SBS ( ADR OP -- ADR' ) + .S" PSUBS" MMX-SIZE SSPACE R,R/M ; + +: SUB ( ADR OP -- ADR' ) + .S" PSUB" MMX-SIZE 2 SSPACES R,R/M ; + +: AUS ( ADR OP -- ADR' ) + .S" PADDUS" MMX-SIZE R,R/M ; + +: ADS ( ADR OP -- ADR' ) + .S" PADDS" MMX-SIZE SSPACE R,R/M ; + +: ADD ( ADR OP -- ADR' ) + .S" PADD" MMX-SIZE 2 SSPACES R,R/M ; + +: PAD ( ADR OP -- ADR' ) + .S" PAND " DROP R,R/M ; + +: POR ( ADR OP -- ADR' ) + .S" POR " DROP R,R/M ; + +: PAN ( ADR OP -- ADR' ) + .S" PANDN " DROP R,R/M ; + +: PXR ( ADR OP -- ADR' ) + .S" PXOR " DROP R,R/M ; + + +\ -------------------- OPCODE TABLE -------------------- + +: OPS 0x10 0 DO ' , LOOP ; + + +CREATE OP-TABLE2 + +\ 0 1 2 3 4 5 6 7 8 9 A B C D E F + +OPS GP6 GP7 LAR LSL ??? ??? CLT ??? INV WIV ??? UD2 ??? ??? ??? ??? \ 0 +OPS ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? \ 1 +OPS MRC MRD MCR MDR MRT ??? MTR ??? ??? ??? ??? ??? ??? ??? ??? ??? \ 2 +OPS WMR RTC RMR RPC ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? \ 3 + +OPS CMV CMV CMV CMV CMV CMV CMV CMV CMV CMV CMV CMV CMV CMV CMV CMV \ 4 +OPS ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? \ 5 +OPS UPL UPL UPL PUW CGT CGT CGT PSB UPH UPH UPH PSW ??? ??? MPD MPQ \ 6 +OPS ??? GPA GPA GPA CEQ CEQ CEQ EMS ??? ??? ??? ??? ??? ??? MDP MQP \ 7 + +OPS LBR LBR LBR LBR LBR LBR LBR LBR LBR LBR LBR LBR LBR LBR LBR LBR \ 8 +OPS SET SET SET SET SET SET SET SET SET SET SET SET SET SET SET SET \ 9 +OPS PSS PPS CPU BTX SLI SLC ??? ??? PSS PPS RSM BTX SRI SRC ??? IML \ A +OPS CXC CXC LSS BTX LFS LGS MVX MVX ??? UD1 GP8 BTX BSF BSR MVX MVX \ B + +OPS XAD XAD ??? ??? ??? ??? ??? CX8 BSP BSP BSP BSP BSP BSP BSP BSP \ C +OPS ??? SHX SHX SHX ??? MLL ??? ??? SUS SUS ??? PAD AUS AUS ??? PAN \ D +OPS ??? SHX SHX ??? ??? MLH ??? ??? SBS SBS ??? POR ADS ADS ??? PXR \ E +OPS ??? ??? SHX SHX ??? MAD ??? ??? SUB SUB SUB ??? ADD ADD ADD ??? \ F + +\ 0 1 2 3 4 5 6 7 8 9 A B C D E F + +: 0F. ( ADR CODE -- ) + DROP COUNT DUP + DUP 0x70 AND 0x50 0x80 WITHIN TO MMX-REG + CELLS OP-TABLE2 + @ EXECUTE + 0 TO MMX-REG ; + + +CREATE OP-TABLE + +\ 0 1 2 3 4 5 6 7 8 9 A B C D E F + +OPS ALU ALU ALU ALU ALA ALA PSS PPS ALU ALU ALU ALU ALA ALA PSS 0F. \ 0 +OPS ALU ALU ALU ALU ALA ALA PSS PPS ALU ALU ALU ALU ALA ALA PSS PPS \ 1 +OPS ALU ALU ALU ALU ALA ALA ES: DAA ALU ALU ALU ALU ALA ALA CS: DAS \ 2 +OPS ALU ALU ALU ALU ALA ALA SS: AAA ALU ALU ALU ALU ALA ALA DS: AAS \ 3 + +OPS INC INC INC INC INC INC INC INC DEC DEC DEC DEC DEC DEC DEC DEC \ 4 +OPS PSH PSH PSH PSH PSH PSH PSH PSH POP POP POP POP POP POP POP POP \ 5 +OPS PSA PPA BND ARP FS: GS: D16 A16 PSI MLI PSI MLI INB ISD OSB OSD \ 6 +OPS BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA \ 7 + +OPS ALI ALI ??? ALI TXB TXB TXB TXB MOV MOV MOV MOV MRS LEA MSR 8F. \ 8 +OPS XGA XGA XGA XGA XGA XGA XGA XGA CBW CDQ CIS W8F PSF PPF SAH LAH \ 9 +OPS MV1 MV1 MV2 MV2 MVS MVS CPS CPS TST TST STS STS LDS LDS SCS SCS \ A +OPS MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI \ B + +OPS SHF SHF RTN RTN LXS LXS MVI MVI ENT LEV RTF RTF NT3 INT NTO IRT \ C +OPS SHF SHF SHF SHF AAM AAD ??? XLT FD8 FD9 FDA FDB FDC FDD FDE FDF \ D +OPS LUP LUP LUP LUP INP INP OTP OTP JSR JMP CIS JMP IND IND OTD OTD \ E +OPS LOK ??? RPZ REP HLT CMC F6. F6. CLC STC CLI STI CLD STD FE. FF. \ F + +\ 0 1 2 3 4 5 6 7 8 9 A B C D E F + +: DIS-OP ( ADR -- ADR' ) + 0>S + FALSE TO PREFIX-OP \ SMUB + COUNT + DUP 1 AND TO SIZE + DUP CELLS OP-TABLE + @ EXECUTE + PREFIX-OP 0= + IF DEFAULT-16BIT? 0= + IF FALSE TO 16-BIT-DATA + FALSE TO 16-BIT-ADDR + ELSE TRUE TO 16-BIT-DATA + TRUE TO 16-BIT-ADDR + THEN + THEN ; + + +0 VALUE NEXT-INST + +: X". ( ADDR -- ADDR' ) +\ CR DUP BASE-ADDR - 6 H.R SPACE + DUP C@ 2DUP DUMP + + 2+ +\ ." C, " 1+ OVER + SWAP +\ DO I C@ 2 H.R ." C, " LOOP +\ COUNT + 1+ +; + +[DEFINED] G. [IF] + +: FLIT8. ( ADDR -- ADDR' ) + ." FLITERAL: " + DUP DF@ G. 8 + +; + +: FLIT10. ( ADDR -- ADDR' ) + ." FLITERAL: " + DUP F@ G. 10 + +; + +[ELSE] + +: FLIT8. + CR DUP BASE-ADDR - 6 H.R SPACE + ." A; " DUP 8 OVER + SWAP + DO I C@ 3 H.R ." C," LOOP + 8 + +; + +: FLIT10. ( ADDR -- ADDR' ) + CR DUP BASE-ADDR - 6 H.R SPACE + ." A; " DUP 10 OVER + SWAP + DO I C@ 3 H.R ." C," LOOP + 10 + +; + +[THEN] + +: VECT. ( ADDR -- ADDR' ) + CR DUP BASE-ADDR - 6 H.R SPACE + ." A; " DUP @ 8 H.R DUP CELL+ SWAP @ ." , \ " WordByAddr TYPE +; + +: CONS. ( ADDR -- ) + CR DUP BASE-ADDR - 6 H.R SPACE + ." A; " @ 8 H.R ." ," +; + +: USER. ( ADDR -- ) + CR DUP BASE-ADDR - 6 H.R SPACE + ." A; " @ 8 H.R ." , \ Relative in heap [hex]" \ CELL+ +; + +: UVAL. ( ADDR -- ADDR' ) + CR DUP BASE-ADDR - 6 H.R SPACE + ." A; " DUP @ 8 H.R ." , \ Relative in heap [hex]" CELL+ +; + +: CODE. ( ADDR -- ) + DUP NextNFA + ?DUP + IF OVER - 5 - + ELSE + DUP DP @ SWAP - ABS DUP 512 > IF DROP 40 THEN \ no applicable end found + THEN + ." Size of data: ~" DUP . + DUMP +; + + +: DIS-DB CR .S" DB " COUNT H.>S ; +: DIS-DW CR .S" DW " W@+ H.>S ; +: DIS-DD CR .S" DD " @+ H.>S ; +: DIS-DS CR .S" STRING " 0x22 EMIT>S COUNT 2DUP >S + 0x22 EMIT>S ; + +: FIND-REST-END ( xt -- addr | 0) + DUP NextNFA DUP + IF + NIP + NAME>C 1- \ Skip CFA field + ELSE + DROP + DP @ - ABS 100 > IF 0 EXIT THEN \ no applicable end found + DP @ 1- + THEN + + BEGIN \ Skip alignment + DUP C@ 0= WHILE 1- + REPEAT ; + +( wid ) SET-CURRENT + +: INST ( ADR -- ADR' ) + DUP TO NEXT-INST + COLS 0x29 < + IF DIS-OP + S-BUF COUNT TYPE + ELSE DUP DIS-OP + OVER BASE-ADDR - 6 H.R SPACE + DUP ROT + 2DUP - DUP>R 0x10 U> ABORT" DECOMPILER ERROR" + DO I C@ 2 H.N LOOP + R> 5 < IF 9 EMIT THEN + 9 EMIT S-BUF COUNT TYPE + THEN NEXT-INST C@ 0xE8 = + IF NEXT-INST 1+ @+ SWAP + + CASE + ['] _CLITERAL-CODE OF X". ENDOF + ['] _SLITERAL-CODE OF X". ENDOF + ['] _VECT-CODE OF VECT. 2DROP RDROP ENDOF + ['] _CONSTANT-CODE OF CONS. DROP RDROP ENDOF + ['] _USER-CODE OF USER. DROP RDROP ENDOF + ['] _CREATE-CODE OF CODE. DROP RDROP ENDOF + ['] _USER-VALUE-CODE OF UVAL. ENDOF + ['] _FLIT-CODE10 OF FLIT10. ENDOF + ['] _FLIT-CODE8 OF FLIT8. ENDOF + ENDCASE + THEN ; + + +: (REST-AREA) ( addr1 addr2 -- ) +\ if addr2 = 0 continue till RET instruction + SWAP DUP TO NEXT-INST + BEGIN + \ We do not look for JMP's because there may be + \ a jump in a forth word + CR + OVER 0= IF NEXT-INST C@ 0xC3 <> + ELSE 2DUP < INVERT + THEN + WHILE INST + REPEAT 2DROP ." END-CODE " + ; + +VECT REST-AREA +' (REST-AREA) TO REST-AREA + +: REST ( addr -- ) + DUP HERE U> 0= HERE 1- AND REST-AREA +; + +: SEE ( "name" -- ) + ' DUP FIND-REST-END ['] REST-AREA CATCH DROP +; + +PREVIOUS + +( warn base ) +BASE ! +WARNING ! + +.( Ok) CR diff --git a/programs/develop/SPForth/lib/ext/disasm2.f b/programs/develop/SPForth/lib/ext/disasm2.f new file mode 100644 index 0000000000..30c3a8be10 --- /dev/null +++ b/programs/develop/SPForth/lib/ext/disasm2.f @@ -0,0 +1,1955 @@ +\ 80386 DISASSEMBLER +\ ANDREW MCKEWAN, APRIL 1994 +\ TOM ZIMMER, 05/18/94 PORT TO WIN32F +\ MODIFIED TO WORD IN DECIMAL 08/03/94 10:04 TJZ +\ 06-??-95 SMUB NEXT SEQUENCE DEFINED IN FKERNEL +\ 06-21-95 SMUB REMOVED REDUNDANT COUNT CALLS FROM TXB, LXS. +\ 04-??-97 EXTENDED BY C.L. TO INCLUDE P6 AND MMX INSTRUCTIONS +\ 14-11-2000 Adapted from SPFOPT (Michael Maximov) by Dmitry Yakimov + +\ ??-11-2000 Fixed FE. FF. (Bandaletov) and H.R (Yakimov) +\ 15-11-2000 Fixed MV2 (Yakimov) +\ 25-12-2000 Added float literals recognition (Yakimov) +\ 26-07-2001 Fixed MVX (Maksimov) + +CR .( Loading Intel Pentium MMX disassembler...) + +WARNING 0! +DECIMAL + +\ REQUIRE [IF] ~mak/CompIF.f +\ REQUIRE CASE lib/ext/case.f +\ REQUIRE WITHIN lib/include/core-ext.f + +REQUIRE [DEFINED] lib/include/tools.f +\ REQUIRE [IF] ~mak\CompIF.f +REQUIRE CASE lib/ext/case.f +\ REQUIRE WITHIN lib\include\core-ext.f +REQUIRE NextNFA lib/ext/vocs.f + +VARIABLE END-WORD +VARIABLE START-WORD +\ VARIABLE START-LAB +\ VARIABLE FINISH-LAB +\ VARIABLE START-LIST +\ VARIABLE FINISH-LIST +\ VARIABLE IMAGE-END +VARIABLE START-LAB +VARIABLE FINISH-LAB +VARIABLE START-LIST +VARIABLE FINISH-LIST +VARIABLE START-LIST2 +VARIABLE FINISH-LIST2 +VARIABLE FINISH-LIST3 +VARIABLE START-VAR +VARIABLE FINISH-VAR +VARIABLE START-ARRAY +VARIABLE FINISH-ARRAY +0 VALUE IMAGE-END + +VARIABLE CALL-TYPE? +VARIABLE TRIGER + VARIABLE TRIGER3 + VARIABLE DISP8? +: ADD-CALL +>R START-LIST @ +BEGIN DUP @ R@ = + IF DROP RDROP 0 CALL-TYPE? ! EXIT + ELSE DUP FINISH-LIST @ = 0= THEN + WHILE CELL+ REPEAT CELL+ DUP FINISH-LIST ! R> OVER ! +BEGIN DUP CELL- 2DUP 2>R @ SWAP @ < IF 2R@ @ SWAP 2R@ SWAP @ SWAP ! ! THEN +2R> NIP DUP START-LIST @ = UNTIL + DROP 1 CALL-TYPE? ! + ; + + : ADD-CALL2 +>R START-LIST2 @ +BEGIN DUP @ R@ = + IF DROP RDROP 0 CALL-TYPE? ! EXIT + ELSE DUP FINISH-LIST2 @ = 0= THEN + WHILE CELL+ REPEAT CELL+ DUP FINISH-LIST2 ! R> OVER ! +BEGIN DUP CELL- 2DUP 2>R @ SWAP @ < IF 2R@ @ SWAP 2R@ SWAP @ SWAP ! ! THEN +2R> NIP DUP START-LIST2 @ = UNTIL + DROP 1 CALL-TYPE? ! + ; + +: ADD-LAB +>R START-LAB @ +BEGIN DUP @ R@ = + IF DROP RDROP EXIT + ELSE DUP FINISH-LAB @ = 0= THEN +WHILE CELL+ REPEAT CELL+ DUP FINISH-LAB ! R> OVER ! +BEGIN DUP CELL- 2DUP 2>R @ SWAP @ < IF 2R@ @ SWAP 2R@ SWAP @ SWAP ! ! THEN +2R> NIP DUP START-LAB @ = UNTIL DROP ; + +: ADD-VAR +>R START-VAR @ +BEGIN DUP @ R@ = + IF DROP RDROP EXIT + ELSE DUP FINISH-VAR @ = 0= THEN +WHILE CELL+ REPEAT CELL+ DUP FINISH-VAR ! R> OVER ! +BEGIN DUP CELL- 2DUP 2>R @ SWAP @ < IF 2R@ @ SWAP 2R@ SWAP @ SWAP ! ! THEN +2R> NIP DUP START-VAR @ = UNTIL DROP ; + +: LAB + >R START-LIST @ +BEGIN DUP @ R@ = + IF DROP RDROP 1 EXIT + ELSE DUP FINISH-LIST @ = 0= THEN +WHILE CELL+ REPEAT DROP RDROP 0 ; + + +: TYPE-LAB +>R START-LAB @ +BEGIN DUP @ R@ = + IF DROP RDROP 0 EXIT + ELSE DUP FINISH-LAB @ = 0= THEN +WHILE CELL+ REPEAT DROP RDROP 1 +; + +\ : TYPE-ARRAY START-ARRAY @ DUP FINISH-ARRAY @ = IF DROP EXIT THEN +\ BEGIN DUP 2@ HEX . . DECIMAL CR 2 CELLS + DUP FINISH-ARRAY @ = +\ UNTIL DROP +\ ; + +VARIABLE TRIGER4 +VARIABLE ALLOTN +: ARRAY? 0 ALLOTN ! +>R START-ARRAY @ DUP FINISH-ARRAY @ = IF RDROP 0 TRIGER4 ! EXIT THEN +BEGIN DUP @ R@ = + IF ." ALLOT" ALLOTN @ . ." :" ." array[0.." 2@ DROP +BASE @ >R DECIMAL . R> BASE ! +." ] of byte;" CR RDROP 1 TRIGER3 ! 1 TRIGER4 ! EXIT THEN \ 1 EXIT THEN + ALLOTN 1+! 2 CELLS + DUP FINISH-ARRAY @ = +UNTIL DROP RDROP 0 TRIGER4 ! +; + +: ARRAY2? 0 ALLOTN ! +>R START-ARRAY @ DUP FINISH-ARRAY @ = IF RDROP 0 EXIT THEN +BEGIN DUP @ R@ = + IF ." ALLOT" ALLOTN @ +BASE @ >R DECIMAL . R> BASE ! ." ;" CR + DROP RDROP 1 EXIT THEN + ALLOTN 1+! 2 CELLS + DUP FINISH-ARRAY @ = +UNTIL DROP RDROP 0 +; + +: DEFER VECT ; + +: DUP>R R> OVER >R >R ; + +: UMAX ( D1 D2 -- FLAG ) + 2DUP U< IF NIP ELSE DROP THEN ; + + +80 CONSTANT MAXSTRING + +255 CONSTANT MAXCOUNTED \ maximum length of contents of a counted string + +: 0X BASE @ HEX >R BL WORD ?LITERAL + R> BASE ! ; IMMEDIATE + +: "CLIP" ( a1 n1 -- a1 n1' ) \ clip a string to between 0 and MAXCOUNTED + MAXCOUNTED MIN 0 MAX ; + +: PLACE ( addr len dest -- ) + SWAP "CLIP" SWAP + 2DUP 2>R + CHAR+ SWAP MOVE + 2R> C! ; + +: +PLACE ( addr len dest -- ) \ append string addr,len to counted + \ string dest + >R "CLIP" MAXCOUNTED R@ C@ - MIN R> + \ clip total to MAXCOUNTED string + 2DUP 2>R + + COUNT CHARS + SWAP MOVE + 2R> +! ; + +: C+PLACE ( c1 a1 -- ) \ append char c1 to the counted string at a1 + DUP 1+! COUNT + 1- C! ; + + +: OFF 0! ; + +: BLANK ( addr len -- ) \ fill addr for len with spaces (blanks) + BL FILL ; + +128 CONSTANT SPCS-MAX ( optimization for SPACES ) + +CREATE SPCS SPCS-MAX ALLOT + SPCS SPCS-MAX BLANK + +C" UPC" FIND NIP 0= +[IF] +: UPC ( c -- c' ) + DUP [CHAR] Z U> + IF 0xDF AND + THEN ; +[THEN] + +: (D.) ( d -- addr len ) TUCK DABS <# #S ROT SIGN #> ; + + +80 VALUE COLS + +: H.R ( n1 n2 -- ) \ display n1 as a hex number right + \ justified in a field of n2 characters + BASE @ >R HEX >R + 0 <# #S #> R> OVER - 0 MAX SPACES TYPE + R> BASE ! ; + +: H.N ( n1 n2 -- ) \ display n1 as a HEX number of n2 digits + BASE @ >R HEX >R + 0 <# R> 0 ?DO # LOOP #> TYPE + R> BASE ! ; + +ONLY FORTH ALSO DEFINITIONS + +0 VALUE DEFAULT-16BIT? + +: DEFAULT-16BIT ( -- ) + TRUE TO DEFAULT-16BIT? ; + +: DEFAULT-32BIT ( -- ) + FALSE TO DEFAULT-16BIT? ; + + DEFER SHOW-NAME ( CFA -- ) \ DISPLAY NEAREST SYMBOL + +0 VALUE BASE-ADDR + +VOCABULARY DISASSEMBLER +DISASSEMBLER ALSO DEFINITIONS + +DECIMAL + +CREATE S-BUF MAXSTRING ALLOT + +: >S ( A1 N1 -- ) + S-BUF +PLACE ; + +: 0>S ( -- ) \ RESET S-BUF + S-BUF OFF ; + +: SSPACES ( N1 -- ) + SPCS SWAP S-BUF +PLACE ; + +: SSPACE ( -- ) + 1 SSPACES ; + +: EMIT>S ( C1 -- ) + S-BUF C+PLACE ; + +: S> ( -- A1 N1 ) + S-BUF COUNT ; + +: (.S") ( addr len -- ) + S-BUF +PLACE ; + +: .S" ( 'TEXT' -- ) + [CHAR] " PARSE + POSTPONE SLITERAL + POSTPONE (.S") ; IMMEDIATE + VARIABLE ADR@ +: D.>S BASE @ SWAP DECIMAL DUP 0= IF DROP ELSE DUP 128 > IF .S" -" 256 SWAP - ELSE .S" +" THEN + 0 (D.) >S THEN BASE ! 0 DISP8? ! ; +: D.R>S ( D W -- ) + \ >R (D.) R> OVER - SSPACES >S ; + >R (D.) R> OVER - SSPACES >S ; +: .R>S ( N W -- ) + >R S>D R> D.R>S ; + +: U.R>S ( U W -- ) + 0 SWAP D.R>S ; + + : H.>S ( U -- ) + BASE @ SWAP + DUP DUP IMAGE-BEGIN > SWAP IMAGE-END < AND IF DUP ADD-LAB \ .S" [OFFSET @" HEX 0 (D.) >S .S" ]" ELSE + .S" OFFSET [" SHOW-NAME .S" ]" ELSE \ .S" [OFFSET @" SHOW-NAME .S" ]" ELSE + .S" $" HEX 0 (D.) >S THEN + + ( SSPACE ) BASE ! ; + + +: H.>Sn ( U -- ) + BASE @ SWAP HEX 0 (D.) >S ( SSPACE ) BASE ! ; + +: H.R>S ( N1 N2 -- ) + BASE @ >R HEX >R + 0 <# #S #> R> OVER - SSPACES >S + R> BASE ! ; +VARIABLE NAME +\ [THEN] + +: ?.NAME>S ( CFA -- ) +\ ELIMINATE " 0X" + +\ DUP 1 H.R>S SSPACE \ яхўрЄ№ рфЁхёр яхЁхїюфр + NEAR_NFA + >R DUP + IF \ .S" @" + \ IF ё■фр яЁютхЁъє ELSE + + R@ DUP START-WORD @ < >R END-WORD @ > R> OR R@ START-WORD @ = OR 0= IF R> DUP ADD-LAB .S" @" 1 H.R>S ELSE +\ .S" @" + ADR@ @ R@ = IF 0 ADR@ ! ELSE R@ ADD-LAB THEN \ .S" 2@" <-- + DUP NAME ! \ COUNT >S \ яхўрЄ№ ёъюсюъ. ╟эръ ьхЄъш + NAME> DUP ADD-CALL2 \ схч ADD-CALL эх ЁрсюЄр■Є ёё√ыъш эр яхЁхьхээ√х ADD-LAB CR WordByAddr TYPE CR + ( DUP H.>Sn ) R@ - + DUP IF .S" [OFFSET " \ .S" [OFFSET @@" + \ DUP .S" +" NEGATE H.>S +\ R> H.>Sn .S" ]" NAME @ COUNT >S +RDROP NAME @ COUNT >S .S" ]" + ELSE +.S" @@" RDROP NAME @ COUNT >S THEN \ ъюэхЎ яЁютхЁъш + THEN + DROP \ .S" ) " + ELSE R> .S" [" H.>S .S" ]" DROP \ ЄєЄ + THEN + ; + +' ?.NAME>S TO SHOW-NAME + +\ 32 CONSTANT COMMENT-COL + +0 VALUE SIZE +0 VALUE 16-BIT-DATA +0 VALUE 16-BIT-ADDR +0 VALUE PREFIX-OP +0 VALUE MMX-REG + +: @+ ( ADDR -- ADDR N ) DUP CELL+ SWAP @ ; +: W@+ ( ADDR -- ADDR N ) DUP 2 + SWAP W@ ; + +: SEXT ( BYTE -- N ) DUP 128 AND IF 0xFFFFFF00 OR THEN ; +: MOD/SIB ( MOD-R-R/M -- R/M R MOD ) \ R INCLUDING GENERAL, SPECIAL, SEGMENT, MMX + ( MOD-OP-R/M -- R/M OP MOD ) + ( S-I-B -- B I S ) + 255 AND 8 /MOD 8 /MOD ; + +: ??? ( N1 -- ) + .S" ??? " DROP ; + +: SS. ( N ADR LEN W ) >R DROP SWAP R@ * + R> >S SSPACE ; + +: TTTN ( CODE -- ) 15 AND S" O NOB AEE NEBEA S NSP NPL GELEG " 2 SS. ; + +: SREG ( SREG -- ) 3 RSHIFT 7 AND S" ESCSSSDSFSGSXXXX" 2 SS. ; +: CREG ( EEE -- ) 3 RSHIFT 7 AND S" CR0???CR2CR3CR4?????????" 3 SS. ; +: DREG ( EEE -- ) 3 RSHIFT 7 AND S" DR0DR1DR2DR3??????DR6DR7" 3 SS. ; +: TREG ( EEE -- ) 3 RSHIFT 7 AND S" ?????????TR3TR4TR5TR6TR7" 3 SS. ; \ OBSOLETE +: MREG ( N -- ) 7 AND S" MM0MM1MM2MM3MM4MM5MM6MM7" 3 SS. ; + +: REG8 ( N -- ) 7 AND S" ALCLDLBLAHCHDHBH" 2 SS. ; +: REG16 ( N -- ) 7 AND S" AXCXDXBXSPBPSIDI" 2 SS. ; +: REG32 ( N -- ) 7 AND S" EAXECXEDXEBXESPEBPESIEDI" 3 SS. ; +: REG16/32 ( N -- ) + 16-BIT-DATA + IF REG16 + ELSE REG32 + THEN ; +: REG ( A N -- A ) + MMX-REG + IF MREG + ELSE SIZE + IF REG16/32 + ELSE REG8 + THEN + THEN + ; + +: [BASE16] ( R/M -- ) 4 - S" [SI][DI][BP][BX]" 4 SS. ; + \ R/M = 4 , 5 , 6 , 7 +: [IND16] ( R/M -- ) S" [BX+SI][BX+DI][BP+SI][BP+DI]" 7 SS. ; + \ R/M = 0 , 1 , 2 , 3 +: [REG16] ( R/M -- ) DUP 4 < + IF [IND16] + ELSE [BASE16] + THEN ; +: [REG32] ( N -- ) 7 AND \ TRIGER3 @ IF +\ S" [EAX][ECX][EDX][EBX][ESP][EBP][ESI][EDI]" 5 SS. +\ ELSE + S" [EAX[ECX[EDX[EBX[ESP[EBP[ESI[EDI" 4 SS. DISP8? @ D.>S .S" ]" +\ THEN + ; + + +: [REG*2] ( I -- ) S" [EAX*2][ECX*2][EDX*2][EBX*2][XXX*2][EBP*2][ESI*2][EDI*2]" 7 SS. ; +: [REG*4] ( I -- ) S" [EAX*4][ECX*4][EDX*4][EBX*4][XXX*4][EBP*4][ESI*4][EDI*4]" 7 SS. ; +: [REG*8] ( I -- ) S" [EAX*8][ECX*8][EDX*8][EBX*8][XXX*8][EBP*8][ESI*8][EDI*8]" 7 SS. ; +: [INDEX] ( SIB -- ) MOD/SIB OVER 4 = + IF 2DROP \ NO ESP SCALED INDEX + ELSE CASE ( S ) + 0 OF [REG32] ENDOF + 1 OF [REG*2] ENDOF + 2 OF [REG*4] ENDOF + 3 OF [REG*8] ENDOF + ENDCASE + THEN DROP ; + +: DISP8 ( ADR -- ADR' ) +\ COUNT DUP DISP8? ! D.>S ; + COUNT DISP8? ! ; + +: DISP16 ( ADR -- ADR' ) W@+ SHOW-NAME ; +: DISP32 ( ADR -- ADR' ) @+ ( BODY> ) SHOW-NAME ; +: DISP16/32 ( ADR -- ADR' ) + 16-BIT-ADDR + IF DISP16 + ELSE DISP32 + THEN ; + +: ., ( -- ) TRIGER @ IF .S" , " THEN 1 TRIGER ! ; + +: .# ., .S" $" ; +\ : .# ., ; +\ : .# ., .S" # " ; + +: IMM8 ( ADR -- ADR' ) .# COUNT H.>Sn ; + +\ : IMM16 ( ADR -- ADR' ) .# W@+ H.>S ; + +: IMM16/32 ( ADR -- ADR' ) + \ .# + ., + 16-BIT-DATA + IF W@+ + ELSE @+ + THEN H.>S ; \ \\\\\\\ + + +: SIB ( ADR MOD -- ADR ) + >R COUNT TUCK 7 AND 5 = R@ 0= AND + IF DISP32 SWAP [INDEX] R> DROP \ EBP BASE AND MOD = 00 + ELSE R> CASE ( MOD ) + 1 OF DISP8 ENDOF + 2 OF DISP32 ENDOF + ENDCASE + SWAP DUP [REG32] [INDEX] + THEN ; + + +: MOD-R/M32 ( ADR R/M MOD -- ADR' ) + DUP 3 = + IF DROP REG \ MOD = 3, REGISTER CASE + ELSE OVER 4 = + IF NIP SIB \ R/M = 4, SIB CASE + ELSE 2DUP 0= SWAP 5 = AND \ MOD = 0, R/M = 5, + IF 2DROP DISP32 \ DISP32 CASE + ELSE ROT SWAP + CASE ( MOD ) + 1 OF DISP8 ENDOF + 2 OF DISP32 ENDOF + ENDCASE + SWAP [REG32] + THEN + THEN + THEN ; + +: MOD-R/M16 ( ADR R/M MOD -- ADR' ) + 2DUP 0= SWAP 6 = AND + IF 2DROP DISP16 \ DISP16 CASE + ELSE CASE ( MOD ) + 0 OF [REG16] ENDOF + 1 OF SWAP DISP8 SWAP [REG16] ENDOF + 2 OF SWAP DISP16 SWAP [REG16] ENDOF + 3 OF REG ENDOF + ENDCASE + THEN ; + +: MOD-R/M ( ADR MODR/M -- ADR' ) + MOD/SIB NIP 16-BIT-ADDR + IF MOD-R/M16 + ELSE MOD-R/M32 + THEN ; + + +: R/M8 0 TO SIZE MOD-R/M ; +: R/M16/32 1 TO SIZE MOD-R/M ; +: R/M16 TRUE TO 16-BIT-DATA R/M16/32 ; + +: R,R/M ( ADR -- ADR' ) + COUNT DUP 3 RSHIFT REG ., MOD-R/M ; + +: R/M,R ( ADR -- ADR' ) + COUNT DUP>R MOD-R/M ., R> 3 RSHIFT REG ; + +: R/M ( ADR OP -- ADR' ) + 2 AND + IF R,R/M + ELSE R/M,R + THEN ; + +\ -------------------- SIMPLE OPCODES -------------------- + +: INH ( -- ) + CREATE + BL WORD COUNT HERE PLACE + HERE C@ 1+ ALLOT + DOES> COUNT >S SSPACE DROP ; + +INH CLC CLC +INH STC STC +INH CLD CLD +INH STD STD +\ INH RPNZ REPNZ +\ INH REPZ REPZ +INH CBW CBW +INH CDQ CDQ +INH DAA DAA +INH DAS DAS +INH AAA AAA +INH AAS AAS +\ INH LOCK LOCK +INH INB INSB +INH OSB OUTSB +INH SAH SAHF +INH LAH LAHF +\ INH AAM AAM +\ INH AAD AAD +INH HLT HLT +INH CMC CMC +INH XLT XLAT +INH CLI CLI +INH STI STI + +INH CLT CLTS +INH INV INVD +INH WIV WBINVD +INH UD2 UD2 +INH WMR WRMSR +INH RTC RDTSC +INH RMR RDMSR +INH RPC RDPMC +INH EMS EMMS +INH RSM RSM +INH CPU CPUID +INH UD1 UD1 +\ INH LSS LSS +\ INH LFS LFS +\ INH LGS LGS + +\ INH D16: D16: +\ INH A16: A16: +\ INH ES: ES: +\ INH CS: CS: +\ INH DS: DS: +\ INH FS: FS: +\ INH GS: GS: + +: AAM ( ADR CODE -- ADR' ) + .S" AAM" DROP COUNT DROP ; + +: AAD ( ADR CODE -- ADR' ) + .S" AAD" DROP COUNT DROP ; + +: D16 ( ADR CODE -- ADR' ) + DROP .S" D16:" + TRUE TO 16-BIT-DATA + TRUE TO PREFIX-OP + ; + +: A16 ( ADR CODE -- ADR' ) + DROP .S" A16:" + TRUE TO 16-BIT-ADDR + TRUE TO PREFIX-OP + ; + +: RPZ ( ADR CODE -- ADR' ) + DROP .S" REPNZ" + TRUE TO PREFIX-OP + ; + +: REP ( ADR CODE -- ADR' ) + DROP .S" REPZ" + TRUE TO PREFIX-OP + ; + +: LOK ( ADR CODE -- ADR' ) \ THIS SHOULD HAVE ERROR CHECKING ADDED + DROP .S" LOCK" + TRUE TO PREFIX-OP + ; + +: CS: ( ADR CODE -- ADR' ) + DROP .S" CS:" + TRUE TO PREFIX-OP + ; + +: DS: ( ADR CODE -- ADR' ) + DROP .S" DS:" + TRUE TO PREFIX-OP + ; + +: SS: ( ADR CODE -- ADR' ) + DROP .S" SS:" + TRUE TO PREFIX-OP + ; + +: ES: ( ADR CODE -- ADR' ) + DROP .S" ES:" + TRUE TO PREFIX-OP + ; + +: GS: ( ADR CODE -- ADR' ) + DROP .S" GS:" + TRUE TO PREFIX-OP + ; + +: FS: ( ADR CODE -- ADR' ) + DROP .S" FS:" + TRUE TO PREFIX-OP + ; + +: ISD ( ADR CODE -- ADR' ) + DROP 16-BIT-DATA + IF .S" INSW " + ELSE .S" INSD " + THEN ; + +: OSD ( ADR CODE -- ADR' ) + DROP 16-BIT-DATA + IF .S" OUTSW " + ELSE .S" OUTSD " + THEN ; + +: INP ( ADDR CODE -- ADDR' ) + .S" IN " 1 AND + IF 16-BIT-DATA + IF .S" AX , " + ELSE .S" EAX , " + THEN + ELSE .S" AL , " + THEN + COUNT H.>S ; + +: OTP ( ADDR CODE -- ADDR' ) + .S" OUT " 1 AND + IF COUNT H.>S 16-BIT-DATA + IF .S" , AX" + ELSE .S" , EAX" + THEN + ELSE COUNT H.>S .S" , AL" + THEN + ; + +: IND ( ADDR CODE -- ADDR' ) + .S" IN " 1 AND + IF 16-BIT-DATA + IF .S" AX , DX" + ELSE .S" EAX , DX" + THEN + ELSE .S" AL , DX" + THEN + ; + +: OTD ( ADDR CODE -- ADDR' ) + .S" OUT " 1 AND + IF 16-BIT-DATA + IF .S" DX , AX" + ELSE .S" DX , EAX" + THEN + ELSE .S" DX , AL" + THEN + ; + +\ -------------------- ALU OPCODES -------------------- + +: .ALU ( N -- ) + 7 AND S" ADDOR ADCSBBANDSUBXORCMP" 3 SS. 4 SSPACES + ; + +: ALU ( ADR OP -- ADR' ) + DUP 3 RSHIFT .ALU R/M ; + +: ALI ( ADR OP -- ADR' ) + >R COUNT + DUP 3 RSHIFT .ALU + MOD-R/M + R> 3 AND ?DUP + IF 1 = + IF IMM16/32 + ELSE .# COUNT SEXT 0 .R>S SSPACE + THEN + ELSE IMM8 + THEN ; + +: ALA ( ADR OP -- ADR' ) + DUP 3 RSHIFT .ALU + 1 AND IF 0 REG IMM16/32 ELSE 0 REG8 IMM8 THEN ; + + +\ -------------------- TEST/XCHG -------------------- + +: TXB ( ADDR OP -- ADDR' ) + DUP 3 AND S" TESTTESTXCHGXCHG" 4 SS. 3 SSPACES + 1 AND + IF 1 TO SIZE R,R/M \ SMUB REMOVED COUNT + ELSE 0 TO SIZE R,R/M \ SMUB REMOVED COUNT + THEN + ; + +: TST ( ADDR OP -- ADDR' ) + .S" TEST " 1 AND + IF 16-BIT-DATA + IF .S" AX , " + ELSE .S" EAX , " + THEN + IMM16/32 + ELSE .S" AL , " IMM8 + THEN + ; + +\ -------------------- INC/DEC ---------------------- + +: INC ( ADDR OP -- ADDR' ) + .S" INC " REG16/32 ; + +: DEC ( ADDR OP -- ADDR' ) + .S" DEC " REG16/32 ; + + +\ -------------------- PUSH/POP -------------------- + +: PSH ( ADDR OP -- ADDR' ) + .S" PUSH " REG16/32 + 0 TRIGER ! + ; + +: POP ( ADDR OP -- ADDR' ) + .S" POP " REG16/32 + 0 TRIGER ! + ; + +: PSS ( ADDR OP -- ADDR' ) + .S" PUSH " SREG ; + +: PPS ( ADDR OP -- ADDR' ) + .S" POP " SREG + 0 TRIGER ! + ; + +: PSA ( ADDR OP -- ADDR' ) + DROP 16-BIT-DATA + IF .S" PUSHA " + ELSE .S" PUSHAD " + THEN + 0 TRIGER ! + ; + +: PPA ( ADDR OP -- ADDR' ) + DROP 16-BIT-DATA + IF .S" POPA " + ELSE .S" POPAD " + THEN + 0 TRIGER ! + ; + +: PSI ( ADDR OP -- ADDR' ) + .S" PUSH " 2 AND + IF IMM8 + ELSE IMM16/32 + THEN + 0 TRIGER ! + ; + +: PSF ( ADDR OP -- ADDR' ) + DROP 16-BIT-DATA + IF .S" PUSHF " + ELSE .S" PUSHFD " + THEN + 0 TRIGER ! + ; + +: PPF ( ADDR OP -- ADDR' ) + DROP 16-BIT-DATA + IF .S" POPF " + ELSE .S" POPFD " + THEN + 0 TRIGER ! + ; + +: 8F. ( ADDR OP -- ADDR' ) + DROP COUNT .S" POP " R/M16/32 + 0 TRIGER ! + ; + +\ -------------------- MOVE -------------------- + +: MOV ( ADDR OP -- ADDR' ) + .S" MOV " R/M ; + +: MRI ( ADDR OP -- ADDR' ) ( MOV REGISTER, IMM ) + .S" MOV " DUP 8 AND + IF REG16/32 IMM16/32 + ELSE REG8 IMM8 + THEN ; + +: MVI ( ADR OP -- ADR' ) ( MOV MEM, IMM ) + .S" MOV " DROP COUNT MOD-R/M + SIZE + IF IMM16/32 + ELSE IMM8 + THEN + ; + +: MRS ( ADDR OP -- ADDR' ) +\ ? REMOVE REDUNDANT >R , R> + 16-BIT-DATA + IF .S" MOV " DROP + 1 TO SIZE + COUNT DUP MOD-R/M ., + SREG + ELSE ??? + THEN ; + +: MSR ( ADDR OP -- ADDR' ) + 16-BIT-DATA + IF .S" MOV " DROP + 1 TO SIZE + COUNT DUP SREG ., + MOD-R/M + ELSE ??? + THEN ; + +: MRC ( ADDR OP -- ADDR' ) + .S" MOV " + DROP COUNT DUP REG32 .S" , " + CREG ; + +: MCR ( ADDR OP -- ADDR' ) + .S" MOV " + DROP COUNT DUP CREG .S" , " + REG32 ; + +: MRD ( ADDR OP -- ADDR' ) + .S" MOV " + DROP COUNT DUP REG32 .S" , " + DREG ; + +: MDR ( ADDR OP -- ADDR' ) + .S" MOV " + DROP COUNT DUP DREG .S" , " + REG32 ; + +: MRT ( ADDR OP -- ADDR' ) +\ OBSOLETE + .S" MOV " + DROP COUNT DUP REG32 .S" , " + TREG ; + +: MTR ( ADDR OP -- ADDR' ) +\ OBSOLETE + .S" MOV " + DROP COUNT DUP TREG .S" , " + REG32 ; + +: MV1 ( ADDR OP -- ADDR' ) + .S" MOV " 1 AND + IF 16-BIT-DATA + IF .S" AX , " + ELSE .S" EAX , " + THEN + ELSE .S" AL , " + THEN + DISP16/32 ; + +: MV2 ( ADDR OP -- ADDR' ) + .S" MOV " SWAP DISP16/32 ., + SWAP 1 AND + IF 16-BIT-DATA + IF .S" AX" + ELSE .S" EAX" + THEN + ELSE .S" AL" + THEN + ; + +: LEA ( ADDR OP -- ADDR' ) + .S" LEA " DROP 1 TO SIZE R,R/M ; + +: LXS ( ADDR OP -- ADDR' ) + 1 AND + IF .S" LDS " + ELSE .S" LES " + THEN + R,R/M \ SMUB REMOVED COUNT + ; + +: BND ( ADDR OP -- ADDR' ) + .S" BOUND " DROP 1 TO SIZE R,R/M ; + +: ARP ( ADDR OP -- ADDR' ) + .S" ARPL " DROP + 1 TO SIZE + TRUE TO 16-BIT-DATA + R,R/M + ; + +: MLI ( ADDR OP -- ADDR' ) + 1 TO SIZE + .S" IMUL " 0x69 = + IF R,R/M IMM16/32 + ELSE R,R/M IMM8 + THEN ; + +\ -------------------- JUMPS AND CALLS -------------------- + +0 VALUE MAX_REFERENCE + +: >MAX_R DUP MAX_REFERENCE UMAX TO MAX_REFERENCE ; + +: REL8 ( ADDR OP -- ADDR' ) +\ .S" @" \ + COUNT SEXT OVER + BASE-ADDR - >MAX_R DUP ADD-LAB +SHOW-NAME ; \ H.>Sn ; + + + +: REL16/32 ( ADDR OP -- ADDR' ) + \ .S" @" + 16-BIT-ADDR + IF W@+ + ELSE @+ + THEN OVER + BASE-ADDR - >MAX_R DUP ADR@ ! DUP ADD-LAB SHOW-NAME ; + +: JSR ( ADDR OP -- ADDR' ) + .S" CALL " DROP REL16/32 \ DUP @ >R REL16/32 DUP R> + DROP + ; + +: JMP ( ADDR OP -- ADDR' ) + .S" JMP " 2 AND IF REL8 ELSE REL16/32 THEN + ; + + : .JXX ( ADDR OP -- ADDR' ) + .S" J" TTTN 4 SSPACES + ; + +: BRA ( ADDR OP -- ADDR' ) + .JXX REL8 ; + +: LUP ( ADDR OP -- ADDR' ) + 3 AND S" LOOPNZLOOPZ LOOP JECXZ " 6 SS. 1 SSPACES REL8 ; + +: LBR ( ADDR OP -- ADDR' ) + .JXX REL16/32 ; + +: RTN ( ADDR OP -- ADDR' ) + .S" RET" 1 AND 0= \ .S" RET NEAR " 1 AND 0= + IF W@+ H.>S + THEN ; + +: RTF ( ADDR OP -- ADDR' ) + .S" RET FAR " 1 AND 0= + IF W@+ H.>S + THEN ; + +: ENT ( ADDR OP -- ADDR' ) + DROP + .S" ENTER " W@+ H.>S ., COUNT H.>S ; + +: CIS ( ADDR OP -- ADDR' ) + 0x9A = + IF .S" CALL " + ELSE .S" JMP " + THEN + 16-BIT-DATA + IF .S" PTR16:16 " + ELSE .S" PTR16:32 " + THEN + COUNT MOD-R/M + ; + +: NT3 ( ADDR OP -- ADDR' ) + DROP .S" INT 3 " + ; + +: INT ( ADDR OP -- ADDR' ) + DROP .S" INT " + COUNT H.>S ; + +INH LEV LEAVE +INH IRT IRET +INH NTO INTO + +\ -------------------- STRING OPS -------------------- + +: STR INH DOES> COUNT >S 1 AND IF .S" D" ELSE .S" B" THEN ; + +STR MVS MOVS +STR CPS CMPS +STR STS STOS +STR LDS LODS +STR SCS SCAS + +\ -------------------- EXCHANGE -------------------- + +: XGA ( ADDR OP -- ADDR' ) + .S" XCHG EAX, " REG16/32 ; + +\ : XCH ( ADDR OP -- ADDR' ) +\ .S" XCHG " DROP R,R/M ; + + +\ -------------------- SHIFTS & ROTATES -------------------- + +: .SHIFT ( N -- ) + 7 AND S" ROLRORRCLRCRSHLSHRXXXSAR" 3 SS. 4 SSPACES ; + +: SHF ( ADDR OP -- ADDR' ) + >R COUNT + DUP 3 RSHIFT .SHIFT + MOD-R/M ., + R> 0xD2 AND + CASE + 0xC0 OF COUNT H.>S ENDOF + 0xD0 OF 1 H.>S ENDOF + 0xD2 OF 1 REG8 ENDOF + ENDCASE ; + +\ -------------------- EXTENDED OPCODES -------------------- + +: WF1 ( ADDR -- ADDR' ) + 1+ COUNT DUP + 0x0C0 < + IF DUP + 3 RSHIFT 7 AND + CASE 6 OF .S" FSTENV " MOD-R/M ENDOF + 7 OF .S" FSTCW WORD " MOD-R/M ENDOF + 2DROP 2 - DUP .S" FWAIT " + ENDCASE + ELSE DROP 2 - .S" FWAIT " + THEN ; + +: WF2 ( ADDR -- ADDR' ) + 1+ COUNT + CASE 0xE2 OF .S" FCLEX " ENDOF + 0xE3 OF .S" FINIT " ENDOF + SWAP 2 - SWAP .S" FWAIT " + ENDCASE ; + +: WF3 ( ADDR -- ADDR' ) + 1+ COUNT DUP 3 RSHIFT 7 AND + CASE 6 OF .S" FSAVE " MOD-R/M ENDOF + 7 OF .S" FSTSW WORD " MOD-R/M ENDOF + 2DROP 2 - DUP .S" FWAIT " + ENDCASE ; + +: WF4 ( ADDR -- ADDR' ) + 1+ COUNT 0xE0 = + IF .S" FSTSW AX " + ELSE 2 - .S" FWAIT " + THEN ; + +: FWAITOPS ( ADDR OP -- ADDR' ) + CASE 0xD9 OF WF1 ENDOF + 0xDB OF WF2 ENDOF + 0xDD OF WF3 ENDOF + 0xDF OF WF4 ENDOF + .S" FWAIT " + ENDCASE ; + +: W8F ( ADDR OP -- ADDR' ) + DROP DUP C@ DUP 0xF8 AND 0xD8 = + IF FWAITOPS + ELSE DROP .S" WAIT " + THEN ; + +: FALU1 ( XOPCODE -- ) + 3 RSHIFT 7 AND + S" FADD FMUL FCOM FCOMPFSUB FSUBRFDIV FDIVR" + 5 SS. 2 SSPACES ; + +: FALU5 ( XOPCODE -- ) + 3 RSHIFT 7 AND + S" FADD FMUL ???? ???? FSUBRFSUB FDIVRFDIV " + 5 SS. 2 SSPACES ; + +: STI. ( OP -- ) + 7 AND .S" ST(" 1 .R>S .S" )"; + +\ : STI.ST ( OP -- ) +\ 7 AND +\ .S" ST(" 1 .R>S .S" )" .S" ST " ; + +: FD8 ( ADDR OPCODE -- ADDR' ) + DROP COUNT DUP FALU1 + DUP 0xC0 < + IF .S" FLOAT " MOD-R/M + ELSE DUP 0xF0 AND 0xD0 = + IF STI. + ELSE .S" ST , " STI. + THEN + THEN ; + +: FDC ( ADDR OPCODE -- ADDR' ) + DROP COUNT + DUP DUP 0xC0 < + IF FALU1 .S" DOUBLE " MOD-R/M + ELSE FALU5 STI. .S" , ST" + THEN ; + +: FNULLARY-F ( OP -- ) + 0x0F AND DUP 8 < + IF + S" F2XM1 FYL2X FPTAN FPATAN FXTRACTFPREM1 FDECSTPFINCSTP" + ELSE 8 - + S" FPREM FYL2XP1FSQRT FSINCOSFRNDINTFSCALE FSIN FCOS " + THEN + 7 SS. ; + +: FNULLARY-E ( OP -- ) + 0x0F AND DUP 8 < + IF + S" FCHS FABS ??? ??? FTST FXAM ??? ??? " + ELSE 8 - + S" FLD1 FLDL2T FLDL2E FLDPI FLDLG2 FLDLN2 FLDZ ??? " + THEN + 7 SS. ; + +: FNULLARY ( OP -- ) + DUP 0xEF > + IF FNULLARY-F EXIT + THEN + DUP 0xE0 < + IF 0xD0 = + IF .S" FNOP" + ELSE DUP ??? + THEN + EXIT + THEN + FNULLARY-E ; + + +\ : FALU2 ( OP -- ) +\ 3 RSHIFT 7 AND +\ S" FLD ??? FST FSTP FLDENV FLDCW FNSTENVFNSTCW " +\ 7 SS. ; + +: FD9 ( ADDR OP -- ADDR' ) + DROP COUNT DUP 0xC0 < + IF DUP 0x38 AND + CASE + 0x00 OF .S" FLD FLOAT " ENDOF + 0x10 OF .S" FST FLOAT " ENDOF + 0x18 OF .S" FSTP FLOAT " ENDOF + 0x20 OF .S" FLDENV " ENDOF + 0x28 OF .S" FLDCW WORD " ENDOF + 0x30 OF .S" FNSTENV " ENDOF + 0x38 OF .S" FNSTCW WORD " ENDOF + DUP ??? + ENDCASE + MOD-R/M + ELSE + DUP 0xD0 < + IF DUP 0xC8 < + IF .S" FLD " + ELSE .S" FXCH " + THEN + STI. + ELSE FNULLARY + THEN + THEN ; + +: FALU3 ( OP -- ) + 3 RSHIFT 7 AND + S" FIADD FIMUL FICOM FICOMPFISUB FISUBRFIDIV FIDIVR" + 6 SS. 1 SSPACES ; + +: FCMOVA ( OP -- ) + 3 RSHIFT 7 AND + S" FCMOVB FCMOVE FCMOVBEFCMOVU ??? ??? ??? ??? " + 7 SS. ; + +: FDA ( ADDR OP -- ) + DROP COUNT DUP 0xC0 < + IF DUP FALU3 .S" DWORD " MOD-R/M + ELSE DUP 0xE9 = + IF .S" FUCOMPP" DROP + ELSE DUP FCMOVA STI. + THEN + THEN ; + +: FALU7 ( OP -- ) + 3 RSHIFT 7 AND + S" FADDP FMULP ??? ??? FSUBRPFSUBP FDIVRPFDIVP " + 6 SS. SSPACE ; + +: FDE ( ADDR OP -- ADDR' ) + DROP COUNT DUP 0xC0 < + IF DUP FALU3 .S" WORD " MOD-R/M + ELSE DUP 0xD9 = + IF .S" FCOMPP" DROP + ELSE DUP FALU7 STI. + THEN + THEN ; + + +: FCMOVB ( OP -- ) + 3 RSHIFT 7 AND + S" FCMOVNB FCMOVNE FCMOVNBEFCMOVNU ??? FUCOMI FCOMI ??? " + 8 SS. ; + +: FDB ( ADDR OP -- ADDR' ) + DROP COUNT DUP 0xC0 < + IF DUP 0x38 AND + CASE 0x00 OF .S" FILD DWORD " ENDOF + 0x10 OF .S" FIST DWORD " ENDOF + 0x18 OF .S" FISTP DWORD " ENDOF + 0x28 OF .S" FLD EXTENDED " ENDOF + 0x38 OF .S" FSTP EXTENDED " ENDOF + DUP ??? + ENDCASE + MOD-R/M + ELSE + CASE 0xE2 OF .S" FNCLEX" ENDOF + 0xE3 OF .S" FNINIT" ENDOF + DUP DUP FCMOVB STI. + ENDCASE + THEN ; + +: FALU6 ( OP -- ) + 3 RSHIFT 7 AND + S" FFREE ??? FST FSTP FUCOM FUCOMP??? ??? " + 6 SS. SSPACE ; + +: FDD ( ADDR OP -- ADDR' ) + DROP COUNT DUP 0xC0 < + IF DUP 0x38 AND + CASE 0x00 OF .S" FLD DOUBLE " ENDOF + 0x10 OF .S" FST DOUBLE " ENDOF + 0x18 OF .S" FSTP DOUBLE " ENDOF + 0x20 OF .S" FRSTOR " ENDOF + 0x30 OF .S" FNSAVE " ENDOF + 0x38 OF .S" FNSTSW WORD " ENDOF + DUP ??? + ENDCASE + MOD-R/M + ELSE DUP FALU6 STI. + THEN ; + +: FDF ( ADDR OP -- ADDR' ) + DROP COUNT DUP 0xC0 < + IF DUP 0x38 AND + CASE 0x00 OF .S" FILD WORD " ENDOF + 0x10 OF .S" FIST WORD " ENDOF + 0x18 OF .S" FISTP WORD " ENDOF + 0x20 OF .S" FBLD TBYTE " ENDOF + 0x28 OF .S" FILD QWORD " ENDOF + 0x30 OF .S" FBSTP TBYTE " ENDOF + 0x38 OF .S" FISTP QWORD " ENDOF + DUP ??? + ENDCASE + MOD-R/M + ELSE DUP 0xE0 = + IF .S" FNSTSW AX " DROP + ELSE DUP 0x38 AND + CASE 0x28 OF .S" FUCOMIP " STI. ENDOF + 0x30 OF .S" FCOMIP " STI. ENDOF + ??? + ENDCASE + THEN + THEN ; + +: GP6 ( ADDR OP -- ADDR' ) + DROP COUNT DUP 3 RSHIFT + 7 AND S" SLDTSTR LLDTLTR VERRVERW??? ???" 4 SS. 3 SSPACES + R/M16 ; + +: GP7 ( ADDR OP -- ADDR' ) + DROP COUNT DUP 3 RSHIFT + 7 AND DUP S" SGDT SIDT LGDT LIDT SMSW ??? LMSW INVLPG" 6 SS. 1 SSPACES + 4 AND 4 = + IF R/M16 + ELSE R/M16/32 + THEN ; + +: BTX. ( N -- ) + 3 RSHIFT + 3 AND S" BT BTSBTRBTC" 3 SS. 4 SSPACES ; + +: GP8 ( ADDR OP -- ADDR' ) + DROP COUNT DUP BTX. + R/M16/32 IMM8 ; + +: LAR ( ADDR OP -- ADDR' ) + .S" LAR " DROP R,R/M ; + +: LSL ( ADDR OP -- ADDR' ) + .S" LSL " DROP R,R/M ; + +: LSS ( ADDR OP -- ADDR' ) + .S" LSS " DROP R,R/M ; + +: LFS ( ADDR OP -- ADDR' ) + .S" LFS " DROP R,R/M ; + +: LGS ( ADDR OP -- ADDR' ) + .S" LGS " DROP R,R/M ; + +: BTX ( ADDR OP -- ADDR' ) + BTX. R/M,R ; + +: SLI ( ADDR OP -- ADDR' ) + .S" SHLD " DROP R/M,R IMM8 ; + +: SRI ( ADDR OP -- ADDR' ) + .S" SHRD " DROP R/M,R IMM8 ; + +: SLC ( ADDR OP -- ADDR' ) + .S" SHLD " DROP R/M,R .S" , CL" ; + +: SRC ( ADDR OP -- ADDR' ) + .S" SHRD " DROP R/M,R .S" , CL" ; + +: IML ( ADDR OP -- ADDR' ) + .S" IMUL " DROP R,R/M ; + +: CXC ( ADDR OP -- ADDR' ) + .S" CMPXCHG " 1 AND TO SIZE R/M,R ; + +: MVX ( ADDR OP -- ADDR' ) + DUP 8 AND + IF .S" MOVSX " + ELSE .S" MOVZX " + THEN + 1 AND >R + COUNT MOD/SIB R> \ SIZE BIT + IF SWAP REG32 ., \ WORD TO DWORD CASE + 3 = + IF REG16 + ELSE .S" WORD PTR " DROP DUP 1- C@ MOD-R/M + THEN + ELSE SWAP REG16/32 ., \ BYTE CASE + 3 = + IF REG8 + ELSE .S" BYTE PTR " DROP DUP 1- C@ MOD-R/M + THEN + THEN ; + +: XAD ( ADDR OP -- ADDR' ) + .S" XADD " 1 AND TO SIZE R/M,R ; + +: BSF ( ADDR OP -- ADDR' ) + .S" BSF " DROP R,R/M ; + +: BSR ( ADDR OP -- ADDR' ) + .S" BSR " DROP R,R/M ; + +: CX8 ( ADDR OP -- ADDR' ) + .S" CMPXCHG8B " DROP COUNT R/M16/32 ; + +: BSP ( ADDR OP -- ADDR' ) + .S" BSWAP " REG32 ; + + +: F6. ( ADDR OP -- ADDR' ) +\ ?? + >R COUNT + DUP 3 RSHIFT 7 AND DUP>R S" TESTXXXXNOT NEG MUL IMULDIV IDIV" 4 SS. 3 SSPACES + MOD-R/M + R> 0= IF + R@ 1 AND IF IMM16/32 + ELSE IMM8 + THEN + THEN + R> DROP ; + +: FE. ( ADDR OP -- ADDR' ) + DROP COUNT + DUP 3 RSHIFT 7 AND + CASE + 0 OF .S" INC " ENDOF + 1 OF .S" DEC " ENDOF + .S" ??? " + ENDCASE R/M8 ; + +: FF. ( ADDR OP -- ADDR' ) + DROP COUNT + DUP 3 RSHIFT 7 AND + CASE + 0 OF .S" INC " ENDOF + 1 OF .S" DEC " ENDOF + 2 OF .S" CALL " ENDOF + 3 OF .S" CALL FAR " ENDOF + 4 OF .S" JMP " ENDOF + 5 OF .S" JMP FAR " ENDOF + 6 OF .S" PUSH " ENDOF + .S" ??? " + ENDCASE R/M16/32 ; + + +\ --------------------- CONDITIONAL MOVE --------------- + +: SET ( ADR OP -- ) + .S" SET" + TTTN 2 SSPACES + COUNT R/M8 ; + +: CMV ( ADR OP -- ) + .S" CMOV" + TTTN 1 SSPACES + R,R/M ; + +\ --------------------- MMX OPERATIONS ----------------- + +: MMX-SIZE ( OP -- ) + 3 AND S" BWDQ" 1 SS. ; + +: UPL ( ADR OP -- ADR' ) + 3 AND S" PUNPCKLBWPUNPCKLWDPUNPCKLDQ" 9 SS. R,R/M ; + +: UPH ( ADR OP -- ADR' ) + 3 AND S" PUNPCKHBWPUNPCKHWDPUNPCKHDQ" 9 SS. R,R/M ; + +: CGT ( ADR OP -- ADR' ) + .S" PCMPGT" MMX-SIZE R,R/M ; + +: CEQ ( ADR OP -- ADR' ) + .S" PCMPEQ" MMX-SIZE R,R/M ; + +: PSH. ( OP -- ) + 0x30 AND + CASE + 0x10 OF .S" PSRL" ENDOF + 0x20 OF .S" PSRA" ENDOF + 0x30 OF .S" PSLL" ENDOF + ENDCASE ; + +: GPA ( ADR OP -- ADR' ) + >R COUNT DUP PSH. R> MMX-SIZE 2 SSPACES MREG IMM8 ; + +: PUW ( ADR OP -- ADR' ) + .S" PACKUSDW " DROP R,R/M ; + +: PSB ( ADR OP -- ADR' ) + .S" PACKSSWB " DROP R,R/M ; + +: PSW ( ADR OP -- ADR' ) + .S" PACKSSDW " DROP R,R/M ; + +: MPD ( ADR OP -- ADR' ) + .S" MOVD " DROP COUNT MOD/SIB + SWAP MREG ., 3 = + IF REG32 + ELSE MOD-R/M + THEN ; + +: MDP ( ADR OP -- ADR' ) + .S" MOVD " DROP COUNT MOD/SIB + 3 = + IF SWAP REG32 + ELSE SWAP MOD-R/M + THEN ., MREG ; + +: MPQ ( ADR OP -- ADR' ) + .S" MOVQ " DROP R,R/M ; + +: MQP ( ADR OP -- ADR' ) + .S" MOVQ " DROP R/M,R ; + +: SHX ( ADR OP -- ADR' ) + DUP PSH. MMX-SIZE 2 SSPACES R,R/M ; + +: MLL ( ADR OP -- ADR' ) + .S" PMULLW " DROP R,R/M ; + +: MLH ( ADR OP -- ADR' ) + .S" PMULHW " DROP R,R/M ; + +: MAD ( ADR OP -- ADR' ) + .S" PMADDWD " DROP R,R/M ; + +: SUS ( ADR OP -- ADR' ) + .S" PSUBUS" MMX-SIZE R,R/M ; + +: SBS ( ADR OP -- ADR' ) + .S" PSUBS" MMX-SIZE SSPACE R,R/M ; + +: SUB ( ADR OP -- ADR' ) + .S" PSUB" MMX-SIZE 2 SSPACES R,R/M ; + +: AUS ( ADR OP -- ADR' ) + .S" PADDUS" MMX-SIZE R,R/M ; + +: ADS ( ADR OP -- ADR' ) + .S" PADDS" MMX-SIZE SSPACE R,R/M ; + +: ADD ( ADR OP -- ADR' ) + .S" PADD" MMX-SIZE 2 SSPACES R,R/M ; + +: PAD ( ADR OP -- ADR' ) + .S" PAND " DROP R,R/M ; + +: POR ( ADR OP -- ADR' ) + .S" POR " DROP R,R/M ; + +: PAN ( ADR OP -- ADR' ) + .S" PANDN " DROP R,R/M ; + +: PXR ( ADR OP -- ADR' ) + .S" PXOR " DROP R,R/M ; + + +\ -------------------- OPCODE TABLE -------------------- + +: OPS 0x10 0 DO ' , LOOP ; + + +CREATE OP-TABLE2 + +\ 0 1 2 3 4 5 6 7 8 9 A B C D E F + +OPS GP6 GP7 LAR LSL ??? ??? CLT ??? INV WIV ??? UD2 ??? ??? ??? ??? \ 0 +OPS ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? \ 1 +OPS MRC MRD MCR MDR MRT ??? MTR ??? ??? ??? ??? ??? ??? ??? ??? ??? \ 2 +OPS WMR RTC RMR RPC ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? \ 3 + +OPS CMV CMV CMV CMV CMV CMV CMV CMV CMV CMV CMV CMV CMV CMV CMV CMV \ 4 +OPS ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? \ 5 +OPS UPL UPL UPL PUW CGT CGT CGT PSB UPH UPH UPH PSW ??? ??? MPD MPQ \ 6 +OPS ??? GPA GPA GPA CEQ CEQ CEQ EMS ??? ??? ??? ??? ??? ??? MDP MQP \ 7 + +OPS LBR LBR LBR LBR LBR LBR LBR LBR LBR LBR LBR LBR LBR LBR LBR LBR \ 8 +OPS SET SET SET SET SET SET SET SET SET SET SET SET SET SET SET SET \ 9 +OPS PSS PPS CPU BTX SLI SLC ??? ??? PSS PPS RSM BTX SRI SRC ??? IML \ A +OPS CXC CXC LSS BTX LFS LGS MVX MVX ??? UD1 GP8 BTX BSF BSR MVX MVX \ B + +OPS XAD XAD ??? ??? ??? ??? ??? CX8 BSP BSP BSP BSP BSP BSP BSP BSP \ C +OPS ??? SHX SHX SHX ??? MLL ??? ??? SUS SUS ??? PAD AUS AUS ??? PAN \ D +OPS ??? SHX SHX ??? ??? MLH ??? ??? SBS SBS ??? POR ADS ADS ??? PXR \ E +OPS ??? ??? SHX SHX ??? MAD ??? ??? SUB SUB SUB ??? ADD ADD ADD ??? \ F + +\ 0 1 2 3 4 5 6 7 8 9 A B C D E F + +: 0F. ( ADR CODE -- ) + DROP COUNT DUP + DUP 0x70 AND 0x50 0x80 WITHIN TO MMX-REG + CELLS OP-TABLE2 + @ EXECUTE + 0 TO MMX-REG ; + + +CREATE OP-TABLE + +\ 0 1 2 3 4 5 6 7 8 9 A B C D E F + +OPS ALU ALU ALU ALU ALA ALA PSS PPS ALU ALU ALU ALU ALA ALA PSS 0F. \ 0 +OPS ALU ALU ALU ALU ALA ALA PSS PPS ALU ALU ALU ALU ALA ALA PSS PPS \ 1 +OPS ALU ALU ALU ALU ALA ALA ES: DAA ALU ALU ALU ALU ALA ALA CS: DAS \ 2 +OPS ALU ALU ALU ALU ALA ALA SS: AAA ALU ALU ALU ALU ALA ALA DS: AAS \ 3 + +OPS INC INC INC INC INC INC INC INC DEC DEC DEC DEC DEC DEC DEC DEC \ 4 +OPS PSH PSH PSH PSH PSH PSH PSH PSH POP POP POP POP POP POP POP POP \ 5 +OPS PSA PPA BND ARP FS: GS: D16 A16 PSI MLI PSI MLI INB ISD OSB OSD \ 6 +OPS BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA BRA \ 7 + +OPS ALI ALI ??? ALI TXB TXB TXB TXB MOV MOV MOV MOV MRS LEA MSR 8F. \ 8 +OPS XGA XGA XGA XGA XGA XGA XGA XGA CBW CDQ CIS W8F PSF PPF SAH LAH \ 9 +OPS MV1 MV1 MV2 MV2 MVS MVS CPS CPS TST TST STS STS LDS LDS SCS SCS \ A +OPS MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI MRI \ B + +OPS SHF SHF RTN RTN LXS LXS MVI MVI ENT LEV RTF RTF NT3 INT NTO IRT \ C +OPS SHF SHF SHF SHF AAM AAD ??? XLT FD8 FD9 FDA FDB FDC FDD FDE FDF \ D +OPS LUP LUP LUP LUP INP INP OTP OTP JSR JMP CIS JMP IND IND OTD OTD \ E +OPS LOK ??? RPZ REP HLT CMC F6. F6. CLC STC CLI STI CLD STD FE. FF. \ F + +\ 0 1 2 3 4 5 6 7 8 9 A B C D E F + +: DIS-OP ( ADR -- ADR' ) + 0>S + FALSE TO PREFIX-OP \ SMUB + COUNT + DUP 1 AND TO SIZE + DUP CELLS OP-TABLE + @ EXECUTE + PREFIX-OP 0= + IF DEFAULT-16BIT? 0= + IF FALSE TO 16-BIT-DATA + FALSE TO 16-BIT-ADDR + ELSE TRUE TO 16-BIT-DATA + TRUE TO 16-BIT-ADDR + THEN + THEN ; + + +0 VALUE NEXT-INST + +: X". ( ADDR -- ADDR' ) +\ CR DUP BASE-ADDR - 6 H.R SPACE + DUP C@ 2DUP SWAP 1+ SWAP ." '" TYPE ." '" + + 2+ +\ ." C, " 1+ OVER + SWAP +\ DO I C@ 2 H.R ." C, " LOOP +\ COUNT + 1+ +; + +[DEFINED] G. [IF] + +: FLIT8. ( ADDR -- ADDR' ) CR + ." FLITERAL: " + DUP DF@ G. 8 + +; + +: FLIT10. ( ADDR -- ADDR' ) CR + ." FLITERAL: " + DUP F@ G. 10 + +; + +[ELSE] + +: FLIT8. + CR DUP BASE-ADDR - 6 H.R SPACE + ." A; " DUP 8 OVER + SWAP + DO I C@ 3 H.R ." C," LOOP + 8 + +; + +: FLIT10. ( ADDR -- ADDR' ) + CR DUP BASE-ADDR - 6 H.R SPACE + ." A; " DUP 10 OVER + SWAP + DO I C@ 3 H.R ." C," LOOP + 10 + +; + +[THEN] + +: VECT. ( ADDR -- ADDR' ) CR +\ ." @" DUP BASE-ADDR - 6 H.R ." :" SPACE + ." A; " DUP @ 8 H.R DUP CELL+ SWAP @ ." , \ " WordByAddr TYPE CR +; + +\ : CONS. ( ADDR -- ) \ CR +\ \ ." @" DUP BASE-ADDR - 6 H.R ." :" SPACE +\ SPACE ." CONSTANT " @ 8 SPACES DUP LAB IF ." @" WordByAddr TYPE ELSE DUP ARRAY2? IF DROP ELSE ." $" 1 H.R CR THEN THEN +\ ; +: CONS. ( ADDR -- ) + CR DUP BASE-ADDR - 6 H.R SPACE + ." A; " @ 8 H.R ." ," +; + + +: USER. ( ADDR -- ) CR + \ ." @" DUP BASE-ADDR - 6 H.R ." :" SPACE + ." A; " @ 8 H.R ." \ Relative in heap [hex]" \ CELL+ +CR +; + +\ : UVAL. ( ADDR -- ADDR' ) CR + \ ." @" DUP BASE-ADDR - 6 H.R ." :" SPACE +\ ." A; " DUP @ 8 H.R ." \ Relative in heap [hex]" CELL+ +\ CR +\ ; + +: UVAL. ( ADDR -- ADDR' ) + CR DUP BASE-ADDR - 6 H.R SPACE + ." A; " DUP @ 8 H.R ." , \ Relative in heap [hex]" CELL+ +; + +VARIABLE ENDDB +VARIABLE ENDDD +VARIABLE FLAGDB +: TLABEL TRIGER3 @ IF 0 TRIGER3 ! ELSE OVER . ." :" 6 SPACES THEN ; +: DDADR? OVER @ DUP IMAGE-BEGIN > SWAP IMAGE-END < AND ; + +: CODE. ( ADDR -- ) 4 SPACES + DUP NextNFA + ?DUP + IF OVER - 5 - + ELSE + DUP DP @ SWAP - ABS DUP 512 > IF DROP 124 THEN \ no applicable end found + THEN +BEGIN DUP WHILE OVER LAB 0= IF OVER ARRAY? TLABEL ELSE 24 SPACES THEN +DDADR? IF OVER @ ARRAY2? 0= +IF ." dd @" OVER @ DUP @ ADD-LAB . CR THEN 4 - SWAP 4 + SWAP ELSE +DUP 4 < IF ." db " +\ FLAGDB @ IF ." , " ELSE ." db " THEN OVER C@ . 1- SWAP 1+ SWAP +2DUP OVER + DUP ENDDB ! SWAP DO I DUP ." $" C@ . ENDDB @ 1- <> IF ." , " THEN LOOP CR DROP 0 + ELSE OVER @ 0= IF \ OVER @ . 4 - SWAP 4 + SWAP CR + 0 FLAGDB ! TRIGER4 @ IF 2DROP EXIT ELSE ." dd $" BEGIN OVER @ 0= OVER 0 > AND +WHILE 4 - SWAP 4 + SWAP FLAGDB 1+! REPEAT FLAGDB @ . ." DUP (?)" THEN CR + ELSE + ." db " 4 - OVER DUP 4 + DUP ENDDB ! SWAP DO I DUP + ." $" C@ . ENDDB @ 1- <> IF ." , " THEN LOOP SWAP 4 + SWAP CR THEN + THEN +THEN +REPEAT 2DROP + +; + + +\ IMAGE-BEGIN - яюяЁюсютрЄ№ тьхьхёЄю ьхЄъш OVER @ IMAGE-BEGIN > IF ." DD" OVER @ . HERE . THEN + +: DIS-DB CR .S" DB " COUNT H.>S ; +: DIS-DW CR .S" DW " W@+ H.>S ; +: DIS-DD CR .S" DD " @+ H.>S ; +: DIS-DS CR .S" STRING " 0x22 EMIT>S COUNT 2DUP >S + 0x22 EMIT>S ; + +: FIND-REST-END ( xt -- addr | 0) + DUP NextNFA DUP + IF + NIP + NAME>C 1- \ Skip CFA field + ELSE + DROP + DP @ - ABS 100 > IF 0 EXIT THEN \ no applicable end found + DP @ 1- + THEN + + BEGIN \ Skip alignment + DUP C@ 0= WHILE 1- + REPEAT ; + + + + +: INST ( ADR -- ADR' ) + DUP TO NEXT-INST + COLS 0x29 < + IF DIS-OP + S-BUF COUNT TYPE + ELSE DUP DIS-OP + OVER BASE-ADDR - 6 + \ H.R SPACE \ яхўрЄ№ рфЁхёр ьхЄъш яю єёыютш■, 2DROP єсЁрЄ№ + \ 2DROP \ H.R SPACE рфЁхёр + OVER TYPE-LAB + IF 2DROP ELSE + OVER LAB IF 0 TRIGER3 ! 2DROP ELSE S" @" TYPE H.R S" :" TYPE SSPACE THEN + THEN + DUP ROT + 2DUP - DUP>R 0x10 U> ABORT" DECOMPILER ERROR" + 2DROP \ DO I C@ 2 SPACES DROP ( H.N ) LOOP \ 2DROP ( H.N ) LOOP \ фрья ъюьрэф√ + R> 12 < IF 9 EMIT THEN + \ NEXT-INST C@ 0xE8 = + \ IF NEXT-INST 1+ @+ SWAP + + \ CASE + \ ['] _CLITERAL-CODE OF 0 ENDOF + \ ['] _SLITERAL-CODE OF 0 ENDOF + \ ['] _VECT-CODE OF 0 ENDOF + \ ['] _CONSTANT-CODE OF 0 ENDOF + \ ['] _USER-CODE OF 0 ENDOF + \ ['] _CREATE-CODE OF 0 ." // ╬ЇюЁьшЄ ъръ var шыш label: array[0..10] of Byte/Integer;" ENDOF + \ ['] _USER-VALUE-CODE OF 0 ." // ╬ЇюЁьшЄ ъръ" ENDOF + \ ['] _FLIT-CODE10 OF 0 ENDOF + \ ['] _FLIT-CODE8 OF 0 ENDOF + \ ENDCASE + \ THEN + ?DUP IF 9 EMIT S-BUF COUNT TYPE THEN + THEN NEXT-INST C@ 0xE8 = + IF NEXT-INST 1+ @+ SWAP + + CASE + ['] _CLITERAL-CODE OF CR X". ENDOF + ['] _SLITERAL-CODE OF CR X". ENDOF + ['] _VECT-CODE OF VECT. 2DROP RDROP ENDOF + ['] _CONSTANT-CODE OF CONS. DROP RDROP ENDOF + ['] _USER-CODE OF USER. DROP RDROP ENDOF + ['] _CREATE-CODE OF CODE. DROP RDROP ENDOF + ['] _USER-VALUE-CODE OF UVAL. DROP RDROP ENDOF + ['] _FLIT-CODE10 OF FLIT10. ENDOF + ['] _FLIT-CODE8 OF FLIT8. ENDOF + ENDCASE + THEN + ; + +: INST1 ( ADR -- ADR' ) + DUP TO NEXT-INST + COLS 0x29 < + IF DIS-OP + \ S-BUF COUNT TYPE + ELSE DUP DIS-OP + DUP ROT + 2DUP - DUP>R 0x10 U> ABORT" DECOMPILER ERROR" + + 2DROP RDROP + THEN + + ; + +: (REST-AREA) ( addr1 addr2 -- ) +\ if addr2 = 0 continue till RET instruction + SWAP DUP TO NEXT-INST + BEGIN + \ We do not look for JMP's because there may be + \ a jump in a forth word + CR + OVER 0= IF NEXT-INST C@ 0xC3 <> + ELSE 2DUP < INVERT + THEN + WHILE INST \ CR + REPEAT 2DROP + ; + + + + + +\ : ALLOT DUP HERE FINISH-ARRAY @ 2! FINISH-ARRAY @ 2 CELLS + FINISH-ARRAY ! ALLOT ; + + + + + + + + + + + + + + + + + + + + +FORTH DEFINITIONS +VECT REST-AREA +\ ' (REST-AREA) TO REST-AREA + +\ : REST ( addr -- ) +\ DUP HERE U> 0= HERE 1- AND REST-AREA +\ ; + +\ : SEE ( "name" -- ) +\ ' DUP FIND-REST-END ['] REST-AREA CATCH DROP +\ ; + + +: CALL-TYPE +\ WordByAddr TYPE +\ DUP ADD-CALL DUP ADD-LAB \ ! ! ! ! ! +1 TRIGER3 ! S" @@" TYPE NEAR_NFA >R COUNT TYPE S" :" TYPE DROP R> + \ DUP SEE2 + ; + +: CALL-FIND \ DUP SEE2 + HEX + DUP FIND-REST-END +SWAP DUP TO NEXT-INST + BEGIN + \ We do not look for JMP's because there may be + \ a jump in a forth word + OVER 0= IF NEXT-INST C@ 0xC3 <> + ELSE 2DUP < INVERT + THEN + WHILE DUP INST1 DROP DUP TO NEXT-INST + DUP C@ 0xE8 = IF NEXT-INST 1+ DUP @ + 4 + DUP ADD-CALL +CALL-TYPE? @ IF RECURSE ELSE DROP 5 + THEN +ELSE DIS-OP THEN \ CR + REPEAT 2DROP + ; + + +: SEE2 ( "addr" -- ) + DUP FIND-REST-END 2DUP END-WORD ! START-WORD ! + ['] REST-AREA CATCH DROP +; + +: VAR-VECT + 1+ @+ SWAP + + CASE + ['] _CLITERAL-CODE OF 5 + X". ENDOF + ['] _SLITERAL-CODE OF 5 + X". ENDOF + ['] _VECT-CODE OF 5 + VECT. DROP ENDOF + ['] _CONSTANT-CODE OF 5 + CONS. ENDOF + ['] _USER-CODE OF 5 + USER. ENDOF + ['] _CREATE-CODE OF 5 + CODE. ENDOF + ['] _USER-VALUE-CODE OF 5 + UVAL. ENDOF + ['] _FLIT-CODE10 OF 5 + FLIT10. ENDOF + ['] _FLIT-CODE8 OF 5 + FLIT8. ENDOF + ENDCASE +; + +: TYPE-VAR + FINISH-VAR @ START-VAR @ = IF EXIT THEN + FINISH-VAR @ 4 - + BEGIN DUP @ + \ DUP 5 + @ ARRAY? . +DUP WordByAddr TYPE 1 TRIGER3 ! DUP VAR-VECT \ SEE2 + DUP START-VAR @ = 0= WHILE CELL- REPEAT DROP CR CR +; + +: TYPE-ALL +START-LIST2 @ FINISH-LIST2 @ 4 - FINISH-LIST3 ! +BEGIN DUP @ +DUP 1+ @+ SWAP + + CASE + \ ['] _CLITERAL-CODE OF 0 ENDOF + \ ['] _SLITERAL-CODE OF 0 ENDOF + ['] _VECT-CODE OF 0 ENDOF + ['] _CONSTANT-CODE OF 0 ENDOF + ['] _USER-CODE OF 0 ENDOF + ['] _CREATE-CODE OF 0 ENDOF + ['] _USER-VALUE-CODE OF 0 ENDOF + ['] _FLIT-CODE10 OF 0 ENDOF + ['] _FLIT-CODE8 OF 0 ENDOF + ENDCASE +?DUP IF ADD-CALL ELSE ADD-VAR THEN DUP FINISH-LIST3 @ = 0= \ ADD-CALL CR WordByAddr TYPE CR + WHILE CELL+ REPEAT DROP + TYPE-VAR + FINISH-LIST @ BEGIN DUP @ DUP CALL-TYPE + SEE2 DUP START-LIST @ = 0= WHILE CELL- REPEAT DROP + ; + +: DISASM-LIST +['] (REST-AREA) TO REST-AREA + DUP START-LIST @ ! CALL-FIND +; + + +: DIS ( ADR -- ) + BEGIN + DUP + CR INST + KEY UPC DUP 0x1B = OVER [CHAR] Q = OR 0= + WHILE + CASE + [CHAR] Q OF DROP DIS-DB ENDOF + [CHAR] W OF DROP DIS-DW ENDOF + [CHAR] D OF DROP DIS-DD ENDOF + [CHAR] S OF DROP DIS-DS ENDOF + ROT DROP + ENDCASE + + REPEAT 2DROP DROP ; + + +0 VALUE SHOW-NEXT? \ DEFAULT TO NOT SHOWING NEXT INSTRUCTIONS + +DECIMAL + +TRUE VALUE SEE-KET-FL + +VARIABLE COUNT-LINE + +: REST ( ADR -- ) + 20 COUNT-LINE ! + 0 TO MAX_REFERENCE + DUP TO NEXT-INST + BEGIN + CR + NEXT-INST C@ + DUP 0xC3 <> + SWAP 0xE9 <> AND \ NEXT, BEHIND US? + NEXT-INST MAX_REFERENCE U< OR + OVER HERE - 0x100 U> AND + WHILE INST + COUNT-LINE @ 1- DUP 0= SEE-KET-FL AND + IF 9 EMIT ." \ Press | q | any" KEY UPC + DUP 0xD = IF 2DROP 1 ELSE + DUP [CHAR] Q = SWAP 0x1B = + OR IF 2DROP CR EXIT THEN + DROP 20 THEN + THEN + COUNT-LINE ! + REPEAT DROP ." END-CODE " + ; + +: SEE ( -- ) + ' REST ; + + +ONLY FORTH DEFINITIONS + +.( Ok) CR +TRUE WARNING ! diff --git a/programs/develop/SPForth/lib/ext/locals.f b/programs/develop/SPForth/lib/ext/locals.f new file mode 100644 index 0000000000..28eeae8b5f --- /dev/null +++ b/programs/develop/SPForth/lib/ext/locals.f @@ -0,0 +1,324 @@ +( 28.Mar.2000 Andrey Cherezov Copyright [C] RU FIG + + ╚ёяюы№чютрэ√ шфхш ёыхфє■∙шї ртЄюЁют: + Ruvim Pinka; Dmitry Yakimov; Oleg Shalyopa; Yuriy Zhilovets; + Konstantin Tarasov; Michail Maximov. + + !! ╨рсюЄрхЄ Єюы№ъю т SPF4. +) + +( ╧ЁюёЄюх Ёрё°шЁхэшх ╤╧-╘юЁЄр ыюъры№э√ьш яхЁхьхээ√ьш. + ╨хрышчютрэю схч шёяюы№чютрэш  LOCALS ёЄрэфрЁЄр 94. + + ╬с· тыхэшх тЁхьхээ√ї яхЁхьхээ√ї, тшфшь√ї Єюы№ъю тэєЄЁш + Єхъє∙хую ёыютр ш юуЁрэшўхээ√ї тЁхьхэхь т√чютр фрээюую + ёыютр т√яюыэ хЄё  ё яюью∙№■ ёыютр "{". ┬эєЄЁш юяЁхфхыхэш  + ёыютр шёяюы№чєхЄё  ъюэёЄЁєъЎш , яюфюсэр  ёЄхъютющ эюЄрЎшш ╘юЁЄр + { ёяшёюъ_шэшЎшрышчшЁютрээ√ї_ыюърыют \ ёя.эхшэшЎ.ыюърыют -- ўЄю єуюфэю } + ═ряЁшьхЁ: + + { a b c d \ e f -- i j } + + ╚ыш { a b c d \ e f[ EVALUATE_т√Ёрцхэшх ] -- i j } + ▌Єю чэрўшЄ ўЄю фы  яхЁхьхээющ f[ сєфхЄ т√фхыхэ эр ёЄхъх тючтЁрЄют єўрёЄюъ + ярь Єш фышэющ n срщЄ. ╚ёяюы№чютрэшх яхЁхьхээющ f[ фрёЄ рфЁхё эрўрыр ¤Єюую + єўрёЄър. \┬ ёЄшых MPE\ + + ╚ыш { a b c d \ e [ 12 ] f -- i j } + ▌Єю чэрўшЄ ўЄю фы  яхЁхьхээющ f сєфхЄ т√фхыхэ эр ёЄхъх тючтЁрЄют єўрёЄюъ + ярь Єш фышэющ 12 срщЄ. ╚ёяюы№чютрэшх яхЁхьхээющ f фрёЄ рфЁхё эрўрыр ¤Єюую + єўрёЄър. + + ╫рёЄ№ "\ ёя.эхшэшЎ.ыюърыют" ьюцхЄ юЄёєЄёЄтютрЄ№, эряЁшьхЁ: + + { item1 item2 -- } + + ▌Єю чрёЄрты хЄ ╤╧-╘юЁЄ ртЄюьрЄшўхёъш т√фхы Є№ ьхёЄю т + ёЄхъх тючтЁрЄют фы  ¤Єшї яхЁхьхээ√ї т ьюьхэЄ т√чютр ёыютр + ш ртЄюьрЄшўхёъш юётюсюцфрЄ№ ьхёЄю яЁш т√їюфх шч эхую. + + ╬сЁр∙хэшх ъ Єръшь ыюъры№э√ь яхЁхьхээ√ь - ъръ ъ VALUE-яхЁхьхээ√ь + яю шьхэш. ┼ёыш эєцхэ рфЁхё яхЁхьхээющ, Єю шёяюы№чєхЄё  "^ шь " + шыш "AT шь ". + + + ┬ьхёЄю \ ьюцэю шёяюы№чютрЄ№ | + ┬ьхёЄю -> ьюцэю шёяюы№чютрЄ№ TO + + ╧ЁшьхЁ√: + + : TEST { a b c d \ e f -- } a . b . c . b c + -> e e . f . ^ a @ . ; + Ok + 1 2 3 4 TEST + 1 2 3 5 0 1 Ok + + : TEST { a b -- } a . b . CR 5 0 DO I . a . b . CR LOOP ; + Ok + 12 34 TEST + 12 34 + 0 12 34 + 1 12 34 + 2 12 34 + 3 12 34 + 4 12 34 + Ok + + : TEST { a b } a . b . ; + Ok + 1 2 TEST + 1 2 Ok + + : TEST { a b \ c } a . b . c . ; + Ok + 1 2 TEST + 1 2 0 Ok + + : TEST { a b -- } a . b . ; + Ok + 1 2 TEST + 1 2 Ok + + : TEST { a b \ c -- d } a . b . c . ; + Ok + 1 2 TEST + 1 2 0 Ok + + : TEST { \ a b } a . b . 1 -> a 2 -> b a . b . ; + Ok + TEST + 0 0 1 2 Ok + + ╚ьхэр ыюъры№э√ї яхЁхьхээ√ї ёє∙хёЄтє■Є т фшэрьшўхёъюь + тЁхьхээюь ёыютрЁх Єюы№ъю т ьюьхэЄ ъюьяшы Ўшш ёыютр, р + яюёых ¤Єюую т√ўш∙р■Єё  ш сюыхх эхфюёЄєяэ√. + + ╚ёяюы№чютрЄ№ ъюэёЄЁєъЎш■ "{ ... }" тэєЄЁш юфэюую юяЁхфхыхэш  ьюцэю + Єюы№ъю юфшэ Ёрч. + + ╩юьяшы Ўш  ¤Єющ сшсышюЄхъш фюсрты хЄ т Єхъє∙шщ ёыютрЁ№ ъюьяшы Ўшш + ╥юы№ъю фтр ёыютр: + ёыютрЁ№ "vocLocalsSupport" ш "{" + ┬ёх юёЄры№э√х фхЄрыш "ёяЁ Єрэ√" т ёыютрЁх, шёяюы№чютрЄ№ шї + эх ЁхъюьхэфєхЄё . +) + +MODULE: vocLocalsSupport + +USER widLocals +USER uLocalsCnt +USER uLocalsUCnt +USER uPrevCurrent +USER uAddDepth + +: (Local^) ( N -- ADDR ) + RP@ + +; +: LocalOffs ( n -- offs ) + uLocalsCnt @ SWAP - CELLS CELL+ uAddDepth @ + +; + +BASE @ HEX +: CompileLocalsInit + uPrevCurrent @ SET-CURRENT + uLocalsCnt @ uLocalsUCnt @ - ?DUP IF CELLS LIT, POSTPONE DRMOVE THEN + uLocalsUCnt @ ?DUP + IF + LIT, POSTPONE (RALLOT) + THEN + uLocalsCnt @ ?DUP + IF CELLS RLIT, ['] (LocalsExit) RLIT, THEN +; + +: CompileLocal@ ( n -- ) + ['] DUP MACRO, + LocalOffs DUP SHORT? + OPT_INIT SetOP + IF 8B B, 44 B, 24 B, B, \ mov eax, offset [esp] + ELSE 8B B, 84 B, 24 B, , \ mov eax, offset [esp] + THEN OPT + OPT_CLOSE +; + +\ : CompileLocal@ ( n -- ) +\ LocalOffs LIT, POSTPONE RP+@ +\ ; + +: CompileLocal! ( n -- ) + LocalOffs DUP SHORT? + OPT_INIT SetOP + IF 89 B, 44 B, 24 B, B, \ mov offset [esp], eax + ELSE 89 B, 84 B, 24 B, , \ mov offset [esp], eax + THEN OPT + OPT_CLOSE + ['] DROP MACRO, +; + +: CompileLocalRec ( u -- ) + LocalOffs DUP + ['] DUP MACRO, + SHORT? + OPT_INIT SetOP + IF 8D B, 44 B, 24 B, B, \ lea eax, offset [esp] + ELSE 8D B, 84 B, 24 B, , \ lea eax, offset [esp] + THEN OPT + OPT_CLOSE +; + +BASE ! + +: LocalsStartup + TEMP-WORDLIST widLocals ! + GET-CURRENT uPrevCurrent ! + ALSO vocLocalsSupport + ALSO widLocals @ CONTEXT ! DEFINITIONS + uLocalsCnt 0! + uLocalsUCnt 0! + uAddDepth 0! +; +: LocalsCleanup + PREVIOUS PREVIOUS + widLocals @ FREE-WORDLIST +; + +: ProcessLocRec ( "name" -- u ) + [CHAR] ] PARSE + STATE 0! + EVALUATE CELL 1- + CELL / \ фхырхь ъЁрЄэ√ь 4 + -1 STATE ! + DUP uLocalsCnt +! + uLocalsCnt @ 1- +; + +: CreateLocArray + ProcessLocRec + CREATE , +; + +: LocalsRecDoes@ ( -- u ) + DOES> @ CompileLocalRec +; + +: LocalsRecDoes@2 ( -- u ) + ProcessLocRec , + DOES> @ CompileLocalRec +; + +: LocalsDoes@ + uLocalsCnt @ , + uLocalsCnt 1+! + DOES> @ CompileLocal@ +; + +: ;; POSTPONE ; ; IMMEDIATE + + +: ^ + ' >BODY @ + CompileLocalRec +; IMMEDIATE + + +: -> ' >BODY @ CompileLocal! ; IMMEDIATE + +WARNING DUP @ SWAP 0! + +: AT + [COMPILE] ^ +; IMMEDIATE + +: TO ( "name" -- ) + >IN @ NextWord widLocals @ SEARCH-WORDLIST 1 = + IF >BODY @ CompileLocal! DROP + ELSE >IN ! [COMPILE] TO + THEN +; IMMEDIATE + +WARNING ! + +: т POSTPONE -> ; IMMEDIATE + +WARNING @ WARNING 0! +\ === +\ яхЁхюяЁхфхыхэшх ёююЄтхЄёЄтє■∙шї ёыют фы  тючьюцэюёЄш шёяюы№чютрЄ№ +\ тЁхьхээ√х яхЁхьхээ√х тэєЄЁш Ўшъыр DO LOOP ш эхчртшёшью юЄ шчьхэхэш  +\ ёюфхЁцшьюую ёЄхър тючтЁрЄют ёыютрьш >R R> + +: DO POSTPONE DO [ 3 CELLS ] LITERAL uAddDepth +! ; IMMEDIATE +: ?DO POSTPONE ?DO [ 3 CELLS ] LITERAL uAddDepth +! ; IMMEDIATE +: LOOP POSTPONE LOOP [ -3 CELLS ] LITERAL uAddDepth +! ; IMMEDIATE +: +LOOP POSTPONE +LOOP [ -3 CELLS ] LITERAL uAddDepth +! ; IMMEDIATE +: >R POSTPONE >R [ 1 CELLS ] LITERAL uAddDepth +! ; IMMEDIATE +: R> POSTPONE R> [ -1 CELLS ] LITERAL uAddDepth +! ; IMMEDIATE +: RDROP POSTPONE RDROP [ -1 CELLS ] LITERAL uAddDepth +! ; IMMEDIATE +: 2>R POSTPONE 2>R [ 2 CELLS ] LITERAL uAddDepth +! ; IMMEDIATE +: 2R> POSTPONE 2R> [ -2 CELLS ] LITERAL uAddDepth +! ; IMMEDIATE + +\ === + +\ { ... | ... -- _____ } +: ParseLocals3 + BEGIN + PARSE-NAME + DUP 0= ABORT" Locals bad syntax (3)" + 2DUP S" }" COMPARE 0= IF 2DROP EXIT THEN + 2DROP + AGAIN +; + +\ { ... | _____ -- ... } +: ParseLocals2 + BEGIN + PARSE-NAME + DUP 0= ABORT" Locals bad syntax (2)" + 2DUP S" --" COMPARE 0= IF 2DROP ParseLocals3 EXIT THEN + 2DUP S" }" COMPARE 0= IF 2DROP EXIT THEN + 2DUP S" [" COMPARE 0= + IF + 2DROP CreateLocArray LocalsRecDoes@ + ELSE + CREATED + LATEST DUP C@ CHARS + C@ + [CHAR] [ = + IF + LocalsRecDoes@2 + ELSE + LocalsDoes@ 1 + THEN + THEN + uLocalsUCnt +! IMMEDIATE + AGAIN +; + +\ { _____ | ... -- ... } +: ParseLocals1 + BEGIN + PARSE-NAME + DUP 0= ABORT" Locals bad syntax (1)" + 2DUP S" |" COMPARE 0= IF 2DROP ParseLocals2 EXIT THEN + 2DUP S" \" COMPARE 0= IF 2DROP ParseLocals2 EXIT THEN + 2DUP S" --" COMPARE 0= IF 2DROP ParseLocals3 EXIT THEN + 2DUP S" }" COMPARE 0= IF 2DROP EXIT THEN + + CREATED LocalsDoes@ IMMEDIATE + AGAIN ; + +\ uLocalsCnt @ ?DUP +\ IF CELLS RLIT, ['] (LocalsExit) RLIT, THEN + +: ; LocalsCleanup + S" ;" EVAL-WORD +; IMMEDIATE + +WARNING ! + +\ ===================================================================== + +EXPORT + +: { + LocalsStartup + ParseLocals1 + CompileLocalsInit +;; IMMEDIATE + +;MODULE diff --git a/programs/develop/SPForth/lib/ext/patch.f b/programs/develop/SPForth/lib/ext/patch.f new file mode 100644 index 0000000000..d1fa9ce451 --- /dev/null +++ b/programs/develop/SPForth/lib/ext/patch.f @@ -0,0 +1,8 @@ + +\ from gforth +: REPLACE-WORD ( by-xt what-xt ) + [ HEX ] E9 [ DECIMAL ] OVER C! \ JMP ... + 1+ DUP >R + CELL+ - + R> ! +; diff --git a/programs/develop/SPForth/lib/ext/spf-asm.f b/programs/develop/SPForth/lib/ext/spf-asm.f new file mode 100644 index 0000000000..0f80669566 --- /dev/null +++ b/programs/develop/SPForth/lib/ext/spf-asm.f @@ -0,0 +1,40 @@ +REQUIRE CASE lib/ext/case.f +REQUIRE !CSP ~mak/lib/csr.f + +: DEFER CREATE ['] NOOP , DOES> @ EXECUTE ; +: DEFER@ ' >BODY STATE @ IF POSTPONE LITERAL POSTPONE @ ELSE @ THEN ; IMMEDIATE +: IS ' >BODY STATE @ IF POSTPONE LITERAL POSTPONE ! ELSE ! THEN ; IMMEDIATE + +: +TO ' >BODY STATE @ IF POSTPONE LITERAL POSTPONE +! ELSE +! THEN ; IMMEDIATE + +: REVEAL SMUDGE ; +: COMPILE ' POSTPONE LITERAL POSTPONE COMPILE, ; IMMEDIATE +: (;CODE) R> LATEST 5 - ! ; + +VECT EXIT-ASSEMBLER + +VOCABULARY ASSEMBLER + +S" lib/asm/486asm.f" INCLUDED + +( FORTH HEADER CREATION WORDS ) +ALSO ASSEMBLER ALSO ASM-HIDDEN +IN-HIDDEN +: _CODE ( START A NATIVE CODE DEFINITION ) + CREATE CFL NEGATE ALLOT HIDE !CSP INIT-ASM ; + +: _;CODE ( CREATE THE [;CODE] PART OF A LOW LEVEL DEFINING WORD ) + ?CSP !CSP COMPILE (;CODE) POSTPONE [ INIT-ASM ; + +IN-FORTH +' _CODE IS CODE +' _;CODE IS ;CODE + +: FCALL A; [COMPILE] ' COMPILE, ; + +ONLY FORTH DEFINITIONS + +ALSO FORTH IMMEDIATE PREVIOUS + + +S" lib/asm/asmmac.f" INCLUDED diff --git a/programs/develop/SPForth/lib/ext/vocs.f b/programs/develop/SPForth/lib/ext/vocs.f new file mode 100644 index 0000000000..10944c043c --- /dev/null +++ b/programs/develop/SPForth/lib/ext/vocs.f @@ -0,0 +1,60 @@ + +REQUIRE [DEFINED] lib/include/tools.f + +\ ╨рёяхўрЄрЄ№ ёяшёюъ ёыютрЁхщ. +: VOCS + VOC-LIST + BEGIN @ DUP WHILE + DUP CELL+ VOC-NAME. + DUP 3 CELLS + @ \ wid яЁхфър + ?DUP IF ." defined in " VOC-NAME. + ELSE ." is the main vocabulary" + THEN CR + REPEAT + DROP +; + +0x200 VALUE MAX-WORD-SIZE + +C" NEAR_NFA" FIND NIP 0= +[IF] : NEAR_NFA ( addr -- NFA addr | 0 addr ) DUP WordByAddr DROP 1- SWAP + 2DUP 1000 - U< IF NIP 0 SWAP THEN ; +[THEN] + +\ Opposite to CDR, might be slow! + \ It does not take wordlists into account. +: NextNFA ( nfa1 -- nfa2 | 0 ) + NEAR_NFA SWAP >R + BEGIN + 1+ NEAR_NFA ( nfa addr ) + OVER 0 > + ROT R@ <> AND + OVER R@ - MAX-WORD-SIZE > OR + UNTIL + + DUP R> - MAX-WORD-SIZE > + IF DROP 0 + ELSE NEAR_NFA DROP + THEN +; + +: NFAInVoc? ( nfa voc -- f ) + @ \ last nfa + BEGIN ( nfa 'nfa ) + DUP + WHILE + 2DUP = IF 2DROP TRUE EXIT THEN + CDR + REPEAT 2DROP 0 +; + +: VocByNFA ( nfa -- wid | 0 ) + VOC-LIST + BEGIN @ DUP WHILE ( nfa voc ) + 2DUP CELL+ NFAInVoc? + IF + NIP CELL+ EXIT + THEN + REPEAT + 2DROP 0 +; diff --git a/programs/develop/SPForth/lib/include/core-ext.f b/programs/develop/SPForth/lib/include/core-ext.f new file mode 100644 index 0000000000..573e00f48b --- /dev/null +++ b/programs/develop/SPForth/lib/include/core-ext.f @@ -0,0 +1,81 @@ +\ 94 CORE EXT + +: .R ( n1 n2 -- ) \ 94 CORE EXT +\ ┬√тхёЄш эр ¤ъЁрэ n1 т√Ёртэхээ√ь тяЁртю т яюых °шЁшэющ n2 ёшьтюыют. +\ ┼ёыш ўшёыю ёшьтюыют, эхюсїюфшьюх фы  шчюсЁрцхэш  n1, сюы№°х ўхь n2, +\ шчюсЁрцр■Єё  тёх ЎшЇЁ√ ўшёыр схч тхфє∙шї яЁюсхыют т яюых эхюсїюфшьющ +\ °шЁшэ√. + >R DUP >R ABS + S>D <# #S R> SIGN #> + R> OVER - 0 MAX SPACES TYPE +; +: 0> ( n -- flag ) \ 94 CORE EXT +\ flag "шёЄшэр" Єюуфр ш Єюы№ъю Єюуфр, ъюуфр n сюы№°х эєы  + 0 > +; + +: MARKER ( "name" -- ) \ 94 CORE EXT +\ ╧ЁюяєёЄшЄ№ тхфє∙шх яЁюсхы√. ┬√фхышЄ№ name, юуЁрэшўхээюх яЁюсхырьш. +\ ╤ючфрЄ№ юяЁхфхыхэшх ё ёхьрэЄшъющ т√яюыэхэш , юяшёрээющ эшцх. +\ name ┬√яюыэхэшх: ( -- ) +\ ┬юёёЄрэютшЄ№ ЁрёяЁхфхыхэшх ярь Єш ёыютрЁ  ш єърчрЄхыш яюЁ фър яюшёър +\ ъ ёюёЄю эш■, ъюЄюЁюх юэш шьхыш яхЁхф юяЁхфхыхэшхь name. ╙сЁрЄ№ +\ юяЁхфхыхэшх name ш тёх яюёыхфє■∙шх юяЁхфхыхэш . ═х ЄЁхсєхЄё  +\ юс чрЄхы№эю тюёёЄрэртыштрЄ№ ы■с√х юёЄрт°шхё  ёЄЁєъЄєЁ√, ъюЄюЁ√х +\ ьюуєЄ с√Є№ ёт чрэ√ ё єфрыхээ√ьш юяЁхфхыхэш ьш шыш юётюсюцфхээ√ь +\ яЁюёЄЁрэёЄтюь фрээ√ї. ═шърър  фЁєур  ъюэЄхъёЄєры№эр  шэЇюЁьрЎш , +\ ъръ юёэютрэшх ёшёЄхь√ ёўшёыхэш , эх шчьхэ хЄё . + HERE +\ [C]HERE , [E]HERE , + GET-CURRENT , + GET-ORDER DUP , 0 ?DO DUP , @ , LOOP + CREATE , + DOES> @ DUP \ ONLY +\ DUP @ [C]DP ! CELL+ +\ DUP @ [E]DP ! CELL+ + DUP @ SET-CURRENT CELL+ + DUP @ >R R@ CELLS 2* + 1 CELLS - R@ 0 + ?DO DUP DUP @ SWAP CELL+ @ OVER ! SWAP 2 CELLS - LOOP + DROP R> SET-ORDER + DP ! +; + +: SAVE-INPUT ( -- xn ... x1 n ) \ 94 CORE EXT +\ x1 - xn юяшё√тр■Є Єхъє∙хх ёюёЄю эшх ёяхЎшЇшърЎшщ тїюфэюую яюЄюър фы  +\ яюёыхфє■∙хую шёяюы№чютрэш  ёыютюь RESTORE-INPUT. + SOURCE-ID 0> + IF TIB #TIB @ 2DUP C/L 2 + ALLOCATE THROW DUP >R SWAP CMOVE + R> TO TIB >IN @ + SOURCE-ID FILE-POSITION THROW + 5 + ELSE BLK @ >IN @ 2 THEN +; +: RESTORE-INPUT ( xn ... x1 n -- flag ) \ 94 CORE EXT +\ ╧юя√Єър тюёёЄрэютшЄ№ ёяхЎшЇшърЎшш тїюфэюую яюЄюър ъ ёюёЄю эш■, +\ юяшёрээюьє x1 - xn. flag "шёЄшэр", хёыш ёяхЎшЇшърЎшш тїюфэюую +\ яюЄюър эх ьюуєЄ с√Є№ тюёёЄрэютыхэ√. +\ ═хюяЁхфхыхээр  ёшЄєрЎш  тючэшърхЄ, хёыш тїюфэющ яюЄюъ, +\ яЁхфёЄртыхээ√щ рЁуєьхэЄрьш эх ЄюЄ цх, ўЄю ш Єхъє∙шщ тїюфэющ яюЄюъ. + SOURCE-ID 0> + IF DUP 5 <> IF 0 ?DO DROP LOOP -1 EXIT THEN + DROP SOURCE-ID REPOSITION-FILE ?DUP IF >R 2DROP DROP R> EXIT THEN + >IN ! #TIB ! TO TIB FALSE + ELSE DUP 2 <> IF 0 ?DO DROP LOOP -1 EXIT THEN + DROP >IN ! BLK ! FALSE + THEN +; +: U.R ( u n -- ) \ 94 CORE EXT +\ ┬√тхёЄш эр ¤ъЁрэ u т√Ёртэхээ√ь тяЁртю т яюых °шЁшэющ n ёшьтюыют. +\ ┼ёыш ўшёыю ёшьтюыют, эхюсїюфшьюх фы  шчюсЁрцхэш  u, сюы№°х ўхь n, +\ шчюсЁрцр■Єё  тёх ЎшЇЁ√ ўшёыр схч тхфє∙шї яЁюсхыют т яюых эхюсїюфшьющ +\ °шЁшэ√. + >R U>D <# #S #> + R> OVER - 0 MAX SPACES TYPE +; +\EOF +: UNUSED ( -- u ) \ 94 CORE EXT +\ u - юс·хь ярь Єш, юёЄрт°хщё  т юсырёЄш, рфЁхёєхьющ HERE, +\ т срщЄрї. + IMAGE-SIZE + HERE IMAGE-BASE - - +; \ No newline at end of file diff --git a/programs/develop/SPForth/lib/include/tools.f b/programs/develop/SPForth/lib/include/tools.f new file mode 100644 index 0000000000..2c7de7c836 --- /dev/null +++ b/programs/develop/SPForth/lib/include/tools.f @@ -0,0 +1,78 @@ +\ 94 TOOLS + +: .S ( -- ) \ 94 TOOLS +\ ╤ъюяшЁютрЄ№ ш яюърчрЄ№ чэрўхэш , эрїюф ∙шхё  эр ёЄхъх фрээ√ї. ╘юЁьрЄ чртшёшЄ +\ юЄ ЁхрышчрЎшш. +\ .S ьюцхЄ с√Є№ Ёхрышчютрэю ё шёяюы№чютрэшхь ёыют ЇюЁьрЄэюую яЁхюсЁрчютрэш  +\ ўшёхы. ╤ююЄтхЄёЄтхээю, юэ ьюцхЄ шёяюЁЄшЄ№ яхЁхьх∙рхьє■ юсырёЄ№, +\ шфхэЄшЇшЎшЁєхьє■ #>. + DEPTH .SN +; + +: ? ( a-addr -- ) \ 94 TOOLS +\ ╧юърчрЄ№ чэрўхэшх, їЁрэ ∙ххё  яю рфЁхёє a-addr. +\ ? ьюцхЄ с√Є№ Ёхрышчютрэ ё шёяюы№чютрэшхь ёыют ЇюЁьрЄэюую яЁхюсЁрчютрэш  +\ ўшёхы. ╤ююЄтхЄёЄтхээю, юэ ьюцхЄ шёяюЁЄшЄ№ яхЁхьх∙рхьє■ юсырёЄ№, +\ шфхэЄшЇшЎшЁєхьє■ #>. + @ . +; +: AHEAD \ 94 TOOLS EXT +\ ╚эЄхЁяЁхЄрЎш : ёхьрэЄшър эхюяЁхфхыхэр. +\ ╩юьяшы Ўш : ( C: -- orig ) +\ ╧юыюцшЄ№ ьхёЄю эхЁрчЁх°хээющ ёё√ыъш тяхЁхф orig эр ёЄхъ єяЁртыхэш . +\ ─юсртшЄ№ ёхьрэЄшъє тЁхьхэш т√яюыэхэш , фрээє■ эшцх, ъ Єхъє∙хьє юяЁхфхыхэш■. +\ ╤хьрэЄшър эхчртхЁ°хэр фю Єхї яюЁ, яюър orig эх ЁрчЁх°шЄё  (эряЁшьхЁ, +\ яю THEN). +\ ┬Ёхь  т√яюыэхэш : ( -- ) +\ ╧ЁюфюыцшЄ№ т√яюыэхэшх ё яючшЎшш, чрфрээющ ЁрчЁх°хэшхь orig. + HERE BRANCH, >MARK 2 +; IMMEDIATE + +: [ELSE] \ 94 TOOLS EXT +\ ╩юьяшы Ўш : ┬√яюыэшЄ№ ёхьрэЄшъє т√яюыэхэш , фрээє■ эшцх. +\ ┬√яюыэхэшх: ( "name..." -- ) +\ ╧ЁюяєёЄшЄ№ тхфє∙шх яЁюсхы√, т√фхышЄ№ ш юЄсЁюёшЄ№ юуЁрэшўхээ√х яЁюсхырьш +\ ёыютр шч ЁрчсшЁрхьющ юсырёЄш, тъы■ўр  тыюцхээ√х [IF]...[THEN] ш +\ [IF]...[ELSE]...[THEN], фю т√фхыхэш  ш юЄсЁрё√трэш  ёыютр [THEN]. +\ ┼ёыш ЁрчсшЁрхьр  юсырёЄ№ юяєёЄю°рхЄё , юэр ёэютр чряюыэ хЄё  яю REFILL. +\ [ELSE] - ёыютю эхьхфыхээюую шёяюыэхэш . + 1 + BEGIN + NextWord DUP + IF + 2DUP S" [IF]" COMPARE 0= IF 2DROP 1+ ELSE + 2DUP S" [ELSE]" COMPARE 0= IF 2DROP 1- DUP IF 1+ THEN ELSE + S" [THEN]" COMPARE 0= IF 1- THEN + THEN THEN + ELSE 2DROP REFILL AND \ SOURCE TYPE + THEN DUP 0= + UNTIL DROP ; IMMEDIATE + +: [IF] \ 94 TOOLS EXT +\ ╩юьяшы Ўш : ┬√яюыэшЄ№ ёхьрэЄшъє т√яюыэхэш , фрээє■ эшцх. +\ ┬√яюыэхэшх: ( flag | flag "name..." -- ) +\ ┼ёыш Їыру "шёЄшэр", эшўхую эх фхырЄ№. ╚эрўх, яЁюяєёЄшт тхфє∙шх яЁюсхы√, +\ т√фхы Є№ ш юЄсЁрё√трЄ№ юуЁрэшўхээ√х яЁюсхырьш ёыютр шч ЁрчсшЁрхьющ юсырёЄш, +\ тъы■ўр  тыюцхээ√х [IF]...[THEN] ш [IF]...[ELSE]...[THEN], фю Єхї яюЁ, яюър эх +\ сєфхЄ т√фхыхэю ш юЄсЁю°хэю ёыютю [ELSE] шыш [THEN]. +\ ┼ёыш ЁрчсшЁрхьр  юсырёЄ№ юяєёЄю°рхЄё , юэр ёэютр чряюыэ хЄё  яю REFILL. +\ [ELSE] - ёыютю эхьхфыхээюую шёяюыэхэш . + 0= IF POSTPONE [ELSE] THEN +; IMMEDIATE + +: [THEN] \ 94 TOOLS EXT +\ ╩юьяшы Ўш : ┬√яюыэшЄ№ ёхьрэЄшъє т√яюыэхэш , фрээє■ эшцх. +\ ┬√яюыэхэшх: ( -- ) +\ ═шўхую эх фхырЄ№. [THEN] - ёыютю эхьхфыхээюую шёяюыэхэш . +; IMMEDIATE + +\ Ruvim Pinka additions: + +: [DEFINED] ( -- f ) \ "name" + NextWord SFIND IF DROP TRUE ELSE 2DROP FALSE THEN +; IMMEDIATE + +: [UNDEFINED] ( -- f ) \ "name" + POSTPONE [DEFINED] 0= +; IMMEDIATE + diff --git a/programs/develop/SPForth/mbuild.bat b/programs/develop/SPForth/mbuild.bat new file mode 100644 index 0000000000..8d2cc125f5 --- /dev/null +++ b/programs/develop/SPForth/mbuild.bat @@ -0,0 +1 @@ +fasm.exe meforth.ASM diff --git a/programs/develop/SPForth/meforth.ASM b/programs/develop/SPForth/meforth.ASM new file mode 100644 index 0000000000..7d31ea680d --- /dev/null +++ b/programs/develop/SPForth/meforth.ASM @@ -0,0 +1,504 @@ +; KolSPForth v12 + + SYSTEM equ EMUL + +;Memory Map +; +;0 +;0x02C7D ;I_END +;0x05430 ;CTOP + +;0x3F800 ;Data stack +;0x3FA00 ;return stack +;0x3FC00 ;User +;0x3FE00 ;TIB +;0x30000 ;FILE BUFF +;0x40000 (256K) + + ;; Version control + + VER EQU 1 ;major release version + EXT EQU 0 ;minor extension + + ;; Constants + + TRUEE EQU -1 ;true flag + + COMPO EQU 040H ;lexicon compile only bit + IMEDD EQU 080H ;lexicon immediate bit + MASKK EQU 01FH ;lexicon bit mask + + CELLL EQU 4 ;size of a cell + BASEE EQU 10 ;default radix + VOCSS EQU 8 ;depth of vocabulary stack + + BKSPP EQU 8 ;back space + LF EQU 10 ;line feed + CRR EQU 13 ;carriage return + ERR EQU 27 ;error escape + TIC EQU 39 ;tick + + CALLL EQU 0E8H ;CALL opcodes + + ROWH EQU 13 + KEY_DELAY EQU 20 + FW_WIDTH equ 500 + FW_HEIGHT equ 352 + + + ;; Memory allocation + + EM EQU 256*1024 ;top of memory + FILE_BS EQU 64*1024 ;file buff size + US EQU 128*CELLL ;user area size in cells + RTS EQU 1024*CELLL ;return stack/TIB size + + FILE_B EQU EM-FILE_BS ;terminal input buffer (TIB) + TIBB EQU FILE_B-RTS ;terminal input buffer (TIB) +; UPP EQU TIBB-US ;start of user area (UP0) + RPP EQU UPP-RTS ;start of return stack (ESP0) + SPP EQU RPP-RTS ;start of data stack (EBP0) + +LastNFA = 0 + +LastCFA EQU INIT + + + +macro AHEADER FLAG,ID,F_CFA { + db FLAG + DD F_CFA + DD LastNFA +The_Nfa = $ + DB ID,0 +LastNFA = The_Nfa +F_CFA: +} + +macro cfa_AHEADER FLAG,ID,F_CFA { + db FLAG + DD cfa_#F_CFA + DD LastNFA +The_Nfa = $ + DB ID,0 +LastNFA = The_Nfa +cfa_#F_CFA: +} + + + ;; Main entry points and COLD start data + + use32 + + org 0x0 + + db 'MENUET01' ; 8 byte id + dd 0x01 ; header version + dd ORIG ; start of code + dd I_END ; size of image +MEMS: dd EM ; memory for app + dd SPP ; esp +if SYSTEM eq MEOS + dd FINFO.path +else + dd 0 +end if + dd 0x0 ; I_Param , I_Icon + + lang fix ru + include 'MACROS.INC' + include "proc32.inc" + +align 4 +proc strncmp stdcall, s1:dword, s2:dword, n:dword + + push esi + push edi + mov ecx, [n] + test ecx, ecx ; Max length is zero? + je .done + + mov esi, [s1] ; esi = string s1 + mov edi, [s2] ; edi = string s2 + cld +.compare: + cmpsb ; Compare two bytes + jne .done + cmp byte [esi-1], 0 ; End of string? + je .done + dec ecx ; Length limit reached? + jne .compare +.done: + seta al ; al = (s1 > s2) + setb ah ; ah = (s1 < s2) + sub al, ah + movsx eax, al ; eax = (s1 > s2) - (s1 < s2), i.e. -1, 0, 1 + pop edi + pop esi + ret +endp + +align 4 +proc GetPr stdcall, exp:dword, sz_name:dword + mov edx, [exp] +.next: + push edx + stdcall strncmp, edx, [sz_name], 16 + pop edx + test eax, eax + jz .ok + mov edx, [edx-4] + test edx, edx + jnz .next + mov eax,edx + ret +.ok: + mov eax, [edx-8] + ret +endp + +AHEADER 0 ,'GETPR',cfa_GETPR + JMP GetPr + + + ORIG: + + MOV EBP,RPP ;initialize RP + CLD ;ESI gets incremented + finit + call draw_window + call calc_lines + XCHG ESP,EBP + CALL amain +BYE: mcall -1 + + + ULAST: ; DD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + draw_cursor: + + draw_window: + pusha + mcall 12,1 + mov [fRed],ebx + mcall 0, <0,FW_WIDTH>, <0,FW_HEIGHT>, 0x03000000, 0x805080D0, 0x005080D0 + mcall 4, <8,8>, 0x10DDEEFF, header, header.size + + mcall 9,pinfo,-1 + mov eax,[pinfo.x_size] + cdq + sub eax,20 + mov ebx,6 + div ebx + mov [pinfo.x_start],eax + + mov eax,[pinfo.y_size] + cdq + sub eax,40 + mov ebx,ROWH + div ebx + + mov [pinfo.y_start],eax + call erase_screen + mcall 12, 2 +if ~ SYSTEM eq EMUL + mcall 67,-1,-1,FW_WIDTH,FW_HEIGHT +end if + popa + ret + + lsz header,\ + ru,'Форт для MenuetOS (SPF)',\ + en,'EXAMPLE APPLICATION',\ + fr,"L'exemplaire programme" + + erase_screen: + mov ebx,[pinfo.x_size] + add ebx,10 shl 16-20 + mov ecx,[pinfo.y_size] + add ecx,30 shl 16-35 + mcall 13,,,0;xff + ret + + +AHEADER 0,"CC_LINES",cfa_CC_LINES + calc_lines: + cmp dword[UPP+10*4],0 + je .ex + pusha + mov ebp,os_work + mov al,0xd + mov edi,screen_buf +; mov esi,[cursor] +; mov byte[esi],'_' +; inc [cursor] + .again: + mov [ebp],edi + mov esi,[cursor] + sub esi,edi + mov ecx,[pinfo.x_start] +; test ecx,ecx +; jnz .no0 +; inc ecx +; .no0: + cmp ecx,esi + jbe .ok + mov ecx,esi + .ok: + repne scasb + jecxz .nocrlf + cmp byte[edi],10 + jne .nocrlf + inc edi + .nocrlf: + mov ecx,edi + sub ecx,[ebp] + add ebp,8 + mov [ebp-4],ecx + cmp edi,[cursor] + jb .again + and dword[ebp],0 + ; dpd esi + mov eax,[pinfo.y_start] + shl eax,3 + sub ebp,eax + cmp ebp,os_work + jae .ok2 + mov ebp,os_work + .ok2: + cmp ebp,[last_ebp] + je .ok3 + mov [last_ebp],ebp + call erase_screen + .ok3: + mov ebx,10 shl 16 +30 + ; ud2 + .newl: + mcall 4,,0xffffff,[ebp],[ebp+4] + add ebp,8 + add ebx,ROWH + cmp dword[ebp],0 + jnz .newl + SUB ebx,ROWH + call set_cur + popa + .ex: + ret + + +set_cur: + MOV ecx,EBX + shl ecx,16 + add ecx,EBX + MOV EAX,[ebp+4-8] + add EAX,2 + imul EAX,6 + mov EBX,EAX + shl ebx,16 + add EBX,EAX + mov [lastcur],ecx + mov [lastcur+4],ebx + ret + + e_calc_lines: + cmp dword[UPP+10*4],0 + je e_.ex + pusha + mov ebp,os_work + mov al,0xd + mov edi,screen_buf +; mov esi,[cursor] +; mov byte[esi],'_' +; inc [cursor] + e_.again: + mov [ebp],edi + mov esi,[cursor] + sub esi,edi + mov ecx,[pinfo.x_start] +; test ecx,ecx +; jnz .no0 +; inc ecx +; .no0: + cmp ecx,esi + jbe e_.ok + mov ecx,esi + e_.ok: + repne scasb + jecxz e_.nocrlf + cmp byte[edi],10 + jne e_.nocrlf + inc edi + e_.nocrlf: + mov ecx,edi + sub ecx,[ebp] + add ebp,8 + mov [ebp-4],ecx + cmp edi,[cursor] + jb e_.again + and dword[ebp],0 + ; dpd esi + mov eax,[pinfo.y_start] + shl eax,3 + sub ebp,eax + cmp ebp,os_work + jae e_.ok2 + mov ebp,os_work + e_.ok2: + cmp ebp,[last_ebp] + je e_.ok3 + mov [last_ebp],ebp + cmp byte[edi],10 + jne e_.ok3 + + call erase_screen + e_.ok3: + mov ebx,10 shl 16+30 + ; ud2 + e_.newl: +; mcall 4,,0xffffff,[ebp],[ebp+4] + add ebp,8 + add ebx,ROWH + cmp dword[ebp],0 + jnz e_.newl + SUB ebx,ROWH + mcall 4,,0x00ffffff,[ebp-8],[ebp+4-8] + call set_cur + popa + e_.ex: + ret + + +AHEADER 0,"?KEY",cfa_queKEY + PUSH EDI + XCHG EBP,ESP + PUSH EAX + POP EBX + mov eax,10 + test ebx,ebx + jz QRX0 + inc eax + QRX0: + XOR ECX,ECX ;EBX=0 setup for false flag + mcall + cmp eax,1 + jne QRX_ + call draw_window + call calc_lines + QRX_: + cmp eax,3 + je BYE + cmp eax,2 + jne QRX3 + + mcall 2 + QRX1: MOVZX ECX,AH + QRX2: PUSH ECX ;save character + QRX_TRUE: + MOV ECX,TRUEE ;true flag + QRX3: PUSH ECX + POP eax + XCHG EBP,ESP + POP EDI + ret + + ; ?RX ( -- c T | F ) + ; Return input character and true, or a false if no input. + + +AHEADER 0,"EMIT_N",cfa_EMIT_N + + PUSH EDI + XCHG EBP,ESP + ;char in AL + CMP AL,0FFH ;0FFH is interpreted as input + JNZ TX2 ;do NOT allow input + MOV AL,32 ;change to blank + TX2: + mov ebx,[cursor] + mov [ebx],AL + inc [cursor] + + POP eax + XCHG EBP,ESP + POP EDI +RET + + + ;; Basic I/O + +cfa_AHEADER 0,'CL_CUR',CL_CUR + PUSH EAX + mcall 38,[lastcur+4],[lastcur],0 + POP EAX + RET + + cfa_AHEADER 0,'DR_CUR',DR_CUR + PUSH EAX + mcall 38,[lastcur+4],[lastcur],0x00FF00FF + POP EAX + RET + + +COLOR_ORDER equ MENUETOS +include 'gif_lite.inc' + +cfa_AHEADER 0,'READ_GIF',READ_GIF ;( gif_ptr, out_ptr -- result ) + push esi + push edi + push ebp + mov edi, eax + mov esi,[ebp] + mov eax,os_work + call ReadGIF + pop ebp + pop edi + pop esi + add ebp,4 + RET + + ;=============================================================== + cursor dd screen_buf + fRed dd 1 + last_ebp dd 0 + + include 'amain.asm' + + FINFO: + .mode dd 0 + dd 0 + .blk dd 1 + .buf dd 0 + .work dd os_work + .path: + if SYSTEM eq MEOS +; .path db 0 +; .path db '/HD/1/FORTH/AUTORUN.DAT',0 +; db '/RD/1/AUTOLOAD.F' + else + db '/RD/1/AUTOLOAD.F' +; db '/RD/1/EXAMPLE.F' +; db '/RD/1/PICTURE.F' +; db '/RD/1/AUTORUN.DAT' +; db '/HD/1/FORTH/AUTORUN.DAT' + end if + db 0 + .end_path: + + + rb 256-($-.path) + + +lastcur dd 0,0 + +I_END: + squote_buf rb 1024 + sys_v rd 6 + screen_buf: +; sc_end: + rb 4096 + pinfo process_information + os_work rb 16*1024 + + CTOP = $ ;next available memory in code dictionary + ;============================================================= \ No newline at end of file diff --git a/programs/develop/SPForth/meforth_samples/autoload.f b/programs/develop/SPForth/meforth_samples/autoload.f new file mode 100644 index 0000000000..3377e934b4 --- /dev/null +++ b/programs/develop/SPForth/meforth_samples/autoload.f @@ -0,0 +1,41 @@ +VARIABLE wd 256 ALLOT + +: setwd ( uaddr) + COUNT 1+ SWAP 1- SWAP wd SWAP CMOVE ; + +: _wd + $" /rd/1/" setwd ; _wd + +: "/ [CHAR] / ; + +: strcat ( uaddr1 uaddr2 -- uaddr1+uaddr2) + >R DUP COUNT ( ua1 a1 c1) + >R R@ ( ua1 a1 c1) + + OVER R> R@ SWAP >R ( ua1 ea1 ua1 ua1) + C@ R> + ( ua1 ea1 ua1 u+u2 ) + SWAP C! ( ua1 ea1 ) + R> COUNT ( ua1 ea1 a2 c2) + >R + SWAP R> CMOVE ; + +: add/ ( uaddr -- uaddr/) + DUP DUP COUNT SWAP DROP + C@ "/ = IF ELSE $" /" strcat THEN ; + +: cut/ ( uaddr -- uaddr w/o slash) + COUNT OVER SWAP + 1- ( ua1 lasta1) + DUP C@ "/ = IF 1- THEN .S + BEGIN 2DUP < WHILE 4 . DUP C@ "/ = IF OVER - OVER 1- C! 1- LEAVE ELSE 1- THEN + REPEAT ; + +: t $" cat" $" dog" strcat COUNT TYPE ; + +: makepath ( path normalizer: uaddr1 uaddr2 -- uaddr ) + DUP 1+ C@ [CHAR] / = IF SWAP DROP ELSE DUP strcat THEN + add/ ; + + +: pwd ( print working directory: -- ) + CR wd COUNT TYPE ; + +: cd ( change directory) + wd BL WORD makepath setwd ; diff --git a/programs/develop/SPForth/meforth_samples/autorun2.f b/programs/develop/SPForth/meforth_samples/autorun2.f new file mode 100644 index 0000000000..288ebeb31b --- /dev/null +++ b/programs/develop/SPForth/meforth_samples/autorun2.f @@ -0,0 +1,15 @@ +: >asciiz + 0 SWAP C! ; +: >path + finfo @ 20 + 0 finfo @ 8 + ! DUP >R SWAP DUP >R CMOVE R> R> SWAP >asciiz ; +: >param + OVER finfo @ 8 + ! >asciiz ; +: exec + 16 finfo @ ! finfo @ 58 sys2 ." started, code=" . CR 5 sys2 DROP ; +S" /RD/1/GRSCREEN" >path 99 exec +S" /RD/1/@RB" >path 30 exec +S" /RD/1/@SS" >path 30 exec +S" /RD/1/@PANEL" >path 30 exec +S" /RD/1/SETUP" >path S" BOOT" >param 30 exec +S" /RD/1/ICON2" >path S" BOOT" >param 10 exec +S" /RD/1/board" >path 25 exec +BYE diff --git a/programs/develop/SPForth/meforth_samples/example.f b/programs/develop/SPForth/meforth_samples/example.f new file mode 100644 index 0000000000..e9b1b96493 --- /dev/null +++ b/programs/develop/SPForth/meforth_samples/example.f @@ -0,0 +1,53 @@ +DECIMAL + S" /rd/1/menuet.f" INCLUDED + +: not_emit + emit_proc DUP @ NOT SWAP ! ; + +new_reg wnd_size + +CREATE Music $3090 , \ $90 C, $30 C, 0 C, + +: my_wnd + 12 ax 1 bx sysv DROP $805080D0 DUP $02AABBCC 200 50 << 200 DUP << 0 + sys6 2 bx sysv 2DROP + $10DDEEFF $" ПРИМЕР ПРОГРАММЫ" COUNT 8 DUP sys_print + 0 $" Нажмите любую клавишу" COUNT 8 30 sys_print + $6688DD 1 5 12 << 200 19 - 12 << 8 sys5 DROP ; + +: my_wnd_resize + 200 dx 50 si 67 ax -1 DUP bx cx sysv DROP ; + +: my_key + 2 sys1 8 RSHIFT DUP 96 = IF not_emit DROP ELSE Music DUP si 1+ C! + 55 DUP ax bx sysv DROP THEN ; + +: my_btn + 17 sys1 8 RSHIFT ." Pressed button #" DUP . CR 1 = IF BYE THEN ; + +CREATE handlers ' my_wnd , ' my_key , ' my_btn , + +VARIABLE hnd + +: msg_loop_console ( subs -- ) + CR DUP hnd ! @EXECUTE my_wnd_resize + 0 emit_proc ! + BEGIN + 10 sys1 ?DUP + IF + 1- + CELLS hnd @ + @EXECUTE + emit_proc @ + IF + WINDOW KEY 96 = + IF + not_emit hnd @ @EXECUTE my_wnd_resize + ELSE + EXIT + THEN + THEN + THEN + AGAIN ; + +: new_me ( new main loop) + handlers msg_loop_console ; diff --git a/programs/develop/SPForth/meforth_samples/locals.f b/programs/develop/SPForth/meforth_samples/locals.f new file mode 100644 index 0000000000..012b962b0e --- /dev/null +++ b/programs/develop/SPForth/meforth_samples/locals.f @@ -0,0 +1,34 @@ +( Из Баранова: + Стек данных как универсальное средство для передачи параметров и результатов +между форт-словами имеет неоспоримые преимущества. Вместе с тем внутри +определения он используется для промежуточных вычислений и размещения значений, +которые в них участвуют. Это вызывает определенные трудности для доступа к +такому локальному значению, поскольку его положение относительно вершины стека +постоянно меняется. + Для упрощения работы желательно закрепить за локальным объектами внутри +определения некоторые постоянные имена, через которые и осуществлять доступ к +ним. + Имеющийся в языке механизм описания переменных в данном случае не подходит, +поскольку создает глобальные имена, тогда как требуется именовать локальные +объекты, учитывая при этом возможность рекурсивных вызовов. Поставленную задачу +решает включение в работу дополнительного стека, отличного от стека данных. +Локальные значения размещаются в этом стеке при входе в определение и убираются +из него при выходе. + На все время исполнения определения их положение относительно вершины стека +остается постоянным, это позволяет организовать очень простой доступ к таким +значениям. + Простейшая надстройка над языком Форт, которая позволяет работать с локальными +переменными, выглядит так:) + + +100 ALLOT HERE CONSTANT LP0 ( НАЧАЛО ЛОК.СТЕКА) +VARIABLE LP ( ТЕКУЩАЯ ВЕРШИНА ЛОКАЛЬНОГО СТЕКА) +: INITLP ( ->) LP0 LP ! ; INITLP +: LOC ( N:СЧЕТЧИК->) 1+ CELLS LP @ OVER - DUP LP ! ! ; +: UNLOC ( ->) LP @ @ LP +! ; +: @@ ( N:СМЕЩ->) CREATE , DOES> ( PFA->A) @ CELLS LP @ + @ ; +: !! ( N:СМЕЩ->) CREATE , DOES> ( A,PFA->) @ CELLS LP @ + ! ; + +1 @@ @1 2 @@ @2 3 @@ @3 4 @@ @4 5 @@ @5 ( И Т.Д.) + +1 !! !1 2 !! !2 3 !! !3 4 !! !4 5 !! !5 ( И Т.Д.) diff --git a/programs/develop/SPForth/meforth_samples/menuet.f b/programs/develop/SPForth/meforth_samples/menuet.f new file mode 100644 index 0000000000..8fe40a92e9 --- /dev/null +++ b/programs/develop/SPForth/meforth_samples/menuet.f @@ -0,0 +1,27 @@ +\ S" /rd/1/1st.4th" INCLUDED + S" /rd/1/locals.f" INCLUDED + +\ : sys_wnd ( border, header, workarea, y, x -- ) +\ 1 12 sys2 DROP 0 sys6 2 12 sys2 2DROP ; + +\ : thread ( stack, entry -- ) +\ 1 51 sys4 DROP ; + +: >regs + reg_struc ! ; + +: new_reg + CREATE 6 CELLS ALLOT LAST @ NAME> 9 + >regs ; + +: ax reg_struc @ ! ; +: bx reg_struc @ 1 CELLS + ! ; +: cx reg_struc @ 2 CELLS + ! ; +: dx reg_struc @ 3 CELLS + ! ; +: si reg_struc @ 4 CELLS + ! ; +: di reg_struc @ 5 CELLS + ! ; + +: << ( x,y -- x<<16+y ) + SWAP 16 LSHIFT + ; + +: sys_print ( color, stra, u, x, y -- ) + << >R SWAP ROT R> 4 sys5 DROP ; diff --git a/programs/develop/SPForth/meforth_samples/picture.f b/programs/develop/SPForth/meforth_samples/picture.f new file mode 100644 index 0000000000..b18d55b5b4 --- /dev/null +++ b/programs/develop/SPForth/meforth_samples/picture.f @@ -0,0 +1,109 @@ +DECIMAL + S" /rd/1/menuet.f" INCLUDED + +: not_emit + emit_proc DUP @ NOT SWAP ! ; + +new_reg wnd_size + +CREATE Music $3090 , \ $90 C, $30 C, 0 C, + +73 CONSTANT img.width +22 CONSTANT img.height +CREATE raw img.width img.height * 3 * 16 + ALLOT + +: my_wnd + 12 ax 1 bx sysv DROP $805080D0 DUP $02AABBCC 200 150 << 200 DUP << 0 + sys6 2 bx sysv 2DROP + $10DDEEFF $" ПРИМЕР ПРОГРАММЫ" COUNT 8 DUP sys_print + 0 $" Нажмите любую клавишу" COUNT 8 30 sys_print + $6688DD 1 5 12 << 200 19 - 12 << 8 sys5 DROP + 30 DUP << img.width img.height << raw 12 + 7 sys4 ; + +: my_wnd_resize + 200 dx 50 si 67 ax -1 DUP bx cx sysv DROP ; + +: my_key + 2 sys1 8 RSHIFT DUP 96 = IF not_emit DROP ELSE Music DUP si 1+ C! + 55 DUP ax bx sysv DROP THEN ; + +: my_btn + 17 sys1 8 RSHIFT ." Pressed button #" DUP . CR 1 = IF BYE THEN ; + +CREATE handlers ' my_wnd , ' my_key , ' my_btn , + +VARIABLE hnd + +: msg_loop_console ( subs -- ) + CR DUP hnd ! @EXECUTE my_wnd_resize + 0 emit_proc ! + BEGIN + 10 sys1 ?DUP + IF + 1- + CELLS hnd @ + @EXECUTE + emit_proc @ + IF + WINDOW KEY 96 = + IF + not_emit hnd @ @EXECUTE my_wnd_resize + ELSE + EXIT + THEN + THEN + THEN + AGAIN ; + +CREATE gif 600 ALLOT + + +: new_me ( new main loop) + gif DUP $" /rd/1/Menu.gif" COUNT READ 2DROP + gif raw READ_GIF . + ; + +new_me handlers msg_loop_console WORDS + +ABORT + + + : ENDOF ( orig1 #of -- orig2 #of ) + >R ( яхЁхьхёЄшЄ№ ёю ёЄхър т ёыєўрх, хёыш ) + ( ёЄхъ яюЄюър єяЁртыхэш  ¤Єю ёЄхъ фрээ√ї. ) + POSTPONE ELSE + R> ( ь√ фюыцэ√ ЄхяхЁ№ тхЁэєЄ№ ёўхЄўшъ эрчрф ) + ; IMMEDIATE + + : ENDCASE ( orig1..orign #of -- ) + + POSTPONE DROP ( єфрышЄ№ case ярЁрьхЄЁ ) + 0 ?DO + POSTPONE THEN + LOOP + ; IMMEDIATE + +[THEN] + + : SS2 ( N ---> S:╤╙╠╠└ ╩┬└─╨└╥╬┬ ╬╥ 1 ─╬ N) + 0 SWAP ( 0,N S[0]=0 ) + 1+ 1 ( S[0],N+1,1 ) + DO I ( S[I-1],I ) + DUP * + ( S[I] S[I]=S[I-1]+I*I) + LOOP ; ( S[N] ) + + + 5 SS2 . CR + +: test 10 0 ?DO I . LEAVE LOOP 4 ; +test + + : priem ( N:═╬╠┼╨ ─═▀->) CASE + 3 OF ." nepriemn" ENDOF + + 1 OF ." priemn" ENDOF + + 6 OF ." holiday" ENDOF + + CR . ." - day #?" ABORT + ( ENDCASE ) ." day" ; + diff --git a/programs/develop/SPForth/proc32.inc b/programs/develop/SPForth/proc32.inc new file mode 100644 index 0000000000..98a1bd3342 --- /dev/null +++ b/programs/develop/SPForth/proc32.inc @@ -0,0 +1,268 @@ + +; Macroinstructions for defining and calling procedures + +macro stdcall proc,[arg] ; directly call STDCALL procedure + { common + if ~ arg eq + reverse + pushd arg + common + end if + call proc } + +macro invoke proc,[arg] ; indirectly call STDCALL procedure + { common + if ~ arg eq + reverse + pushd arg + common + end if + call [proc] } + +macro ccall proc,[arg] ; directly call CDECL procedure + { common + size@ccall = 0 + if ~ arg eq + reverse + pushd arg + size@ccall = size@ccall+4 + common + end if + call proc + if size@ccall + add esp,size@ccall + end if } + +macro cinvoke proc,[arg] ; indirectly call CDECL procedure + { common + size@ccall = 0 + if ~ arg eq + reverse + pushd arg + size@ccall = size@ccall+4 + common + end if + call [proc] + if size@ccall + add esp,size@ccall + end if } + +macro proc [args] ; define procedure + { common + match name params, args> + \{ define@proc name, \{ prologue name,flag,parmbytes,localbytes,reglist \} + macro locals + \{ virtual at ebp-localbytes+current + macro label . \\{ deflocal@proc .,:, \\} + struc db [val] \\{ \common deflocal@proc .,db,val \\} + struc dw [val] \\{ \common deflocal@proc .,dw,val \\} + struc dp [val] \\{ \common deflocal@proc .,dp,val \\} + struc dd [val] \\{ \common deflocal@proc .,dd,val \\} + struc dt [val] \\{ \common deflocal@proc .,dt,val \\} + struc dq [val] \\{ \common deflocal@proc .,dq,val \\} + struc rb cnt \\{ deflocal@proc .,rb cnt, \\} + struc rw cnt \\{ deflocal@proc .,rw cnt, \\} + struc rp cnt \\{ deflocal@proc .,rp cnt, \\} + struc rd cnt \\{ deflocal@proc .,rd cnt, \\} + struc rt cnt \\{ deflocal@proc .,rt cnt, \\} + struc rq cnt \\{ deflocal@proc .,rq cnt, \\} \} + macro endl + \{ purge label + restruc db,dw,dp,dd,dt,dq + restruc rb,rw,rp,rd,rt,rq + restruc byte,word,dword,pword,tword,qword + current = $-(ebp-localbytes) + end virtual \} + macro ret operand + \{ match any, operand \\{ retn operand \\} + match , operand \\{ match epilogue:reglist, epilogue@proc: + \\\{ epilogue name,flag,parmbytes,localbytes,reglist \\\} \\} \} + macro finish@proc \{ localbytes = (((current-1) shr 2)+1) shl 2 + end if \} } + +macro defargs@proc [arg] + { common + if ~ arg eq + forward + local ..arg,current@arg + match argname:type, arg + \{ current@arg equ argname + label ..arg type + argname equ ..arg + if dqword eq type + dd ?,?,?,? + else if tbyte eq type + dd ?,?,? + else if qword eq type | pword eq type + dd ?,? + else + dd ? + end if \} + match =current@arg,current@arg + \{ current@arg equ arg + arg equ ..arg + ..arg dd ? \} + common + args@proc equ current@arg + forward + restore current@arg + common + end if } + +macro deflocal@proc name,def,[val] + { common + match vars, all@vars \{ all@vars equ all@vars, \} + all@vars equ all@vars name + forward + local ..var,..tmp + ..var def val + match =?, val \{ ..tmp equ \} + match any =dup (=?), val \{ ..tmp equ \} + match tmp : value, ..tmp : val + \{ tmp: end virtual + initlocal@proc ..var,def value + virtual at tmp\} + common + match first rest, ..var, \{ name equ first \} } + +macro initlocal@proc name,def + { virtual at name + def + size@initlocal = $ - name + end virtual + position@initlocal = 0 + while size@initlocal > position@initlocal + virtual at name + def + if size@initlocal - position@initlocal < 2 + current@initlocal = 1 + load byte@initlocal byte from name+position@initlocal + else if size@initlocal - position@initlocal < 4 + current@initlocal = 2 + load word@initlocal word from name+position@initlocal + else + current@initlocal = 4 + load dword@initlocal dword from name+position@initlocal + end if + end virtual + if current@initlocal = 1 + mov byte [name+position@initlocal],byte@initlocal + else if current@initlocal = 2 + mov word [name+position@initlocal],word@initlocal + else + mov dword [name+position@initlocal],dword@initlocal + end if + position@initlocal = position@initlocal + current@initlocal + end while } + +macro endp + { purge ret,locals,endl + finish@proc + purge finish@proc + restore regs@proc + match all,args@proc \{ restore all \} + restore args@proc + match all,all@vars \{ restore all \} } + +macro local [var] + { common + locals + forward done@local equ + match varname[count]:vartype, var + \{ match =BYTE, vartype \\{ varname rb count + restore done@local \\} + match =WORD, vartype \\{ varname rw count + restore done@local \\} + match =DWORD, vartype \\{ varname rd count + restore done@local \\} + match =PWORD, vartype \\{ varname rp count + restore done@local \\} + match =QWORD, vartype \\{ varname rq count + restore done@local \\} + match =TBYTE, vartype \\{ varname rt count + restore done@local \\} + match =DQWORD, vartype \\{ label varname dqword + rq count+count + restore done@local \\} + match , done@local \\{ virtual + varname vartype + end virtual + rb count*sizeof.\#vartype + restore done@local \\} \} + match :varname:vartype, done@local:var + \{ match =BYTE, vartype \\{ varname db ? + restore done@local \\} + match =WORD, vartype \\{ varname dw ? + restore done@local \\} + match =DWORD, vartype \\{ varname dd ? + restore done@local \\} + match =PWORD, vartype \\{ varname dp ? + restore done@local \\} + match =QWORD, vartype \\{ varname dq ? + restore done@local \\} + match =TBYTE, vartype \\{ varname dt ? + restore done@local \\} + match =DQWORD, vartype \\{ label varname dqword + dq ?,? + restore done@local \\} + match , done@local \\{ varname vartype + restore done@local \\} \} + match ,done@local + \{ var + restore done@local \} + common + endl } diff --git a/programs/develop/SPForth/src/KOL/spf_kol_con_io.f b/programs/develop/SPForth/src/KOL/spf_kol_con_io.f new file mode 100644 index 0000000000..cf8e350b73 --- /dev/null +++ b/programs/develop/SPForth/src/KOL/spf_kol_con_io.f @@ -0,0 +1,91 @@ +( Консольный ввод-вывод. +) +: NMNM 0 IF THEN ; +: ACCEPT0 ( c-addr +n1 -- +n2 ) \ 94 +\ Ввести строку максимальной длины до +n1 символов. +\ Исключительная ситуация возникает, если +n1 0 или больше 32767. +\ Отображать символы по мере ввода. +\ Ввод прерывается, когда получен символ "конец строки". +\ Ничего не добавляется в строку. +\ +n2 - длина строки, записанной по адресу c-addr. + OVER + 1- OVER \ SA EA A + NMNM + BEGIN KEY \ SA EA A C +\ ." {" DUP H. ." }" + DUP 10 = OVER 13 = OR 0= + WHILE + DUP 0x1B = IF DROP DUP C@ EMIT ELSE + DUP 8 = IF EMIT BL EMIT 8 EMIT + 2- >R OVER 1- R> UMAX ELSE + DUP 9 = IF DROP DUP 8 BLANK + >R OVER R> \ SA EA SA A + SWAP OVER - \ SA EA SA A-SA + 8 / 1+ 8 * + ELSE DUP EMIT OVER C! + THEN THEN + THEN 1+ OVER UMIN \ SA EA A + REPEAT \ HEX CR DEPTH .SN + \ SA EA A C + DROP NIP - NEGATE ; + +VECT ACCEPT + +' ACCEPT0 TO ACCEPT + +: TYPE_M ( c-addr1 u --- ) +\ Output the string starting at c-addr and length u to the terminal. + OVER + SWAP BEGIN 2DUP - WHILE DUP C@ EMIT_N CHAR+ REPEAT + CC_LINES + 2DROP + + ; + +: _TYPE ( c-addr1 u --- ) +\ Output the string starting at c-addr and length u to the terminal. + 2DUP SCR_BUF AT-XY? 80 * + + SWAP CMOVE + SCR_TYPE + ; + +\ : ZTYPE ( ADDR -- ) +\ DUP >R LZTYPE DROP RDROP ; + +: _CR ( -- ) \ 94 +\ Перевод строки. + 13 EMIT +; + +VECT CR ' _CR TO CR + +: _EMIT ( x -- ) \ 94 +\ Если x - изображаемый символ, вывести его на дисплей. +\ DUP SCR_BUF AT-XY? 80 * + + C! + DUP 0xD = IF DROP SCR_CR EXIT THEN + DUP 0x8 = IF DROP 0x00800000 + &AT-XY W@ 0xD * 0x15 + 16 LSHIFT 0xB OR + &AT-XY 2+ W@ 0x6 * 16 LSHIFT 6 OR + 13 SYS4 DROP + AT-XY? >R 1- R> AT-XY + EXIT THEN + >R RP@ 1 _TYPE RDROP +; + + +: SWITCH_CHAR ( c1 -- c2 ) + DUP [CHAR] a [CHAR] z 1+ WITHIN + OVER [CHAR] A [CHAR] Z 1+ WITHIN OR + IF 32 XOR THEN +; + + +: KEY_M DR_CUR BEGIN 0 ?KEY UNTIL CL_CUR SWITCH_CHAR ; + +: _KEY + CORSOR_DROW + BEGIN KEY? UNTIL &KEY C@ &KEY 0! SWITCH_CHAR + ; + +: PAGE + draw_window + SCR_BUF SCR_WIDTH SCR_HEIGHT * BLANK + 0 0 AT-XY + DRAW_LINS +; diff --git a/programs/develop/SPForth/src/KOL/spf_kol_const.f b/programs/develop/SPForth/src/KOL/spf_kol_const.f new file mode 100644 index 0000000000..1fbf57617c --- /dev/null +++ b/programs/develop/SPForth/src/KOL/spf_kol_const.f @@ -0,0 +1,21 @@ +( Windows-константы, необходимые при в/в. +) + + +0x80000000 CONSTANT R/O ( -- fam ) \ 94 FILE +\ fam - определенное реализацией значение для выбора метода доступа +\ к файлу "только для чтения" + +0x40000000 CONSTANT W/O ( -- fam ) \ 94 FILE +\ fam - определенное реализацией значение для выбора метода доступа +\ к файлу "только для записи" + + +0xC0000000 CONSTANT R/W ( -- fam ) \ 94 FILE +\ fam - определенное реализацией значение для выбора метода доступа +\ к файлу "чтение/запись" + +DECIMAL + + +\ 7 CONSTANT ZZZ diff --git a/programs/develop/SPForth/src/KOL/spf_kol_io.f b/programs/develop/SPForth/src/KOL/spf_kol_io.f new file mode 100644 index 0000000000..63437e7c69 --- /dev/null +++ b/programs/develop/SPForth/src/KOL/spf_kol_io.f @@ -0,0 +1,139 @@ +( Файловый ввод-вывод. +) + +CREATE LT 0xD C, 0xA C, 0xD C, 0xA C, \ line terminator +CREATE LTL 2 , \ line terminator length + + +: DOS-LINES ( -- ) + 0xA0D LT ! 2 LTL ! +; +: UNIX-LINES ( -- ) + 0xA0A LT ! 1 LTL ! +; + + +: READ-FILE ( c-addr u1 fileid -- u2 ior ) \ 94 FILE +\ Прочесть u1 символов в c-addr из текущей позиции файла, +\ идентифицируемого fileid. +\ Если u1 символов прочитано без исключений, ior ноль и u2 равен u1. +\ Если конец файла достигнут до прочтения u1 символов, ior ноль +\ и u2 - количество реально прочитанных символов. +\ Если операция производится когда значение, возвращаемое +\ FILE-POSITION равно значению, возвращаемому FILE-SIZE для файла +\ идентифицируемого fileid, ior и u2 нули. +\ Если возникла исключительная ситуация, то ior - определенный реализацией +\ код результата ввода/вывода, и u2 - количество нормально переданных в +\ c-addr символов. +\ Неопределенная ситуация возникает, если операция выполняется, когда +\ значение, возвращаемое FILE-POSITION больше чем значение, возвращаемое +\ FILE-SIZE для файла, идентифицируемого fileid, или требуемая операция +\ пытается прочесть незаписанную часть файла. +\ После завершения операции FILE-POSITION возвратит следующую позицию +\ в файле после последнего прочитанного символа. + DUP >R .CODE 0! + R@ .SIZE ! + R@ .DATA ! + R@ 70 SYS2 + EBX@ SWAP + DUP 6 = IF DROP 0 THEN + DUP 0= + IF R@ .FIRST D@ + R@ .SIZE @ 0 D+ + R@ .FIRST D! + THEN + RDROP +; + +22 CONSTANT MAX_OPEN_FILES + +CREATE FILE_STR_BUF FILE_STR 1+ MAX_OPEN_FILES * ALLOT + +: FALLOC ( -- 0|fid ) + FILE_STR_BUF FILE_STR MAX_OPEN_FILES * BOUNDS + BEGIN DUP .NAME @ 0= + IF NIP EXIT THEN + FILE_STR + 2DUP U< + UNTIL 2DROP 0 +; + +: OPEN-FILE ( c-addr u fam -- fileid ior ) +\ Открыть файл с именем, заданным строкой c-addr u, с методом доступа fam. +\ Смысл значения fam определен реализацией. +\ Если файл успешно открыт, ior ноль, fileid его идентификатор, и файл +\ позиционирован на начало. +\ Иначе ior - определенный реализацией код результата ввода/вывода, +\ и fileid неопределен. + DROP +\ FILE_STR + FALLOC DUP + IF + >R + R@ FILE_STR ERASE + R@ .NAME SWAP MOVE + R> 0 EXIT + THEN -1 +; + +: CLOSE-FILE ( fileid -- ior ) \ 94 FILE +\ Закрыть файл, заданный fileid. + .NAME 0! 0 +; + + +USER _fp1 +USER _fp2 +USER _addr + + +: READ-LINE ( c-addr u1 fileid -- u2 flag ior ) \ 94 FILE +\ Прочесть следующую строку из файла, заданного fileid, в память +\ по адресу c-addr. Читается не больше u1 символов. До двух +\ определенных реализацией символов "конец строки" могут быть +\ прочитаны в память за концом строки, но не включены в счетчик u2. +\ Буфер строки c-addr должен иметь размер как минимум u1+2 символа. +\ Если операция успешна, flag "истина" и ior ноль. Если конец строки +\ получен до того как прочитаны u1 символов, то u2 - число реально +\ прочитанных символов (0<=u2<=u1), не считая символов "конец строки". +\ Когда u1=u2 конец строки уже получен. +\ Если операция производится, когда значение, возвращаемое +\ FILE-POSITION равно значению, возвращаемому FILE-SIZE для файла, +\ идентифицируемого fileid, flag "ложь", ior ноль, и u2 ноль. +\ Если ior не ноль, то произошла исключительная ситуация и ior - +\ определенный реализацией код результата ввода-вывода. +\ Неопределенная ситуация возникает, если операция выполняется, когда +\ значение, возвращаемое FILE-POSITION больше чем значение, возвращаемое +\ FILE-SIZE для файла, идентифицируемого fileid, или требуемая операция +\ пытается прочесть незаписанную часть файла. +\ После завершения операции FILE-POSITION возвратит следующую позицию +\ в файле после последнего прочитанного символа. + DUP >R + FILE-POSITION IF 2DROP 0 0 THEN _fp1 ! _fp2 ! + 1+ + OVER _addr ! + + R@ READ-FILE ?DUP IF NIP RDROP 0 0 ROT EXIT THEN + + DUP >R 0= IF RDROP RDROP 0 0 0 EXIT THEN \ были в конце файла + _addr @ R@ LT 1+ 1 SEARCH + IF \ найден разделитель строк + DROP _addr @ - + DUP 1+ S>D _fp2 @ _fp1 @ D+ RDROP R> REPOSITION-FILE DROP + DUP _addr @ + 1- C@ 0xD = IF 1- THEN + ELSE \ не найден разделитель строк + 2DROP + R> RDROP \ если строка прочитана не полностью - будет разрезана + THEN + TRUE 0 +; + +: FILE-POSITION ( fileid -- ud ior ) \ 94 FILE +\ ud - текущая позиция в файле, идентифицируемом fileid. + .FIRST D@ 0 +; + +: REPOSITION-FILE ( ud fileid -- ior ) \ 94 FILE +\ Перепозиционировать файл, идентифицируемый fileid, на ud. + .FIRST D! 0 +; + diff --git a/programs/develop/SPForth/src/KOL/spf_kol_memory.f b/programs/develop/SPForth/src/KOL/spf_kol_memory.f new file mode 100644 index 0000000000..feb5faf33e --- /dev/null +++ b/programs/develop/SPForth/src/KOL/spf_kol_memory.f @@ -0,0 +1,66 @@ +( Управление памятью. + Windows-зависимые слова. + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + Ревизия - сентябрь 1999 +) +\ 94 MEMORY + +USER THREAD-HEAP \ хэндл хипа текущего потока + +\ VARIABLE USER-OFFS \ смещение в области данных потока, + \ где создаются новые переменные +: ERR +\ IF 0 ELSE DUP GetLastError THEN +; + +: USER-ALLOT ( n -- ) + USER-OFFS +! + +\ выровняем в USER-CREATE ~day +\ USER-OFFS @ + \ с начала прибавляем +\ CELL 1- + [ CELL NEGATE ] LITERAL AND \ потом выравниваем +\ USER-OFFS ! +; + +: USER-HERE ( -- n ) + USER-OFFS @ +; + +: ALLOCATE ( u -- a-addr ior ) \ 94 MEMORY +\ Распределить u байт непрерывного пространства данных. Указатель пространства +\ данных не изменяется этой операцией. Первоначальное содержимое выделенного +\ участка памяти неопределено. +\ Если распределение успешно, a-addr - выровненный адрес начала распределенной +\ области и ior ноль. +\ Если операция не прошла, a-addr не представляет правильный адрес и ior - +\ зависящий от реализации код ввода-вывода. + 5 68 SYS3 0 ; + +: FREE ( a-addr -- ior ) \ 94 MEMORY +\ Вернуть непрерывную область пространства данных, индицируемую a-addr, системе +\ для дальнейшего распределения. a-addr должен индицировать область +\ пространства данных, которая ранее была получена по ALLOCATE или RESIZE. +\ Указатель пространства данных не изменяется данной операцией. +\ Если операция успешна, ior ноль. Если операция не прошла, ior - зависящий от +\ реализации код ввода-вывода. + 5 68 SYS3 DROP 0 ; + +: RESIZE ( a-addr1 u -- a-addr2 ior ) \ 94 MEMORY +\ Изменить распределение непрерывного пространства данных, начинающегося с +\ адреса a-addr1, ранее распределенного по ALLOCATE или RESIZE, на u байт. +\ u может быть больше или меньше, чем текущий размер области. +\ Указатель пространства данных не изменяется данной операцией. +\ Если операция успешна, a-addr2 - выровненный адрес начала u байт +\ распределенной памяти и ior ноль. a-addr2 может, но не должен, быть тем же +\ самым, что и a-addr1. Если они неодинаковы, значения, содержащиеся в области +\ a-addr1, копируются в a-addr2 в количестве минимального из размеров этих +\ двух областей. Если они одинаковы, значения, содержащиеся в области, +\ сохраняются до минимального из u или первоначального размера. Если a-addr2 не +\ тот же, что и a-addr1, область памяти по a-addr1 возвращается системе +\ согласно операции FREE. +\ Если операция не прошла, a-addr2 равен a-addr1, область памяти a-addr1 не +\ изменяется, и ior - зависящий от реализации код ввода-вывода. + THROW ABORT" RESIZE is't in system" +; + + diff --git a/programs/develop/SPForth/src/KOL/spf_kol_module.f b/programs/develop/SPForth/src/KOL/spf_kol_module.f new file mode 100644 index 0000000000..22ec3287d7 --- /dev/null +++ b/programs/develop/SPForth/src/KOL/spf_kol_module.f @@ -0,0 +1,40 @@ + +: is_path_delimiter ( c -- flag ) + DUP [CHAR] \ = SWAP [CHAR] / = OR +; + +: CUT-PATH ( a u -- a u1 ) +\ шч ёЄЁюъш "path\name" т√фхышЄ№ ёЄЁюъє "path\" + OVER + + BEGIN 2DUP <> WHILE DUP C@ is_path_delimiter 0= WHILE 1- REPEAT 1+ THEN + \ DUP 0! \ ~ruv (to anfilat): эх ф╬ыцэю ЄєЄ чрЄшЁрЄ№ яюфрээ√щ сєЇхЁ! + OVER - +; + +: ModuleName ( -- addr u ) + ABORT +; + +: ModuleDirName ( -- addr u ) + ModuleName CUT-PATH +; + +: +ModuleDirName ( addr u -- addr2 u2 ) + 2>R + ModuleDirName 2DUP + + 2R> DUP >R ROT SWAP 1+ MOVE + R> + +; + +: +LibraryDirName ( addr u -- addr2 u2 ) +\ ─юсртшЄ№ addr u ъ яюыэ√щ_яєЄ№_яЁшыюцхэш +devel\ + 2>R + ModuleDirName 2DUP + + S" devel\" ROT SWAP MOVE + 6 + 2DUP + + 2R> DUP >R ROT SWAP 1+ MOVE + R> + +; +: SOURCE-NAME ( -- a u ) + CURFILE @ DUP IF ASCIIZ> ELSE 0 THEN +; diff --git a/programs/develop/SPForth/src/KOL/spf_kol_module.f_L b/programs/develop/SPForth/src/KOL/spf_kol_module.f_L new file mode 100644 index 0000000000..f81ec55dae --- /dev/null +++ b/programs/develop/SPForth/src/KOL/spf_kol_module.f_L @@ -0,0 +1,159 @@ +ZZ=D4 +: is_path_delimiter ( c -- flag ) + +5A380F 30 38 5A 00 00 11 69 73 5F 70 61 74 68 5F 64 65 08Z...is_path_de +5A381F 6C 69 6D 69 74 65 72 75 37 5A 00 00 00 00 00 00 limiteru7Z...... +5A382F 00 . + + DUP [CHAR] \ = SWAP [CHAR] / = OR + +5A3830 89 45 FC 89 45 F8 B8 5C 00 00 00 33 45 F8 83 E8 ЙE№ЙE°╕\...3E°Гш +5A3840 01 1B C0 8B 55 FC 89 45 FC 89 55 F8 B8 2F 00 00 ..└ЛU№ЙE№ЙU°╕/.. +5A3850 00 33 45 F8 83 E8 01 1B C0 0B 45 FC .3E°Гш..└.E№ + +; + +5A385C C3 ├ + + +: CUT-PATH ( a u -- a u1 ) + +5A385D 70 38 5A 00 00 08 43 55 54 2D 50 41 54 48 14 38 p8Z...CUT-PATH.8 +5A386D 5A 00 00 Z.. + +\ шч ёЄЁюъш "path\name" т√фхышЄ№ ёЄЁюъє "path\" + OVER + + +5A3870 89 45 FC 8B 45 00 03 45 FC ЙE№ЛE..E№ + + BEGIN 2DUP <> WHILE DUP C@ is_path_delimiter 0= WHILE 1- REPEAT 1+ THEN + +5A3879 90 90 90 8B 55 00 89 45 FC 89 55 F8 33 45 F8 8B РРРЛU.ЙE№ЙU°3E°Л +5A3889 45 FC 0F 84 24 00 00 00 89 45 FC 0F B6 00 8D 6D E№.Д$...ЙE№.╢.Нm +5A3899 FC E8 91 FF FF FF 0B C0 8B 45 00 8D 6D 04 0F 85 №шС   .└ЛE.Нm..Е +5A38A9 05 00 00 00 8D 40 FF EB CA 8D 40 01 ....Н@ ы╩Н@. + + \ DUP 0! \ ~ruv (to anfilat): эх ф╬ыцэю ЄєЄ чрЄшЁрЄ№ яюфрээ√щ сєЇхЁ! + OVER - + +5A38B5 89 45 FC 8B 45 00 F7 D8 03 45 FC ЙE№ЛE.ў╪.E№ + +; + +5A38C0 C3 ├ + + +: ModuleName ( -- addr u ) + +5A38C1 E0 38 5A 00 00 0A 4D 6F 64 75 6C 65 4E 61 6D 65 р8Z...ModuleName +5A38D1 62 38 5A 00 00 00 00 00 00 00 00 00 00 00 00 b8Z............ + + ABORT + +5A38E0 E8 7B F6 FF FF ш{Ў   + +; + +5A38E5 C3 ├ + + +: ModuleDirName ( -- addr u ) + +5A38E6 00 39 5A 00 00 0D 4D 6F 64 75 6C 65 44 69 72 4E .9Z...ModuleDirN +5A38F6 61 6D 65 C6 38 5A 00 00 00 00 ame╞8Z.... + + ModuleName CUT-PATH + +5A3900 E8 DB FF FF FF E8 66 FF FF FF ш█   шf    + +; + +5A390A C3 ├ + + +: +ModuleDirName ( addr u -- addr2 u2 ) + +5A390B 30 39 5A 00 00 0E 2B 4D 6F 64 75 6C 65 44 69 72 09Z...+ModuleDir +5A391B 4E 61 6D 65 EB 38 5A 00 00 00 00 00 00 00 00 00 Nameы8Z......... +5A392B 00 00 00 00 00 ..... + + 2>R + +5A3930 E8 CB 94 FF FF ш╦Ф   + + ModuleDirName 2DUP + + +5A3935 E8 C6 FF FF FF 8B 55 00 89 45 FC 89 55 F8 03 45 ш╞   ЛU.ЙE№ЙU°.E +5A3945 F8 8D 6D FC °Нm№ + + 2R> DUP >R ROT SWAP 1+ MOVE + +5A3949 E8 D2 94 FF FF 89 45 FC 50 8B 45 FC 8B 55 00 89 ш╥Ф  ЙE№PЛE№ЛU.Й +5A3959 45 00 8B 45 04 89 55 04 8B 55 00 89 45 00 8B C2 E.ЛE.ЙU.ЛU.ЙE.Л┬ +5A3969 8D 40 01 E8 AF A4 FF FF Н@.шпд   + + R> + + +5A3971 89 45 FC 58 03 45 FC ЙE№X.E№ + +; + +5A3978 C3 ├ + + +: +LibraryDirName ( addr u -- addr2 u2 ) + +5A3979 A0 39 5A 00 00 0F 2B 4C 69 62 72 61 72 79 44 69 а9Z...+LibraryDi +5A3989 72 4E 61 6D 65 10 39 5A 00 00 00 00 00 00 00 00 rName.9Z........ +5A3999 00 00 00 00 00 00 00 ....... + +\ ─юсртшЄ№ addr u ъ яюыэ√щ_яєЄ№_яЁшыюцхэш +devel\ + 2>R + +5A39A0 E8 5B 94 FF FF ш[Ф   + + ModuleDirName 2DUP + + +5A39A5 E8 56 FF FF FF 8B 55 00 89 45 FC 89 55 F8 03 45 шV   ЛU.ЙE№ЙU°.E +5A39B5 F8 8D 6D FC °Нm№ + + S" devel\" ROT SWAP MOVE + +5A39B9 E8 9E E7 F9 FF 06 64 65 76 65 6C 5C 00 8B 55 00 шЮч∙ .devel\.ЛU. +5A39C9 89 45 00 8B 45 04 89 55 04 8B 55 00 89 45 00 8B ЙE.ЛE.ЙU.ЛU.ЙE.Л +5A39D9 C2 E8 41 A4 FF FF ┬шAд   + + 6 + 2DUP + + +5A39DF 89 45 FC B8 06 00 00 00 03 45 FC 8B 55 00 89 45 ЙE№╕.....E№ЛU.ЙE +5A39EF FC 89 55 F8 03 45 F8 8D 6D FC №ЙU°.E°Нm№ + + 2R> DUP >R ROT SWAP 1+ MOVE + +5A39F9 E8 22 94 FF FF 89 45 FC 50 8B 45 FC 8B 55 00 89 ш"Ф  ЙE№PЛE№ЛU.Й +5A3A09 45 00 8B 45 04 89 55 04 8B 55 00 89 45 00 8B C2 E.ЛE.ЙU.ЛU.ЙE.Л┬ +5A3A19 8D 40 01 E8 FF A3 FF FF Н@.ш г   + + R> + + +5A3A21 89 45 FC 58 03 45 FC ЙE№X.E№ + +; + +5A3A28 C3 ├ + +: SOURCE-NAME ( -- a u ) + +5A3A29 40 3A 5A 00 00 0B 53 4F 55 52 43 45 2D 4E 41 4D @:Z...SOURCE-NAM +5A3A39 45 7E 39 5A 00 00 00 E~9Z... + + CURFILE @ DUP IF ASCIIZ> ELSE 0 THEN + +5A3A40 E8 4F 2B FA FF 8B 00 0B C0 74 07 E8 D0 A6 FF FF шO+· Л..└t.ш╨ж   +5A3A50 EB 08 89 45 FC 33 C0 8D 6D FC ы.ЙE№3└Нm№ + +; + +5A3A5A C3 ├ + +ZZ=D4 \ No newline at end of file diff --git a/programs/develop/SPForth/src/KOL/spf_kol_sys.f b/programs/develop/SPForth/src/KOL/spf_kol_sys.f new file mode 100644 index 0000000000..52eb8c8f55 --- /dev/null +++ b/programs/develop/SPForth/src/KOL/spf_kol_sys.f @@ -0,0 +1,173 @@ +( + +) + +Code SYS1 ;( n -- n1 ) + INT 40H + RET +EndCode + +Code SYS2 ;( n n1 -- n2 ) + MOV EBX, [EBP] + INT 40H + LEA EBP, [EBP+4] + RET +EndCode + +Code SYS3 ;( n n1 n2 -- n3 ) + MOV ECX, [EBP+4] + MOV EBX, [EBP] + INT 40H + LEA EBP, [EBP+8] + RET +EndCode + +Code SYS4 ;( n n1 n2 n3 -- n4 ) + MOV EDX, [EBP+8] + MOV ECX, [EBP+4] + MOV EBX, [EBP] + INT 40H + LEA EBP, [EBP+0CH] + RET +EndCode + +Code SYS5 ;( n n1 n2 n3 n4 -- n5 ) + MOV ESI, [EBP+0CH] + MOV EDX, [EBP+8] + MOV ECX, [EBP+4] + MOV EBX, [EBP] + INT 40H + LEA EBP, [EBP+10H] + RET +EndCode + +Code SYS6 ;( n n1 n2 n3 n4 n5 -- n6 ) + PUSH EDI + MOV EDI, [EBP+10H] + MOV ESI, [EBP+0CH] + MOV EDX, [EBP+8] + MOV ECX, [EBP+4] + MOV EBX, [EBP] + INT 40H + LEA EBP, [EBP+14H] + POP EDI + RET +EndCode + +VARIABLE reg_struc + +Code SYSV ;( -- n ) + LEA EBP, [EBP-4] + MOV [EBP], EAX + MOV EAX, { ' reg_struc } + PUSH EDI + MOV EDI, [EAX+14H] + MOV ESI, [EAX+10H] + MOV EDX, [EAX+0CH] + MOV ECX, [EAX+8] + MOV EBX, [EAX+4] + MOV EAX, [EAX] + INT 40H + POP EDI + RET +EndCode + + + +80 VALUE SCR_WIDTH +60 VALUE SCR_WIDTH-S +25 VALUE SCR_HEIGHT + + +CREATE &AT-XY 0 , 0 , +CREATE &KEY 0 , +CREATE &ATRIB 0x0000FFFF , + +0x0011000D VALUE >PIC + +CREATE SCR_BUF SCR_WIDTH SCR_HEIGHT 1+ * ALLOT + +: AT-XY ( X Y -- ) + SWAP 16 LSHIFT + &AT-XY ! ; + +: AT-XY? ( -- X Y ) + &AT-XY 2+ W@ &AT-XY W@ ; + +: __PAGE-UP + SCR_BUF SCR_WIDTH + SCR_BUF SCR_WIDTH SCR_HEIGHT * CMOVE + SCR_BUF SCR_WIDTH SCR_HEIGHT 1- * + SCR_WIDTH BLANK + AT-XY? 1- 0 MAX AT-XY ; + +VECT PAGE-UP + +: ?PAGE-UP ( n -- ) + + &AT-XY 2+ W@ + SCR_WIDTH /MOD SWAP &AT-XY 2+ W! + &AT-XY W@ + SCR_HEIGHT /MOD + IF PAGE-UP DROP SCR_HEIGHT 1- THEN &AT-XY W! ; + +: SCR_CR + &AT-XY @ 0xFFFF AND 1+ &AT-XY ! 0 ?PAGE-UP ; + +: SCR_TYPE ( addr len -- ) + TUCK SWAP + &ATRIB @ + &AT-XY 2+ W@ 0x60000 * + &AT-XY W@ 0xD * + + 0x00060018 + + 4 SYS5 DROP +\ &AT-XY 2+ +! + ?PAGE-UP +; + +: DRAW_LINS + ['] PAGE-UP >BODY @ + ['] NOOP TO PAGE-UP + AT-XY? + 0 0 AT-XY + SCR_BUF SCR_WIDTH SCR_HEIGHT * BOUNDS + DO I SCR_WIDTH SCR_TYPE \ SCR_CR + SCR_WIDTH + +LOOP + AT-XY + TO PAGE-UP ; + +: _PAGE-UP +draw_window __PAGE-UP +DRAW_LINS +; + +' _PAGE-UP TO PAGE-UP + +CREATE LAST_CUR 0 , 0 , + +: CORSOR_DROW + 0 LAST_CUR 2@ 38 SYS4 DROP + 0x00FF00FF + &AT-XY W@ 0xD * 0x21 + DUP 16 LSHIFT + + &AT-XY 2+ W@ 0x6 * 6 + DUP 6 + 16 LSHIFT + + 2DUP LAST_CUR 2! + 38 SYS4 DROP +; +: REDRAW + draw_window + DRAW_LINS CORSOR_DROW ; + +: EVENT-CASE + 11 SYS1 + DUP 1 = IF DROP REDRAW EXIT THEN + DUP 2 = IF DROP 2 SYS1 8 RSHIFT &KEY C! EXIT THEN + 3 = IF -1 SYS1 EXIT THEN ; + + +0 + CELL FIELD .CODE +2 CELLS FIELD .FIRST \ позиция в файле (в байтах) + CELL FIELD .SIZE \ сколько байт R/W + CELL FIELD .DATA \ указатель на данные + 222 FIELD .NAME \ ASCIIZ-имя файла +CONSTANT FILE_STR + +: WINDOW + draw_window CC_LINES ; + diff --git a/programs/develop/SPForth/src/KOL/spf_kol_sys.f_L b/programs/develop/SPForth/src/KOL/spf_kol_sys.f_L new file mode 100644 index 0000000000..5b0b2a2afd --- /dev/null +++ b/programs/develop/SPForth/src/KOL/spf_kol_sys.f_L @@ -0,0 +1,752 @@ +ZZ=D4 ( + +) + +Code SYS1 ;( n -- n1 ) + +59E2C9 E0 E2 59 00 00 04 53 59 53 31 AE E2 59 00 00 00 ртY...SYS1отY... +59E2D9 00 00 00 00 00 00 00 ....... + + INT 40H + +59E2E0 CD 40 ═@ + + RET + +59E2E2 C3 ├ + +EndCode + +Code SYS2 ;( n n1 -- n2 ) + +59E2E3 00 E3 59 00 00 04 53 59 53 32 CE E2 59 00 00 00 .уY...SYS2╬тY... +59E2F3 00 00 00 00 00 00 00 00 00 00 00 00 00 ............. + + MOV EBX, [EBP] + +59E300 8B 5D 00 Л]. + + INT 40H + +59E303 CD 40 ═@ + + LEA EBP, [EBP+4] + +59E305 8D 6D 04 Нm. + + RET + +59E308 C3 ├ + +EndCode + +Code SYS3 ;( n n1 n2 -- n3 ) + +59E309 20 E3 59 00 00 04 53 59 53 33 E8 E2 59 00 00 00 уY...SYS3штY... +59E319 00 00 00 00 00 00 00 ....... + + MOV ECX, [EBP+4] + +59E320 8B 4D 04 ЛM. + + MOV EBX, [EBP] + +59E323 8B 5D 00 Л]. + + INT 40H + +59E326 CD 40 ═@ + + LEA EBP, [EBP+8] + +59E328 8D 6D 08 Нm. + + RET + +59E32B C3 ├ + +EndCode + +Code SYS4 ;( n n1 n2 n3 -- n4 ) + +59E32C 40 E3 59 00 00 04 53 59 53 34 0E E3 59 00 00 00 @уY...SYS4.уY... +59E33C 00 00 00 00 .... + + MOV EDX, [EBP+8] + +59E340 8B 55 08 ЛU. + + MOV ECX, [EBP+4] + +59E343 8B 4D 04 ЛM. + + MOV EBX, [EBP] + +59E346 8B 5D 00 Л]. + + INT 40H + +59E349 CD 40 ═@ + + LEA EBP, [EBP+0CH] + +59E34B 8D 6D 0C Нm. + + RET + +59E34E C3 ├ + +EndCode + +Code SYS5 ;( n n1 n2 n3 n4 -- n5 ) + +59E34F 60 E3 59 00 00 04 53 59 53 35 31 E3 59 00 00 00 `уY...SYS51уY... +59E35F 00 . + + MOV ESI, [EBP+0CH] + +59E360 8B 75 0C Лu. + + MOV EDX, [EBP+8] + +59E363 8B 55 08 ЛU. + + MOV ECX, [EBP+4] + +59E366 8B 4D 04 ЛM. + + MOV EBX, [EBP] + +59E369 8B 5D 00 Л]. + + INT 40H + +59E36C CD 40 ═@ + + LEA EBP, [EBP+10H] + +59E36E 8D 6D 10 Нm. + + RET + +59E371 C3 ├ + +EndCode + +Code SYS6 ;( n n1 n2 n3 n4 n5 -- n6 ) + +59E372 80 E3 59 00 00 04 53 59 53 36 54 E3 59 00 АуY...SYS6TуY. + + PUSH EDI + +59E380 57 W + + MOV EDI, [EBP+10H] + +59E381 8B 7D 10 Л}. + + MOV ESI, [EBP+0CH] + +59E384 8B 75 0C Лu. + + MOV EDX, [EBP+8] + +59E387 8B 55 08 ЛU. + + MOV ECX, [EBP+4] + +59E38A 8B 4D 04 ЛM. + + MOV EBX, [EBP] + +59E38D 8B 5D 00 Л]. + + INT 40H + +59E390 CD 40 ═@ + + LEA EBP, [EBP+14H] + +59E392 8D 6D 14 Нm. + + POP EDI + +59E395 5F _ + + RET + +59E396 C3 ├ + +EndCode + +VARIABLE reg_struc + +59E397 AB E3 59 00 00 09 72 65 67 5F 73 74 72 75 63 77 луY...reg_strucw +59E3A7 E3 59 00 00 E8 6C 3C FA FF 00 00 00 00 уY..шl<· .... + + +Code SYSV ;( -- n ) + +59E3B4 D0 E3 59 00 00 04 53 59 53 56 9C E3 59 00 00 00 ╨уY...SYSVЬуY... +59E3C4 00 00 00 00 00 00 00 00 00 00 00 00 ............ + + LEA EBP, [EBP-4] + +59E3D0 8D 6D FC Нm№ + + MOV [EBP], EAX + +59E3D3 89 45 00 ЙE. + + MOV EAX, { ' reg_struc } + +59E3D6 B8 AB E3 59 00 ╕луY. + + PUSH EDI + +59E3DB 57 W + + MOV EDI, [EAX+14H] + +59E3DC 8B 78 14 Лx. + + MOV ESI, [EAX+10H] + +59E3DF 8B 70 10 Лp. + + MOV EDX, [EAX+0CH] + +59E3E2 8B 50 0C ЛP. + + MOV ECX, [EAX+8] + +59E3E5 8B 48 08 ЛH. + + MOV EBX, [EAX+4] + +59E3E8 8B 58 04 ЛX. + + MOV EAX, [EAX] + +59E3EB 8B 00 Л. + + INT 40H + +59E3ED CD 40 ═@ + + POP EDI + +59E3EF 5F _ + + RET + +59E3F0 C3 ├ + +EndCode + + + +80 VALUE SCR_WIDTH + +59E3F1 10 E4 59 00 00 09 53 43 52 5F 57 49 44 54 48 B9 .фY...SCR_WIDTH╣ +59E401 E3 59 00 00 00 00 00 00 00 00 00 00 00 00 00 E8 уY.............ш +59E411 27 3C FA FF 50 00 00 00 E8 E6 3C FA FF '<· P...шц<·  + +60 VALUE SCR_WIDTH-S + +59E41E 40 E4 59 00 00 0B 53 43 52 5F 57 49 44 54 48 2D @фY...SCR_WIDTH- +59E42E 53 F6 E3 59 00 00 00 00 00 00 00 00 00 00 00 00 SЎуY............ +59E43E 00 00 E8 F7 3B FA FF 3C 00 00 00 E8 B6 3C FA FF ..шў;· <...ш╢<·  + +25 VALUE SCR_HEIGHT + +59E44E 70 E4 59 00 00 0A 53 43 52 5F 48 45 49 47 48 54 pфY...SCR_HEIGHT +59E45E 23 E4 59 00 00 00 00 00 00 00 00 00 00 00 00 00 #фY............. +59E46E 00 00 E8 C7 3B FA FF 19 00 00 00 E8 86 3C FA FF ..ш╟;· ....шЖ<·  + + + +CREATE &AT-XY 0 , 0 , + +59E47E 8F E4 59 00 00 06 26 41 54 2D 58 59 53 E4 59 00 ПфY...&AT-XYSфY. +59E48E 00 E8 88 3B FA FF 00 00 00 00 00 00 00 00 .шИ;· ........ + +CREATE &KEY 0 , + +59E49C AB E4 59 00 00 04 26 4B 45 59 83 E4 59 00 00 E8 лфY...&KEYГфY..ш +59E4AC 6C 3B FA FF 00 00 00 00 l;· .... + +CREATE &ATRIB 0x0000FFFF , + +59E4B4 C7 E4 59 00 00 06 26 41 54 52 49 42 A1 E4 59 00 ╟фY...&ATRIBбфY. +59E4C4 00 00 00 E8 50 3B FA FF FF FF 00 00 ...шP;·   .. + + +0x0011000D VALUE >PIC + +59E4D0 E0 E4 59 00 00 04 3E 50 49 43 B9 E4 59 00 00 00 рфY...>PIC╣фY... +59E4E0 E8 57 3B FA FF 0D 00 11 00 E8 16 3C FA FF шW;· ....ш.<·  + + +CREATE SCR_BUF SCR_WIDTH SCR_HEIGHT 1+ * ALLOT + +59E4EE FF E4 59 00 00 07 53 43 52 5F 42 55 46 D5 E4 59  фY...SCR_BUF╒фY +59E4FE 00 E8 18 3B FA FF 00 00 00 00 00 00 00 00 00 00 .ш.;· .......... +59E50E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +59E51E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +59E52E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +59ED24 7E6 bytes + +: AT-XY ( X Y -- ) + +59ED24 40 ED 59 00 00 05 41 54 2D 58 59 F3 E4 59 00 00 @эY...AT-XYєфY.. +59ED34 00 00 00 00 00 00 00 00 00 00 00 00 ............ + + SWAP 16 LSHIFT + &AT-XY ! ; + MOV EDX , [EBP ] + MOV [EBP ], EAX + MOV [EBP -4], EDX + MOV EAX , $10 + MOV ECX , EAX + MOV EAX , [EBP -4] + SHL EAX , CL + ADD EAX , [EBP ] + LEA EBP , [EBP +4] + CALL @@&AT-XY + MOV EDX , [EBP ] + MOV [EAX ], EDX + MOV EAX , [EBP +4] + LEA EBP , [EBP +8] + RET + +: AT-XY? ( -- X Y ) + +59ED6C 80 ED 59 00 00 06 41 54 2D 58 59 3F 29 ED 59 00 АэY...AT-XY?)эY. +59ED7C 00 00 00 00 .... + + &AT-XY 2+ W@ &AT-XY W@ ; + CALL @@&AT-XY + LEA EAX , [EAX +2] + MOVZX EAX , WORD PTR [EAX ] + CALL @@&AT-XY + MOVZX EAX , WORD PTR [EAX ] + RET + +: __PAGE-UP + +59ED94 B0 ED 59 00 00 09 5F 5F 50 41 47 45 2D 55 50 71 ░эY...__PAGE-UPq +59EDA4 ED 59 00 00 00 00 00 00 00 00 00 00 эY.......... + + SCR_BUF SCR_WIDTH + SCR_BUF SCR_WIDTH SCR_HEIGHT * CMOVE + CALL @@SCR_BUF + CALL @@SCR_WIDTH + ADD EAX , [EBP ] + LEA EBP , [EBP +4] + CALL @@SCR_BUF + CALL @@SCR_WIDTH + CALL @@SCR_HEIGHT + IMUL [EBP ] + LEA EBP , [EBP +4] + CALL @@CMOVE + SCR_BUF SCR_WIDTH SCR_HEIGHT 1- * + SCR_WIDTH BLANK + CALL @@SCR_BUF + CALL @@SCR_WIDTH + CALL @@SCR_HEIGHT + LEA EAX , [EAX -1] + IMUL [EBP ] + ADD EAX , [EBP +4] + LEA EBP , [EBP +8] + CALL @@SCR_WIDTH + CALL @@BLANK + AT-XY? 1- 0 MAX AT-XY ; + CALL @@AT-XY? + LEA EAX , [EAX -1] + MOV [EBP -4], EAX + XOR EAX , EAX + LEA EBP , [EBP -4] + CALL @@MAX + CALL @@AT-XY + RET + +VECT PAGE-UP + +59EE1A 30 EE 59 00 00 07 50 41 47 45 2D 55 50 99 ED 59 0юY...PAGE-UPЩэY +59EE2A 00 00 00 00 00 00 E8 B3 32 FA FF 60 F0 59 00 E8 ......ш│2· `ЁY.ш +59EE3A C6 32 FA FF ╞2·  + + +: ?PAGE-UP ( n -- ) + +59EE3E 50 EE 59 00 00 08 3F 50 41 47 45 2D 55 50 1F EE PюY...?PAGE-UP.ю +59EE4E 59 00 Y. + + + &AT-XY 2+ W@ + SCR_WIDTH /MOD SWAP &AT-XY 2+ W! + CALL @@&AT-XY + LEA EAX , [EAX +2] + MOVZX EAX , WORD PTR [EAX ] + ADD EAX , [EBP ] + LEA EBP , [EBP +4] + CALL @@SCR_WIDTH + MOV ECX , EAX + MOV EAX , [EBP ] + CDQ + IDIV ECX + MOV [EBP ], EDX + MOV EDX , [EBP ] + MOV [EBP ], EAX + MOV EAX , EDX + CALL @@&AT-XY + LEA EAX , [EAX +2] + CALL @@W! + &AT-XY W@ + SCR_HEIGHT /MOD + CALL @@&AT-XY + MOVZX EAX , WORD PTR [EAX ] + ADD EAX , [EBP ] + LEA EBP , [EBP +4] + CALL @@SCR_HEIGHT + MOV ECX , EAX + MOV EAX , [EBP ] + CDQ + IDIV ECX + MOV [EBP ], EDX + IF PAGE-UP DROP SCR_HEIGHT 1- THEN &AT-XY W! ; + OR EAX , EAX + MOV EAX , [EBP ] + LEA EBP , [EBP +4] + JE [OFFSET ?PAGE-UP] + CALL @@PAGE-UP + MOV EAX , [EBP ] + LEA EBP , [EBP +4] + CALL @@SCR_HEIGHT + LEA EAX , [EAX -1] +@59EEC1: CALL @@&AT-XY + CALL @@W! + RET + +: SCR_CR + +59EECC E0 EE 59 00 00 06 53 43 52 5F 43 52 43 EE 59 00 рюY...SCR_CRCюY. +59EEDC 00 00 00 00 .... + + &AT-XY @ 0xFFFF AND 1+ &AT-XY ! 0 ?PAGE-UP ; + CALL @@&AT-XY + MOV EAX , [EAX ] + MOV [EBP -4], EAX + MOV EAX , $FFFF + AND EAX , [EBP -4] + LEA EAX , [EAX +1] + CALL @@&AT-XY + MOV EDX , [EBP ] + MOV [EAX ], EDX + XOR EAX , EAX + LEA EBP , [EBP +4] + CALL @@?PAGE-UP + RET + +: SCR_TYPE ( addr len -- ) + +59EF0A 20 EF 59 00 00 08 53 43 52 5F 54 59 50 45 D1 EE яY...SCR_TYPE╤ю +59EF1A 59 00 00 00 00 00 Y..... + + TUCK SWAP + MOV EDX , [EBP ] + MOV [EBP -4], EDX + MOV [EBP ], EAX + MOV EDX , [EBP -4] + MOV [EBP -4], EAX + MOV EAX , EDX + LEA EBP , [EBP -4] + &ATRIB @ + CALL @@&ATRIB + MOV EAX , [EAX ] + &AT-XY 2+ W@ 0x60000 * + CALL @@&AT-XY + MOVZX EAX , WORD PTR [EAX +2] + MOV [EBP -4], EAX + MOV EAX , $60000 + IMUL [EBP -4] + &AT-XY W@ 0xD * + + CALL @@&AT-XY + MOVZX EAX , WORD PTR [EAX ] + MOV [EBP -4], EAX + MOV EAX , $D + IMUL [EBP -4] + ADD EAX , [EBP ] + LEA EAX , [$60018][EAX ] + 0x00060018 + + MOV [EBP ], EAX + MOV EAX , $4 + 4 SYS5 DROP + CALL @@SYS5 + MOV EAX , [EBP ] + LEA EBP , [EBP +4] +\ &AT-XY 2+ +! + ?PAGE-UP + CALL @@?PAGE-UP +; + RET + +: DRAW_LINS + +59EF84 A0 EF 59 00 00 09 44 52 41 57 5F 4C 49 4E 53 0F аяY...DRAW_LINS. +59EF94 EF 59 00 00 00 00 00 00 00 00 00 00 яY.......... + + ['] PAGE-UP >BODY @ + MOV [EBP -4], EAX + MOV EAX , $59EE30 + MOV EAX , [EAX +5] + MOV [EBP -8], EAX + MOV EAX , $59D240 + ['] NOOP TO PAGE-UP + LEA EBP , [EBP -8] + CALL [OFFSET PAGE-UP] + AT-XY? + CALL @@AT-XY? + 0 0 AT-XY + MOV [EBP -4], EAX + MOV [EBP -8], $0 + XOR EAX , EAX + LEA EBP , [EBP -8] + CALL @@AT-XY + SCR_BUF SCR_WIDTH SCR_HEIGHT * BOUNDS + CALL @@SCR_BUF + CALL @@SCR_WIDTH + CALL @@SCR_HEIGHT + IMUL [EBP ] + ADD EAX , [EBP +4] + MOV EDX , [EBP +4] + MOV [EBP +4], EAX + MOV EAX , EDX + MOV EDX , $80000000 + DO I SCR_WIDTH SCR_TYPE \ SCR_CR + SUB EDX , [EBP +4] + LEA EBX , [EDX ][EAX ] + MOV EAX , [EBP +8] + LEA EBP , [EBP +12] + PUSH , $59F037 + PUSH EDX + PUSH EBX + XCHG EAX, EAX + XCHG EAX, EAX + XCHG EAX, EAX + MOV [EBP -4]EAX + MOV EAX , [ESP ] + SUB EAX , [ESP +4] + LEA EBP , [EBP -4] + CALL @@SCR_WIDTH + CALL @@SCR_TYPE + SCR_WIDTH + CALL @@SCR_WIDTH + +LOOP + ADD [ESP ], EAX + MOV EAX , [EBP ] + LEA EBP , [EBP +4] + JNO [OFFSET DRAW_LINS] + LEA ESP , [ESP +12] + AT-XY + CALL @@AT-XY + TO PAGE-UP ; + CALL [OFFSET PAGE-UP] + RET + +: _PAGE-UP + +59F042 60 F0 59 00 00 08 5F 50 41 47 45 2D 55 50 89 EF `ЁY..._PAGE-UPЙя +59F052 59 00 00 00 00 00 00 00 00 00 00 00 00 00 Y............. + +draw_window __PAGE-UP + CALL @@draw_window + CALL @@__PAGE-UP +DRAW_LINS + CALL @@DRAW_LINS +; + RET + +' _PAGE-UP TO PAGE-UP + +CREATE LAST_CUR 0 , 0 , + +59F070 83 F0 59 00 00 08 4C 41 53 54 5F 43 55 52 47 F0 ГЁY...LAST_CURGЁ +59F080 59 00 00 E8 94 2F FA FF 00 00 00 00 00 00 00 00 Y..шФ/· ........ + + +: CORSOR_DROW + +59F090 B0 F0 59 00 00 0B 43 4F 52 53 4F 52 5F 44 52 4F ░ЁY...CORSOR_DRO +59F0A0 57 75 F0 59 00 00 00 00 00 00 00 00 00 00 00 00 WuЁY............ + + 0 LAST_CUR 2@ 38 SYS4 DROP + MOV [EBP -4], EAX + XOR EAX , EAX + LEA EBP , [EBP -4] + CALL @@LAST_CUR + MOV EDX , [EAX +4] + MOV [EBP -4], EDX + MOV EAX , [EAX ] + MOV [EBP -8], EAX + MOV EAX , $26 + MOV EDX , [EBP ] + MOV ECX , [EBP -4] + MOV EBX , [EBP -8] + INT $40 + MOV EAX , $FF00FF + LEA EBP , [EBP +4] + 0x00FF00FF + &AT-XY W@ 0xD * 0x21 + DUP 16 LSHIFT + + CALL @@&AT-XY + MOVZX EAX , WORD PTR [EAX ] + MOV [EBP -4], EAX + MOV EAX , $D + IMUL [EBP -4] + MOV [EBP -4], EAX + MOV EAX , $21 + ADD EAX , [EBP -4] + MOV [EBP -4], EAX + MOV [EBP -8], EAX + MOV EAX , $10 + MOV ECX , EAX + MOV EAX , [EBP -8] + SHL EAX , CL + ADD EAX , [EBP -4] + &AT-XY 2+ W@ 0x6 * 6 + DUP 6 + 16 LSHIFT + + CALL @@&AT-XY + MOVZX EAX , WORD PTR [EAX +2] + MOV [EBP -4], EAX + MOV EAX , $6 + IMUL [EBP -4] + MOV [EBP -4], EAX + MOV EAX , $6 + ADD EAX , [EBP -4] + MOV [EBP -4], EAX + LEA EAX , [EAX +6] + MOV [EBP -8], EAX + MOV EAX , $10 + MOV ECX , EAX + MOV EAX , [EBP -8] + SHL EAX , CL + ADD EAX , [EBP -4] + 2DUP LAST_CUR 2! + MOV EDX , [EBP ] + MOV [EBP -4], EAX + MOV [EBP -8], EDX + LEA EBP , [EBP -8] + CALL @@LAST_CUR + CALL @@2! + 38 SYS4 DROP + MOV [EBP -4], EAX + MOV EAX , $26 + MOV EDX , [EBP +4] + MOV ECX , [EBP ] + MOV EBX , [EBP -4] + INT $40 + MOV EAX , [EBP +8] + LEA EBP , [EBP +12] +; + RET +: REDRAW + +59F17A 90 F1 59 00 00 06 52 45 44 52 41 57 95 F0 59 00 РёY...REDRAWХЁY. +59F18A 00 00 00 00 00 00 ...... + + draw_window + CALL @@draw_window + DRAW_LINS CORSOR_DROW ; + CALL @@DRAW_LINS + CALL @@CORSOR_DROW + RET + +: EVENT-CASE + +59F1A0 C0 F1 59 00 00 0A 45 56 45 4E 54 2D 43 41 53 45 └ёY...EVENT-CASE +59F1B0 7F F1 59 00 00 00 00 00 00 00 00 00 00 00 00 00 ёY............. + + 11 SYS1 + MOV [EBP -4], EAX + MOV EAX , $B + INT $40 + MOV [EBP -8], EAX + DUP 1 = IF DROP REDRAW EXIT THEN + CMP EAX , $1 + MOV EAX , [EBP -8] + LEA EBP , [EBP -4] + JNE [OFFSET EVENT-CASE] + MOV EAX , [EBP ] + LEA EBP , [EBP +4] + CALL @@REDRAW + RET + DUP 2 = IF DROP 2 SYS1 8 RSHIFT &KEY C! EXIT THEN +@59F1E6: MOV [EBP -4], EAX + CMP EAX , $2 + MOV EAX , [EBP -4] + JNE [OFFSET EVENT-CASE] + MOV EAX , $2 + INT $40 + MOV [EBP -4], EAX + MOV EAX , $8 + MOV ECX , EAX + MOV EAX , [EBP -4] + SHR EAX , CL + CALL @@&KEY + MOV EDX , [EBP ] + MOV [EAX ], DL + MOV EAX , [EBP +4] + LEA EBP , [EBP +8] + RET + 3 = IF -1 SYS1 EXIT THEN ; +@59F21A: CMP EAX , $3 + MOV EAX , [EBP ] + LEA EBP , [EBP +4] + JNE [OFFSET EVENT-CASE] + MOV [EBP -4], EAX + MOV EAX , $FFFFFFFF + INT $40 + LEA EBP , [EBP -4] + RET +@59F235: RET + + +0 + CELL FIELD .CODE + +59F236 50 F2 59 00 00 05 2E 43 4F 44 45 A5 F1 59 00 00 PЄY....CODEеёY.. +59F246 00 00 00 00 00 00 00 00 00 00 C3 ..........├ + +2 CELLS FIELD .FIRST \ позиция в файле (в байтах) + +59F251 70 F2 59 00 00 06 2E 46 49 52 53 54 3B F2 59 00 pЄY....FIRST;ЄY. +59F261 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 89 ...............Й +59F271 45 FC B8 04 00 00 00 03 45 FC C3 E№╕.....E№├ + + CELL FIELD .SIZE \ сколько байт R/W + +59F27C 90 F2 59 00 00 05 2E 53 49 5A 45 56 F2 59 00 00 РЄY....SIZEVЄY.. +59F28C 00 00 00 00 89 45 FC B8 0C 00 00 00 03 45 FC C3 ....ЙE№╕.....E№├ + + CELL FIELD .DATA \ указатель на данные + +59F29C B0 F2 59 00 00 05 2E 44 41 54 41 81 F2 59 00 00 ░ЄY....DATAБЄY.. +59F2AC 00 00 00 00 89 45 FC B8 10 00 00 00 03 45 FC C3 ....ЙE№╕.....E№├ + + 222 FIELD .NAME \ ASCIIZ-имя файла + +59F2BC D0 F2 59 00 00 05 2E 4E 41 4D 45 A1 F2 59 00 00 ╨ЄY....NAMEбЄY.. +59F2CC 00 00 00 00 89 45 FC B8 14 00 00 00 03 45 FC C3 ....ЙE№╕.....E№├ + +CONSTANT FILE_STR + +59F2DC F0 F2 59 00 00 08 46 49 4C 45 5F 53 54 52 C1 F2 ЁЄY...FILE_STR┴Є +59F2EC 59 00 00 00 E8 47 2D FA FF F2 00 00 00 Y...шG-· Є... + + +: WINDOW + +59F2F9 10 F3 59 00 00 06 57 49 4E 44 4F 57 E1 F2 59 00 .єY...WINDOWсЄY. +59F309 00 00 00 00 00 00 00 ....... + + draw_window CC_LINES ; + CALL @@draw_window + CALL @@CC_LINES + RET + +ZZ=D4 \ No newline at end of file diff --git a/programs/develop/SPForth/src/MEFORTH.F b/programs/develop/SPForth/src/MEFORTH.F new file mode 100644 index 0000000000..e4217d901d --- /dev/null +++ b/programs/develop/SPForth/src/MEFORTH.F @@ -0,0 +1,2 @@ +: $" POSTPONE C" ; IMMEDIATE +: .S DEPTH .SN ; diff --git a/programs/develop/SPForth/src/compiler/spf_compile.f b/programs/develop/SPForth/src/compiler/spf_compile.f new file mode 100644 index 0000000000..e5287b6d18 --- /dev/null +++ b/programs/develop/SPForth/src/compiler/spf_compile.f @@ -0,0 +1,154 @@ +( ╩юьяшы Ўш  ўшёхы ш ёЄЁюъ т ёыютрЁ№. + ╬╤-эхчртшёшь√х юяЁхфхыхэш . + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + ╧ЁхюсЁрчютрэшх шч 16-ЁрчЁ фэюую т 32-ЁрчЁ фэ√щ ъюф - 1995-96уу + ╨хтшчш  - ёхэЄ сЁ№ 1999, ьрЁЄ 2000 +) + + +HEX + +: HERE ( -- addr ) \ 94 +\ addr - єърчрЄхы№ яЁюёЄЁрэёЄтр фрээ√ї. + DP @ + DUP TO :-SET + DUP TO J-SET +; + + +: _COMPILE, \ 94 CORE EXT +\ ╚эЄхЁяЁхЄрЎш : ёхьрэЄшър эх юяЁхфхыхэр. +\ ┬√яюыэхэшх: ( xt -- ) +\ ─юсртшЄ№ ёхьрэЄшъє т√яюыэхэш  юяЁхфхыхэш , яЁхфёЄртыхэюую xt, ъ +\ ёхьрэЄшъх т√яюыэхэш  Єхъє∙хую юяЁхфхыхэш . + ?SET + SetOP + 0E8 C, \ ьр°шээр  ъюьрэфр CALL + DP @ CELL+ - , + DP @ TO LAST-HERE +; + +: COMPILE, \ 94 CORE EXT +\ ╚эЄхЁяЁхЄрЎш : ёхьрэЄшър эх юяЁхфхыхэр. +\ ┬√яюыэхэшх: ( xt -- ) +\ ─юсртшЄ№ ёхьрэЄшъє т√яюыэхэш  юяЁхфхыхэш , яЁхфёЄртыхэюую xt, ъ +\ ёхьрэЄшъх т√яюыэхэш  Єхъє∙хую юяЁхфхыхэш . + CON>LIT + IF INLINE? + IF INLINE, + ELSE _COMPILE, + THEN + THEN +; + +: BRANCH, ( ADDR -> ) \ ёъюьяшышЁютрЄ№ шэёЄЁєъЎш■ ADDR JMP + ?SET SetOP SetJP E9 C, + DUP IF DP @ CELL+ - THEN , DP @ TO LAST-HERE +; + +: RET, ( -> ) \ ёъюьяшышЁютрЄ№ шэёЄЁєъЎш■ RET + ?SET SetOP 0xC3 C, OPT OPT_CLOSE +; + + +: LIT, ( W -> ) + ['] DUP INLINE, + OPT_INIT + SetOP 0B8 C, , OPT \ MOV EAX, # + OPT_CLOSE +; + +: DLIT, ( D -> ) + SWAP LIT, LIT, +; + +: RLIT, ( u -- ) +\ ╤ъюьяшышЁютрЄ№ ёыхфє■∙є■ ёхьрэЄшъє: +\ ╧юыюцшЄ№ эр ёЄхъ тючтЁрЄют ышЄхЁры u + 68 C, , \ push dword # +; + + +: ?BRANCH, ( ADDR -> ) \ ёъюьяшышЁютрЄ№ шэёЄЁєъЎш■ ADDR ?BRANCH + ?SET + 084 TO J_COD + ???BR-OPT + SetJP SetOP + J_COD \ JX схч 0x0F + 0x0F \ ъєёюъ юЄ JX + C, C, + DUP IF DP @ CELL+ - THEN , DP @ TO LAST-HERE +; + +DECIMAL + + +: S, ( addr u -- ) +\ ╟рЁхчхЁтшЁютрЄ№ u срщЄ яЁюёЄЁрэёЄтр фрээ√ї +\ ш яюьхёЄшЄ№ Єєфр ёюфхЁцшьюх u срщЄ шч addr. + DP @ SWAP DUP ALLOT CMOVE +; + +: S", ( addr u -- ) +\ ╨рчьхёЄшЄ№ т яЁюёЄЁрэёЄтх фрээ√ї ёЄЁюъє, чрфрээє■ addr u, +\ т тшфх ёЄЁюъш ёю ёўхЄўшъюь. + DUP C, S, +; + +: SLIT, ( a u -- ) +\ ╤ъюьяшышЁютрЄ№ ёЄЁюъє, чрфрээє■ addr u. + SLITERAL-CODE COMPILE, S", 0 C, +; + +: CLIT, ( a -- ) + COUNT PAD $! + CLITERAL-CODE _COMPILE, PAD COUNT S", 0 C, ; + + +: ", ( A -> ) +\ ЁрчьхёЄшЄ№ т яЁюёЄЁрэёЄтх фрээ√ї ёЄЁюъє, чрфрээє■ рфЁхёюь A, +\ т тшфх ёЄЁюъш ёю ёўхЄўшъюь + COUNT S", +; + +\ orig - a, 1 (short) шыш a, 2 (near) +\ dest - a, 3 + +: >MARK ( -> A ) + DP @ DUP TO :-SET 4 - +; + +: A ) + HERE +; + +: >ORESOLVE1 ( A -> ) + ?SET + DUP + DP @ DUP TO :-SET + OVER - 4 - + SWAP ! + RESOLVE_OPT +; + +: >ORESOLVE ( A, N -- ) + DUP 1 = IF DROP >ORESOLVE1 + ELSE 2 <> IF -2007 THROW THEN \ ABORT" Conditionals not paired" + >ORESOLVE1 + THEN +; + +: >RESOLVE1 ( A -> ) + HERE OVER - 4 - + SWAP ! +; + +: >RESOLVE ( A, N -- ) + DUP 1 = IF DROP >RESOLVE1 + ELSE 2 <> IF -2007 THROW THEN \ ABORT" Conditionals not paired" + >RESOLVE1 + THEN +; + +: r> ['] C-R> INLINE, ; IMMEDIATE +: >r ['] C->R INLINE, ; IMMEDIATE diff --git a/programs/develop/SPForth/src/compiler/spf_compile0.f b/programs/develop/SPForth/src/compiler/spf_compile0.f new file mode 100644 index 0000000000..e7b8a23353 --- /dev/null +++ b/programs/develop/SPForth/src/compiler/spf_compile0.f @@ -0,0 +1,60 @@ +( ы╧═╨╔╠╤├╔╤ ▐╔╙┼╠ ╙╠╧╫┴╥╪. + яє-╬┼┌┴╫╔╙╔═┘┼ ╧╨╥┼─┼╠┼╬╔╤. + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + Ё╥┼╧┬╥┴┌╧╫┴╬╔┼ ╔┌ 16-╥┴┌╥╤─╬╧╟╧ ╫ 32-╥┴┌╥╤─╬┘╩ ╦╧─ - 1995-96╟╟ + Є┼╫╔┌╔╤ - ╙┼╬╘╤┬╥╪ 1999, ═┴╥╘ 2000 +) + +: RDROP ['] C-RDROP INLINE, ; IMMEDIATE +: 2RDROP ['] C-2RDROP INLINE, ; IMMEDIATE +: 3RDROP ['] C-3RDROP INLINE, ; IMMEDIATE + +5 CONSTANT CFL \ ─╠╔╬┴ ╦╧─┴, ╦╧═╨╔╠╔╥╒┼═╧╟╧ CREATE ╫ ╙┼╟═┼╬╘ CS. +\ USER DOES>A \ ╫╥┼═┼╬╬┴╤ ╨┼╥┼═┼╬╬┴╤ - ┴─╥┼╙ ─╠╤ DOES> + +: SET-CURRENT ( wid -- ) \ 94 SEARCH +\ ї╙╘┴╬╧╫╔╘╪ ╙╨╔╙╧╦ ╦╧═╨╔╠╤├╔╔ ╬┴ ╙╨╔╙╧╦, ╔─┼╬╘╔╞╔├╔╥╒┼═┘╩ wid. + CURRENT ! +; + +: GET-CURRENT ( -- wid ) \ 94 SEARCH +\ ў╧┌╫╥┴▌┴┼╘ wid - ╔─┼╬╘╔╞╔╦┴╘╧╥ ╙╨╔╙╦┴ ╦╧═╨╔╠╤├╔╔. + CURRENT @ +; + +: IS-TEMP-WL ( -- flag ) +\ ╨╥╧╫┼╥╤┼╘, ╤╫╠╤┼╘╙╤ ╠╔ ╘┼╦╒▌╔╩ ╙╠╧╫┴╥╪ ╦╧═╨╔╠╤├╔╔ ╫╥┼═┼╬╬┘═ (╫╬┼█╬╔═) + GET-CURRENT CELL- @ -1 = +; +0 [IF] +: DP ( -- addr ) \ ╨┼╥┼═┼╬╬┴╤, ╙╧─┼╥╓┴▌┴╤ HERE ╙┼╟═┼╬╘┴ ─┴╬╬┘╚ + IS-TEMP-WL + IF GET-CURRENT 6 CELLS + ELSE (DP) THEN +; +[THEN] +: ALLOT ( n -- ) \ 94 +\ х╙╠╔ n ┬╧╠╪█┼ ╬╒╠╤, ┌┴╥┼┌┼╥╫╔╥╧╫┴╘╪ n ┬┴╩╘ ╨╥╧╙╘╥┴╬╙╘╫┴ ─┴╬╬┘╚. х╙╠╔ n ═┼╬╪█┼ +\ ╬╒╠╤ - ╧╙╫╧┬╧─╔╘╪ |n| ┬┴╩╘ ╨╥╧╙╘╥┴╬╙╘╫┴ ─┴╬╬┘╚. х╙╠╔ n ╬╧╠╪, ╧╙╘┴╫╔╘╪ +\ ╒╦┴┌┴╘┼╠╪ ╨╥╧╙╘╥┴╬╙╘╫┴ ─┴╬╬┘╚ ╬┼╔┌═┼╬╬┘═. +\ х╙╠╔ ╨┼╥┼─ ╫┘╨╧╠╬┼╬╔┼═ ALLOT ╒╦┴┌┴╘┼╠╪ ╨╥╧╙╘╥┴╬╙╘╫┴ ─┴╬╬┘╚ ╫┘╥╧╫╬┼╬ ╔ n +\ ╦╥┴╘╬╧ ╥┴┌═┼╥╒ ╤▐┼╩╦╔, ╧╬ ╧╙╘┴┼╘╙╤ ╫┘╥╧╫╬┼╬╬┘═ ╔ ╨╧╙╠┼ ALLOT. +\ х╙╠╔ ╨┼╥┼─ ╫┘╨╧╠╬┼╬╔┼═ ALLOT ╒╦┴┌┴╘┼╠╪ ╨╥╧╙╘╥┴╬╙╘╫┴ ─┴╬╬┘╚ ╫┘╥╧╫╬┼╬ ╬┴ +\ ╟╥┴╬╔├╒ ╙╔═╫╧╠┴ ╔ n ╦╥┴╘╬╧ ╥┴┌═┼╥╒ ╙╔═╫╧╠┴, ╧╬ ╧╙╘┴┼╘╙╤ ╫┘╥╧╫╬┼╬╬┘═ ╬┴ +\ ╟╥┴╬╔├╒ ╙╔═╫╧╠┴ ╔ ╨╧╙╠┼ ALLOT. + DP +! +; + +: , ( x -- ) \ 94 +\ ·┴╥┼┌┼╥╫╔╥╧╫┴╘╪ ╧─╬╒ ╤▐┼╩╦╒ ╫ ╧┬╠┴╙╘╔ ─┴╬╬┘╚ ╔ ╨╧═┼╙╘╔╘╪ x ╫ ▄╘╒ ╤▐┼╩╦╒. + DP @ 4 ALLOT ! +; + +: C, ( char -- ) \ 94 +\ ·┴╥┼┌┼╥╫╔╥╧╫┴╘╪ ═┼╙╘╧ ─╠╤ ╙╔═╫╧╠┴ ╫ ╧┬╠┴╙╘╔ ─┴╬╬┘╚ ╔ ╨╧═┼╙╘╔╘╪ ╘╒─┴ char. + DP @ 1 ALLOT C! +; + +: W, ( word -- ) +\ ·┴╥┼┌┼╥╫╔╥╧╫┴╘╪ ═┼╙╘╧ ─╠╤ word ╫ ╧┬╠┴╙╘╔ ─┴╬╬┘╚ ╔ ╨╧═┼╙╘╔╘╪ ╘╒─┴ char. + DP @ 2 ALLOT W! +; diff --git a/programs/develop/SPForth/src/compiler/spf_defwords.f b/programs/develop/SPForth/src/compiler/spf_defwords.f new file mode 100644 index 0000000000..71d96f34b0 --- /dev/null +++ b/programs/develop/SPForth/src/compiler/spf_defwords.f @@ -0,0 +1,206 @@ +( Определяющие слова, создающие словарные статьи в словаре. + ОС-независимые определения. + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + Преобразование из 16-разрядного в 32-разрядный код - 1995-96гг + Ревизия - сентябрь 1999 +) + +USER LAST-CFA +USER-VALUE LAST-NON + +: REVEAL ( --- ) +\ Add the last created definition to the CURRENT wordlist. + LAST @ CURRENT @ ! ; + +: SHEADER ( addr u -- ) + _SHEADER REVEAL +; + +: _SHEADER ( addr u -- ) + 0 C, ( flags ) + HERE 0 , ( cfa ) + DUP LAST-CFA ! + -ROT WARNING @ + IF 2DUP GET-CURRENT SEARCH-WORDLIST + IF DROP 2DUP TYPE ." isn't unique" CR THEN + THEN + CURRENT @ SWORD, + ALIGN + HERE SWAP ! ( заполнили cfa ) +; + +: HEADER ( "name" -- ) PARSE-WORD SHEADER ; + +: CREATED ( addr u -- ) +\ Создать определение для c-addr u с семантикой выполнения, описанной ниже. +\ Если указатель пространства данных не выровнен, зарезервировать место +\ для выравнивания. Новый указатель пространства данных определяет +\ поле данных name. CREATE не резервирует место в поле данных name. +\ name Выполнение: ( -- a-addr ) +\ a-addr - адрес поля данных name. Семантика выполнения name может +\ быть расширена с помощью DOES>. + SHEADER + HERE DOES>A ! ( для DOES ) + CREATE-CODE COMPILE, +; + +: CREATE ( "name" -- ) \ 94 + PARSE-WORD CREATED +; + +: (DOES1) \ та часть, которая работает одновременно с CREATE (обычно) + R> DOES>A @ CFL + - + DOES>A @ 1+ ! ; + +Code (DOES2) + SUB EBP, 4 + MOV [EBP], EAX + POP EBX + POP EAX + PUSH EBX + RET +EndCODE + +: DOES> \ 94 +\ Интерпретация: семантика неопределена. +\ Компиляция: ( C: clon-sys1 -- colon-sys2 ) +\ Добавить семантику времени выполнения, данную ниже, к текущему +\ определению. Будет или нет текущее определение сделано видимо +\ для поиска в словаре при компиляции DOES>, зависит от реализации. +\ Поглощает colon-sys1 и производит colon-sys2. Добавляет семантику +\ инициализации, данную ниже, к текущему определению. +\ Время выполнения: ( -- ) ( R: nest-sys1 -- ) +\ Заменить семантику выполнения последнего определения name, на семантику +\ выполнения name, данную ниже. Возвратить управление в вызывающее опреде- +\ ление, заданное nest-sys1. Неопределенная ситуация возникает, если name +\ не было определено через CREATE или определенное пользователем слово, +\ вызывающее CREATE. +\ Инициализация: ( i*x -- i*x a-addr ) ( R: -- nest-sys2 ) +\ Сохранить зависящую от реализации информацию nest-sys2 о вызывающем +\ определении. Положить адрес поля данных name на стек. Элементы стека +\ i*x представляют аргументы name. +\ name Выполнение: ( i*x -- j*x ) +\ Выполнить часть определения, которая начинается с семантики инициализации, +\ добавленной DOES>, которое модифицировало name. Элементы стека i*x и j*x +\ представляют аргументы и результаты слова name, соответственно. + ['] (DOES1) COMPILE, + ['] (DOES2) COMPILE, \ ['] C-R> MACRO, +; IMMEDIATE + +: VOCABULARY ( "name" -- ) +\ Создать список слов с именем name. Выполнение name заменит первый список +\ в порядке поиска на список с именем name. + WORDLIST DUP + CREATE + , + LATEST OVER CELL+ ! ( ссылка на имя словаря ) + GET-CURRENT SWAP PAR! ( словарь-предок ) +\ FORTH-WORDLIST SWAP CLASS! ( класс ) + VOC + ( DOES> не работает в этом ЦК) + (DOES1) (DOES2) \ так сделал бы DOES>, определенный выше + @ CONTEXT ! +; + +: VARIABLE ( "name" -- ) \ 94 +\ Пропустить ведущие пробелы. Выделить name, ограниченное пробелом. +\ Создать определение для name с семантикой выполнения, данной ниже. +\ Зарезервировать одну ячейку пространства данных с выровненным адресом. +\ name используется как "переменная". +\ name Выполнение: ( -- a-addr ) +\ a-addr - адрес зарезервированной ячейки. За инициализацию ячейки отвечает +\ программа + CREATE + 0 , +; +: CONSTANT ( x "name" -- ) \ 94 +\ Пропустить ведущие пробелы. Выделить name, ограниченное пробелом. +\ Создать определение для name с семантикой выполнения, данной ниже. +\ name используется как "константа". +\ name Выполнение: ( -- x ) +\ Положить x на стек. + HEADER + CONSTANT-CODE COMPILE, , +; +: VALUE ( x "name" -- ) \ 94 CORE EXT +\ Пропустить ведущие пробелы. Выделить name, ограниченное пробелом. Создать +\ определение для name с семантикой выполнения, определенной ниже, с начальным +\ значением равным x. +\ name используется как "значение". +\ Выполнение: ( -- x ) +\ Положить x на стек. Значение x - то, которое было дано, когда имя создавалось, +\ пока не исполнится фраза x TO name, задав новое значение x, +\ ассоциированное с name. + HEADER + CONSTANT-CODE COMPILE, , + TOVALUE-CODE COMPILE, +; +: VECT ( -> ) + ( создать слово, семантику выполнения которого можно менять, + записывая в него новый xt по TO) + HEADER + VECT-CODE COMPILE, ['] NOOP , + TOVALUE-CODE COMPILE, +; + +: ->VARIABLE ( x "name" -- ) \ 94 + HEADER + CREATE-CODE COMPILE, + , +; + +: USER-ALIGNED ( -- a-addr n ) + USER-HERE 3 + 2 RSHIFT ( 4 / ) 4 * DUP + USER-HERE - +; + +: USER-CREATE ( "name" -- ) + HEADER + HERE DOES>A ! ( для DOES ) + USER-CODE COMPILE, + USER-ALIGNED + USER-ALLOT , +; +: USER ( "name" -- ) \ локальные переменные потока + USER-CREATE + 4 USER-ALLOT +; + +' _TOUSER-VALUE-CODE TO TOUSER-VALUE-CODE + +: USER-VALUE ( "name" -- ) \ 94 CORE EXT + HEADER + USER-VALUE-CODE COMPILE, + USER-ALIGNED SWAP , + CELL+ USER-ALLOT + TOUSER-VALUE-CODE COMPILE, +; + +: ->VECT ( x -> ) + HEADER + VECT-CODE COMPILE, , + TOVALUE-CODE COMPILE, +; + +: : _: ; + +: _: ( C: "name" -- colon-sys ) \ 94 +\ Пропустить ведущие разделители. Выделить имя, ограниченное пробелом. +\ Создать определение для имени, называемое "определение через двоеточие". +\ Установить состояние компиляции и начать текущее определение, получив +\ colon-sys. Добавить семантику инициализации, описанную ниже, в текущее +\ определение. Семантика выполнения будет определена словами, скомпилиро- +\ ванными в тело определения. Текущее определение должно быть невидимо +\ при поиске в словаре до тех пор, пока не будет завершено. +\ Инициализация: ( i*x -- i*x ) ( R: -- nest-sys ) +\ Сохранить информацию nest-sys о вызове определения. Состояние стека +\ i*x представляет аргументы имени. +\ Имя Выполнение: ( i*x -- j*x ) +\ Выполнить определение имени. Состояния стека i*x и j*x представляют +\ аргументы и результаты имени соответственно. + PARSE-WORD _SHEADER ] + HERE TO :-SET +; + +\ S" ~mak\CompIF.f" INCLUDED + diff --git a/programs/develop/SPForth/src/compiler/spf_error.f b/programs/develop/SPForth/src/compiler/spf_error.f new file mode 100644 index 0000000000..b37fc75667 --- /dev/null +++ b/programs/develop/SPForth/src/compiler/spf_error.f @@ -0,0 +1,34 @@ +( ╬сЁрсюЄър ю°шсюъ. + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + ╨хтшчш : CхэЄ сЁ№ 1999 +) + +VECT ERROR \ юсЁрсюЄўшъ ю°шсюъ (ABORT) +VECT (ABORT") + +: (ABORT1") ( flag c-addr -- ) + SWAP IF COUNT ER-U ! ER-A ! -2 THROW ELSE DROP THEN +; + +CREATE ERRTIB C/L 1+ ALLOT +CREATE ERRFILE C/L 1+ ALLOT +VARIABLE ER>IN +VARIABLE SAVEERR? +VARIABLE >IN_WORD + +: SAVEERR + DUP SAVEERR? @ AND + IF SOURCE ERRTIB $! >IN_WORD @ ER>IN ! SAVEERR? OFF + SOURCE-ID 999 HERE WITHIN + IF SOURCE-ID .NAME ZCOUNT C/L UMIN ERRFILE $! + THEN + THEN ; + +: ERROR_DO + SAVEERR + CR ERRFILE COUNT TYPE + CR ERRTIB COUNT TYPE + CR ER>IN @ BEGIN SPACE 1- DUP 0 MAX 0= UNTIL ." ^" DROP + CR ." ERR=" . + CR S0 @ SP! STATE 0! +; diff --git a/programs/develop/SPForth/src/compiler/spf_find.f b/programs/develop/SPForth/src/compiler/spf_find.f new file mode 100644 index 0000000000..b53985b965 --- /dev/null +++ b/programs/develop/SPForth/src/compiler/spf_find.f @@ -0,0 +1,149 @@ +( Поиск слов в словарях и управление порядком поиска. + ОС-независимые определения. + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + Преобразование из 16-разрядного в 32-разрядный код - 1995-96гг + Ревизия - сентябрь 1999 + Модифицированно Максимовым М.О. + email:mak@mail.rtc.neva.ru + http://informer.rtc.neva.ru/ + т д {812}105-92-03 + т р {812}552-47-64 +) + +VECT FIND + +0x10 CELLS CONSTANT CONTEXT_SIZE + +CREATE SEARCH-BUFF 0x81 ALLOT + +Code ZSEARCH-WORDLIST ;( z-addr wid -- 0 | xt 1 | xt -1 ) \ 94 SEARCH +; Найти определение, заданное строкой c-addr u в списке слов, идентифицируемом +; wid. Если определение не найдено, вернуть ноль. +; Если определение найдено, вернуть выполнимый токен xt и единицу (1), если +; определение немедленного исполнения, иначе минус единицу (-1). +; PUSH WORD PTR [EBP] + MOV EDX, [EBP] + PUSH EDX + MOV EAX, [EAX] + PUSH EAX + LEA EBP, [EBP+4] + CALL {' GETPR} + test eax, eax + JZ END + LEA EBP, [EBP-4] + mov [ebp],eax + MOVZX EAX, BYTE PTR [EDX-9] + DEC EAX + OR EAX,1 + +END: RET +EndCode + +: SEARCH-WORDLIST ( c-addr u wid -- 0 | xt 1 | xt -1 ) + >R 0x7F AND SEARCH-BUFF ASCII-Z + R> ZSEARCH-WORDLIST + +; + +: SFIND ( addr len --- addr len 0| xt 1|xt -1 ) +\ Search all word lists in the search order for the name in the +\ counted string at c-addr. If not found return the name address and 0. +\ If found return the execution token xt and -1 if the word is non-immediate +\ and 1 if the word is immediate. + CONTEXT + BEGIN DUP @ + WHILE >R + 2DUP R@ @ SEARCH-WORDLIST ?DUP + IF RDROP 2NIP EXIT \ Exit if found. + THEN + R> CELL+ + REPEAT @ +; + +: FIND1 ( c-addr -- c-addr 0 | xt 1 | xt -1 ) \ 94 SEARCH +\ Расширить семантику CORE FIND следующим: +\ Искать определение с именем, заданным строкой со счетчиком c-addr. +\ Если определение не найдено после просмотра всех списков в порядке поиска, +\ возвратить c-addr и ноль. Если определение найдено, возвратить xt. +\ Если определение немедленного исполнения, вернуть также единицу (1); +\ иначе также вернуть минус единицу (-1). Для данной строки, значения, +\ возвращаемые FIND во время компиляции, могут отличаться от значений, +\ возвращаемых не в режиме компиляции. + COUNT SFIND + DUP 0= IF 2DROP 1- 0 THEN ; + +: DEFINITIONS ( -- ) \ 94 SEARCH +\ Сделать списком компиляции тот же список слов, что и первый список в порядке +\ поиска. Имена последующих определений будут помещаться в список компиляции. +\ Последующие изменения порядка поиска не влияют на список компиляции. + CONTEXT @ SET-CURRENT +; + +: GET-ORDER_DROP ( CONTEXT -- widn .. wid1 ) + DUP @ DUP IF >R CELL+ RECURSE R> EXIT THEN 2DROP ; + +: GET-ORDER ( -- widn .. wid1 n ) + DEPTH >R + CONTEXT GET-ORDER_DROP + DEPTH R> - ; + +: SET-ORDER ( widn .. wid1 n -- ) + DUP 0< + IF DROP ONLY + ELSE CONTEXT CONTEXT_SIZE ERASE + 0 + ?DO CONTEXT I CELLS+ ! + LOOP + THEN ; + + +: FORTH ( -- ) \ 94 SEARCH EXT +\ Преобразовать порядок поиска, состоящий из widn, ...wid2, wid1 (где wid1 +\ просматривается первым) в widn,... wid2, widFORTH-WORDLIST. + FORTH-WORDLIST CONTEXT ! +; + +: ONLY ( -- ) \ 94 SEARCH EXT +\ Установить список поиска на зависящий от реализации минимальный список поиска. +\ Минимальный список поиска должен включать слова FORTH-WORDLIST и SET-ORDER. + CONTEXT CELL+ 0! + FORTH +; + +: ALSO ( -- ) \ 94 SEARCH EXT +\ Преобразовать порядок поиска, состоящий из widn, ...wid2, wid1 (где wid1 +\ просматривается первым) в widn,... wid2, wid1, wid1. Неопределенная ситуация +\ возникает, если в порядке поиска слишком много списков. + CONTEXT CONTEXT CELL+ CONTEXT_SIZE CMOVE> ; + + +: PREVIOUS ( -- ) \ 94 SEARCH EXT +\ Преобразовать порядок поиска, состоящий из widn, ...wid2, wid1 (где wid1 +\ просматривается первым) в widn,... wid2. Неопределенная ситуация возникает, +\ если порядок поиска был пуст перед выполнением PREVIOUS. + _PREVIOUS ; + +: _PREVIOUS ( -- ) \ 94 SEARCH EXT + CONTEXT CELL+ CONTEXT CONTEXT_SIZE CMOVE ; + +: VOC-NAME. ( wid -- ) \ напечатать имя списка слов, если он именован + DUP FORTH-WORDLIST = IF DROP ." FORTH" EXIT THEN +\ DUP KERNEL-WORDLIST = IF DROP ." KERNEL" EXIT THEN + DUP CELL+ @ DUP IF ID. DROP ELSE DROP ." :" U. THEN +; + +: ORDER ( -- ) \ 94 SEARCH EXT +\ Показать списки в порядке поиска, от первого просматриваемого списка до +\ последнего. Также показать список слов, куда помещаются новые определения. +\ Формат изображения зависит от реализации. +\ ORDER может быть реализован с использованием слов форматного преобразования +\ чисел. Следовательно он может разрушить перемещаемую область, +\ идентифицируемую #>. + GET-ORDER ." Context: " + 0 ?DO ( DUP .) VOC-NAME. SPACE LOOP CR + ." Current: " GET-CURRENT VOC-NAME. CR +; + +: LATEST ( -> NFA ) + CURRENT @ @ +; diff --git a/programs/develop/SPForth/src/compiler/spf_find.f_L b/programs/develop/SPForth/src/compiler/spf_find.f_L new file mode 100644 index 0000000000..ad52ebcd8f --- /dev/null +++ b/programs/develop/SPForth/src/compiler/spf_find.f_L @@ -0,0 +1,428 @@ +ZZ=D0 ( Поиск слов в словарях и управление порядком поиска. + ОС-независимые определения. + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + Преобразование из 16-разрядного в 32-разрядный код - 1995-96гг + Ревизия - сентябрь 1999 + Модифицированно Максимовым М.О. + email:mak@mail.rtc.neva.ru + http://informer.rtc.neva.ru/ + т д {812}105-92-03 + т р {812}552-47-64 +) + +VECT FIND + +5A1F35 50 1F 5A 00 00 04 46 49 4E 44 A3 1E 5A 00 00 00 P.Z...FINDг.Z... +5A1F45 00 00 00 00 00 00 00 00 00 00 00 E8 93 01 FA FF ...........шУ.·  +5A1F55 40 D2 59 00 E8 A6 01 FA FF @╥Y.шж.·  + + +0x10 CELLS CONSTANT CONTEXT_SIZE + +5A1F5E 80 1F 5A 00 00 0C 43 4F 4E 54 45 58 54 5F 53 49 А.Z...CONTEXT_SI +5A1F6E 5A 45 3A 1F 5A 00 00 00 00 00 00 00 00 00 00 00 ZE:.Z........... +5A1F7E 00 00 E8 B7 00 FA FF 40 00 00 00 ..ш╖.· @... + + +CREATE SEARCH-BUFF 0x81 ALLOT + +5A1F89 A0 1F 5A 00 00 0B 53 45 41 52 43 48 2D 42 55 46 а.Z...SEARCH-BUF +5A1F99 46 63 1F 5A 00 00 00 E8 77 00 FA FF 00 00 00 00 Fc.Z...шw.· .... +5A1FA9 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +5A1FB9 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +5A1FC9 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +5A2026 4D bytes + +Code ZSEARCH-WORDLIST ;( z-addr wid -- 0 | xt 1 | xt -1 ) \ 94 SEARCH + +5A2026 40 20 5A 00 00 10 5A 53 45 41 52 43 48 2D 57 4F @ Z...ZSEARCH-WO +5A2036 52 44 4C 49 53 54 8E 1F 5A 00 RDLISTО.Z. + +; Найти определение, заданное строкой c-addr u в списке слов, идентифицируемом +; wid. Если определение не найдено, вернуть ноль. +; Если определение найдено, вернуть выполнимый токен xt и единицу (1), если +; определение немедленного исполнения, иначе минус единицу (-1). + ; PUSH WORD PTR [EBP] + MOV EDX, [EBP] + +5A2040 8B 55 00 ЛU. + + PUSH EDX + +5A2043 52 R + + MOV EAX, [EAX] + +5A2044 8B 00 Л. + + PUSH EAX + +5A2046 50 P + + LEA EBP, [EBP+4] + +5A2047 8D 6D 04 Нm. + + CALL {' GETPR} + +5A204A E8 31 9E FC FF ш1Ю№  + + TEST EAX, EAX + +5A204F 85 C0 Е└ + + JZ m1 + +5A2051 0F 84 0E 00 00 00 .Д.... + + LEA EBP, [EBP-4] + +5A2057 8D 6D FC Нm№ + + MOV [EBP], EAX + +5A205A 89 45 00 ЙE. + + MOVZX EAX, BYTE PTR [EDX-9] + +5A205D 0F B6 42 F7 .╢Bў + + DEC EAX + +5A2061 48 H + + OR EAX, 1 + +5A2062 83 C8 01 Г╚. + +m1: RET + +5A2065 C3 ├ + +EndCode + +: SEARCH-WORDLIST ( c-addr u wid -- 0 | xt 1 | xt -1 ) + +5A2066 80 20 5A 00 00 0F 53 45 41 52 43 48 2D 57 4F 52 А Z...SEARCH-WOR +5A2076 44 4C 49 53 54 2B 20 5A 00 00 DLIST+ Z.. + + >R 0x7F AND SEARCH-BUFF ASCII-Z + +5A2080 50 B8 7F 00 00 00 23 45 00 8D 6D 04 E8 0F FF FF P╕...#E.Нm.ш.   +5A2090 FF E8 2A C0 FF FF  ш*└   + + R> ZSEARCH-WORDLIST + +5A2096 89 45 FC 58 8D 6D FC E8 9E FF FF FF ЙE№XНm№шЮ    + + +; + +5A20A2 C3 ├ + + +: SFIND ( addr len --- addr len 0| xt 1|xt -1 ) + +5A20A3 C0 20 5A 00 00 05 53 46 49 4E 44 6B 20 5A 00 00 └ Z...SFINDk Z.. +5A20B3 00 00 00 00 00 00 00 00 00 00 00 00 00 ............. + +\ Search all word lists in the search order for the name in the +\ counted string at c-addr. If not found return the name address and 0. +\ If found return the execution token xt and -1 if the word is non-immediate +\ and 1 if the word is immediate. + CONTEXT + +5A20C0 E8 23 07 FB FF ш#.√  + + BEGIN DUP @ + +5A20C5 90 90 90 89 45 FC 8B 00 0B C0 8B РРРЙE№Л..└Л + + WHILE >R + +5A20D0 45 FC 0F 84 41 00 00 00 50 8B 45 00 8B 55 04 E№.ДA...PЛE.ЛU. + + 2DUP R@ @ SEARCH-WORDLIST ?DUP + +5A20DF 89 45 00 89 55 FC 89 45 F8 8B 04 24 8B 00 8D 6D ЙE.ЙU№ЙE°Л.$Л.Нm +5A20EF F8 E8 8B FF FF FF E8 96 AA FF FF °шЛ   шЦк   + + IF RDROP 2NIP EXIT \ Exit if found. + +5A20FA 0B C0 8B 45 00 8D 6D 04 74 09 83 C4 04 E8 04 C1 .└ЛE.Нm.t.Г─.ш.┴ +5A210A FF FF C3   ├ + + THEN + R> CELL+ + +5A210D 89 45 FC 58 8D 40 04 8D 6D FC ЙE№XН@.Нm№ + + REPEAT @ + +5A2117 EB AF 8B 00 ыпЛ. + +; + +5A211B C3 ├ + + +: FIND1 ( c-addr -- c-addr 0 | xt 1 | xt -1 ) \ 94 SEARCH + +5A211C 30 21 5A 00 00 05 46 49 4E 44 31 A8 20 5A 00 00 0!Z...FIND1и Z.. +5A212C 00 00 00 00 .... + +\ Расширить семантику CORE FIND следующим: +\ Искать определение с именем, заданным строкой со счетчиком c-addr. +\ Если определение не найдено после просмотра всех списков в порядке поиска, +\ возвратить c-addr и ноль. Если определение найдено, возвратить xt. +\ Если определение немедленного исполнения, вернуть также единицу (1); +\ иначе также вернуть минус единицу (-1). Для данной строки, значения, +\ возвращаемые FIND во время компиляции, могут отличаться от значений, +\ возвращаемых не в режиме компиляции. + COUNT SFIND + +5A2130 8D 50 01 89 55 FC 0F B6 00 8D 6D FC E8 7F FF FF НP.ЙU№.╢.Нm№ш   +5A2140 FF   + + DUP 0= IF 2DROP 1- 0 THEN ; + +5A2141 0B C0 75 0E 8B 45 04 8D 40 FF 89 45 04 33 C0 8D .└u.ЛE.Н@ ЙE.3└Н +5A2151 6D 04 C3 m.├ + + +: DEFINITIONS ( -- ) \ 94 SEARCH + +5A2154 70 21 5A 00 00 0B 44 45 46 49 4E 49 54 49 4F 4E p!Z...DEFINITION +5A2164 53 21 21 5A 00 00 00 00 00 00 00 00 S!!Z........ + +\ Сделать списком компиляции тот же список слов, что и первый список в порядке +\ поиска. Имена последующих определений будут помещаться в список компиляции. +\ Последующие изменения порядка поиска не влияют на список компиляции. + CONTEXT @ SET-CURRENT + +5A2170 E8 73 06 FB FF 8B 00 E8 C0 4E FA FF шs.√ Л.ш└N·  + +; + +5A217C C3 ├ + + +: GET-ORDER_DROP ( CONTEXT -- widn .. wid1 ) + +5A217D A0 21 5A 00 00 0E 47 45 54 2D 4F 52 44 45 52 5F а!Z...GET-ORDER_ +5A218D 44 52 4F 50 59 21 5A 00 00 00 00 00 00 00 00 00 DROPY!Z......... +5A219D 00 00 00 ... + + DUP @ DUP IF >R CELL+ RECURSE R> EXIT THEN 2DROP ; + +5A21A0 89 45 FC 8B 00 8D 6D FC 0B C0 74 17 50 8B 45 00 ЙE№Л.Нm№.└t.PЛE. +5A21B0 8D 40 04 8D 6D 04 E8 E5 FF FF FF 89 45 FC 58 8D Н@.Нm.шх   ЙE№XН +5A21C0 6D FC C3 8B 45 04 8D 6D 08 C3 m№├ЛE.Нm.├ + + +: GET-ORDER ( -- widn .. wid1 n ) + +5A21CA E0 21 5A 00 00 09 47 45 54 2D 4F 52 44 45 52 82 р!Z...GET-ORDERВ +5A21DA 21 5A 00 00 00 00 !Z.... + + DEPTH >R + +5A21E0 E8 EB E4 FF FF 50 8B 45 00 8D 6D 04 шыф  PЛE.Нm. + + CONTEXT GET-ORDER_DROP + +5A21EC E8 F7 05 FB FF E8 AA FF FF FF шў.√ шк    + + DEPTH R> - ; + +5A21F6 E8 D5 E4 FF FF 89 45 FC 58 F7 D8 03 45 FC C3 ш╒ф  ЙE№Xў╪.E№├ + + +: SET-ORDER ( widn .. wid1 n -- ) + +5A2205 20 22 5A 00 00 09 53 45 54 2D 4F 52 44 45 52 CF "Z...SET-ORDER╧ +5A2215 21 5A 00 00 00 00 00 00 00 00 00 !Z......... + + DUP 0< + +5A2220 0B C0 7D 10 8B 45 00 8D 6D .└}.ЛE.Нm + + IF DROP ONLY + +5A2229 04 E8 A9 07 FB FF E9 63 00 00 .шй.√ щc.. + + ELSE CONTEXT CONTEXT_SIZE ERASE + +5A2233 00 E8 AF 05 FB FF E8 42 FD FF FF E8 5D BC FF FF .шп.√ шB¤  ш]╝   + + 0 + +5A2243 89 45 FC 33 C0 8D 6D 04 ЙE№3└Нm. + + ?DO CONTEXT I CELLS+ ! + +5A224B BB 97 22 5A 00 3B 45 F8 75 05 8B 45 FC FF E3 53 ╗Ч"Z.;E°u.ЛE№ уS +5A225B BB 00 00 00 80 2B 5D F8 53 03 D8 53 8B 45 FC E8 ╗...А+]°S.╪SЛE№ш +5A226B 79 05 FB FF 89 45 FC 8B 04 24 2B 44 24 04 8D 04 y.√ ЙE№Л.$+D$.Н. +5A227B 85 00 00 00 00 03 45 FC 8B 55 00 89 10 8B 45 04 Е.....E№ЛU.Й.ЛE. +5A228B 8D 6D 08 Нm. + + LOOP + +5A228E FF 04 24 71 D7 8D 64 24 0C  .$q╫Нd$. + + THEN ; + +5A2297 C3 ├ + + + +: FORTH ( -- ) \ 94 SEARCH EXT + +5A2298 B0 22 5A 00 00 05 46 4F 52 54 48 0A 22 5A 00 00 ░"Z...FORTH."Z.. +5A22A8 00 00 00 00 00 00 00 00 ........ + +\ Преобразовать порядок поиска, состоящий из widn, ...wid2, wid1 (где wid1 +\ просматривается первым) в widn,... wid2, widFORTH-WORDLIST. + FORTH-WORDLIST CONTEXT ! + +5A22B0 E8 3F FF FA FF E8 2E 05 FB FF 8B 55 00 89 10 8B ш? · ш..√ ЛU.Й.Л +5A22C0 45 04 8D 6D 08 E.Нm. + +; + +5A22C5 C3 ├ + + +: ONLY ( -- ) \ 94 SEARCH EXT + +5A22C6 E0 22 5A 00 00 04 4F 4E 4C 59 9D 22 5A 00 00 00 р"Z...ONLYЭ"Z... +5A22D6 00 00 00 00 00 00 00 00 00 00 .......... + +\ Установить список поиска на зависящий от реализации минимальный список поиска. +\ Минимальный список поиска должен включать слова FORTH-WORDLIST и SET-ORDER. + CONTEXT CELL+ 0! + +5A22E0 E8 03 05 FB FF 8D 40 04 C7 00 00 00 00 00 8B 45 ш..√ Н@.╟.....ЛE +5A22F0 00 8D 6D 04 .Нm. + + FORTH + +5A22F4 E8 B7 FF FF FF ш╖    + +; + +5A22F9 C3 ├ + + +: ALSO ( -- ) \ 94 SEARCH EXT + +5A22FA 10 23 5A 00 00 04 41 4C 53 4F CB 22 5A 00 00 00 .#Z...ALSO╦"Z... +5A230A 00 00 00 00 00 00 ...... + +\ Преобразовать порядок поиска, состоящий из widn, ...wid2, wid1 (где wid1 +\ просматривается первым) в widn,... wid2, wid1, wid1. Неопределенная ситуация +\ возникает, если в порядке поиска слишком много списков. + CONTEXT CONTEXT CELL+ CONTEXT_SIZE CMOVE> ; + +5A2310 E8 D3 04 FB FF E8 CE 04 FB FF 8D 40 04 E8 5E FC ш╙.√ ш╬.√ Н@.ш^№ +5A2320 FF FF E8 E9 B4 FF FF C3   шщ┤  ├ + + + +: PREVIOUS ( -- ) \ 94 SEARCH EXT + +5A2328 40 23 5A 00 00 08 50 52 45 56 49 4F 55 53 FF 22 @#Z...PREVIOUS " +5A2338 5A 00 00 00 00 00 00 00 Z....... + +\ Преобразовать порядок поиска, состоящий из widn, ...wid2, wid1 (где wid1 +\ просматривается первым) в widn,... wid2. Неопределенная ситуация возникает, +\ если порядок поиска был пуст перед выполнением PREVIOUS. + _PREVIOUS ; + +5A2340 E8 9B 9D FC FF C3 шЫЭ№ ├ + + +: _PREVIOUS ( -- ) \ 94 SEARCH EXT + +5A2346 60 23 5A 00 00 09 5F 50 52 45 56 49 4F 55 53 2D `#Z..._PREVIOUS- +5A2356 23 5A 00 00 00 00 00 00 00 00 #Z........ + + CONTEXT CELL+ CONTEXT CONTEXT_SIZE CMOVE ; + +5A2360 E8 83 04 FB FF 8D 40 04 E8 7B 04 FB FF E8 0E FC шГ.√ Н@.ш{.√ ш.№ +5A2370 FF FF E8 49 B4 FF FF C3   шI┤  ├ + + +: VOC-NAME. ( wid -- ) \ напечатать имя списка слов, если он именован + +5A2378 90 23 5A 00 00 09 56 4F 43 2D 4E 41 4D 45 2E 4B Р#Z...VOC-NAME.K +5A2388 23 5A 00 00 00 00 00 00 #Z...... + + DUP FORTH-WORDLIST = IF DROP ." FORTH" EXIT THEN + +5A2390 89 45 FC 8D 6D FC E8 59 FE FA FF 33 45 00 8B 45 ЙE№Нm№шY■· 3E.ЛE +5A23A0 04 8D 6D 08 0F 85 18 00 00 00 8B 45 00 8D 6D 04 .Нm..Е....ЛE.Нm. +5A23B0 E8 A7 FD F9 FF 05 46 4F 52 54 48 00 E8 2F 9A FC шз¤∙ .FORTH.ш/Ъ№ +5A23C0 FF C3  ├ + +\ DUP KERNEL-WORDLIST = IF DROP ." KERNEL" EXIT THEN + DUP CELL+ @ DUP IF ID. DROP ELSE DROP ." :" U. THEN + +5A23C2 89 45 FC 8B 40 04 8D 6D FC 0B C0 74 10 E8 CC F7 ЙE№Л@.Нm№.└t.ш╠ў +5A23D2 FF FF 8B 45 00 8D 6D 04 E9 20 00 00 00 8B 45 00   ЛE.Нm.щ ...ЛE. +5A23E2 8D 6D 04 E8 72 FD F9 FF 09 3C 4E 4F 4E 41 4D 45 Нm.шr¤∙ .:.шЎЩ№ ш.=·  + +; + +5A23FF C3 ├ + + +: ORDER ( -- ) \ 94 SEARCH EXT + +5A2400 10 24 5A 00 00 05 4F 52 44 45 52 7D 23 5A 00 00 .$Z...ORDER}#Z.. + +\ Показать списки в порядке поиска, от первого просматриваемого списка до +\ последнего. Также показать список слов, куда помещаются новые определения. +\ Формат изображения зависит от реализации. +\ ORDER может быть реализован с использованием слов форматного преобразования +\ чисел. Следовательно он может разрушить перемещаемую область, +\ идентифицируемую #>. + GET-ORDER ." Context: " + +5A2410 E8 CB FD FF FF E8 42 FD F9 FF 09 43 6F 6E 74 65 ш╦¤  шB¤∙ .Conte +5A2420 78 74 3A 20 00 E8 C6 99 FC FF xt: .ш╞Щ№  + + 0 ?DO ( DUP .) VOC-NAME. SPACE LOOP CR + +5A242A 89 45 FC 33 C0 8D 6D 04 BB 64 24 5A 00 3B 45 F8 ЙE№3└Нm.╗d$Z.;E° +5A243A 75 05 8B 45 FC FF E3 53 BB 00 00 00 80 2B 5D F8 u.ЛE№ уS╗...А+]° +5A244A 53 03 D8 53 8B 45 FC E8 3A FF FF FF E8 9D 38 FA S.╪SЛE№ш:   шЭ8· +5A245A FF FF 04 24 71 F1 8D 64 24 0C E8 7F 36 FA FF   .$qёНd$.ш6·  + + ." Current: " GET-CURRENT VOC-NAME. CR + +5A2469 E8 EE FC F9 FF 09 43 75 72 72 65 6E 74 3A 20 00 шю№∙ .Current: . +5A2479 E8 72 99 FC FF 89 45 FC 8B 87 58 18 00 00 8D 6D шrЩ№ ЙE№ЛЗX...Нm +5A2489 FC E8 01 FF FF FF E8 54 36 FA FF №ш.   шT6·  + +; + +5A2494 C3 ├ + + +: LATEST ( -> NFA ) + +5A2495 B0 24 5A 00 00 06 4C 41 54 45 53 54 05 24 5A 00 ░$Z...LATEST.$Z. +5A24A5 00 00 00 00 00 00 00 00 00 00 00 ........... + + CURRENT @ @ + +5A24B0 E8 1B 4B FA FF 8B 00 8B 00 ш.K· Л.Л. + +; + +5A24B9 C3 ├ + +ZZ=D0 \ No newline at end of file diff --git a/programs/develop/SPForth/src/compiler/spf_immed_control.f b/programs/develop/SPForth/src/compiler/spf_immed_control.f new file mode 100644 index 0000000000..4db1a1cb05 --- /dev/null +++ b/programs/develop/SPForth/src/compiler/spf_immed_control.f @@ -0,0 +1,132 @@ +( є╠╧╫┴ ╬┼═┼─╠┼╬╬╧╟╧ ╫┘╨╧╠╬┼╬╔╤, ╔╙╨╧╠╪┌╒┼═┘┼ ╨╥╔ ╦╧═╨╔╠╤├╔╔ + ╙╘╥╒╦╘╒╥ ╒╨╥┴╫╠┼╬╔╤ ╫ ╘┼╠┼ ╫┘╙╧╦╧╒╥╧╫╬┼╫╧╟╧ ╧╨╥┼─┼╠┼╬╔╤. + яє-╬┼┌┴╫╔╙╔═┘┼ ╧╨╥┼─┼╠┼╬╔╤. + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + Ё╥┼╧┬╥┴┌╧╫┴╬╔┼ ╔┌ 16-╥┴┌╥╤─╬╧╟╧ ╫ 32-╥┴┌╥╤─╬┘╩ ╦╧─ - 1995-96╟╟ + Є┼╫╔┌╔╤ - ╙┼╬╘╤┬╥╪ 1999 +) + +: IF \ 94 +\ щ╬╘┼╥╨╥┼╘┴├╔╤: ╙┼═┴╬╘╔╦┴ ╬┼╧╨╥┼─┼╠┼╬┴. +\ ы╧═╨╔╠╤├╔╤: ( C: -- orig ) +\ Ё╧╠╧╓╔╘╪ ╬┴ ╒╨╥┴╫╠╤└▌╔╩ ╙╘┼╦ ╨╧┌╔├╔└ ╬╧╫╧╩ ╬┼╥┴┌╥┼█┼╬╬╧╩ ╙╙┘╠╦╔ ╫╨┼╥┼─ orig. +\ ф╧┬┴╫╔╘╪ ╙┼═┴╬╘╔╦╒ ╫╥┼═┼╬╔ ╫┘╨╧╠╬┼╬╔╤, ─┴╬╬╒└ ╬╔╓┼, ╦ ╘┼╦╒▌┼═╒ ╧╨╥┼─┼╠┼╬╔└. +\ є┼═┴╬╘╔╦┴ ╬┼┌┴╫┼╥█┼╬┴, ╨╧╦┴ orig ╬┼ ╥┴┌╥┼█╔╘╙╤, ╬┴╨╥╔═┼╥, ╨╧ THEN ╔╠╔ ELSE. +\ ў╥┼═╤ ╫┘╨╧╠╬┼╬╔╤: ( x -- ) +\ х╙╠╔ ╫╙┼ ┬╔╘┘ x ╬╒╠┼╫┘┼, ╨╥╧─╧╠╓┴╘╪ ╫┘╨╧╠╬┼╬╔┼ ╙ ╨╧┌╔├╔╔, ┌┴─┴╬╬╧╩ +\ ╥┴┌╥┼█┼╬╔┼═ orig. + ?COMP DP @ ?BRANCH, >MARK 1 +; IMMEDIATE + + +: ELSE \ 94 +\ щ╬╘┼╥╨╥┼╘┴├╔╤: ╙┼═┴╬╘╔╦┴ ╬┼╧╨╥┼─┼╠┼╬┴. +\ ы╧═╨╔╠╤├╔╤: ( C: orig1 -- orig2 ) +\ Ё╧╠╧╓╔╘╪ ╬┴ ╒╨╥┴╫╠╤└▌╔╩ ╙╘┼╦ ╨╧┌╔├╔└ ╬╧╫╧╩ ╬┼╥┴┌╥┼█┼╬╬╧╩ ╙╙┘╠╦╔ ╫╨┼╥┼─ orig2. +\ ф╧┬┴╫╔╘╪ ╙┼═┴╬╘╔╦╒ ╫╥┼═┼╬╔ ╫┘╨╧╠╬┼╬╔╤, ─┴╬╬╒└ ╬╔╓┼, ╦ ╘┼╦╒▌┼═╒ ╧╨╥┼─┼╠┼╬╔└. +\ є┼═┴╬╘╔╦┴ ╬┼┌┴╫┼╥█┼╬┴, ╨╧╦┴ orig2 ╬┼ ╥┴┌╥┼█╔╘╙╤ (╬┴╨╥╔═┼╥, ╨╧ THEN). +\ Є┴┌╥┼█╔╘╪ ╙╙┘╠╦╒ ╫╨┼╥┼─ orig1, ╔╙╨╧╠╪┌╒╤ ╨╧┌╔├╔└ ╙╠┼─╒└▌┼╩ ─╧┬┴╫╠┼╬╬╧╩ +\ ╙┼═┴╬╘╔╦╔ ╫┘╨╧╠╬┼╬╔╤. +\ ў╥┼═╤ ╫┘╨╧╠╬┼╬╔╤: ( -- ) +\ Ё╥╧─╧╠╓╔╘╪ ╫┘╨╧╠╬┼╬╔┼ ╙ ╨╧┌╔├╔╔, ┌┴─┴╬╬╧╩ ╥┴┌╥┼█┼╬╔┼═ orig2. + ?COMP DP @ BRANCH, + >ORESOLVE + >MARK 2 +; IMMEDIATE + +: THEN \ 94 +\ щ╬╘┼╥╨╥┼╘┴├╔╤: ╙┼═┴╬╘╔╦┴ ╬┼╧╨╥┼─┼╠┼╬┴. +\ ы╧═╨╔╠╤├╔╤: ( C: orig -- ) +\ Є┴┌╥┼█╔╘╪ ╙╙┘╠╦╒ ╫╨┼╥┼─ orig, ╔╙╨╧╠╪┌╒╤ ╨╧┌╔├╔└ ╙┼═┴╬╘╔╦╔ ╫┘╨╧╠╬┼╬╔╤. +\ ф╧┬┴╫╔╘╪ ╙┼═┴╬╘╔╦╒ ╫╥┼═┼╬╔ ╫┘╨╧╠╬┼╬╔╤, ─┴╬╬╒└ ╬╔╓┼, ╦ ╘┼╦╒▌┼═╒ ╧╨╥┼─┼╠┼╬╔└. +\ ў╥┼═╤ ╫┘╨╧╠╬┼╬╔╤: ( -- ) +\ Ё╥╧─╧╠╓╔╘╪ ╫┘╨╧╠╬┼╬╔┼. + ?COMP \ HERE TO :-SET + >ORESOLVE +; IMMEDIATE + +: BREAK + POSTPONE EXIT POSTPONE THEN ; IMMEDIATE + +: BEGIN \ 94 +\ щ╬╘┼╥╨╥┼╘┴├╔╤: ╙┼═┴╬╘╔╦┴ ╬┼╧╨╥┼─┼╠┼╬┴. +\ ы╧═╨╔╠╤├╔╤: ( C: -- dest ) +\ Ё╧╠╧╓╔╘╪ ╙╠┼─╒└▌╒└ ╨╧┌╔├╔└ ╨┼╥┼─┴▐╔ ╒╨╥┴╫╠┼╬╔╤, dest, ╬┴ ╒╨╥┴╫╠╤└▌╔╩ ╙╘┼╦. +\ ф╧┬┴╫╔╘╪ ╙┼═┴╬╘╔╦╒ ╫╥┼═┼╬╔ ╫┘╨╧╠╬┼╬╔╤, ─┴╬╬╒└ ╬╔╓┼, ╦ ╘┼╦╒▌┼═╒ ╧╨╥┼─┼╠┼╬╔└. +\ ў╥┼═╤ ╫┘╨╧╠╬┼╬╔╤: ( -- ) +\ Ё╥╧─╧╠╓╔╘╪ ╫┘╨╧╠╬┼╬╔┼. + ?COMP + 4 ALIGN-NOP +\ HERE TO :-SET + IF -2004 THROW THEN \ ABORT" UNTIL ┬┼┌ BEGIN !" + ?BRANCH, + 0xFFFFFF80 DP @ 4 - @ U< + IF DP @ 5 - W@ 0x3F0 + DP @ 6 - W! -4 ALLOT + THEN +; IMMEDIATE + +: WHILE \ 94 +\ щ╬╘┼╥╨╥┼╘┴├╔╤: ╙┼═┴╬╘╔╦┴ ╬┼╧╨╥┼─┼╠┼╬┴. +\ ы╧═╨╔╠╤├╔╤: ( C: dest -- orig dest ) +\ Ё╧╠╧╓╔╘╪ ╨╧┌╔├╔└ ╬╧╫╧╩ ╬┼╥┴┌╥┼█┼╬╬╧╩ ╙╙┘╠╦╔ ╫╨┼╥┼─ orig ╬┴ ╒╨╥┴╫╠╤└▌╔╩ ╙╘┼╦ +\ ╨╧─ ╔═┼└▌╔═╙╤ dest. ф╧┬┴╫╔╘╪ ╙┼═┴╬╘╔╦╒ ╫╥┼═┼╬╔ ╫┘╨╧╠╬┼╬╔╤, ─┴╬╬╒└ ╬╔╓┼, ╦ +\ ╘┼╦╒▌┼═╒ ╧╨╥┼─┼╠┼╬╔└. є┼═┴╬╘╔╦┴ ╬┼┌┴╫┼╥█┼╬┴, ╨╧╦┴ orig ╔ dest ╬┼ ╥┴┌╥┼█┴╘╙╤ +\ (╬┴╨╥╔═┼╥, ╨╧ REPEAT). +\ ў╥┼═╤ ╫┘╨╧╠╬┼╬╔╤: ( x -- ) +\ х╙╠╔ ╫╙┼ ┬╔╘┘ x ╬╒╠┼╫┘┼, ╨╥╧─╧╠╓┴╘╪ ╫┘╨╧╠╬┼╬╔┼ ╙ ╨╧┌╔├╔╔, ┌┴─┴╬╬╧╩ +\ ╥┴┌╥┼█┼╬╔┼═ orig. + ?COMP [COMPILE] IF + 2SWAP +; IMMEDIATE + +: REPEAT \ 94 +\ щ╬╘┼╥╨╥┼╘┴├╔╤: ╙┼═┴╬╘╔╦┴ ╬┼╧╨╥┼─┼╠┼╬┴. +\ ы╧═╨╔╠╤├╔╤: ( C: orig dest -- ) +\ ф╧┬┴╫╔╘╪ ╙┼═┴╬╘╔╦╒ ╫╥┼═┼╬╔ ╫┘╨╧╠╬┼╬╔╤, ─┴╬╬╒└ ╬╔╓┼, ╦ ╘┼╦╒▌┼═╒ ╧╨╥┼─┼╠┼╬╔└, +\ ╥┴┌╥┼█╔╫ ╙╙┘╠╦╒ ╬┴┌┴─ dest. Є┴┌╥┼█╔╘╪ ╙╙┘╠╦╒ ╫╨┼╥┼─ orig, ╔╙╨╧╠╪┌╒╤ +\ ╨╧┌╔├╔└ ─╧┬┴╫╠┼╬╬╧╩ ╙┼═┴╬╘╔╦╔ ╫┘╨╧╠╬┼╬╔╤. +\ ў╥┼═╤ ╫┘╨╧╠╬┼╬╔╤: ( -- ) +\ Ё╥╧─╧╠╓╔╘╪ ╫┘╨╧╠╬┼╬╔┼ ╙ ╨╧┌╔├╔╔, ┌┴─┴╬╬╧╩ dest. + ?COMP + 3 <> IF -2005 THROW THEN \ ABORT" REPEAT ┬┼┌ BEGIN !" + DUP DP @ 2+ - DUP + SHORT? + IF SetJP 0xEB C, C, DROP + ELSE DROP BRANCH, THEN + >ORESOLVE +; IMMEDIATE + +: AGAIN \ 94 CORE EXT +\ щ╬╘┼╥╨╥┼╘┴├╔╤: ╙┼═┴╬╘╔╦┴ ╬┼╧╨╥┼─┼╠┼╬┴. +\ ы╧═╨╔╠╤├╔╤: ( C: dest -- ) +\ ф╧┬┴╫╔╘╪ ╙┼═┴╬╘╔╦╒ ╫╥┼═┼╬╔ ╫┘╨╧╠╬┼╬╔╤, ─┴╬╬╒└ ╬╔╓┼, ╦ ╘┼╦╒▌┼═╒ ╧╨╥┼─┼╠┼╬╔└, +\ ╥┴┌╥┼█╔╫ ╙╙┘╠╦╒ ╬┴┌┴─ dest. +\ ў╥┼═╤ ╫┘╨╧╠╬┼╬╔╤: ( -- ) +\ Ё╥╧─╧╠╓╔╘╪ ╫┘╨╧╠╬┼╬╔┼ ╙ ╨╧┌╔├╔╔, ┌┴─┴╬╬╧╩ dest. х╙╠╔ ─╥╒╟╔┼ ╒╨╥┴╫╠╤└▌╔┼ ╙╠╧╫┴ +\ ╬┼ ╔╙╨╧╠╪┌╒└╘╙╤, ╘╧ ╠└┬╧╩ ╨╥╧╟╥┴══╬┘╩ ╦╧─ ╨╧╙╠┼ AGAIN ╬┼ ┬╒─┼╘ ╫┘╨╧╠╬╤╘╪╙╤. + ?COMP 3 <> IF -2006 THROW THEN \ ABORT" AGAIN ┬┼┌ BEGIN !" + DUP DP @ 2+ - DUP + SHORT? + IF SetJP 0xEB C, C, DROP + ELSE DROP BRANCH, THEN DP @ TO :-SET +; IMMEDIATE + +: RECURSE \ 94 +\ щ╘┼╥╨╥┼╘┴├╔╤: ╙┼═┴╬╘╔╦┴ ╬┼ ╧╨╥┼─┼╠┼╬┴. +\ ы╧═╨╔╠╤├╔╤: ( -- ) +\ ф╧┬┴╫╔╘╪ ╙┼═┴╬╘╔╦╒ ╫┘╨╧╠╬┼╬╔╤ ╘┼╦╒▌┼╟╧ ╧╨╥┼─┼╠┼╬╔╤ ╫ ╘┼╦╒▌┼┼ ╧╨╥┼─┼╠┼╬╔┼. +\ ю┼╧─╬╧┌╬┴▐╬┴╤ ╙╔╘╒┴├╔╤ ╫╧┌╬╔╦┴┼╘, ┼╙╠╔ RECURSE ╔╙╨╧╠╪┌╒┼╘╙╤ ╨╧╙╠┼ DOES>. + ?COMP + LAST-NON DUP 0= + IF DROP LATEST NAME> THEN _COMPILE, +; IMMEDIATE diff --git a/programs/develop/SPForth/src/compiler/spf_immed_lit.f b/programs/develop/SPForth/src/compiler/spf_immed_lit.f new file mode 100644 index 0000000000..51b3227d6e --- /dev/null +++ b/programs/develop/SPForth/src/compiler/spf_immed_lit.f @@ -0,0 +1,147 @@ +( ╤ыютр эхьхфыхээюую т√яюыэхэш , шёяюы№чєхь√х яЁш ъюьяшы Ўшш + ўшёыют√ї ш ёЄЁюўэ√ї ышЄхЁрыют т Єхыю т√ёюъюєЁютэхтюую юяЁхфхыхэш . + ╬╤-эхчртшёшь√х юяЁхфхыхэш . + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + ╧ЁхюсЁрчютрэшх шч 16-ЁрчЁ фэюую т 32-ЁрчЁ фэ√щ ъюф - 1995-96уу + ╨хтшчш  - ёхэЄ сЁ№ 1999 + ╠юфшЇшЎшЁютрээю ╠ръёшьют√ь ╠.╬. + email:mak@mail.rtc.neva.ru + http://informer.rtc.neva.ru/ + Є ф {812}105-92-03 + Є Ё {812}552-47-64 +) + +: [LIT], DUP + [ 0x058D W, ' DUP , ] INLINE, + 0x058D W, , ; + +\ 0 [IF] +: ['] \ 94 +\ ╚эЄхЁяЁхЄрЎш : ёхьрэЄшър эхюяЁхфхыхэр. +\ ╩юьяшы Ўш : ( "name" -- ) +\ ╧ЁюяєёЄшЄ№ тхфє∙шх яЁюсхы√. ┬√фхышЄ№ name, юуЁрэшўхээюх яЁюсхыюь. ═рщЄш name. +\ ─юсртшЄ№ ёхьрэЄшъє тЁхьхэш т√яюыэхэш , фрээє■ эшцх, ъ Єхъє∙хьє юяЁхфхыхэш■. +\ ═хюяЁхфхыхээр  ёшЄєрЎш  тючэшърхЄ, хёыш name эх эрщфхэю. +\ ─юсртшЄ№ ёхьрэЄшъє тЁхьхэш т√яюыэхэш , фрээє■ эшцх, ъ Єхъє∙хьє юяЁхфхыхэш■, +\ ┬Ёхь  т√яюыэхэш : ( -- xt ) +\ ╧юыюцшЄ№ т√яюыэшь√щ Єюъхэ шьхэш xt эр ёЄхъ. ┬√яюыэшь√щ Єюъхэ, тючтЁр∙рхь√щ +\ ёъюьяшышЁютрээющ ЇЁрчющ "['] X"  ты хЄё  Єхь цх чэрўхэшхь, ўЄю ш тючтЁр∙рхьюх +\ "' X" тэх ёюёЄю эш  ъюьяшы Ўшш. + ?COMP ' [LIT], +; IMMEDIATE +\ [THEN] + +: LITERAL \ 94 CORE +\ ╚эЄхЁяЁхЄрЎш : ёхьрэЄшър эхюяЁхфхыхэр. +\ ╩юьяшы Ўш : ( x -- ) +\ ─юсртшЄ№ ёхьрэЄшъє тЁхьхэш т√яюыэхэш , фрээє■ эшцх, ъ Єхъє∙хьє юяЁхфхыхэш■. +\ ┬Ёхь  т√яюыэхэш : ( -- x ) +\ ╧юыюцшЄ№ x эр ёЄхъ. + STATE @ IF LIT, THEN +; IMMEDIATE + +: 2LITERAL \ 94 DOUBLE +\ ╚эЄхЁяЁхЄрЎш : ёхьрэЄшър эхюяЁхфхыхэр. +\ ╩юьяшы Ўш : ( x1 x2 -- ) +\ ─юсртшЄ№ ёхьрэЄшъє тЁхьхэш т√яюыэхэш , фрээє■ эшцх, ъ Єхъє∙хьє юяЁхфхыхэш■. +\ ┬Ёхь  т√яюыэхэш : ( -- x1 x2 ) +\ ╧юыюцшЄ№ ярЁє  ўххъ x1 x2 эр ёЄхъ. + STATE @ IF DLIT, THEN +; IMMEDIATE + +: SLITERAL \ 94 STRING + PSLITERAL ; IMMEDIATE + +: PSLITERAL +\ ╚эЄхЁяЁхЄрЎш : ёхьрэЄшър эх юяЁхфхыхэр. +\ ╩юьяшы Ўш : ( c-addr1 u -- ) +\ ─юсртшЄ№ ёхьрэЄшъє тЁхьхэш т√яюыэхэш , фрээє■ эшцх, ъ Єхъє∙хьє юяЁхфхыхэш■. +\ ┬Ёхь  т√яюыэхэш : ( -- c-addr2 u ) +\ ┬ючтЁрЄшЄ№ c-addr2 u, юяшё√тр■∙шх ёЄЁюъє, ёюёЄю ∙є■ шч ёшьтюыют, чрфрээ√ї +\ c-addr1 u тю тЁхь  ъюьяшы Ўшш. ╧ЁюуЁрььр эх ьюцхЄ ьхэ Є№ тючтЁр∙хээє■ +\ ёЄЁюъє. + + STATE @ IF SLIT, \ ELSE 2DUP + 0 SWAP C! + THEN +; + + +: S" \ 94+FILE +\ ╚эЄхЁяЁхЄрЎш : ( "ccc" -- c-addr u ) +\ ┬√фхышЄ№ ccc, юуЁрэшўхээ√х " (фтющэ√ьш ърт√ўърьш). ╟ряшёрЄ№ яюыєўхээє■ +\ ёЄЁюъє c-addr u тю тЁхьхээ√щ сєЇхЁ. ╠ръёшьры№эр  фышэр тЁхьхээюую +\ сєЇхЁр чртшёшЄ юЄ ЁхрышчрЎшш, эю эх ьюцхЄ с√Є№ ьхэ№°х 80 ёшьтюыют. +\ ╤ыхфє■∙хх шёяюы№чютрэшх S" ьюцхЄ яхЁхяшёрЄ№ тЁхьхээ√щ сєЇхЁ. +\ ╬схёяхўштрхЄё  ъръ ьшэшьєь юфшэ Єръющ сєЇхЁ. +\ ╩юьяшы Ўш : ( "ccc" -- ) +\ ┬√фхышЄ№ ccc, юуЁрэшўхээ√х " (фтющэ√ьш ърт√ўърьш). ─юсртшЄ№ ёхьрэЄшъє +\ тЁхьхэш т√яюыэхэш , юяшёрээє■ эшцх, ъ Єхъє∙хьє юяЁхфхыхэш■. +\ ┬Ёхь  т√яюыэхэш : ( -- c-addr u ) +\ ┬хЁэєЄ№ c-addr ш u, ъюЄюЁ√х юяшё√тр■Є ёЄЁюъє, ёюёЄю ∙є■ шч ёшьтюыют ccc. + [CHAR] " PARSE [COMPILE] SLITERAL +; IMMEDIATE + +: C" \ 94 CORE EXT +\ ╚эЄхЁяЁхЄрЎш : ёхьрэЄшър эх юяЁхфхыхэр. +\ ╩юьяшы Ўш : ( "ccc" -- ) +\ ┬√фхышЄ№ ccc, юуЁрэшўхээ√х " (фтющэ√ьш ърт√ўърьш) ш фюсртшЄ№ +\ ёхьрэЄшъє тЁхьхэш т√яюыэхэш , фрээє■ эшцх, ъ Єхъє∙хьє юяЁхфхыхэш■. +\ ┬Ёхь  т√яюыэхэш : ( -- c-addr ) +\ ┬ючтЁрЄшЄ№ c-addr, ёЄЁюъє ёю ёўхЄўшъюь, ёюёЄю ∙є■ шч ёшьтюыют ccc. +\ ╧ЁюуЁрььр эх фюыцэр ьхэ Є№ тючтЁр∙хээє■ ёЄЁюъє. + + [CHAR] " WORD [COMPILE] CLITERAL + +; IMMEDIATE + +: CLITERAL ( addr -- ) + STATE @ IF CLIT, THEN +; IMMEDIATE + +: ." \ 94 +\ ╚эЄхЁяЁхЄрЎш : ёхьрэЄшър эхюяЁхфхыхэр. +\ ╩юьяшы Ўш : ( "ccc" -- ) +\ ┬√фхышЄ№ ccc, юуЁрэшўхээюх " (фтющэ√ьш ърт√ўърьш). ─юсртшЄ№ ёхьрэЄшъє тЁхьхэш +\ т√яюыэхэш , фрээє■ эшцх, ъ Єхъє∙хьє юяЁхфхыхэш■. +\ ┬Ёхь  т√яюыэхэш : ( -- ) +\ ┬√тхёЄш ccc эр ¤ъЁрэ. + ?COMP + [COMPILE] S" + ['] TYPE COMPILE, +; IMMEDIATE + +: [CHAR] \ 94 +\ ╚эЄхЁяЁхЄрЎш : ёхьрэЄшър эхюяЁхфхыхэр. +\ ╩юьяшы Ўш : ( "name" -- ) +\ ╧ЁюяєёЄшЄ№ тхфє∙шх яЁюсхы√. ┬√фхышЄ№ name, юуЁрэшўхээюх яЁюсхырьш. ─юсртшЄ№ +\ ёхьрэЄшъє тЁхьхэш т√яюыэхэш , фрээє■ эшцх, ъ Єхъє∙хьє юяЁхфхыхэш■. +\ ┬Ёхь  т√яюыэхэш : ( -- char ) +\ ╧юыюцшЄ№ char, чэрўхэшх яхЁтюую ёшьтюыр name, эр ёЄхъ. + ?COMP + PARSE-WORD DROP C@ [COMPILE] LITERAL +; IMMEDIATE + + +: ABORT" \ 94 +\ ╚эЄхЁяЁхЄрЎш : ёхьрэЄшър эх юяЁхфхыхэр. +\ ╩юьяшы Ўш : ( "ccc" -- ) +\ ┬√фхышЄ№ ccc, юуЁрэшўхээ√х " (фтющэ√ьш ърт√ўърьш). ─юсртшЄ№ юяшёрээє■ +\ эшцх ёхьрэЄшъє тЁхьхэш т√яюыэхэш  т Єхъє∙хх юяЁхфхыхэшх. +\ ┬√яюыэхэшх: ( i*x x1 -- | i*x ) +\ ╙сЁрЄ№ x1 ёю ёЄхър. ┼ёыш ы■сющ сшЄ x1 эхэєыхтющ, т√тхёЄш эр ¤ъЁрэ ccc ш +\ т√яюыэшЄ№ чртшё ∙шх юЄ ЁхрышчрЎшш фхщёЄтш , тъы■ўр■∙шх ABORT. +\ : ABORT" \ 94 EXCEPTION EXT +\ ╨рё°шЁшЄ№ ёхьрэЄшъє CORE ABORT" ўЄюс√ с√ыю: +\ ╚эЄхЁяЁхЄрЎш : ёхьрэЄшър эх юяЁхфхыхэр. +\ ╩юьяшы Ўш : ( "ccc" -- ) +\ ┬√фхышЄ№ ccc, юуЁрэшўхээ√х " (фтющэ√ьш ърт√ўърьш). ─юсртшЄ№ ёхьрэЄшъє +\ тЁхьхэш т√яюыэхэш , фрээє■ эшцх, ъ Єхъє∙хьє юяЁхфхыхэш■. +\ ┬Ёхь  т√яюыэхэш : ( i*x x1 -- | i*x ) ( R: j*x -- | j*x ) +\ ╙сЁрЄ№ x1 ёю ёЄхър. ┼ёыш ы■сющ сшЄ x1 эхэєыхтющ, т√яюыэшЄ№ ЇєэъЎш■ +\ -2 THROW, т√тюф  ccc, хёыш эр ёЄхъх шёъы■ўхэшщ эхЄ ърфЁр шёъы■ўхэшщ. + ?COMP + ?COMP [COMPILE] C" + ['] (ABORT") COMPILE, + +; IMMEDIATE + diff --git a/programs/develop/SPForth/src/compiler/spf_immed_loop.f b/programs/develop/SPForth/src/compiler/spf_immed_loop.f new file mode 100644 index 0000000000..1b8d6b1ddb --- /dev/null +++ b/programs/develop/SPForth/src/compiler/spf_immed_loop.f @@ -0,0 +1,133 @@ +( Слова немедленного выполнения, используемые при компиляции + циклов в теле высокоуровневого определения. + ОС-независимые определения. + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + Преобразование из 16-разрядного в 32-разрядный код - 1995-96гг + Ревизия - сентябрь 1999 +) + + +HEX + + +: DO \ 94 +\ Интерпретация: семантика неопределена. +\ Компиляция: ( C: -- do-sys ) +\ Положить do-sys на стек управления. Добавить семантику времени выполнения, +\ данную ниже, к текущему определению. Семантика незавершена до разрешения +\ потребителем do-sys, таким как LOOP. +\ Время выполнения: ( n1|u1 n2|u2 -- ) ( R: -- loop-sys ) +\ Установить параметры цикла на индекс n2|u2 и предел n1|u1. Неопределенная +\ ситуация возникает, если n1|u1 и n2|u2 не одного типа. Все, что уже +\ находилось на стеке возвратов, становится недоступным до тех пор, пока не +\ будут убраны параметры цикла. + ?COMP + ['] C-DO INLINE, + SetOP 0x68 C, DP @ 4 ALLOT + SetOP 0x52 C, \ PUSH EDX + SetOP 0x53 C, \ PUSH EBX + 4 ALIGN-NOP + DP @ DUP TO :-SET +; IMMEDIATE + +: ?DO \ 94 CORE EXT +\ Интерпретация: семантика неопределена. +\ Компиляция: ( C: -- do-sys ) +\ Положить do-sys на стек управления. Добавить семантику времени выполнения, +\ данную ниже, к текущему определению. Семантика незавершена до разрешения +\ потребителем do-sys, таким как LOOP. +\ Время выполнения: ( n1|u1 n2|u2 -- ) ( R: -- | loop-sys ) +\ Если n1|u1 равно n2|u2, продолжить выполнение с места, данного потребителем +\ do-sys. Иначе установить параметры цикла на индекс n2|u2 и предел n1|u1 +\ и продолжить выполнение сразу за ?DO. Неопределенная +\ ситуация возникает, если n1|u1 и n2|u2 не одного типа. Все, что уже +\ находилось на стеке возвратов, становится недоступным до тех пор, пока не +\ будут убраны параметры цикла. + ?COMP + OP0 @ :-SET UMAX TO :-SET + ['] NIP DUP INLINE, INLINE, + 0xBB C, HERE 4 ALLOT + ['] C-?DO INLINE, + DP @ DUP TO :-SET +; IMMEDIATE + +: LOOP \ 94 +\ Интерпретация: ( C: do-sys -- ) +\ Добавить семантику времени выполнения, данную ниже, к текущему определению. +\ Разрешить все появления LEAVE между позицией, данной do-sys и следующей +\ позицией передачи управления для выполнения слов за LOOP. +\ Время выполнения: ( -- ) ( R: loop-sys1 -- | loop-sys2 ) +\ Неопределенная ситуация возникает, если параметры цикла недоступны. +\ Прибавить единицу к индексу цикла. Если индекс цикла стал равным пределу, +\ убрать параметры цикла и продолжить выполнение сразу за циклом. Иначе +\ продолжить выполнение с начала цикла. + ?COMP + 24 04FF W, C, \ inc dword [esp] + HERE 2+ - DUP SHORT? SetOP SetJP + IF + 71 C, C, \ jno short + ELSE + 4 - 0F C, 81 C, , \ jno near + THEN SetOP + 0C24648D , \ lea esp, 0c [esp] + DP @ SWAP ! +; IMMEDIATE + +: +LOOP \ 94 +\ Интерпретация: ( C: do-sys -- ) +\ Добавить семантику времени выполнения, данную ниже, к текущему определению. +\ Разрешить все появления LEAVE между позицией, данной do-sys и следующей +\ позицией передачи управления для выполнения слов за LOOP. +\ Время выполнения: ( n -- ) ( R: loop-sys1 -- | loop-sys2 ) +\ Неопределенная ситуация возникает, если параметры цикла недоступны. +\ Прибавить n к индексу цикла. Если индекс цикла не пересек границу между +\ пределом цикла минус единица и пределом цикла, продолжить выполнение с +\ начала цикла. Иначе убрать параметры цикла и продолжить выполнение сразу +\ за циклом. + ?COMP + ['] ADD[ESP],EAX INLINE, + ['] DROP INLINE, + HERE 2+ - DUP SHORT? SetOP SetJP + IF + 71 C, C, \ jno short + ELSE + 4 - 0F C, 81 C, , \ jno near + THEN SetOP + 0C24648D , \ lea esp, 0c [esp] + DP @ SWAP ! +; IMMEDIATE + +: I \ 94 +\ Интерпретация: семантика неопределена. +\ Выполнение: ( -- n|u ) ( R: loop-sys -- loop-sys ) +\ n|u - копия текущего (внутреннего) индекса цикла. Неопределенная ситуация +\ возникает, если парметры цикла недоступны. + ?COMP ['] C-I INLINE, +; IMMEDIATE + +: J \ 94 + ?COMP ['] C-J INLINE, +; IMMEDIATE + +: LEAVE \ 94 +\ Интерпретация: семантика неопределена. +\ Выполнение: ( -- ) ( R: loop-sys -- ) +\ Убрать текущие параметры цикла. Неопределенная ситуация возникает, если +\ они недоступны. Продолжить выполнение сразу за самыми внутренними DO ... LOOP +\ или DO ... +LOOP. + ?COMP + SetOP 0824648D , \ lea esp, 08 [esp] + SetOP C3 C, \ ret +; IMMEDIATE + +: UNLOOP \ 94 +\ Интерпретация: семантика неопределена. +\ Выполнение: ( -- ) ( R: loop-sys -- ) +\ Убрать параметры цикла текущего уровня. UNLOOP требуется для каждого +\ уровня вложения циклов перед выходом из определения по EXIT. +\ Неоднозначная ситуация возникает, если параметры цикла недоступны. + ?COMP + SetOP 0C24648D , \ lea esp, 0c [esp] +; IMMEDIATE + +DECIMAL diff --git a/programs/develop/SPForth/src/compiler/spf_immed_transl.f b/programs/develop/SPForth/src/compiler/spf_immed_transl.f new file mode 100644 index 0000000000..a6a6d8d48e --- /dev/null +++ b/programs/develop/SPForth/src/compiler/spf_immed_transl.f @@ -0,0 +1,120 @@ +( Слова немедленного выполнения, используемые в режиме компиляции. + ОС-независимые определения. + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + Преобразование из 16-разрядного в 32-разрядный код - 1995-96гг + Ревизия - сентябрь 1999 + Модифицированно Максимовым М.О. + email:mak@mail.rtc.neva.ru + http://informer.rtc.neva.ru/ + т д {812}105-92-03 + т р {812}552-47-64 +) + +: TO \ 94 CORE EXT +\ Интерпретация: ( x "name" -- ) +\ Пропустить ведущие пробелы и выделить name, ограниченное пробелом. +\ Записать x в name. Неопределенная ситуация возникает, если name не +\ определено через VALUE. +\ Компиляция: ( "name" -- ) +\ Пропустить ведущие пробелы и выделить name, ограниченное пробелом. +\ Добавить семантику времени выполнения, данную ниже, к текущему определению. +\ Неопределенная ситуация возникает, если name не определено через VALUE. +\ Время выполнения: ( x -- ) +\ Записать x в name. +\ Примечание: Неопределенная ситуация возникает, если POSTPONE или [COMPILE] +\ применяются к TO. + ' + >BODY CELL+ STATE @ + IF COMPILE, ELSE EXECUTE THEN +; IMMEDIATE + +: COMPILE,_M COMPILE, ; + +: POSTPONE \ 94 +\ Интерпретация: семантика не определена. +\ Компиляция: ( "name" -- ) +\ Пропустить ведущие разделители. Выделить имя, ограниченное пробелами. +\ Найти имя. Добавить семантику компиляции имени в текущее определение. + ?COMP + PARSE-WORD SFIND DUP + 0= IF -321 THROW THEN + 1 = IF COMPILE, + ELSE LIT, ['] COMPILE,_M COMPILE, THEN +; IMMEDIATE + +: \ \ 94 CORE EXT +\ Компиляция: Выполнить семантику выполнения, данную ниже. +\ Выполнение: ( "ccc" -- ) +\ Выделить и отбросить остаток разбираемой области. +\ \ - слово немедленного исполнения. + 1 PARSE 2DROP +; IMMEDIATE + +: .( \ 94 CORE EXT +\ Компиляция: Выполнить семантику выполнения, данную ниже. +\ Выполнение: ( "ccc" -- ) +\ Выделить и вывести на дисплей ccc, ограниченные правой скобкой ")". +\ .( - слово немедленного исполнения. + [CHAR] ) PARSE TYPE +; IMMEDIATE + +: ( ( "ccc" -- ) \ 94 FILE +\ Расширить семантику CORE (, включив: +\ Когда разбирается текстовый файл, если конец разбираемой области достигнут +\ раньше, чем найдена правая скобка, снова заполнить входной буфер следующей +\ строкой из файла, установить >IN в ноль и продолжать разбор, повторяя +\ этот процесс до тех пор, пока не будет найдена правая скобка или не +\ будет достигнут конец файла. + BEGIN + [CHAR] ) DUP PARSE + C@ = 0= + WHILE + REFILL 0= IF EXIT THEN + REPEAT +; IMMEDIATE + +: [COMPILE] \ 94 CORE EXT +\ Интерпретация: семантика неопределена. +\ Компиляция: ( "name" -- ) +\ Пропустить ведущие пробелы. Выделить name, ограниченное пробелами. +\ Найти name. Если имя имеет иную семантику компиляции, чем "по-умолчанию", +\ добавить ее в текущее определение; иначе добавить семантику выполнения name. +\ Неопределенная ситуация возникает, если name не найдено. + ?COMP + ' + COMPILE, +; IMMEDIATE + +: ; [;] ; IMMEDIATE + +: [;] ( -- ) + RET, [COMPILE] [ REVEAL + ClearJpBuff + 0 TO LAST-NON +; + +: EXIT + RET, +; IMMEDIATE + +: \EOF ( -- ) +\ Заканчивает трансляцию текущего потока + BEGIN REFILL 0= UNTIL + POSTPONE \ +; + +: FIELD ( offset size "new-name< >" -- offset+size ) + : OVER + DUP IF DUP LIT, ['] + COMPILE, + THEN DROP + POSTPONE ; + + ; + +0 [IF] +: -- + CREATE OVER , + + (DOES1) (DOES2) @ + +; + +[ELSE] +: -- FIELD ; +[THEN] diff --git a/programs/develop/SPForth/src/compiler/spf_literal b/programs/develop/SPForth/src/compiler/spf_literal new file mode 100644 index 0000000000..d8c589e9c4 --- /dev/null +++ b/programs/develop/SPForth/src/compiler/spf_literal @@ -0,0 +1,80 @@ +( Преобразование числовых литералов при интерпретации. + ОС-независимые определения. + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + Преобразование из 16-разрядного в 32-разрядный код - 1995-96гг + Ревизия - сентябрь 1999 +) + +: ?LITERAL1 ( T -> ... ) + \ преобразовать строку в число + 0 0 ROT COUNT + OVER C@ [CHAR] - = IF 1- SWAP 1+ SWAP TRUE ELSE FALSE THEN >R + >NUMBER ." N{" 2DUP TYPE ." }" + DUP 1 > IF -2001 THROW THEN \ ABORT" -?" + IF C@ [CHAR] . <> IF -2002 THROW THEN \ ABORT" -??" + R> IF DNEGATE THEN + [COMPILE] 2LITERAL + ELSE DROP D>S + R> IF NEGATE THEN + [COMPILE] LITERAL + THEN +; +: ?SLITERAL1 ( c-addr u -> ... ) + \ преобразовать строку в число + 0 0 2SWAP + OVER C@ [CHAR] - = IF 1- SWAP 1+ SWAP TRUE ELSE FALSE THEN >R + >NUMBER + DUP 1 > IF -2001 THROW THEN \ ABORT" -?" + IF C@ [CHAR] . <> IF -2002 THROW THEN \ ABORT" -??" + R> IF DNEGATE THEN + [COMPILE] 2LITERAL + ELSE DROP D>S + R> IF NEGATE THEN + [COMPILE] LITERAL + THEN +; +: HEX-LITERAL ( T -> ... ) + BASE @ >R HEX + 0 0 ROT COUNT 2- SWAP 2+ SWAP >NUMBER 2DROP D>S [COMPILE] LITERAL + R> BASE ! +; +: HEX-SLITERAL ( T -> ... ) + BASE @ >R HEX + 0 0 2SWAP 2- SWAP 2+ SWAP >NUMBER 2DROP D>S [COMPILE] LITERAL + R> BASE ! +; + +: ?LITERAL2 ( c-addr -- ... ) + ( расширенный вариант ?LITERAL1: + если строка - не число, то пытаемся трактовать её + как имя файла для авто-INCLUDED) + DUP COUNT 2 MIN S" 0x" COMPARE 0= + IF HEX-LITERAL EXIT THEN + DUP >R ['] ?LITERAL1 CATCH + IF DROP R> COUNT + OVER C@ [CHAR] " = IF 2 - SWAP 1+ SWAP THEN ( убрал кавычки, если есть) + 2DUP + 0 SWAP C! + ['] INCLUDED CATCH + DUP 2 = OVER 3 = OR ( файл не найден или путь не найден ) + IF -2003 THROW \ ABORT" -???" + ELSE THROW THEN + ELSE RDROP + THEN +; +: ?SLITERAL2 ( c-addr u -- ... ) + ( расширенный вариант ?SLITERAL1: + если строка - не число, то пытаемся трактовать её + как имя файла для авто-INCLUDED) + 2DUP 2 MIN S" 0x" COMPARE 0= + IF HEX-SLITERAL EXIT THEN + 2DUP 2>R ['] ?SLITERAL1 CATCH + IF 2DROP 2R> + OVER C@ [CHAR] " = IF 2 - SWAP 1+ SWAP THEN ( убрал кавычки, если есть) + 2DUP + 0 SWAP C! + ['] INCLUDED CATCH + DUP 2 = OVER 3 = OR ( файл не найден или путь не найден ) + IF -2003 THROW \ ABORT" -???" + ELSE THROW THEN + ELSE 2R> 2DROP + THEN +; diff --git a/programs/develop/SPForth/src/compiler/spf_literal.f b/programs/develop/SPForth/src/compiler/spf_literal.f new file mode 100644 index 0000000000..b599224d87 --- /dev/null +++ b/programs/develop/SPForth/src/compiler/spf_literal.f @@ -0,0 +1,64 @@ +( Преобразование числовых литералов при интерпретации. + ОС-независимые определения. + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + Преобразование из 16-разрядного в 32-разрядный код - 1995-96гг + Ревизия - сентябрь 1999 +) + +: ?SLITERAL1 ( c-addr u -> ... ) + \ преобразовать строку в число + 0 0 2SWAP + OVER C@ [CHAR] - = IF 1- SWAP 1+ SWAP TRUE ELSE FALSE THEN >R + >NUMBER + DUP 1 > IF ." -?" -2001 THROW THEN \ ABORT" -?" + IF C@ [CHAR] . <> IF -2002 THROW THEN \ ABORT" -??" + R> IF DNEGATE THEN + [COMPILE] 2LITERAL + ELSE DROP D>S + R> IF NEGATE THEN + [COMPILE] LITERAL + THEN +; +: ?LITERAL1 ( T -> ... ) + \ преобразовать строку в число + COUNT ?SLITERAL1 +; +: HEX-SLITERAL ( addr u -> flag ) + BASE @ >R HEX + 0 0 2SWAP 2- SWAP 2+ SWAP >NUMBER + ?DUP IF + 1 = SWAP C@ [CHAR] L = AND 0= IF 2DROP FALSE R> BASE ! EXIT THEN + ELSE DROP THEN + D>S POSTPONE LITERAL TRUE + R> BASE ! +; + +: INCLUDED_S -2003 THROW + INCLUDED ; + +: ?SLITERAL2 ( c-addr u -- ... ) + ( расширенный вариант ?SLITERAL1: + если строка - не число, то пытаемся трактовать её + как имя файла для авто-INCLUDED) + DUP 1 > IF OVER W@ 0x7830 ( 0x) = + IF 2DUP 2>R HEX-SLITERAL IF RDROP RDROP EXIT ELSE 2R> THEN THEN + THEN + 2DUP 2>R ['] ?SLITERAL1 CATCH + IF 2DROP 2R> + OVER C@ [CHAR] " = OVER 2 > AND + IF 2 - SWAP 1+ SWAP THEN ( убрал кавычки, если есть) + 2DUP + 0 SWAP C! + ['] INCLUDED_S CATCH + DUP 2 = OVER 3 = OR OVER 161 = OR ( файл не найден или путь не найден, + или неразрешенное имя файла) + IF -2003 THROW \ ABORT" -???" + ELSE THROW THEN + ELSE RDROP RDROP + THEN +; +: ?LITERAL2 ( c-addr -- ... ) + ( расширенный вариант ?LITERAL1: + если строка - не число, то пытаемся трактовать её + как имя файла для авто-INCLUDED) + COUNT ?SLITERAL2 +; diff --git a/programs/develop/SPForth/src/compiler/spf_modules.f b/programs/develop/SPForth/src/compiler/spf_modules.f new file mode 100644 index 0000000000..9a097098ad --- /dev/null +++ b/programs/develop/SPForth/src/compiler/spf_modules.f @@ -0,0 +1,37 @@ +( Working with forth modules + Copyright [C] 2000 D.Yakimov day@forth.org.ru +) + +: MODULE: ( "name" -- old-current ) +\ start a forth module +\ х╙╠╔ ╘┴╦╧╩ ═╧─╒╠╪ ╒╓┼ ╙╒▌┼╙╘╫╒┼╘, ╨╥╧─╧╠╓╔╘╪ ╦╧═╨╔╠╤├╔└ ╫ ╬┼╟╧ + >IN @ ['] ' CATCH + IF >IN ! VOCABULARY GET-CURRENT + ALSO LATEST NAME> EXECUTE DEFINITIONS + ELSE + NIP GET-CURRENT SWAP ALSO EXECUTE DEFINITIONS + THEN +; + +: EXPORT ( old-current -- old-current ) +\ export some module definitions + DUP SET-CURRENT +; + +: ;MODULE ( old-current -- ) +\ finish the module + SET-CURRENT PREVIOUS +; + +: {{ ( "name" -- ) +\ ы╠┴─┼╘ ╫ ORDER wordlist, ╦-┘╩ ─┴╙╘ "name" +\ ╔╠╔ vocabulary ┼╙╠╔ "name" - vocabulary + DEPTH >R + ALSO ' EXECUTE + DEPTH R> <> IF \ wid on the stack? + CONTEXT ! THEN +; IMMEDIATE + +: }} + PREVIOUS +; IMMEDIATE \ No newline at end of file diff --git a/programs/develop/SPForth/src/compiler/spf_parser.f b/programs/develop/SPForth/src/compiler/spf_parser.f new file mode 100644 index 0000000000..8691592820 --- /dev/null +++ b/programs/develop/SPForth/src/compiler/spf_parser.f @@ -0,0 +1,128 @@ +( Парсер строки с исходным текстом программы на Форте. + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + Сентябрь 1999: PARSE и SKIP преобразованы из CODE + в высокоуровневые определения. Переменные преобразованы в USER. +) + +512 VALUE C/L \ максимальный размер строки, которую можно ввести в TIB + +: SOURCE ( -- c-addr u ) \ 94 +\ c-addr - адрес входного буфера. u - количество символов в нем. + TIB #TIB @ +; + +: SOURCE! ( c-addr u -- ) +\ установить c-addr u входным буфером (точнее, областью разбора - PARSE-AREA) + #TIB ! TO TIB >IN 0! ; + +: EndOfChunk ( -- flag ) + >IN @ SOURCE NIP < 0= \ >IN не меньше, чем длина чанка +; + +: CharAddr ( -- c-addr ) + SOURCE DROP >IN @ +\ CR ." CA=" DEPTH .SN + + +; + +: PeekChar ( -- char ) + CharAddr C@ \ символ из текущего значения >IN +; + +: IsDelimiter ( char -- flag ) + BL 1+ < +; + +: GetChar ( -- char flag ) + EndOfChunk + IF 0 FALSE + ELSE PeekChar TRUE THEN +; + +: OnDelimiter ( -- flag ) + GetChar SWAP IsDelimiter AND +; + +: SkipDelimiters ( -- ) \ пропустить пробельные символы + BEGIN + OnDelimiter + WHILE + >IN 1+! + REPEAT >IN @ >IN_WORD ! ; + +: OnNotDelimiter ( -- flag ) + GetChar SWAP IsDelimiter 0= AND +; + +: SkipWord ( -- ) \ пропустить непробельные символы + BEGIN + OnNotDelimiter + WHILE + >IN 1+! + REPEAT +; +: SkipUpTo ( char -- ) \ пропустить до символа char + BEGIN + DUP GetChar \ ." SC=" DUP M. + >R <> R> AND + WHILE + >IN 1+! + REPEAT DROP +; + +: ParseWord ( -- c-addr u ) + CharAddr \ CR ." P=" DUP 9 TYPE + >IN @ +\ CR ." XZ=" DEPTH .SN + SkipWord >IN @ +\ CR ." X1=" DEPTH .SN + - NEGATE +\ CR ." X2=" DEPTH .SN +\ CR ." PZ=" 2DUP TYPE +; +CREATE UPPER_SCR 31 ALLOT + +: UPC ( c -- c' ) + DUP [CHAR] Z U> + IF 0xDF AND + THEN ; + +: UPPER ( ADDR LEN -- ) + 0 ?DO COUNT UPC OVER 1- C! LOOP DROP ; + +: UPPER_NW ( ADDR LEN -- ADDR' LEN ) + UPPER_SCR PLACE + UPPER_SCR COUNT 2DUP UPPER ; + +: PARSE-WORD ( "name" -- c-addr u ) + \ http://www.complang.tuwien.ac.at/forth/ansforth/parse-word.html + \ это слово теперь будем использовать в INTERPRET + \ - удобнее: не использует WORD и, соответственно, не мусорит в HERE; + \ и разделителями считает все что <=BL, в том числе TAB и CRLF + SkipDelimiters ParseWord + >IN 1+! \ пропустили разделитель за словом +\ UPPER_V @ EXECUTE +; + +: NextWord PARSE-WORD ; +: PARSE-NAME PARSE-WORD ; + +: PARSE ( char "ccc" -- c-addr u ) \ 94 CORE EXT +\ Выделить ccc, ограниченное символом char. +\ c-addr - адрес (внутри входного буфера), и u - длина выделенной строки. +\ Если разбираемая область была пуста, результирующая строка имеет нулевую +\ длину. + CharAddr >IN @ + ROT SkipUpTo + >IN @ - NEGATE + >IN 1+! +; + +: PSKIP ( char "ccc" -- ) +\ Пропустить разделители char. + BEGIN + DUP GetChar >R = R> AND + WHILE + >IN 1+! + REPEAT DROP +; diff --git a/programs/develop/SPForth/src/compiler/spf_read_source.f b/programs/develop/SPForth/src/compiler/spf_read_source.f new file mode 100644 index 0000000000..43398197b1 --- /dev/null +++ b/programs/develop/SPForth/src/compiler/spf_read_source.f @@ -0,0 +1,33 @@ +( Чтение строки исходного текста из входного потока: консоли или файла. + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + Ревизия: Сентябрь 1999 +) + +VECT
+
+: CONSOLE-HANDLES \ $$$$
+;
+
+: QUERY ( --- )
+\ Read a line from the terminal into the terminal input buffer.
+  TIB 80 ACCEPT #TIB ! 0 >IN ! ;
+
+: FREFILL ( h -- flag )
+  TIB C/L ROT READ-LINE THROW \ TAKEN-TIB
+  SWAP  #TIB !  0 >IN ! CURSTR 1+!
+  0 SOURCE + C!
+;
+
+
+: REFILL ( --- f)
+\ Refill the current input source when it is exhausted. f is
+\ true if it was successfully refilled.
+
+  SOURCE-ID -1 = IF
+   0 \ Not refillable for EVALUATE
+  ELSE   SOURCE-ID
+   IF    SOURCE-ID FREFILL
+   ELSE  QUERY -1 \ Always successful from terminal.
+   THEN
+  THEN
+;
diff --git a/programs/develop/SPForth/src/compiler/spf_translate.f b/programs/develop/SPForth/src/compiler/spf_translate.f
new file mode 100644
index 0000000000..17ce665d98
--- /dev/null
+++ b/programs/develop/SPForth/src/compiler/spf_translate.f
@@ -0,0 +1,222 @@
+( Трансляция исходных текстов программ.
+  ОС-независимые определения.
+  Copyright [C] 1992-1999 A.Cherezov ac@forth.org
+  Преобразование из 16-разрядного в 32-разрядный код - 1995-96гг
+  Ревизия - сентябрь 1999
+)
+
+VECT OK.
+VECT 
+VECT ?LITERAL +VECT ?SLITERAL +USER-VALUE SOURCE-ID-XT \ если не равен нулю, то содержит заполняющее + +: DEPTH ( -- +n ) \ 94 +\ +n - число одинарных ячеек, находящихся на стеке данных перед +\ тем как туда было помещено +n. + SP@ S0 @ - NEGATE 4 U/ +; +: ?STACK ( -> ) \ выдать ошибку "исчерпание стека", если он более чем пуст + SP@ S0 @ SWAP U< IF S0 @ SP! -4 THROW THEN +; +: ?COMP ( -> ) + STATE @ 0= IF -312 THROW THEN ( Только для режима компиляции ) +; + +: WORD ( char "ccc" -- c-addr ) \ 94 +\ Пропустить ведущие разделители. Выбрать символы, ограниченные +\ разделителем char. +\ Исключительная ситуация возникает, если длина извлеченной строки +\ больше максимальной длины строки со счетчиком. +\ c-addr - адрес переменной области, содержащей извлеченное слово +\ в виде строки со счетчиком. +\ Если разбираемая область пуста или содержит только разделители, +\ результирующая строка имеет нулевую длину. +\ В конец строки помещается пробел, не включаемый в длину строки. +\ Программа может изменять символы в строке. + DUP PSKIP PARSE + DUP HERE C! HERE 1+ SWAP CMOVE + BL HERE COUNT + ! + HERE +; +1 [IF] +: ' ( "name" -- xt ) \ 94 +\ Пропустить ведущие пробелы. Выделить name, ограниченное пробелом. Найти name +\ и вернуть xt, выполнимый токен для name. Неопределенная ситуация возникает, +\ если name не найдено. +\ Во время интерпретации ' name EXECUTE равносильно name. + PARSE-WORD SFIND 0= + IF -321 THROW THEN ( -? ) +; + +[THEN] + +: CHAR ( "name" -- char ) \ 94 +\ Пропустить ведущие разделители. Выделить имя, органиченное пробелами. +\ Положить код его первого символа на стек. + PARSE-WORD DROP C@ ; + +CREATE ILAST-WORD 0 , 0 , + +: INTERPRET_ ( -> ) \ интерпретировать входной поток + SAVEERR? ON + BEGIN + PARSE-WORD DUP + WHILE 2DUP ILAST-WORD 2! +\ ." <" TYPE ." >" + SFIND ?DUP + IF + STATE @ = + IF COMPILE, ELSE EXECUTE THEN + ELSE + S" NOTFOUND" SFIND + IF EXECUTE + ELSE 2DROP ?SLITERAL THEN +\ ?SLITERAL + THEN + ?STACK + REPEAT 2DROP +; + +VARIABLE &INTERPRET +' INTERPRET_ &INTERPRET ! + +: INTERPRET &INTERPRET @ EXECUTE ; + +\ : HALT ( ERRNUM -> ) \ выход с кодом ошибки +\ >R exit ; + +: .SN ( n --) +\ Распечатать n верхних элементов стека + >R BEGIN + R@ + WHILE + SP@ R@ 1- CELLS + @ DUP 0< + IF DUP U>D <# #S #> TYPE + ." (" ABS 0 <# #S [CHAR] - HOLD #> TYPE ." ) " ELSE . THEN + R> 1- >R + REPEAT RDROP +; + +: OK1 + STATE @ 0= + IF ." Ok" DEPTH 70 UMIN + 0 ?DO [CHAR] . EMIT LOOP CR + THEN +; + +: EVAL-WORD ( a u -- ) +\ интерпретировать ( транслировать) слово с именем a u + SFIND ?DUP IF + STATE @ = IF + COMPILE, ELSE + EXECUTE THEN + ELSE + -2003 THROW THEN +; + +: [ \ 94 CORE +\ Интерпретация: семантика неопределена. +\ Компиляция: Выполнить семантику выполнения, данную ниже. +\ Выполнение: ( -- ) +\ Установить состояние интерпретации. [ слово немедленного выполнения. + STATE 0! +; IMMEDIATE + +: ] ( -- ) \ 94 CORE +\ Установить состояние компиляции. + TRUE STATE ! +; + +: QUIT ( -- ) ( R: i*x ) \ CORE 94 +\ Сбросить стек возвратов, записать ноль в SOURCE-ID. +\ Установить стандартный входной поток и состояние интерпретации. +\ Не выводить сообщений. Повторять следующее: +\ - Принять строку из входного потока во входной буфер, обнулить >IN +\ и интепретировать. +\ - Вывести зависящее от реализации системное приглашение, если +\ система находится в состоянии интерпретации, все процессы завершены, +\ и нет неоднозначных ситуаций. + +\ R0 @ RP! ( не делаем этого, чтобы позволить "['] QUIT CATCH" ) + CONSOLE-HANDLES + 0 TO SOURCE-ID + [COMPILE] [ +
+; + +: MAIN1 ( -- ) + BEGIN REFILL + WHILE INTERPRET OK. + REPEAT _BYE +; +' MAIN1 TO
+ +: SAVE-SOURCE ( -- i*x i ) + SOURCE-ID-XT SOURCE-ID >IN @ SOURCE CURSTR @ 6 +; + +: RESTORE-SOURCE ( i*x i -- ) + 6 <> IF ABORT THEN + CURSTR ! SOURCE! >IN ! TO SOURCE-ID TO SOURCE-ID-XT +; + +: EVALUATE-WITH ( ( i*x c-addr u xt -- j*x ) +\ Считая c-addr u входным потоком, вычислить её интерпретатором xt. + SAVE-SOURCE N>R + >R SOURCE! -1 TO SOURCE-ID + R> ( ['] INTERPRET) CATCH + NR> RESTORE-SOURCE + THROW +; + +: EVALUATE ( i*x c-addr u -- j*x ) \ 94 +\ Сохраняет текущие спецификации входного потока. +\ Записывает -1 в SOURCE-ID. Делает строку, заданную c-addr u, +\ входным потоком и входным буфером, устанавливает >IN в 0 +\ и интерпретирует. Когда строка разобрана до конца - восстанавливает +\ спецификации предыдущего входного потока. +\ Другие изменения стека определяются выполняемыми по EVALUATE словами. + ['] INTERPRET EVALUATE-WITH +; + +: FQUIT + BEGIN REFILL + WHILE INTERPRET + REPEAT ; + +: INCLUDE-FILE ( i*x fileid -- j*x ) \ 94 FILE + >IN @ >R + SOURCE-ID >R TO SOURCE-ID + RP@ #TIB @ ALIGNED - RP! + TIB RP@ #TIB @ CMOVE + SOURCE 2>R +\ TCR ." IF" + ['] FQUIT CATCH SAVEERR +\ ['] NOOP CATCH SAVEERR + + 2R> SOURCE! + RP@ TIB #TIB @ CMOVE + RP@ #TIB @ ALIGNED + RP! + R> TO SOURCE-ID + R> >IN ! THROW ; + +: INCLUDED_ ( c-addr u ---- ) +\ Open the file with name c-addr u and interpret all lines contained in it. + R/O OPEN-FILE THROW \ ABORT" Can't open include file" + DUP >R + ['] INCLUDE-FILE CATCH + R> CLOSE-FILE DROP THROW +; + +: REQUIRED ( waddr wu laddr lu -- ) + 2SWAP SFIND + IF DROP 2DROP + ELSE 2DROP INCLUDED_ THEN +; +: REQUIRE ( "word" "libpath" -- ) + PARSE-NAME PARSE-NAME 2DUP + 0 SWAP C! + REQUIRED +; + +: AUTOEXEC S" /sys/INIT.F" INCLUDED_ ; diff --git a/programs/develop/SPForth/src/compiler/spf_wordlist.f b/programs/develop/SPForth/src/compiler/spf_wordlist.f new file mode 100644 index 0000000000..82f1901a15 --- /dev/null +++ b/programs/develop/SPForth/src/compiler/spf_wordlist.f @@ -0,0 +1,188 @@ +( Создание словарых статей и словарей WORDLIST. + ОС-независимые определения. + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + Преобразование из 16-разрядного в 32-разрядный код - 1995-96гг + Ревизия - сентябрь 1999 + Модифицированно Максимовым М.О. + email:mak@mail.rtc.neva.ru + http://informer.rtc.neva.ru/ + т д {812}105-92-03 + т р {812}552-47-64 +) +HEX +1 CONSTANT &IMMEDIATE \ константа для высечения флажка IMMEDIATE +2 CONSTANT &VOC + +\ Возвратить wid - идентификатор списка слов, включающего все стандартные +\ слова, обеспечиваемые реализацией. Этот список слов изначально список +\ компиляции и часть начального порядка поиска. +: >BODY ( xt -- a-addr ) \ 94 +\ a-addr - адрес поля данных, соответствующий xt. +\ Исключительная ситуация возникает, если xt не от слова, +\ определенного через CREATE. +( 1+ @ было в версии 2.5 ) + 5 + +; + +: SWORD, ( addr u wid -> ) \ добавление заголовка статьи с именем, + \ заданным строкой addr u, к списку, заданному wid. + \ Формирует только поля имени и связи с + \ отведением памяти по ALLOT. + HERE CELL+ + DUP LAST ! + SWAP DUP @ , ! + S, 0 C, +; + +: WORDLIST ( -- wid ) \ 94 SEARCH +\ Создает новый пустой список слов, возвращая его идентификатор wid. +\ Новый список слов может быть возвращен из предварительно распределенных +\ списков слов или может динамически распределяться в пространстве данных. +\ Система должна допускать создание как минимум 8 новых списков слов в +\ дополнение к имеющимся в системе. + HERE VOC-LIST @ , VOC-LIST ! + HERE 0 , \ здесь будет указатель на имя последнего слова списка + 0 , \ здесь будет указатель на имя списка для именованых + 0 , \ wid словаря-предка + 0 , \ класс словаря = wid словаря, определяющего свойства данного +; + + +: CLASS! ( cls wid -- ) CELL+ CELL+ CELL+ ! ; +: CLASS@ ( wid -- cls ) CELL+ CELL+ CELL+ @ ; +: PAR! ( Pwid wid -- ) CELL+ CELL+ ! ; +: PAR@ ( wid -- Pwid ) CELL+ CELL+ @ ; + + +: ID. ( NFA[E] -> ) + ZCOUNT TYPE +; + +\ -9 -- flags +\ -8 -- cfa +\ -4 -- LFA +\ 0 -- NFA + +Code NAME>L ;( NFA -> LFA ) + LEA EAX, [EAX-4] + RET +EndCode + +Code NAME>C ;( NFA -> 'CFA ) + LEA EAX, [EAX-8] + RET +EndCode + +Code NAME> ;( NFA -> CFA ) + MOV EAX, [EAX-8] + RET +EndCode + +Code NAME>F ;( NFA -> FFA ) + LEA EAX, [EAX-9] + RET +EndCode + +Code CDR ;( NFA1 -> NFA2 ) + OR EAX, EAX + SIF 0<> + MOV EAX, [EAX-4] + STHEN + RET +EndCode + +: ?IMMEDIATE ( NFA -> F ) + NAME>F C@ &IMMEDIATE AND +; + +: ?VOC ( NFA -> F ) + NAME>F C@ &VOC AND +; +0 [IF] +: IMM ( -- ) \ 94 +\ Сделать последнее определение словом немедленного исполнения. +\ Исключительная ситуация возникает, если последнее определение +\ не имеет имени. + LAST @ NAME>F DUP C@ &IMMEDIATE OR SWAP ." I=" 2DUP H. H. +; +: IMMEDIATE ( -- ) \ 94 +\ Сделать последнее определение словом немедленного исполнения. +\ Исключительная ситуация возникает, если последнее определение +\ не имеет имени. + LAST @ NAME>F DUP C@ &IMMEDIATE OR SWAP C! +; +[THEN] +: VOC ( -- ) +\ Пометить последнее определенное слово признаком "словарь". + LAST @ NAME>F DUP C@ &VOC OR SWAP C! +; + +\ ============================================== +\ отладка - поиск слова по адресу в его теле + + +\ ============================================== +\ отладка - поиск слова по адресу в его теле + +: N_UMAX ( nfa nfa1 -- nfa|nfa1 ) + OVER DUP IF NAME> THEN + OVER DUP IF NAME> THEN U< IF NIP EXIT THEN DROP ; + +: WL_NEAR_NFA ( addr wid - addr nfa | addr 0 ) + @ + BEGIN 2DUP DUP IF NAME> THEN U< + WHILE CDR + REPEAT +; + +0 +[IF] + +: NEAR_NFA ( addr - nfa addr | 0 addr ) + 0 SWAP + VOC-LIST + BEGIN @ DUP + WHILE DUP >R CELL+ WL_NEAR_NFA SWAP >R N_UMAX R> R> + REPEAT DROP +; + +[ELSE] + +: WL_NEAR_NFA_N ( addr nfa - addr nfa | addr 0 ) + BEGIN 2DUP DUP IF NAME> THEN U< + WHILE CDR + REPEAT +; + +: WL_NEAR_NFA_M ( addr wid - nfa2 addr | 0 addr ) + 0 -ROT + CELL+ @ + BEGIN DUP + WHILE WL_NEAR_NFA_N \ nfa addr nfa1 + SWAP >R + DUP >R N_UMAX + R> DUP IF CDR THEN + R> SWAP + REPEAT DROP +; + +: NEAR_NFA ( addr - nfa addr | 0 addr ) + 0 SWAP + VOC-LIST + BEGIN @ DUP + WHILE DUP >R WL_NEAR_NFA_M + >R N_UMAX R> R> + REPEAT DROP +; + +[THEN] + +: WordByAddr ( addr -- c-addr u ) +\ найти слово, телу которого принадлежит данный адрес + DUP DP @ U> IF DROP S" " EXIT THEN + NEAR_NFA DROP DUP 0= IF DROP S" " EXIT THEN + COUNT +; + + +DECIMAL \ No newline at end of file diff --git a/programs/develop/SPForth/src/compiler/spf_words.f b/programs/develop/SPForth/src/compiler/spf_words.f new file mode 100644 index 0000000000..37b1709d71 --- /dev/null +++ b/programs/develop/SPForth/src/compiler/spf_words.f @@ -0,0 +1,45 @@ +( Печать списка слов словаря - WORDS. + ОС-независимые определения. + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + Преобразование из 16-разрядного в 32-разрядный код - 1995-96гг + Ревизия - сентябрь 1999 +) + +VARIABLE NNN + +: ?CR-BREAK ( NFA -- NFA TRUE | FALSE ) + DUP + IF DUP ZCOUNT NIP AT-XY? DROP + SCR_WIDTH-S > + IF CR + NNN @ + IF -1 NNN +! TRUE + ELSE ." more?" CR 16 NNN ! + KEY [CHAR] Q <> AND ?DUP 0<> + THEN + ELSE TRUE + THEN + THEN +; + +: NLIST ( A -> ) + @ + CR W-CNT 0! 16 NNN ! + BEGIN ?CR-BREAK + WHILE + W-CNT 1+! + DUP ID. \ 9 EMIT + SPACE AT-XY? >R 8 / 1+ 8 * R> AT-XY + CDR + REPEAT KEY? IF KEY DROP THEN + CR CR ." Words: " W-CNT @ U. CR +; + +: WORDS ( -- ) \ 94 TOOLS +\ Список имен определений в первом списке слов порядка поиска. Формат зависит +\ от реализации. +\ WORDS может быть реализован с использованием слов форматного преобразования +\ чисел. Соответственно, он может испортить перемещаемую область, +\ идентифицируемую #>. + CONTEXT @ NLIST +; + diff --git a/programs/develop/SPForth/src/global.f b/programs/develop/SPForth/src/global.f new file mode 100644 index 0000000000..dda365ff63 --- /dev/null +++ b/programs/develop/SPForth/src/global.f @@ -0,0 +1,46 @@ + +: TYPE TYPE ; +: (ABORT") (ABORT") ; +\ : COMPILE, COMPILE, ; + +: CUR_POS ABORT ; +: B_CR ( -- ) \ 94 +\ Перевод строки. + 10 EMIT + 13 EMIT +; + +: GETPR ABORT ; + +: SPP_M ABORT ; +: TIBB_M ABORT ; +: NTIB_M ABORT ; +: NTIB ABORT ; +: draw_window ABORT ; +: CC_LINES ABORT ; +: ?KEY ABORT ; +: EMIT_N ABORT ; + + : DR_CUR ABORT ; + : CL_CUR ABORT ; + +: KEY_M ABORT ; +: _BYE ABORT ; + +: ROWH ABORT ; +: ROWW ABORT ; +: draw_window ABORT ; +: MEMS ABORT ; +\ FORWORD + +: READ ABORT ; +: CLIT, ABORT ; +: _PREVIOUS PREVIOUS ; +: _SHEADER SHEADER ; +: _: : ; +: [;] POSTPONE ; ; + +: S, ABORT ; +: SWORD, ABORT ; +: PARSE-NAME PARSE-WORD ; +: PSLITERAL POSTPONE SLITERAL ; \ No newline at end of file diff --git a/programs/develop/SPForth/src/gspf.f b/programs/develop/SPForth/src/gspf.f new file mode 100644 index 0000000000..2e32ad80a8 --- /dev/null +++ b/programs/develop/SPForth/src/gspf.f @@ -0,0 +1,231 @@ +CR .( SFF.F) +\ ' ANSI>OEM TO ANSI>ANSI TO ANSI>" FIND NIP 0= +[IF] : U> SWAP U< ; +[THEN] +C" D-" FIND NIP 0= +[IF] +: D- ( D1 D2 -- FLAG ) + DNEGATE D+ ; +[THEN] +C" D=" FIND NIP 0= +[IF] +: D= ( D1 D2 -- FLAG ) + D- D0= ; +[THEN] + +C" \S" FIND NIP 0= +[IF] +: \S \ comment to end of file + SOURCE-ID FILE-SIZE DROP + SOURCE-ID REPOSITION-FILE DROP + [COMPILE] \ ; IMMEDIATE +[THEN] + +S" ~mak/utils_.f" INCLUDED + +\ S" lib/ext/spf-asm.f" INCLUDED +\ ALSO ASSEMBLER ALSO ASM-HIDDEN +\ ' NOOP IS CODE-ALIGN +\ PREVIOUS PREVIOUS + +S" ~mak/asm/ASM.FRT" INCLUDED + + +\ S" lib/include/tools.f" INCLUDED + + +C" LAST-HERE" FIND NIP 0= VALUE INLINEVAR + +' DUP VALUE 'DUP +0 VALUE RESERVE +USER-HERE CONSTANT USER-HERE-SET +USER-HERE-SET TO RESERVE +MODULE: GSPF0 + S" src/global.f" INCLUDED +;MODULE + +S" src/global.f" INCLUDED +S" src/tc_spfopt.f" INCLUDED + +' _CONSTANT-CODE TO CONSTANT-CODE +' _CREATE-CODE TO CREATE-CODE +' _CLITERAL-CODE TO CLITERAL-CODE +' _SLITERAL-CODE TO SLITERAL-CODE + +\ : TOMM_SIZE TO MM_SIZE ; + + DIS-OPT +\ VOCABULARY GSPF0 +: ?HS + HERE CELL- @ + HERE HSSSS @ + CELL- @ <> +IF CR + HERE CELL- @ H. + HERE HSSSS @ + CELL- @ H. + -1 ABORT" HSSSS " +THEN +; +: TT 0 IF THEN ; + +\ : CODE ?HS CODE ; + +\ ALSO GGSPF0 + ALSO GSPF0 DEFINITIONS + +: >R POSTPONE >R ; IMMEDIATE +: R> POSTPONE R> ; IMMEDIATE +CR + 0x10 TOMM_SIZE +HERE DUP H. + HERE 0xF OR 1+ DP ! +HERE DUP H. MM_SIZE H. + + HERE ZSSSS ! 0 HSSSS ! +0x11223344 , 0x55667788 , ?HS + S" src/gspf0.f" INCLUDED +CR MM_SIZE H. + +PREVIOUS ( PREVIOUS ) DEFINITIONS + +\ ALSO GSPF0 +MM_SIZE H. +[IFDEF] S"_L" S" _LL" S"_L" PLACE [THEN] + +\ S" src/global.f" INCLUDED +CR + 0x10 TOMM_SIZE +HERE DUP H. + HERE 0xF OR 1+ DP ! +HERE DUP H. MM_SIZE H. + ZSSSS @ HERE - HSSSS ! +0x11223344 , 0x55667788 , ?HS +S" src/gspf0.f" INCLUDED + +\ ╥єЄ ьюцэю юяЁхфхышЄ№ ъръшх Єю ётюш ёыютр фы  яЁюс√. +\ ╫Єюс√ эх с√ыю ю°шсюъ, ъръющ Єю Їрщы ёъЁшяЄр фюыцхэ с√Є№ яюфуЁєцхэ. ╧ЁшьхЁ эшцх. +\ HERE TO IMAGE-END + + \ VARIABLE lm +\ VECT m + \ 0 CONSTANT m +\ : doTest 2000000 0 DO m @ 2 + I @ 4 + * I ! LOOP ; +\ ЁрёёъюьхэЄшЁютрт эшцх ¤Єє ёЄЁюъє ш юЄьхўхээ√х эшцх * ьюцэю яюыєўшЄ№ тхё№ ъюф єўрёЄтє■∙шщ +\ яЁш т√яюыэхэшш фрээющ эшцх ёЄЁюъш +\ : doTest 10 0 DO I . LOOP ; + + \ ╥єЄ чруЁєцрхь шэЄхЁхёє■°шщ эрё ёъЁшяЄ. + +\ ╫шёыю чруЁєцрхь√ї ёъЁшяЄют эх юуЁрэшўхээю. + +\ H-STDOUT VALUE File +\ HERE TO IMAGE-END +\ : File: +\ NextWord DUP >R +\ HEAP-COPY DUP R> R/W CREATE-FILE-SHARED THROW TO File FREE THROW +\ ; + +\ File: Test.log \ ▌Єю шь  Їрщыр ъєфр т√тюфшь. + +\ H-STDOUT >R File TO H-STDOUT DROP \ тъы■ўхэшх т√тюфр +\ яЁюуЁрьь√ яюы№чютрЄхы  + +\ S" example.f" INCLUDED + +\ ╤ыютр ъюЄюЁ√х ь√ їюЄшь фшчрёхьсышЁютрЄ№. +\ ┼ёыш т тр°хщ яЁюуЁрььх эєцэю шяюы№чютрЄ№ эхёъюы№ъю ёыют-яЁюЎхфєЁ, Єю +\ ыєў∙х фшчрёхьсышЁютрЄ№ тьхёЄх. ╥юуфр юэш сєфєЄ ёё√ырЄ№ё  эр юс∙шщ ЁхтєЁё юяЁхфхыхэшщ. +\ ┼ёыш эєцэр тё  яЁюуЁрььр, Єю фшчрёёхьсышЁєхь уыртэюх юяЁхфхыхэшх. +\ * эшцх ¤Єє +\ ' doTest DISASM-LIST \ ╤ыюттю " ' " ╧юыєўрхЄ рфЁхё ёыхфє■°хую чр эшь ёыютр, ёыютю DISASM-LIST яюэ Єэю шч эрчтрэш . +\ ' WildCMP-U1 DISASM-LIST +\ ъюэхЎ +\ * р Єръцх ¤Єє +\ TYPE-ALL + +\ File FLUSH-FILE THROW R> TO H-STDOUT \ т√ъы■ўхэшх т√тюфр + \ CR + \ : B I I I */ ; +\ ' B SEE2 +\ SEE B + \ ' doTest DISASM-LIST +\ ' doTest SEE2 +\ ' m SEE2 + \ ' B DISASM-LIST \ ╤ыюттю " ' " ╧юыєўрхЄ рфЁхё ёыхфє■°хую чр эшь ёыютр, ёыютю DISASM-LIST яюэ Єэю шч эрчтрэш . +\ ъюэхЎ + + \ CR TYPE-ALL + +\ START-LIST @ FREE DROP +\ START-LIST2 @ FREE DROP +\ START-LAB @ FREE DROP +\ START-VAR @ FREE DROP +\ START-ARRAY @ FREE DROP diff --git a/programs/develop/SPForth/src/gspf0.f b/programs/develop/SPForth/src/gspf0.f new file mode 100644 index 0000000000..32213eff8c --- /dev/null +++ b/programs/develop/SPForth/src/gspf0.f @@ -0,0 +1,112 @@ +\ TSET-OPT + 0x10 TOMM_SIZE +HERE TO TSAVE_LIMIT +USER-HERE-SET TO RESERVE +USER-HERE-SET USER-OFFS ! +\ DECIMAL +\ TRUE WARNING ! \ чтобы было +\ ============================================================== +\ Начало образа Форт-системы +\ S" src/USER.F" INCLUDED +\ S" src/spf_defkern.f" INCLUDED +CR .( S" src/spf_forthproc.f" INCLUDED) + +S" src/spf_forthproc.f" INCLUDED + +\ S" src/spf_floatkern.f" INCLUDED + +S" src/spf_forthproc_hl.f" INCLUDED + + +S" src/kol/spf_kol_const.f" INCLUDED + +\ ============================================================== + +S" src/kol\spf_kol_sys.f" INCLUDED + +\ Трансляция исходных текстов. +\ Обработка ошибок. +\ Определяющие слова. +\ Числовые литералы. +\ Управление компиляцией. +\ Компиляция управляющих структур. + +S" src/compiler/spf_immed_lit.f" INCLUDED +S" src/compiler/spf_defwords.f" INCLUDED + +S" src/compiler/spf_immed_loop.f" INCLUDED + +S" src/compiler/spf_error.f" INCLUDED + TDIS-OPT +S" src/compiler/spf_translate.f" INCLUDED +S" src/compiler/spf_immed_transl.f" INCLUDED +S" src/compiler/spf_literal.f" INCLUDED +S" src/compiler/spf_immed_control.f" INCLUDED + +\ ============================================================== +\ Компиляция чисел и строк в словарь. +\ Создание словарных статей. +\ Поиск слов в словарях. +\ Печать словарей. +\ S" src/temps4_.f" INCLUDED +\ EOF +S" src/compiler/spf_wordlist.f" INCLUDED +S" src/compiler/spf_find.f" INCLUDED +S" src/compiler/spf_words.f" INCLUDED +S" src/compiler/spf_compile0.f" INCLUDED +S" ~mak/~af/lib/c/zstr.f" INCLUDED +' ALITERAL TO ALITERAL-CODE + +\ Структурированная обработка исключений (см.также init) + +S" src/spf_except.f" INCLUDED + +\ ============================================================== +\ Печать чисел + +S" src/spf_print.f" INCLUDED +S" src/kol\spf_kol_module.f" INCLUDED + +\ ============================================================== +\ Файловый и консольный ввод-вывод (kol-зависимые) + +S" src/kol/spf_kol_con_io.f" INCLUDED +S" src/spf_con_io.f" INCLUDED +S" src/kol/spf_kol_io.f" INCLUDED +\ ============================================================== +\ Управление памятью + +S" src/kol/spf_kol_memory.f" INCLUDED + +\ ============================================================== +\ Макроподстановщик-оптимизатор +TRUE TO INLINEVAR +CR .( S" src/macroopt.f" INCLUDED) +MM_SIZE DUP H. +0x10 TOMM_SIZE +S" src/macroopt.f" INCLUDED +DUP H. TOMM_SIZE +S" src/compiler/spf_compile.f" INCLUDED + +\ ============================================================== +\ Парсер исходного текста форт-программ +S" src/compiler/spf_parser.f" INCLUDED +S" src/compiler/spf_read_source.f" INCLUDED + +\ ============================================================== +\ Инициализация переменных, startup +CR .( S" src/spf_init.f" INCLUDED) +S" src/spf_init.f" INCLUDED + +\ ============================================================== +S" src/compiler/spf_modules.f" INCLUDED + S" src/MEFORTH.F" INCLUDED +S" src/spf_last.f" INCLUDED +\ S" src/tst.f" INCLUDED \EOF + +\ EOF + +CR .( =============================================================) +CR .( Done. +CR .( =============================================================) +MM_SIZE H. \ No newline at end of file diff --git a/programs/develop/SPForth/src/macroopt.f b/programs/develop/SPForth/src/macroopt.f new file mode 100644 index 0000000000..ab82de2823 --- /dev/null +++ b/programs/develop/SPForth/src/macroopt.f @@ -0,0 +1,5061 @@ +\ ╬яЄшьшчшЁє■∙шщ ьръЁюяюфёЄрэют°шъ ╠ръёшьют ╠.╬. +\ http://wiki.forth.org.ru/optimizer + +[UNDEFINED] C>S +[IF] +: C>S ( c -- n ) 0xFF AND [ 0x7F INVERT ] LITERAL XOR 0x80 + ; +[THEN] + +BASE @ HEX + +\ : REL! ( ADDR' ADDR -- ) +\ TUCK - SWAP ! ; + +: REL@ ( ADDR -- ADDR' ) + DUP @ + ; + +\ FALSE VALUE OPT? + TRUE VALUE OPT? + + 084 VALUE J_COD + +: SET-OPT TRUE TO OPT? ; + +: DIS-OPT FALSE TO OPT? ; + +INLINEVAR +[IF] +0x20 VALUE MM_SIZE + +0 VALUE OFF-EBP + +0 VALUE OFF-EAX + +0 VALUE :-SET + +0 VALUE J-SET + +0 VALUE LAST-HERE + +0x44 CELLS DUP CONSTANT OpBuffSize + +CREATE OP0 HERE >T DUP , 0 , SWAP ALLOT + +DUP OpBuffSize + CELL- CONSTANT OPLast + +CELL+ DUP CONSTANT OP1 +CELL+ DUP CONSTANT OP2 +CELL+ DUP CONSTANT OP3 +CELL+ DUP CONSTANT OP4 +CELL+ DUP CONSTANT OP5 +CELL+ DUP CONSTANT OP6 +CELL+ DUP CONSTANT OP7 +CELL+ DUP CONSTANT OP8 + +DROP + +: SetOP ( -- ) + OP0 OP1 OpBuffSize CELL- CMOVE> + DP @ OP0 ! +; + +: ToOP0 ( OPn -- ) + OP0 OpBuffSize CELL- CMOVE ; + +0x11 CELLS DUP CONSTANT JpBuffSize + +CREATE JP0 HERE DUP , OVER ALLOT + + +DUP ROT ERASE + +CELL+ DUP CONSTANT JP1 + + +CELL+ DUP CONSTANT JP2 + + +CELL+ DUP CONSTANT JP3 + + +CELL+ DUP CONSTANT JP4 + +DROP + +[THEN] + +: ClearJpBuff JP0 JpBuffSize ERASE ; + +: J@ 1+ REL@ CELL+ ; + +: SJ@ 1+ DUP C@ C>S + 1+ ; + +: J_@ + DUP C@ F0 + AND 70 = IF SJ@ ELSE + DUP C@ EB = IF SJ@ ELSE + DUP C@ E9 = IF J@ ELSE + DUP W@ F0FF + AND 800F = IF 1+ J@ ELSE + HEX U. 1 ." J_@ ERR" ABORT + THEN THEN THEN THEN +; + +: SetJP ( -- ) + JP0 JpBuffSize + CELL- @ DUP + IF J_@ + THEN +\ DP @ UMIN + J-SET UMAX TO J-SET + JP0 JP1 JpBuffSize CELL- CMOVE> + DP @ JP0 ! ; + +\ : ToJP0 ( OPn -- ) +\ JP0 JpBuffSize CELL- CMOVE +\ JP0 JpBuffSize + CELL- 0! ; + +: ?SET DP @ + DUP LAST-HERE <> IF DUP TO :-SET DUP TO J-SET THEN + DUP OP0 @ U< IF OP0 0! THEN + DUP OP1 @ U< IF OP1 0! THEN + DUP JP0 @ U< IF JP0 0! THEN + JP1 @ U< IF JP1 0! THEN +; + +: SHORT? ( n -- -129 < n < 128 ) + 0x80 + 0x100 U< +; + +M\ VECT DTST + +\ \\\\\\\\\\ + +[DEFINED] [TTO] \ CR .( TTO=) DUP . +[IF] + +GET-CURRENT + +WORDLIST CONSTANT MACROOPT-WL + +\ чряш°хь рфЁхё шьхэш ёыютрЁ  +' MACROOPT-WL EXECUTE CELL+ ( name_addr ) +LAST @ SWAP ! + +ALSO ' MACROOPT-WL EXECUTE CONTEXT ! DEFINITIONS +TC-WL ALSO TC-IMM + +[THEN] + +\ \\\\\\\\\\\\ + +: EVEN-EAX OFF-EAX + IF M\ 1000 DTST + SetOP OFF-EAX DUP SHORT? + IF 0408D W, C, + ELSE 0808D W, , + THEN \ LEA EAX, OFF-EBP [EAX] + 0 TO OFF-EAX + M\ 1001 DTST + THEN +; + +: EVEN-EBP OFF-EBP + IF SetOP OFF-EBP 06D8D W, C, \ LEA ebp, OFF-EBP [EBP] + 0 TO OFF-EBP + THEN +; + +: +>OFF-EBP ( C -- ) + C>S OFF-EBP + TO OFF-EBP ; + +: ADD|XOR|OR|AND= ( W -- FLAG ) + CASE + DUP 4503 <> IF \ ADD EAX, X2 [EBP] + DUP 450B <> IF \ OR + DUP 4523 <> IF \ AND + DUP 4533 <> IF \ XOR + DROP FALSE EXIT + DUPENDCASE DROP TRUE ; + +: DUP3B?[EBP] ( W -- W FLAG ) + CASE + DUP 0E7C4 AND 04500 <> IF \ 010X.X101 00XX.X0XX +\ ADD|OR|ADC|SBB|AND|SUB|XOR|CMP _L | E_X | X [EBP] , _L | E_X | X [EBP] + + DUP E7FD AND 4589 <> IF \ 010X.X101 1000.10X1 +\ MOV X [EBP], E(ABCD)X | E(ABCD)X , X [EBP] +\ DUP 5503 <> IF \ ADD EDX , 0 [EBP] + DUP 758B <> IF \ MOV ESI , X [EBP] + + DUP EFFF AND 6DDB <> IF \ FLD | FSTP EXTENDED 0 [EBP] + + DUP 45DB <> IF \ FILD DWORD FC [EBP] + DUP 65F7 <> IF \ MUL X [EBP] + DUP 6DF7 <> IF \ IMUL X [EBP] + DUP 04587 <> IF \ XCHG EAX , X [EBP] + FALSE EXIT + DUPENDCASE TRUE ; + +: DUP3B? ( W -- W FLAG ) + CASE +\ 11XX.X000 1000.0011 + DUP C7FF AND C083 <> IF \ ADD|OR|ADC|SBB|AND|SUB|XOR|CMP EAX, # X + DUP 0478B <> IF \ MOV EAX, X [EDI] + DUP 0488B <> IF \ MOV ECX, X [EAX] + DUP 0588B <> IF \ MOV EBX, X [EAX] + DUP 0508B <> IF \ MOV EDX, X [EAX] + DUP 0788B <> IF \ MOV EDI, X [EAX] + DUP 0708B <> IF \ MOV ESI, X [EAX] + + + DUP 0588D <> IF \ LEA EBX, X [EAX] + DUP 0508D <> IF \ LEA EDX, X [EAX] + DUP 05089 <> IF \ MOV X [EAX], EDX + DUP 05189 <> IF \ MOV X [ECX] , EDX + DUP 07589 <> IF \ MOV X [EAX], ESI + + DUP 0F8C1 <> IF \ SAR EAX, # X + DUP 0E0C1 <> IF \ SHL EAX, # X + DUP 0E1C1 <> IF \ SHL ECX, # X + + DUP 0E8C1 <> IF \ SHR EAX, # X + DUP 0408D <> IF \ LEA EAX , X [EAX] + DUP 0408B <> IF \ MOV EAX , X [EAX] + FALSE EXIT + DUPENDCASE TRUE ; + +: DUP2B? ( W -- W FLAG ) + CASE + DUP 0E4C5 AND 0C001 <> IF +\ ADD|OR|ADC|SBB|AND|SUB|XOR|CMP E_X , E_X + +\ DUP 01801 <> IF \ ADD [EAX], EBX + + DUP 01001 <> IF \ ADD [EAX], EDX + DUP 0003 <> IF \ ADD EAX, [EAX] + DUP F633 <> IF \ XOR ESI, ESI + DUP 108B <> IF \ MOV EDX , [EAX] + DUP 0C0FF AND C085 <> IF \ TEST E__ , E__ + +\ 110X.X0XX 1000.10X1 + DUP 0E4FC AND 0C088 <> IF \ MOV E(ABCD)X , E(ABCD)X | (ABCD)L , (ABCD)L + +\ 00XX.X0XX 1000.100X + + DUP 0C4FE AND 00088 <> IF \ MOV [E(ABCD)X] , E(ABCD)X | (ABCD)(HL) + DUP 0008B <> IF \ MOV EAX, [EAX] + DUP 028B <> IF \ MOV EAX, [EDX] + DUP 0C78B <> IF \ MOV EAX, EDI + DUP 0F88B <> IF \ MOV EDI, EAX + DUP 0F08B <> IF \ MOV ESI, EAX + DUP 0C88B <> IF \ MOV ECX , EAX + DUP 0D18B <> IF \ MOV EDX , ECX + DUP 0C68B <> IF \ MOV EAX, ESI +\ 111X.X0XX 1101.00XX + DUP 0E4FC AND 0E0D0 <> IF \ S(AH)(LR) (ABCD)L | E(ABCD)X, CL | 1 + DUP 0C0DD <> IF \ FFREE ST + + DUP F0FF AND C0D9 <> IF \ FLD ST(X) | FXCH ST(X) +\ 1100.XXXX.1101.1001 + + DUP FAFF AND E0D9 <> IF \ FCHS|FABS|FTST|FXAM +\ 1110.0X0X.1101.1001 + DUP E8FF AND E8D9 <> IF \ FLD1 FLDL2T FLDL2E FLDPI FLDLG2 FLDLN2 FLDZ ??? +\ 1110.1XXX.1101.1001 + + DUP F0FF AND F0D9 <> IF \ F2XM1 FYL2X FPTAN FPATAN +\ 1111.XXXX.1101.1001 \ FXTRACT FPREM1 FDECSTP FINCSTP + \ FPREM FYL2XP1 FSQRT FSINCOS + \ FRNDINT FSCALE FSIN FCOS + DUP E8FF AND 20DB <> IF \ FLD EXTENDED [E_X] | FST EXTENDED [E_X] +\ 001X.0XXX.1101.1011 + + DUP E8FF AND 00DD <> IF \ FLD DOUBLE [E_X] | FST DOUBLE [E_X] +\ 000X.0XXX.1101.1101 + + DUP F0FF AND C0DE <> IF \ FADDP ST(X) | FMULP ST(X) + DUP E0FF AND E0DE <> IF \ FSUBRP ST(X) | FSUBP ST(X) +\ 111X.XXXX.1101.1110 \ FDIVRP ST(X) | FDIVP ST(X) + + DUP 00FF <> IF \ INC [EAX] +\ DUP 0C0FF <> IF \ INC EAX +\ DUP 0C3FF <> IF \ INC EBX +\ DUP 0C8FF <> IF \ DEC EAX + DUP 0D0F7 <> IF \ NOT EAX + DUP 0D1F7 <> IF \ NOT ECX + DUP 0D8F7 <> IF \ NEG EAX + DUP 0D9F7 <> IF \ NEG ECX + DUP 0DAF7 <> IF \ NEG EDX + DUP 0E9F7 <> IF \ IMUL ECX + DUP 0F1F7 <> IF \ DIV ECX + DUP 0F9F7 <> IF \ IDIV ECX + FALSE EXIT + DUPENDCASE TRUE ; + +: DUP6B? ( W -- W FLAG ) + CASE +\ X00X.X101 1000.10X1 + DUP 67FD AND 0589 <> IF \ MOV X {[EBP]}, E(ACDB)X | E(ACDB)X , X {[EBP]} + + DUP C3FF AND C081 <> IF \ ADD|OR|ADC|SBB|AND|SUB|XOR|CMP EAX, # X + + DUP 00501 <> IF \ ADD X , EAX + DUP 0503 <> IF \ ADD EAX, X + DUP 053B <> IF \ CMP EAX, X + DUP 873B <> IF \ CMP EAX, X [EDI] + DUP F281 <> IF \ XOR EDX , # 80000000 + DUP 928D <> IF \ LEA EDX , [EDX+80000000H] + +\ DUP 0589 <> IF \ MOV X , EAX +\ DUP 058B <> IF \ MOV EAX, X + DUP 808B <> IF \ MOV EAX, X [EAX] + DUP 808D <> IF \ LEA EAX, X [EAX] + DUP 8703 <> IF \ MOV EAX, X [EDI] + + DUP 878B <> IF \ MOV EAX, X [EDI] + DUP 878D <> IF \ LEA EAX, X [EDI] + DUP 0C7 <> IF \ MOV [EAX], # X + DUP 0081 <> IF \ ADD [EAX], # X + DUP 05FF <> IF \ INC X + +\ DUP FCFF AND C0C7 <> IF \ MOV EAX|EBX|ECX|EDX, # X + FALSE EXIT + DUPENDCASE TRUE ; + +: DUP5B? ( 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 + OVER 0FD AND 0A1 = OR \ MOV EAX, X | X , EAX +; + +: DUP7B? ( N -- N FLAG ) +\ XX00.0101 0000.0100 1000.10X1 + DUP 3FFFFD AND 050489 = \ MOV X [EAX*_] , EAX | MOV EAX , X [EAX*_] +\ XX00.0101 0000.0100 1000.1X01 + OVER 3FFFFB AND 050489 = OR \ MOV X [EAX*_] , EAX | LEA EAX , X [EAX*_] + OVER 80B60F = OR \ MOVZX EAX, BYTE PTR [EAX] + OVER 45048D = OR \ LEA EAX, X [EAX*2] + +; + + 0 VALUE TTTT + +\ 0 VALUE ZZZZ \ VECT VVV + +: ?ChEAX ( ADDR -- FALSE | TRUE ) + CASE + DUP C@ + DUP B8 <> IF \ MOV EAX, # X + DUP A1 <> IF \ MOV EAX, X + DROP + DUP W@ +\ DUP ADD|XOR|OR|AND= 0= IF + DUP C033 <> IF \ XOR EAX, EAX + DUP C031 <> IF \ XOR EAX, EAX + DUP D889 <> IF \ MOV EAX, EBX + + 38FF AND + DUP 008B <> IF \ MOV EAX, ___ + DUP 008D <> IF \ LEA EAX, ___ + DROP + DUP @ FFFFFF AND + DUP 02048D <> IF \ LEA EAX, [EDX] [EAX] + + 2DROP TRUE EXIT + DUPENDCASE 2DROP FALSE ; + +: ^?EAX= ( ADDR -- FALSE | TRUE ) +\ FALSE + DUP ?ChEAX IF DROP TRUE EXIT THEN + DUP W@ + DUP 00F9 + AND 0089 <> IF 2DROP FALSE EXIT THEN +\ LEA MOV + CASE + FF00 AND + DUP 0100 AND + 0100 <> IF \ MOV EAX, + + DUP C200 <> IF \ MOV EAX, EDX + DUP D800 <> IF \ MOV EAX, EBX + DROP + DUP @ FFFF00 AND + + DUP 240400 <> IF \ MOV EAX, [ESP] + DUP 244400 <> IF \ MOV EAX, X [ESP] + DUP 95048B <> IF \ 8B0495F0065A00 MOV EAX , 5A06F0 [EDX*4] + 2DROP TRUE EXIT + DUPENDCASE 2DROP FALSE ; + +\ DUP 8B00 = \ MOV EAX, [EAX] + +: OP_SIZE ( OP - n ) + DUP IF THEN DUP CELL- @ SWAP @ - +; + +: OPexcise ( OPX -- ) + DUP OP0 = IF @ DP ! OP1 ToOP0 EXIT THEN + >R + R@ CELL- @ R@ @ DP @ R@ CELL- @ - CMOVE + + R@ OP_SIZE NEGATE + R@ OP0 DO DUP I +! CELL +LOOP + ALLOT + R@ CELL+ R@ OpBuffSize CELL- R> - OP0 + CMOVE +; +: ?OPlast ( OPX -- OPX flag ) + DUP OP0 OpBuffSize + CELL- CELL- U> ; + +: XX_STEP ( OPX -- OPX+CELL FALSE | { OPX | FALSE } TRUE ) +\ ╧ЁютхЁър эр эх шчьхэхэшх EAX + ?OPlast + IF DROP FALSE TRUE EXIT THEN + DUP @ + DUP :-SET U< IF 2DROP FALSE TRUE EXIT THEN + C@ + CASE + DUP 3D <> IF \ CMP EAX, # X + DUP 3B <> IF \ CMP E_X , X + DUP A3 <> IF \ MOV X , EAX + DUP B9 <> IF \ MOV ECX , # X + DUP BA <> IF \ MOV EDX , # X + DUP BB <> IF \ MOV EBX , # X + DUP 50 <> IF \ PUSH EAX + DROP + DUP @ W@ + DUP 04FF AND 04C7 <> IF \ MOV 4444 , # 5555 + DUP 40FE AND 0088 <> IF \ MOV [EAX] , DL + DUP 4D89 <> IF \ MOV 4 [EBP] , ECX + DUP 558B <> IF \ MOV EDX , FC [EBP] + DUP 4C8B <> IF \ MOV ECX , FC [E__] [E__] + DUP 648D <> IF \ LEA ESP , 8 [ESP] + DUP 34FF AND 04FF <> IF \ INC 0 [ESP] + DUP C00B <> IF \ OR EAX, EAX + DUP D00B <> IF \ OR EDX, EAX + DUP D02B <> IF \ SUB EDX, EAX + DUP 0401 <> IF \ ADD [E_X] + DUP 06FD \ CMP X [EBP], # Z \ CMP 44444, # 55555 + AND 0481 <> IF + DUP FFFD + AND 4589 = + IF OVER @ 2+ C@ OP0 @ 2+ C@ = + IF DROP TRUE + EXIT + THEN + 458B = IF DROP FALSE TRUE EXIT THEN + CELL+ FALSE EXIT + THEN + 2DROP + FALSE TRUE EXIT + DUPENDCASE DROP CELL+ FALSE ; + +: ?EDX_[EBP] ( OPX - FLAG ) + DUP @ @ FFFFFF AND + DUP 24048B = \ 8B0424 MOV EAX , [ESP] + IF 2DROP FALSE EXIT THEN + FFFF AND + + DUP 458B XOR \ 8B4500 MOV EAX , 0 [EBP] + OVER 4589 XOR OR \ OPX N F MOV FC [EBP] , EAX +0= IF DROP + @ 2+ C@ OP0 @ 2+ C@ = + EXIT + THEN + NIP + DUP ADD|XOR|OR|AND= + IF DROP FALSE EXIT THEN + DUP E8C1 = \ C1E819 SHR EAX , 19 + IF DROP FALSE EXIT THEN + DUP 418D = \ 8D41FF LEA EAX , FF [ECX] + IF DROP FALSE EXIT THEN + DUP 408D = \ 8D40FF LEA EAX , FF [EAX] + IF DROP FALSE EXIT THEN + DUP 878D = \ 8D873C100000 LEA EAX , 103C [EDI] + IF DROP FALSE EXIT THEN + DUP D0F7 = \ F7D0 NOT EAX + IF DROP FALSE EXIT THEN + DUP D8F7 = \ F7D8 NEG EAX + IF DROP FALSE EXIT THEN + DUP C123 = \ 23C1 AND EAX , ECX + IF DROP FALSE EXIT THEN + + DUP C033 = \ XOR EAX , EAX + IF DROP FALSE EXIT THEN + + DUP 808D = \ 8D8024475A00 LEA EAX , 5A4724 [EAX] + IF DROP FALSE EXIT THEN + + DUP 088B = \ MOV ECX , [EAX] + IF DROP FALSE EXIT THEN + + DUP C00B = \ 0BC0 OR EAX , EAX + IF DROP FALSE EXIT THEN + + DUP 488D = \ 8D4820 LEA ECX , 20 [EAX] + IF DROP FALSE EXIT THEN + + DUP E0D3 = \ D3E0 SHL EAX , CL + IF DROP FALSE EXIT THEN + + FF AND + DUP A1 = \ A1047A5800 MOV EAX , 587A04 + IF DROP FALSE EXIT THEN + DUP 58 = \ 58 POP EAX + IF DROP FALSE EXIT THEN + DUP B9 = \ B907000000 MOV ECX , # 7 + IF DROP FALSE EXIT THEN + DROP TRUE +; + +: MOV_EDX_[EBP] ( OPX - OPX' FALSE | FLAG TRUE ) + ?OPlast IF DROP FALSE TRUE EXIT THEN + DUP @ :-SET U< IF DROP FALSE TRUE EXIT THEN + DUP @ ?ChEAX 0= IF CELL+ FALSE EXIT THEN + DUP ?EDX_[EBP] 0= IF CELL+ FALSE EXIT THEN + DUP @ W@ + + DUP 448B = \ MOV EAX , 4 [EDX] [EAX*4] + IF DROP CELL+ FALSE EXIT THEN + + DUP 1489 = \ MOV 59C2E4 [EAX*4] , EDX + IF DROP CELL+ FALSE EXIT THEN + DUP 8BCA = \ MOV ECX , EDX + IF DROP CELL+ FALSE EXIT THEN + DUP FFFD AND 5589 = \ OPX N F + IF DROP @ 2+ C@ OP0 @ 2+ C@ = TRUE EXIT + THEN + 2DROP FALSE TRUE +; + +: OPresize ( OPX n -- ) + DUP >R + OVER OP0 ?DO DUP I +! CELL +LOOP + ALLOT + @ DUP R> + DUP DP @ - NEGATE MOVE +; + +: OPinsert ( OPX n -- ) + DUP >R + 2DUP OPresize DROP + DUP + DUP CELL + OVER OP0 CC - OpBuffSize CELL- - NEGATE MOVE + R> SWAP +! +; + +VARIABLE ?~EAX +VARIABLE SAVE-?~EAX +: ?~EAX{ ( FLAG -- ) + ?~EAX @ SAVE-?~EAX ! ?~EAX ! ; + +: }?~EAX ( -- ) + SAVE-?~EAX @ ?~EAX ! ; + + +: ?EAX>EBX ( OPX - OPX' FALSE | FALSE TRUE | OPX' TRUE TRUE ) +\ TTTT 0= IF DROP FALSE TRUE EXIT THEN +\ ." $=" DUP @ @ U. +\ TTTT IF HEX DUP @ U. THEN +\ DROP FALSE TRUE EXIT + ?OPlast IF DROP FALSE TRUE EXIT THEN + DUP @ :-SET U< IF DROP FALSE TRUE EXIT THEN + DUP @ W@ + DUP 4589 = \ OPX N F MOV FC [EBP] , EAX + OVER 458B = OR \ OPX N F MOV EAX , FC [EBP] + IF DROP DUP @ 2+ C@ OP0 @ 2+ C@ = + IF CELL- TRUE TRUE + ELSE DUP @ W@ 458B = IF ?~EAX 0! THEN + CELL+ FALSE + THEN EXIT + THEN + + CASE +\ ." $=" DUP @ U. + DUP 083B <> \ CMP ECX , [EAX] + IF + DUP C83B <> \ CMP ECX , EAX + IF + DUP C13B <> \ CMP EAX , ECX + IF + DUP 508B <> \ MOV EDX , 4 [EAX] + IF + DUP 088B <> \ MOV ECX , [EAX] + IF + DUP 098B <> \ MOV ECX , [ECX] + IF + DUP C88B <> \ MOV ECX , EAX + IF + DUP 0889 <> \ MOV [EAX] , ECX + IF + DUP 1089 <> \ MOV [EAX] , EDX + IF + DUP 4889 <> \ MOV 4 [EAX] , ECX + IF +0 ?~EAX{ + DUP 408D <> \ LEA EAX , 1 [EAX] + IF + DUP 808D <> \ LEA EAX , 1 [EAX] + IF + DUP 008B <> \ MOV EAX , [EAX] + IF +\ TTTT IF HEX ." M=" DUP U. THEN + + DUP C18B <> \ MOV EAX , ECX + IF +TRUE ?~EAX ! + DUP D8F7 <> \ NEG EAX + IF +}?~EAX + DROP + DUP @ @ FFFFFF AND + DUP 240C8B <> \ MOV ECX , [ESP] + IF + DUP 8D0489 <> \ MOV X [ECX*4] , EAX + IF +0 ?~EAX{ + DUP 24048B <> \ MOV EAX , [ESP] + IF +TRUE ?~EAX ! + DUP 24442B <> \ SUB EAX , 4 [ESP] + IF +}?~EAX + 0xFFFF AND + OVER @ 2+ C@ OP0 @ 2+ C@ +\ TTTT IF HEX ." N=" 2DUP U. U. THEN + = + IF 2DROP FALSE TRUE EXIT + THEN + DUP 4D8B <> \ MOV ECX , [EBP] + IF + DUP 5589 <> \ MOV [EBP] , EDX + IF + + 2DROP FALSE TRUE EXIT + DUPENDCASE DROP CELL+ FALSE ; + +: EAX>EBX0 ( OPX - OPX' FLAG ) + + + DUP OP0 = IF TRUE EXIT THEN +\ TTTT IF 1 EMIT DUP U. DUP @ U. THEN + DUP @ W@ + + DUP 508B = \ MOV EDX , [EAX+4] + IF DROP CELL- FALSE EXIT THEN + DUP 088B = \ MOV ECX , [EAX] + IF DROP CELL- FALSE EXIT THEN + DUP 098B = \ MOV ECX , [ECX] + IF DROP CELL- FALSE EXIT THEN + DUP 4D8B = \ MOV ECX , [EBP] + IF DROP CELL- FALSE EXIT THEN + DUP 5589 = \ MOV 0 [EBP] , EDX + IF DROP CELL- FALSE EXIT THEN + DUP C88B = \ MOV ECX , EAX + IF DROP CELL- FALSE EXIT THEN + DUP 0889 = \ MOV [EAX] , ECX + IF DROP CELL- FALSE EXIT THEN + DUP 1089 = \ MOV [EAX] , EDX + IF DROP CELL- FALSE EXIT THEN + DUP 4889 = \ MOV 4 [EAX] , ECX + IF DROP CELL- FALSE EXIT THEN + DUP 408D = \ LEA EAX , 1 [EAX] + IF DROP + 58 OVER @ 1+ C! CELL- TRUE EXIT + THEN + + DUP 808D = \ LEA EAX , 1 [EAX] + IF DROP + 98 OVER @ 1+ C! CELL- TRUE EXIT + THEN + DUP 008B = \ MOV EAX , [EAX] + IF DROP + 18 OVER @ 1+ C! CELL- TRUE EXIT + THEN + + DUP C18B = \ MOV EAX , ECX + IF DROP + D9 OVER @ 1+ C! CELL- TRUE EXIT + THEN + + DUP 458B = \ MOV EAX , [EBP+X] + IF DROP + 5D OVER @ 1+ C! CELL- TRUE EXIT + THEN + + DUP D8F7 = \ NEG EAX + IF DROP + DB OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DROP + DUP @ @ FFFFFF AND + + DUP 8D0489 = \ MOV X [ECX*4] , EAX + IF DROP CELL- FALSE EXIT THEN + + DUP 24048B = \ MOV EAX , [ESP] + IF DROP + 1C OVER @ 1+ C! CELL- TRUE EXIT + THEN + DUP 240C8B = \ MOV ECX , [ESP] + IF DROP CELL- FALSE EXIT THEN +\ BASE @ >R HEX DUP U. R> BASE ! + FF AND + DUP 3B = \ CMP + IF DROP CELL- FALSE EXIT THEN + HEX U. U. ." EAX>EBX0" ABORT +; + +: EAX>EBX ( OPX - OPX' FLAG ) + + + DUP OP0 = IF TRUE EXIT THEN + DUP @ W@ \ ." #=" DUP U. + + DUP 508B = \ MOV EDX , [EAX+4] + IF DROP + 53 OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP 083B = \ CMP ECX , [EAX] + IF DROP + 0B OVER @ 1+ W! CELL- FALSE EXIT + THEN + + DUP C83B = \ CMP ECX , EAX + IF DROP + CB OVER @ 1+ W! CELL- FALSE EXIT + THEN + + DUP C13B = \ CMP EAX , ECX + IF DROP + D9 OVER @ 1+ W! CELL- FALSE EXIT + THEN + + DUP 088B = \ MOV ECX , [EAX] + IF DROP + 0B OVER @ 1+ C! CELL- FALSE EXIT + THEN + DUP 458B = \ MOV EAX , [EBP+X] + IF DROP + 5D OVER @ 1+ C! CELL- FALSE EXIT + THEN + DUP 098B = \ MOV ECX , [ECX] + IF DROP CELL- FALSE EXIT THEN + + DUP 4D8B = \ MOV ECX , [EBP] + IF DROP CELL- FALSE EXIT THEN + + DUP 5589 = \ MOV 0 [EBP] , EDX + IF DROP CELL- FALSE EXIT THEN + + DUP C88B = \ MOV ECX , EAX + IF DROP + CB OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP 0889 = \ MOV [EAX] , ECX + IF DROP + 0B OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP 1089 = \ MOV [EAX] , EDX + IF DROP + 13 OVER @ 1+ C! CELL- FALSE EXIT + THEN + DUP 4889 = \ MOV 4 [EAX] , ECX + IF DROP + 4B OVER @ 1+ C! CELL- FALSE EXIT + THEN + DUP 4589 = \ OPX N F MOV FC [EBP] , EAX + IF DROP + 5D OVER @ 1+ C! CELL- FALSE EXIT + THEN + DUP 408D = \ LEA EAX , 1 [EAX] + IF DROP + 5B OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP 808D = \ LEA EAX , X [EAX] + IF DROP + 9B OVER @ 1+ C! CELL- FALSE EXIT + THEN + DUP 008B = \ MOV EAX , [EAX] + IF DROP + 1B OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP C18B = \ MOV EAX , ECX + IF DROP + D9 OVER @ 1+ C! CELL- FALSE EXIT + THEN + + + DUP D8F7 = \ NEG EAX + IF DROP + DB OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DROP + DUP @ @ FFFFFF AND + + DUP 8D0489 = \ MOV X [ECX*4] , EAX + IF DROP + 1C OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP 24048B = \ MOV EAX , [ESP] + IF DROP + 1C OVER @ 1+ C! CELL- FALSE EXIT + THEN + DUP 240C8B = \ MOV ECX , [ESP] + IF DROP CELL- FALSE EXIT THEN + DUP 24442B = \ SUB EAX , [ESP+4] + IF DROP + 5C OVER @ 1+ C! CELL- FALSE EXIT + THEN + +HEX U. U. ." EAX>EBX" ABORT +; + +: ?EAX>ECX ( OPX - OPX' FALSE | FALSE TRUE | OPX' TRUE TRUE ) +\ ZZZZ 0= IF DROP FALSE TRUE EXIT THEN +\ DROP FALSE TRUE EXIT + ?OPlast IF DROP FALSE TRUE EXIT THEN + DUP @ :-SET U< IF DROP FALSE TRUE EXIT THEN +\ TTTT IF HEX DUP @ U. THEN + DUP @ W@ + DUP 4589 = \ OPX N F MOV FC [EBP] , EAX + OVER 458B = OR \ OPX N F MOV EAX , FC [EBP] + IF DROP DUP @ 2+ C@ OP0 @ 2+ C@ = + IF CELL- TRUE TRUE + ELSE DUP @ W@ 458B = IF ?~EAX 0! THEN + CELL+ FALSE + THEN EXIT + THEN + DUP 5589 = \ OPX N F MOV FC [EBP] , EDX + IF DROP DUP @ 2+ C@ OP0 @ 2+ C@ = + IF DROP FALSE TRUE + ELSE CELL+ FALSE + THEN EXIT + THEN + + CASE + 0 ?~EAX{ + +\ 8B00 MOV EAX , [EAX] +\ 3B05E3745400 CMP EAX , 5474E3 ( :-SET+5 ) + DUP 3AFF AND 028B <> \ MOV EAX , [EDX] + IF + DUP 008B <> \ MOV EAX , [EAX] + IF + DUP 408D <> \ LEA EAX , 1 [EAX] + IF + DUP 408B <> \ MOV EAX , 1 [EAX] + IF + DUP 428D <> \ LEA EAX , 1 [EDX] + IF +\ DUP 808D <> \ LEA EAX , X [EAX] +\ IF + DUP C28B <> \ MOV EAX , EDX + IF +TRUE ?~EAX ! + DUP C00B <> \ OR EAX , EAX + IF + DUP C01B <> \ SBB EAX , EAX + IF + DUP F8D1 <> \ SAR EAX , 1 + IF + DUP E8C1 <> \ SHR EAX , 1 + IF + DUP D8F7 <> \ NEG EAX + IF + DUP D0F7 <> \ NOT EAX + IF + DUP D0F7 <> \ NOT EAX + IF + DUP 4503 <> \ ADD EAX , 0 [EBP] + IF + DUP 0523 <> \ AND EAX , 587744 ( D+5 ) + IF + DUP E0C1 <> \ SHL EAX , 7 + IF + DUP C223 <> \ AND EAX , EDX + IF + }?~EAX + DUP 508B <> \ MOV EDX , [EAX+4] + IF + DUP 053B <> \ CMP EAX , 5474E3 ( :-SET+5 ) + IF + DUP 103B <> \ CMP EDX , [EAX] + IF + DUP 558B <> \ OPX N F MOV F8 [EBP] , EDX + IF + DUP 158B <> \ MOV EDX , 587A88 + IF + DUP D08B <> \ MOV EDX , EAX + IF + DUP 0501 <> \ MOV ADD 555555 , EAX + IF + DUP 5089 <> \ MOV C [EAX] , EDX + IF + DUP 1089 <> \ MOV [EAX] , EDX + IF + + DUP 80C6 <> \ MOV BYTE [EAX] , # X + IF + DUP 45C7 <> \ MOV FC [EBP] , # 1 + IF + FF AND + DUP 50 <> \ PUSH EAX + IF + DUP A3 <> \ MOV 1000 , EAX + IF +0 ?~EAX{ + DUP B8 <> \ MOV EAX , # 1000 + IF + DUP A1 <> \ MOV EAX , 1000 + IF +TRUE ?~EAX ! + DUP 25 <> \ AND EAX , # X + IF + +}?~EAX + DUP BA <> \ MOV EDX , # 1000 + IF + DUP 3D <> \ CMP EAX , # 1000 + IF + DROP + DUP @ @ +0 ?~EAX{ + DUP 0244B60F <> \ MOVZX EAX , BYTE PTR 2 [EDX] [EAX] + IF + FFFFFF AND + DUP 85048D <> \ LEA EAX , 0 [EAX*4] + IF + DUP 85048B <> \ MOV EAX , X [EAX*4] + IF + DUP 80B60F <> \ MOVZX EAX , BYTE PTR X [EAX] + IF + DUP 40B70F <> \ MOVZX EAX , WORD PTR X [EAX] + IF + DUP 00B70F <> \ MOVZX EAX , WORD [EAX] + IF + DUP 82448B <> \ MOV EAX , 4 [EDX] [EAX*4] + IF + DUP 24048B <> \ MOV EAX , [ESP] + IF + DUP 24448B <> \ MOV EAX , [ESP+4] + IF +TRUE ?~EAX ! + DUP 24442B <> \ SUB EAX , [ESP+4] + IF +}?~EAX + DUP 24043B <> \ CMP EAX , [ESP] + IF + DUP 24443B <> \ CMP EAX , 20 [ESP] + IF + DUP 24548B <> \ MOV EDX , C [ESP] + IF + 2DROP FALSE TRUE EXIT + DUPENDCASE DROP CELL+ FALSE ; + +: EAX>ECX0 ( OPX - OPX' FLAG ) + + DUP OP0 = IF TRUE EXIT THEN + DUP @ W@ + DUP EFFF AND 4589 = \ OPX N F + IF DROP CELL- FALSE EXIT THEN + + DUP 0501 = \ ADD [444444H] , EAX + IF DROP CELL- FALSE EXIT THEN + + DUP 5589 = \ MOV X [EBP] , EDX + IF DROP CELL- FALSE EXIT THEN + DUP 38FF AND 008B = \ MOV EAX , ___ + IF DROP + 0800 OVER @ +! CELL- TRUE EXIT + THEN + DUP C28B = \ MOV EAX , EDX + IF DROP + CA OVER @ 1+ C! CELL- TRUE EXIT + THEN + DUP 808D = \ LEA EAX , 1 [EAX] + IF DROP + 88 OVER @ 1+ C! CELL- TRUE EXIT + THEN + DUP 408D = \ LEA EAX , 1 [EAX] + IF DROP + 48 OVER @ 1+ C! CELL- TRUE EXIT + THEN + + DUP 408B = \ MOV EAX , 1 [EAX] + IF DROP + 48 OVER @ 1+ C! CELL- TRUE EXIT + THEN + + DUP FF AND 8B = \ MOV ~EAX , ___ + IF DROP CELL- FALSE EXIT THEN + + DUP 38FF AND 008D = \ LEA EAX , ___ + IF DROP + 0800 OVER @ +! CELL- TRUE EXIT + THEN + DUP 428D = \ LEA EAX , 1 [EDX] + IF DROP + 0800 OVER @ +! CELL- TRUE EXIT + THEN + + DUP C00B = \ OR EAX , EAX + IF DROP CELL- FALSE EXIT THEN + + DUP 5089 = \ MOV C [EAX] , EDX + IF DROP CELL- FALSE EXIT THEN + + DUP 1089 = \ MOV [EAX] , EDX + IF DROP CELL- FALSE EXIT THEN + DUP 80C6 = \ MOV BYTE [EAX] , # X + IF DROP CELL- FALSE EXIT THEN + + DUP 45C7 = \ MOV FC [EBP] , # 1 + IF DROP CELL- FALSE EXIT THEN + DROP + DUP @ @ + DUP 0244B60F = \ MOVZX EAX , BYTE PTR 2 [EDX] [EAX] + IF DROP + 4C OVER @ 2+ C! CELL- TRUE EXIT + THEN + + FFFFFF AND + + DUP 80B60F = \ MOVZX EAX , BYTE PTR X [EAX] + IF DROP + 88 OVER @ 2+ C! CELL- TRUE EXIT + THEN + + DUP 40B70F = \ MOVZX EAX , WORD PTR x [EAX] + IF DROP + 48 OVER @ 2+ C! CELL- TRUE EXIT + THEN + + DUP 00B70F = \ MOVZX EAX , WORD PTR [EAX] + IF DROP + 08 OVER @ 2+ C! CELL- TRUE EXIT + THEN + +\ DUP 24442B = \ SUB EAX , [ESP+4] +\ IF DROP +\ 4C OVER @ 1+ C! CELL- TRUE EXIT +\ THEN + + FF AND + DUP 50 = \ PUSH EAX + IF DROP CELL- FALSE EXIT THEN + DUP B8 = \ MOV EAX , # 1000 + IF DROP + B9 OVER @ C! CELL- TRUE EXIT + THEN + DUP BA = \ MOV EDX , # 1000 + IF DROP CELL- FALSE EXIT THEN + DUP 3D = \ CMP EAX , # 1000 + IF DROP CELL- FALSE EXIT THEN + DUP 3B = \ CMP + IF DROP CELL- FALSE EXIT THEN + + DUP A3 = \ MOV 1000 , EAX + IF DROP CELL- FALSE EXIT THEN + + DUP A1 = \ MOV EAX , 1000 + IF DROP DUP 1 OPresize + 0D8B OVER @ W! CELL- TRUE EXIT + THEN + +HEX U. DUP @ @ U. U. ." EAX>ECX0" ABORT +; + +: EAX>ECX ( OPX - OPX' F | T ) + + DUP OP0 = IF TRUE EXIT THEN + DUP @ W@ +\ 8B00 MOV EAX , [EAX] +\ 3B05E3745400 CMP EAX , 5474E3 ( :-SET+5 ) + + DUP 5589 = \ MOV X [EBP] , EDX + IF DROP CELL- FALSE EXIT THEN + + DUP 3AFF AND 028B = \ MOV EAX , [EDX] + IF DROP + 0800 OVER @ +! CELL- FALSE EXIT + THEN + DUP 458B = \ MOV EAX , [EBP+X] + IF DROP + 4D OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP 008B = \ MOV EAX , [EAX] + IF DROP + 09 OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP D08B = \ MOV EDX , EAX + IF DROP + D1 OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP C28B = \ MOV EAX , EDX + IF DROP + CA OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP E0C1 = \ SHL EAX , 7 + IF DROP + E1 OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP C223 = \ AND EAX , EDX + IF DROP + CA OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP 0501 = \ ADD [444444H] , EAX + IF DROP + 0D01 OVER @ W! CELL- FALSE EXIT + THEN + + DUP 508B = \ MOV EDX , [EAX+4] + IF DROP + 51 OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP 053B = \ CMP EAX , 5474E3 ( :-SET+5 ) + IF DROP + 0D OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP 103B = \ CMP EDX , [EAX] + IF DROP + 11 OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP C23B = \ CMP EAX , EDX + IF DROP + CA OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP C00B = \ OR EAX , EAX + IF DROP + C9 OVER @ 1+ C! CELL- FALSE EXIT + THEN + DUP C01B = \ SBB EAX , EAX + IF DROP + C9 OVER @ 1+ C! CELL- FALSE EXIT + THEN + DUP F8D1 = \ SAR EAX , 1 + IF DROP + F9 OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP E8C1 = \ SAR EAX , 1 + IF DROP + E9 OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP 4589 = \ OPX N F MOV FC [EBP] , EAX + IF DROP + 4D OVER @ 1+ C! CELL- FALSE EXIT + THEN + DUP 5089 = \ MOV C [EAX] , EDX + IF DROP + 51 OVER @ 1+ C! CELL- FALSE EXIT + THEN + DUP 1089 = \ MOV [EAX] , EDX + IF DROP + 11 OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP 80C6 = \ MOV BYTE [EAX] , # X + IF DROP + 81 OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP 408D = \ LEA EAX , 1 [EAX] + IF DROP + 49 OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP 408B = \ MOV EAX , 1 [EAX] + IF DROP + 49 OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP 428D = \ LEA EAX , 1 [EDX] + IF DROP + 0800 OVER @ +! CELL- FALSE EXIT + THEN + + DUP 808D = \ LEA EAX , 1 [EAX] + IF DROP + 89 OVER @ 1+ C! CELL- FALSE EXIT + THEN + DUP C28B = \ MOV EAX , EDX + IF DROP + CA OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP D8F7 = \ NEG EAX + IF DROP + D9 OVER @ 1+ C! CELL- FALSE EXIT + THEN + DUP D0F7 = \ NOT EAX + IF DROP + D1 OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP D0F7 = \ NOT EAX + IF DROP + D1 OVER @ 1+ C! CELL- FALSE EXIT + THEN + DUP 4503 = \ ADD EAX , 0 [EBP] + IF DROP + 4D OVER @ 1+ C! CELL- FALSE EXIT + THEN + DUP 0523 = \ AND EAX , 587744 ( D+5 ) + IF DROP + 0D OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP 558B = \ OPX N F MOV F8 [EBP] , EDX + IF DROP CELL- FALSE EXIT THEN + DUP 158B = \ MOV EDX , 587A88 + IF DROP CELL- FALSE EXIT THEN + DUP 45C7 = \ MOV FC [EBP] , # 1 + IF DROP CELL- FALSE EXIT THEN + DROP + DUP @ @ + DUP 0244B60F = \ MOVZX EAX , BYTE PTR 2 [EDX] [EAX] + IF DROP + 0A4C OVER @ 2+ W! CELL- TRUE EXIT + THEN + FFFFFF AND + DUP 85048D = \ LEA EAX , 0 [EAX*4] + IF DROP + 8D0C OVER @ 1+ W! CELL- FALSE EXIT + THEN + + DUP 85048B = \ MOV EAX , X [EAX*4] + IF DROP + 8D0C OVER @ 1+ W! CELL- FALSE EXIT + THEN + DUP 80B60F = \ MOVZX EAX , BYTE PTR X [EAX] + IF DROP + 89 OVER @ 2+ C! CELL- FALSE EXIT + THEN + + DUP 40B70F = \ MOVZX EAX , WORD PTR x [EAX] + IF DROP + 49 OVER @ 2+ C! CELL- FALSE EXIT + THEN + + DUP 00B70F = \ MOVZX EAX , WORD PTR [EAX] + IF DROP + 09 OVER @ 2+ C! CELL- FALSE EXIT + THEN + + DUP 82448B = \ MOV EAX , 4 [EDX] [EAX*4] + IF DROP + 8A4C OVER @ 1+ W! CELL- FALSE EXIT + THEN + DUP 24048B = \ MOV EAX , [ESP] + IF DROP + 0C OVER @ 1+ C! CELL- FALSE EXIT + THEN + DUP 24448B = \ MOV EAX , [ESP+4] + IF DROP + 4C OVER @ 1+ C! CELL- FALSE EXIT + THEN + + DUP 24043B = \ CMP EAX , [ESP] + IF DROP + 0C OVER @ 1+ C! CELL- FALSE EXIT + THEN + DUP 24443B = \ CMP EAX , 20 [ESP] + IF DROP + 4C OVER @ 1+ C! CELL- FALSE EXIT + THEN + DUP 24548B = \ MOV EDX , C [ESP] + IF DROP CELL- FALSE EXIT THEN + DUP 24442B = \ SUB EAX , [ESP+4] + IF DROP + 4C OVER @ 1+ C! CELL- FALSE EXIT + THEN + + FF AND + DUP 50 = \ PUSH EAX + IF DROP + 51 OVER @ C! CELL- FALSE EXIT + THEN + DUP B8 = \ MOV EAX , # 1000 + IF DROP + B9 OVER @ C! CELL- FALSE EXIT + THEN + DUP A3 = \ MOV 1000 , EAX + IF DROP DUP 1 OPresize + 0D89 OVER @ W! CELL- FALSE EXIT + THEN + DUP A1 = \ MOV EAX , # 1000 + IF DROP DUP 1 OPresize + 0D8B OVER @ W! CELL- FALSE EXIT + THEN + DUP 25 = \ AND EAX , # X + IF DROP DUP 1 OPresize + E181 OVER @ W! CELL- FALSE EXIT + THEN + DUP BA = \ MOV EDX , # 1000 + IF DROP CELL- FALSE EXIT THEN + DUP 3D = \ CMP EAX , # 1000 + IF DROP DUP 1 OPresize + F981 OVER @ W! CELL- FALSE EXIT + THEN + U. DUP @ @ U. U. ." EAX>ECX" ABORT +; + +: -EBPLIT ( n OPX -- n OPX' ) + DUP @ :-SET U> 0= IF EXIT THEN + BEGIN + ?OPlast IF EXIT THEN + DUP @ W@ 6D8D = IF EXIT THEN \ LEA EBP , X [EBP] + DUP @ C@ E8 = IF EXIT THEN \ CALL + DUP @ C@ E9 = IF EXIT THEN \ JMP + DUP @ C@ F0 + AND 70 = IF EXIT THEN \ Jx + DUP @ C@ EB = IF EXIT THEN + DUP @ W@ F0FF + AND 800F = IF EXIT THEN + 2DUP @ 2+ C@ = IF EXIT THEN + CELL+ DUP @ :-SET U> 0= + UNTIL ; +1 [IF] +: -EBPCLR ( FLAG OPX -- FLAG' ) + DUP @ :-SET U< IF DROP EXIT THEN + OFF-EBP CELL- TO OFF-EBP + BEGIN + ?OPlast IF DROP EXIT THEN + DUP @ W@ 6D8D = IF DROP EXIT THEN + DUP @ C@ E8 = IF DROP EXIT THEN \ CALL + DUP @ C@ E9 = IF DROP EXIT THEN \ JMP + DUP @ C@ F0 + AND 70 = IF DROP EXIT THEN \ Jx + DUP @ C@ EB = IF DROP EXIT THEN + DUP @ W@ F0FF + AND 800F = IF DROP EXIT THEN + DUP @ @ FFFFFF AND 85448B = \ MOV EAX , FC [EBP] [EAX*4] + IF DROP EXIT THEN + +\ DUP @ 2+ C@ DUP U. OFF-EBP FF AND DUP U. = + DUP @ 2+ C@ OFF-EBP FF AND = + IF DUP @ W@ E7FF AND 4589 = \ MOV X [EBP] , EAX|EDX|EBX|ECX + OVER @ W@ 45C7 = OR \ MOV F8 [EBP] , # 2710 + IF M\ 20A DTST +\ ." ^" DUP @ U. :-SET U. \ OPexcise NIP TRUE SWAP CELL- + DUP OPexcise NIP TRUE SWAP CELL- + ELSE DROP EXIT + THEN + THEN + CELL+ DUP @ :-SET U< + UNTIL DROP ; + +[ELSE] +: -EBPCLR ( FLAG OPX -- FLAG' ) + OFF-EBP CELL- TO OFF-EBP + BEGIN + OFF-EBP SWAP -EBPLIT NIP + ?OPlast IF DROP EXIT THEN + :-SET OVER @ U< + WHILE DUP @ 2+ C@ OFF-EBP FF AND = + IF DUP @ W@ E7FF AND 4589 = \ MOV X [EBP] , EAX|EDX|EBX|ECX + IF M\ 20A DTST + DUP OPexcise NIP TRUE SWAP \ CELL- + ELSE DROP EXIT + THEN + ELSE + DUP @ @ FFFFFF AND 85448B = \ MOV EAX , FC [EBP] [EAX*4] + IF DROP EXIT THEN + CELL+ + ?OPlast IF DROP EXIT THEN + DUP @ :-SET U< IF DROP EXIT THEN + THEN + REPEAT DROP +; +[THEN] + +: T?EAX>ECX ( FALSE | OPX' TRUE -- ... ) + IF CELL+ CELL+ FALSE + ELSE FALSE TRUE + THEN ; + +: F?EAX>ECX ( FLAG -- ... ) + IF \ TRUE TRUE + ?~EAX @ + IF DROP FALSE + ELSE TRUE + THEN TRUE + ELSE FALSE + THEN ; +: ECX:=EAX ( OPX -- OPX- ) + DUP 2 OPinsert + C88B OVER CELL+ @ W! \ MOV ECX , EAX +\ CELL- +; + +: EBX:=EAX ( OPX -- OPX- ) + DUP 2 OPinsert + D88B OVER CELL+ @ W! \ MOV EBX , EAX +\ CELL- +; + +TRUE VALUE ~BR-OPT + +: ?EAX:=ECX ( -- ) + ?~EAX @ + IF SetOP 8B C, C1 C, \ MOV EAX , ECX + THEN ; +: DO_EAX>ECX ( -- FLAG ) + OP1 + BEGIN ?EAX>ECX + DUP 0= \ TTTT AND + IF DROP CELL- + ?OPlast IF DROP FALSE EXIT THEN + DUP @ :-SET U< IF DROP FALSE EXIT THEN + DUP @ W@ 4D89 = \ OPX N F MOV FC [EBP] , ECX + IF DUP @ 2+ C@ + OP0 @ 2+ C@ = + IF M\ 410 DTST + DROP ?~EAX 0! + OP0 2 OPinsert + C18B OP1 @ W! \ MOV EAX , ECX + OP0 TRUE TRUE + ELSE DROP FALSE TRUE + THEN + ELSE CELL+ FALSE + THEN + THEN + UNTIL DUP >R + IF M\ 40E DTST + ?~EAX @ + IF ECX:=EAX + ELSE BEGIN EAX>ECX0 UNTIL + THEN BEGIN EAX>ECX UNTIL + DROP + OP1 ToOP0 + -3 ALLOT + M\ 40F DTST + THEN R> +; +M\ VARIABLE VPPP : PPPP DUP VPPP @ <> IF 0 @ THEN ; + +VECT FPOP + +: ?EAX=RULES ( ADDR -- ADDR' FLAG ) + + BEGIN OP1 @ :-SET +\ TTTT IF ." T=" 2DUP HEX U. U. THEN + U< IF TRUE EXIT THEN + OP1 @ ?ChEAX 0= + ~BR-OPT AND +\ OP1 @ W@ ADD|XOR|OR|AND= OR + WHILE M\ 0 DTST + OP1 OPexcise + M\ 1 DTST + REPEAT + OP1 @ @ FC458B58 = \ POP EAX MOV EAX , FC [EBP] + IF M\ F0 DTST + 0424648D OP1 @ ! + OP1 ToOP0 + FALSE M\ F1 DTST + EXIT + THEN + M\ PPPP + + OP2 @ :-SET U< 0= IF \ GOTO OP2> + OP2 @ C@ B8 = \ MOV EAX , # 44444 + IF + OP1 @ @ FFFFFF AND 240401 = \ ADD [ESP] , EAX + IF M\ B0E DTST + OP2 @ 1+ @ + 240481 OP2 @ ! \ ADD [ESP] , # + OP2 @ 3 + ! + 2 OP1 +! + OP0 @ 2@ OP1 @ 2! + OP1 ToOP0 + FALSE -1 ALLOT M\ B0F DTST + EXIT + THEN + M\ PPPP + OP1 @ W@ 00C7 = \ MOV [EAX] , # X + IF M\ C0E DTST + OP1 @ 2+ @ + OP2 @ 1+ @ + 05C7 OP2 @ W! \ MOV 44444 , # X + OP2 @ 2+ ! OP2 @ 6 + ! + 5 OP1 +! + OP0 @ 2@ OP1 @ 2! + OP1 ToOP0 + FALSE -1 ALLOT M\ C0F DTST + EXIT + THEN + THEN + M\ PPPP + + OP2 @ ?ChEAX + OP1 @ W@ 5589 XOR \ 8955FC MOV FC [EBP] , EDX + OP1 @ W@ 1501 <> AND \ 011544444400 ADD 444444 , EDX + OP1 @ W@ 1589 <> AND OR \ 891544444400 MOV 444444 , EDX +\ EAX= +0= IF M\ C2 DTST + OP2 OPexcise + FALSE M\ C3 DTST + EXIT + THEN + THEN \ LAB: OP2> + + OP0 @ W@ 458B = \ MOV EAX , X [EBP] + IF + OP1 \ ." $" + BEGIN XX_STEP + UNTIL + IF M\ 90E DTST + OP1 ToOP0 -3 ALLOT FALSE M\ 90F DTST + EXIT + THEN + DO_EAX>ECX IF FALSE EXIT THEN + TRUE ?~EAX ! + OP1 + BEGIN ?EAX>EBX + UNTIL + IF M\ 80E DTST + ?~EAX @ + IF EBX:=EAX + ELSE BEGIN EAX>EBX0 UNTIL + THEN BEGIN EAX>EBX UNTIL + DROP + OP1 ToOP0 + FALSE + -3 ALLOT M\ 80F DTST + EXIT + THEN + + :-SET OP2 @ U< IF \ GOTO OP2 MOV EAX , X [EBP] + + +OP2 @ W@ 5589 XOR \ 8955FC MOV FC [EBP] , EDX +OP1 @ W@ 889 XOR OR \ 8908 MOV [EAX] , ECX +\ MOV EAX , X [EBP] +OP2 @ 2+ C@ OP0 @ 2+ C@ XOR OR \ X2=X0 +0= IF M\ 11E DTST + C28B OP0 @ W! \ MOV EAX , EDX + -1 ALLOT + FALSE M\ 11F DTST + EXIT + THEN +\ $ DUP >R + OP2 @ W@ 4589 XOR \ MOV X2 [EBP] , EAX + OP1 @ C@ 50 XOR OR \ PUSH EAX +\ OP0 @ W@ 458B XOR OR \ MOV EAX , X0 [EBP] + OP2 @ 2+ C@ OP0 @ 2+ C@ XOR OR 0= \ X2=X0 + IF M\ 1E DTST + 50 OP2 @ C! + OP2 ToOP0 + -6 ALLOT + FALSE M\ 1F DTST + EXIT + THEN + + DUP C@ C3 XOR +OP2 @ C@ BA XOR OR \ MOV EDX , # 1000 +OP1 @ W@ 1089 XOR OR \ MOV [EAX] , EDX +\ MOV EAX , FC [EBP] + 0= IF M\ 52 DTST + OP2 1 OPresize + 00C7 OP2 @ W! \ MOV [EAX] , # 1000 + OP1 OPexcise + FALSE M\ 53 DTST + EXIT + THEN + + :-SET OP4 @ U< IF \ GOTO OP4 MOV EAX , X [EBP] + + DUP C@ 0C3 XOR + \ CR ." XX" + OP4 @ W@ 4D89 XOR OR \ 567F5A 894DF8 MOV F8 [EBP] , ECX + OP3 @ W@ 1089 XOR OR \ 567F5D 8910 MOV [EAX] , EDX + OP2 @ W@ 558B XOR OR \ 567F5F 8B55F8 MOV EDX , F8 [EBP] + OP1 @ W@ 5089 XOR OR \ 567F62 895004 MOV 4 [EAX] , EDX +\ OP0 @ W@ 458B XOR OR \ 567F65 8B45FC MOV EAX , FC [EBP] + OP4 @ 2+ C@ OP2 @ 2+ C@ XOR OR \ X0=X2 \ ├╨╙┴╬ + 0= IF M\ 232 DTST + OP2 OPexcise + 4889 OP1 @ W! \ MOV [EAX+4] , ECX + FALSE M\ 233 DTST + EXIT + THEN + THEN \ L: OP4 MOV EAX , X [EBP] + THEN \ L: OP2 MOV EAX , X [EBP] + THEN +DUP C@ C3 XOR +OP0 @ C@ A1 XOR OR \ MOV EAX , X +0= IF OP1 + BEGIN ?EAX>ECX + IF T?EAX>ECX + ELSE CELL- ?OPlast >R + DUP @ :-SET U< R> OR + IF DROP FALSE TRUE + ELSE DUP >R + R@ CELL- @ CELL- @ + OP0 @ 1+ @ = + IF R@ @ C@ FD AND A1 = \ MOV { EAX , X } | { X ,EAX } + DUP + IF F?EAX>ECX + ELSE 2DROP FALSE TRUE + THEN + ELSE DROP FALSE TRUE + THEN RDROP + THEN + THEN + UNTIL + IF M\ F0E DTST + CELL- \ DROP TRUE EXIT + BEGIN EAX>ECX0 UNTIL + BEGIN EAX>ECX UNTIL + DROP \ ." #" + OP1 ToOP0 + FALSE + -5 ALLOT M\ F0F DTST + EXIT + THEN + + THEN + M\ PPPP +DUP C@ C3 XOR +OP0 @ C@ 58 XOR OR \ POP EAX +0= IF OP1 \ TTTT IF ." ?EAX>ECX" THEN + BEGIN ?EAX>ECX + IF T?EAX>ECX + ELSE CELL- + ?OPlast + OVER @ :-SET U< OR + OVER @ @ FF00FF AND 24008B = OR \ 8B0424 MOV ___ , [ESP] + IF DROP FALSE TRUE + ELSE DUP @ C@ 50 XOR \ PUSH EAX , X +\ 0= F?EAX>ECX + 0= IF TRUE TRUE + ELSE CELL+ FALSE + THEN + + THEN + THEN + UNTIL + IF M\ CA DTST \ ." $" + DUP OPexcise + CELL- \ DROP TRUE EXIT + ?~EAX @ + IF ECX:=EAX + ELSE BEGIN EAX>ECX0 UNTIL + THEN BEGIN EAX>ECX UNTIL + DROP + OP1 ToOP0 + FALSE + -1 ALLOT +\ ?EAX:=ECX + M\ CB DTST + EXIT + THEN + + THEN + +OP1 @ @ 24048B50 = \ 50 PUSH EAX + \ 8B0424 MOV EAX , [ESP] + IF M\ E2 DTST + OP0 OPexcise + FALSE M\ E3 DTST + EXIT + THEN + +DUP C@ C3 XOR +OP1 @ W@ D08B XOR OR \ 8BD0 MOV EDX , EAX +OP0 @ @ FFFFFF AND 95048B XOR OR \ 8B0495F0065A00 MOV EAX , 5A06F0 [EDX*4] +0= IF M\ 13C DTST + OP1 OPexcise + 85 OP0 @ 2+ C! \ MOV EAX , 5982D8 [EAX*4] + + FALSE M\ 13D DTST + EXIT + THEN + +OP1 @ 2+ @ +OP0 @ 1+ @ XOR +OP1 @ W@ 589 XOR OR \ 890577770700 MOV 77777 , EAX +OP0 @ C@ A1 XOR OR \ A177770700 MOV EAX , 77777 +0= IF M\ 150 DTST + OP0 OPexcise + FALSE M\ 151 DTST + EXIT + THEN + + +OP2 @ :-SET U< IF TRUE EXIT THEN M\ PPPP + + OP1 @ C@ A3 = \ MOV ' VVVV >BODY , EAX + IF OP2 @ C@ B8 = \ MOV EAX, # X + IF M\ 20E DTST + OP2 @ 1+ @ OP1 @ 1+ @ + OP2 @ 2+ ! OP1 @ 1+ ! + 05C7 OP2 @ W! + OP0 @ OP1 ! + FALSE + OP1 ToOP0 M\ 20F DTST + EXIT + THEN + OP2 @ W@ C033 = \ XOR EAX , EAX + IF M\ 30E DTST + 3 ALLOT + OP0 @ @ OP0 @ 3 + ! + 05C7 OP2 @ W! + OP1 @ 1+ @ OP1 @ ! + OP1 @ CELL+ 0! + OP1 @ 08 + OP1 ! + FALSE + OP1 ToOP0 M\ 30F DTST + EXIT + THEN + OP3 @ :-SET U< IF TRUE EXIT THEN M\ PPPP + OP3 @ 1+ @ + OP1 @ 1+ @ XOR + OP3 @ C@ 0A1 XOR OR \ MOV EAX , XX \ MOV XX , EAX \ EAX= +0= IF + OP2 @ C@ 025 = \ AND EAX , # ZZ + IF + M\ 530 DTST + OP3 @ 1+ @ + OP2 @ 1+ @ + OP3 OPexcise + OP2 OPexcise + OP1 OPexcise + OP0 0A OPinsert + 2581 OP1 @ ! OP1 @ 6 + ! OP1 @ 2+ ! + FALSE M\ 531 DTST + EXIT + THEN + OP2 @ W@ 408D = + IF + OP2 @ 2+ C@ FF = \ LEA EAX , FF [EAX] + IF + M\ 632 DTST + OP3 01 OPresize + 0DFF OP3 @ W! + OP2 OPexcise + OP1 OPexcise + FALSE M\ 633 DTST + EXIT + THEN + THEN + THEN TRUE EXIT + THEN + + \ $ 4444 TO VVVV + + OP2 @ C@ A1 XOR \ MOV EAX , 44444 + OP1 @ C@ 3D XOR OR \ CMP EAX , # 55555 +0= IF M\ 218 DTST + OP2 @ 1+ @ OP2 @ 2+ ! + 3D81 OP2 @ W! \ CMP 44444 , # 55555 + OP0 @ OP1 ! + OP1 ToOP0 + FALSE + EXIT M\ 219 DTST + THEN + +\ OP0 @ C@ 58 = \ POP EAX +\ IF + OP1 @ C@ 50 = \ PUSH EAX + IF + \ 444 >R + OP2 @ C@ B8 = \ MOV EAX , # 5 + IF M\ 1A DTST + 68 OP2 @ C! + OP0 @ 2@ OP1 @ 2! + OP1 ToOP0 + FALSE -1 ALLOT M\ 1B DTST + EXIT + THEN + THEN + OP1 @ W@ 4589 = \ MOV X [EBP], EAX EAX= + IF + \ 444 555 + OP2 @ C@ B8 = \ MOV EAX , 5 + IF M\ 1C DTST + OP2 @ 1+ @ + 45C7 OP2 @ W! + OP1 @ 2+ C@ OP2 @ 2+ C! + OP2 @ 3 + ! + 2 OP1 +! + OP0 @ 2@ OP1 @ 2! + OP1 ToOP0 + FALSE -1 ALLOT M\ 1D DTST + EXIT + THEN + THEN +\ THEN +M\ PPPP +OP2 @ C@ B8 XOR \ MOV EAX , # 789 +OP1 @ W@ C88B XOR OR \ MOV ECX , EAX +\ EAX= +0= IF M\ 830 DTST + B9 OP2 @ C! + OP1 OPexcise + FALSE M\ 831 DTST + EXIT + THEN + +OP2 @ W@ 878D XOR \ LEA EAX , 1448 [EDI] +OP1 @ W@ 00FF XOR OR \ INC [EAX] +\ EAX= +0= IF M\ 930 DTST + FF OP2 @ C! + OP1 OPexcise + FALSE M\ 931 DTST + EXIT + THEN +OP2 @ @ FFFFFF AND 8D048D XOR \ LEA EAX , X [ECX*4] +OP1 @ W@ 1089 XOR OR \ MOV [EAX] , EDX +\ EAX= +0= IF M\ 5E DTST + 1489 OP2 @ W! \ MOV [44444H+ECX*4], EDX + OP1 OPexcise + FALSE M\ 5F DTST + EXIT + THEN +M\ PPPP + DUP C@ 0C3 XOR +OP2 @ W@ D08B XOR OR \ MOV EDX , EAX +OP1 @ @ FFFFFF AND 8D1489 XOR OR \ MOV X [ECX*4] , EDX +\ EAX= +0= IF M\ 60 DTST + OP2 OPexcise + 0489 OP1 @ W! \ MOV [44444H+ECX*4], EAX + FALSE M\ 61 DTST + EXIT + THEN + +OP2 @ 2+ C@ +OP0 @ 2+ C@ XOR +OP2 @ W@ 5589 XOR OR \ MOV F8 [EBP] , EDX +OP1 @ W@ 4589 XOR OR \ MOV F4 [EBP] , EAX +OP0 @ W@ 458B XOR OR \ MOV EAX , F8 [EBP] +0= IF M\ 64 DTST + C28B OP0 @ W! \ MOV EAX , EDX + -1 ALLOT + FALSE M\ 65 DTST + EXIT + THEN +OP2 @ W@ C033 XOR \ 57DD80 33C0 XOR EAX , EAX +OP1 @ W@ 4589 XOR OR \ 57DD82 8945F8 MOV F8 [EBP] , EAX +\ EAX= +0= IF M\ 6C DTST + OP2 OPexcise + OP0 4 OPresize 4 OP0 +! + 45C7 OP1 @ W! OP1 @ 3 + 0! \ MOV F8 [EBP] , # 0 + FALSE M\ 6D DTST + EXIT + THEN +OP2 @ @ 45C7D08B XOR \ MOV EDX , EAX MOV F8 [EBP] , # X +OP0 @ W@ C28B XOR OR \ MOV EAX , EDX +0= IF M\ 6E DTST + OP0 OPexcise + FALSE M\ 6F DTST + EXIT + THEN + + DUP C@ C3 XOR +OP2 @ C@ BA XOR OR \ MOV EDX , # 0 +OP1 @ W@ 1088 XOR OR \ MOV [EAX] , DL +\ EAX= +0= IF M\ 70 DTST + OP2 @ 1+ C@ + OP2 OPexcise + OP1 1 OPresize + 00C6 OP1 @ W! \ MOV BYTE PTR [EAX] , 44H + OP1 @ 2+ C! + FALSE M\ 71 DTST + EXIT + THEN +OP2 @ W@ 808D XOR \ LEA EAX , X [EAX] +OP1 @ W@ 00C6 XOR OR \ MOV [EAX] , # 0 +\ EAX= +0= IF M\ 72 DTST + 80C6 OP2 @ W! + OP1 @ 2+ C@ OP1 @ C! + 1 OP1 +! + OP1 OPexcise + FALSE M\ 73 DTST + EXIT + THEN + + DUP C@ C3 XOR +OP2 @ W@ D18B XOR OR \ 596C15 8BD1 MOV EDX , ECX +OP1 @ W@ 1089 XOR OR \ 596C17 8910 MOV [EAX] , EDX +\ EAX= +0= IF M\ 72 DTST + OP2 OPexcise + 0889 OP1 @ W! + FALSE M\ 73 DTST + EXIT + THEN + +OP2 @ @ FFFFFF AND 24448B XOR \ MOV EAX , 30 [ESP] +OP1 @ W@ F7FF AND 44FF XOR OR \ FF4424 INC DEC 30 [ESP] +\ EAX= +0= IF M\ 8A DTST + OP2 OPexcise + FALSE M\ 8B DTST + EXIT + THEN + +OP2 @ C@ B8 XOR \ MOV EAX , # 1 +OP1 @ @ FFFFFF AND 21C8D XOR OR \ LEA EBX , [EDX] [EAX] +\ EAX= +0= IF M\ AA DTST + OP2 1 OPresize + 9A8D OP2 @ W! + OP1 OPexcise + FALSE M\ AB DTST + EXIT + THEN +OP2 @ C@ BA XOR \ MOV EDX , # 7FFFFFEE +OP1 @ W@ 9A8D XOR OR \ LEA EBX , 1 [EDX] +\ EAX= +0= IF M\ AC DTST + OP1 @ 2+ @ + OP1 OPexcise + OP0 5 OPinsert + BB OP1 @ C! \ MOV EBX , # + OP2 @ 1+ @ + OP1 @ 1+ ! + FALSE M\ AD DTST + EXIT + THEN + +OP2 @ W@ C28B XOR \ 8BC2 MOV EAX , EDX +OP1 @ @ C28BC00B XOR OR \ 0BC0 OR EAX , EAX + \ 8BC2 MOV EAX , EDX +0= IF M\ C4 DTST + OP2 OPexcise + C28BD20B OP1 @ ! \ OR EDX , EDX MOV EAX , EDX + FALSE M\ C5 DTST + EXIT + THEN + + DUP C@ C3 XOR +OP2 @ W@ D18B XOR OR \ 58270A 8BD1 MOV EDX , ECX +OP1 @ W@ 4589 XOR OR \ 58270C 8945F8 MOV F8 [EBP] , EAX +OP0 @ W@ C28B XOR OR \ 58270F 8BC2 MOV EAX , EDX +0= IF M\ D4 DTST + OP2 OPexcise + C18B OP0 @ W! \ MOV EAX , ECX + FALSE M\ D5 DTST + EXIT + THEN + +DUP C@ C3 XOR + \ 8BD0 MOV EDX , EAX +OP2 @ @ 501D08B XOR \ 010544440400 ADD 44444 , EAX +OP2 @ @ 589D08B <> AND OR \ 890544440400 MOV 44444 , EAX +OP0 @ W@ 458B XOR OR \ 8B4500 MOV EAX , 0 [EBP] +0= IF M\ D4 DTST + OP2 OPexcise + FALSE M\ D5 DTST + EXIT + THEN + +OP2 @ @ 1589D08B = \ 8BD0 MOV EDX , EAX + \ 891555550500 MOV 55555 , EDX + IF M\ E8 DTST + 0589 OP1 @ W! \ MOV 5800E0 , EAX + FALSE M\ E9 DTST + EXIT + THEN + +OP2 @ W@ 408D XOR \ 8D4020 LEA EAX , 20 [EAX] +OP1 @ @ 458BC88B XOR OR \ 8BC8 MOV ECX , EAX + \ 8B45F8 MOV EAX , F8 [EBP] +0= IF M\ F2 DTST + 488D OP2 @ W! \ LEA ECX , 20 [EAX] + OP1 OPexcise + FALSE M\ F3 DTST + EXIT + THEN + + OP2 @ ?ChEAX + OP2 @ ^?EAX= AND +OP1 @ C@ B9 XOR OR \ 587AC6 B919000000 MOV ECX , # 19 +\ EAX= +0= IF M\ FE DTST + OP2 OPexcise + FALSE M\ FF DTST + EXIT + THEN + +OP2 @ 2+ C@ +OP0 @ 2+ C@ XOR +OP2 @ W@ 5589 XOR OR \ 8955E8 MOV E8 [EBP] , EDX + +OP1 ?EDX_[EBP] OR + +OP0 @ W@ 458B XOR OR \ 8B45E8 MOV EAX , E8 [EBP] +0= IF M\ BC DTST + C28B OP0 @ W! \ MOV EAX , EDX + -1 ALLOT + FALSE M\ BD DTST + EXIT + THEN + +DUP C@ C3 XOR +OP2 @ @ 9788D08B XOR OR \ 8BD0 MOV EDX , EAX + \ 88973C100000 MOV 103C [EDI] , DL +\ EAX= +0= IF M\ 112 DTST + OP2 OPexcise + 8788 OP1 @ W! \ MOV 103C [EDI] , AL + FALSE M\ 113 DTST + EXIT + THEN + +OP2 @ C@ 50 XOR \ 50 PUSH EAX +OP1 @ W@ 4589 XOR OR \ 8945FC MOV FC [EBP] , EAX +OP0 @ W@ 48B XOR OR \ 8B0424 MOV EAX , [ESP] +0= IF M\ 164 DTST + OP0 OPexcise + FALSE M\ 165 DTST + EXIT + THEN + +M\ PPPP +OP3 @ :-SET U< IF TRUE EXIT THEN + +\ $ SWAP 4444 + OP2 @ W@ C28B = \ MOV EAX , EDX + IF OP1 @ W@ 4589 = \ MOV X [EBP] , EAX + IF M\ 60E DTST + 1000 OP1 @ +! \ MOV X [EBP] , EDX + FALSE OP2 OPexcise M\ 60F DTST + EXIT + THEN + THEN + +OP3 @ @ 408DC48B XOR \ MOV EAX , ESP LEA EAX , 8 [EAX] +OP1 @ W@ E08B XOR OR \ MOV ESP , EAX +0= IF M\ 8A DTST + -1 OP2 +! + 24648D00 OP2 @ 1- ! \ LEA ESP , 8 [ESP] + OP3 OPexcise + OP1 OPexcise + FALSE M\ 8B DTST + EXIT + THEN + +OP3 @ W@ C88B = \ 581B54 8BC8 MOV ECX , EAX +IF + DUP C@ C3 XOR +\ OP3 @ W@ C88B XOR OR \ 587733 8BC8 MOV ECX , EAX + OP2 @ W@ 428D XOR OR \ 587735 8D4201 LEA EAX , 1 [EDX] + OP1 @ W@ 4589 XOR OR \ 587738 894500 MOV 0 [EBP] , EAX + OP0 @ W@ C18B XOR OR \ 58773B 8BC1 MOV EAX , ECX + 0= IF M\ 142 DTST + OP3 OPexcise + OP0 OPexcise + 528D OP1 @ W! \ LEA EDX , 1 [EDX] + 5589 OP0 @ W! \ MOV 0 [EBP] , EDX + FALSE M\ 143 DTST + EXIT + THEN + OP5 @ J-SET U< 0= IF \ GOTO 5SET + OP5 @ W@ C18B XOR \ 581B4C 8BC1 MOV EAX , ECX + OP4 @ W@ 840F XOR OR \ 581B4E 0F8400000000 JE 581B54 ( zz+14 ) + 0= IF M\ B0 DTST + OP3 OPexcise + FALSE M\ B1 DTST + EXIT + THEN THEN \ 5SET: +THEN + + DUP C@ 0C3 XOR +OP3 @ @ C103D8F7 XOR OR \ F7D8 NEG EAX + \ 03C1 ADD EAX , ECX +OP1 @ W@ 4589 XOR OR \ 894500 MOV 0 [EBP] , EAX +OP0 @ W@ C28B XOR OR \ 8BC2 MOV EAX , EDX +0= IF M\ CE DTST + OP3 OPexcise + C82B OP2 @ W! \ SUB ECX , EAX + 4D89 OP1 @ W! \ MOV 0 [EBP] , ECX + FALSE M\ CF DTST + EXIT + THEN + +OP3 @ @ C82BD08B XOR \ 8BD0 MOV EDX , EAX + \ 2BC8 SUB ECX , EAX +OP1 @ W@ 4D89 XOR OR \ 894D00 MOV 0 [EBP] , ECX +OP0 @ W@ C28B XOR OR \ 8BC2 MOV EAX , EDX +0= IF M\ D0 DTST + DUP C@ 0C3 = + IF OP3 OPexcise THEN + OP0 OPexcise + FALSE M\ D1 DTST + EXIT + THEN + +DUP C@ C3 XOR +OP3 @ @ 418DD08B XOR OR \ 8BD0 MOV EDX , EAX + \ 8D41FF LEA EAX , FF [ECX] +OP1 @ W@ 4589 XOR OR \ 8945F8 MOV F8 [EBP] , EAX +OP0 @ W@ C28B XOR OR \ 8BC2 MOV EAX , EDX +0= IF M\ EA DTST + OP3 OPexcise + OP0 OPexcise + 498D OP1 @ W! \ LEA ECX , FF [ECX] + 4D89 OP0 @ W! \ MOV F8 [EBP] , ECX + FALSE M\ EB DTST + EXIT + THEN + +OP3 @ 2+ C@ +OP0 @ 2+ C@ XOR +OP3 @ W@ 5589 XOR OR \ 8955E8 MOV E8 [EBP] , EDX + +OP2 ?EDX_[EBP] OR +OP1 ?EDX_[EBP] OR + +OP0 @ W@ 458B XOR OR \ 8B45E8 MOV EAX , E8 [EBP] +0= IF M\ BC DTST + C28B OP0 @ W! \ MOV EAX , EDX + -1 ALLOT + FALSE M\ BD DTST + EXIT + THEN + +DUP C@ C3 XOR +OP2 @ C@ BA XOR OR \ BA2C000000 MOV EDX , # 2C +OP1 @ @ 458B1001 XOR OR \ 0110 ADD [EAX] , EDX + \ 8B45FC MOV EAX , FC [EBP] +0= IF M\ 14C DTST + OP1 OPexcise + OP1 1 OPresize + 0081 OP1 @ W! \ ADD [EAX] , # 2C + FALSE M\ 14D DTST + EXIT + THEN +OP2 @ C@ B8 XOR \ 57DDE3 B844440400 MOV EAX , # 44444 +OP1 @ W@ 81 XOR OR \ 57DDE8 81002C000000 ADD [EAX] , # 2C +OP0 @ W@ 458B XOR OR \ 57DDEE 8B45FC MOV EAX , FC [EBP] +0= IF M\ 14E DTST + OP2 @ 1+ @ OP2 @ 2+ ! + OP1 @ 2+ @ OP1 @ 1+ ! + 0581 OP2 @ W! \ ADD 44444 , # 2C + 5 OP1 +! + OP1 OPexcise + FALSE M\ 14F DTST + EXIT + THEN + +OP2 @ 2+ C@ +OP0 @ 2+ C@ XOR +OP2 @ W@ 45C7 XOR OR \ MOV F8 [EBP] , # 3 +OP1 @ C@ B9 XOR OR \ MOV ECX , # 4 +OP0 @ W@ 458B XOR OR \ MOV EAX , F8 [EBP] +0= IF M\ 3E DTST + OP2 @ 3 + @ OP2 @ 1+ ! + B8 OP2 @ C! + OP1 0 OPinsert -2 OP2 +! + OP2 OPexcise \ MOV EAX , # 3 + 4589 OP0 @ W! \ MOV F8 [EBP] , EAX + + FALSE M\ 3F DTST + EXIT + THEN + + +OP3 @ :-SET U< IF TRUE EXIT THEN + +OP3 @ C@ A1 XOR \ 57E2D7 A108E15700 MOV EAX , 57E108 +OP2 @ W@ 4589 XOR OR \ 57E2DC 8945EC MOV EC [EBP] , EAX +OP1 @ W@ D08B XOR OR \ 57E2DF 8BD0 MOV EDX , EAX +\ EAX= +0= IF M\ 152 DTST + OP3 1 OPresize + 158B OP3 @ W! \ MOV EDX , 57E108 + 5589 OP2 @ W! \ MOV EC [EBP] , EDX + OP1 OPexcise + FALSE M\ 153 DTST + EXIT + THEN + + +OP3 @ C@ 58 XOR \ POP EAX +OP2 @ @ FFFFFF AND FF408D XOR OR \ LEA EAX , FF [EAX] +OP1 @ C@ 50 XOR OR \ PUSH EAX +\ EAX= +0= IF M\ D30 DTST +\ OP2 1 OPresize + 240CFF OP2 @ ! \ DEC DWORD PTR [ESP] + OP3 OPexcise + OP1 OPexcise + FALSE M\ D31 DTST + EXIT + THEN + +DUP C@ C3 XOR +OP3 @ @ 458BD08B XOR OR \ 8BD0 MOV EDX , EAX MOV EAX , 0 [EBP] +OP1 @ W@ 4589 XOR OR \ 8945FC MOV FC [EBP] , EAX +OP0 @ W@ C28B XOR OR \ 8BC2 MOV EAX , EDX +0= IF M\ 166 DTST + OP3 OPexcise + OP0 OPexcise + 558B OP1 @ W! \ MOV EDX , 0 [EBP] + 5589 OP0 @ W! \ MOV FC [EBP] , EAX + FALSE M\ 167 DTST + EXIT + THEN + +DUP C@ C3 XOR +OP3 @ W@ D08B XOR OR \ 5822F8 8BD0 MOV EDX , EAX +OP2 @ W@ 458B XOR OR \ 5822FA 8B4508 MOV EAX , 8 [EBP] +OP1 @ W@ 1089 XOR OR \ 5822FD 8910 MOV [EAX] , EDX +OP0 @ W@ 458B XOR OR \ 5822FF 8B450C MOV EAX , C [EBP] +0= IF M\ 156 DTST + OP3 OPexcise + 558B OP2 @ W! \ MOV EDX , 8 [EBP] + 0289 OP1 @ W! \ MOV [EDX] , EAX + FALSE M\ 157 DTST + EXIT + THEN + + + +OP4 @ :-SET U< IF TRUE EXIT THEN +OP5 @ :-SET U< IF TRUE EXIT THEN + +OP5 @ C@ B8 XOR \ 596994 B812000000 MOV EAX , # 12 +OP4 @ W@ 4589 XOR OR \ 596999 8945F4 MOV F4 [EBP] , EAX +OP3 @ W@ 4589 XOR OR \ 59699C 8945F0 MOV F0 [EBP] , EAX +OP2 @ C@ BA XOR OR \ 59699F BA00000080 MOV EDX , # 80000000 +OP1 @ W@ D02B XOR OR \ 5969A4 2BD0 SUB EDX , EAX +\ EAX= +0= IF M\ A6 DTST + OP5 @ 1+ @ NEGATE OP2 @ 1+ +! + OP1 OPexcise + FALSE M\ A7 DTST + EXIT + THEN + + TRUE +; + + +\ : SSSSSS ; +\ TRUE VALUE ?C-JMP + FALSE VALUE ?C-JMP + +\ $ - єърч√трхЄ эр ЇЁруьхэЄ шёїюфэюую ЄхъёЄр, юяЄшьшчшЁєхь√щ +\ фрээ√ь ьхЄюфюь + +: OPT-RULES ( ADDR -- ADDR' FLAG ) + + BEGIN M\ -1 DTST + OP0 @ :-SET U< IF TRUE EXIT THEN + + OP0 @ W@ 408D = \ LEA EAX, X [EAX] + WHILE M\ 2 DTST + OP0 @ 2+ C@ C>S OFF-EAX + TO OFF-EAX + OP1 ToOP0 + -3 ALLOT M\ 3 DTST + REPEAT M\ DUP VPPP ! + OP0 @ C@ 05 = ~BR-OPT AND \ ADD EAX, # X + IF M\ 4 DTST + OP0 @ 1+ @ OFF-EAX + TO OFF-EAX + OP1 ToOP0 + FALSE -5 ALLOT M\ 5 DTST + EXIT + THEN +M\ PPPP + OP0 @ W@ 808D = \ LEA EAX, X [EAX] + IF M\ 6 DTST + OP0 @ 2+ @ OFF-EAX + TO OFF-EAX + OP1 ToOP0 + -6 ALLOT FALSE M\ 7 DTST + EXIT + THEN + OFF-EAX + OP0 @ W@ C033 = AND \ XOR EAX , EAX + IF M\ 4A DTST + B8 OP0 @ C! + OFF-EAX OP0 @ 1+ ! + 0 TO OFF-EAX + 3 ALLOT FALSE M\ 4B DTST + EXIT + THEN +M\ PPPP + OP0 @ @ 3FFFFF AND + 05048D = \ LEA EAX, X [EAX*_] + IF + +\ $ 4444 CELLS + + OP1 @ :-SET U< 0= + IF + OP1 @ C@ B8 XOR \ MOV EAX, # X1 + OP0 @ 3 + @ \ X=0 + OR 0= + IF M\ 8 DTST + OP1 @ 1+ @ OP0 @ @ C00000 AND 16 RSHIFT + LSHIFT + OP1 @ 1+ ! + OP1 ToOP0 \ FIX + FALSE -7 ALLOT M\ 9 DTST + EXIT + THEN + THEN + +\ $ CELLS 4444 + + + OFF-EAX OP0 @ 3 + +! + 0 TO OFF-EAX + + THEN +M\ PPPP + + OP0 @ C@ B8 = \ MOV EAX, # X + IF OFF-EAX OP0 @ 1+ +! + 0 TO OFF-EAX + OP0 @ 1+ @ 0= \ MOV EAX, # 0 + IF M\ A DTST + C033 OP0 @ W! \ XOR EAX, EAX + -3 ALLOT +\ FALSE EXIT + M\ B DTST + THEN + OP1 @ :-SET U< IF TRUE EXIT THEN + DUP C@ 0C3 XOR + OP1 @ W@ 45C7 XOR OR 0= \ MOV F8 [EBP] , # 5 + IF OP1 @ 2+ C@ C>S OFF-EBP U< + IF + M\ 10A DTST + OP1 OPexcise +\ FALSE EXIT + M\ 10B DTST + THEN + THEN + THEN +M\ PPPP + + DUP C@ C3 = + IF OFF-EBP >R + 5555 DP @ ! + FALSE OP0 -EBPCLR OP0 -EBPCLR OP0 -EBPCLR OP0 -EBPCLR + IF M\ 20B DTST + R> TO OFF-EBP FALSE EXIT + THEN R> TO OFF-EBP + THEN + + OFF-EAX + OP0 @ W@ C28B = \ MOV EAX , EDX + OP0 @ W@ C18B = OR AND \ MOV EAX , ECX + IF M\ D6 DTST + OFF-EAX DUP SHORT? + IF 0418D C18B - OP0 @ +! C, + ELSE 0828D C28B - OP0 @ +! , + THEN \ LEA EAX, OFF-EBP [EDX] + 0 TO OFF-EAX + FALSE M\ D7 DTST + EXIT + THEN + +OP0 @ 2+ @ 5 XOR +OP0 @ W@ C069 XOR OR \ 59A095 69C005000000 IMUL EAX , EAX , # 5 +0= IF M\ 8E DTST + 80048D OP0 @ ! \ MOV EAX , [EAX*4+EAX] + -3 ALLOT + FALSE M\ 8F DTST + EXIT + THEN + +OP0 @ W@ D28B = \ MOV EDX, EDX \ C-DO +IF OP0 OPexcise TRUE EXIT +THEN + +OP0 @ @ 1004583 = \ 587890 83450001 ADD 0 [EBP] , # 1 +IF M\ 146 DTST + 45FF OP0 @ W! \ INC 0 [EBP] + -1 ALLOT + FALSE M\ 147 DTST + EXIT +THEN + +M\ PPPP +OP1 @ :-SET U< IF TRUE EXIT THEN + ?~EAX 0! + +OP1 @ @ 00FFFFFD AND 244489 XOR \ MOV 8 [ESP] , EAX +OP0 @ @ FFFFFFFD AND +OP1 @ @ FFFFFFFD AND XOR OR \ MOV EAX , 8 [ESP] +0= IF M\ 1F0 DTST + OP1 ToOP0 + -4 ALLOT + FALSE M\ 1F1 DTST + EXIT + THEN + +OP1 @ 2+ C@ +OP0 @ 2+ C@ XOR +OP1 @ W@ 5089 XOR OR \ MOV C [EAX] , EDX +OP0 @ W@ 408B XOR OR \ MOV EAX , C [EAX] +0= IF M\ 2F0 DTST + C28B OP0 @ W! \ MOV EAX , EDX + -1 ALLOT + FALSE M\ 2F1 DTST + EXIT + THEN +M\ PPPP +OP1 @ @ 008B0889 = \ MOV [EAX] , ECX MOV EAX , [EAX] + IF M\ F0 DTST + C18B OP0 @ W! + FALSE M\ F1 DTST + EXIT + THEN + + OP0 @ C@ 58 XOR \ POP EAX + OP0 @ ^?EAX= AND 0= +\ OP0 @ ^?EAX= 0= + IF ?EAX=RULES EXIT + THEN + +OP1 @ @ 4503C033 = \ XOR EAX , EAX ADD EAX , F8 [EBP] + IF M\ 10C DTST + OP1 OPexcise + 8B OP0 @ C! \ MOV EAX , F8 [EBP] + FALSE M\ 10D DTST + EXIT + THEN +M\ PPPP +OP1 @ @ 048DC033 = \ XOR EAX , EAX LEA EAX , 57B680 [EAX*4] + IF OP0 @ 2+ C@ 85 = + IF M\ 62 DTST + OP1 OPexcise + B8 OP0 @ C! \ MOV EAX , # 57B680 + OP0 @ 3 + @ OP0 @ 1+ ! + -2 ALLOT + FALSE M\ 63 DTST + EXIT + THEN + THEN + + + ?C-JMP + IF OP0 @ C@ C3 XOR + OP1 @ C@ E8 XOR OR 0= \ CALL X RET + IF M\ 0C DTST + OP1 @ 1+! + OP1 ToOP0 + FALSE -6 ALLOT + SetJP 5 ALLOT M\ 0D DTST + EXIT + THEN + THEN + +\ TRUE EXIT + + \ $ CELLS 444 + @ + OP1 @ W@ 38FF AND 008D = \ LEA EAX , ____ + IF OP0 @ W@ 008B = \ MOV EAX , [EAX] + IF + M\ 0E DTST + 8B OP1 @ C! + OP1 ToOP0 + FALSE -2 ALLOT M\ 0F DTST + EXIT + THEN + OP0 @ @ FFFEFF AND 00B60F = \ MOVZX EAX , BYTE|WORD PTR [EAX] + \ LEA EAX , ____ + IF + M\ 10E DTST + OP0 @ W@ OP1 @ 2@ ( 2DUP U. U. ) OP1 @ 1+ ( 0 IF THEN ) 2! + OP1 @ W! + OP1 ToOP0 + FALSE -2 ALLOT M\ 10F DTST + EXIT + THEN + THEN + OP0 @ W@ 4589 XOR \ MOV X [EBP], EAX + OP0 @ 2+ C@ + OP1 @ 2+ C@ XOR OR 0= \ (FALG &( X1=X )) + IF + OP1 @ W@ 458B = \ MOV EAX, 1X [EBP] \ $ DROP DUP + IF M\ 10 DTST + OP1 ToOP0 + FALSE -3 ALLOT M\ 11 DTST + EXIT + THEN + THEN + + OP1 @ C@ B8 = \ MOV EAX, # X \ eax= + IF OP0 @ W@ + DUP D8F7 = \ NEG EAX + IF DROP M\ 14 DTST + OP1 @ 1+ @ NEGATE OP1 @ 1+ ! \ MOV EAX, # -X + OP1 ToOP0 + FALSE -2 ALLOT M\ 15 DTST + EXIT + THEN + DUP D0F7 = \ MOV EAX, # X NOT EAX + IF DROP M\ 16 DTST + OP1 @ 1+ @ INVERT OP1 @ 1+ ! \ MOV EAX, # ~X + OP1 ToOP0 + FALSE -2 ALLOT M\ 17 DTST + EXIT + THEN + DUP 008B = \ MOV EAX, # X MOV EAX, [EAX] + IF DROP M\ 18 DTST + A1 OP1 @ C! \ MOV EAX, X + OP1 ToOP0 + FALSE -2 ALLOT M\ 19 DTST + EXIT + THEN + DROP + OP0 @ @ FFFFFF AND 85448B = \ MOV EAX, # X MOV EAX , X1 [EBP] [EAX*4] + IF M\ 518 DTST + OP0 @ 3 + C@ + OP1 @ 1+ @ CELLS + + 458B OP1 @ W! \ MOV EAX , X [EBP] + OP1 @ 2+ C! + OP1 ToOP0 + FALSE -6 ALLOT M\ 519 DTST + EXIT + THEN + THEN + + OP1 @ W@ 5589 XOR \ MOV X1 [EBP] , EDX + OP0 @ W@ 4503 XOR OR \ ADD EAX , X0 [EBP] + OP1 @ 2+ C@ OP0 @ 2+ C@ XOR OR \ X1=X0 +0= IF M\ 418 DTST + 02048D OP0 @ ! \ lea EAX, [EAX+EDX] + FALSE M\ 419 DTST + EXIT + THEN + + OP1 @ W@ 4D89 XOR \ MOV 4 [EBP] , ECX + OP0 @ W@ 558B XOR OR \ MOV EDX , 4 [EBP] + OP1 @ 2+ C@ OP0 @ 2+ C@ XOR OR \ X1=X0 +0= IF M\ 418 DTST + D18B OP0 @ W! \ MOV EDX , ECX + -1 ALLOT + FALSE M\ 419 DTST + EXIT + THEN +M\ PPPP + OP1 @ W@ 408D XOR \ LEA EAX , Y [EAX] + OP0 @ @ 85048D FFFFFF AND XOR OR 0= \ LEA EAX , X [EAX*4] + IF M\ 30E DTST + OP1 @ 2+ C@ C>S CELLS OP0 @ 3 + +! + FALSE + OP1 OPexcise M\ 30F DTST + EXIT + THEN + + OP1 @ @ FFFFFF AND 85048D XOR \ LEA EAX , X [EAX*4] + OP0 @ @ FFFFFF AND 02048D XOR OR \ MOV EAX , [EDX] [EAX] + OP1 @ 3 + @ 80 + FFFFFF00 AND OR 0= + IF M\ 50E DTST + 8244 OP1 @ 1+ W! + OP1 ToOP0 + FALSE + -6 ALLOT M\ 50F DTST + EXIT + THEN + + OP0 @ W@ FFFD AND 5589 = \ MOV EDX , X [EBP] + IF OP1 + BEGIN MOV_EDX_[EBP] + UNTIL + IF M\ A0E DTST + OP1 ToOP0 + FALSE + -3 ALLOT M\ A0F DTST + EXIT + THEN + THEN + +DUP C@ 0C3 XOR +OP1 @ W@ 4589 XOR OR \ 5695B0 8945FC MOV FC [EBP] , EAX +OP0 @ W@ 6DF7 XOR OR \ 5695B3 F76DFC IMUL FC [EBP] +OP1 @ 2+ C@ +OP0 @ 2+ C@ XOR OR +OP0 @ 2+ C@ C>S OFF-EBP > OR +0= IF M\ 32A DTST + E8F7 OP1 @ W! + OP1 ToOP0 + FALSE -4 ALLOT M\ 32B DTST + EXIT + THEN +M\ PPPP + OP0 @ W@ E7FF AND 4589 = \ TTTT AND \ MOV X [EBP] , EAX|EDX|EBX|ECX + IF OFF-EBP >R OP0 @ 2+ C@ C>S CELL+ TO OFF-EBP + FALSE OP1 -EBPCLR + IF R> TO OFF-EBP FALSE EXIT THEN + R> TO OFF-EBP + THEN + +OP1 @ W@ CA8B XOR \ 8BCA MOV ECX , EDX +OP0 @ @ FFFFFF AND 88048D XOR OR \ 8D0488 LEA EAX , [EAX] [ECX*4] +0= IF M\ 42A DTST + 90048D OP0 @ ! + FALSE M\ 42B DTST + EXIT + THEN + +DUP C@ 0C3 XOR +OP1 @ W@ CA8B XOR OR \ 8BCA MOV ECX , EDX +OP0 @ @ FFFFFF AND 90048D XOR OR \ 8D0488 LEA EAX , [EAX] [EDX*4] +0= IF M\ 62A DTST + OP1 OPexcise + FALSE M\ 62B DTST + EXIT + THEN + +OP1 @ @ FFFFFF AND 8D0C8D XOR \ 8D0C8D00000000 LEA ECX , 0 [ECX*4] +OP1 @ 3 + @ XOR +OP0 @ @ FFFFFF AND 1048D XOR OR \ 8D0401 LEA EAX , [ECX] [EAX] +0= IF M\ 52A DTST + 88048D OP1 @ ! + OP1 ToOP0 + FALSE -7 ALLOT M\ 52B DTST + EXIT + THEN +OP1 @ C@ B8 XOR \ MOV EAX , # 58DDE8 +OP0 @ @ FFFFFF AND 90048D XOR OR \ LEA EAX , [EAX] [EDX*4] +0= IF M\ 4C DTST + OP1 @ 1+ @ + OP1 OPexcise + 95 OP0 @ 2+ C! , + FALSE M\ 4D DTST + EXIT + THEN + +DUP C@ 0C3 XOR +OP1 @ @ 048DD9F7 XOR OR \ NEG ECX LEA EAX , [ECX] [EAX] +0= IF M\ 90 DTST + C12B OP1 @ W! + OP1 ToOP0 + FALSE -3 ALLOT M\ 91 DTST + EXIT + THEN + +DUP C@ 0C3 XOR +OP1 @ @ FFFFFF AND 244C8B XOR OR \ MOV ECX , 20 [ESP] +OP0 @ W@ C12B XOR OR \ 59A13C 2BC1 SUB EAX , ECX +0= IF M\ 92 DTST + 442B OP1 @ W! \ SUB EAX , 20 [ESP] + OP1 ToOP0 + FALSE -2 ALLOT M\ 93 DTST + EXIT + THEN + +DUP C@ 0C3 XOR +OP1 @ W@ D8B XOR OR \ MOV ECX , 599825 +OP0 @ W@ C12B XOR OR \ SUB EAX , ECX +0= IF M\ 92 DTST + 052B OP1 @ W! \ SUB EAX , 599825 + OP1 ToOP0 + FALSE -2 ALLOT M\ 93 DTST + EXIT + THEN + +DUP C@ 0C3 XOR +OP1 @ C@ B8 XOR OR \ 59A227 B841000000 MOV EAX , # 1000 +OP0 @ C@ A3 XOR OR \ 59A22C A375995900 MOV 599975 ( Char1Glob+5 ) , EAX +0= IF M\ 98 DTST + OP1 @ 1+ @ OP0 @ 1+ @ + OP1 @ 2+ ! OP0 @ 1+ ! + 05C7 OP1 @ W! \ MOV 599975 , # 1000 + OP1 ToOP0 + FALSE M\ 99 DTST + EXIT + THEN +DUP C@ 0C3 XOR +OP1 @ C@ B8 XOR OR \ MOV EAX , # 2000 +OP0 @ @ FFFFFF AND 244489 XOR OR \ MOV 1C [ESP] , EAX +0= IF M\ A8 DTST + OP1 @ 1+ @ , + OP1 OPexcise + C7 OP0 @ C! \ MOV 1C [ESP] , # 2000 + FALSE M\ A9 DTST + EXIT + THEN + +OP1 @ C@ B8 XOR \ B8E0005800 MOV EAX , # 5800E0 +OP0 @ W@ 1001 XOR OR \ 0110 ADD [EAX] , EDX +0= IF M\ E4 DTST + OP1 @ 1+ @ + 1501 OP0 @ W! , \ ADD 5800E0 , EDX + FALSE M\ E5 DTST + EXIT + THEN +OP1 @ C@ B8 XOR \ 580185 B855550500 MOV EAX , # 55555 +OP0 @ W@ 1089 XOR OR \ 58018A 8910 MOV [EAX] , EDX +0= IF M\ EE DTST + OP1 @ 1+ @ + 1589 OP0 @ W! , \ MOV 5800E0 , EDX + FALSE M\ EF DTST + EXIT + THEN + +OP1 @ @ 1501D08B = \ 8BD0 MOV EDX , EAX + \ 011560015800 ADD 580160 , EDX + IF M\ E6 DTST + 0501 OP0 @ W! \ ADD 5800E0 , EAX + FALSE M\ E7 DTST + EXIT + THEN + +DUP C@ 0C3 XOR +OP1 @ @ 0A4CB60F XOR OR \ MOVZX ECX , BYTE PTR 2 [EDX] [ECX] +OP0 @ W@ C133 XOR OR \ XOR EAX , ECX +0= IF M\ A0 DTST + OP0 OPexcise + 0A443200 OP0 @ ! + OP0 @ 1+ @ OP0 @ ! \ XOR AL , BYTE PTR [EAX+EDX+44H] + -1 ALLOT + FALSE M\ A1 DTST + EXIT + THEN + +DUP C@ 0C3 XOR +OP1 @ @ FFFFFF AND 850C8D XOR OR \ LEA ECX , 58E188 ( rson+5 ) [EAX*4] +OP0 @ W@ 1189 XOR OR \ 596738 8911 MOV [ECX] , EDX +0= IF M\ A2 DTST + OP0 OPexcise + 1489 OP0 @ W! + FALSE M\ A3 DTST + EXIT + THEN + +OP1 @ 2+ C@ +OP0 @ 2+ C@ XOR +OP1 @ W@ 5589 XOR OR \ 8955F8 MOV F8 [EBP] , EDX +0= IF + OP0 @ W@ 450B = \ 0B45F8 OR EAX , F8 [EBP] + IF M\ B2 DTST + C20B OP0 @ W! \ OR EAX , EDX + -1 ALLOT + FALSE M\ B3 DTST + EXIT + THEN + OP0 @ W@ 453B = \ 3B45F8 CMP EAX , F8 [EBP] !!! + IF M\ BE DTST + C23B OP0 @ W! \ CMP EAX , EDX + -1 ALLOT + FALSE M\ BF DTST + EXIT + THEN + THEN + +OP1 @ W@ C28B XOR \ 8BC2 MOV EAX , EDX +OP0 @ W@ 4589 XOR OR \ 8945FC MOV FC [EBP] , EAX +0= IF M\ C0 DTST + 5589 OP0 @ W! \ 8955FC MOV FC [EBP] , EDX + FALSE M\ C1 DTST + EXIT + THEN + + DUP C@ C3 XOR +OP1 @ W@ D08B XOR OR \ 8BD0 MOV EDX , EAX +OP0 @ W@ 45C7 XOR OR \ C7450001000000 MOV 0 [EBP] , # 1 +0= IF M\ C6 DTST + OP1 OPexcise + FALSE M\ C7 DTST + EXIT + THEN + +OP1 @ 2+ C@ +OP0 @ 2+ C@ XOR +OP1 @ W@ 4589 XOR OR \ 58251C 894500 MOV 0 [EBP] , EAX +OP0 @ W@ 45C7 XOR OR \ 58251F C7450001000000 MOV 0 [EBP] , # 1 +0= IF M\ C6 DTST + OP1 OPexcise + FALSE M\ C7 DTST + EXIT + THEN + +DUP C@ C3 XOR +OP1 @ @ 0501D08B XOR OR \ 8BD0 MOV EDX , EAX + \ 011510025800 ADD 580210 , EAX +0= IF M\ E8 DTST + OP1 OPexcise + FALSE M\ E9 DTST + EXIT + THEN + +DUP C@ C3 XOR +OP1 @ C@ B9 XOR OR \ B94C025800 MOV ECX , # 58024C +OP0 @ W@ 1C7 XOR OR \ C70189ABCDEF MOV [ECX] , # EFCDAB89 +0= IF M\ EC DTST + OP0 @ 2+ @ OP1 @ 1+ @ + OP1 @ 2+ ! OP0 @ 1+ ! + 05C7 OP1 @ W! \ MOV 58024C , # EFCDAB89 + OP1 ToOP0 + -1 ALLOT + FALSE M\ ED DTST + EXIT + THEN + +OP1 @ C@ B8 XOR \ 587294 B801000000 MOV EAX , # 1 +OP0 @ W@ C88B XOR OR \ 587299 8BC8 MOV ECX , EAX +0= IF M\ F6 DTST + OP1 @ 1+ @ + OP0 @ 1+ ! + B9 OP0 @ C! \ MOV ECX , # 1 + 3 ALLOT + FALSE M\ F7 DTST + EXIT + THEN + +OP1 @ C@ B9 XOR \ B901000000 MOV ECX , # 1 +OP0 @ W@ D9F7 XOR OR \ F7D9 NEG ECX +0= IF M\ F8 DTST + OP1 @ 1+ @ NEGATE + OP1 @ 1+ ! + OP1 ToOP0 + -2 ALLOT + FALSE M\ F9 DTST + EXIT + THEN + +DUP C@ C3 XOR +OP1 @ C@ B9 XOR OR \ B919000000 MOV ECX , # 19 +OP0 @ W@ F7FF AND E0D3 XOR OR \ D3E8 SHR|SHL EAX , CL +0= IF M\ 100 DTST + OP1 @ 1+ @ + OP1 OPexcise + C1 OP0 @ C! C, + FALSE M\ 101 DTST + EXIT + THEN + +OP1 @ C@ B8 XOR \ B801000000 MOV EAX , # 1 +OP0 @ @ FFFFFF AND 85048B XOR OR \ 8B04851CDE5700 MOV EAX , 57DE1C [EAX*4] +0= IF M\ 148 DTST + A1 OP1 @ C! \ MOV EAX , 1 + OP0 @ 3 + @ + OP1 @ 1+ @ CELLS + OP1 @ 1+ ! + OP0 OPexcise + FALSE M\ 149 DTST + EXIT + THEN + +OP1 @ W@ C033 XOR \ 33C0 XOR EAX , EAX +OP0 @ @ FFFFFF AND 85048B XOR OR \ 8B04851CDE5700 MOV EAX , 57DE1C [EAX*4] +0= IF M\ 348 DTST + 2 OP0 +! + A1 OP0 @ C! \ MOV EAX , 57DE1C + OP1 OPexcise + FALSE M\ 349 DTST + EXIT + THEN + +OP1 @ C@ B8 XOR \ B803000000 MOV EAX , # 3 +OP0 @ W@ F7FF AND E0C1 XOR OR \ C1E804 SH[R|L] EAX , 4 +0= IF M\ 48 DTST + OP1 @ 1+ @ + OP0 @ 2+ C@ OP0 @ W@ 0x800 AND IF RSHIFT ELSE LSHIFT THEN + OP1 @ 1+ ! + OP0 OPexcise + FALSE M\ 49 DTST + EXIT + THEN +DUP C@ C3 XOR +OP1 @ W@ CA8B XOR OR \ 582148 8BCA MOV ECX , EDX +OP0 @ W@ C12B XOR OR \ 58214A 2BC1 SUB EAX , ECX +0= IF M\ 180 DTST + C22B OP1 @ W! \ SUB EAX , ECX + OP0 OPexcise + FALSE M\ 181 DTST + EXIT + THEN + +M\ PPPP +OP2 @ :-SET +\ TTTT IF ." T=" 2DUP HEX U. U. THEN + U< IF TRUE EXIT THEN + +\ $ - DUP + OP2 @ W@ D8F7 XOR + OP1 @ W@ 4501 XOR OR 0= + IF M\ 118 DTST + OP2 OPexcise + 29 OP1 @ C! + FALSE + EXIT M\ 119 DTST + THEN + +\ $ - - + OP2 @ @ 4503D8F7 XOR \ NEG EAX ADD EAX, X [EBP] + OP0 @ W@ D8F7 XOR OR 0= \ NEG EAX + IF M\ 20 DTST + OP1 @ @ 452B OR OP2 @ ! \ SUB EAX, X [EBP] + OP2 ToOP0 + -4 ALLOT + FALSE M\ 21 DTST + EXIT + THEN +M\ PPPP + OP0 @ W@ ADD|XOR|OR|AND= \ $ 4444 OR + IF + OP2 @ W@ 4589 XOR \ MOV X1 [EBP], EAX + OP2 @ 2+ C@ + OP0 @ 2+ C@ XOR OR 0= + IF + OP1 @ W@ + DUP 0878B = \ MOV EAX, X [EDI] + IF DROP M\ 22 DTST + OP0 @ C@ 8700 + OP2 @ W! + OP1 @ 2+ @ OP2 @ 2+ ! + OP2 ToOP0 + FALSE -6 ALLOT M\ 23 DTST + EXIT + THEN + \ MOV X1 [EBP], EAX + DUP 0458B = \ MOV EAX , X [EBP] + \ ADD|XOR|OR|AND= + IF DROP M\ 122 DTST + OP0 @ C@ 4500 + OP1 @ W! + OP1 ToOP0 + FALSE -3 ALLOT M\ 123 DTST + EXIT + THEN + FF AND + \ MOV X1 [EBP], EAX + DUP 0B8 = \ MOV EAX, # X + \ ADD|XOR|OR|AND= + IF DROP M\ 24 DTST + OP0 @ C@ 2+ OP1 @ C! + OP1 ToOP0 + FALSE -3 ALLOT M\ 25 DTST + EXIT + THEN + + \ MOV X1 [EBP], EAX + DUP 0A1 = \ MOV EAX, X + \ ADD|XOR|OR|AND= + IF DROP M\ 26 DTST + OP0 @ C@ 500 + + OP1 @ 1+ @ OP1 @ 2+ ! + OP1 @ W! + OP1 ToOP0 + FALSE -2 ALLOT M\ 27 DTST + EXIT + THEN + DROP + THEN + OP2 @ W@ 45C7 XOR \ MOV X1 [EBP], # 4444 \ $ 4444 5555 OR + OP1 @ C@ B8 XOR OR 0= \ MOV EAX , # 4 + \ ADD|XOR|OR|AND= + IF M\ 124 DTST + OP2 @ 3 + @ OP1 @ 1+ @ + C300 OP0 @ 2+ ! OP0 @ EXECUTE + OP1 @ 1+ ! DROP + OP1 ToOP0 + FALSE -3 ALLOT M\ 125 DTST + EXIT + THEN + OP1 @ W@ 4D89 XOR \ MOV F4 [EBP] , ECX + OP1 @ 2+ C@ + OP0 @ 2+ C@ XOR OR 0= \ ADD|XOR|OR|AND= + IF M\ 12 DTST + C1 OP0 @ 1+ C! \ XOR EAX , ECX + FALSE -1 ALLOT M\ 13 DTST + EXIT + THEN + + \ ADD|XOR|OR|AND= + OP0 @ 2+ C@ OP1 -EBPLIT NIP + DUP @ W@ 45C7 = \ MOV F8 [EBP] , # 2710 + OVER @ 2+ C@ OP0 @ 2+ C@ = AND + IF OP0 @ W@ 4503 = \ ADD EAX , F8 [EBP] + IF M\ 46 DTST + @ 3 + @ OFF-EAX + TO OFF-EAX + OP1 ToOP0 + FALSE -3 ALLOT M\ 47 DTST + EXIT + THEN + THEN + DROP + + OP0 @ 2+ C@ + OP1 @ 2+ C@ XOR +OP1 @ W@ 45C7 XOR OR \ 599B95 C745F401000000 MOV F4 [EBP] , # 1 +\ ADD|XOR|OR|AND= +0= IF M\ 8C DTST + OP0 @ C@ 2+ OP0 @ C! + 2 ALLOT + OP1 @ 3 + @ OP0 @ 1+ ! + FALSE M\ 8D DTST + EXIT + THEN + + THEN +M\ PPPP + +\ OP0 @ W@ 4D8B = + OP0 @ W@ 558B = \ MOV EDX , X [EBP] + IF \ OP-1 MOV EAX , FC [EBP] + OP0 @ 2+ C@ OP1 -EBPLIT NIP + DUP @ W@ 45C7 = \ MOV F8 [EBP] , # 2710 + OVER @ 2+ C@ OP0 @ 2+ C@ = AND + IF M\ 50 DTST + -2 ALLOT + BA OP0 @ C! + @ 3 + @ , + FALSE M\ 51 DTST + EXIT + THEN + DROP + THEN + + OP0 @ W@ 4539 = \ CMP X [EBP] , EAX + IF + OP1 @ W@ 5589 XOR \ MOV X [EBP] , EDX + OP1 @ 2+ C@ + OP0 @ 2+ C@ XOR OR 0= \ + IF M\ 128 DTST + D03B OP0 @ W! + FALSE -1 ALLOT M\ 129 DTST + EXIT + THEN + + OP1 @ C@ 0B8 XOR \ MOV EAX, # X + OP2 @ W@ 4589 XOR OR \ MOV X1 [EBP], EAX + OP2 @ 2+ C@ + OP0 @ 2+ C@ XOR OR 0= + IF M\ 28 DTST + 3D OP2 @ C! + OP1 @ 1+ @ OP2 @ 1+ ! + OP2 ToOP0 + FALSE -6 ALLOT M\ 29 DTST + EXIT + THEN +\ $ 4444 @ U< + OP1 @ C@ 0A1 XOR \ MOV EAX, # X + OP2 @ W@ 4589 XOR OR \ MOV X1 [EBP], EAX + OP2 @ 2+ C@ + OP0 @ 2+ C@ XOR OR 0= + IF M\ 2A DTST + 053B OP2 @ W! + OP1 @ 1+ @ OP2 @ 2+ ! + OP2 ToOP0 + FALSE -5 ALLOT M\ 2B DTST + EXIT + THEN + + THEN + DUP W@ 458B XOR \ MOV EAX , FC [EBP] + OP0 @ W@ 1089 XOR OR \ MOV [EAX] , EDX + OP1 @ W@ 558B XOR OR 0= \ MOV EDX , X [EBP] \ !? + IF \ OP-1 MOV EAX , FC [EBP] + OP2 @ W@ 408D = \ LEA EAX , 4 [EAX] \ $ CELL+ ! + IF M\ 430 DTST + OP2 @ 2+ C@ + OP2 OPexcise + 5089 OP0 @ W! C, + FALSE M\ 431 DTST + EXIT + THEN + + OP3 @ :-SET U< IF TRUE EXIT THEN +\ $ 44444 ! + OP3 @ 2+ C@ + OP1 @ 2+ C@ = + IF OP3 @ W@ 4589 = \ MOV X [EBP] , EAX + IF OP2 @ C@ B8 = \ MOV EAX, X + IF M\ 30 DTST + A3 OP3 @ C! + OP2 @ 1+ @ OP3 @ 1+ ! + OP3 ToOP0 + FALSE -8 ALLOT M\ 31 DTST + EXIT + THEN + OP2 @ W@ 878D = \ LEA EAX, X [EDI] + IF M\ 230 DTST \ ??? + OP3 OPexcise + 8789 OP2 @ W! \ MOV X [EDI] , EAX + OP2 ToOP0 + FALSE -5 ALLOT M\ 231 DTST + EXIT + THEN + THEN + OP3 @ W@ 45C7 = \ MOV X [EBP] , # 44444 + IF OP2 @ C@ B8 = \ TTTT AND \ MOV EAX, X + IF M\ 130 DTST + -4000 OP3 @ +! + OP3 @ 3 + @ OP2 @ 1+ @ OP3 @ 2+ ! + OP3 @ 6 + ! + + OP3 ToOP0 + FALSE -7 ALLOT M\ 131 DTST + EXIT + THEN + + OP2 @ W@ 878D = \ LEA EAX, X [EDI] + IF M\ 330 DTST \ ??? + 87C7 OP3 @ W! + OP3 @ 3 + @ OP2 @ 2+ @ OP3 @ 2+ ! + OP3 @ 6 + ! + + OP3 ToOP0 + FALSE -8 ALLOT M\ 331 DTST + EXIT + THEN + THEN + THEN + THEN + +M\ PPPP + OP2 @ W@ 5589 XOR \ MOV F8 [EBP] , EDX + OP1 @ @ FFFFFF AND 85048D XOR OR \ LEA EAX , Y [EAX*X] уЁєсю + OP0 @ W@ 4503 XOR OR + OP2 @ 2+ C@ OP0 @ 2+ C@ XOR OR 0= \ X2=X0 + IF M\ 318 DTST + 048D OP0 @ W! 2 OP0 @ 2+ C! + FALSE + EXIT M\ 319 DTST + THEN + + OP2 @ W@ 04D89 XOR \ MOV X [EBP] , ECX + OP1 @ ?ChEAX \ MOV EAX , ____ + OP1 @ W@ 5589 <> AND OR \ MOV FC [EBP] , EDX + OP0 @ W@ 558B XOR OR \ MOV EDX , X [EBP] + OP2 @ 2+ C@ OP0 @ 2+ C@ XOR OR 0= + IF M\ 630 DTST + D1 OP0 @ 1+ C! + FALSE -1 ALLOT M\ 631 DTST + EXIT + THEN + OP1 @ @ 008BC28B = \ MOV EAX , EDX MOV EAX , [EAX] + IF M\ 730 DTST + 028B OP1 @ W! + OP1 ToOP0 + FALSE -2 ALLOT M\ 731 DTST + EXIT + THEN + + DUP C@ C3 = + IF + OP1 @ W@ D18B XOR \ MOV EDX , ECX + OP0 @ W@ 1089 XOR OR 0= \ MOV [EAX] , EDX + IF M\ 30E DTST + 0889 OP1 @ W! + OP1 ToOP0 + FALSE + -2 ALLOT M\ 40F DTST + EXIT + THEN + THEN +M\ PPPP + +DUP C@ 0C3 XOR +OP1 @ C@ B8 XOR OR \ MOV EAX , # 400 +OP0 @ W@ 6DF7 XOR OR \ IMUL F8 [EBP] +OP2 @ 2+ C@ +OP0 @ 2+ C@ XOR OR +0= IF + OP2 @ W@ 45C7 = \ MOV F8 [EBP] , # C8 + IF M\ E30 DTST + OP2 @ 3 + @ + OP1 @ 1+ @ * OP1 @ 1+ ! + OP1 ToOP0 + FALSE -3 ALLOT M\ E31 DTST + EXIT + THEN + + OP2 @ W@ 4589 = \ MOV F8 [EBP] , EAX + IF M\ D0E DTST + OP1 @ 1+ @ + OP1 OPexcise + -3 ALLOT + 69 C, C0 C, , \ IMUL EAX,EAX,44444H + FALSE M\ D0F DTST + EXIT + THEN + THEN + +DUP C@ 0C3 XOR +OP1 @ C@ A1 XOR OR \ MOV EAX , 569598 ( X+5 ) +OP0 @ W@ 6DF7 XOR OR \ IMUL FC [EBP] +OP2 @ 2+ C@ +OP0 @ 2+ C@ XOR OR +\ OP0 @ 2+ C@ C>S OFF-EBP > OR +0= IF + OP2 @ W@ 4589 = \ MOV FC [EBP] , EAX + IF M\ 12A DTST + 2DF7 OP2 @ W! + OP1 @ 1+ @ OP2 @ 2+ ! + OP2 ToOP0 + FALSE -5 ALLOT M\ 12B DTST + EXIT + THEN + + OP2 @ W@ 45C7 = \ MOV F8 [EBP] , # 123 + IF M\ 22A DTST + B8 OP2 @ C! + OP2 @ 3 + @ OP2 @ 1+ ! + -2 OP1 +! + 2DF7 OP1 @ W! + OP1 @ 3 + @ OP1 @ 2+ ! + OP1 ToOP0 + FALSE -4 ALLOT M\ 22B DTST + EXIT + THEN + THEN + +OP2 @ W@ 4589 XOR \ MOV FC [EBP] , EAX +OP1 @ @ 4503008B XOR OR \ MOV EAX , [EAX] ADD EAX , FC [EBP] +OP2 @ 2+ C@ +OP0 @ 2+ C@ XOR OR +0= IF M\ 830 DTST + 03 OP1 @ C! + OP1 ToOP0 + FALSE -3 ALLOT M\ 831 DTST + EXIT + THEN +M\ PPPP + +DUP C@ 0C3 XOR +OP2 @ W@ 558B XOR OR \ MOV EDX , 0 [EBP] +OP1 @ W@ CA8B XOR OR \ MOV ECX , EDX +OP0 @ C@ 51 XOR OR \ PUSH ECX +0= IF M\ A30 DTST + 75FF OP2 @ W! + OP2 ToOP0 + FALSE -3 ALLOT M\ A31 DTST + EXIT + THEN + +OP2 @ W@ 4589 XOR \ MOV 0 [EBP] , EAX +OP1 @ @ FFBFFF AND 24048B XOR OR \ MOV EAX , [ESP(+4)] +OP0 @ W@ 4503 XOR OR \ ADD EAX , 0 [EBP] +OP2 @ 2+ C@ +OP0 @ 2+ C@ XOR OR +0= IF M\ B30 DTST + 03 OP1 @ C! + OP1 ToOP0 + FALSE -3 ALLOT M\ C31 DTST + EXIT + THEN +OP2 @ W@ 5589 XOR \ MOV F8 [EBP] , EDX +OP1 @ ?ChEAX OR \ MOV EAX , [EAX] +OP0 @ W@ 558B XOR OR \ MOV EDX , F8 [EBP] +OP2 @ 2+ C@ +OP0 @ 2+ C@ XOR OR +0= IF M\ C30 DTST + OP1 ToOP0 + FALSE -3 ALLOT M\ C31 DTST + EXIT + THEN + +OP2 @ 2+ C@ +OP0 @ 2+ C@ XOR +OP2 @ W@ 4589 XOR OR \ 579DE0 8945FC MOV FC [EBP] , EAX +OP1 @ C@ 25 XOR OR \ 579DE3 2555555555 AND EAX , # 55555555 +OP0 @ W@ 558B XOR OR \ 579DE8 8B55FC MOV EDX , FC [EBP] +0= IF M\ C32 DTST + OP2 OPexcise + OP1 02 OPinsert + D08B OP2 @ W! \ MOV EDX , EAX + OP1 ToOP0 + FALSE -3 ALLOT M\ C33 DTST + EXIT + THEN + +M\ PPPP +OP0 @ W@ ADD|XOR|OR|AND= + IF + TRUE ?~EAX ! + OP1 + BEGIN ?EAX>ECX + UNTIL +\ DUP IF ?~EAX @ IF 2DROP FALSE THEN +\ THEN + IF M\ AE DTST + ?~EAX @ + IF ECX:=EAX + ELSE BEGIN EAX>ECX0 UNTIL + THEN BEGIN EAX>ECX UNTIL + DROP + OP0 @ W@ 4503 = \ TTTT AND \ ADD EAX , X [EBP] + IF 01048D OP0 @ ! ELSE \ LEA EAX, [EAX+ECX] + 0C1 OP0 @ 1+ C! -1 ALLOT \ OR EAX,ECX + THEN FALSE M\ AF DTST + EXIT + THEN M\ PPPP + + TRUE ?~EAX ! + OP1 \ TTTT IF ." ?EAX>EBX" THEN + BEGIN ?EAX>EBX \ TTTT IF ." F=" DUP . THEN + UNTIL +\ DUP IF ?~EAX @ IF 2DROP FALSE THEN +\ THEN + IF M\ AE DTST + ?~EAX @ \ ." {#}" + IF EBX:=EAX + ELSE BEGIN EAX>EBX0 UNTIL + THEN BEGIN EAX>EBX UNTIL + DROP + OP0 @ W@ 4503 = \ TTTT AND \ ADD EAX , X [EBP] + IF 03048D OP0 @ ! ELSE \ LEA EAX, [EAX+EBX] + OP0 @ W@ 4539 = \ CMP F8 [EBP] , EAX + IF C33B OP0 @ W! -1 ALLOT ELSE \ CMP EAX , EBX + OP0 @ W@ 453B = \ CMP EAX , F8 [EBP] + IF D83B OP0 @ W! -1 ALLOT ELSE \ CMP EBX , EAX + 0C3 OP0 @ 1+ C! -1 ALLOT \ OR EAX,EBX + THEN THEN THEN FALSE M\ AF DTST + EXIT + THEN M\ PPPP + + + OP1 @ @ 4503D8F7 = \ NEG EAX \ ADD EAX , 4 [EBP] + IF OP2 @ W@ 458B = \ MOV EAX , X [EBP] + IF M\ D0E DTST + OP1 OPexcise + OP1 @ 2+ C@ OP0 @ 2+ C@ + OP1 @ 2+ C! OP0 @ 2+ C! + 2B OP0 @ C! + FALSE M\ D0F DTST + EXIT + THEN + OP2 @ C@ A1 = \ MOV EAX , X + IF M\ D0E DTST + OP2 @ 1+ @ + OP2 OPexcise + OP1 OPexcise + 8B OP0 @ C! + SetOP 2B C, 5 C, , + FALSE M\ D0F DTST + EXIT + THEN + THEN + THEN +M\ PPPP + +OP2 @ W@ FFFD AND 4589 XOR \ MOV F8 [EBP] , EAX +OP1 @ W@ FFFD AND 4589 XOR OR \ MOV EAX , F8 [EBP] +OP2 @ 2+ C@ +OP1 @ 2+ C@ XOR OR +0= IF M\ E30 DTST + OP1 OPexcise + FALSE M\ E31 DTST + EXIT + THEN + +OP2 @ @ 458BC28B = \ MOV EAX , EDX MOV EAX , 0 [EBP] + IF M\ 44 DTST + OP2 OPexcise + FALSE M\ 45 DTST + EXIT + THEN +DUP C@ 0C3 XOR +OP1 @ C@ B9 - FE AND OR \ MOV EDX , # 1000 MOV ECX , # 1000 +OP0 @ W@ 1189 XOR OR \ MOV [ECX] , EDX +0= IF M\ 54 DTST + OP1 @ C@ BA = + IF 01C7 \ MOV [ECX] , # 1000 + ELSE 1589 \ MOV 1000 , [EDX] + THEN + OP1 1 OPresize + OP1 @ W! + OP0 OPexcise + FALSE M\ 55 DTST + EXIT + THEN + + DUP C@ C3 XOR +OP1 @ C@ B9 XOR OR \ MOV ECX , # 1000 +OP0 @ W@ 4D89 XOR OR \ MOV X [EBP] , ECX +0= IF M\ 58 DTST + OP1 @ 1+ @ + OP1 OPexcise + 45C7 OP0 @ W! , \ MOV FC [EBP] , # 1000 + FALSE M\ 59 DTST + EXIT + THEN + +DUP C@ 0C3 XOR +OP1 @ @ FFFFFF AND 8D0C8D XOR OR \ LEA ECX , 5898B8 ( rson+5 ) [ECX*4] +OP0 @ W@ 01C7 XOR OR \ MOV [ECX] , # 1000 +0= IF M\ 56 DTST + 04C7 OP1 @ W! \ MOV X [ECX*4] , # 1000 + OP0 @ 2+ @ + OP0 OPexcise , + FALSE M\ 57 DTST + EXIT + EXIT + THEN +DUP C@ 0C3 XOR +OP1 @ W@ C18B XOR OR \ MOV EAX , ECX +OP0 @ @ FFFFFF AND 85048D XOR OR \ LEA EAX , X [EAX*4] +0= IF M\ 5A DTST + OP1 OPexcise + 8D OP0 @ 2+ C! \ LEA EAX , X [ECX*4] + FALSE M\ 5B DTST + EXIT + EXIT + THEN + + OP2 @ 2+ C@ + OP0 @ 2+ C@ XOR +OP2 @ W@ 4589 XOR OR \ MOV F8 [EBP] , EAX +OP1 @ @ FFFFFF AND 8D048D XOR \ LEA EAX , X [ECX*4] +OP1 @ C@ B8 <> AND OR \ B801000000 MOV EAX , # 1 +OP0 @ W@ 558B XOR OR \ MOV EDX , F8 [EBP] +0= IF M\ 5C DTST + OP1 2 OPinsert + D08B OP2 @ W! \ MOV EDX , EAX + OP0 OPexcise + FALSE M\ 5D DTST + EXIT + EXIT + THEN + +OP0 @ 2+ C@ +OP2 @ 2+ C@ XOR +OP2 @ W@ 4589 XOR OR \ MOV F8 [EBP] , EAX +OP1 @ @ FFFFFF AND 24448B XOR OR \ MOV EAX , 18 [ESP] +OP0 @ W@ 558B XOR OR \ MOV EDX , F8 [EBP] +0= IF M\ 9C DTST + OP1 2 OPinsert + D08B OP2 @ W! \ MOV EDX , EAX + OP0 OPexcise + FALSE M\ 9D DTST + EXIT + THEN + +DUP C@ 0C3 XOR +OP2 @ @ D9F7CA8B XOR OR \ MOV ECX , EDX NEG ECX +OP0 @ 1- @ 01048DD9 XOR OR \ LEA EAX , [ECX] [EAX] +0= IF M\ 66 DTST + OP2 OPexcise + 02048DDA OP1 @ 1+ ! \ NEG EDX lea EAX, [EAX+EDX] + FALSE M\ 67 DTST + EXIT + THEN + +OP2 @ @ 45C7D08B XOR \ MOV EDX , EAX MOV F8 [EBP] , # X +OP0 @ C@ BA XOR OR \ MOV EDX , # 0 +0= IF M\ 6A DTST + OP2 OPexcise + FALSE M\ 6B DTST + EXIT + THEN + + DUP C@ 0C3 XOR +OP2 @ C@ BA XOR OR \ MOV EDX , # 4 +OP1 @ W@ 5501 XOR OR \ ADD 0 [EBP] , EDX +OP0 @ W@ 4513 XOR OR \ ADC EAX , FC [EBP] +0= IF M\ 82 DTST + OP0 4 OPresize 4 OP0 +! + OP2 @ 1+ @ OP2 OPexcise + OP1 @ 3 + ! 4581 OP1 @ W! \ ADD 0 [EBP] , # 4 + FALSE M\ 83 DTST + EXIT + THEN + + OP2 @ 3 + C@ + OP0 @ 3 + C@ XOR +OP2 @ @ FFFFFF AND 24448B XOR OR \ MOV EAX , 30 [ESP] +OP0 @ @ FFFFFF AND 244489 XOR OR \ MOV 30 [ESP] , EAX +0= IF OP1 @ @ 8901408D = \ 8D4001 LEA EAX , 1 [EAX] + IF M\ 88 DTST + OP1 OPexcise + FF OP0 @ C! + FALSE M\ 89 DTST + EXIT + THEN + OP1 @ @ 89FF408D = \ 8D4001 LEA EAX , -1 [EAX] + IF M\ 94 DTST + OP1 OPexcise + 4CFF OP0 @ W! + FALSE M\ 95 DTST + EXIT + THEN + THEN + + DUP C@ C3 XOR +OP2 @ W@ 408D XOR OR \ LEA EAX , 1 [EAX] +OP1 @ @ FFFFFF AND 244403 XOR OR \ ADD EAX , 8 [ESP] +OP0 @ @ FFFFFF AND B60F XOR OR \ MOVZX EAX , BYTE PTR [EAX] +0= IF M\ 9E DTST + OP2 @ 2+ C@ OP2 OPexcise + 548B OP1 @ W! \ MOV EDX , 8 [ESP] + -3 ALLOT + 0244B60F , C, \ MOVZX EAX , BYTE PTR 2 [EDX] [EAX] + FALSE M\ 9F DTST + EXIT + THEN + +OP2 @ 2+ C@ +OP0 @ 2+ C@ XOR +OP2 @ W@ 5589 XOR OR \ 8955F8 MOV F8 [EBP] , EDX + +OP1 @ W@ D8F7 XOR \ F7D8 NEG EAX +OP1 @ W@ D0F7 <> AND \ F7D0 NOT EAX +OP1 @ C@ 58 <> AND \ 58 POP EAX +OP1 @ W@ C123 <> AND OR \ 23C1 AND EAX , ECX + +OP0 @ W@ ADD|XOR|OR|AND= 0= +OP0 @ W@ 458B <> AND OR +\ OP0 @ W@ 4503 XOR OR \ 0345F8 ADD EAX , F8 [EBP] +0= IF M\ 1B6 DTST + C2 OP0 @ 1+ C! \ ADD EAX , EDX + -1 ALLOT + FALSE M\ 1B7 DTST + EXIT + THEN + +DUP C@ C3 XOR +OP2 @ W@ 4D8B XOR OR \ 8B4D00 MOV ECX , 0 [EBP] +OP1 @ @ 4D89C82B XOR OR \ 2BC8 SUB ECX , EAX + \ 894D00 MOV 0 [EBP] , ECX +0= IF M\ B6 DTST + + 4529 OP2 @ W! \ SUB 0 [EBP] , EAX + OP2 ToOP0 + -5 ALLOT + FALSE M\ B7 DTST + EXIT + THEN + +OP2 @ 2+ C@ +OP0 @ 2+ C@ XOR +OP2 @ W@ 458B XOR OR \ 58266F 8B4500 MOV EAX , 0 [EBP] +OP1 @ W@ 558B XOR OR \ 582672 8B5504 MOV EDX , 4 [EBP] +OP0 @ W@ 4589 XOR OR \ 582675 894500 MOV 0 [EBP] , EAX +0= IF M\ D2 DTST + OP0 OPexcise + FALSE M\ D3 DTST + EXIT + THEN + + +OP2 @ W@ 458B XOR \ 8B4500 MOV EAX , 0 [EBP] +OP1 @ W@ 5589 XOR OR \ 895500 MOV 0 [EBP] , EDX +OP0 @ W@ C88B XOR OR \ 8BC8 MOV ECX , EAX +0= IF M\ F4 DTST + 4D8B OP2 @ W! \ MOV ECX , 0 [EBP] + C18B OP0 @ W! \ MOV EAX , ECX + FALSE M\ F5 DTST + EXIT + THEN + +OP2 @ C@ B8 XOR \ B801000000 MOV EAX , # 1 +OP2 @ 1+ @ SHORT? 0= OR +OP1 @ W@ 558B XOR OR \ 8B5500 MOV EDX , 0 [EBP] +OP0 @ W@ 48D XOR OR \ 8D0402 LEA EAX , [EDX] [EAX] +0= IF M\ FC DTST + OP2 @ 1+ @ + OP2 OPexcise + 428D OP0 @ W! \ LEA EAX , 1 [EDX] + OP0 @ 2+ C! + FALSE M\ FD DTST + EXIT + THEN + +OP2 @ W@ 558B XOR \ 5876BB 8B5500 MOV EDX , 0 [EBP] +OP1 @ W@ 428D XOR OR \ 5876BE 8D4201 LEA EAX , 1 [EDX] +OP0 @ W@ 4589 XOR OR \ 5876C1 894500 MOV 0 [EBP] , EAX +0= IF M\ FC DTST + OP1 @ 2+ C@ + OP1 OPexcise + 4583 OP0 @ W! C, \ ADD EAX , 1 [EDX] + FALSE M\ FD DTST + EXIT + THEN + +OP2 @ 2+ C@ +OP0 @ 2+ C@ XOR +OP2 @ W@ 4589 XOR OR \ 8945EC MOV EC [EBP] , EAX + +OP1 ?EDX_[EBP] OR + +OP0 @ W@ 558B XOR OR \ 8B55EC MOV EDX , EC [EBP] +0= IF M\ 104 DTST + OP0 OPexcise + OP0 02 OPinsert + D08B OP1 @ W! \ MOV EDX , EAX + FALSE M\ 105 DTST + EXIT + THEN + +OP2 @ W@ D08B XOR \ 5A5408 8BD0 MOV EDX , EAX + +OP1 @ @ FFFFFF AND 95048D XOR \ 8D0495D8825900 LEA EAX , 5982D8 [EDX*4] +OP1 @ @ FFFFFF AND 95048B <> AND OR \ 8B0495D8825900 MOV EAX , 5982D8 [EDX*4] + +OP0 @ W@ 558B XOR OR \ 5A5411 8B55F8 MOV EDX , F8 [EBP] +0= IF M\ 138 DTST + OP2 OPexcise + 85 OP1 @ 2+ C! \ LEA EAX , 5982D8 [EAX*4] + FALSE M\ 139 DTST + EXIT + THEN + +DUP C@ C3 XOR +OP2 @ @ E1C1CA8B XOR OR \ 8BCA MOV ECX , EDX + \ C1E107 SHL ECX , 7 +OP0 @ W@ C10B XOR OR \ 0BC1 OR EAX , ECX +0= IF M\ 108 DTST + OP2 OPexcise + E2C1 OP1 @ W! \ SHL EDX , 7 + C20B OP0 @ W! \ OR EAX , EDX + FALSE M\ 109 DTST + EXIT + THEN + +OP2 @ @ 878DD08B XOR \ 8BD0 MOV EDX , EAX + \ 8D873C100000 LEA EAX , 103C [EDI] +OP0 @ W@ 1088 XOR OR \ 8810 MOV [EAX] , DL +0= IF M\ 110 DTST + OP1 @ 2+ @ + 9788 OP1 @ W! \ MOV 103C [EDI] , DL + 878D OP0 @ W! \ LEA EAX , 103C [EDI] + , + FALSE M\ 111 DTST + EXIT + THEN + +DUP C@ C3 XOR +OP2 @ @ 5589D98B XOR OR \ 58809A 8BD9 MOV EBX , ECX + \ 58809C 8955EC MOV EC [EBP] , EDX +OP0 @ W@ C323 XOR OR \ 58809F 23C3 AND EAX , EBX +0= IF M\ 116 DTST + OP2 OPexcise + C123 OP0 @ W! \ AND EAX , ECX + FALSE M\ 117 DTST + EXIT + THEN + + +DUP C@ C3 XOR +OP2 @ W@ 4D8B XOR OR \ 8B4DF0 MOV ECX , F0 [EBP] +OP1 @ @ 23F05589 XOR OR \ 8955F0 MOV F0 [EBP] , EDX + \ 23C1 AND EAX , ECX +0= IF M\ 11E DTST + OP0 OPexcise + 4523 OP1 @ W! \ AND EAX , F0 [EBP] + FALSE M\ 11D DTST + EXIT + THEN + +DUP C@ C3 XOR +OP2 @ W@ 558B XOR OR \ 5881D2 8B55EC MOV EDX , EC [EBP] +OP1 @ @ BF04523 XOR OR \ 5881D5 2345F0 AND EAX , F0 [EBP] +OP0 @ W@ C20B XOR OR \ 5881D8 0BC2 OR EAX , EDX +0= IF M\ 120 DTST + OP2 @ 2+ C@ + OP2 OPexcise + 450B OP0 @ W! \ OR EAX , EC [EBP] + C, + FALSE M\ 11D DTST + EXIT + THEN + +OP2 @ 2+ C@ +OP1 @ 2+ C@ XOR +OP2 @ W@ 5589 XOR OR \ 8955F0 MOV F0 [EBP] , EDX +OP1 @ W@ 4523 XOR OR \ 2345F0 AND EAX , F0 [EBP] +0= IF M\ 126 DTST + OP1 OPexcise + OP0 2 OPinsert + C223 OP1 @ W! \ AND EAX , EDX + FALSE M\ 127 DTST + EXIT + THEN + +OP2 @ 2+ C@ +OP1 @ 2+ C@ XOR +OP2 @ W@ 4D89 XOR OR \ 894DFC MOV FC [EBP] , ECX +OP1 @ W@ 4523 XOR OR \ 2345FC AND EAX , FC [EBP] +0= IF M\ 13E DTST + OP1 OPexcise + OP0 2 OPinsert + C123 OP1 @ W! \ AND EAX , ECX + FALSE M\ 13F DTST + EXIT + THEN + + +DUP C@ C3 XOR +OP2 @ 2+ C@ C>S OFF-EBP U< 0= OR +OP2 @ W@ 558B XOR OR \ 58838C 8955F8 MOV EDX , F4 [EBP] +OP1 @ @ C20BC123 XOR OR \ 58838F 23C1 AND EAX , ECX + \ 588391 0BC2 OR EAX , EDX +0= IF M\ 12C DTST + OP2 @ 2+ C@ + OP2 OPexcise + 450B OP0 @ W! \ OR EAX , F8 [EBP] + C, + FALSE M\ 12D DTST + EXIT + THEN + +DUP C@ C3 XOR +OP2 @ @ C123CA8B XOR OR \ 8BCA MOV ECX , EDX + \ 23C1 AND EAX , ECX +OP0 @ W@ 450B XOR OR \ 0B45F4 OR EAX , F4 [EBP] +0= IF M\ 1F2 DTST + OP2 OPexcise + C223 OP1 @ W! \ AND EAX , EDX + FALSE M\ 1F3 DTST + EXIT + THEN + +DUP C@ C3 XOR +OP2 @ W@ 4D8B XOR OR \ 5884C1 8B4DF8 MOV ECX , F8 [EBP] +OP1 @ @ C10BCA23 XOR OR \ 5884C4 23CA AND ECX , EDX +OP0 @ W@ C10B XOR OR \ 5884C6 0BC1 OR EAX , ECX +0= IF M\ 1F4 DTST + OP1 OPexcise + 5523 OP1 @ W! \ AND EDX , F8 [EBP] + C20B OP0 @ W! \ OR EAX , EDX + FALSE M\ 1F5 DTST + EXIT + THEN + +DUP C@ C3 XOR +OP2 @ W@ 558B XOR OR \ 587860 8B5500 MOV EDX , 0 [EBP] +OP1 @ W@ 528D XOR OR \ 587863 8D5201 LEA EDX , 1 [EDX] +OP0 @ W@ 5589 XOR OR \ 587866 895500 MOV 0 [EBP] , EDX +0= IF M\ 144 DTST + OP1 @ 2+ C@ + OP2 OPexcise + OP1 OPexcise + 4583 OP0 @ W! \ ADD 0 [EBP] , # 1 + C, + FALSE M\ 145 DTST + EXIT + THEN + +DUP C@ C3 XOR +\ OP2 @ W@ 5589 XOR OR \ 8B5500 EDX , MOV 0 [EBP] +OP2 @ W@ 558B XOR OR \ 8B5500 EDX , MOV 0 [EBP] + OP1 @ W@ E0D3 XOR OR \ D3E0 SHL EAX , CL +\ OP1 ?EDX_[EBP] OR \ D3E0 SHL EAX , CL +OP0 @ W@ C20B XOR OR \ 0BC2 OR EAX , EDX +0= IF M\ 14A DTST + OP2 @ 2+ C@ + OP2 OPexcise + 45 OP0 @ 1+ C! \ OR EAX , 0 [EBP] + C, + FALSE M\ 14B DTST + EXIT + THEN + +OP2 @ 2+ C@ +OP0 @ 2+ C@ XOR +OP2 @ W@ 4589 XOR OR \ 8945FC MOV FC [EBP] , EAX +OP1 @ W@ 458B XOR OR \ 8B4500 MOV EAX , 0 [EBP] +OP0 @ W@ 558B XOR OR \ 8B55FC MOV EDX , FC [EBP] +0= IF M\ 162 DTST + OP1 ToOP0 -3 ALLOT + OP0 2 OPinsert + D08B OP1 @ W! + FALSE M\ 163 DTST + EXIT + THEN + +DUP C@ C3 XOR +OP2 @ W@ 4D8B XOR OR \ 582055 8B4D04 MOV ECX , 4 [EBP] +OP1 @ W@ 5589 XOR OR \ 582058 895504 MOV 4 [EBP] , EDX +OP0 @ @ FFFFFF AND 1048D XOR OR \ 58205B 8D0401 LEA EAX , [ECX] [EAX] +0= IF M\ 168 DTST + 4503 OP2 @ W! \ ADD EAX , 4 [EBP] + OP0 OPexcise + FALSE M\ 169 DTST + EXIT + THEN + +DUP C@ C3 XOR +OP2 @ W@ 558B XOR OR \ 582202 8B5500 MOV EDX , 0 [EBP] +OP1 @ W@ 4503 XOR OR \ 582205 034504 ADD EAX , 4 [EBP] +OP0 @ W@ C22B XOR OR \ 582208 2BC2 SUB EAX , EDX +0= IF M\ 170 DTST + OP2 @ 2+ C@ + OP2 OPexcise + 452B OP0 @ W! C, \ SUB EAX , 0 [EBP] + FALSE M\ 171 DTST + EXIT + THEN + + DUP C@ C3 XOR + OP2 @ 2+ C@ + OP1 @ 2+ C@ = OR +OP2 @ W@ 558B XOR OR \ 8B5500 MOV EDX , 0 [EBP] +OP1 @ W@ 4589 XOR OR \ 8945FC MOV FC [EBP] , EAX +OP0 @ @ FFFFFF AND 2048D XOR OR \ 8D0402 LEA EAX , [EDX] [EAX] +0= IF M\ 158 DTST + OP2 @ 2+ C@ + OP2 OPexcise + 4503 OP0 @ W! \ ADD EAX , 0 [EBP] + OP0 @ 2+ C! + FALSE M\ 159 DTST + EXIT + THEN + +DUP C@ C3 XOR +OP2 @ 2+ C@ +OP0 @ 2+ C@ XOR OR +OP2 @ 2+ C@ +OP1 @ 2+ C@ = OR +OP2 @ W@ 4589 XOR OR \ 571DD0 8945FC MOV FC [EBP] , EAX +OP1 @ W@ 4503 XOR OR \ 571DD3 034500 ADD EAX , 0 [EBP] +OP0 @ W@ 6DF7 XOR OR \ 571DD6 F76DFC IMUL FC [EBP] +0= IF M\ 160 DTST + OP2 OPexcise + OP1 2 OPinsert + C88B OP2 @ W! \ MOV ECX , EAX + E9F7 OP0 @ W! \ IMUL ECX + FALSE -1 ALLOT M\ 161 DTST + EXIT + THEN +DUP C@ C3 XOR +OP2 @ 2+ C@ +OP0 @ 2+ C@ XOR OR + +OP2 @ W@ 4589 XOR OR \ 894500 MOV 0 [EBP] , EAX +OP1 @ W@ AF0F XOR OR \ 0FAFC2 IMUL EAX , EDX +OP0 @ W@ 4503 XOR OR \ 034500 ADD EAX , 0 [EBP] + +0= IF M\ 248 DTST + OP2 OPexcise + OP1 2 OPinsert + C88B OP2 @ W! \ MOV ECX , EAX + C103 OP0 @ W! \ ADD EAX , ECX + + FALSE -1 ALLOT M\ 141 DTST + EXIT + THEN + +OP1 @ 2+ C@ +OP0 @ 2+ C@ XOR +OP2 @ W@ C28B XOR OR \ 571EED 8BC2 MOV EAX , EDX +OP1 @ W@ 5589 XOR OR \ 571EEF 8955FC MOV FC [EBP] , EDX +OP0 @ W@ 6DF7 XOR OR \ 571EF2 F76DFC IMUL FC [EBP] +0= IF M\ 182 DTST + EAF7 OP0 @ W! \ IMUL EDX + FALSE -1 ALLOT M\ 183 DTST + EXIT + THEN + +( !!!!!!!!!! +DUP C@ C3 XOR +OP1 @ @ EAF7C28B XOR OR \ 8BC2 MOV EAX , EDX + \ F7EA IMUL EDX +0= IF M\ 184 DTST + OP1 OPexcise + C2AF0F OP0 @ ! \ IMUL EAX , EDX + FALSE 1 ALLOT M\ 185 DTST + EXIT + THEN +) + + +OP3 @ :-SET U< IF TRUE EXIT THEN +M\ PPPP + +OP3 @ @ D08BC28B = \ MOV EAX , EDX MOV EDX , EAX + IF M\ 42 DTST + OP2 OPexcise + FALSE M\ 43 DTST + EXIT + THEN + + OP1 @ W@ 453B = \ CMP EAX , X [EBP] + IF OP0 @ @ FFFCFF AND C09C0F = \ SETLE AL + IF +\ $ 4444 < + OP2 @ C@ 0B8 XOR \ MOV EAX, # X + OP3 @ W@ 4589 XOR OR \ MOV X1 [EBP], EAX + OP3 @ 2+ C@ + OP1 @ 2+ C@ XOR OR 0= + IF M\ 2C DTST + 3D OP3 @ C! + OP2 @ 1+ @ OP3 @ 1+ ! + 2 OP2 +! + OP0 @ @ 300 XOR OP2 @ ! \ SETGE AL + OP2 ToOP0 + FALSE -6 ALLOT M\ 2D DTST + EXIT + THEN +\ $ 4444 @ < + OP2 @ C@ 0A1 XOR \ MOV EAX, # X + OP3 @ 2+ C@ + OP1 @ 2+ C@ XOR OR 0= + IF + OP3 @ W@ 4589 = \ MOV X1 [EBP], EAX + IF M\ 2E DTST + 053B OP3 @ W! + OP2 @ 1+ @ OP3 @ 2+ ! + 3 OP2 +! + OP0 @ @ 300 XOR OP2 @ ! \ SETGE AL + OP2 ToOP0 + FALSE -5 ALLOT M\ 2F DTST + EXIT + THEN + + OP3 @ W@ 45C7 = \ + IF M\ 12E DTST + 3D81 OP3 @ W! + OP3 @ 3 + @ + OP2 @ 1+ @ OP3 @ 2+ ! OP3 @ 6 + ! + 3 OP2 +! + OP0 @ @ OP2 @ ! + OP2 ToOP0 + FALSE -5 ALLOT M\ 12F DTST + EXIT + THEN + + THEN + THEN + THEN + DUP @ 458B1089 XOR \ MOV [EAX], EDX MOV EAX , X [EBP] + OVER 5 + @ C3086D8D XOR OR \ LEA EBP, 8 [EBP] RET + OP0 @ W@ D18B XOR OR 0= \ MOV EDX , ECX + IF M\ 51E DTST + 0889 OP0 @ W! \ MOV [EAX] , ECX + 2+ FALSE M\ 51F DTST + EXIT + THEN +M\ PPPP + +OP3 @ W@ 4589 XOR \ 8945FC MOV FC [EBP] , EAX +OP2 @ C@ B8 XOR OR \ B8189D5700 MOV EAX , # 579D18 +OP1 @ W@ 558B XOR OR \ 8B55FC MOV EDX , FC [EBP] +OP0 @ @ FFFFFF AND 90048D XOR OR \ 8D0490 LEA EAX , [EAX] [EDX*4] + OP3 @ 2+ C@ OP1 @ 2+ C@ XOR OR \ X0=X2 +0= IF M\ 840 DTST + OP2 @ 1+ @ 85048D OP2 @ ! + OP2 @ 3 + ! + OP2 ToOP0 + FALSE -4 ALLOT M\ 841 DTST + EXIT + THEN + +OP3 @ W@ 558B XOR \ MOV EDX , FC [EBP] +OP2 @ W@ 4589 XOR OR \ MOV FC [EBP] , EAX +OP1 @ W@ C28B XOR OR \ MOV EAX , EDX +OP0 @ W@ 558B XOR OR \ MOV EDX , FC [EBP] +OP3 @ 2+ C@ OP2 @ 2+ C@ XOR OR +OP2 @ 2+ C@ OP0 @ 2+ C@ XOR OR +0= IF M\ F30 DTST + OP3 OPexcise + OP2 OPexcise + D08B OP1 @ W! \ MOV EDX , EAX + 458B OP0 @ W! \ MOV EAX , FC [EBP] + DO_EAX>ECX DROP + SetOP 89 C, 55 C, OP0 @ 2+ C@ C, \ MOV FC [EBP] , EDX + FALSE M\ F31 DTST + EXIT + THEN +OP3 @ 2+ C@ +OP0 @ 2+ C@ XOR +OP3 @ W@ 4589 XOR OR \ 57BF16 8945FC MOV FC [EBP] , EAX +OP2 @ W@ C033 XOR OR \ 57BF19 33C0 XOR EAX , EAX +OP1 @ W@ 4581 XOR OR \ 57BF1B 814500BA040000 ADD 0 [EBP] , # 4BA +OP0 @ W@ 4513 XOR OR \ 57BF22 1345FC ADC EAX , FC [EBP] +0= IF M\ 84 DTST + OP2 OPexcise + D083 OP0 @ ! \ ADC EAX , # 0 + FALSE M\ 85 DTST + EXIT + THEN + +OP3 @ 2+ C@ +OP0 @ 2+ C@ XOR +OP3 @ W@ 4589 XOR OR \ 59690C 8945F0 MOV F0 [EBP] , EAX +OP2 @ C@ B8 XOR OR \ 59690F B801000000 MOV EAX , # 1 +OP1 @ C@ BA XOR OR \ 596914 BA00000080 MOV EDX , # 80000000 +OP0 @ W@ 552B XOR OR \ 596919 2B55F0 SUB EDX , F0 [EBP] +0= IF M\ A4 DTST + OP2 @ 1+ @ + OP2 OPexcise + D02B OP0 @ ! \ SUB EDX , EAX + -1 ALLOT + SetOP B8 C, , + FALSE M\ A5 DTST + EXIT + THEN + +OP3 @ 2+ C@ +OP0 @ 2+ C@ XOR +OP3 @ W@ 4589 XOR OR \ 8945F8 MOV F8 [EBP] , EAX +OP2 ?EDX_[EBP] OR +OP1 ?EDX_[EBP] OR +OP0 @ W@ 558B XOR OR \ 8B55F8 MOV EDX , F8 [EBP] +0= IF M\ EC DTST + OP2 2 OPinsert + D08B OP3 @ W! \ MOV EDX , EAX + OP0 OPexcise + FALSE M\ ED DTST + EXIT + THEN + +OP3 @ 2+ C@ +OP0 @ 2+ C@ XOR +OP3 @ W@ 4589 XOR OR \ 8945FC MOV FC [EBP] , EAX +OP2 @ C@ B8 XOR OR \ B801000000 MOV EAX , # 1 +OP1 @ C@ B9 XOR OR \ B9FFFFFFFF MOV ECX , # FFFFFFFF +OP0 @ W@ 4D03 XOR OR \ 034DFC ADD ECX , FC [EBP] +0= IF M\ FA DTST + OP2 @ 1+ @ + OP2 OPexcise + C803 OP0 @ W! \ ADD ECX , EAX + -1 ALLOT + SetOP B8 C, , + FALSE M\ FB DTST + EXIT + THEN + +OP3 @ C@ A1 XOR \ 587C37 A1D8795800 MOV EAX , 5879D8 ( C+5 ) +OP2 @ W@ D08B XOR OR \ 587C3C 8BD0 MOV EDX , EAX +OP1 @ C@ A1 XOR OR \ 587C3E A1E4795800 MOV EAX , 5879E4 ( D+5 ) +OP0 @ W@ 4589 XOR OR \ 587C43 8945EC MOV EC [EBP] , EAX +0= IF M\ 114 DTST + OP2 OPexcise + OP2 1 OPresize + 158B OP2 @ W! + FALSE M\ 115 DTST + EXIT + THEN + +OP3 @ 2+ C@ +OP1 @ 2+ C@ XOR +OP1 @ 2+ C@ +OP0 @ 2+ C@ XOR OR +OP3 @ W@ 4589 XOR OR \ 894500 MOV 0 [EBP] , EAX +OP2 @ W@ 428D XOR OR \ 8D4201 LEA EAX , 1 [EDX] +OP1 @ W@ 558B XOR OR \ 8B5500 MOV EDX , 0 [EBP] +OP0 @ W@ 4589 XOR OR \ 894500 MOV 0 [EBP] , EAX +0= IF M\ 140 DTST + OP3 OPexcise + OP2 2 OPinsert + C88B OP3 @ W! \ MOV ECX , EAX + OP1 OPexcise + OP0 2 OPinsert + D18B OP1 @ W! \ MOV EAX , ECX + FALSE M\ 141 DTST + EXIT + THEN + + + +OP4 @ :-SET U< IF TRUE EXIT THEN + +\ $ 10 LSHIFT + OP4 @ W@ 4589 XOR \ MOV X0 [EBP] , EAX + OP3 @ C@ B8 XOR OR \ MOV EAX, # 10 + OP2 @ @ 458BC88B XOR OR \ MOV ECX, EAX \ !? MOV EAX, X2 [EBP] + OP0 @ W@ F7FF AND E0D3 XOR OR \ SHL|SHR EAX , CL + OP4 @ 2+ C@ OP1 @ 2+ C@ XOR OR \ X0=X2 + 0= + IF M\ 32 DTST + OP0 @ W@ 0012 - OP4 @ W! + OP3 @ 1+ @ OP4 @ 2+ C! + OP4 ToOP0 + FALSE -C ALLOT M\ 33 DTST + EXIT + THEN + + OP1 @ @ FFFFFF AND 82448D XOR \ LEA EAX , 0 [EDX] [EAX*4] + OP0 @ W@ 0889 XOR OR \ MOV [EAX] , ECX + 0= + IF M\ 132 DTST + 4C89 OP1 @ W! + OP1 ToOP0 + FALSE -2 ALLOT M\ 133 DTST + EXIT + THEN + + +OP4 @ 2+ C@ +OP3 @ 2+ C@ XOR +OP3 @ 2+ C@ +OP0 @ 2+ C@ XOR OR +OP4 @ W@ 558B XOR OR \ 8B5500 MOV EDX , 0 [EBP] +OP3 @ W@ 4589 XOR OR \ 894500 MOV 0 [EBP] , EAX +OP2 @ @ C203D8F7 XOR OR \ F7D8 NEG EAX + \ 03C2 ADD EAX , EDX +OP0 @ W@ 558B XOR OR \ 8B5500 MOV EDX , 0 [EBP] +0= IF M\ C8 DTST + 4D OP4 @ 1+ C! \ MOV ECX , 0 [EBP] + \ MOV 0 [EBP] , EAX + D08B OP2 @ W! \ MOV EDX , EAX + C103D8F7 OP1 @ ! \ NEG EAX + \ ADD EAX , ECX + FALSE -1 ALLOT M\ C9 DTST + EXIT + THEN + +OP4 @ W@ 5589 XOR \ 895500 MOV 0 [EBP] , EDX +OP3 @ W@ 558B XOR OR \ 8B55FC MOV EDX , FC [EBP] +OP2 @ W@ 4D8B XOR OR \ 8B4D00 MOV ECX , 0 [EBP] +0= IF M\ C8 DTST + OP3 2 OPinsert + CA8B OP4 @ W! \ MOV ECX , EDX + OP2 OPexcise + FALSE M\ C9 DTST + EXIT + THEN + +DUP C@ C3 XOR +OP3 @ 2+ C@ +OP0 @ 2+ C@ XOR OR +OP3 @ W@ 4589 XOR OR \ 571FEA 894500 MOV 0 [EBP] , EAX +OP2 @ W@ C28B XOR OR \ 571FED 8BC2 MOV EAX , EDX +OP1 @ W@ EAF7 XOR OR \ 571FEF F7EA IMUL EDX +OP0 @ W@ 4503 XOR OR \ 571FF1 034500 ADD EAX , 0 [EBP] +0= IF M\ 1C8 DTST + + OP2 OPexcise + OP1 OPexcise + + OP0 3 OPinsert + AF0F OP1 @ W! + D2 OP1 @ 2+ C! \ IMUL EDX , EDX + + C203 OP0 @ W! \ ADD EAX , EDX + FALSE + -1 ALLOT + M\ 1C9 DTST + EXIT + THEN + + +OP5 @ :-SET U< IF TRUE EXIT THEN + +M\ PPPP + + TRUE +; + +: -EVEN-EBP + OP0 @ :-SET U< IF EXIT THEN + OP0 @ W@ 06D8D = \ LEA ebp, OFF-EBP [EBP] + IF OP0 @ 2+ C@ +>OFF-EBP + OP1 ToOP0 + -3 ALLOT EXIT + THEN ; + + +: OPT_ ( -- ) + BEGIN +\ M\ -D DTST + OPT-RULES UNTIL +\ M\ -F DTST + EVEN-EAX ; + +: DO_OPT ( ADDR -- ADDR' ) + OPT? IF OPT_ THEN ; + +: INLINE? ( CFA -- CFA FLAG ) + DUP BEGIN + 2DUP + MM_SIZE - U> 0= IF DROP FALSE EXIT THEN + DUP C@ \ CFA CFA+OFF N' + DUP 0C3 = IF 2DROP TRUE EXIT THEN \ RET + DUP5B? M_WL DROP 5 + REPEAT +\ 0100.X0XX + DUP 0F4 + AND 40 = M_WL DROP 1+ REPEAT \ INC|DEC E(ACDB)X + + DUP 099 = M_WL DROP 1+ REPEAT \ CDQ +\ 1110.11XX +OS\ DUP FC +OS\ AND EC = M_WL DROP 1+ REPEAT \ IN|OUT EAX AL, DX | DX, EAX EL +OS\ DUP CD = M_WL DROP 2+ REPEAT \ INTX + DROP + DUP W@ \ CFA CFA+OFF N' + + DUP3B?[EBP] M_WL DROP 3 + REPEAT + DUP3B? M_WL DROP 3 + REPEAT + DUP 06D8D = M_WL DROP 3 + REPEAT \ LEA EBP, OFF-EBP [EBP] + DUP 0C583 = M_WL DROP 3 + REPEAT \ ADD EBP, # OFF-EBP + DUP 0ED83 = M_WL DROP 3 + REPEAT \ SUB EBP, # X + DUP2B? M_WL DROP 2+ REPEAT + DUP 0EC87 = M_WL DROP 2+ REPEAT \ XCHG EBP , ESP + + DUP C58B = M_WL DROP 2+ REPEAT \ MOV EAX, EBP + +\ DUP 0E3FF = M_WL DROP 2+ REPEAT \ JMP EBX + DUP6B? M_WL DROP 6 + REPEAT + DUP 45C7 = M_WL DROP 7 + REPEAT \ MOV X [EBP] , # X + DUP 05C7 = M_WL DROP A + REPEAT \ MOV X , # Y + DUP 0581 = M_WL DROP A + REPEAT \ ADD X , # Y + + DROP + DUP @ + DUP 0424448B = M_WL DROP 4 + REPEAT + DUP 0424448D = M_WL DROP 4 + REPEAT + DUP 8BE08B5B = + IF OVER 3 + 2@ \ 1 TO TTTT + E3FF046D 8D00458B D= \ RP! + IF 2DROP TRUE EXIT THEN + THEN + FFFFFF AND + DUP C09D0F = M_WL DROP 3 + REPEAT \ SETGE AL + DUP C09E0F = M_WL DROP 3 + REPEAT \ SETLE AL + DUP 90048D = M_WL DROP 3 + REPEAT \ LEA EAX , [EAX] [EDX*4] + DUP 02048D = M_WL DROP 3 + REPEAT \ LEA EAX, [EDX] [EAX] + DUP 40B70F = M_WL DROP 4 + REPEAT \ MOVZX EAX , WORD PTR FE [EAX] + + +\ 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 = M_WL DROP 3 + REPEAT \ MOVZX EAX, WORD PTR [EAX] + + DUP 20488B = M_WL DROP 3 + REPEAT \ MOV ECX , [EAX+20H] + DUP 20488D = M_WL DROP 3 + REPEAT \ LEA ECX , [EAX+20H] + + DUP 85448B = M_WL DROP 4 + REPEAT \ MOV EAX, X [EBP] [EAX*4] + DUP 02048D = M_WL DROP 4 + REPEAT \ LEA EAX , [EDX] [EAX] +\ XX00.0101 0000.0100 1000.1XX1 + DUP7B? WHILE DROP 7 + REPEAT + 2DROP FALSE +; + +: MACRO? INLINE? ; + +\ ╠└╩╨╬╧╬─╤╥└═╬┬┘╚╩ + +: +EBP DUP C@ C>S OFF-EBP + C, 1+ ; + +: 1_,_STEP SetOP DROP DUP C@ C, 1+ ; + +: 2_,_STEP SetOP DROP DUP W@ W, 2+ ; + +: 3_,_STEP 2_,_STEP DUP C@ C, 1+ ; + +: 4_,_STEP_ DUP @ , CELL+ ; + +: 4_,_STEP SetOP DROP 4_,_STEP_ ; + +: 5_,_STEP 1_,_STEP 4_,_STEP_ ; + +: 6_,_STEP 2_,_STEP 4_,_STEP_ ; + +: 7_,_STEP 3_,_STEP 4_,_STEP_ ; + +: A_,_STEP 2_,_STEP 4_,_STEP_ 4_,_STEP_ ; + +: 0A_,_STEP DUP DUP @ + DP @ - , CELL+ ; + +: 1A_,_STEP 1_,_STEP 0A_,_STEP ; + +: 2A_,_STEP 2_,_STEP 0A_,_STEP ; + +: _INLINE, ( CFA -- ) +\ ." ^" DUP H. + BEGIN + DO_OPT + + DUP @ \ CFA N' + DUP 8BE08B5B = DUP + IF DROP OVER 3 + 2@ E3FF046D 8D00458B D= \ RP! + THEN M_WL DROP SetOP + 8B C, E0 C, \ MOV ESP, EAX + DROP 'DROP + REPEAT + FF AND \ CFA N' + DUP 0C3 = IF 2DROP EXIT THEN \ RET + + DUP5B? M_WL 5_,_STEP REPEAT \ ADD EAX, # X + +\ 010X.XXXX + DUP E0 AND 40 = M_WL 1_,_STEP REPEAT \ INC|DEC|PUSH|POP E_X + +\ FS: GS: D16: A16: INSB INSD OUTSB OUTSD +\ 0110.X1XX + DUP F4 AND 64 = M_WL 1_,_STEP REPEAT + + DUP 099 = M_WL 1_,_STEP REPEAT \ CDQ + +OS\ DUP FC +OS\ AND EC = M_WL 1_,_STEP REPEAT \ IN|OUT EAX AL, DX | DX, EAX EL +OS\ DUP CD = M_WL 2_,_STEP REPEAT \ INTX + +\ DUP 0BB = M_WL 5_,_STEP REPEAT \ MOV EBX, # X +\ JO JNO JB JAE JE JNE JBE JA JS JNS JP JNP JL JGE JLE JG +\ 0111.XXXX + DUP F0 AND 70 = M_WL 2_,_STEP REPEAT + + DUP 0E8 = M_WL 1A_,_STEP REPEAT \ CALL + DUP 0E9 = M_WL 1A_,_STEP REPEAT \ JMP + DROP + DUP W@ + DUP3B?[EBP] M_WL 2_,_STEP +EBP REPEAT + DUP3B? M_WL 3_,_STEP REPEAT + DUP2B? M_WL 2_,_STEP REPEAT + DUP 0C48B = M_WL 2_,_STEP REPEAT \ MOV EAX , ESP + DUP C58B = M_WL EVEN-EBP 2_,_STEP REPEAT \ MOV EAX, EBP + DUP 0EC87 = M_WL EVEN-EBP 2_,_STEP REPEAT \ XCHG EBP , ESP + + DUP 06D8D = M_WL DROP DUP 2 + C@ +>OFF-EBP + 3 + REPEAT \ LEA EBP, OFF-EBP [EBP] + + DUP 0C583 = M_WL DROP DUP 2 + C@ +>OFF-EBP + 3 + REPEAT \ ADD EBP, # OFF-EBP + + DUP 0ED83 = M_WL DROP DUP 2 + C@ C>S NEGATE +>OFF-EBP + 3 + REPEAT \ SUB EBP, # OFF-EBP + + DUP 0C483 = M_WL 3_,_STEP REPEAT \ ADD ESP, # X + DUP6B? M_WL 6_,_STEP REPEAT \ MOV EAX, # X + DUP 0E3FF = M_WL EVEN-EBP 2_,_STEP REPEAT \ JMP EBX +\ DUP 0D3FF = M_WL EVEN-EBP 2_,_STEP REPEAT \ CALL EBX + +\ DUP 0E2FF = M_WL EVEN-EBP 2_,_STEP REPEAT \ JMP EDX + DUP 0D2FF = M_WL EVEN-EBP 2_,_STEP REPEAT \ CALL EDX + DUP 810F = M_WL 2A_,_STEP REPEAT \ JO [ESP] + DUP 45C7 = M_WL 2_,_STEP +EBP 4_,_STEP_ REPEAT \ MOV X [EBP] , # X + DUP 05C7 = M_WL A_,_STEP REPEAT \ MOV X , # Y + DUP 0581 = M_WL A_,_STEP REPEAT \ ADD X , # Y + + DROP + DUP @ + DUP 0424448B = M_WL DROP SetOP \ MOV EAX, 4 [ESP] + 8B C, 04 C, 24 C, \ MOV EAX, [ESP] + 4 + + REPEAT + + DUP 0424448D = M_WL DROP SetOP \ LEA EAX, 4 [ESP] + 8B C, C4 C, \ MOV EAX, ESP + 4 + + REPEAT + + FFFFFF AND + + DUP C09D0F = M_WL 3_,_STEP REPEAT \ SETGE AL + DUP C09E0F = M_WL 3_,_STEP REPEAT \ SETLE AL + DUP 90048D = M_WL 3_,_STEP REPEAT \ LEA EAX , [EAX] [EDX*4] + DUP 02048D = M_WL 3_,_STEP REPEAT \ LEA EAX, [EDX] [EAX] + DUP 40B70F = M_WL 4_,_STEP REPEAT \ MOVZX EAX , WORD PTR FE [EAX] + + DUP 240401 = M_WL 3_,_STEP REPEAT \ ADD [ESP] , EAX + +\ 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 = M_WL 3_,_STEP REPEAT + DUP 244403 = M_WL 4_,_STEP REPEAT \ ADD EAX, X [ESP] + DUP 24442B = M_WL 4_,_STEP REPEAT \ SUB EAX, X [ESP] + DUP 24448B = M_WL 4_,_STEP REPEAT \ MOV EAX, X [ESP] + DUP 85448B = M_WL 3_,_STEP +EBP REPEAT \ MOV EAX, X [EBP] [EAX*4] + DUP 24048B = M_WL 3_,_STEP REPEAT \ MOV EAX, 0 [ESP] + DUP 20488B = M_WL 3_,_STEP REPEAT \ MOV ECX , [EAX+20H] + DUP 20488D = M_WL 3_,_STEP REPEAT \ LEA ECX , [EAX+20H] + DUP 021C8D = M_WL 3_,_STEP REPEAT \ LEA EBX, [EDX] [EAX] + DUP 85048D = M_WL 7_,_STEP REPEAT \ LEA EAX, X [EAX*4] + DUP 2404FF = M_WL 3_,_STEP REPEAT \ INC [ESP] + DUP 18B60F = M_WL 3_,_STEP REPEAT \ MOVZX EBX, BYTE PTR [EAX] + + DUP7B? WHILE 7_,_STEP REPEAT + HEX U. ." @COD, ERROR" ABORT +; + + +: XC_J + J_COD FE AND 4 = IF EXIT THEN + J_COD DUP 0x8 AND + IF 3 + ELSE 5 + THEN XOR TO J_COD ; + +[DEFINED] [TTO] +[IF] +PREVIOUS PREVIOUS SET-CURRENT +[THEN] + +: OPT_CLOSE + EVEN-EBP DP @ TO LAST-HERE ; + +: OPT_INIT ?SET -EVEN-EBP ; + +: INLINE, ( CFA -- ) OPT_INIT _INLINE, OPT_CLOSE ; + +: MACRO, INLINE, ; + + +: ?BR-OPT-RULES ( cfa -- cfa' flag ) +\ ZZZZ IF ." z=" OP1 @ @ U. THEN + OP0 @ :-SET U< IF TRUE EXIT THEN + M\ -3 DTST + + OP0 @ C@ 05 = \ ADD EAX, # X + IF M\ 404 DTST + OP0 @ 1+ @ OFF-EAX + TO OFF-EAX + OP1 ToOP0 + FALSE -5 ALLOT M\ 405 DTST + EXIT + THEN + + DUP 'DROP XOR + OFF-EAX OR + OP0 @ W@ 4589 XOR OR 0= \ MOV X [EBP] , EAX + IF M\ 436 DTST + DP @ TO LAST-HERE INLINE, + M\ 437 DTST + ['] NOOP FALSE EXIT + THEN + + DUP 'DROP = + OFF-EAX 0= + OP0 @ C@ A1 = AND AND \ MOV EAX , 44444 + IF M\ 434 DTST + 0 W, + OP0 @ 1+ @ OP0 @ 2+ ! + 3D83 OP0 @ W! \ CMP 44444, # 0 + FALSE M\ 435 DTST + EXIT + THEN + + OFF-EAX 0= + OP0 @ @ FFFFFF AND 24048B = AND \ MOV EAX , [ESP] + IF M\ 534 DTST + 1 ALLOT + 243C83 OP0 @ ! \ CMP DWORD PTR [ESP], 0 + FALSE M\ 535 DTST + EXIT + THEN + + DUP 'DROP XOR + OP0 @ W@ 458B XOR OR 0= \ MOV EAX , 0 [EBP] + IF M\ 334 DTST + 7D83 OP0 @ W! \ CMP X [EBP], # Z + FALSE 0 C, M\ 335 DTST + EXIT + THEN + DUP 'DROP XOR + OP0 @ W@ C20B XOR OR \ 0BC2 OR EAX , EDX +0= IF M\ B4 DTST + D00B OP0 @ W! \ OR EDX , EAX + FALSE M\ B5 DTST + EXIT + THEN + + OP0 @ W@ 408D = \ LEA EAX, X [EAX] + IF M\ 234 DTST + C083 OP0 @ W! \ ADD EAX, # X + FALSE M\ 235 DTST + EXIT + THEN + OP0 @ W@ 808D = \ LEA EAX, X [EAX] + IF M\ 34 DTST + 05 OP0 @ C! + OP0 @ 2+ @ OP0 @ 1+ ! \ ADD EAX, # X + TRUE -1 ALLOT M\ 35 DTST + EXIT + THEN + + DUP 'DROP XOR + OP0 @ @ FFFFFF AND 1FF8C1 XOR OR 0= \ SAR EAX , 1F + IF M\ 13A DTST + OP1 ToOP0 + 8D J_COD 1 AND XOR TO J_COD + FALSE -3 ALLOT M\ 13B DTST + EXIT + THEN + DUP 'DROP XOR + OP0 @ C@ 35 XOR OR 0= \ XOR EAX, # X + IF M\ 134 DTST + 3D OP0 @ C! \ CMP EAX, # X + FALSE M\ 135 DTST + EXIT + THEN + + DUP 'DROP XOR + OP0 @ @ FFFFFF AND 240433 XOR OR 0= \ XOR EAX , [ESP] + IF M\ 134 DTST + 3B OP0 @ C! \ CMP EAX , [ESP] + FALSE M\ 135 DTST + EXIT + THEN + + OP0 @ W@ 4539 XOR \ CMP X [EBP] , EAX +0= IF M\ 76 DTST + 3B OP0 @ C! \ CMP EAX, X [EBP] + XC_J + FALSE M\ 77 DTST + EXIT + THEN + + OP1 @ :-SET U< IF TRUE EXIT THEN +\ $ 0<> IF + DUP 'DROP XOR + OP1 @ @ C01BD8F7 XOR OR 0= \ NEG EAX \ SBB EAX, EAX + IF M\ 36 DTST + OP2 ToOP0 +\ 084 TO J_COD + FALSE -4 ALLOT M\ 37 DTST + EXIT + THEN + + +\ $ 0= IF + DUP 'DROP XOR + OP1 @ @ 1B01E883 XOR OR \ SUB EAX , # 1 + OP0 @ W@ C01B XOR OR 0= \ SBB EAX , EAX + IF M\ 38 DTST +\ OP2 @ W@ U. + OP2 ToOP0 + J_COD 1 XOR TO J_COD + FALSE -5 ALLOT M\ 39 DTST + EXIT + THEN + + + \ $ U< IF + DUP 'DROP XOR + OP1 @ C@ 3D <> + OP1 @ C@ 3B <> AND +\ OP1 @ W@ 053B <> AND +\ OP1 @ W@ D03B <> AND \ CMP EDX , EAX + OP1 @ @ FFFD AND + 4539 <> AND \ CMP X [EBP] , EAX + OP0 @ W@ C01B XOR OR OR 0= \ SBB EAX , EAX + IF M\ 3A DTST + OP1 ToOP0 + 83 J_COD 1 AND XOR TO J_COD + FALSE -2 ALLOT M\ 3B DTST + EXIT + THEN + + OP1 @ @ FFFFFF AND 240C8B XOR \ MOV ECX , [ESP] + OP0 @ W@ C13B XOR OR 0= \ CMP EAX , ECX + IF M\ 33A DTST + 043B OP1 @ W! + OP1 ToOP0 + FALSE -2 ALLOT M\ 33B DTST + EXIT + THEN + + OP1 @ @ FFFFFF AND 240C8B XOR \ MOV ECX , [ESP] + OP0 @ W@ C133 XOR OR 0= \ XOR EAX , ECX + IF M\ 33A DTST + 0433 OP1 @ W! \ XOR ECX , [ESP] + OP1 ToOP0 + FALSE -2 ALLOT M\ 33B DTST + EXIT + THEN + + OP1 @ @ C13BCA8B = \ MOV ECX , EDX CMP EAX , ECX + IF M\ 33A DTST + C23B OP1 @ W! \ CMP EAX , EDX + OP1 ToOP0 + FALSE -2 ALLOT M\ 33B DTST + EXIT + THEN + + OP1 @ W@ 558B XOR \ MOV EDX , 0 [EBP] + OP0 @ W@ C23B XOR OR 0= \ CMP EAX , EDX + IF M\ 43A DTST + 453B OP1 @ W! \ CMP EAX , 0 [EBP] + OP1 ToOP0 + FALSE -2 ALLOT M\ 43B DTST + EXIT + THEN + + + DUP 'DROP XOR + OP1 @ @ C83B008B XOR OR \ MOV EAX , [EAX] CMP ECX , EAX +0= IF M\ 43A DTST + 083B OP1 @ W! \ CMP ECX , [EAX] + OP1 ToOP0 + FALSE -2 ALLOT M\ 43B DTST + EXIT + THEN + + DUP 'DROP XOR + OP1 @ @ D03B008B XOR OR \ MOV EAX , [EAX] CMP EDX , EAX +0= IF M\ 43A DTST + 103B OP1 @ W! \ CMP EDX , [EAX] + OP1 ToOP0 + FALSE -2 ALLOT M\ 43B DTST + EXIT + THEN + DUP 'DROP XOR +OP1 @ @ C13B008B XOR OR \ MOV EAX , [EAX] CMP EAX , ECX +0= IF M\ 80 DTST + 083B OP1 @ W! \ CMP ECX , [EAX] + XC_J + OP1 ToOP0 + FALSE -2 ALLOT M\ 81 DTST + EXIT + THEN + +OP1 @ C@ B9 XOR \ MOV ECX , # 3 +OP0 @ W@ C133 XOR OR \ XOR EAX , ECX +0= IF M\ 40 DTST + 3D OP1 @ C! \ CMP EAX , # 1 + OP1 ToOP0 + FALSE -2 ALLOT M\ 41 DTST + EXIT + THEN +\ ZZZZ IF ." Z=" OP1 @ @ U. OP1 @ W@ U. OP0 @ W@ U. THEN +OP1 @ W@ 558B XOR \ MOV EDX , 0 [EBP] +OP0 @ W@ C23B XOR OR \ CMP EAX , EDX +0= IF M\ 68 DTST + 453B OP1 @ C! \ CMP EAX , 0 [EBP] + OP1 ToOP0 + FALSE -2 ALLOT M\ 69 DTST + EXIT + THEN +OP1 @ C@ B9 XOR \ 57B523 B901000000 MOV ECX , # 1 +OP0 @ W@ C83B XOR OR \ 57B528 3BC8 CMP ECX , EAX +0= IF M\ 74 DTST + 3D OP1 @ C! \ CMP EAX , # 1 + XC_J + OP1 ToOP0 + FALSE -2 ALLOT M\ 75 DTST + EXIT + THEN + +OP1 @ @ C23B008B = \ MOV EAX , [EAX] CMP EAX , EDX + IF M\ 78 DTST + 103B OP1 @ W! \ CMP EDX , [EAX] + XC_J + OP1 ToOP0 -2 ALLOT + FALSE M\ 79 DTST + EXIT + THEN + + DUP 'DROP XOR +OP1 @ @ FFFFFF AND 24448B XOR OR \ MOV EAX , 10 [ESP] +OP0 @ C@ 3D XOR OR \ 597707 3D02000000 CMP EAX , # 2 +0= IF M\ 7A DTST + 7C81 OP1 @ W! \ CMP 10 [ESP] , # 2 + OP0 @ 1+ @ OP0 @ ! + OP1 ToOP0 -1 ALLOT + FALSE M\ 7B DTST + EXIT + THEN + +OP1 @ @ FFFFFF AND 244C8B XOR \ MOV ECX , 20 [ESP] +OP0 @ W@ C83B XOR OR \ CMP ECX , EAX +0= IF M\ 7C DTST + 443B OP1 @ W! \ CMP EAX , 20 [ESP] + OP0 @ 1+ @ OP0 @ ! + XC_J + OP1 ToOP0 -2 ALLOT + FALSE M\ 7D DTST + EXIT + THEN + +OP1 @ W@ 0D8B XOR \ MOV ECX , 44444 +OP0 @ W@ C83B XOR OR \ CMP ECX , EAX +0= IF M\ 7C DTST + 053B OP1 @ W! \ CMP EAX , 44444 + OP0 @ 1+ @ OP0 @ ! + XC_J + OP1 ToOP0 -2 ALLOT + FALSE M\ 7D DTST + EXIT + THEN + + DUP 'DROP XOR +OP1 @ @ FFFFFF AND 85048B XOR OR \ MOV EAX , X [EAX*4] +OP0 @ C@ 3D XOR OR \ 5960F8 3500100000 CMP EAX , # 1000 +0= IF M\ 86 DTST + 3C81 OP1 @ W! \ CMP X [EAX*4] , # 1000 + OP0 @ 1+ @ OP0 @ ! + OP1 ToOP0 -1 ALLOT + FALSE M\ 87 DTST + EXIT + THEN + + DUP 'DROP XOR +OP1 @ C@ A1 XOR OR \ 5978EF A135755900 MOV EAX , 597535 +OP0 @ C@ 3D XOR OR \ 5978F4 3D41000000 CMP EAX , # 1000 +0= IF M\ 96 DTST + OP1 @ 1+ @ OP1 @ 2+ ! + 3D81 OP1 @ W! \ CMP 597535 , # 1000 + OP1 ToOP0 + FALSE M\ 97 DTST + EXIT + THEN + + DUP 'DROP XOR +OP1 @ W@ D8F7 XOR OR \ 581E16 F7D8 NEG EAX +OP0 @ W@ C203 XOR OR \ 581E18 03C2 ADD EAX , EDX +0= IF M\ B8 DTST + D02B OP1 @ W! \ SUB EDX , EAX + OP1 ToOP0 -2 ALLOT + FALSE M\ B9 DTST + EXIT + THEN + +OP1 @ @ C90BCA8B XOR \ 8BCA MOV ECX , EDX + \ 0BC9 OR ECX , ECX +0= IF M\ BA DTST + D20B OP1 @ W! \ OR EDX , EDX + OP1 ToOP0 -2 ALLOT + FALSE M\ BB DTST + EXIT + THEN + +OP1 @ @ 3DFF408D XOR +OP0 @ 1+ @ OR \ LEA EAX , FF [EAX] CMP EAX , # 0 +0= IF M\ 1BA DTST + 48 OP1 @ C! \ DEC EAX + OP1 ToOP0 -7 ALLOT + FALSE M\ 1BB DTST + EXIT + THEN + + OP2 @ :-SET U< IF TRUE EXIT THEN + +OP2 @ W@ 4589 XOR \ MOV F8 [EBP] , EAX +OP1 @ @ 453BC033 XOR OR \ XOR EAX , EAX CMP EAX , F8 [EBP] +OP0 @ 2+ C@ +OP2 @ 2+ C@ XOR OR \ (FALG &( X1=X )) +0= IF M\ 4E DTST + 3D OP1 @ C! OP1 @ 1+ 0! \ CMP EAX , # 0 + XC_J + OP1 ToOP0 + FALSE M\ 4F DTST + EXIT + THEN + +OP2 @ W@ 5589 XOR \ MOV F8 [EBP] , EDX +OP1 @ @ 453B008B XOR OR \ MOV EAX , [EAX] CMP EAX , F8 [EBP] +OP0 @ 2+ C@ +OP2 @ 2+ C@ XOR OR \ (FALG &( X1=X )) +\ OP0 @ 2+ C@ C>S OFF-EBP > OR !!!! +0= IF M\ 23A DTST + C23B OP0 @ W! \ CMP EAX , EDX + FALSE -1 ALLOT M\ 23B DTST + EXIT + THEN + +OP2 @ W@ 4D89 XOR \ MOV F8 [EBP] , ECX +OP1 @ @ 453B008B XOR OR \ MOV EAX , [EAX] CMP EAX , F8 [EBP] +OP0 @ 2+ C@ +OP2 @ 2+ C@ XOR OR \ (FALG &( X1=X )) +0= IF M\ 7E DTST + C13B OP0 @ W! \ CMP EAX , ECX + FALSE -1 ALLOT M\ 7F DTST + EXIT + THEN + + +OP1 @ W@ 8B XOR \ MOV EAX , [EAX] +OP0 @ W@ 4539 XOR OR \ CMP F8 [EBP] , EAX +OP0 @ 2+ C@ +OP2 @ 2+ C@ XOR OR \ (FALG &( X1=X )) +\ OP0 @ 2+ C@ C>S OFF-EBP > OR +0= IF + OP2 @ W@ 4D89 = \ MOV F8 [EBP] , ECX + IF M\ 23A DTST + C83B OP0 @ W! \ CMP ECX , EAX + FALSE -1 ALLOT M\ 23B DTST + EXIT + THEN + OP2 @ W@ 5589 = \ MOV F8 [EBP] , EDX + \ MOV EAX , [EAX] CMP F8 [EBP] , EAX + IF M\ 33A DTST + D03B OP0 @ W! \ CMP EDX , EAX + FALSE -1 ALLOT M\ 33B DTST + EXIT + THEN + THEN + + + OP3 @ :-SET U< IF TRUE EXIT THEN + +\ $ < IF + DUP 'DROP XOR + OP2 @ @ FFFFFCFF AND 83C09C0F XOR OR + OP1 @ @ 4801E083 XOR OR 0= +\ 0F9DC0 SETGE AL +\ 83E001 AND EAX , # 1 +\ 48 DEC EAX + IF M\ 3C DTST + OP2 @ 1+ C@ 10 - J_COD 1 AND XOR TO J_COD + OP3 ToOP0 + FALSE -7 ALLOT M\ 3D DTST + EXIT + THEN + +\ 5 OVER = IF + OP0 @ W@ 4533 = \ XOR EAX , F8 [EBP] + IF + DUP 'DROP XOR + OP3 @ W@ 4589 XOR OR \ MOV FC [EBP] , EAX + OP2 @ W@ 45C7 XOR OR \ MOV F8 [EBP] , # 5 + OP1 @ W@ 458B XOR OR \ MOV EAX , FC [EBP] + OP3 @ 2+ C@ OP1 @ 2+ C@ XOR OR + OP2 @ 2+ C@ OP0 @ 2+ C@ XOR OR 0= + IF M\ 234 DTST + 3D OP2 @ C! + OP2 @ 3 + @ OP2 @ 1+ ! + OP2 ToOP0 + TRUE -8 ALLOT M\ 235 DTST + EXIT + THEN + THEN + + TRUE ; + +: BR-EVEN-EAX OFF-EAX + IF M\ 1002 DTST + SetOP + 5 C, OFF-EAX , + 0 TO OFF-EAX + M\ 1003 DTST + THEN +; + + +: ?BR-OPT + BEGIN BEGIN M\ -9 DTST + ?BR-OPT-RULES + UNTIL M\ -7 DTST + ['] NOOP OPT-RULES NIP + UNTIL BR-EVEN-EAX + M\ -5 DTST +\ ZZZZ IF ." B=" DUP U. THEN + OP0 @ :-SET U< + IF SetOP 0xC00B W, \ OR EAX, EAX + EXIT + THEN + OP0 @ C@ + \ 00XX.X101 + DUP C7 AND 05 <> \ ADD|OR|ADC|SBB|AND|SUB|XOR|CMP EAX, # X +\ OVER 3D <> AND \ ~ CMP EAX, # X + OVER 40 <> AND \ DEC EAX + OVER 48 <> AND \ INC EAX + OVER 3B <> AND \ CMP + OVER 0B <> AND \ OR + + NIP + OP0 @ W@ + DUP 4000 OR ADD|XOR|OR|AND= INVERT + OVER C01B <> AND \ SBB EAX, EAX + OVER D02B <> AND \ SUB EDX, EAX + OVER 4539 <> AND \ CMP X [EBP], EAX +\ OVER 103B <> AND \ CMP EDX , [EAX] +\ OVER 453B <> AND \ CMP EAX , X [EBP] +\ OVER 053B <> AND \ CMP EAX , X + OVER C083 <> AND \ ADD EAX , # X + OVER C203 <> AND \ ADD EAX , EDX + OVER C133 <> AND \ XOR EAX , ECX + OVER F8C1 <> AND \ SAR EAX , X + OVER 7D83 <> AND \ CMP X [EBP], # Z + OVER 3D81 <> AND \ CMP 44444, # 55555 + OVER 3C81 <> AND \ CMP X [EAX*4] , # 55555 + OVER 7C81 <> AND \ CMP X [ESP] , # X + OVER 3D83 <> AND \ CMP 44444, # 0 + OVER 3C83 <> AND \ CMP [ESP], # 0 +\ OVER C20B <> AND \ OR EAX , EDX + NIP + OP0 @ @ FFFFFF AND 240433 XOR \ XOR EAX , [ESP] + AND + AND + IF SetOP 0xC00B W, \ OR EAX, EAX + THEN +\ DP @ TO :-SET +; + +: ??BR-OPT + OPT? IF OPT_INIT + ?BR-OPT + M\ -B DTST + OPT_CLOSE + THEN ; +: ???BR-OPT + OPT? 0= IF C00B W, \ OR EAX, EAX + THEN + FALSE TO ~BR-OPT 'DROP ??BR-OPT INLINE, + TRUE TO ~BR-OPT + OPT? + IF OPT_INIT + OP0 @ W@ C00B = DUP >R IF OP0 OPexcise THEN + ['] NOOP ?BR-OPT DROP +\ SetOP 0xC00B W, \ OR EAX, EAX + OP0 @ W@ C00B = R> 0= AND IF OP0 OPexcise THEN + OPT_CLOSE + THEN +; + +: OPT ( -- ) ['] NOOP DO_OPT DROP ; + +: FORLIT, ( N -- ) + 'DUP _INLINE, SetOP 0B8 C, , OPT ; + +: CON>LIT ( CFA -- CFA TRUE | FALSE ) + OPT? 0= IF TRUE EXIT THEN ?SET + MM_SIZE 0= IF TRUE EXIT THEN + DUP C@ 0E8 <> IF TRUE EXIT THEN + + DUP 1+ REL@ CELL+ + DUP CREATE-CODE = + IF DROP OPT_INIT 5 + [>T] FORLIT, FALSE OPT_CLOSE EXIT + THEN + + DUP USER-CODE = + IF DROP OPT_INIT 'DUP _INLINE, + SetOP 878D W, 5 + @ , OPT FALSE OPT_CLOSE EXIT + THEN + + DUP USER-VALUE-CODE = + IF DROP OPT_INIT 'DUP _INLINE, + SetOP 878B W, 5 + @ , OPT FALSE OPT_CLOSE EXIT + THEN + + DUP CONSTANT-CODE = + IF DROP OPT_INIT 5 + DUP 5 + REL@ + TOVALUE-CODE CELL- = + IF 'DUP _INLINE, SetOP 0A1 C, [>T] , OPT + ELSE @ FORLIT, + THEN FALSE OPT_CLOSE EXIT + THEN + DUP 1+ REL@ CELL+ DOES-CODE = + IF 5 + \ CFA + SWAP 5 + OPT_INIT FORLIT, + TRUE OPT_CLOSE EXIT + THEN + DUP TOUSER-VALUE-CODE = + IF DROP OPT_INIT + SetOP 8789 W, CELL- @ , OPT + 'DROP _INLINE, + FALSE OPT_CLOSE EXIT + THEN + TOVALUE-CODE = + IF OPT_INIT + SetOP A3 C, CELL- [>T] , OPT + 'DROP _INLINE, + FALSE OPT_CLOSE EXIT + THEN + TRUE +; + +: J?_STEP ( ADR OPX -- ADR OPX+4 FALSE | OPX TRUE TRUE | ADR FALSE TRUE ) + + + OVER J-SET U> 0= IF DROP FALSE TRUE EXIT THEN + OVER DP @ = IF NIP TRUE TRUE EXIT THEN + DUP @ @ FFFFF0FF AND 800F = IF DROP FALSE TRUE EXIT THEN + DUP @ @ 000000E9 = IF DROP FALSE TRUE EXIT THEN + DUP CELL+ OP0 OpBuffSize + U> + IF DROP FALSE TRUE EXIT THEN + 2DUP @ = IF NIP CELL+ TRUE TRUE EXIT THEN + CELL+ FALSE +; + +: J_+! + DUP C@ F0 + AND 70 = IF 1+ ELSE + DUP C@ EB = IF 1+ ELSE + DUP C@ E9 = IF 1+ ELSE + DUP W@ F0FF + AND 800F = IF 2+ ELSE + ." J_+! ERR" ABORT + THEN THEN THEN THEN +! +; + +: J_MOVE ( OPX n -- ) + OVER OP0 <> + IF + OVER CELL- @ + 2DUP - NEGATE + OVER DP @ - NEGATE ( U. U. U. ABORT ) CMOVE + OVER OP0 + ?DO DUP NEGATE I +! + I @ C@ E8 = IF DUP I @ 1+ +! THEN + CELL + +LOOP + THEN + OVER @ + JP0 JpBuffSize + JP0 + ?DO I @ + IF DUP I @ U< + IF + OVER NEGATE I +! + DUP I @ J_@ U> + IF OVER I @ J_+! + THEN + ELSE + DUP I @ <> + IF + DUP I @ J_@ U< + IF OVER NEGATE I @ J_+! + THEN + THEN + THEN + THEN CELL + +LOOP DROP + \ THEN + + NIP NEGATE DUP ALLOT :-SET + TO :-SET EXIT + ; + + TRUE VALUE J_OPT? + + +\ FALSE VALUE J_OPT? + +: RESOLVE_OPT ( ADR -- ) + + OPT? 0= IF DROP EXIT THEN + J_OPT? 0= IF DROP EXIT THEN + + DUP CELL- JP0 JpBuffSize + CELL- @ U< + IF DUP CELL- REL@ CELL+ J-SET UMAX TO J-SET THEN + + \ ." J_S" \ BASE @ HEX J-SET U. DP @ U. BASE ! + DP @ OVER - 7E > IF ( ." S" ) DROP EXIT THEN + DP @ LAST-HERE <> IF ( ." L" ) ?SET DROP EXIT THEN + OPT? 0= IF DROP EXIT THEN + CELL+ OP0 + BEGIN J?_STEP + UNTIL + IF DUP @ + DUP C@ E9 = + IF EB SWAP C! 3 + ELSE + DUP 1+ W@ 10 - \ 400 + + SWAP W! 4 + THEN +\ OVER CELL- @ REST + J_MOVE DP @ TO LAST-HERE EXIT + THEN \ OPX + DROP + +; +\ 0 TO J_OPT? + +BASE ! + + diff --git a/programs/develop/SPForth/src/spf_con_io.f b/programs/develop/SPForth/src/spf_con_io.f new file mode 100644 index 0000000000..c270b51258 --- /dev/null +++ b/programs/develop/SPForth/src/spf_con_io.f @@ -0,0 +1,41 @@ +( Консольный ввод-вывод. + ОС-независимые слова [относительно...]. + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + Преобразование из 16-разрядного в 32-разрядный код - 1995-96гг + Ревизия - сентябрь 1999 +) +32 VALUE BL ( -- char ) \ 94 +\ char - значение символа "пробел". + +: SPACE ( -- ) \ 94 +\ Вывести на экран один пробел. + BL EMIT +; + +: SPACES ( n -- ) \ 94 +\ Если n>0 - вывести на дисплей n пробелов. + BEGIN + DUP + WHILE + BL EMIT 1- + REPEAT DROP +; + +VARIABLE PENDING-CHAR \ клавиатура одна -> переменная глобальная, не USER + +VECT DO-KEY? + +' NOOP TO DO-KEY? + +: KEY? + EVENT-CASE DO-KEY? + &KEY @ 0<> ; + +\ : KEY? +\ 0 ; + +VECT KEY + + +' _KEY TO KEY + diff --git a/programs/develop/SPForth/src/spf_defkern.f b/programs/develop/SPForth/src/spf_defkern.f new file mode 100644 index 0000000000..4be8355c70 --- /dev/null +++ b/programs/develop/SPForth/src/spf_defkern.f @@ -0,0 +1,114 @@ +( Процедуры времени выполнения для CONSTANT, VARIABLE, etc. + ОС-независимые слова. + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + Преобразование из 16-разрядного в 32-разрядный код - 1995-96гг + Ревизия - сентябрь 1999 + Модифицированно Максимовым М.О. + email:mak@mail.rtc.neva.ru + http://informer.rtc.neva.ru/ + т д {812}105-92-03 + т р {812}552-47-64 +) + +Code _CREATE-CODE + SUB EBP, 4 + MOV [EBP] , EAX + POP EAX + RET +EndCode + +Code _CONSTANT-CODE + SUB EBP , 4 + MOV [EBP] , EAX + POP EAX + MOV EAX, [EAX] + RET +EndCode + +Code _USER-CODE + SUB EBP, 4 + MOV [EBP], EAX + POP EAX + MOV EAX, [EAX] + ADD EAX, EDI + RET +EndCode + +Code USER+ ;( offs -- addr ) + ADD EAX, EDI + RET +EndCode + +Code _USER-VALUE-CODE + SUB EBP , 4 + MOV [EBP] , EAX + POP EAX + MOV EAX, [EAX] + ADD EAX, EDI + MOV EAX, [EAX] + RET +EndCode + + +Code _USER-VECT-CODE + POP EBX + MOV EBX, [EBX] + LEA EBX, [EDI+EBX] + MOV EBX, [EBX] + JMP EBX + RET +EndCode + +Code _VECT-CODE + POP EBX + JMP [EBX] +EndCode + +Code _TOVALUE-CODE + POP EBX + SUB EBX, 9 + MOV [EBX] , EAX + MOV EAX, [EBP] + ADD EBP, 4 + RET +EndCode + +Code _TOUSER-VALUE-CODE + POP EBX + SUB EBX, 9 + MOV EBX, [EBX] ; смещение user-переменной + ADD EBX, EDI + MOV [EBX] , EAX + MOV EAX, [EBP] + ADD EBP, 4 + RET +EndCode + + +Code _SLITERAL-CODE + SUB EBP, 8 + MOV [EBP+4], EAX + POP EBX + MOVZX EAX, BYTE PTR [EBX] + INC EBX + MOV [EBP], EBX + ADD EBX, EAX +; INC EBX + JMP EBX +EndCode + +Code _CLITERAL-CODE + SUB EBP, 4 + MOV [EBP] , EAX + POP EAX + MOVZX EBX, BYTE PTR [EAX] + LEA EBX, [EAX+EBX+1] + JMP EBX +EndCode + +\EOF +' _CLITERAL-CODE VALUE CLITERAL-CODE +' _CREATE-CODE VALUE CREATE-CODE +' _USER-CODE VALUE USER-CODE +' _CONSTANT-CODE VALUE CONSTANT-CODE +' _TOVALUE-CODE VALUE TOVALUE-CODE diff --git a/programs/develop/SPForth/src/spf_except.f b/programs/develop/SPForth/src/spf_except.f new file mode 100644 index 0000000000..1a267c7b4e --- /dev/null +++ b/programs/develop/SPForth/src/spf_except.f @@ -0,0 +1,83 @@ +( є╘╥╒╦╘╒╥╔╥╧╫┴╬╬┴╤ ╧┬╥┴┬╧╘╦┴ ╔╙╦╠└▐┼╬╔╩. + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + Ё╥┼╧┬╥┴┌╧╫┴╬╔┼ ╔┌ 16-╥┴┌╥╤─╬╧╟╧ ╫ 32-╥┴┌╥╤─╬┘╩ ╦╧─ - 1995-96╟╟ + Є┼╫╔┌╔╤ - ╙┼╬╘╤┬╥╪ 1999 +) + +' NOOP ->VECT FATAL-HANDLER +\ ┼╙╠╔ ╫ ╥┼┌╒╠╪╘┴╘┼ ╙┬╧┼╫ ╨╧╫╥┼─╔╠╧╙╪ ╔╙╚╧─╬╧┼ ┌╬┴▐┼╬╔┼ HANDLER, +\ ╒╙╘┴╬╧╫╠┼╬╬╧┼ ╨╥╔ ╫╚╧─┼ ╫ ╨╧╘╧╦/┌┴─┴▐╒ ╔╠╔ ╨╧┌─╬┼┼, +\ ╘╧ ╫┘╨╧╠╬╔╘╙╤ ▄╘╧╘ ╧┬╥┴┬╧╘▐╔╦ FATAL-HANDLER + +: (THROW) +\ с╬┴╠╧╟ THROW ╬╧ ╫ ╙╠╒▐┴┼ 0 ╨╧╙╠┼─╬╔╩ ╬┼ ╒┬╔╥┴┼╘╙╤ ╙╧ ╙╘┼╦┴ +\ ф╠╤ ╧╨╘╔═╔┌┴╘╧╥┴. + DUP + IF + DUP 109 = IF DROP EXIT THEN \ broken pipe - ╧┬┘▐╬╧ ╬┼ ╧█╔┬╦┴, ┴ ╦╧╬┼├ ╫╚╧─╬╧╟╧ ╨╧╘╧╦┴ ╫ CGI + HANDLER @ + DUP + IF RP! + R> HANDLER ! + R> SWAP >R + SP! DROP R> + ELSE DROP FATAL-HANDLER THEN + THEN +; + +: THROW +\ х╙╠╔ ╠└┬┘┼ ┬╔╘┘ n ╬┼╬╒╠┼╫┘┼, ╫┌╤╘╪ ╫┼╥╚╬╔╩ ╦┴─╥ ╔╙╦╠└▐┼╬╔╩ ╙╧ ╙╘┼╦┴ +\ ╔╙╦╠└▐┼╬╔╩, ╫╦╠└▐┴╤ ╫╙┼ ╬┴ ╙╘┼╦┼ ╫╧┌╫╥┴╘╧╫ ╬┴─ ▄╘╔═ ╦┴─╥╧═. ·┴╘┼═ +\ ╫╧╙╙╘┴╬╧╫╔╘╪ ╙╨┼├╔╞╔╦┴├╔╔ ╫╚╧─╬╧╟╧ ╨╧╘╧╦┴, ╦╧╘╧╥┘╩ ╔╙╨╧╠╪┌╧╫┴╠╙╤ ╨┼╥┼─ +\ ╙╧╧╘╫┼╘╙╘╫╒└▌╔═ CATCH, ╔ ╒╙╘┴╬╧╫╔╘╪ ╟╠╒┬╔╬┘ ╫╙┼╚ ╙╘┼╦╧╫, ╧╨╥┼─┼╠┼╬╬┘╚ +\ ╫ ▄╘╧═ є╘┴╬─┴╥╘┼, ╫ ╘╧ ╙╧╙╘╧╤╬╔┼, ╦╧╘╧╥╧┼ ┬┘╠╧ ╙╧╚╥┴╬┼╬╧ ╫ ╦┴─╥┼ +\ ╔╙╦╠└▐┼╬╔╩ (i - ▄╘╧ ╘╧ ╓┼ ▐╔╙╠╧, ▐╘╧ ╔ i ╫╧ ╫╚╧─╬┘╚ ┴╥╟╒═┼╬╘┴╚ +\ ╙╧╧╘╫┼╘╙╘╫╒└▌┼╟╧ CATCH), ╨╧╠╧╓╔╘╪ n ╬┴ ╫┼╥█╔╬╒ ╙╘┼╦┴ ─┴╬╬┘╚ ╔ ╨┼╥┼─┴╘╪ +\ ╒╨╥┴╫╠┼╬╔┼ ╫ ╘╧▐╦╒ ╙╥┴┌╒ ╨╧╙╠┼ CATCH, ╦╧╘╧╥╧┼ ╨╧╠╧╓╔╠╧ ▄╘╧╘ ╦┴─╥ +\ ╔╙╦╠└▐┼╬╔╩. +\ х╙╠╔ ╫┼╥█╔╬┴ ╙╘┼╦┴ ╬┼ ╬╧╠╪, ╔ ╬┴ ╙╘┼╦┼ ╔╙╦╠└▐┼╬╔╩ ┼╙╘╪ ╦┴─╥ +\ ╔╙╦╠└▐┼╬╔╩, ╘╧ ╨╧╫┼─┼╬╔┼ ╙╠┼─╒└▌┼┼: +\ х╙╠╔ n=-1, ╫┘╨╧╠╬╔╘╪ ╞╒╬╦├╔└ ABORT (╫┼╥╙╔└ ABORT ╔┌ ╙╠╧╫ CORE), +\ ╬┼ ╫┘╫╧─╤ ╙╧╧┬▌┼╬╔╩. +\ х╙╠╔ n=-2, ╫┘╨╧╠╬╔╘╪ ╞╒╬╦├╔└ ABORT" (╫┼╥╙╔└ ABORT" ╔┌ ╙╠╧╫ CORE), +\ ╫┘╫╧─╤ ╙╔═╫╧╠┘ ccc, ┴╙╙╧├╔╔╥╧╫┴╬╬┘┼ ╙ ABORT", ╟┼╬┼╥╔╥╒└▌╔═ THROW. +\ щ╬┴▐┼ ╙╔╙╘┼═┴ ═╧╓┼╘ ╫┘╫┼╙╘╔ ╬┴ ─╔╙╨╠┼╩ ┌┴╫╔╙╤▌┼┼ ╧╘ ╥┼┴╠╔┌┴├╔╔ +\ ╙╧╧┬▌┼╬╔┼ ╧┬ ╒╙╠╧╫╔╔, ╙╧╧╘╫┼╘╙╘╫╒└▌┼═ THROW ╙ ╦╧─╧═ n. ·┴╘┼═ +\ ╙╔╙╘┼═┴ ╫┘╨╧╠╬╔╘ ╞╒╬╦├╔└ ABORT (╫┼╥╙╔└ ABORT ╔┌ CORE). + ?DUP + IF HANDLER @ + ?DUP + IF RP! + R> HANDLER ! + R> SWAP >R + SP! DROP R> + ELSE FATAL-HANDLER THEN + THEN +; + +VECT \ ╒╙╘┴╬╧╫╔╘╪ ╧┬╥┴┬╧╘▐╔╦ ┴╨╨┴╥┴╘╬┘╚ ╔╙╦╠└▐┼╬╔╩ + +: CATCH ( i*x xt -- j*x 0 | i*x n ) \ 94 EXCEPTION +\ Ё╧╠╧╓╔╘╪ ╬┴ ╙╘┼╦ ╔╙╦╠└▐┼╬╔╩ ╦┴─╥ ╨┼╥┼╚╫┴╘┴ ╔╙╦╠└▐╔╘┼╠╪╬┘╚ ╙╔╘╒┴├╔╩ +\ ╔ ╫┘╨╧╠╬╔╘╪ ╘╧╦┼╬ xt (╦┴╦ ╨╧ EXECUTE) ╘┴╦╔═ ╧┬╥┴┌╧═, ▐╘╧┬┘ ╒╨╥┴╫╠┼╬╔┼ +\ ═╧╟╠╧ ┬┘╘╪ ╨┼╥┼─┴╬╧ ╫ ╘╧▐╦╒ ╙╥┴┌╒ ╨╧╙╠┼ CATCH, ┼╙╠╔ ╫╧ ╫╥┼═╤ ╫┘╨╧╠╬┼╬╔╤ +\ xt ╫┘╨╧╠╬╤┼╘╙╤ THROW. +\ х╙╠╔ ╫┘╨╧╠╬┼╬╔┼ xt ┌┴╦┴╬▐╔╫┴┼╘╙╤ ╬╧╥═┴╠╪╬╧ (╘.┼. ╦┴─╥ ╔╙╦╠└▐┼╬╔╩, +\ ╨╧╠╧╓┼╬╬┘╩ ╬┴ ╙╘┼╦ ╙╠╧╫╧═ CATCH ╬┼ ┬┘╠ ╫┌╤╘ ╫┘╨╧╠╬┼╬╔┼═ THROW), +\ ╫┌╤╘╪ ╦┴─╥ ╔╙╦╠└▐┼╬╔╩ ╔ ╫┼╥╬╒╘╪ ╬╧╠╪ ╬┴ ╫┼╥█╔╬╒ ╙╘┼╦┴ ─┴╬╬┘╚, +\ ╧╙╘┴╠╪╬┘┼ ▄╠┼═┼╬╘┘ ╙╘┼╦┴ ╫╧┌╫╥┴▌┴└╘╙╤ xt EXECUTE. щ╬┴▐┼ ╧╙╘┴╘╧╦ +\ ╙┼═┴╬╘╔╦╔ ╫┘╨╧╠╬┼╬╔╤ ─┴┼╘╙╤ THROW. +\ + SP@ >R HANDLER @ >R + RP@ HANDLER ! + EXECUTE + R> HANDLER ! + RDROP + 0 +; +: ABORT \ 94 EXCEPTION EXT +\ Є┴╙█╔╥╔╘╪ ╙┼═┴╘╔╦╒ CORE ABORT ▐╘╧┬┘ ┬┘╠╧: + ( i*x -- ) ( R: j*x -- ) +\ ў┘╨╧╠╬╔╘╪ ╞╒╬╦├╔└ -1 THROW + -1 THROW +; diff --git a/programs/develop/SPForth/src/spf_forthproc.f b/programs/develop/SPForth/src/spf_forthproc.f new file mode 100644 index 0000000000..68c18fe95a --- /dev/null +++ b/programs/develop/SPForth/src/spf_forthproc.f @@ -0,0 +1,1384 @@ +( Основные низкоуровневые слова "форт-процессора" + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + Преобразование из 16-разрядного в 32-разрядный код - 1995-96гг + Ревизия - сентябрь 1999 +) + +( Реализация для подпрограммного шитого кода. + ESP - указатель стека возвратов + EBP - указатель стека данных + EDI - сохраняемый регистр [указатель данных потока в SPF] +) + +HEX + +\ ================================================================ +\ Стековые манипуляции + +?HS + +Code DUP ;( x -- x x ) \ 94 +; Продублировать x. + LEA EBP, [EBP-4] + mov [ebp],eax + RET +EndCode + + +\ ' DUP TO 'DUP_V + +Code ?DUP ;( x -- 0 | x x ) \ 94 +; Продублировать x, если не ноль. + OR EAX, EAX + JNZ { ' DUP } + RET +EndCode + +Code 2DUP ;( x1 x2 -- x1 x2 x1 x2 ) \ 94 +; Продублировать пару ячеек x1 x2. + MOV EDX, [EBP] + MOV [EBP-4], EAX + MOV [EBP-8], EDX + LEA EBP, [EBP-8] + RET +EndCode + +Code DROP ;( x -- ) \ 94 +; Убрать x со стека. + mov eax,[ebp] + LEA EBP, [EBP+4] + RET +EndCode + +\ ' DROP TO 'DROP_V + +Code MAX ;( n1 n2 -- n3 ) \ 94 +; n3 - большее из n1 и n2. + CMP EAX, [EBP] + JL { ' DROP } + LEA EBP, [EBP+4] + RET +EndCode + +Code MIN ;( n1 n2 -- n3 ) \ 94 + ; n3 - меньшее из n1 и n2. + CMP EAX, [EBP] + JG { ' DROP } + LEA EBP, [EBP+4] + RET +EndCode + +Code UMAX ;( u1 u2 -- n3 ) \ RETurn the lesser of unsigned u1 and + ; unsigned u2 + CMP EAX, [EBP] + JB { ' DROP } + LEA EBP, [EBP+4] + RET +EndCode + +Code UMIN ;( u1 u2 -- n3 ) \ RETurn the lesser of unsigned u1 and + ; unsigned u2 + CMP EAX, [EBP] + JA { ' DROP } + LEA EBP, [EBP+4] + RET +EndCode + +Code 2DROP ;( x1 x2 -- ) \ 94 +; Убрать со стека пару ячеек x1 x2. + MOV EAX , [EBP+4] + ADD EBP , 8 + RET +EndCode + +Code SWAP ;( x1 x2 -- x2 x1 ) \ 94 +; поменять местами два верхних элемента стека +; XCHG EAX { EBP } + MOV EDX, [EBP] + MOV [EBP], EAX + MOV EAX, EDX + RET +EndCode + +Code 2SWAP ;( x1 x2 x3 x4 -- x3 x4 x1 x2 ) \ 94 +; Поменять местами две верхние пары ячеек. + MOV ECX, [EBP] + MOV EBX, [EBP+4] + MOV EDX, [EBP+8] + MOV [EBP+8], ECX + MOV [EBP+4], EAX + MOV [EBP], EDX + MOV EAX, EBX + RET +EndCode + +Code OVER ;( x1 x2 -- x1 x2 x1 ) \ 94 +; Положить копию x1 на вершину стека. + LEA EBP, [EBP-4] + MOV [EBP], EAX + MOV EAX, [EBP+4] + RET +EndCode + +Code 2OVER ;( x1 x2 x3 x4 -- x1 x2 x3 x4 x1 x2 ) \ 94 +; Копировать пару ячеек x1 x2 на вершину стека. + MOV EDX, [EBP+8] + MOV [EBP-4], EAX + MOV [EBP-8], EDX + MOV EAX, [EBP+4] + LEA EBP, [EBP-8] + RET +EndCode + +Code NIP ;( x1 x2 -- x2 ) \ 94 CORE EXT +; Убрать первый элемент под вершиной стека. + ADD EBP, 4 + RET +EndCode + +Code ROT ;( x1 x2 x3 -- x2 x3 x1 ) \ 94 +; Прокрутить три верхних элемента стека. +; XCHG EAX [EBP] +; XCHG EAX 4 [EBP] + MOV EDX, [EBP] + MOV [EBP], EAX + MOV EAX, [EBP+4] + MOV [EBP+4], EDX + RET +EndCode + + +Code -ROT ;( x1 x2 x3 -- x3 x1 x2 ) ; !!!!! +; Обратное ROT + MOV EDX, [EBP+4] + MOV [EBP+4], EAX + MOV EAX, [EBP] + MOV [EBP], EDX + RET +EndCode + +Code PICK ;( ... +n -- ... w ) \ Copy the nth stack item to tos. + MOV EAX, [EBP + EAX*4 ] + RET +EndCode + +Code ROLL ;( xu xu-1 ... x0 u -- xu-1 ... x0 xu ) \ 94 CORE EXT +; Убрать u. Повернуть u+1 элемент на вершине стека. +; Неопределенная ситуация возникает, если перед выполнением ROLL +; на стеке меньше чем u+2 элементов. + OR EAX, EAX + JZ SHORT LL1 + MOV ECX, EAX + LEA EAX, [EAX*4] + MOV EDX, EBP + ADD EDX, EAX + MOV EBX, [EDX] +LL2: LEA EDX, [EDX-4] + MOV EAX, [EDX] + MOV [EDX+4], EAX + DEC ECX + JNZ SHORT LL2 + MOV EAX, EBX + JMP SHORT LL3 +LL1: MOV EAX, [EBP] +LL3: LEA EBP, [EBP+4] + RET +EndCode + +Code TUCK ;( x1 x2 -- x2 x1 x2 ) \ 94 + LEA EBP, [EBP-4] + MOV EDX, [EBP+4] + MOV [EBP], EDX + MOV [EBP+4], EAX + RET +EndCode + +\ ================================================================ +\ Стек возвратов + +Code 2>R ; 94 CORE EXT +; Интерпретация: семантика неопределена. +; Выполнение: ;( x1 x2 -- ) ;( R: -- x1 x2 ) +; Перенести пару ячеек x1 x2 на стек возвратов. Семантически +; эквивалентно SWAP >R >R. + POP EBX + PUSH DWORD PTR [EBP] + PUSH EAX + LEA EBP, [EBP+8] + MOV EAX, [EBP-4] + JMP EBX +EndCode + +Code 2R> ; 94 CORE EXT +; Интерпретация: семантика неопределена. +; Выполнение: ;( -- x1 x2 ) ;( R: x1 x2 -- ) +; Перенести пару ячеек x1 x2 со стека возвратов. Семантически +; эквивалентно R> R> SWAP. \ !!!! + LEA EBP, [EBP-8] + POP EBX + MOV [EBP+4], EAX + POP EAX + POP DWORD PTR [EBP] + PUSH EBX + RET +EndCode + +Code R@ ; 94 +; Исполнение: ;( -- x ) ;( R: x -- x ) +; Интерпретация: семантика в режиме интерпретации неопределена. + LEA EBP, [EBP-4] + MOV [EBP], EAX + MOV EAX, [ESP + 4 ] + RET +EndCode + +Code 2R@ ; 94 CORE EXT +; Интерпретация: семантика неопределена. +; Выполнение: ;( -- x1 x2 ) ;( R: x1 x2 -- x1 x2 ) +; Копировать пару ячеек x1 x2 со стека возвратов. Семантически +; эквивалентно R> R> 2DUP >R >R SWAP. + LEA EBP, [EBP-8] + MOV [EBP+4], EAX + MOV EAX, [ESP + { 2 CELLS } ] + MOV DWORD PTR [EBP], EAX + MOV EAX, [ESP + 4 ] + RET +EndCode + +\ ================================================================ +\ Операции с памятью + +Code @ ;( a-addr -- x ) \ 94 +; x - значение по адресу a-addr. + MOV EAX, [EAX ] + RET +EndCode + +Code ! ;( x a-addr -- ) \ 94 +; Записать x по адресу a-addr. + MOV EDX, [EBP] + MOV DWORD PTR [EAX ], EDX + MOV EAX , [EBP+4] + ADD EBP , 8 + RET +EndCode + +Code C@ ;( c-addr -- char ) \ 94 +; Получить символ по адресу c-addr. Незначащие старшие биты ячейки нулевые. + MOVZX EAX, BYTE PTR [EAX ] + RET +EndCode + +Code C! ;( char c-addr -- ) \ 94 +; Записать char по адресу a-addr. + MOV EDX, [EBP] + MOV BYTE PTR [EAX ], DL + MOV EAX , [EBP+4] + ADD EBP , 8 + RET +EndCode + +Code W@ ;( c-addr -- word ) +; Получить word по адресу c-addr. Незначащие старшие биты ячейки нулевые. + MOVZX EAX, WORD PTR [EAX ] + RET +EndCode + +Code W! ;( word c-addr -- ) +; Записать word по адресу a-addr. + MOV EDX, [EBP] + MOV WORD PTR [EAX ], DX + MOV EAX , [EBP+4] + ADD EBP , 8 + RET +EndCode + +Code 2@ ;( a-addr -- x1 x2 ) \ 94 +; Получить пару ячеек x1 x2, записанную по адресу a-addr. +; x2 по адресу a-addr, x1 в следующей ячейке. +; Равносильно DUP CELL+ @ SWAP @ + MOV EDX, [EAX + 4 ] + LEA EBP, [EBP-4] + MOV DWORD PTR [EBP], EDX + MOV EAX, DWORD PTR [EAX ] + RET +EndCode + +Code 2! ;( x1 x2 a-addr -- ) \ 94 +; Записать пару ячеек x1 x2 по адресу a-addr, +; x2 по адресу a-addr, x1 в следующую ячейку. +; Равносильно SWAP OVER ! CELL+ ! + MOV EDX, [EBP] + MOV [EAX], EDX + MOV EDX, [EBP+4] + MOV [EAX+4], EDX + LEA EBP, [EBP+0CH] + MOV EAX, [EBP-4] + RET +EndCode + +Code D@ ;( a-addr -- x1 x2 ) +; 2@ SWAP + MOV EDX, [EAX] + LEA EBP, [EBP-4] + MOV DWORD PTR [EBP], EDX + MOV EAX, DWORD PTR [EAX+4] + RET +EndCode + +Code D! ;( x1 x2 a-addr -- ) +; >R SWAP R> 2! + MOV EDX, [EBP] + MOV [EAX+4], EDX + MOV EDX, [EBP+4] + MOV [EAX], EDX + LEA EBP, [EBP+0CH] + MOV EAX, [EBP-4] + RET +EndCode + + +Code EBX@ ;( -- EBX ) + LEA EBP, [EBP-4] + mov [ebp],eax + MOV EAX,EBX + RET +EndCode + +\ ================================================================ +\ Вычисления + +Code 1+ ;( n1|u1 -- n2|u2 ) \ 94 +; Прибавить 1 к n1|u1 и получить сумму u2|n2. + LEA EAX, [EAX+1] + RET +EndCode + +Code 1- ;( n1|u1 -- n2|u2 ) \ 94 +; Вычесть 1 из n1|u1 и получить разность n2|u2. + LEA EAX, [EAX-1] + RET +EndCode + +Code 2+ ;( W -> W+2 ) + LEA EAX, [EAX+2] + RET +EndCode + +Code 2- ;( W -> W-2 ) + LEA EAX, [EAX-2] + RET +EndCode + +Code 2* ;( x1 -- x2 ) \ 94 +; x2 - результат сдвига x1 на один бит влево, с заполнением +; наименее значимого бита нулем. +; SHL EAX +; LEA EAX, [EAX+EAX] + LEA EAX, [EAX*2] + RET +EndCode + +Code CELL+ ;( a-addr1 -- a-addr2 ) \ 94 +; Вычесть размер ячейки к a-addr1 и получить a-addr2. + LEA EAX, [EAX+4] + RET +EndCode + +Code CELL- ;( a-addr1 -- a-addr2 ) \ 94 +; Вычесть размер ячейки к a-addr1 и получить a-addr2. + LEA EAX, [EAX-4] + RET +EndCode + +Code CELLS ;( n1 -- n2 ) \ 94 +; n2 - размер n1 ячеек. + LEA EAX, DWORD PTR [EAX *4 ] + RET +EndCode + + +Code + ;( n1|u1 n2|u2 -- n3|u3 ) \ 94 +; Сложить n1|u1 и n2|u2 и получить сумму n3|u3. + ADD EAX, DWORD PTR [EBP] + LEA EBP, [EBP+4] + RET +EndCode + +Code D+ ;( d1|ud1 d2|ud2 -- d3|ud3 ) \ 94 DOUBLE +; Сложить d1|ud1 и d2|ud2 и дать сумму d3|ud3. + MOV EDX, DWORD PTR [EBP] + ADD DWORD PTR [EBP + { 2 CELLS } ], EDX + ADC EAX, DWORD PTR [EBP +4 ] + LEA EBP, [EBP+8] + RET +EndCode + +Code D- ;( d1 d2 -- d3 ) \ 94 DOUBLE +; perform a double subtract (64bit) + MOV EDX, DWORD PTR [EBP] + SUB DWORD PTR [EBP + { 2 CELLS } ], EDX + SBB [EBP+4], EAX + MOV EAX, DWORD PTR [EBP +4 ] + LEA EBP, [EBP+8] + RET +EndCode + +Code - ;( n1|u1 n2|u2 -- n3|u3 ) \ 94 +; Вычесть n2|u2 из n1|u1 и получить разность n3|u3. + NEG EAX + ADD EAX, [EBP] + LEA EBP, [EBP+4] + RET +EndCode + +Code 1+! ;( A -> ) + INC DWORD PTR [EAX ] + MOV EAX, [EBP] + LEA EBP, [EBP+4] + RET +EndCode + +Code 0! ;( A -> ) + MOV DWORD PTR [EAX ], 0 + MOV EAX, [EBP] + LEA EBP, [EBP+4] + RET +EndCode + +Code COUNT ;( c-addr1 -- c-addr2 u ) \ 94 +; Получить строку символов из строки со счетчиком c-addr1. +; c-addr2 - адрес первого символа за c-addr1. +; u - содержимое байта c-addr1, являющееся длиной строки символов, +; начинающейся с адреса c-addr2. + LEA EBP, [EBP-4] + LEA EDX, DWORD PTR [EAX +1 ] + MOV DWORD PTR [EBP], EDX + MOVZX EAX, BYTE PTR [EAX ] + RET +EndCode + +Code * ;( n1|u1 n2|u2 -- n3|u3 ) \ 94 +; Перемножить n1|u1 и n2|u2 и получить произведение n3|u3. + IMUL DWORD PTR [EBP] + LEA EBP, [EBP+4] + RET +EndCode + +Code AND ;( x1 x2 -- x3 ) \ 94 +; x3 - побитовое "И" x1 и x2. + AND EAX, [EBP] + LEA EBP, [EBP+4] + RET +EndCode + +Code OR ;( x1 x2 -- x3 ) \ 94 +; x3 - побитовое "ИЛИ" x1 и x2. + OR EAX, [EBP] + LEA EBP, [EBP+4] + RET +EndCode + +Code XOR ;( x1 x2 -- x3 ) \ 94 +; x3 - побитовое "исключающее ИЛИ" x1 и x2. + XOR EAX, [EBP] + LEA EBP, [EBP+4] + RET +EndCode + +Code INVERT ;( x1 -- x2 ) \ 94 +; Инвертировать все биты x1 и получить логическую инверсию x2. + NOT EAX + RET +EndCode + +Code NEGATE ;( n1 -- n2 ) \ 94 +; n2 - арифметическая инверсия n1. + NEG EAX + RET +EndCode + +Code ABS ;( n -- u ) \ 94 +; u - абсолютная величина n. + TEST EAX, EAX + JS { ' NEGATE } + RET +EndCode + +Code DNEGATE ;( d1 -- d2 ) \ 94 DOUBLE +; d2 результат вычитания d1 из нуля. + MOV EDX, [EBP] + NEG EAX + NEG EDX + SBB EAX, 0 + MOV DWORD PTR [EBP], EDX + RET +EndCode + +Code NOOP ;( -> ) + RET +EndCode + +Code S>D ;( n -- d ) \ 94 +; Преобразовать число n в двойное число d с тем же числовым значением. + LEA EBP, [EBP-4] + MOV [EBP], EAX + CDQ + MOV EAX, EDX + RET +EndCode + +Code D>S ;( d -- n ) \ 94 DOUBLE +; n - эквивалент d. +; Исключительная ситуация возникает, если d находится вне диапазона +; знаковых одинарных чисел. + MOV EAX, [EBP] + ADD EBP, 4 + RET +EndCode + +Code U>D ;( U -> D ) \ расширить число до двойной точности нулем + LEA EBP, [EBP-4] + MOV [EBP], EAX + XOR EAX, EAX + RET +EndCode + +Code C>S ;( c -- n ) \ расширить CHAR + MOVSX EAX, AL + RET +EndCode + +Code UM* ;( u1 u2 -- ud ) \ 94 +; ud - произведение u1 и u2. Все значения и арифметика беззнаковые. + MUL DWORD PTR [EBP] + MOV [EBP], EAX + MOV EAX, EDX + RET +EndCode + +Code / ;( n1 n2 -- n3 ) \ 94 +; Делить n1 на n2, получить частное n3. +; Исключительная ситуация возникает, если n2 равен нулю. +; Если n1 и n2 различаются по знаку - возвращаемый результат зависит от +; реализации. + MOV ECX, EAX + MOV EAX, [EBP] + CDQ + IDIV ECX + LEA EBP, [EBP+4] + RET +EndCode + +Code U/ ;( W1, W2 -> W3 ) \ беззнаковое деление W1 на W2 + MOV ECX, EAX + MOV EAX, [EBP] + XOR EDX, EDX + LEA EBP, [EBP+4] + DIV ECX + RET +EndCode + +Code +! ;( n|u a-addr -- ) \ 94 \ !!!!! +; Прибавить n|u к одинарному числу по адресу a-addr. + MOV EDX, [EBP] + ADD DWORD PTR [EAX ], EDX + MOV EAX, [EBP+4] + LEA EBP, [EBP+8] + RET +EndCode + +Code MOD ;( n1 n2 -- n3 ) \ 94 +; Делить n1 на n2, получить остаток n3. +; Исключительная ситуация возникает, если n2 равен нулю. +; Если n1 и n2 различаются по знаку - возвращаемый результат зависит от +; реализации. + MOV ECX, EAX + MOV EAX, [EBP] + LEA EBP, [EBP+4] + CDQ + IDIV ECX + MOV EAX, EDX + RET +EndCode + +Code /MOD ;( n1 n2 -- n3 n4 ) \ 94 +; Делить n1 на n2, дать остаток n3 и частное n4. +; Неоднозначная ситуация возникает, если n2 нуль. + MOV ECX, EAX + MOV EAX, [EBP] + CDQ + IDIV ECX + MOV [EBP], EDX + RET +EndCode + +Code UMOD ;( W1, W2 -> W3 ) \ остаток от деления W1 на W2 + MOV ECX, EAX + XOR EDX, EDX + MOV EAX, [EBP] + LEA EBP, [EBP+4] + DIV ECX + MOV EAX, EDX + RET +EndCode + +Code UM/MOD ;( ud u1 -- u2 u3 ) \ 94 +; Делить ud на u1, получить частное u3 и остаток u2. +; Все значения и арифметика беззнаковые. +; Исключительная ситуация возникает, если u1 ноль или частное +; находится вне диапазона одинарных беззнаковых чисел. + MOV ECX, EAX + MOV EDX, [EBP] + MOV EAX, [EBP+4] + DIV ECX + LEA EBP, [EBP+4] + MOV [EBP], EDX + + RET +EndCode + +Code 2/ ;( x1 -- x2 ) \ 94 +; x2 - результат сдвига x1 на один бит вправо без изменения старшего бита. + SAR EAX,1 + RET +EndCode + +Code */MOD ;( n1 n2 n3 -- n4 n5 ) \ 94 +; Умножить n1 на n2, получить промежуточный двойной результат d. +; Разделить d на n3, получить остаток n4 и частное n5. + MOV EBX, EAX + MOV EAX, [EBP] + MOV ECX, [EBP+4] + IMUL ECX + IDIV EBX + MOV [EBP+4], EDX + LEA EBP, [EBP+4] + RET +EndCode + +Code M* ;( n1 n2 -- d ) \ 94 +; d - знаковый результат умножения n1 на n2. + IMUL DWORD PTR [EBP] + MOV [EBP], EAX + MOV EAX, EDX + RET +EndCode + +Code LSHIFT ;( x1 u -- x2 ) ; 94 +; Сдвинуть x1 на u бит влево. Поместить нули в наименее значимые биты, +; освобождаемые при сдвиге. +; Неоднозначная ситуация возникает, если u больше или равно +; числу бит в ячейке. + MOV ECX, EAX + MOV EAX, [EBP] + SHL EAX, CL + LEA EBP, [EBP+4] + RET +EndCode + +Code RSHIFT ;( x1 u -- x2 ) \ 94 +; Сдвинуть x1 на u бит вправо. Поместить нули в наиболее значимые биты, +; освобождаемые при сдвиге. +; Неоднозначная ситуация возникает, если u больше или равно +; числу бит в ячейке. + MOV ECX, EAX + MOV EAX, [EBP] + SHR EAX, CL + LEA EBP, [EBP+4] + RET +EndCode + +Code SM/REM ;( d1 n1 -- n2 n3 ) \ 94 +; Разделить d1 на n1, получить симметричное частное n3 и остаток n2. +; Входные и выходные аргументы знаковые. +; Неоднозначная ситуация возникает, если n1 ноль, или частное вне +; диапазона одинарных знаковых чисел. + MOV EBX, EAX + MOV EDX, [EBP] + MOV EAX, [EBP+4] + IDIV EBX + LEA EBP, [EBP+4] + MOV [EBP], EDX + RET +EndCode + +Code FM/MOD ;( d1 n1 -- n2 n3 ) \ 94 +; ╨рчфхышЄ№ d1 эр n1, яюыєўшЄ№ ўрёЄэюх n3 ш юёЄрЄюъ n2. +; ┬їюфэ√х ш т√їюфэ√х рЁуєьхэЄ√ чэръют√х. +; ═хюфэючэрўэр  ёшЄєрЎш  тючэшърхЄ, хёыш n1 эюы№, шыш ўрёЄэюх тэх +; фшрярчюэр юфшэрЁэ√ї чэръют√ї ўшёхы. + MOV ECX, EAX + MOV EDX, [EBP] + MOV EBX, EDX + MOV EAX, [EBP+4] + IDIV ECX + TEST EDX, EDX ; ╬ёЄрЄюъ-Єю хёЄ№? + JZ SHORT @@1 + XOR EBX, ECX ; └ рЁуєьхэЄ√ Ёрчэюую чэрър? + JNS SHORT @@1 + DEC EAX + ADD EDX, ECX +@@1: LEA EBP, [EBP+4] + MOV [EBP], EDX + RET +EndCode + +\ ================================================================ +\ Сравнения + +Code = ;( x1 x2 -- flag ) \ 94 +; flag "истина" тогда и только тогда, когда x1 побитно равен x2. + XOR EAX, [EBP] + SUB EAX, 1 + SBB EAX, EAX + LEA EBP, [EBP+4] + RET +EndCode + +Code <> ;( x1 x2 -- flag ) \ 94 CORE EXT +; flag "истина" тогда и только тогда, когда x1 не равен x2. + XOR EAX, [EBP] + NEG EAX + SBB EAX, EAX + LEA EBP, [EBP+4] + RET +EndCode + +Code < ;( n1 n2 -- flag ) \ 94 +; flag "истина" тогда и только тогда, когда n1 меньше n2. + CMP [EBP], EAX + SETGE AL + AND EAX, 01 + DEC EAX + LEA EBP, [EBP+4] + RET +EndCode + +Code > ;( n1 n2 -- flag ) \ 94 +; flag "истина" тогда и только тогда, когда n1 больше n2. + CMP EAX, [EBP] + SETGE AL + AND EAX, 01 + DEC EAX + LEA EBP, [EBP+4] + RET +EndCode + +Code WITHIN ;( n1 low high -- f1 ) \ f1=true if ((n1 >= low) & (n1 < high)) + MOV EBX, [EBP+4] + SUB EAX, [EBP] + SUB EBX, [EBP] + SUB EBX, EAX + SBB EAX, EAX + ADD EBP, 8 + RET +EndCode + +Code D< ;( d1 d2 -- flag ) \ DOUBLE +; flag "истина" тогда и только тогда, когда d1 меньше d2. + MOV EBX, [EBP] + CMP DWORD PTR [EBP +8 ], EBX + SBB DWORD PTR [EBP +4 ], EAX + MOV EAX, 0 + SIF < + DEC EAX + STHEN + ADD EBP, 0CH + RET +EndCode + +Code D> ;( d1 d2 -- flag ) \ DOUBLE +; flag "истина" тогда и только тогда, когда d1 больше d2. + MOV EBX, [EBP] + CMP EBX, [EBP+8] + SBB EAX, [EBP+4] + SAR EAX, 1FH + ADD EBP, 0CH + RET +EndCode + +Code U< ;( u1 u2 -- flag ) \ 94 +; flag "истина" тогда и только тогда, когда u1 меньше u2. + CMP [EBP], EAX + SBB EAX, EAX + ADD EBP, 04 + RET +EndCode + +Code U> ;( u1 u2 -- flag ) \ 94 +; flag "истина" тогда и только тогда, когда u1 больше u2. + CMP EAX, [EBP] + SBB EAX, EAX + ADD EBP, 04 + RET +EndCode + +Code 0< ;( n -- flag ) \ 94 +; flag "истина" тогда и только тогда, когда n меньше нуля. + SAR EAX, 1F + RET +EndCode + +Code 0= ;( x -- flag ) \ 94 +; flag "истина" тогда и только тогда, когда x равно нулю. + SUB EAX, 1 + SBB EAX, EAX + RET +EndCode + +Code 0<> ;( x -- flag ) \ 94 CORE EXT +; flag "истина" тогда и только тогда, когда x не равно нулю. + NEG EAX + SBB EAX, EAX + RET +EndCode + +Code D0= ;( xd -- flag ) \ 94 DOUBLE +; flag "истина" тогда и только тогда, когда xd равен нулю. + OR EAX, [EBP] + SUB EAX, 1 + SBB EAX, EAX + LEA EBP, [EBP+4] + RET +EndCode + +Code D= ;( xd1 xd2 -- flag ) \ 94 DOUBLE +; flag is true if and only if xd1 is bit-for-bit the same as xd2 + MOV EDX,[EBP] + XOR EAX,[EBP+4] + XOR EDX,[EBP+8] + OR EAX,EDX + SUB EAX,1 + SBB EAX,EAX + LEA EBP,[EBP+0CH] + RET +EndCode + +Code D2* ;( xd1 -- xd2 ) \ 94 DOUBLE +; xd2 is the result of shifting xd1 one bit toward the most-significant +; bit, filling the vacated least-significant bit with zero + SHL DWORD PTR [EBP], 1 + RCL EAX, 1 + RET +EndCode + +Code D2/ ;( xd1 -- xd2 ) \ 94 DOUBLE +; xd2 is the result of shifting xd1 one bit toward the least-significant bit, +; leaving the most-significant bit unchanged + SAR EAX, 1 + RCR DWORD PTR [EBP], 1 + RET +EndCode + +\ ================================================================ +\ Строки + +Code -TRAILING ;( c-addr u1 -- c-addr u2 ) \ 94 STRING +; Если u1 больше нуля, u2 равно u1, уменьшенному на количество пробелов в конце +; символьной строки, заданной c-addr и u1. Если u1 ноль или вся строка состоит +; из пробелов, u2 ноль. + PUSH EDI + MOV ECX, EAX + SIF C0<> + MOV EDI, DWORD PTR [EBP] + ADD EDI, ECX + DEC EDI + MOV AL, 20H + STD + REPZ SCASB + SIF 0<> + INC ECX + STHEN + CLD + MOV EAX, ECX + STHEN + POP EDI + RET +EndCode + +Code COMPARE ;( c-addr1 u1 c-addr2 u2 -- n ) \ 94 STRING !!!!! +; Сравнить строку, заданную c-addr1 u1, со строкой, заданной c-addr2 u2. +; Строки сравниваются, начиная с заданных адресов, символ за символом, до длины +; наиболее короткой из строк или до нахождения различий. Если две строки +; идентичны, n ноль. Если две строки идентичны до длины наиболее короткой из +; строк, то n минус единица (-1), если u1 меньше u2, иначе единица (1). +; Если две строки не идентичны до длины наиболее короткой из строк, то n минус +; единица (-1), если первый несовпадающий символ строки, заданной c-addr1 u1 +; имеет меньшее числовое значение, чем соответствующий символ в строке, +; заданной c-addr2 u2, и единица в противном случае. + PUSH EDI + MOV ECX, EAX + SUB EAX, EAX + CMP ECX, [EBP +4 ] + SIF 0<> + SIF U< + INC EAX + SELSE + DEC EAX + MOV ECX, [EBP +4 ] + STHEN + STHEN + MOV ESI, [EBP + { 2 CELLS } ] + MOV EDI, [EBP] + REPE CMPSB + SIF 0<> + SIF U>= + MOV EAX, 1 + SELSE + MOV EAX, -1 + STHEN + STHEN + LEA EBP, [EBP + { 3 CELLS } ] + POP EDI + RET +EndCode + +Code SEARCH ;( c-addr1 u1 c-addr2 u2 -- c-addr3 u3 flag ) \ 94 STRING +; Произвести поиск в строке, заданной c-addr1 u1, строки, заданной c-addr2 u2. +; Если флаг "истина", совпадение найдено по адресу c-addr3 с оставшимися u3 +; символами. Если флаг "ложь", совпадения не найдено, и c-addr3 есть c-addr1, +; и u3 есть u1. \ !!!!! + LEA EBP, [EBP-4] + MOV [EBP], EAX + PUSH EDI + CLD + MOV EBX, DWORD PTR [EBP] + OR EBX, EBX + SIF 0<> + MOV EDX, DWORD PTR [EBP + { 2 CELLS } ] + MOV EDI, DWORD PTR [EBP + { 3 CELLS } ] + ADD EDX, EDI + SBEGIN + MOV ESI, DWORD PTR [EBP +4 ] + LODSB + MOV ECX, EDX + SUB ECX, EDI + JECXZ LLD + REPNZ + SCASB + JNE SHORT LLD ; во всей строке нет первого символа искомой строки + CMP EBX, 1 + JZ SHORT LLC ; искомая строка имела длину 1 и найдена + MOV ECX, EBX + DEC ECX + MOV EAX, EDX + SUB EAX, EDI + CMP EAX, ECX + JC SHORT LLD ; остаток строки короче искомой строки + PUSH EDI + REPZ CMPSB + POP EDI + SUNTIL 0= +LLC: DEC EDI ; нашли полное совпадение + SUB EDX, EDI + MOV DWORD PTR [EBP + { 3 CELLS } ], EDI + MOV DWORD PTR [EBP + { 2 CELLS } ], EDX + STHEN + MOV EAX, -1 + JMP SHORT LLA +LLD: XOR EAX, EAX +LLA: LEA EBP, [EBP+4] + MOV [EBP], EAX + POP EDI + MOV EAX, [EBP] + LEA EBP, [EBP+4] + RET +EndCode + +Code CMOVE ;( c-addr1 c-addr2 u -- ) \ 94 STRING +; Если u больше нуля, копировать u последовательных символов из пространства +; данных начиная с адреса c-addr1 в c-addr2, символ за символом, начиная с +; младших адресов к старшим. + MOV EDX, EDI + MOV ECX, EAX + MOV EDI, DWORD PTR [EBP] + MOV ESI, DWORD PTR [EBP +4 ] + CLD + REPZ MOVSB + LEA EBP, [EBP+0CH] + MOV EAX, [EBP-4] + MOV EDI, EDX + RET +EndCode + +: QCMOVE CMOVE ; + +Code CMOVE> ;( c-addr1 c-addr2 u -- ) \ 94 STRING +; Если u больше нуля, копировать u последовательных символов из пространства +; данных начиная с адреса c-addr1 в c-addr2, символ за символом, начиная со +; старших адресов к младшим. + + MOV EDX, EDI + MOV ECX, EAX + MOV EDI, [EBP] + MOV ESI, [EBP+4] + STD + ADD EDI, ECX + DEC EDI + ADD ESI, ECX + DEC ESI + REP MOVSB + MOV EDI, EDX + LEA EBP, [EBP+0CH] + MOV EAX, [EBP-4] + RET +EndCode + +Code FILL ;( c-addr u char -- ) \ 94 \ !!!!! +; Если u больше нуля, заслать char в u байтов по адресу c-addr. + MOV EDX, EDI + MOV ECX, [EBP] + MOV EDI, [EBP+4] + CLD + REP STOSB + MOV EDI, EDX + LEA EBP, [EBP+0CH] + MOV EAX, [EBP-4] + RET +EndCode + +Code ZCOUNT ;( c-addr -- c-addr u ) + LEA EBP, [EBP-4] + MOV [EBP], EAX + XOR EBX, EBX + SBEGIN + MOV BL, BYTE PTR [EAX ] + INC EAX + OR BL, BL + SUNTIL 0= + DEC EAX + SUB EAX, [EBP] + RET +EndCode + +\ ================================================================ +\ Указатели стеков + +Code SP! ;( A -> ) + LEA EBP, [EAX+4] + MOV EAX, [EBP-4] + RET +EndCode + +Code RP! ;( A -> ) + POP EBX + MOV ESP, EAX + MOV EAX, [EBP] + LEA EBP, [EBP+4] + JMP EBX +EndCode + +Code SP@ ;( -> A ) + LEA EBP, [EBP-4] + MOV [EBP], EAX + MOV EAX, EBP + RET +EndCode + +Code RP@ ;( -- RP ) + LEA EBP, [EBP-4] + MOV [EBP], EAX + LEA EAX, [ESP + 4 ] + RET +EndCode + + +\ ================================================================ +\ Регистр потока (задачи внутри форта) + +Code TlsIndex! ;( x -- ) \ указатель локального пула потока + MOV EDI, EAX + MOV EAX, [EBP] + LEA EBP, [EBP+4] + RET +EndCode + +Code TlsIndex@ ;( -- x ) + LEA EBP, [EBP-4] + MOV [EBP], EAX + MOV EAX, EDI + RET +EndCode + +\ ================================================================ +\ Циклы + +Code C-J + LEA EBP, [EBP-4] + MOV [EBP], EAX + MOV EAX, DWORD PTR [ESP + { 3 CELLS } ] + SUB EAX, DWORD PTR [ESP + { 4 CELLS } ] + RET +EndCode + +( inline'ы для компиляции циклов ) + +Code C-DO + LEA EBP, [EBP+8] + MOV EDX, 80000000H + SUB EDX, [EBP-8] + LEA EBX, [EAX+EDX] + MOV EAX, [EBP-4] + MOV EDX, EDX ; FOR OPT +; PUSH EDX +; PUSH EBX + RET +EndCode + +Code C-?DO + CMP EAX, [EBP-8] + SIF 0= + MOV EAX, [EBP-4] + JMP EBX + STHEN + PUSH EBX + MOV EBX , 80000000 + SUB EBX, [EBP-8] + PUSH EBX ; 80000000h-to + ADD EBX, EAX + PUSH EBX ; 80000000H-to+from + MOV EAX, [EBP-4] + RET +EndCode + +Code ADD[ESP],EAX + ADD [ESP] , EAX + RET +EndCode + +Code C-I + LEA EBP, [EBP-4] + MOV [EBP], EAX + MOV EAX, DWORD PTR [ESP] + SUB EAX, [ESP+4] + RET +EndCode + +Code C->R + PUSH EAX + MOV EAX, [EBP] + LEA EBP, [EBP+4] + RET +EndCode + +Code C-R> + LEA EBP, [EBP-4] + MOV [EBP], EAX + POP EAX + RET +EndCode + +Code C-RDROP + ADD ESP, 4 + RET +EndCode + +Code C-2RDROP + ADD ESP, 8 + RET +EndCode + +Code C-3RDROP + ADD ESP, 0CH + RET +EndCode + +TRUE [IF] +Code C-EXECUTE ;( i*x xt -- j*x ) \ 94 +; Убрать xt со стека и выполнить заданную им семантику. +; Другие изменения на стеке определяются словом, которое выполняется. + MOV EDX, EAX + MOV EAX, [EBP] + LEA EBP, [EBP+4] + CALL EDX + RET +EndCode +[THEN] + +Code EXECUTE ;( i*x xt -- j*x ) \ 94 +; Убрать xt со стека и выполнить заданную им семантику. +; Другие изменения на стеке определяются словом, которое выполняется. + MOV EBX, EAX + MOV EAX, [EBP] + LEA EBP, [EBP+4] + JMP EBX +EndCode + +Code @EXECUTE ;( i*x xt -- j*x ) + MOV EBX, EAX + MOV EAX, [EBP] + LEA EBP, [EBP+4] + JMP [EBX] +EndCode + +\ ================================================================ +\ Поддержка LOCALS + +Code DRMOVE ;( x1 ... xn n*4 -- ) +; перенести n чисел со стека данных на стек возвратов + POP EDX ; адрес возврата + MOV ESI, EAX +LL1: + PUSH DWORD PTR [EBP+ESI-4] + SUB ESI, 4 + JNZ SHORT LL1 + ADD EBP, EAX + MOV EAX, [EBP] + LEA EBP, [EBP+4] + JMP EDX +EndCode + +Code NR> ;( R: x1 ... xn n -- D: x1 ... xn n ) +; Перенести n чисел со стека возвратов на стек данных +; Если n=0 возвратить 0 + POP EDX ; адрес возврата + LEA EBP, [EBP-4] + MOV [EBP], EAX + POP EAX + OR EAX, EAX + JNZ @@2 + JMP EDX + +@@2: LEA EAX, [EAX*4] + MOV ESI, EAX +@@1: + MOV EBX, EBP + SUB EBX, ESI + POP DWORD PTR [EBX] + SUB ESI, 4 + JNZ SHORT @@1 + SUB EBP, EAX + SAR EAX, 2 + JMP EDX +EndCode + +Code N>R ;( D: x1 ... xn n -- R: x1 ... xn n ) +; перенести n чисел со стека данных на стек возвратов + LEA EBP, [EBP-4] + MOV [EBP], EAX + LEA EAX, [EAX*4+4] + + POP EDX ; адрес возврата + MOV ESI, EAX +@@1: + PUSH DWORD PTR [EBP+ESI-4] + SUB ESI, 4 + JNZ SHORT @@1 + ADD EBP, EAX + MOV EAX, [EBP] + LEA EBP, [EBP+4] + JMP EDX +EndCode + +Code NRCOPY ;( D: i*x i -- D: i*x i R: i*x i ) +; скопировать n чисел со стека данных на стек возвратов + MOV ECX, EAX + LEA ECX, [ECX*4] + + POP EDX ; адрес возврата + JECXZ @@2 + MOV ESI, ECX +@@1: + PUSH DWORD PTR [ESI+EBP-4] + SUB ESI, 4 + JNZ SHORT @@1 +@@2: + PUSH EAX + JMP EDX +EndCode + +Code RP+@ ;( offs -- x ) +; взять число со смещением offs байт от вершины стека возвратов (0 RP+@ == RP@) + MOV EAX, [EAX+ESP+4] + RET +EndCode + +Code RP+ ;( offs -- addr ) +; взять адрес со смещением offs байт от вершины стека возвратов + LEA EAX, [EAX+ESP+4] + RET +EndCode + +Code RP+! ;( x offs -- ) +; записать число x по смещению offs байт от вершины стека возвратов + MOV EBX, [EBP] + MOV [EAX+ESP+4], EBX + LEA EBP, [EBP+8] + MOV EAX, [EBP-4] + RET +EndCode + +Code RALLOT ;( n -- addr ) +; зарезервировать n ячеек на стеке возвратов, +; сделаем с инициализацией (а то если больше 8К выделим, exception может) + POP EDX + MOV ECX, EAX + XOR EAX, EAX +@@1: PUSH EAX + DEC ECX + JNZ SHORT @@1 + MOV EAX, ESP + JMP EDX +EndCode + +Code (RALLOT) ;( n -- ) +; зарезервировать n ячеек на стеке возвратов + POP EDX + MOV ECX, EAX + XOR EAX, EAX +@@1: PUSH EAX + DEC ECX + JNZ SHORT @@1 + MOV EAX, [EBP] + LEA EBP, [EBP+4] + JMP EDX +EndCode + +Code RFREE ;( n -- ) +; вернуть n ячеек стека возвратов + POP EDX + LEA ESP, [ESP+EAX*4] + MOV EAX, [EBP] + LEA EBP, [EBP+4] + JMP EDX +EndCode + +Code (LocalsExit) ;( -- ) +; вернуть память в стек вовратов, число байт лежит на стеке + POP EBX + ADD ESP, EBX + RET +EndCode + +Code TIMER@ ;( -- tlo thi ) \ Только для Intel Pentium и выше!!! +; Возвратить значение таймера процессора как ud + MOV [EBP-4], EAX + RDTSC + MOV [EBP-8], EDX + LEA EBP, [EBP-8] + XCHG EAX, [EBP] + RET +EndCode + +\ Для остальных процессоров раскомментируйте: +\ : TIMER@ 0 GetTickCount ; + +Code TRAP-CODE ;( D: j*x u R: i*x i -- i*x u ) +; Вспомогательное слово для восстановления значений, сохраненных +; перед CATCH на стеке возвратов + POP EDX + POP ESI + OR ESI, ESI + JZ @@2 + LEA ESI, [ESI*4] + MOV ECX, ESI +@@1: MOV EBX, [ESI+ESP-4] + MOV [ESI+EBP-4], EBX + SUB ESI, 4 + JNZ SHORT @@1 + ADD ESP, ECX +@@2: JMP EDX +EndCode + +DECIMAL diff --git a/programs/develop/SPForth/src/spf_forthproc.f_L b/programs/develop/SPForth/src/spf_forthproc.f_L new file mode 100644 index 0000000000..293c8bcdb6 --- /dev/null +++ b/programs/develop/SPForth/src/spf_forthproc.f_L @@ -0,0 +1,4076 @@ +ZZ=D0 ( Основные низкоуровневые слова "форт-процессора" + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + Преобразование из 16-разрядного в 32-разрядный код - 1995-96гг + Ревизия - сентябрь 1999 +) + +( Реализация для подпрограммного шитого кода. + ESP - указатель стека возвратов + EBP - указатель стека данных + EDI - сохраняемый регистр [указатель данных потока в SPF] +) + +HEX + +\ ================================================================ +\ Стековые манипуляции + +?HS + +Code DUP ;( x -- x x ) \ 94 + +59CB58 70 CB 59 00 00 03 44 55 50 E1 32 58 00 00 00 00 p╦Y...DUPс2X.... +59CB68 00 00 00 00 00 00 00 00 ........ + +; Продублировать x. + LEA EBP, [EBP-4] + +59CB70 8D 6D FC Нm№ + + mov [ebp],eax + +59CB73 89 45 00 ЙE. + + RET + +59CB76 C3 ├ + +EndCode + + +\ ' DUP TO 'DUP_V + +Code ?DUP ;( x -- 0 | x x ) \ 94 + +59CB77 90 CB 59 00 00 04 3F 44 55 50 5D CB 59 00 00 00 Р╦Y...?DUP]╦Y... +59CB87 00 00 00 00 00 00 00 00 00 ......... + +; Продублировать x, если не ноль. + OR EAX, EAX + +59CB90 0B C0 .└ + + JNZ { ' DUP } + +59CB92 75 DC u▄ + + RET + +59CB94 C3 ├ + +EndCode + +Code 2DUP ;( x1 x2 -- x1 x2 x1 x2 ) \ 94 + +59CB95 B0 CB 59 00 00 04 32 44 55 50 7C CB 59 00 00 00 ░╦Y...2DUP|╦Y... +59CBA5 00 00 00 00 00 00 00 00 00 00 00 ........... + +; Продублировать пару ячеек x1 x2. + MOV EDX, [EBP] + +59CBB0 8B 55 00 ЛU. + + MOV [EBP-4], EAX + +59CBB3 89 45 FC ЙE№ + + MOV [EBP-8], EDX + +59CBB6 89 55 F8 ЙU° + + LEA EBP, [EBP-8] + +59CBB9 8D 6D F8 Нm° + + RET + +59CBBC C3 ├ + +EndCode + +Code DROP ;( x -- ) \ 94 + +59CBBD D0 CB 59 00 00 04 44 52 4F 50 9A CB 59 00 00 00 ╨╦Y...DROPЪ╦Y... +59CBCD 00 00 00 ... + +; Убрать x со стека. + mov eax,[ebp] + +59CBD0 8B 45 00 ЛE. + + LEA EBP, [EBP+4] + +59CBD3 8D 6D 04 Нm. + + RET + +59CBD6 C3 ├ + +EndCode + +\ ' DROP TO 'DROP_V + +Code MAX ;( n1 n2 -- n3 ) \ 94 + +59CBD7 F0 CB 59 00 00 03 4D 41 58 C2 CB 59 00 00 00 00 Ё╦Y...MAX┬╦Y.... +59CBE7 00 00 00 00 00 00 00 00 00 ......... + +; n3 - большее из n1 и n2. + CMP EAX, [EBP] + +59CBF0 3B 45 00 ;E. + + JL { ' DROP } + +59CBF3 7C DB |█ + + LEA EBP, [EBP+4] + +59CBF5 8D 6D 04 Нm. + + RET + +59CBF8 C3 ├ + +EndCode + +Code MIN ;( n1 n2 -- n3 ) \ 94 + +59CBF9 10 CC 59 00 00 03 4D 49 4E DC CB 59 00 00 00 00 .╠Y...MIN▄╦Y.... +59CC09 00 00 00 00 00 00 00 ....... + + ; n3 - меньшее из n1 и n2. + CMP EAX, [EBP] + +59CC10 3B 45 00 ;E. + + JG { ' DROP } + +59CC13 7F BB ╗ + + LEA EBP, [EBP+4] + +59CC15 8D 6D 04 Нm. + + RET + +59CC18 C3 ├ + +EndCode + +Code UMAX ;( u1 u2 -- n3 ) \ RETurn the lesser of unsigned u1 and + +59CC19 30 CC 59 00 00 04 55 4D 41 58 FE CB 59 00 00 00 0╠Y...UMAX■╦Y... +59CC29 00 00 00 00 00 00 00 ....... + + ; unsigned u2 + CMP EAX, [EBP] + +59CC30 3B 45 00 ;E. + + JB { ' DROP } + +59CC33 72 9B rЫ + + LEA EBP, [EBP+4] + +59CC35 8D 6D 04 Нm. + + RET + +59CC38 C3 ├ + +EndCode + +Code UMIN ;( u1 u2 -- n3 ) \ RETurn the lesser of unsigned u1 and + +59CC39 50 CC 59 00 00 04 55 4D 49 4E 1E CC 59 00 00 00 P╠Y...UMIN.╠Y... +59CC49 00 00 00 00 00 00 00 ....... + + ; unsigned u2 + CMP EAX, [EBP] + +59CC50 3B 45 00 ;E. + + JA { ' DROP } + +59CC53 0F 87 77 FF FF FF .Зw    + + LEA EBP, [EBP+4] + +59CC59 8D 6D 04 Нm. + + RET + +59CC5C C3 ├ + +EndCode + +Code 2DROP ;( x1 x2 -- ) \ 94 + +59CC5D 70 CC 59 00 00 05 32 44 52 4F 50 3E CC 59 00 00 p╠Y...2DROP>╠Y.. +59CC6D 00 00 00 ... + +; Убрать со стека пару ячеек x1 x2. + MOV EAX , [EBP+4] + +59CC70 8B 45 04 ЛE. + + ADD EBP , 8 + +59CC73 83 C5 08 Г┼. + + RET + +59CC76 C3 ├ + +EndCode + +Code SWAP ;( x1 x2 -- x2 x1 ) \ 94 + +59CC77 90 CC 59 00 00 04 53 57 41 50 62 CC 59 00 00 00 Р╠Y...SWAPb╠Y... +59CC87 00 00 00 00 00 00 00 00 00 ......... + +; поменять местами два верхних элемента стека +; XCHG EAX { EBP } + MOV EDX, [EBP] + +59CC90 8B 55 00 ЛU. + + MOV [EBP], EAX + +59CC93 89 45 00 ЙE. + + MOV EAX, EDX + +59CC96 8B C2 Л┬ + + RET + +59CC98 C3 ├ + +EndCode + +Code 2SWAP ;( x1 x2 x3 x4 -- x3 x4 x1 x2 ) \ 94 + +59CC99 B0 CC 59 00 00 05 32 53 57 41 50 7C CC 59 00 00 ░╠Y...2SWAP|╠Y.. +59CCA9 00 00 00 00 00 00 00 ....... + +; Поменять местами две верхние пары ячеек. + MOV ECX, [EBP] + +59CCB0 8B 4D 00 ЛM. + + MOV EBX, [EBP+4] + +59CCB3 8B 5D 04 Л]. + + MOV EDX, [EBP+8] + +59CCB6 8B 55 08 ЛU. + + MOV [EBP+8], ECX + +59CCB9 89 4D 08 ЙM. + + MOV [EBP+4], EAX + +59CCBC 89 45 04 ЙE. + + MOV [EBP], EDX + +59CCBF 89 55 00 ЙU. + + MOV EAX, EBX + +59CCC2 8B C3 Л├ + + RET + +59CCC4 C3 ├ + +EndCode + +Code OVER ;( x1 x2 -- x1 x2 x1 ) \ 94 + +59CCC5 E0 CC 59 00 00 04 4F 56 45 52 9E CC 59 00 00 00 р╠Y...OVERЮ╠Y... +59CCD5 00 00 00 00 00 00 00 00 00 00 00 ........... + +; Положить копию x1 на вершину стека. + LEA EBP, [EBP-4] + +59CCE0 8D 6D FC Нm№ + + MOV [EBP], EAX + +59CCE3 89 45 00 ЙE. + + MOV EAX, [EBP+4] + +59CCE6 8B 45 04 ЛE. + + RET + +59CCE9 C3 ├ + +EndCode + +Code 2OVER ;( x1 x2 x3 x4 -- x1 x2 x3 x4 x1 x2 ) \ 94 + +59CCEA 00 CD 59 00 00 05 32 4F 56 45 52 CA CC 59 00 00 .═Y...2OVER╩╠Y.. +59CCFA 00 00 00 00 00 00 ...... + +; Копировать пару ячеек x1 x2 на вершину стека. + MOV EDX, [EBP+8] + +59CD00 8B 55 08 ЛU. + + MOV [EBP-4], EAX + +59CD03 89 45 FC ЙE№ + + MOV [EBP-8], EDX + +59CD06 89 55 F8 ЙU° + + MOV EAX, [EBP+4] + +59CD09 8B 45 04 ЛE. + + LEA EBP, [EBP-8] + +59CD0C 8D 6D F8 Нm° + + RET + +59CD0F C3 ├ + +EndCode + +Code NIP ;( x1 x2 -- x2 ) \ 94 CORE EXT + +59CD10 20 CD 59 00 00 03 4E 49 50 EF CC 59 00 00 00 00 ═Y...NIPя╠Y.... + +; Убрать первый элемент под вершиной стека. + ADD EBP, 4 + +59CD20 83 C5 04 Г┼. + + RET + +59CD23 C3 ├ + +EndCode + +Code ROT ;( x1 x2 x3 -- x2 x3 x1 ) \ 94 + +59CD24 40 CD 59 00 00 03 52 4F 54 15 CD 59 00 00 00 00 @═Y...ROT.═Y.... +59CD34 00 00 00 00 00 00 00 00 00 00 00 00 ............ + +; Прокрутить три верхних элемента стека. +; XCHG EAX [EBP] +; XCHG EAX 4 [EBP] + MOV EDX, [EBP] + +59CD40 8B 55 00 ЛU. + + MOV [EBP], EAX + +59CD43 89 45 00 ЙE. + + MOV EAX, [EBP+4] + +59CD46 8B 45 04 ЛE. + + MOV [EBP+4], EDX + +59CD49 89 55 04 ЙU. + + RET + +59CD4C C3 ├ + +EndCode + + +Code -ROT ;( x1 x2 x3 -- x3 x1 x2 ) ; !!!!! + +59CD4D 60 CD 59 00 00 04 2D 52 4F 54 29 CD 59 00 00 00 `═Y...-ROT)═Y... +59CD5D 00 00 00 ... + +; Обратное ROT + MOV EDX, [EBP+4] + +59CD60 8B 55 04 ЛU. + + MOV [EBP+4], EAX + +59CD63 89 45 04 ЙE. + + MOV EAX, [EBP] + +59CD66 8B 45 00 ЛE. + + MOV [EBP], EDX + +59CD69 89 55 00 ЙU. + + RET + +59CD6C C3 ├ + +EndCode + +Code PICK ;( ... +n -- ... w ) \ Copy the nth stack item to tos. + +59CD6D 80 CD 59 00 00 04 50 49 43 4B 52 CD 59 00 00 00 А═Y...PICKR═Y... +59CD7D 00 00 00 ... + + MOV EAX, [EBP + EAX*4 ] + +59CD80 8B 44 85 00 ЛDЕ. + + RET + +59CD84 C3 ├ + +EndCode + +Code ROLL ;( xu xu-1 ... x0 u -- xu-1 ... x0 xu ) \ 94 CORE EXT + +59CD85 A0 CD 59 00 00 04 52 4F 4C 4C 72 CD 59 00 00 00 а═Y...ROLLr═Y... +59CD95 00 00 00 00 00 00 00 00 00 00 00 ........... + +; Убрать u. Повернуть u+1 элемент на вершине стека. +; Неопределенная ситуация возникает, если перед выполнением ROLL +; на стеке меньше чем u+2 элементов. + OR EAX, EAX + +59CDA0 0B C0 .└ + + JZ SHORT LL1 + +59CDA2 74 1E t. + + MOV ECX, EAX + +59CDA4 8B C8 Л╚ + + LEA EAX, [EAX*4] + +59CDA6 8D 04 85 00 00 00 00 Н.Е.... + + MOV EDX, EBP + +59CDAD 8B D5 Л╒ + + ADD EDX, EAX + +59CDAF 03 D0 .╨ + + MOV EBX, [EDX] + +59CDB1 8B 1A Л. + +LL2: LEA EDX, [EDX-4] + +59CDB3 8D 52 FC НR№ + + MOV EAX, [EDX] + +59CDB6 8B 02 Л. + + MOV [EDX+4], EAX + +59CDB8 89 42 04 ЙB. + + DEC ECX + +59CDBB 49 I + + JNZ SHORT LL2 + +59CDBC 75 F5 uї + + MOV EAX, EBX + +59CDBE 8B C3 Л├ + + JMP SHORT LL3 + +59CDC0 EB 03 ы. + +LL1: MOV EAX, [EBP] + +59CDC2 8B 45 00 ЛE. + +LL3: LEA EBP, [EBP+4] + +59CDC5 8D 6D 04 Нm. + + RET + +59CDC8 C3 ├ + +EndCode + +Code TUCK ;( x1 x2 -- x2 x1 x2 ) \ 94 + +59CDC9 E0 CD 59 00 00 04 54 55 43 4B 8A CD 59 00 00 00 р═Y...TUCKК═Y... +59CDD9 00 00 00 00 00 00 00 ....... + + LEA EBP, [EBP-4] + +59CDE0 8D 6D FC Нm№ + + MOV EDX, [EBP+4] + +59CDE3 8B 55 04 ЛU. + + MOV [EBP], EDX + +59CDE6 89 55 00 ЙU. + + MOV [EBP+4], EAX + +59CDE9 89 45 04 ЙE. + + RET + +59CDEC C3 ├ + +EndCode + +\ ================================================================ +\ Стек возвратов + +Code 2>R ; 94 CORE EXT + +59CDED 00 CE 59 00 00 03 32 3E 52 CE CD 59 00 00 00 00 .╬Y...2>R╬═Y.... +59CDFD 00 00 00 ... + +; Интерпретация: семантика неопределена. +; Выполнение: ;( x1 x2 -- ) ;( R: -- x1 x2 ) +; Перенести пару ячеек x1 x2 на стек возвратов. Семантически +; эквивалентно SWAP >R >R. + POP EBX + +59CE00 5B [ + + PUSH DWORD PTR [EBP] + +59CE01 FF 75 00  u. + + PUSH EAX + +59CE04 50 P + + LEA EBP, [EBP+8] + +59CE05 8D 6D 08 Нm. + + MOV EAX, [EBP-4] + +59CE08 8B 45 FC ЛE№ + + JMP EBX + +59CE0B FF E3  у + +EndCode + +Code 2R> ; 94 CORE EXT + +59CE0D 20 CE 59 00 00 03 32 52 3E F2 CD 59 00 00 00 00 ╬Y...2R>Є═Y.... +59CE1D 00 00 00 ... + +; Интерпретация: семантика неопределена. +; Выполнение: ;( -- x1 x2 ) ;( R: x1 x2 -- ) +; Перенести пару ячеек x1 x2 со стека возвратов. Семантически +; эквивалентно R> R> SWAP. \ !!!! + LEA EBP, [EBP-8] + +59CE20 8D 6D F8 Нm° + + POP EBX + +59CE23 5B [ + + MOV [EBP+4], EAX + +59CE24 89 45 04 ЙE. + + POP EAX + +59CE27 58 X + + POP DWORD PTR [EBP] + +59CE28 8F 45 00 ПE. + + PUSH EBX + +59CE2B 53 S + + RET + +59CE2C C3 ├ + +EndCode + +Code R@ ; 94 + +59CE2D 40 CE 59 00 00 02 52 40 12 CE 59 00 00 00 00 00 @╬Y...R@.╬Y..... +59CE3D 00 00 00 ... + +; Исполнение: ;( -- x ) ;( R: x -- x ) +; Интерпретация: семантика в режиме интерпретации неопределена. + LEA EBP, [EBP-4] + +59CE40 8D 6D FC Нm№ + + MOV [EBP], EAX + +59CE43 89 45 00 ЙE. + + MOV EAX, [ESP + 4 ] + +59CE46 8B 44 24 04 ЛD$. + + RET + +59CE4A C3 ├ + +EndCode + +Code 2R@ ; 94 CORE EXT + +59CE4B 60 CE 59 00 00 03 32 52 40 32 CE 59 00 00 00 00 `╬Y...2R@2╬Y.... +59CE5B 00 00 00 00 00 ..... + +; Интерпретация: семантика неопределена. +; Выполнение: ;( -- x1 x2 ) ;( R: x1 x2 -- x1 x2 ) +; Копировать пару ячеек x1 x2 со стека возвратов. Семантически +; эквивалентно R> R> 2DUP >R >R SWAP. + LEA EBP, [EBP-8] + +59CE60 8D 6D F8 Нm° + + MOV [EBP+4], EAX + +59CE63 89 45 04 ЙE. + + MOV EAX, [ESP + { 2 CELLS } ] + +59CE66 8B 44 24 08 ЛD$. + + MOV DWORD PTR [EBP], EAX + +59CE6A 89 45 00 ЙE. + + MOV EAX, [ESP + 4 ] + +59CE6D 8B 44 24 04 ЛD$. + + RET + +59CE71 C3 ├ + +EndCode + +\ ================================================================ +\ Операции с памятью + +Code @ ;( a-addr -- x ) \ 94 + +59CE72 80 CE 59 00 00 01 40 50 CE 59 00 00 00 00 А╬Y...@P╬Y.... + +; x - значение по адресу a-addr. + MOV EAX, [EAX ] + +59CE80 8B 00 Л. + + RET + +59CE82 C3 ├ + +EndCode + +Code ! ;( x a-addr -- ) \ 94 + +59CE83 90 CE 59 00 00 01 21 77 CE 59 00 00 00 Р╬Y...!w╬Y... + +; Записать x по адресу a-addr. + MOV EDX, [EBP] + +59CE90 8B 55 00 ЛU. + + MOV DWORD PTR [EAX ], EDX + +59CE93 89 10 Й. + + MOV EAX , [EBP+4] + +59CE95 8B 45 04 ЛE. + + ADD EBP , 8 + +59CE98 83 C5 08 Г┼. + + RET + +59CE9B C3 ├ + +EndCode + +Code C@ ;( c-addr -- char ) \ 94 + +59CE9C B0 CE 59 00 00 02 43 40 88 CE 59 00 00 00 00 00 ░╬Y...C@И╬Y..... +59CEAC 00 00 00 00 .... + +; Получить символ по адресу c-addr. Незначащие старшие биты ячейки нулевые. + MOVZX EAX, BYTE PTR [EAX ] + +59CEB0 0F B6 00 .╢. + + RET + +59CEB3 C3 ├ + +EndCode + +Code C! ;( char c-addr -- ) \ 94 + +59CEB4 C0 CE 59 00 00 02 43 21 A1 CE 59 00 └╬Y...C!б╬Y. + +; Записать char по адресу a-addr. + MOV EDX, [EBP] + +59CEC0 8B 55 00 ЛU. + + MOV BYTE PTR [EAX ], DL + +59CEC3 88 10 И. + + MOV EAX , [EBP+4] + +59CEC5 8B 45 04 ЛE. + + ADD EBP , 8 + +59CEC8 83 C5 08 Г┼. + + RET + +59CECB C3 ├ + +EndCode + +Code W@ ;( c-addr -- word ) + +59CECC E0 CE 59 00 00 02 57 40 B9 CE 59 00 00 00 00 00 р╬Y...W@╣╬Y..... +59CEDC 00 00 00 00 .... + +; Получить word по адресу c-addr. Незначащие старшие биты ячейки нулевые. + MOVZX EAX, WORD PTR [EAX ] + +59CEE0 0F B7 00 .╖. + + RET + +59CEE3 C3 ├ + +EndCode + +Code W! ;( word c-addr -- ) + +59CEE4 F0 CE 59 00 00 02 57 21 D1 CE 59 00 Ё╬Y...W!╤╬Y. + +; Записать word по адресу a-addr. + MOV EDX, [EBP] + +59CEF0 8B 55 00 ЛU. + + MOV WORD PTR [EAX ], DX + +59CEF3 66 89 10 fЙ. + + MOV EAX , [EBP+4] + +59CEF6 8B 45 04 ЛE. + + ADD EBP , 8 + +59CEF9 83 C5 08 Г┼. + + RET + +59CEFC C3 ├ + +EndCode + +Code 2@ ;( a-addr -- x1 x2 ) \ 94 + +59CEFD 10 CF 59 00 00 02 32 40 E9 CE 59 00 00 00 00 00 .╧Y...2@щ╬Y..... +59CF0D 00 00 00 ... + +; Получить пару ячеек x1 x2, записанную по адресу a-addr. +; x2 по адресу a-addr, x1 в следующей ячейке. +; Равносильно DUP CELL+ @ SWAP @ + MOV EDX, [EAX + 4 ] + +59CF10 8B 50 04 ЛP. + + LEA EBP, [EBP-4] + +59CF13 8D 6D FC Нm№ + + MOV DWORD PTR [EBP], EDX + +59CF16 89 55 00 ЙU. + + MOV EAX, DWORD PTR [EAX ] + +59CF19 8B 00 Л. + + RET + +59CF1B C3 ├ + +EndCode + +Code 2! ;( x1 x2 a-addr -- ) \ 94 + +59CF1C 30 CF 59 00 00 02 32 21 02 CF 59 00 00 00 00 00 0╧Y...2!.╧Y..... +59CF2C 00 00 00 00 .... + +; Записать пару ячеек x1 x2 по адресу a-addr, +; x2 по адресу a-addr, x1 в следующую ячейку. +; Равносильно SWAP OVER ! CELL+ ! + MOV EDX, [EBP] + +59CF30 8B 55 00 ЛU. + + MOV [EAX], EDX + +59CF33 89 10 Й. + + MOV EDX, [EBP+4] + +59CF35 8B 55 04 ЛU. + + MOV [EAX+4], EDX + +59CF38 89 50 04 ЙP. + + LEA EBP, [EBP+0CH] + +59CF3B 8D 6D 0C Нm. + + MOV EAX, [EBP-4] + +59CF3E 8B 45 FC ЛE№ + + RET + +59CF41 C3 ├ + +EndCode + +Code D@ ;( a-addr -- x1 x2 ) + +59CF42 50 CF 59 00 00 02 44 40 21 CF 59 00 00 00 P╧Y...D@!╧Y... + +; 2@ SWAP + MOV EDX, [EAX] + +59CF50 8B 10 Л. + + LEA EBP, [EBP-4] + +59CF52 8D 6D FC Нm№ + + MOV DWORD PTR [EBP], EDX + +59CF55 89 55 00 ЙU. + + MOV EAX, DWORD PTR [EAX+4] + +59CF58 8B 40 04 Л@. + + RET + +59CF5B C3 ├ + +EndCode + +Code D! ;( x1 x2 a-addr -- ) + +59CF5C 70 CF 59 00 00 02 44 21 47 CF 59 00 00 00 00 00 p╧Y...D!G╧Y..... +59CF6C 00 00 00 00 .... + +; >R SWAP R> 2! + MOV EDX, [EBP] + +59CF70 8B 55 00 ЛU. + + MOV [EAX+4], EDX + +59CF73 89 50 04 ЙP. + + MOV EDX, [EBP+4] + +59CF76 8B 55 04 ЛU. + + MOV [EAX], EDX + +59CF79 89 10 Й. + + LEA EBP, [EBP+0CH] + +59CF7B 8D 6D 0C Нm. + + MOV EAX, [EBP-4] + +59CF7E 8B 45 FC ЛE№ + + RET + +59CF81 C3 ├ + +EndCode + + +Code EBX@ ;( -- EBX ) + +59CF82 90 CF 59 00 00 04 45 42 58 40 61 CF 59 00 Р╧Y...EBX@a╧Y. + + LEA EBP, [EBP-4] + +59CF90 8D 6D FC Нm№ + + mov [ebp],eax + +59CF93 89 45 00 ЙE. + + MOV EAX,EBX + +59CF96 8B C3 Л├ + + RET + +59CF98 C3 ├ + +EndCode + +\ ================================================================ +\ Вычисления + +Code 1+ ;( n1|u1 -- n2|u2 ) \ 94 + +59CF99 B0 CF 59 00 00 02 31 2B 87 CF 59 00 00 00 00 00 ░╧Y...1+З╧Y..... +59CFA9 00 00 00 00 00 00 00 ....... + +; Прибавить 1 к n1|u1 и получить сумму u2|n2. + LEA EAX, [EAX+1] + +59CFB0 8D 40 01 Н@. + + RET + +59CFB3 C3 ├ + +EndCode + +Code 1- ;( n1|u1 -- n2|u2 ) \ 94 + +59CFB4 C0 CF 59 00 00 02 31 2D 9E CF 59 00 └╧Y...1-Ю╧Y. + +; Вычесть 1 из n1|u1 и получить разность n2|u2. + LEA EAX, [EAX-1] + +59CFC0 8D 40 FF Н@  + + RET + +59CFC3 C3 ├ + +EndCode + +Code 2+ ;( W -> W+2 ) + +59CFC4 D0 CF 59 00 00 02 32 2B B9 CF 59 00 ╨╧Y...2+╣╧Y. + + LEA EAX, [EAX+2] + +59CFD0 8D 40 02 Н@. + + RET + +59CFD3 C3 ├ + +EndCode + +Code 2- ;( W -> W-2 ) + +59CFD4 E0 CF 59 00 00 02 32 2D C9 CF 59 00 р╧Y...2-╔╧Y. + + LEA EAX, [EAX-2] + +59CFE0 8D 40 FE Н@■ + + RET + +59CFE3 C3 ├ + +EndCode + +Code 2* ;( x1 -- x2 ) \ 94 + +59CFE4 F0 CF 59 00 00 02 32 2A D9 CF 59 00 Ё╧Y...2*┘╧Y. + +; x2 - результат сдвига x1 на один бит влево, с заполнением +; наименее значимого бита нулем. +; SHL EAX +; LEA EAX, [EAX+EAX] + LEA EAX, [EAX*2] + +59CFF0 8D 04 45 00 00 00 00 Н.E.... + + RET + +59CFF7 C3 ├ + +EndCode + +Code CELL+ ;( a-addr1 -- a-addr2 ) \ 94 + +59CFF8 10 D0 59 00 00 05 43 45 4C 4C 2B E9 CF 59 00 00 .╨Y...CELL+щ╧Y.. +59D008 00 00 00 00 00 00 00 00 ........ + +; Вычесть размер ячейки к a-addr1 и получить a-addr2. + LEA EAX, [EAX+4] + +59D010 8D 40 04 Н@. + + RET + +59D013 C3 ├ + +EndCode + +Code CELL- ;( a-addr1 -- a-addr2 ) \ 94 + +59D014 30 D0 59 00 00 05 43 45 4C 4C 2D FD CF 59 00 00 0╨Y...CELL-¤╧Y.. +59D024 00 00 00 00 00 00 00 00 00 00 00 00 ............ + +; Вычесть размер ячейки к a-addr1 и получить a-addr2. + LEA EAX, [EAX-4] + +59D030 8D 40 FC Н@№ + + RET + +59D033 C3 ├ + +EndCode + +Code CELLS ;( n1 -- n2 ) \ 94 + +59D034 50 D0 59 00 00 05 43 45 4C 4C 53 19 D0 59 00 00 P╨Y...CELLS.╨Y.. +59D044 00 00 00 00 00 00 00 00 00 00 00 00 ............ + +; n2 - размер n1 ячеек. + LEA EAX, DWORD PTR [EAX *4 ] + +59D050 8D 04 85 00 00 00 00 Н.Е.... + + RET + +59D057 C3 ├ + +EndCode + + +Code + ;( n1|u1 n2|u2 -- n3|u3 ) \ 94 + +59D058 70 D0 59 00 00 01 2B 39 D0 59 00 00 00 00 00 00 p╨Y...+9╨Y...... +59D068 00 00 00 00 00 00 00 00 ........ + +; Сложить n1|u1 и n2|u2 и получить сумму n3|u3. + ADD EAX, DWORD PTR [EBP] + +59D070 03 45 00 .E. + + LEA EBP, [EBP+4] + +59D073 8D 6D 04 Нm. + + RET + +59D076 C3 ├ + +EndCode + +Code D+ ;( d1|ud1 d2|ud2 -- d3|ud3 ) \ 94 DOUBLE + +59D077 90 D0 59 00 00 02 44 2B 5D D0 59 00 00 00 00 00 Р╨Y...D+]╨Y..... +59D087 00 00 00 00 00 00 00 00 00 ......... + +; Сложить d1|ud1 и d2|ud2 и дать сумму d3|ud3. + MOV EDX, DWORD PTR [EBP] + +59D090 8B 55 00 ЛU. + + ADD DWORD PTR [EBP + { 2 CELLS } ], EDX + +59D093 01 55 08 .U. + + ADC EAX, DWORD PTR [EBP +4 ] + +59D096 13 45 04 .E. + + LEA EBP, [EBP+8] + +59D099 8D 6D 08 Нm. + + RET + +59D09C C3 ├ + +EndCode + +Code D- ;( d1 d2 -- d3 ) \ 94 DOUBLE + +59D09D B0 D0 59 00 00 02 44 2D 7C D0 59 00 00 00 00 00 ░╨Y...D-|╨Y..... +59D0AD 00 00 00 ... + +; perform a double subtract (64bit) + MOV EDX, DWORD PTR [EBP] + +59D0B0 8B 55 00 ЛU. + + SUB DWORD PTR [EBP + { 2 CELLS } ], EDX + +59D0B3 29 55 08 )U. + + SBB [EBP+4], EAX + +59D0B6 19 45 04 .E. + + MOV EAX, DWORD PTR [EBP +4 ] + +59D0B9 8B 45 04 ЛE. + + LEA EBP, [EBP+8] + +59D0BC 8D 6D 08 Нm. + + RET + +59D0BF C3 ├ + +EndCode + +Code - ;( n1|u1 n2|u2 -- n3|u3 ) \ 94 + +59D0C0 D0 D0 59 00 00 01 2D A2 D0 59 00 00 00 00 00 00 ╨╨Y...-в╨Y...... + +; Вычесть n2|u2 из n1|u1 и получить разность n3|u3. + NEG EAX + +59D0D0 F7 D8 ў╪ + + ADD EAX, [EBP] + +59D0D2 03 45 00 .E. + + LEA EBP, [EBP+4] + +59D0D5 8D 6D 04 Нm. + + RET + +59D0D8 C3 ├ + +EndCode + +Code 1+! ;( A -> ) + +59D0D9 F0 D0 59 00 00 03 31 2B 21 C5 D0 59 00 00 00 00 Ё╨Y...1+!┼╨Y.... +59D0E9 00 00 00 00 00 00 00 ....... + + INC DWORD PTR [EAX ] + +59D0F0 FF 00  . + + MOV EAX, [EBP] + +59D0F2 8B 45 00 ЛE. + + LEA EBP, [EBP+4] + +59D0F5 8D 6D 04 Нm. + + RET + +59D0F8 C3 ├ + +EndCode + +Code 0! ;( A -> ) + +59D0F9 10 D1 59 00 00 02 30 21 DE D0 59 00 00 00 00 00 .╤Y...0!▐╨Y..... +59D109 00 00 00 00 00 00 00 ....... + + MOV DWORD PTR [EAX ], 0 + +59D110 C7 00 00 00 00 00 ╟..... + + MOV EAX, [EBP] + +59D116 8B 45 00 ЛE. + + LEA EBP, [EBP+4] + +59D119 8D 6D 04 Нm. + + RET + +59D11C C3 ├ + +EndCode + +Code COUNT ;( c-addr1 -- c-addr2 u ) \ 94 + +59D11D 30 D1 59 00 00 05 43 4F 55 4E 54 FE D0 59 00 00 0╤Y...COUNT■╨Y.. +59D12D 00 00 00 ... + +; Получить строку символов из строки со счетчиком c-addr1. +; c-addr2 - адрес первого символа за c-addr1. +; u - содержимое байта c-addr1, являющееся длиной строки символов, +; начинающейся с адреса c-addr2. + LEA EBP, [EBP-4] + +59D130 8D 6D FC Нm№ + + LEA EDX, DWORD PTR [EAX +1 ] + +59D133 8D 50 01 НP. + + MOV DWORD PTR [EBP], EDX + +59D136 89 55 00 ЙU. + + MOVZX EAX, BYTE PTR [EAX ] + +59D139 0F B6 00 .╢. + + RET + +59D13C C3 ├ + +EndCode + +Code * ;( n1|u1 n2|u2 -- n3|u3 ) \ 94 + +59D13D 50 D1 59 00 00 01 2A 22 D1 59 00 00 00 00 00 00 P╤Y...*"╤Y...... +59D14D 00 00 00 ... + +; Перемножить n1|u1 и n2|u2 и получить произведение n3|u3. + IMUL DWORD PTR [EBP] + +59D150 F7 6D 00 ўm. + + LEA EBP, [EBP+4] + +59D153 8D 6D 04 Нm. + + RET + +59D156 C3 ├ + +EndCode + +Code AND ;( x1 x2 -- x3 ) \ 94 + +59D157 70 D1 59 00 00 03 41 4E 44 42 D1 59 00 00 00 00 p╤Y...ANDB╤Y.... +59D167 00 00 00 00 00 00 00 00 00 ......... + +; x3 - побитовое "И" x1 и x2. + AND EAX, [EBP] + +59D170 23 45 00 #E. + + LEA EBP, [EBP+4] + +59D173 8D 6D 04 Нm. + + RET + +59D176 C3 ├ + +EndCode + +Code OR ;( x1 x2 -- x3 ) \ 94 + +59D177 90 D1 59 00 00 02 4F 52 5C D1 59 00 00 00 00 00 Р╤Y...OR\╤Y..... +59D187 00 00 00 00 00 00 00 00 00 ......... + +; x3 - побитовое "ИЛИ" x1 и x2. + OR EAX, [EBP] + +59D190 0B 45 00 .E. + + LEA EBP, [EBP+4] + +59D193 8D 6D 04 Нm. + + RET + +59D196 C3 ├ + +EndCode + +Code XOR ;( x1 x2 -- x3 ) \ 94 + +59D197 B0 D1 59 00 00 03 58 4F 52 7C D1 59 00 00 00 00 ░╤Y...XOR|╤Y.... +59D1A7 00 00 00 00 00 00 00 00 00 ......... + +; x3 - побитовое "исключающее ИЛИ" x1 и x2. + XOR EAX, [EBP] + +59D1B0 33 45 00 3E. + + LEA EBP, [EBP+4] + +59D1B3 8D 6D 04 Нm. + + RET + +59D1B6 C3 ├ + +EndCode + +Code INVERT ;( x1 -- x2 ) \ 94 + +59D1B7 D0 D1 59 00 00 06 49 4E 56 45 52 54 9C D1 59 00 ╨╤Y...INVERTЬ╤Y. +59D1C7 00 00 00 00 00 00 00 00 00 ......... + +; Инвертировать все биты x1 и получить логическую инверсию x2. + NOT EAX + +59D1D0 F7 D0 ў╨ + + RET + +59D1D2 C3 ├ + +EndCode + +Code NEGATE ;( n1 -- n2 ) \ 94 + +59D1D3 F0 D1 59 00 00 06 4E 45 47 41 54 45 BC D1 59 00 Ё╤Y...NEGATE╝╤Y. +59D1E3 00 00 00 00 00 00 00 00 00 00 00 00 00 ............. + +; n2 - арифметическая инверсия n1. + NEG EAX + +59D1F0 F7 D8 ў╪ + + RET + +59D1F2 C3 ├ + +EndCode + +Code ABS ;( n -- u ) \ 94 + +59D1F3 00 D2 59 00 00 03 41 42 53 D8 D1 59 00 .╥Y...ABS╪╤Y. + +; u - абсолютная величина n. + TEST EAX, EAX + +59D200 85 C0 Е└ + + JS { ' NEGATE } + +59D202 78 EC xь + + RET + +59D204 C3 ├ + +EndCode + +Code DNEGATE ;( d1 -- d2 ) \ 94 DOUBLE + +59D205 20 D2 59 00 00 07 44 4E 45 47 41 54 45 F8 D1 59 ╥Y...DNEGATE°╤Y +59D215 00 00 00 00 00 00 00 00 00 00 00 ........... + +; d2 результат вычитания d1 из нуля. + MOV EDX, [EBP] + +59D220 8B 55 00 ЛU. + + NEG EAX + +59D223 F7 D8 ў╪ + + NEG EDX + +59D225 F7 DA ў┌ + + SBB EAX, 0 + +59D227 83 D8 00 Г╪. + + MOV DWORD PTR [EBP], EDX + +59D22A 89 55 00 ЙU. + + RET + +59D22D C3 ├ + +EndCode + +Code NOOP ;( -> ) + +59D22E 40 D2 59 00 00 04 4E 4F 4F 50 0A D2 59 00 00 00 @╥Y...NOOP.╥Y... +59D23E 00 00 .. + + RET + +59D240 C3 ├ + +EndCode + +Code S>D ;( n -- d ) \ 94 + +59D241 50 D2 59 00 00 03 53 3E 44 33 D2 59 00 00 00 P╥Y...S>D3╥Y... + +; Преобразовать число n в двойное число d с тем же числовым значением. + LEA EBP, [EBP-4] + +59D250 8D 6D FC Нm№ + + MOV [EBP], EAX + +59D253 89 45 00 ЙE. + + CDQ + +59D256 99 Щ + + MOV EAX, EDX + +59D257 8B C2 Л┬ + + RET + +59D259 C3 ├ + +EndCode + +Code D>S ;( d -- n ) \ 94 DOUBLE + +59D25A 70 D2 59 00 00 03 44 3E 53 46 D2 59 00 00 00 00 p╥Y...D>SF╥Y.... +59D26A 00 00 00 00 00 00 ...... + +; n - эквивалент d. +; Исключительная ситуация возникает, если d находится вне диапазона +; знаковых одинарных чисел. + MOV EAX, [EBP] + +59D270 8B 45 00 ЛE. + + ADD EBP, 4 + +59D273 83 C5 04 Г┼. + + RET + +59D276 C3 ├ + +EndCode + +Code U>D ;( U -> D ) \ расширить число до двойной точности нулем + +59D277 90 D2 59 00 00 03 55 3E 44 5F D2 59 00 00 00 00 Р╥Y...U>D_╥Y.... +59D287 00 00 00 00 00 00 00 00 00 ......... + + LEA EBP, [EBP-4] + +59D290 8D 6D FC Нm№ + + MOV [EBP], EAX + +59D293 89 45 00 ЙE. + + XOR EAX, EAX + +59D296 33 C0 3└ + + RET + +59D298 C3 ├ + +EndCode + +Code C>S ;( c -- n ) \ расширить CHAR + +59D299 B0 D2 59 00 00 03 43 3E 53 7C D2 59 00 00 00 00 ░╥Y...C>S|╥Y.... +59D2A9 00 00 00 00 00 00 00 ....... + + MOVSX EAX, AL + +59D2B0 0F BE C0 .╛└ + + RET + +59D2B3 C3 ├ + +EndCode + +Code UM* ;( u1 u2 -- ud ) \ 94 + +59D2B4 D0 D2 59 00 00 03 55 4D 2A 9E D2 59 00 00 00 00 ╨╥Y...UM*Ю╥Y.... +59D2C4 00 00 00 00 00 00 00 00 00 00 00 00 ............ + +; ud - произведение u1 и u2. Все значения и арифметика беззнаковые. + MUL DWORD PTR [EBP] + +59D2D0 F7 65 00 ўe. + + MOV [EBP], EAX + +59D2D3 89 45 00 ЙE. + + MOV EAX, EDX + +59D2D6 8B C2 Л┬ + + RET + +59D2D8 C3 ├ + +EndCode + +Code / ;( n1 n2 -- n3 ) \ 94 + +59D2D9 F0 D2 59 00 00 01 2F B9 D2 59 00 00 00 00 00 00 Ё╥Y.../╣╥Y...... +59D2E9 00 00 00 00 00 00 00 ....... + +; Делить n1 на n2, получить частное n3. +; Исключительная ситуация возникает, если n2 равен нулю. +; Если n1 и n2 различаются по знаку - возвращаемый результат зависит от +; реализации. + MOV ECX, EAX + +59D2F0 8B C8 Л╚ + + MOV EAX, [EBP] + +59D2F2 8B 45 00 ЛE. + + CDQ + +59D2F5 99 Щ + + IDIV ECX + +59D2F6 F7 F9 ў∙ + + LEA EBP, [EBP+4] + +59D2F8 8D 6D 04 Нm. + + RET + +59D2FB C3 ├ + +EndCode + +Code U/ ;( W1, W2 -> W3 ) \ беззнаковое деление W1 на W2 + +59D2FC 10 D3 59 00 00 02 55 2F DE D2 59 00 00 00 00 00 .╙Y...U/▐╥Y..... +59D30C 00 00 00 00 .... + + MOV ECX, EAX + +59D310 8B C8 Л╚ + + MOV EAX, [EBP] + +59D312 8B 45 00 ЛE. + + XOR EDX, EDX + +59D315 33 D2 3╥ + + LEA EBP, [EBP+4] + +59D317 8D 6D 04 Нm. + + DIV ECX + +59D31A F7 F1 ўё + + RET + +59D31C C3 ├ + +EndCode + +Code +! ;( n|u a-addr -- ) \ 94 \ !!!!! + +59D31D 30 D3 59 00 00 02 2B 21 01 D3 59 00 00 00 00 00 0╙Y...+!.╙Y..... +59D32D 00 00 00 ... + +; Прибавить n|u к одинарному числу по адресу a-addr. + MOV EDX, [EBP] + +59D330 8B 55 00 ЛU. + + ADD DWORD PTR [EAX ], EDX + +59D333 01 10 .. + + MOV EAX, [EBP+4] + +59D335 8B 45 04 ЛE. + + LEA EBP, [EBP+8] + +59D338 8D 6D 08 Нm. + + RET + +59D33B C3 ├ + +EndCode + +Code MOD ;( n1 n2 -- n3 ) \ 94 + +59D33C 50 D3 59 00 00 03 4D 4F 44 22 D3 59 00 00 00 00 P╙Y...MOD"╙Y.... +59D34C 00 00 00 00 .... + +; Делить n1 на n2, получить остаток n3. +; Исключительная ситуация возникает, если n2 равен нулю. +; Если n1 и n2 различаются по знаку - возвращаемый результат зависит от +; реализации. + MOV ECX, EAX + +59D350 8B C8 Л╚ + + MOV EAX, [EBP] + +59D352 8B 45 00 ЛE. + + LEA EBP, [EBP+4] + +59D355 8D 6D 04 Нm. + + CDQ + +59D358 99 Щ + + IDIV ECX + +59D359 F7 F9 ў∙ + + MOV EAX, EDX + +59D35B 8B C2 Л┬ + + RET + +59D35D C3 ├ + +EndCode + +Code /MOD ;( n1 n2 -- n3 n4 ) \ 94 + +59D35E 70 D3 59 00 00 04 2F 4D 4F 44 41 D3 59 00 00 00 p╙Y.../MODA╙Y... +59D36E 00 00 .. + +; Делить n1 на n2, дать остаток n3 и частное n4. +; Неоднозначная ситуация возникает, если n2 нуль. + MOV ECX, EAX + +59D370 8B C8 Л╚ + + MOV EAX, [EBP] + +59D372 8B 45 00 ЛE. + + CDQ + +59D375 99 Щ + + IDIV ECX + +59D376 F7 F9 ў∙ + + MOV [EBP], EDX + +59D378 89 55 00 ЙU. + + RET + +59D37B C3 ├ + +EndCode + +Code UMOD ;( W1, W2 -> W3 ) \ остаток от деления W1 на W2 + +59D37C 90 D3 59 00 00 04 55 4D 4F 44 63 D3 59 00 00 00 Р╙Y...UMODc╙Y... +59D38C 00 00 00 00 .... + + MOV ECX, EAX + +59D390 8B C8 Л╚ + + XOR EDX, EDX + +59D392 33 D2 3╥ + + MOV EAX, [EBP] + +59D394 8B 45 00 ЛE. + + LEA EBP, [EBP+4] + +59D397 8D 6D 04 Нm. + + DIV ECX + +59D39A F7 F1 ўё + + MOV EAX, EDX + +59D39C 8B C2 Л┬ + + RET + +59D39E C3 ├ + +EndCode + +Code UM/MOD ;( ud u1 -- u2 u3 ) \ 94 + +59D39F B0 D3 59 00 00 06 55 4D 2F 4D 4F 44 81 D3 59 00 ░╙Y...UM/MODБ╙Y. +59D3AF 00 . + +; Делить ud на u1, получить частное u3 и остаток u2. +; Все значения и арифметика беззнаковые. +; Исключительная ситуация возникает, если u1 ноль или частное +; находится вне диапазона одинарных беззнаковых чисел. + MOV ECX, EAX + +59D3B0 8B C8 Л╚ + + MOV EDX, [EBP] + +59D3B2 8B 55 00 ЛU. + + MOV EAX, [EBP+4] + +59D3B5 8B 45 04 ЛE. + + DIV ECX + +59D3B8 F7 F1 ўё + + LEA EBP, [EBP+4] + +59D3BA 8D 6D 04 Нm. + + MOV [EBP], EDX + +59D3BD 89 55 00 ЙU. + + + RET + +59D3C0 C3 ├ + +EndCode + +Code 2/ ;( x1 -- x2 ) \ 94 + +59D3C1 D0 D3 59 00 00 02 32 2F A4 D3 59 00 00 00 00 ╨╙Y...2/д╙Y.... + +; x2 - результат сдвига x1 на один бит вправо без изменения старшего бита. + SAR EAX,1 + +59D3D0 D1 F8 ╤° + + RET + +59D3D2 C3 ├ + +EndCode + +Code */MOD ;( n1 n2 n3 -- n4 n5 ) \ 94 + +59D3D3 F0 D3 59 00 00 05 2A 2F 4D 4F 44 C6 D3 59 00 00 Ё╙Y...*/MOD╞╙Y.. +59D3E3 00 00 00 00 00 00 00 00 00 00 00 00 00 ............. + +; Умножить n1 на n2, получить промежуточный двойной результат d. +; Разделить d на n3, получить остаток n4 и частное n5. + MOV EBX, EAX + +59D3F0 8B D8 Л╪ + + MOV EAX, [EBP] + +59D3F2 8B 45 00 ЛE. + + MOV ECX, [EBP+4] + +59D3F5 8B 4D 04 ЛM. + + IMUL ECX + +59D3F8 F7 E9 ўщ + + IDIV EBX + +59D3FA F7 FB ў√ + + MOV [EBP+4], EDX + +59D3FC 89 55 04 ЙU. + + LEA EBP, [EBP+4] + +59D3FF 8D 6D 04 Нm. + + RET + +59D402 C3 ├ + +EndCode + +Code M* ;( n1 n2 -- d ) \ 94 + +59D403 10 D4 59 00 00 02 4D 2A D8 D3 59 00 00 .╘Y...M*╪╙Y.. + +; d - знаковый результат умножения n1 на n2. + IMUL DWORD PTR [EBP] + +59D410 F7 6D 00 ўm. + + MOV [EBP], EAX + +59D413 89 45 00 ЙE. + + MOV EAX, EDX + +59D416 8B C2 Л┬ + + RET + +59D418 C3 ├ + +EndCode + +Code LSHIFT ;( x1 u -- x2 ) ; 94 + +59D419 30 D4 59 00 00 06 4C 53 48 49 46 54 08 D4 59 00 0╘Y...LSHIFT.╘Y. +59D429 00 00 00 00 00 00 00 ....... + +; Сдвинуть x1 на u бит влево. Поместить нули в наименее значимые биты, +; освобождаемые при сдвиге. +; Неоднозначная ситуация возникает, если u больше или равно +; числу бит в ячейке. + MOV ECX, EAX + +59D430 8B C8 Л╚ + + MOV EAX, [EBP] + +59D432 8B 45 00 ЛE. + + SHL EAX, CL + +59D435 D3 E0 ╙р + + LEA EBP, [EBP+4] + +59D437 8D 6D 04 Нm. + + RET + +59D43A C3 ├ + +EndCode + +Code RSHIFT ;( x1 u -- x2 ) \ 94 + +59D43B 50 D4 59 00 00 06 52 53 48 49 46 54 1E D4 59 00 P╘Y...RSHIFT.╘Y. +59D44B 00 00 00 00 00 ..... + +; Сдвинуть x1 на u бит вправо. Поместить нули в наиболее значимые биты, +; освобождаемые при сдвиге. +; Неоднозначная ситуация возникает, если u больше или равно +; числу бит в ячейке. + MOV ECX, EAX + +59D450 8B C8 Л╚ + + MOV EAX, [EBP] + +59D452 8B 45 00 ЛE. + + SHR EAX, CL + +59D455 D3 E8 ╙ш + + LEA EBP, [EBP+4] + +59D457 8D 6D 04 Нm. + + RET + +59D45A C3 ├ + +EndCode + +Code SM/REM ;( d1 n1 -- n2 n3 ) \ 94 + +59D45B 70 D4 59 00 00 06 53 4D 2F 52 45 4D 40 D4 59 00 p╘Y...SM/REM@╘Y. +59D46B 00 00 00 00 00 ..... + +; Разделить d1 на n1, получить симметричное частное n3 и остаток n2. +; Входные и выходные аргументы знаковые. +; Неоднозначная ситуация возникает, если n1 ноль, или частное вне +; диапазона одинарных знаковых чисел. + MOV EBX, EAX + +59D470 8B D8 Л╪ + + MOV EDX, [EBP] + +59D472 8B 55 00 ЛU. + + MOV EAX, [EBP+4] + +59D475 8B 45 04 ЛE. + + IDIV EBX + +59D478 F7 FB ў√ + + LEA EBP, [EBP+4] + +59D47A 8D 6D 04 Нm. + + MOV [EBP], EDX + +59D47D 89 55 00 ЙU. + + RET + +59D480 C3 ├ + +EndCode + +Code FM/MOD ;( d1 n1 -- n2 n3 ) \ 94 + +59D481 A0 D4 59 00 00 06 46 4D 2F 4D 4F 44 60 D4 59 00 а╘Y...FM/MOD`╘Y. +59D491 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............... + +; ╨рчфхышЄ№ d1 эр n1, яюыєўшЄ№ ўрёЄэюх n3 ш юёЄрЄюъ n2. +; ┬їюфэ√х ш т√їюфэ√х рЁуєьхэЄ√ чэръют√х. +; ═хюфэючэрўэр  ёшЄєрЎш  тючэшърхЄ, хёыш n1 эюы№, шыш ўрёЄэюх тэх +; фшрярчюэр юфшэрЁэ√ї чэръют√ї ўшёхы. + MOV ECX, EAX + +59D4A0 8B C8 Л╚ + + MOV EDX, [EBP] + +59D4A2 8B 55 00 ЛU. + + MOV EBX, EDX + +59D4A5 8B DA Л┌ + + MOV EAX, [EBP+4] + +59D4A7 8B 45 04 ЛE. + + IDIV ECX + +59D4AA F7 F9 ў∙ + + TEST EDX, EDX ; ╬ёЄрЄюъ-Єю хёЄ№? + +59D4AC 85 D2 Е╥ + + JZ SHORT @@1 + +59D4AE 74 07 t. + + XOR EBX, ECX ; └ рЁуєьхэЄ√ Ёрчэюую чэрър? + +59D4B0 33 D9 3┘ + + JNS SHORT @@1 + +59D4B2 79 03 y. + + DEC EAX + +59D4B4 48 H + + ADD EDX, ECX + +59D4B5 03 D1 .╤ + +@@1: LEA EBP, [EBP+4] + +59D4B7 8D 6D 04 Нm. + + MOV [EBP], EDX + +59D4BA 89 55 00 ЙU. + + RET + +59D4BD C3 ├ + +EndCode + +\ ================================================================ +\ Сравнения + +Code = ;( x1 x2 -- flag ) \ 94 + +59D4BE D0 D4 59 00 00 01 3D 86 D4 59 00 00 00 00 00 00 ╨╘Y...=Ж╘Y...... +59D4CE 00 00 .. + +; flag "истина" тогда и только тогда, когда x1 побитно равен x2. + XOR EAX, [EBP] + +59D4D0 33 45 00 3E. + + SUB EAX, 1 + +59D4D3 83 E8 01 Гш. + + SBB EAX, EAX + +59D4D6 1B C0 .└ + + LEA EBP, [EBP+4] + +59D4D8 8D 6D 04 Нm. + + RET + +59D4DB C3 ├ + +EndCode + +Code <> ;( x1 x2 -- flag ) \ 94 CORE EXT + +59D4DC F0 D4 59 00 00 02 3C 3E C3 D4 59 00 00 00 00 00 Ё╘Y...<>├╘Y..... +59D4EC 00 00 00 00 .... + +; flag "истина" тогда и только тогда, когда x1 не равен x2. + XOR EAX, [EBP] + +59D4F0 33 45 00 3E. + + NEG EAX + +59D4F3 F7 D8 ў╪ + + SBB EAX, EAX + +59D4F5 1B C0 .└ + + LEA EBP, [EBP+4] + +59D4F7 8D 6D 04 Нm. + + RET + +59D4FA C3 ├ + +EndCode + +Code < ;( n1 n2 -- flag ) \ 94 + +59D4FB 10 D5 59 00 00 01 3C E1 D4 59 00 00 00 00 00 00 .╒Y...<с╘Y...... +59D50B 00 00 00 00 00 ..... + +; flag "истина" тогда и только тогда, когда n1 меньше n2. + CMP [EBP], EAX + +59D510 39 45 00 9E. + + SETGE AL + +59D513 0F 9D C0 .Э└ + + AND EAX, 01 + +59D516 83 E0 01 Гр. + + DEC EAX + +59D519 48 H + + LEA EBP, [EBP+4] + +59D51A 8D 6D 04 Нm. + + RET + +59D51D C3 ├ + +EndCode + +Code > ;( n1 n2 -- flag ) \ 94 + +59D51E 30 D5 59 00 00 01 3E 00 D5 59 00 00 00 00 00 00 0╒Y...>.╒Y...... +59D52E 00 00 .. + +; flag "истина" тогда и только тогда, когда n1 больше n2. + CMP EAX, [EBP] + +59D530 3B 45 00 ;E. + + SETGE AL + +59D533 0F 9D C0 .Э└ + + AND EAX, 01 + +59D536 83 E0 01 Гр. + + DEC EAX + +59D539 48 H + + LEA EBP, [EBP+4] + +59D53A 8D 6D 04 Нm. + + RET + +59D53D C3 ├ + +EndCode + +Code WITHIN ;( n1 low high -- f1 ) \ f1=true if ((n1 >= low) & (n1 < high)) + +59D53E 50 D5 59 00 00 06 57 49 54 48 49 4E 23 D5 59 00 P╒Y...WITHIN#╒Y. +59D54E 00 00 .. + + MOV EBX, [EBP+4] + +59D550 8B 5D 04 Л]. + + SUB EAX, [EBP] + +59D553 2B 45 00 +E. + + SUB EBX, [EBP] + +59D556 2B 5D 00 +]. + + SUB EBX, EAX + +59D559 2B D8 +╪ + + SBB EAX, EAX + +59D55B 1B C0 .└ + + ADD EBP, 8 + +59D55D 83 C5 08 Г┼. + + RET + +59D560 C3 ├ + +EndCode + +Code D< ;( d1 d2 -- flag ) \ DOUBLE + +59D561 70 D5 59 00 00 02 44 3C 43 D5 59 00 00 00 00 p╒Y...D ;( d1 d2 -- flag ) \ DOUBLE + +59D585 A0 D5 59 00 00 02 44 3E 66 D5 59 00 00 00 00 00 а╒Y...D>f╒Y..... +59D595 00 00 00 00 00 00 00 00 00 00 00 ........... + +; flag "истина" тогда и только тогда, когда d1 больше d2. + MOV EBX, [EBP] + +59D5A0 8B 5D 00 Л]. + + CMP EBX, [EBP+8] + +59D5A3 3B 5D 08 ;]. + + SBB EAX, [EBP+4] + +59D5A6 1B 45 04 .E. + + SAR EAX, 1FH + +59D5A9 C1 F8 1F ┴°. + + ADD EBP, 0CH + +59D5AC 83 C5 0C Г┼. + + RET + +59D5AF C3 ├ + +EndCode + +Code U< ;( u1 u2 -- flag ) \ 94 + +59D5B0 C0 D5 59 00 00 02 55 3C 8A D5 59 00 00 00 00 00 └╒Y...U<К╒Y..... + +; flag "истина" тогда и только тогда, когда u1 меньше u2. + CMP [EBP], EAX + +59D5C0 39 45 00 9E. + + SBB EAX, EAX + +59D5C3 1B C0 .└ + + ADD EBP, 04 + +59D5C5 83 C5 04 Г┼. + + RET + +59D5C8 C3 ├ + +EndCode + +Code U> ;( u1 u2 -- flag ) \ 94 + +59D5C9 E0 D5 59 00 00 02 55 3E B5 D5 59 00 00 00 00 00 р╒Y...U>╡╒Y..... +59D5D9 00 00 00 00 00 00 00 ....... + +; flag "истина" тогда и только тогда, когда u1 больше u2. + CMP EAX, [EBP] + +59D5E0 3B 45 00 ;E. + + SBB EAX, EAX + +59D5E3 1B C0 .└ + + ADD EBP, 04 + +59D5E5 83 C5 04 Г┼. + + RET + +59D5E8 C3 ├ + +EndCode + +Code 0< ;( n -- flag ) \ 94 + +59D5E9 00 D6 59 00 00 02 30 3C CE D5 59 00 00 00 00 00 .╓Y...0<╬╒Y..... +59D5F9 00 00 00 00 00 00 00 ....... + +; flag "истина" тогда и только тогда, когда n меньше нуля. + SAR EAX, 1F + +59D600 C1 F8 1F ┴°. + + RET + +59D603 C3 ├ + +EndCode + +Code 0= ;( x -- flag ) \ 94 + +59D604 10 D6 59 00 00 02 30 3D EE D5 59 00 .╓Y...0=ю╒Y. + +; flag "истина" тогда и только тогда, когда x равно нулю. + SUB EAX, 1 + +59D610 83 E8 01 Гш. + + SBB EAX, EAX + +59D613 1B C0 .└ + + RET + +59D615 C3 ├ + +EndCode + +Code 0<> ;( x -- flag ) \ 94 CORE EXT + +59D616 30 D6 59 00 00 03 30 3C 3E 09 D6 59 00 00 00 00 0╓Y...0<>.╓Y.... +59D626 00 00 00 00 00 00 00 00 00 00 .......... + +; flag "истина" тогда и только тогда, когда x не равно нулю. + NEG EAX + +59D630 F7 D8 ў╪ + + SBB EAX, EAX + +59D632 1B C0 .└ + + RET + +59D634 C3 ├ + +EndCode + +Code D0= ;( xd -- flag ) \ 94 DOUBLE + +59D635 50 D6 59 00 00 03 44 30 3D 1B D6 59 00 00 00 00 P╓Y...D0=.╓Y.... +59D645 00 00 00 00 00 00 00 00 00 00 00 ........... + +; flag "истина" тогда и только тогда, когда xd равен нулю. + OR EAX, [EBP] + +59D650 0B 45 00 .E. + + SUB EAX, 1 + +59D653 83 E8 01 Гш. + + SBB EAX, EAX + +59D656 1B C0 .└ + + LEA EBP, [EBP+4] + +59D658 8D 6D 04 Нm. + + RET + +59D65B C3 ├ + +EndCode + +Code D= ;( xd1 xd2 -- flag ) \ 94 DOUBLE + +59D65C 70 D6 59 00 00 02 44 3D 3A D6 59 00 00 00 00 00 p╓Y...D=:╓Y..... +59D66C 00 00 00 00 .... + +; flag is true if and only if xd1 is bit-for-bit the same as xd2 + MOV EDX,[EBP] + +59D670 8B 55 00 ЛU. + + XOR EAX,[EBP+4] + +59D673 33 45 04 3E. + + XOR EDX,[EBP+8] + +59D676 33 55 08 3U. + + OR EAX,EDX + +59D679 0B C2 .┬ + + SUB EAX,1 + +59D67B 83 E8 01 Гш. + + SBB EAX,EAX + +59D67E 1B C0 .└ + + LEA EBP,[EBP+0CH] + +59D680 8D 6D 0C Нm. + + RET + +59D683 C3 ├ + +EndCode + +Code D2* ;( xd1 -- xd2 ) \ 94 DOUBLE + +59D684 A0 D6 59 00 00 03 44 32 2A 61 D6 59 00 00 00 00 а╓Y...D2*a╓Y.... +59D694 00 00 00 00 00 00 00 00 00 00 00 00 ............ + +; xd2 is the result of shifting xd1 one bit toward the most-significant +; bit, filling the vacated least-significant bit with zero + SHL DWORD PTR [EBP], 1 + +59D6A0 D1 65 00 ╤e. + + RCL EAX, 1 + +59D6A3 D1 D0 ╤╨ + + RET + +59D6A5 C3 ├ + +EndCode + +Code D2/ ;( xd1 -- xd2 ) \ 94 DOUBLE + +59D6A6 C0 D6 59 00 00 03 44 32 2F 89 D6 59 00 00 00 00 └╓Y...D2/Й╓Y.... +59D6B6 00 00 00 00 00 00 00 00 00 00 .......... + +; xd2 is the result of shifting xd1 one bit toward the least-significant bit, +; leaving the most-significant bit unchanged + SAR EAX, 1 + +59D6C0 D1 F8 ╤° + + RCR DWORD PTR [EBP], 1 + +59D6C2 D1 5D 00 ╤]. + + RET + +59D6C5 C3 ├ + +EndCode + +\ ================================================================ +\ Строки + +Code -TRAILING ;( c-addr u1 -- c-addr u2 ) \ 94 STRING + +59D6C6 E0 D6 59 00 00 09 2D 54 52 41 49 4C 49 4E 47 AB р╓Y...-TRAILINGл +59D6D6 D6 59 00 00 00 00 00 00 00 00 ╓Y........ + +; Если u1 больше нуля, u2 равно u1, уменьшенному на количество пробелов в конце +; символьной строки, заданной c-addr и u1. Если u1 ноль или вся строка состоит +; из пробелов, u2 ноль. + PUSH EDI + +59D6E0 57 W + + MOV ECX, EAX + +59D6E1 8B C8 Л╚ + + SIF C0<> + +59D6E3 E3 11 у. + + MOV EDI, DWORD PTR [EBP] + +59D6E5 8B 7D 00 Л}. + + ADD EDI, ECX + +59D6E8 03 F9 .∙ + + DEC EDI + +59D6EA 4F O + + MOV AL, 20H + +59D6EB B0 20 ░ + + STD + +59D6ED FD ¤ + + REPZ SCASB + +59D6EE F3 AE єо + + SIF 0<> + +59D6F0 74 01 t. + + INC ECX + +59D6F2 41 A + + STHEN + CLD + +59D6F3 FC № + + MOV EAX, ECX + +59D6F4 8B C1 Л┴ + + STHEN + POP EDI + +59D6F6 5F _ + + RET + +59D6F7 C3 ├ + +EndCode + +Code COMPARE ;( c-addr1 u1 c-addr2 u2 -- n ) \ 94 STRING !!!!! + +59D6F8 10 D7 59 00 00 07 43 4F 4D 50 41 52 45 CB D6 59 .╫Y...COMPARE╦╓Y +59D708 00 00 00 00 00 00 00 00 ........ + +; Сравнить строку, заданную c-addr1 u1, со строкой, заданной c-addr2 u2. +; Строки сравниваются, начиная с заданных адресов, символ за символом, до длины +; наиболее короткой из строк или до нахождения различий. Если две строки +; идентичны, n ноль. Если две строки идентичны до длины наиболее короткой из +; строк, то n минус единица (-1), если u1 меньше u2, иначе единица (1). +; Если две строки не идентичны до длины наиболее короткой из строк, то n минус +; единица (-1), если первый несовпадающий символ строки, заданной c-addr1 u1 +; имеет меньшее числовое значение, чем соответствующий символ в строке, +; заданной c-addr2 u2, и единица в противном случае. + PUSH EDI + +59D710 57 W + + MOV ECX, EAX + +59D711 8B C8 Л╚ + + SUB EAX, EAX + +59D713 2B C0 +└ + + CMP ECX, [EBP +4 ] + +59D715 3B 4D 04 ;M. + + SIF 0<> + +59D718 74 09 t. + + SIF U< + +59D71A 73 03 s. + + INC EAX + +59D71C 40 @ + + SELSE + +59D71D EB 04 ы. + + DEC EAX + +59D71F 48 H + + MOV ECX, [EBP +4 ] + +59D720 8B 4D 04 ЛM. + + STHEN + STHEN + MOV ESI, [EBP + { 2 CELLS } ] + +59D723 8B 75 08 Лu. + + MOV EDI, [EBP] + +59D726 8B 7D 00 Л}. + + REPE CMPSB + +59D729 F3 A6 єж + + SIF 0<> + +59D72B 74 0E t. + + SIF U>= + +59D72D 72 07 r. + + MOV EAX, 1 + +59D72F B8 01 00 00 00 ╕.... + + SELSE + +59D734 EB 05 ы. + + MOV EAX, -1 + +59D736 B8 FF FF FF FF ╕     + + STHEN + STHEN + LEA EBP, [EBP + { 3 CELLS } ] + +59D73B 8D 6D 0C Нm. + + POP EDI + +59D73E 5F _ + + RET + +59D73F C3 ├ + +EndCode + +Code SEARCH ;( c-addr1 u1 c-addr2 u2 -- c-addr3 u3 flag ) \ 94 STRING + +59D740 50 D7 59 00 00 06 53 45 41 52 43 48 FD D6 59 00 P╫Y...SEARCH¤╓Y. + +; Произвести поиск в строке, заданной c-addr1 u1, строки, заданной c-addr2 u2. +; Если флаг "истина", совпадение найдено по адресу c-addr3 с оставшимися u3 +; символами. Если флаг "ложь", совпадения не найдено, и c-addr3 есть c-addr1, +; и u3 есть u1. \ !!!!! + LEA EBP, [EBP-4] + +59D750 8D 6D FC Нm№ + + MOV [EBP], EAX + +59D753 89 45 00 ЙE. + + PUSH EDI + +59D756 57 W + + CLD + +59D757 FC № + + MOV EBX, DWORD PTR [EBP] + +59D758 8B 5D 00 Л]. + + OR EBX, EBX + +59D75B 0B DB .█ + + SIF 0<> + +59D75D 74 35 t5 + + MOV EDX, DWORD PTR [EBP + { 2 CELLS } ] + +59D75F 8B 55 08 ЛU. + + MOV EDI, DWORD PTR [EBP + { 3 CELLS } ] + +59D762 8B 7D 0C Л}. + + ADD EDX, EDI + +59D765 03 D7 .╫ + + SBEGIN + MOV ESI, DWORD PTR [EBP +4 ] + +59D767 8B 75 04 Лu. + + LODSB + +59D76A AC м + + MOV ECX, EDX + +59D76B 8B CA Л╩ + + SUB ECX, EDI + +59D76D 2B CF +╧ + + JECXZ LLD + +59D76F E3 2A у* + + REPNZ + +59D771 F2 Є + + SCASB + +59D772 AE о + + JNE SHORT LLD ; во всей строке нет первого символа искомой строки + +59D773 75 26 u& + + CMP EBX, 1 + +59D775 83 FB 01 Г√. + + JZ SHORT LLC ; искомая строка имела длину 1 и найдена + +59D778 74 11 t. + + MOV ECX, EBX + +59D77A 8B CB Л╦ + + DEC ECX + +59D77C 49 I + + MOV EAX, EDX + +59D77D 8B C2 Л┬ + + SUB EAX, EDI + +59D77F 2B C7 +╟ + + CMP EAX, ECX + +59D781 3B C1 ;┴ + + JC SHORT LLD ; остаток строки короче искомой строки + +59D783 72 16 r. + + PUSH EDI + +59D785 57 W + + REPZ CMPSB + +59D786 F3 A6 єж + + POP EDI + +59D788 5F _ + + SUNTIL 0= + +59D789 75 DC u▄ + +LLC: DEC EDI ; нашли полное совпадение + +59D78B 4F O + + SUB EDX, EDI + +59D78C 2B D7 +╫ + + MOV DWORD PTR [EBP + { 3 CELLS } ], EDI + +59D78E 89 7D 0C Й}. + + MOV DWORD PTR [EBP + { 2 CELLS } ], EDX + +59D791 89 55 08 ЙU. + + STHEN + MOV EAX, -1 + +59D794 B8 FF FF FF FF ╕     + + JMP SHORT LLA + +59D799 EB 02 ы. + +LLD: XOR EAX, EAX + +59D79B 33 C0 3└ + +LLA: LEA EBP, [EBP+4] + +59D79D 8D 6D 04 Нm. + + MOV [EBP], EAX + +59D7A0 89 45 00 ЙE. + + POP EDI + +59D7A3 5F _ + + MOV EAX, [EBP] + +59D7A4 8B 45 00 ЛE. + + LEA EBP, [EBP+4] + +59D7A7 8D 6D 04 Нm. + + RET + +59D7AA C3 ├ + +EndCode + +Code CMOVE ;( c-addr1 c-addr2 u -- ) \ 94 STRING + +59D7AB C0 D7 59 00 00 05 43 4D 4F 56 45 45 D7 59 00 00 └╫Y...CMOVEE╫Y.. +59D7BB 00 00 00 00 00 ..... + +; Если u больше нуля, копировать u последовательных символов из пространства +; данных начиная с адреса c-addr1 в c-addr2, символ за символом, начиная с +; младших адресов к старшим. + MOV EDX, EDI + +59D7C0 8B D7 Л╫ + + MOV ECX, EAX + +59D7C2 8B C8 Л╚ + + MOV EDI, DWORD PTR [EBP] + +59D7C4 8B 7D 00 Л}. + + MOV ESI, DWORD PTR [EBP +4 ] + +59D7C7 8B 75 04 Лu. + + CLD + +59D7CA FC № + + REPZ MOVSB + +59D7CB F3 A4 єд + + LEA EBP, [EBP+0CH] + +59D7CD 8D 6D 0C Нm. + + MOV EAX, [EBP-4] + +59D7D0 8B 45 FC ЛE№ + + MOV EDI, EDX + +59D7D3 8B FA Л· + + RET + +59D7D5 C3 ├ + +EndCode + +: QCMOVE CMOVE ; + +59D7D6 F0 D7 59 00 00 06 51 43 4D 4F 56 45 B0 D7 59 00 Ё╫Y...QCMOVE░╫Y. +59D7E6 00 00 00 00 00 00 00 00 00 00 .......... + + CALL @@CMOVE + RET + +Code CMOVE> ;( c-addr1 c-addr2 u -- ) \ 94 STRING + +59D7F6 10 D8 59 00 00 06 43 4D 4F 56 45 3E DB D7 59 00 .╪Y...CMOVE>█╫Y. +59D806 00 00 00 00 00 00 00 00 00 00 .......... + +; Если u больше нуля, копировать u последовательных символов из пространства +; данных начиная с адреса c-addr1 в c-addr2, символ за символом, начиная со +; старших адресов к младшим. + + MOV EDX, EDI + +59D810 8B D7 Л╫ + + MOV ECX, EAX + +59D812 8B C8 Л╚ + + MOV EDI, [EBP] + +59D814 8B 7D 00 Л}. + + MOV ESI, [EBP+4] + +59D817 8B 75 04 Лu. + + STD + +59D81A FD ¤ + + ADD EDI, ECX + +59D81B 03 F9 .∙ + + DEC EDI + +59D81D 4F O + + ADD ESI, ECX + +59D81E 03 F1 .ё + + DEC ESI + +59D820 4E N + + REP MOVSB + +59D821 F3 A4 єд + + MOV EDI, EDX + +59D823 8B FA Л· + + LEA EBP, [EBP+0CH] + +59D825 8D 6D 0C Нm. + + MOV EAX, [EBP-4] + +59D828 8B 45 FC ЛE№ + + RET + +59D82B C3 ├ + +EndCode + +Code FILL ;( c-addr u char -- ) \ 94 \ !!!!! + +59D82C 40 D8 59 00 00 04 46 49 4C 4C FB D7 59 00 00 00 @╪Y...FILL√╫Y... +59D83C 00 00 00 00 .... + +; Если u больше нуля, заслать char в u байтов по адресу c-addr. + MOV EDX, EDI + +59D840 8B D7 Л╫ + + MOV ECX, [EBP] + +59D842 8B 4D 00 ЛM. + + MOV EDI, [EBP+4] + +59D845 8B 7D 04 Л}. + + CLD + +59D848 FC № + + REP STOSB + +59D849 F3 AA єк + + MOV EDI, EDX + +59D84B 8B FA Л· + + LEA EBP, [EBP+0CH] + +59D84D 8D 6D 0C Нm. + + MOV EAX, [EBP-4] + +59D850 8B 45 FC ЛE№ + + RET + +59D853 C3 ├ + +EndCode + +Code ZCOUNT ;( c-addr -- c-addr u ) + +59D854 70 D8 59 00 00 06 5A 43 4F 55 4E 54 31 D8 59 00 p╪Y...ZCOUNT1╪Y. +59D864 00 00 00 00 00 00 00 00 00 00 00 00 ............ + + LEA EBP, [EBP-4] + +59D870 8D 6D FC Нm№ + + MOV [EBP], EAX + +59D873 89 45 00 ЙE. + + XOR EBX, EBX + +59D876 33 DB 3█ + + SBEGIN + MOV BL, BYTE PTR [EAX ] + +59D878 8A 18 К. + + INC EAX + +59D87A 40 @ + + OR BL, BL + +59D87B 0A DB .█ + + SUNTIL 0= + +59D87D 75 F9 u∙ + + DEC EAX + +59D87F 48 H + + SUB EAX, [EBP] + +59D880 2B 45 00 +E. + + RET + +59D883 C3 ├ + +EndCode + +\ ================================================================ +\ Указатели стеков + +Code SP! ;( A -> ) + +59D884 A0 D8 59 00 00 03 53 50 21 59 D8 59 00 00 00 00 а╪Y...SP!Y╪Y.... +59D894 00 00 00 00 00 00 00 00 00 00 00 00 ............ + + LEA EBP, [EAX+4] + +59D8A0 8D 68 04 Нh. + + MOV EAX, [EBP-4] + +59D8A3 8B 45 FC ЛE№ + + RET + +59D8A6 C3 ├ + +EndCode + +Code RP! ;( A -> ) + +59D8A7 C0 D8 59 00 00 03 52 50 21 89 D8 59 00 00 00 00 └╪Y...RP!Й╪Y.... +59D8B7 00 00 00 00 00 00 00 00 00 ......... + + POP EBX + +59D8C0 5B [ + + MOV ESP, EAX + +59D8C1 8B E0 Лр + + MOV EAX, [EBP] + +59D8C3 8B 45 00 ЛE. + + LEA EBP, [EBP+4] + +59D8C6 8D 6D 04 Нm. + + JMP EBX + +59D8C9 FF E3  у + +EndCode + +Code SP@ ;( -> A ) + +59D8CB E0 D8 59 00 00 03 53 50 40 AC D8 59 00 00 00 00 р╪Y...SP@м╪Y.... +59D8DB 00 00 00 00 00 ..... + + LEA EBP, [EBP-4] + +59D8E0 8D 6D FC Нm№ + + MOV [EBP], EAX + +59D8E3 89 45 00 ЙE. + + MOV EAX, EBP + +59D8E6 8B C5 Л┼ + + RET + +59D8E8 C3 ├ + +EndCode + +Code RP@ ;( -- RP ) + +59D8E9 00 D9 59 00 00 03 52 50 40 D0 D8 59 00 00 00 00 .┘Y...RP@╨╪Y.... +59D8F9 00 00 00 00 00 00 00 ....... + + LEA EBP, [EBP-4] + +59D900 8D 6D FC Нm№ + + MOV [EBP], EAX + +59D903 89 45 00 ЙE. + + LEA EAX, [ESP + 4 ] + +59D906 8D 44 24 04 НD$. + + RET + +59D90A C3 ├ + +EndCode + + +\ ================================================================ +\ Регистр потока (задачи внутри форта) + +Code TlsIndex! ;( x -- ) \ указатель локального пула потока + +59D90B 20 D9 59 00 00 09 54 6C 73 49 6E 64 65 78 21 EE ┘Y...TlsIndex!ю +59D91B D8 59 00 00 00 ╪Y... + + MOV EDI, EAX + +59D920 8B F8 Л° + + MOV EAX, [EBP] + +59D922 8B 45 00 ЛE. + + LEA EBP, [EBP+4] + +59D925 8D 6D 04 Нm. + + RET + +59D928 C3 ├ + +EndCode + +Code TlsIndex@ ;( -- x ) + +59D929 40 D9 59 00 00 09 54 6C 73 49 6E 64 65 78 40 10 @┘Y...TlsIndex@. +59D939 D9 59 00 00 00 00 00 ┘Y..... + + LEA EBP, [EBP-4] + +59D940 8D 6D FC Нm№ + + MOV [EBP], EAX + +59D943 89 45 00 ЙE. + + MOV EAX, EDI + +59D946 8B C7 Л╟ + + RET + +59D948 C3 ├ + +EndCode + +\ ================================================================ +\ Циклы + +Code C-J + +59D949 60 D9 59 00 00 03 43 2D 4A 2E D9 59 00 00 00 00 `┘Y...C-J.┘Y.... +59D959 00 00 00 00 00 00 00 ....... + + LEA EBP, [EBP-4] + +59D960 8D 6D FC Нm№ + + MOV [EBP], EAX + +59D963 89 45 00 ЙE. + + MOV EAX, DWORD PTR [ESP + { 3 CELLS } ] + +59D966 8B 44 24 0C ЛD$. + + SUB EAX, DWORD PTR [ESP + { 4 CELLS } ] + +59D96A 2B 44 24 10 +D$. + + RET + +59D96E C3 ├ + +EndCode + +( inline'ы для компиляции циклов ) + +Code C-DO + +59D96F 80 D9 59 00 00 04 43 2D 44 4F 4E D9 59 00 00 00 А┘Y...C-DON┘Y... +59D97F 00 . + + LEA EBP, [EBP+8] + +59D980 8D 6D 08 Нm. + + MOV EDX, 80000000H + +59D983 BA 00 00 00 80 ║...А + + SUB EDX, [EBP-8] + +59D988 2B 55 F8 +U° + + LEA EBX, [EAX+EDX] + +59D98B 8D 1C 02 Н.. + + MOV EAX, [EBP-4] + +59D98E 8B 45 FC ЛE№ + + MOV EDX, EDX ; FOR OPT + +59D991 8B D2 Л╥ + +; PUSH EDX +; PUSH EBX + RET + +59D993 C3 ├ + +EndCode + +Code C-?DO + +59D994 B0 D9 59 00 00 05 43 2D 3F 44 4F 74 D9 59 00 00 ░┘Y...C-?DOt┘Y.. +59D9A4 00 00 00 00 00 00 00 00 00 00 00 00 ............ + + CMP EAX, [EBP-8] + +59D9B0 3B 45 F8 ;E° + + SIF 0= + +59D9B3 75 05 u. + + MOV EAX, [EBP-4] + +59D9B5 8B 45 FC ЛE№ + + JMP EBX + +59D9B8 FF E3  у + + STHEN + PUSH EBX + +59D9BA 53 S + + MOV EBX , 80000000 + +59D9BB BB 00 00 00 80 ╗...А + + SUB EBX, [EBP-8] + +59D9C0 2B 5D F8 +]° + + PUSH EBX ; 80000000h-to + +59D9C3 53 S + + ADD EBX, EAX + +59D9C4 03 D8 .╪ + + PUSH EBX ; 80000000H-to+from + +59D9C6 53 S + + MOV EAX, [EBP-4] + +59D9C7 8B 45 FC ЛE№ + + RET + +59D9CA C3 ├ + +EndCode + +Code ADD[ESP],EAX + +59D9CB F0 D9 59 00 00 0C 41 44 44 5B 45 53 50 5D 2C 45 Ё┘Y...ADD[ESP],E +59D9DB 41 58 99 D9 59 00 00 00 00 00 00 00 00 00 00 00 AXЩ┘Y........... +59D9EB 00 00 00 00 00 ..... + + ADD [ESP] , EAX + +59D9F0 01 04 24 ..$ + + RET + +59D9F3 C3 ├ + +EndCode + +Code C-I + +59D9F4 10 DA 59 00 00 03 43 2D 49 D0 D9 59 00 00 00 00 .┌Y...C-I╨┘Y.... +59DA04 00 00 00 00 00 00 00 00 00 00 00 00 ............ + + LEA EBP, [EBP-4] + +59DA10 8D 6D FC Нm№ + + MOV [EBP], EAX + +59DA13 89 45 00 ЙE. + + MOV EAX, DWORD PTR [ESP] + +59DA16 8B 04 24 Л.$ + + SUB EAX, [ESP+4] + +59DA19 2B 44 24 04 +D$. + + RET + +59DA1D C3 ├ + +EndCode + +Code C->R + +59DA1E 30 DA 59 00 00 04 43 2D 3E 52 F9 D9 59 00 00 00 0┌Y...C->R∙┘Y... +59DA2E 00 00 .. + + PUSH EAX + +59DA30 50 P + + MOV EAX, [EBP] + +59DA31 8B 45 00 ЛE. + + LEA EBP, [EBP+4] + +59DA34 8D 6D 04 Нm. + + RET + +59DA37 C3 ├ + +EndCode + +Code C-R> + +59DA38 50 DA 59 00 00 04 43 2D 52 3E 23 DA 59 00 00 00 P┌Y...C-R>#┌Y... +59DA48 00 00 00 00 00 00 00 00 ........ + + LEA EBP, [EBP-4] + +59DA50 8D 6D FC Нm№ + + MOV [EBP], EAX + +59DA53 89 45 00 ЙE. + + POP EAX + +59DA56 58 X + + RET + +59DA57 C3 ├ + +EndCode + +Code C-RDROP + +59DA58 70 DA 59 00 00 07 43 2D 52 44 52 4F 50 3D DA 59 p┌Y...C-RDROP=┌Y +59DA68 00 00 00 00 00 00 00 00 ........ + + ADD ESP, 4 + +59DA70 83 C4 04 Г─. + + RET + +59DA73 C3 ├ + +EndCode + +Code C-2RDROP + +59DA74 90 DA 59 00 00 08 43 2D 32 52 44 52 4F 50 5D DA Р┌Y...C-2RDROP]┌ +59DA84 59 00 00 00 00 00 00 00 00 00 00 00 Y........... + + ADD ESP, 8 + +59DA90 83 C4 08 Г─. + + RET + +59DA93 C3 ├ + +EndCode + +Code C-3RDROP + +59DA94 B0 DA 59 00 00 08 43 2D 33 52 44 52 4F 50 79 DA ░┌Y...C-3RDROPy┌ +59DAA4 59 00 00 00 00 00 00 00 00 00 00 00 Y........... + + ADD ESP, 0CH + +59DAB0 83 C4 0C Г─. + + RET + +59DAB3 C3 ├ + +EndCode + +TRUE [IF] +Code C-EXECUTE ;( i*x xt -- j*x ) \ 94 + +59DAB4 D0 DA 59 00 00 09 43 2D 45 58 45 43 55 54 45 99 ╨┌Y...C-EXECUTEЩ +59DAC4 DA 59 00 00 00 00 00 00 00 00 00 00 ┌Y.......... + +; Убрать xt со стека и выполнить заданную им семантику. +; Другие изменения на стеке определяются словом, которое выполняется. + MOV EDX, EAX + +59DAD0 8B D0 Л╨ + + MOV EAX, [EBP] + +59DAD2 8B 45 00 ЛE. + + LEA EBP, [EBP+4] + +59DAD5 8D 6D 04 Нm. + + CALL EDX + +59DAD8 FF D2  ╥ + + RET + +59DADA C3 ├ + +EndCode +[THEN] + +Code EXECUTE ;( i*x xt -- j*x ) \ 94 + +59DADB F0 DA 59 00 00 07 45 58 45 43 55 54 45 B9 DA 59 Ё┌Y...EXECUTE╣┌Y +59DAEB 00 00 00 00 00 ..... + +; Убрать xt со стека и выполнить заданную им семантику. +; Другие изменения на стеке определяются словом, которое выполняется. + MOV EBX, EAX + +59DAF0 8B D8 Л╪ + + MOV EAX, [EBP] + +59DAF2 8B 45 00 ЛE. + + LEA EBP, [EBP+4] + +59DAF5 8D 6D 04 Нm. + + JMP EBX + +59DAF8 FF E3  у + +EndCode + +Code @EXECUTE ;( i*x xt -- j*x ) + +59DAFA 10 DB 59 00 00 08 40 45 58 45 43 55 54 45 E0 DA .█Y...@EXECUTEр┌ +59DB0A 59 00 00 00 00 00 Y..... + + MOV EBX, EAX + +59DB10 8B D8 Л╪ + + MOV EAX, [EBP] + +59DB12 8B 45 00 ЛE. + + LEA EBP, [EBP+4] + +59DB15 8D 6D 04 Нm. + + JMP [EBX] + +59DB18 FF 23  # + +EndCode + +\ ================================================================ +\ Поддержка LOCALS + +Code DRMOVE ;( x1 ... xn n*4 -- ) + +59DB1A 30 DB 59 00 00 06 44 52 4D 4F 56 45 FF DA 59 00 0█Y...DRMOVE ┌Y. +59DB2A 00 00 00 00 00 00 ...... + +; перенести n чисел со стека данных на стек возвратов + POP EDX ; адрес возврата + +59DB30 5A Z + + MOV ESI, EAX + +59DB31 8B F0 ЛЁ + +@@1: + PUSH DWORD PTR [EBP+ESI-4] + +59DB33 FF 74 2E FC  t.№ + + SUB ESI, 4 + +59DB37 83 EE 04 Гю. + + JNZ SHORT @@1 + +59DB3A 75 F7 uў + + ADD EBP, EAX + +59DB3C 03 E8 .ш + + MOV EAX, [EBP] + +59DB3E 8B 45 00 ЛE. + + LEA EBP, [EBP+4] + +59DB41 8D 6D 04 Нm. + + JMP EDX + +59DB44 FF E2  т + +EndCode + +Code NR> ;( R: x1 ... xn n -- D: x1 ... xn n ) + +59DB46 60 DB 59 00 00 03 4E 52 3E 1F DB 59 00 00 00 00 `█Y...NR>.█Y.... +59DB56 00 00 00 00 00 00 00 00 00 00 .......... + +; Перенести n чисел со стека возвратов на стек данных +; Если n=0 возвратить 0 + POP EDX ; адрес возврата + +59DB60 5A Z + + LEA EBP, [EBP-4] + +59DB61 8D 6D FC Нm№ + + MOV [EBP], EAX + +59DB64 89 45 00 ЙE. + + POP EAX + +59DB67 58 X + + OR EAX, EAX + +59DB68 0B C0 .└ + + JNZ @@2 + +59DB6A 0F 85 02 00 00 00 .Е.... + + JMP EDX + +59DB70 FF E2  т + + +@@2: LEA EAX, [EAX*4] + +59DB72 8D 04 85 00 00 00 00 Н.Е.... + + MOV ESI, EAX + +59DB79 8B F0 ЛЁ + +@@1: + MOV EBX, EBP + +59DB7B 8B DD Л▌ + + SUB EBX, ESI + +59DB7D 2B DE +▐ + + POP DWORD PTR [EBX] + +59DB7F 8F 03 П. + + SUB ESI, 4 + +59DB81 83 EE 04 Гю. + + JNZ SHORT @@1 + +59DB84 75 F5 uї + + SUB EBP, EAX + +59DB86 2B E8 +ш + + SAR EAX, 2 + +59DB88 C1 F8 02 ┴°. + + JMP EDX + +59DB8B FF E2  т + +EndCode + +Code N>R ;( D: x1 ... xn n -- R: x1 ... xn n ) + +59DB8D A0 DB 59 00 00 03 4E 3E 52 4B DB 59 00 00 00 00 а█Y...N>RK█Y.... +59DB9D 00 00 00 ... + +; перенести n чисел со стека данных на стек возвратов + LEA EBP, [EBP-4] + +59DBA0 8D 6D FC Нm№ + + MOV [EBP], EAX + +59DBA3 89 45 00 ЙE. + + LEA EAX, [EAX*4+4] + +59DBA6 8D 04 85 04 00 00 00 Н.Е.... + + + POP EDX ; адрес возврата + +59DBAD 5A Z + + MOV ESI, EAX + +59DBAE 8B F0 ЛЁ + +@@1: + PUSH DWORD PTR [EBP+ESI-4] + +59DBB0 FF 74 2E FC  t.№ + + SUB ESI, 4 + +59DBB4 83 EE 04 Гю. + + JNZ SHORT @@1 + +59DBB7 75 F7 uў + + ADD EBP, EAX + +59DBB9 03 E8 .ш + + MOV EAX, [EBP] + +59DBBB 8B 45 00 ЛE. + + LEA EBP, [EBP+4] + +59DBBE 8D 6D 04 Нm. + + JMP EDX + +59DBC1 FF E2  т + +EndCode + +Code NRCOPY ;( D: i*x i -- D: i*x i R: i*x i ) + +59DBC3 E0 DB 59 00 00 06 4E 52 43 4F 50 59 92 DB 59 00 р█Y...NRCOPYТ█Y. +59DBD3 00 00 00 00 00 00 00 00 00 00 00 00 00 ............. + +; скопировать n чисел со стека данных на стек возвратов + MOV ECX, EAX + +59DBE0 8B C8 Л╚ + + LEA ECX, [ECX*4] + +59DBE2 8D 0C 8D 00 00 00 00 Н.Н.... + + + POP EDX ; адрес возврата + +59DBE9 5A Z + + JECXZ @@2 + +59DBEA E3 0B у. + + MOV ESI, ECX + +59DBEC 8B F1 Лё + +@@1: + PUSH DWORD PTR [ESI+EBP-4] + +59DBEE FF 74 35 FC  t5№ + + SUB ESI, 4 + +59DBF2 83 EE 04 Гю. + + JNZ SHORT @@1 + +59DBF5 75 F7 uў + +@@2: + PUSH EAX + +59DBF7 50 P + + JMP EDX + +59DBF8 FF E2  т + +EndCode + +Code RP+@ ;( offs -- x ) + +59DBFA 10 DC 59 00 00 04 52 50 2B 40 C8 DB 59 00 00 00 .▄Y...RP+@╚█Y... +59DC0A 00 00 00 00 00 00 ...... + +; взять число со смещением offs байт от вершины стека возвратов (0 RP+@ == RP@) + MOV EAX, [EAX+ESP+4] + +59DC10 8B 44 04 04 ЛD.. + + RET + +59DC14 C3 ├ + +EndCode + +Code RP+ ;( offs -- addr ) + +59DC15 30 DC 59 00 00 03 52 50 2B FF DB 59 00 00 00 00 0▄Y...RP+ █Y.... +59DC25 00 00 00 00 00 00 00 00 00 00 00 ........... + +; взять адрес со смещением offs байт от вершины стека возвратов + LEA EAX, [EAX+ESP+4] + +59DC30 8D 44 04 04 НD.. + + RET + +59DC34 C3 ├ + +EndCode + +Code RP+! ;( x offs -- ) + +59DC35 50 DC 59 00 00 04 52 50 2B 21 1A DC 59 00 00 00 P▄Y...RP+!.▄Y... +59DC45 00 00 00 00 00 00 00 00 00 00 00 ........... + +; записать число x по смещению offs байт от вершины стека возвратов + MOV EBX, [EBP] + +59DC50 8B 5D 00 Л]. + + MOV [EAX+ESP+4], EBX + +59DC53 89 5C 04 04 Й\.. + + LEA EBP, [EBP+8] + +59DC57 8D 6D 08 Нm. + + MOV EAX, [EBP-4] + +59DC5A 8B 45 FC ЛE№ + + RET + +59DC5D C3 ├ + +EndCode + +Code RALLOT ;( n -- addr ) + +59DC5E 70 DC 59 00 00 06 52 41 4C 4C 4F 54 3A DC 59 00 p▄Y...RALLOT:▄Y. +59DC6E 00 00 .. + +; зарезервировать n ячеек на стеке возвратов, +; сделаем с инициализацией (а то если больше 8К выделим, exception может) + POP EDX + +59DC70 5A Z + + MOV ECX, EAX + +59DC71 8B C8 Л╚ + + XOR EAX, EAX + +59DC73 33 C0 3└ + +@@1: PUSH EAX + +59DC75 50 P + + DEC ECX + +59DC76 49 I + + JNZ SHORT @@1 + +59DC77 75 FC u№ + + MOV EAX, ESP + +59DC79 8B C4 Л─ + + JMP EDX + +59DC7B FF E2  т + +EndCode + +Code (RALLOT) ;( n -- ) + +59DC7D 90 DC 59 00 00 08 28 52 41 4C 4C 4F 54 29 63 DC Р▄Y...(RALLOT)c▄ +59DC8D 59 00 00 Y.. + +; зарезервировать n ячеек на стеке возвратов + POP EDX + +59DC90 5A Z + + MOV ECX, EAX + +59DC91 8B C8 Л╚ + + XOR EAX, EAX + +59DC93 33 C0 3└ + +@@1: PUSH EAX + +59DC95 50 P + + DEC ECX + +59DC96 49 I + + JNZ SHORT @@1 + +59DC97 75 FC u№ + + MOV EAX, [EBP] + +59DC99 8B 45 00 ЛE. + + LEA EBP, [EBP+4] + +59DC9C 8D 6D 04 Нm. + + JMP EDX + +59DC9F FF E2  т + +EndCode + +Code RFREE ;( n -- ) + +59DCA1 B0 DC 59 00 00 05 52 46 52 45 45 82 DC 59 00 ░▄Y...RFREEВ▄Y. + +; вернуть n ячеек стека возвратов + POP EDX + +59DCB0 5A Z + + LEA ESP, [ESP+EAX*4] + +59DCB1 8D 24 84 Н$Д + + MOV EAX, [EBP] + +59DCB4 8B 45 00 ЛE. + + LEA EBP, [EBP+4] + +59DCB7 8D 6D 04 Нm. + + JMP EDX + +59DCBA FF E2  т + +EndCode + +Code (LocalsExit) ;( -- ) + +59DCBC E0 DC 59 00 00 0C 28 4C 6F 63 61 6C 73 45 78 69 р▄Y...(LocalsExi +59DCCC 74 29 A6 DC 59 00 00 00 00 00 00 00 00 00 00 00 t)ж▄Y........... +59DCDC 00 00 00 00 .... + +; вернуть память в стек вовратов, число байт лежит на стеке + POP EBX + +59DCE0 5B [ + + ADD ESP, EBX + +59DCE1 03 E3 .у + + RET + +59DCE3 C3 ├ + +EndCode + +Code TIMER@ ;( -- tlo thi ) \ Только для Intel Pentium и выше!!! + +59DCE4 00 DD 59 00 00 06 54 49 4D 45 52 40 C1 DC 59 00 .▌Y...TIMER@┴▄Y. +59DCF4 00 00 00 00 00 00 00 00 00 00 00 00 ............ + +; Возвратить значение таймера процессора как ud + MOV [EBP-4], EAX + +59DD00 89 45 FC ЙE№ + + RDTSC + +59DD03 0F 31 .1 + + MOV [EBP-8], EDX + +59DD05 89 55 F8 ЙU° + + LEA EBP, [EBP-8] + +59DD08 8D 6D F8 Нm° + + XCHG EAX, [EBP] + +59DD0B 87 45 00 ЗE. + + RET + +59DD0E C3 ├ + +EndCode + +\ Для остальных процессоров раскомментируйте: +\ : TIMER@ 0 GetTickCount ; + +Code TRAP-CODE ;( D: j*x u R: i*x i -- i*x u ) + +59DD0F 30 DD 59 00 00 09 54 52 41 50 2D 43 4F 44 45 E9 0▌Y...TRAP-CODEщ +59DD1F DC 59 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ▄Y.............. +59DD2F 00 . + +; Вспомогательное слово для восстановления значений, сохраненных +; перед CATCH на стеке возвратов + POP EDX + +59DD30 5A Z + + POP ESI + +59DD31 5E ^ + + OR ESI, ESI + +59DD32 0B F6 .Ў + + JZ @@2 + +59DD34 0F 84 18 00 00 00 .Д.... + + LEA ESI, [ESI*4] + +59DD3A 8D 34 B5 00 00 00 00 Н4╡.... + + MOV ECX, ESI + +59DD41 8B CE Л╬ + +@@1: MOV EBX, [ESI+ESP-4] + +59DD43 8B 5C 34 FC Л\4№ + + MOV [ESI+EBP-4], EBX + +59DD47 89 5C 35 FC Й\5№ + + SUB ESI, 4 + +59DD4B 83 EE 04 Гю. + + JNZ SHORT @@1 + +59DD4E 75 F3 uє + + ADD ESP, ECX + +59DD50 03 E1 .с + +@@2: JMP EDX + +59DD52 FF E2  т + +EndCode + +DECIMAL +ZZ=D0 \ No newline at end of file diff --git a/programs/develop/SPForth/src/spf_forthproc_hl.f b/programs/develop/SPForth/src/spf_forthproc_hl.f new file mode 100644 index 0000000000..3ea7f7cf76 --- /dev/null +++ b/programs/develop/SPForth/src/spf_forthproc_hl.f @@ -0,0 +1,104 @@ +( Оставшиеся слова "форт-процессора" в виде высокоуровневых определений. + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + Преобразование из 16-разрядного в 32-разрядный код - 1995-96гг + Ревизия - сентябрь 1999 +) + +0 CONSTANT FALSE ( -- false ) \ 94 CORE EXT +\ Вернуть флаг "ложь". + +-1 CONSTANT TRUE ( -- true ) \ 94 CORE EXT +\ Вернуть флаг "истина", ячейку со всеми установленными битами. + +4 CONSTANT CELL + +: */ ( n1 n2 n3 -- n4 ) \ 94 +\ Умножить n1 на n2, получить промежуточный двойной результат d. +\ Разделить d на n3, получить частное n4. + */MOD NIP +; + +: CHAR+ ( c-addr1 -- c-addr2 ) \ 94 +\ Прибавить размер символа к c-addr1 и получить c-addr2. + 1+ +; +: CHARS ( n1 -- n2 ) \ 94 +\ n2 - размер n1 символов. +; IMMEDIATE + +: MOVE ( addr1 addr2 u -- ) \ 94 +\ Если u больше нуля, копировать содержимое u байт из addr1 в addr2. +\ После MOVE в u байтах по адресу addr2 содержится в точности то же, +\ что было в u байтах по адресу addr1 до копирования. + >R 2DUP SWAP R@ + U< \ назначение попадает в диапазон источника или левее + IF 2DUP U< \ И НЕ левее + IF R> CMOVE> ELSE R> CMOVE THEN + ELSE R> CMOVE THEN ; + +: ERASE ( addr u -- ) \ 94 CORE EXT +\ Если u больше нуля, очистить все биты каждого из u байт памяти, +\ начиная с адреса addr. + 0 FILL ; + +: BLANK ( addr len -- ) \ fill addr for len with spaces (blanks) + BL FILL ; + +: DABS ( d -- ud ) \ 94 DOUBLE +\ ud абсолютная величина d. + DUP 0< IF DNEGATE THEN +; + +255 CONSTANT MAXCOUNTED \ maximum length of contents of a counted string + +\ : 0X BASE @ HEX >R BL WORD ?LITERAL +\ R> BASE ! ; IMMEDIATE +: "CLIP" ( a1 n1 -- a1 n1' ) \ clip a string to between 0 and MAXCOUNTED + MAXCOUNTED AND ; + +: PLACE ( addr len dest -- ) + SWAP "CLIP" SWAP + 2DUP C! CHAR+ SWAP CHARS MOVE ; + +: +PLACE ( addr len dest -- ) \ append string addr,len to counted +\ string dest + >R "CLIP" MAXCOUNTED R@ C@ - MIN R> +\ clip total to MAXCOUNTED string + 2DUP 2>R + + COUNT CHARS + SWAP MOVE + 2R> +! ; + +: C+PLACE ( c1 a1 -- ) \ append char c1 to the counted string at a1 + DUP 1+! COUNT + 1- C! ; + +: STR>R ( addr u -- addr1 u) +\ Положить строку addr u на стек возвратов +\ Возвратить addr1 адрес новой строки +; + +0 VALUE DOES-CODE + +: $! ( addr len dest -- ) + PLACE ; + +: ASCII-Z ( addr len buff -- buff-z ) \ make an ascii string + DUP >R $! R> COUNT OVER + 0 SWAP C! ; + +: 0MAX 0 MAX ; + +: ASCIIZ> ZCOUNT ; + +: R> ['] C-R> INLINE, ; IMMEDIATE +: >R ['] C->R INLINE, ; IMMEDIATE + +: 2CONSTANT ( d --- ) +\ Create a new definition that has the following runtime behavior. +\ Runtime: ( --- d) push the constant double number on the stack. + CREATE HERE 2! 8 ALLOT DOES> 2@ ; + +: U/MOD 0 SWAP UM/MOD ; + +: 2NIP 2SWAP 2DROP ; + +: ON TRUE SWAP ! ; +: OFF ( a--) 0! ; diff --git a/programs/develop/SPForth/src/spf_init.f b/programs/develop/SPForth/src/spf_init.f new file mode 100644 index 0000000000..c51072b8c7 --- /dev/null +++ b/programs/develop/SPForth/src/spf_init.f @@ -0,0 +1,48 @@ +( ╚эшЎшрышчрЎш  USER-яхЁхьхээ√ї. + Copyright [C] 1992-1999 A.Cherezov ac@forth.org + ╤хэЄ сЁ№ 1999 +) + +VARIABLE MAINX + +VECT + +: TITLE + ." SP-FOPTH ANS FORTH 94 for fasm" CR + ." A.Cherezov http://www.forth.org.ru/" CR + ." M.Maksimov http://forth.spb.su:8888/ http://www.chat.ru/~mak" CR + ." PAGE - Clearing of a screen" CR + ." WORDS - list of forth-words" CR + ." BYE - KolibriOS continuance" CR +; + +: ERR-EXIT ( xt -- ) + CATCH + ?DUP IF _BYE THEN +; + +: HH. + 0x10000000 U/MOD DIGIT> EMIT + 0x1000000 U/MOD DIGIT> EMIT + 0x100000 U/MOD DIGIT> EMIT + 0x10000 U/MOD DIGIT> EMIT + 0x1000 U/MOD DIGIT> EMIT + 0x100 U/MOD DIGIT> EMIT + 0x10 U/MOD DIGIT> EMIT DIGIT> EMIT ; + +: INIT + + CURFILE 0! +[ TDIS-OPT ] + 1 ALIGN-BYTES ! + OP0 0! JP0 JpBuffSize ERASE + 0 LIT, 0x20 TO MM_SIZE SET-OPT + + TITLE + ['] AUTOEXEC CATCH ?DUP IF + ERROR_DO THEN + BEGIN + ['] QUIT CATCH ( цикл приема текста) + ERROR_DO + AGAIN +; diff --git a/programs/develop/SPForth/src/spf_last.f b/programs/develop/SPForth/src/spf_last.f new file mode 100644 index 0000000000..0806da498a --- /dev/null +++ b/programs/develop/SPForth/src/spf_last.f @@ -0,0 +1,76 @@ +DECIMAL + +\ ' DUP VALUE 'DUP_V +\ ' DROP VALUE 'DROP_V + +USER HLD \ переменная - позиция последней литеры, перенесенной в PAD + +0 VALUE H-STDIN \ хэндл файла - стандартного ввода +1 VALUE H-STDOUT \ хэндл файла - стандартного вывода +1 VALUE H-STDERR \ хэндл файла - стандартного вывода ошибок + +USER ALIGN-BYTES + +: ALIGNED ( addr -- a-addr ) \ 94 +\ a-addr - первый выровненный адрес, больший или равный addr. + ALIGN-BYTES @ DUP 0= IF 1+ DUP ALIGN-BYTES ! THEN + 2DUP + MOD DUP IF - + ELSE 2DROP THEN +; + +: ALIGN ( -- ) \ 94 +\ Если указатель пространства данных не выровнен - +\ выровнять его. + DP @ ALIGNED DP @ - ALLOT +; + +: ALIGN-NOP ( n -- ) +\ выровнять HERE на n и заполнить NOP + HERE DUP ROT 2DUP + MOD DUP IF - + ELSE 2DROP THEN + OVER - DUP ALLOT 0x90 FILL +; + +: IMMEDIATE ( -- ) \ 94 +\ Сделать последнее определение словом немедленного исполнения. +\ Исключительная ситуация возникает, если последнее определение +\ не имеет имени. + LAST @ NAME>F DUP C@ &IMMEDIATE OR SWAP C! +; + + +: :NONAME ( C: -- colon-sys ) ( S: -- xt ) \ 94 CORE EXT +\ Создать выполнимый токен xt, установить состояние компиляции и +\ начать текущее определение, произведя colon-sys. Добавить семантику +\ инициализации к текущему определению. +\ Семантика выполнения xt будет задана словами, скомпилированными +\ в тело определения. Это определение может быть позже выполнено по +\ xt EXECUTE. +\ Если управляющий стек реализован с импользованием стека данных, +\ colon-sys будет верхним элементом на стеке данных. +\ Инициализация: ( i*x -- i*x ) ( R: -- nest-sys ) +\ Сохранить зависящую от реализации информацию nest-sys о вызове +\ определения. Элементы стека i*x представляют аргументы xt. +\ xt Выполнение: ( i*x -- j*x ) +\ Выполнить определение, заданное xt. Элементы стека i*x и j*x +\ представляют аргументы и результаты xt соответственно. + HERE ] + HERE TO :-SET ; + +: INCLUDED INCLUDED_ ; + ' NOOP TO
+  ' FIND1      TO FIND
+  ' ?LITERAL2  TO ?LITERAL
+  ' ?SLITERAL2 TO ?SLITERAL
+  ' OK1        TO OK.
+  ' (ABORT1")  TO (ABORT")
+
+VECT TYPE ' _TYPE TO TYPE
+VECT EMIT ' _EMIT TO EMIT
+
+
+: H. BASE @ SWAP HEX U. BASE ! ;
+
+: TST S" /rd/1/autoload.f" INCLUDED_ ;
+: TST1 S" WORDS" EVALUATE ;
+
diff --git a/programs/develop/SPForth/src/spf_print.f b/programs/develop/SPForth/src/spf_print.f
new file mode 100644
index 0000000000..b926e5fcb7
--- /dev/null
+++ b/programs/develop/SPForth/src/spf_print.f
@@ -0,0 +1,168 @@
+( ╤ыютр ЇюЁьрЄэющ яхўрЄш ўшёхы.
+  Copyright [C] 1992-1999 A.Cherezov ac@forth.org
+  ╧ЁхюсЁрчютрэшх шч 16-ЁрчЁ фэюую т 32-ЁрчЁ фэ√щ ъюф - 1995-96уу
+  ╨хтшчш  - ёхэЄ сЁ№ 1999 [яхЁхїюф эр USER-яхЁхьхээ√х ш
+  чрьхэр CODE-ёыют т√ёюъюєЁютэхт√ьш юяЁхфхыхэш ьш]
+)
+
+4096 DUP CONSTANT NUMERIC-OUTPUT-LENGTH
+USER-CREATE SYSTEM-PAD
+USER-ALLOT \ ╬сырёЄ№ ЇюЁьрЄэюую яЁхюсЁрчютрэш  - юс чрЄхы№эю яхЁхф PAD
+
+: HEX ( -- ) \ 94 CORE EXT
+\ ╙ёЄрэютшЄ№ ёюфхЁцшьюх BASE Ёртэ√ь °хёЄэрфЎрЄш.
+  16 BASE !
+;
+
+: DECIMAL ( -- ) \ 94
+\ ╙ёЄрэютшЄ№ юёэютрэшх ёшёЄхь√ ёўшёыхэш  Ёртэ√ь фхё Єш.
+  10 BASE !
+;
+
+: HOLD ( char -- ) \ 94
+\ ─юсртшЄ№ char ъ эрўрыє ЇюЁьрЄэющ ўшёыютющ ёЄЁюъш.
+\ ╚ёъы■ўшЄхы№эр  ёшЄєрЎш  тючэшърхЄ, хёыш шёяюы№чютрЄ№ HOLD
+\ тэх <# ш #>, юуЁрэшўштр■∙штр■∙шї яЁхюсЁрчютрэшх ўшёхы.
+  HLD @ 1- DUP HLD ! C!
+;
+
+: HOLDS ( addr u -- ) \ from eserv src
+  TUCK + SWAP 0 ?DO DUP I - 1- C@ HOLD LOOP DROP
+;
+
+: <# ( -- ) \ 94
+\ ═рўрЄ№ ЇюЁьрЄэюх яЁхюсЁрчютрэшх ўшёхы.
+  PAD 1- HLD !
+  0 PAD 1- C!
+;
+
+: DIGIT> ( c -- c1 )
+ DUP 10 < 0= IF 7 + THEN 48 + ;
+
+: # ( ud1 -- ud2 ) \ 94
+\ ─хыхэшхь ud1 эр чэрўхэшх BASE т√фхышЄ№ юфэє ЎшЇЁє ё ъюэЎр ш
+\ фюсртшЄ№ хх т сєЇхЁ ЇюЁьрЄэюую яЁхюсЁрчютрэш  ўшёхы,
+\ юёЄртшт ўрёЄэюх ud2.
+\ ╚ёъы■ўшЄхы№эр  ёшЄєрЎш  тючэшърхЄ, хёыш шёяюы№чютрЄ№ #
+\ тэх <# ш #>, юуЁрэшўштр■∙штр■∙шї яЁхюсЁрчютрэшх ўшёхы.
+  0 BASE @ UM/MOD >R BASE @ UM/MOD R>
+  ROT DIGIT> HOLD
+;
+
+: #S ( ud1 -- ud2 ) \ 94
+\ ┬√фхы Є№ ЎшЇЁ√ D1 яю ёыютє # фю яюыєўхэш  эєы .
+\ ud2 - эюы№.
+\ ╚ёъы■ўшЄхы№эр  ёшЄєрЎш  тючэшърхЄ, хёыш шёяюы№чютрЄ№ #S
+\ тэх <# ш #>, юуЁрэшўштр■∙штр■∙шї яЁхюсЁрчютрэшх ўшёхы.
+  BEGIN
+    # 2DUP D0=
+  UNTIL
+;
+
+: #> ( xd -- c-addr u ) \ 94
+\ ╙сЁрЄ№ xd. ╤фхырЄ№ сєЇхЁ ЇюЁьрЄэюую яЁхюсЁрчютрэш  фюёЄєяэ√ь т тшфх
+\ ёЄЁюъш ёшьтюыют, чрфрээющ c-addr ш u.
+\ ╧ЁюуЁрььр ьюцхЄ ьхэ Є№ ёшьтюы√ т ¤Єющ ёЄЁюъх.
+  2DROP HLD @ PAD OVER - 1-
+;
+
+: SIGN ( n -- ) \ 94
+\ ┼ёыш n юЄЁшЎрЄхы№эю, фюсртшЄ№ т ёЄЁюъє ЇюЁьрЄэюую яЁхюсЁрчютрэш 
+\ ўшёхы ьшэєё.
+\ ╚ёъы■ўшЄхы№эр  ёшЄєрЎш  тючэшърхЄ, хёыш шёяюы№чютрЄ№ SIGN
+\ тэх <# ш #>, юуЁрэшўштр■∙штр■∙шї яЁхюсЁрчютрэшх ўшёхы.
+  0< IF [CHAR] - HOLD THEN
+;
+
+: (D.)  ( d -- addr len )  DUP >R DABS <# #S R> SIGN #> ;
+
+: D.    ( d -- )   (D.) TYPE SPACE ;
+
+: . ( n -- )   S>D D. ;
+
+: D.R ( d w -- )   >R (D.) R> OVER - 0MAX SPACES TYPE ;
+
+: .R  ( n w -- )   >R  S>D  R>  D.R ;
+
+: U.R ( u w -- )   0 SWAP D.R ;
+
+: U. ( u -- ) \ 94
+\ ═ряхўрЄрЄ№ u т ётюсюфэюь ЇюЁьрЄх.
+  U>D D.
+;
+
+: .0
+  >R 0 <# #S #> R> OVER - 0 MAX DUP 
+    IF 0 DO [CHAR] 0 EMIT LOOP
+    ELSE DROP THEN TYPE 
+;
+
+: >PRT
+  DUP BL U< IF DROP [CHAR] . THEN
+;
+
+: PTYPE
+  0 DO DUP C@ >PRT EMIT 1+ LOOP DROP
+;
+
+: DUMP ( addr u -- ) \ 94 TOOLS
+  DUP 0= IF 2DROP EXIT THEN
+  BASE @ >R HEX
+  15 + 16 U/ 0 DO
+    CR DUP 4 .0 SPACE
+    SPACE DUP 16 0
+      DO I 4 MOD 0= IF SPACE THEN
+        DUP C@ 2 .0 SPACE 1+
+      LOOP SWAP 16  PTYPE
+  LOOP DROP R> BASE !
+;
+
+: (.") ( T -> )
+  COUNT TYPE
+;
+\ ' (.") TO (.")-CODE
+
+: DIGIT ( C, N1 ->> N2, TF / FF )
+\ N2 - чэрўхэшх ышЄхЁ√ C ъръ
+\ ЎшЇЁ√ т ёшёЄхьх ёўшёыхэш  яю юёэютрэш■ N1
+   >R
+   [CHAR] 0 - 10 OVER U<
+   IF 
+      DUP [CHAR] A [CHAR] 0 -     < IF  RDROP DROP 0 EXIT      THEN
+      DUP [CHAR] a [CHAR] 0 -  1- > IF [CHAR] a  [CHAR] A - -  THEN
+          [CHAR] A [CHAR] 0 - 10 - -
+   THEN R> OVER U> DUP 0= IF NIP THEN ;
+
+: >NUMBER ( ud1 c-addr1 u1 -- ud2 c-addr2 u2 ) \ 94
+\ ud2 - Ёхчєы№ЄрЄ яЁхюсЁрчютрэш  ёшьтюыют ёЄЁюъш, чрфрээющ c-addr1 u1,
+\ т ЎшЇЁ√, шёяюы№чє  ўшёыю т BASE, ш фюсртыхэшхь ърцфющ ъ ud1 яюёых
+\ єьэюцхэш  ud1 эр ўшёыю т BASE. ╧ЁхюсЁрчютрэшх яЁюфюыцрхЄё  ёыхтр
+\ эряЁртю фю яхЁтюую эхяЁхюсЁрчєхьюую ёшьтюыр, тъы■ўр  ёшьтюы√ "+" ш "-",
+\ шыш фю яюыэюую яЁхюсЁрчютрэш  ёЄЁюъш.
+\ c-addr2 - рфЁхё яхЁтюую эхяЁхюсЁрчєьюую ёшьтюыр шыш яхЁтюую ёшьтюыр
+\ чр ъюэЎюь ёЄЁюъш, хёыш ёЄЁюър с√ыр яюыэюёЄ№■ яЁхюсЁрчютрэр.
+\ u2 - ўшёыю эхяЁхюсЁрчютрээ√ї ёшьтюыют т ёЄЁюъх.
+\ ═хюфэючэрўэр  ёшЄєрЎш  тючэшърхЄ, хёыш ud2 яхЁхяюыэ хЄё  тю тЁхь 
+\ яЁхюсЁрчютрэш .
+  BEGIN
+    DUP
+  WHILE
+    >R
+    DUP >R
+    C@ BASE @ DIGIT 0=     \ ud n flag
+    IF R> R> EXIT THEN     \ ud n  ( ud = udh udl )
+    SWAP BASE @ UM* DROP   \ udl n udh*base
+    ROT BASE @ UM* D+      \ (n udh*base)+(udl*baseD)
+    R> 1+ R> 1-
+  REPEAT
+;
+
+: SCREEN-LENGTH ( addr n -- n1 ) \ ¤ъЁрээр -фышэр
+\ фрЄ№ фышэє ёЄЁюъш яЁш т√тюфх (яЁш яхўрЄш)
+\  - ўшёыю чэръюьхёЄ, ъюЄюЁюх ёЄЁюър чрщьхЄ эр ¤ъЁрэх.
+\ addr n  - ёЄЁюър. n1 ўшёыю чэръюьхёЄ эр ¤ъЁрэ.
+  0 -ROT OVER + SWAP ?DO
+    I C@ 9 = IF 3 RSHIFT 1+ 3 LSHIFT
+    ELSE 1+ THEN
+  LOOP
+;
diff --git a/programs/develop/SPForth/src/tc_spfopt.f b/programs/develop/SPForth/src/tc_spfopt.f
new file mode 100644
index 0000000000..588f669dc5
--- /dev/null
+++ b/programs/develop/SPForth/src/tc_spfopt.f
@@ -0,0 +1,93 @@
+ REQUIRE INCLUDED_L ~mak/listing3.f 
+
+0 VALUE TOUSER-VALUE-CODE
+0 VALUE ---CODE
+
+0 VALUE DO-OFF
+0 VALUE ?DO-OFF
+
+0 VALUE OFF-LOOP
+0 VALUE OFF-+LOOP
+
+0 VALUE 'DUP_V
+0 VALUE 'DROP_V
+
+' DUP  TO 'DUP_V
+' DROP TO 'DROP_V
+
+:  'DUP  'DUP_V ;
+: 'DROP 'DROP_V ;
+
+: M\  POSTPONE \  ; IMMEDIATE
+: OS\ ( POSTPONE \) ; IMMEDIATE
+
+: [>T]  ; IMMEDIATE
+:  >T   ; IMMEDIATE
+
+TRUE VALUE J_OPT?
+: TT ;
+S" src/macroopt.f" INCLUDED
+
+: TSET-OPT SET-OPT ;
+: TDIS-OPT DIS-OPT ;
+: TOMM_SIZE TO MM_SIZE ;
+
+REQUIRE GTYPE ~mak/djgpp/gdis.f
+
+ TRUE TO ?C-JMP
+\ 0    TO ?C-JMP
+
+: TC-COMPILE,  \ 94 CORE EXT
+\ ╚эЄхЁяЁхЄрЎш : ёхьрэЄшър эх юяЁхфхыхэр.
+\ ┬√яюыэхэшх: ( xt -- )
+\ ─юсртшЄ№ ёхьрэЄшъє т√яюыэхэш  юяЁхфхыхэш , яЁхфёЄртыхэюую xt, ъ
+\ ёхьрэЄшъх т√яюыэхэш  Єхъє∙хую юяЁхфхыхэш .
+    CON>LIT 
+    IF  INLINE?
+      IF     INLINE,
+      ELSE   _COMPILE,
+      THEN
+    THEN
+;
+
+: _DABS ( d -- ud ) \ 94 DOUBLE
+\ ud рсёюы■Єэр  тхышўшэр d.
+  DUP 0< IF DNEGATE THEN
+;
+
+ 0xE9 ' COMPILE, C! 
+ ' TC-COMPILE, ' COMPILE, - 5 -  ' COMPILE, 1+ !
+
+
+: DABS ( d -- ud ) \ 94 DOUBLE
+\ ud рсёюы■Єэр  тхышўшэр d.
+  DUP 0< IF DNEGATE THEN
+;
+
+0 VALUE TSAVE_LIMIT
+
+: TSAVE (  ADDR LEN -- )
+ H-STDOUT  >R R/W CREATE-FILE  THROW TO H-STDOUT
+  UNIX-LINES
+ CR ." MUSEROFFS EQU " USER-HERE RESERVE - 2 MAX .
+ CR
+ HERE >R
+ CONTEXT @ @
+ BEGIN
+ CR ." AHEADER "
+ DUP 1- C@ .   ." ,"
+ DUP COUNT ATYPE ." ,"
+ DUP COUNT GTYPE
+ CR
+ R> OVER NAME> GDIS
+ DUP NAME>C >R
+ CDR 
+ DUP TSAVE_LIMIT U<
+ UNTIL DROP RDROP CR
+ H-STDOUT CLOSE-FILE  THROW R> TO H-STDOUT 
+;
+
+: RN> CHAR SWAP WordByAddr DROP C! ;
+
+' CR CONSTANT '_CR
+