home *** CD-ROM | disk | FTP | other *** search
/ Jason Aller Floppy Collection / 189.img / TCS120S.ZIP / CRCCHECK.ASM < prev    next >
Assembly Source File  |  1989-03-23  |  46KB  |  1,901 lines

  1.   
  2. PAGE  59,132
  3.   
  4. ;██████████████████████████████████████████████████████████████████████████
  5. ;██                                         ██
  6. ;██                    CRCHECK                         ██
  7. ;██                                         ██
  8. ;██      Created:   11-Jan-89                             ██
  9. ;██      Passes:    5           Analysis Flags on: H                 ██
  10. ;██                                         ██
  11. ;██████████████████████████████████████████████████████████████████████████
  12.   
  13. data_1e        equ    2Ch            ; (0016:002C=0)
  14. data_2e        equ    8            ; (00F4:0008=0CBE8h)
  15. data_3e        equ    1B6h            ; (00F4:01B6=1E75h)
  16. data_4e        equ    344h            ; (00F4:0344=28Bh)
  17. data_5e        equ    346h            ; (00F4:0346=7332h)
  18. data_6e        equ    348h            ; (00F4:0348=2E09h)
  19. data_7e        equ    200Ch            ; (00F4:200C=0)
  20. data_8e        equ    200Eh            ; (00F4:200E=5D40h)
  21. data_9e        equ    2010h            ; (00F4:2010=1402h)
  22. data_10e    equ    2012h            ; (00F4:2012=0)
  23. data_11e    equ    2013h            ; (00F4:2013=0)
  24. data_12e    equ    201Ch            ; (00F4:201C=0)
  25. data_13e    equ    7Ch            ; (7E60:007C=0)
  26. data_14e    equ    1B6h            ; (7E60:01B6=0B83Eh)
  27. data_15e    equ    1B8h            ; (7E60:01B8=0FC01h)
  28. data_16e    equ    1BAh            ; (7E60:01BA=0BCA1h)
  29. data_17e    equ    1BCh            ; (7E60:01BC=0AB01h)
  30. data_18e    equ    2DEh            ; (7E60:02DE=0Ah)
  31. data_19e    equ    31Eh            ; (7E60:031E=8404h)
  32. data_20e    equ    320h            ; (7E60:0320=75C0h)
  33. data_21e    equ    0F454h            ; (7E60:F454=0)
  34. data_22e    equ    0FF99h            ; (7E60:FF99=0)
  35. data_40e    equ    0D171h            ; (7FAD:D171=0)
  36.   
  37. ;--------------------------------------------------------------    seg_a  ----
  38.   
  39. seg_a        segment    para public
  40.         assume cs:seg_a , ds:seg_a , ss:stack_seg_c
  41.   
  42.         db    43h, 47h, 0B8h, 0F4h, 0, 8Eh
  43.         db    0C0h, 8Dh, 26h, 0, 1, 0FCh
  44.         db    8Dh, 36h, 80h, 0, 8Dh, 3Eh
  45.         db    0Ah, 1, 0ACh, 98h, 8Bh, 0C8h
  46.         db    0F3h, 0A4h, 0B0h, 0, 0AAh, 0B8h
  47.         db    0F4h, 0, 8Ch, 0DBh, 2Bh, 0C3h
  48.         db    40h, 50h, 26h, 3, 6, 0BEh
  49.         db    1, 8Bh, 0D8h, 8Ch, 0D8h, 8Eh
  50.         db    0C0h, 0B4h, 4Ah, 0CDh, 21h, 5Ah
  51.         db    73h, 8, 3Ch, 8, 75h, 34h
  52.         db    0B4h, 4Ah, 0CDh, 21h, 2Bh, 0DAh
  53.         db    0B1h, 4, 0D3h, 0E3h, 0B8h, 0F4h
  54.         db    0, 8Eh, 0D0h, 8Bh, 0E3h, 8Eh
  55.         db    0C0h, 8Eh, 0D8h, 0B8h, 29h, 1
  56.         db    2Dh, 0F4h, 0, 0D3h, 0E0h, 0A3h
  57.         db    0B6h, 1, 0A3h, 0B8h, 1, 0E8h
  58.         db    79h, 1, 8Dh, 6, 0Ah, 0
  59.         db    50h, 0FFh, 36h, 8, 0, 0E8h
  60.         db    0DBh, 1, 0EBh, 10h, 8Dh, 1Eh
  61.         db    9Bh, 1, 0B8h, 2, 0, 0E8h
  62.         db    0B9h, 1, 0B4h, 4Ch, 0B0h, 1
  63.         db    0CDh
  64.         db    21h
  65.   
  66. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  67. ;                   SUBROUTINE
  68. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  69.   
  70. sub_1        proc    near
  71. loc_2:
  72.         pop    di
  73.         pop    ax
  74.         mov    ah,4Ch            ; 'L'
  75.         int    21h            ; DOS Services  ah=function 4Ch
  76.                         ;  terminate with al=return code
  77. loc_3:
  78.         lea    bx,cs:[18Ah]        ; Load effective addr
  79.         mov    ax,2
  80.         call    sub_4            ; (0233)
  81.         mov    ax,0Ah
  82.         push    ax
  83.         call    sub_1            ; (0080)
  84.         push    bp
  85.         mov    bp,sp
  86.         push    si
  87.         push    di
  88. loc_4:
  89.         mov    bx,[bp+4]
  90.         add    bx,4
  91.         mov    dx,bx
  92.         add    bx,ds:data_15e        ; (7E60:01B8=0FC01h)
  93.         jc    loc_6            ; Jump if carry Set
  94.         mov    si,400h
  95.         add    si,bx
  96.         jc    loc_6            ; Jump if carry Set
  97.         cmp    si,sp
  98.         jae    loc_6            ; Jump if above or =
  99.         mov    di,ds:data_15e        ; (7E60:01B8=0FC01h)
  100.         cld                ; Clear direction
  101.         mov    ax,ds:data_17e        ; (7E60:01BC=0AB01h)
  102.         stosw                ; Store ax to es:[di]
  103.         mov    ax,dx
  104.         stosw                ; Store ax to es:[di]
  105.         mov    ax,ds:data_15e        ; (7E60:01B8=0FC01h)
  106.         mov    ds:data_17e,ax        ; (7E60:01BC=0AB01h)
  107.         mov    ds:data_15e,bx        ; (7E60:01B8=0FC01h)
  108.         mov    ax,di
  109. loc_5:
  110.         pop    di
  111.         pop    si
  112.         mov    sp,bp
  113.         pop    bp
  114.         retn
  115. loc_6:
  116.         lea    di,cs:[1BAh]        ; Load effective addr
  117. loc_7:
  118.         mov    si,[di]
  119.         test    si,si
  120.         jz    loc_12            ; Jump if zero
  121.         mov    ax,[si+2]
  122.         cmp    dx,ax
  123.         jb    loc_8            ; Jump if below
  124.         jz    loc_11            ; Jump if zero
  125.         mov    di,si
  126.         jmp    short loc_7        ; (00D7)
  127. loc_8:
  128.         mov    ax,[si+2]
  129.         sub    ax,dx
  130.         cmp    ax,0Ah
  131.         jb    loc_10            ; Jump if below
  132.         mov    [si+2],ax
  133.         add    si,[si+2]
  134. loc_9:
  135.         mov    ax,ds:data_17e        ; (7E60:01BC=0AB01h)
  136.         mov    [si],ax
  137.         mov    [si+2],dx
  138.         mov    ds:data_17e,si        ; (7E60:01BC=0AB01h)
  139.         add    si,4
  140.         mov    ax,si
  141.         jmp    short loc_5        ; (00CD)
  142. loc_10:
  143.         mov    dx,[si+2]
  144. loc_11:
  145.         mov    ax,[si]
  146.         mov    [di],ax
  147.         jmp    short loc_9        ; (00FA)
  148. loc_12:
  149.         call    sub_2            ; (0172)
  150.         test    ax,ax
  151.         jz    loc_5            ; Jump if zero
  152.         jmp    loc_4            ; (009C)
  153. sub_1        endp
  154.   
  155.         db    55h, 8Bh, 0ECh, 8Bh, 46h, 4
  156.         db    0F7h, 66h, 6, 50h, 0E8h, 6Ah
  157.         db    0FFh, 8Bh, 0E5h, 5Dh, 0C3h, 55h
  158.         db    8Bh, 0ECh, 56h, 57h, 8Bh, 46h
  159.         db    4, 8Dh, 3Eh, 0BCh, 1, 2Dh
  160.         db    4, 0
  161. loc_13:
  162.         mov    si,[di]
  163.         test    si,si
  164.         jz    loc_16            ; Jump if zero
  165.         cmp    ax,si
  166.         je    loc_14            ; Jump if equal
  167.         mov    di,si
  168.         jmp    short loc_13        ; (0140)
  169. loc_14:
  170.         mov    ax,[si]
  171.         mov    [di],ax
  172.         mov    ax,[si+2]
  173.         add    ax,si
  174.         cmp    ax,ds:data_15e        ; (7E60:01B8=0FC01h)
  175.         jne    loc_15            ; Jump if not equal
  176.         mov    ds:data_15e,si        ; (7E60:01B8=0FC01h)
  177.         jmp    short loc_16        ; (016C)
  178. loc_15:
  179.         mov    ax,ds:data_16e        ; (7E60:01BA=0BCA1h)
  180.         mov    [si],ax
  181.         mov    ds:data_16e,si        ; (7E60:01BA=0BCA1h)
  182. loc_16:
  183.         pop    di
  184.         pop    si
  185.         mov    sp,bp
  186.         pop    bp
  187.         retn
  188.   
  189. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  190. ;                   SUBROUTINE
  191. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  192.   
  193. sub_2        proc    near
  194.         xor    dl,dl            ; Zero register
  195.         mov    di,ds:data_16e        ; (7E60:01BA=0BCA1h)
  196.         test    di,di
  197.         jnz    loc_17            ; Jump if not zero
  198.         xor    ax,ax            ; Zero register
  199.         retn
  200. loc_17:
  201.         mov    ax,[di+2]
  202.         add    ax,di
  203.         push    di
  204.         lea    di,cs:[1BAh]        ; Load effective addr
  205. loc_18:
  206.         mov    si,[di]
  207.         test    si,si
  208.         jz    loc_20            ; Jump if zero
  209.         cmp    ax,si
  210.         jne    loc_19            ; Jump if not equal
  211.         mov    bx,[si]
  212.         mov    [di],bx
  213.         mov    bx,[si+2]
  214.         pop    di
  215.         add    [di+2],bx
  216.         or    dl,1
  217.         jmp    short loc_17        ; (017F)
  218. loc_19:
  219.         mov    di,[si]
  220.         test    di,di
  221.         jnz    loc_18            ; Jump if not zero
  222. loc_20:
  223.         pop    di
  224.         mov    di,[di]
  225.         test    di,di
  226.         jnz    loc_17            ; Jump if not zero
  227. loc_21:
  228.         lea    di,cs:[1BAh]        ; Load effective addr
  229. loc_22:
  230.         mov    si,[di]
  231.         test    si,si
  232.         jz    loc_24            ; Jump if zero
  233.         mov    ax,[si+2]
  234.         add    ax,si
  235.         cmp    ax,ds:data_15e        ; (7E60:01B8=0FC01h)
  236.         jne    loc_23            ; Jump if not equal
  237.         or    dl,2
  238.         mov    ds:data_15e,si        ; (7E60:01B8=0FC01h)
  239.         mov    ax,[si]
  240.         mov    [di],ax
  241.         jmp    short loc_21        ; (01B0)
  242. loc_23:
  243.         mov    di,si
  244.         jmp    short loc_22        ; (01B4)
  245. loc_24:
  246.         mov    al,dl
  247.         xor    ah,ah            ; Zero register
  248.         retn
  249. sub_2        endp
  250.   
  251.   
  252. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  253. ;                   SUBROUTINE
  254. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  255.   
  256. sub_3        proc    near
  257.         cld                ; Clear direction
  258.         lea    di,cs:[0Ah]        ; Load effective addr
  259.         mov    dx,1
  260.         xor    ax,ax            ; Zero register
  261.         stosw                ; Store ax to es:[di]
  262.         lea    si,cs:[10Ah]        ; Load effective addr
  263.         test    byte ptr [si],0FFh
  264.         jz    loc_30            ; Jump if zero
  265. loc_25:
  266.         lodsb                ; String [si] to al
  267.         test    al,al
  268.         jz    loc_30            ; Jump if zero
  269.         cmp    al,20h            ; ' '
  270.         je    loc_25            ; Jump if equal
  271.         cmp    al,9
  272.         je    loc_25            ; Jump if equal
  273.         lea    ax,[si-1]        ; Load effective addr
  274.         stosw                ; Store ax to es:[di]
  275.         inc    dx
  276.         cmp    byte ptr [si-1],22h    ; '"'
  277.         jne    loc_28            ; Jump if not equal
  278.         push    si
  279. loc_26:
  280.         lodsb                ; String [si] to al
  281.         cmp    al,22h            ; '"'
  282.         je    loc_27            ; Jump if equal
  283.         test    al,al
  284.         jnz    loc_26            ; Jump if not zero
  285.         pop    si
  286.         jmp    short loc_28        ; (021A)
  287. loc_27:
  288.         inc    word ptr [di-2]
  289.         pop    ax
  290.         jmp    short loc_29        ; (0223)
  291. loc_28:
  292.         lodsb                ; String [si] to al
  293.         cmp    al,20h            ; ' '
  294.         je    loc_29            ; Jump if equal
  295.         test    al,al
  296.         jnz    loc_28            ; Jump if not zero
  297. loc_29:
  298.         mov    byte ptr [si-1],0
  299.         test    al,al
  300.         jnz    loc_25            ; Jump if not zero
  301. loc_30:
  302.         xor    ax,ax            ; Zero register
  303.         stosw                ; Store ax to es:[di]
  304.         mov    ds:data_2e,dx        ; (00F4:0008=0CBE8h)
  305.         retn
  306. sub_3        endp
  307.   
  308.   
  309. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  310. ;                   SUBROUTINE
  311. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  312.   
  313. sub_4        proc    near
  314.         mov    cx,0FFFFh
  315.         mov    di,bx
  316.         push    ax
  317.         cld                ; Clear direction
  318.         mov    al,0
  319.         repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  320.         not    cx
  321.         dec    cx
  322.         mov    dx,bx
  323.         pop    bx
  324.         mov    ah,40h            ; '@'
  325.         int    21h            ; DOS Services  ah=function 40h
  326.                         ;  write file cx=bytes, to ds:dx
  327.         retn
  328. sub_4        endp
  329.   
  330.   
  331. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  332. ;                   SUBROUTINE
  333. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  334.   
  335. sub_5        proc    near
  336.         push    bp
  337.         sub    sp,48h
  338.         jc    loc_31            ; Jump if carry Set
  339.         cmp    sp,ds:data_3e        ; (00F4:01B6=1E75h)
  340.         ja    loc_32            ; Jump if above
  341. loc_31:
  342.         jmp    loc_3            ; (0086)
  343. loc_32:
  344.         mov    bp,sp
  345.         mov    ax,1C0h
  346.         push    ax
  347.         call    sub_13            ; (0C20)
  348.         mov    sp,bp
  349.         mov    ax,1
  350.         cmp    word ptr [bp+4Ch],1
  351.         mov    [bp+44h],ax
  352.         jg    loc_33            ; Jump if >
  353.         mov    ax,1FBh
  354.         push    ax
  355.         mov    ax,2
  356.         push    ax
  357.         call    sub_14            ; (0C3E)
  358.         mov    sp,bp
  359.         mov    ax,1
  360.         push    ax
  361.         call    sub_1            ; (0080)
  362.         mov    sp,bp
  363. loc_33:
  364.         mov    word ptr [bp+42h],1
  365. loc_34:
  366.         mov    ax,[bp+42h]
  367.         mov    bx,[bp+4Ch]
  368.         cmp    bx,ax
  369.         jle    loc_38            ; Jump if < or =
  370.         shl    ax,1            ; Shift w/zeros fill
  371.         mov    si,[bp+4Eh]
  372.         add    si,ax
  373.         mov    ax,[si]
  374.         mov    [bp+46h],ax
  375. loc_35:
  376.         lea    ax,[bp+2]        ; Load effective addr
  377.         push    ax
  378.         xor    ax,ax            ; Zero register
  379.         push    ax
  380.         push    word ptr [bp+46h]
  381.         call    sub_8            ; (0613)
  382.         mov    sp,bp
  383.         test    ax,ax
  384.         jz    loc_37            ; Jump if zero
  385.         xor    ax,ax            ; Zero register
  386.         mov    [bp+46h],ax
  387.         cmp    word ptr [bp+44h],0
  388.         je    loc_36            ; Jump if equal
  389.         mov    bx,27Bh
  390.         push    bx
  391.         mov    bx,270h
  392.         push    bx
  393.         mov    bx,266h
  394.         push    bx
  395.         mov    bx,25Fh
  396.         push    bx
  397.         mov    bx,254h
  398.         push    bx
  399.         mov    bx,249h
  400.         push    bx
  401.         mov    bx,23Fh
  402.         push    bx
  403.         mov    bx,238h
  404.         push    bx
  405.         mov    bx,215h
  406.         push    bx
  407.         mov    [bp+44h],ax
  408.         call    sub_13            ; (0C20)
  409.         mov    sp,bp
  410. loc_36:
  411.         lea    ax,[bp+2]        ; Load effective addr
  412.         push    ax
  413.         call    sub_6            ; (0310)
  414.         mov    sp,bp
  415.         jmp    short loc_35        ; (02A0)
  416. loc_37:
  417.         inc    word ptr [bp+42h]
  418.         jmp    short loc_34        ; (028A)
  419. loc_38:
  420.         mov    ax,286h
  421.         push    ax
  422.         call    sub_13            ; (0C20)
  423.         mov    sp,bp
  424.         xor    ax,ax            ; Zero register
  425.         push    ax
  426.         call    sub_1            ; (0080)
  427.         mov    sp,bp
  428.         add    sp,48h
  429.         pop    bp
  430.         retn
  431. sub_5        endp
  432.   
  433.   
  434. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  435. ;                   SUBROUTINE
  436. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  437.   
  438. sub_6        proc    near
  439.         push    bp
  440.         sub    sp,2018h
  441.         jc    loc_39            ; Jump if carry Set
  442.         cmp    sp,ds:data_14e        ; (7E60:01B6=0B83Eh)
  443.         ja    loc_40            ; Jump if above
  444. loc_39:
  445.         jmp    loc_3            ; (0086)
  446. loc_40:
  447.         mov    bp,sp
  448.         xor    ax,ax            ; Zero register
  449.         push    ax
  450.         push    word ptr ss:data_12e[bp]    ; (00F4:201C=0)
  451.         call    sub_9            ; (075F)
  452.         mov    sp,bp
  453.         test    ax,ax
  454.         mov    [bp+6],ax
  455.         jns    loc_41            ; Jump if not sign
  456.         push    word ptr ss:data_12e[bp]    ; (00F4:201C=0)
  457.         mov    ax,288h
  458.         push    ax
  459.         mov    ax,2
  460.         push    ax
  461.         call    sub_14            ; (0C3E)
  462.         mov    sp,bp
  463.         add    sp,2018h
  464.         pop    bp
  465.         retn
  466. loc_41:
  467.         mov    word ptr ss:data_8e[bp],0    ; (00F4:200E=4E26h)
  468.         mov    word ptr ss:data_7e[bp],0    ; (00F4:200C=4E23h)
  469.         mov    word ptr [bp+0Ah],0
  470. loc_42:
  471.         mov    ax,2000h
  472.         push    ax
  473.         lea    ax,[bp+0Ch]        ; Load effective addr
  474.         push    ax
  475.         push    word ptr [bp+6]
  476.         call    sub_11            ; (0792)
  477.         mov    sp,bp
  478.         xor    bx,bx            ; Zero register
  479.         test    ax,ax
  480.         jns    loc_43            ; Jump if not sign
  481.         dec    bx
  482. loc_43:
  483.         add    ss:data_7e[bp],ax    ; (00F4:200C=4E23h)
  484.         adc    ss:data_8e[bp],bx    ; (00F4:200E=4E26h)
  485.         mov    [bp+8],ax
  486.         test    ax,ax
  487.         jz    loc_44            ; Jump if zero
  488.         push    word ptr [bp+0Ah]
  489.         push    ax
  490.         lea    ax,[bp+0Ch]        ; Load effective addr
  491.         push    ax
  492.         call    sub_7            ; (03E7)
  493.         mov    sp,bp
  494.         mov    [bp+0Ah],ax
  495. loc_44:
  496.         cmp    word ptr [bp+8],2000h
  497.         je    loc_42            ; Jump if equal
  498.         jmp    short loc_45        ; (039C)
  499. loc_45:
  500.         lea    ax,[bp+2010h]        ; Load effective addr
  501.         push    ax
  502.         push    word ptr ss:data_12e[bp]    ; (00F4:201C=0)
  503.         call    sub_12            ; (0911)
  504.         mov    sp,bp
  505.         mov    al,ss:data_10e[bp]    ; (00F4:2012=44h)
  506.         xor    ah,ah            ; Zero register
  507.         mov    bl,ss:data_11e[bp]    ; (00F4:2013=0Bh)
  508.         xor    bh,bh            ; Zero register
  509.         mov    cx,ss:data_9e[bp]    ; (00F4:2010=40EAh)
  510.         sub    cx,76Ch
  511.         push    cx
  512.         push    bx
  513.         push    ax
  514.         push    word ptr ss:data_8e[bp]    ; (00F4:200E=4E26h)
  515.         push    word ptr ss:data_7e[bp]    ; (00F4:200C=4E23h)
  516.         push    word ptr [bp+0Ah]
  517.         push    word ptr ss:data_12e[bp]    ; (00F4:201C=0)
  518.         mov    ax,29Ah
  519.         push    ax
  520.         call    sub_13            ; (0C20)
  521.         mov    sp,bp
  522.         push    word ptr [bp+6]
  523.         call    sub_10            ; (077C)
  524.         mov    sp,bp
  525.         add    sp,2018h
  526.         pop    bp
  527.         retn
  528. sub_6        endp
  529.   
  530.   
  531. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  532. ;                   SUBROUTINE
  533. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  534.   
  535. sub_7        proc    near
  536.         push    bp
  537.         mov    bp,sp
  538.         mov    si,[bp+4]
  539.         mov    cx,[bp+6]
  540.         cld                ; Clear direction
  541.         mov    dx,[bp+8]
  542.   
  543. locloop_46:
  544.         lodsb                ; String [si] to al
  545.         xor    al,dh
  546.         mov    bl,al
  547.         xor    bh,bh            ; Zero register
  548.         lea    bx,[bx+413h]        ; Load effective addr
  549.         mov    al,cs:[bx]
  550.         xor    al,dl
  551.         mov    dh,al
  552.         inc    bh
  553.         mov    dl,cs:[bx]
  554.         loop    locloop_46        ; Loop if cx > 0
  555.   
  556.         mov    ax,dx
  557.         mov    sp,bp
  558.         pop    bp
  559.         retn
  560. sub_7        endp
  561.   
  562.         db    0, 0A0h, 0E1h, 41h, 63h, 0C3h
  563.         db    82h, 22h, 0C7h, 67h, 26h, 86h
  564.         db    0A4h, 4, 45h, 0E5h, 2Fh, 8Fh
  565.         db    0CEh, 6Eh, 4Ch, 0ECh, 0ADh, 0Dh
  566.         db    0E8h, 48h, 9, 0A9h, 8Bh, 2Bh
  567.         db    6Ah, 0CAh, 5Eh, 0FEh, 0BFh, 1Fh
  568.         db    3Dh
  569. loc_47:
  570.         popf                ; Pop flags
  571. ;*        esc    4,ds:data_22e[si]    ; (7E60:FF99=0)
  572.         db    0DCh, low data_13e    ; Fixup for MASM (Z)
  573.         cwd                ; Word to double word
  574.         cmp    [bx+si-28h],di
  575.         cli                ; Disable interrupts
  576.         pop    dx
  577.         sbb    di,ss:data_40e[bp+di]    ; (7FAD:D171=0)
  578.         nop
  579.         xor    [bp+si],dl
  580.         mov    dl,0F3h
  581.         push    bx
  582.         mov    dh,16h
  583.         push    di
  584.         not    bp
  585. ;*        jnz    loc_48            ;*Jump if not zero
  586.         db    75h, 34h
  587.         xchg    ax,sp
  588.         mov    sp,5D1Ch
  589.         std                ; Set direction flag
  590.         esc    7,[bx+3Eh]
  591.         db    3Eh            ; ds:
  592.         sahf                ; Store ah into flags
  593.         jnp    loc_47            ; Jump if not parity
  594. ;*        call    far ptr sub_18        ;*(F9B8:183A)
  595.         db    9Ah, 3Ah, 18h, 0B8h, 0F9h
  596.         pop    cx
  597.         xchg    ax,bx
  598.         xor    si,[bp+si-2Eh]
  599.       ;*** ***  lock                            ; Lock the bus
  600.         push    ax
  601.         adc    ds:data_21e[bx+di],si    ; (7E60:F454=0)
  602.         mov    ch,15h
  603.         aaa                ; Ascii adjust
  604.         xchg    ax,di
  605.         db    0D6h, 76h, 0E2h, 42h, 3, 0A3h
  606.         db    81h, 21h, 60h, 0C0h, 25h, 85h
  607.         db    0C4h, 64h, 46h, 0E6h, 0A7h, 7
  608.         db    0CDh
  609.         db    6Dh, 2Ch
  610. loc_48:
  611.         db    8Ch, 0AEh, 0Eh, 4Fh, 0EFh, 0Ah
  612.         db    0AAh, 0EBh, 4Bh, 69h, 0C9h, 88h
  613.         db    28h, 0D8h, 78h, 39h, 99h, 0BBh
  614.         db    1Bh, 5Ah, 0FAh, 1Fh, 0BFh, 0FEh
  615.         db    5Eh, 7Ch, 0DCh, 9Dh, 3Dh, 0F7h
  616.         db    57h, 16h, 0B6h, 94h, 34h, 75h
  617.         db    0D5h, 30h, 90h, 0D1h, 71h, 53h
  618.         db    0F3h, 0B2h, 12h, 86h, 26h, 67h
  619.         db    0C7h, 0E5h, 45h, 4, 0A4h, 41h
  620.         db    0E1h, 0A0h, 0, 22h, 82h, 0C3h
  621.         db    63h, 0A9h, 9, 48h, 0E8h, 0CAh
  622.         db    6Ah, 2Bh, 8Bh, 6Eh, 0CEh, 8Fh
  623.         db    2Fh, 0Dh, 0ADh, 0ECh, 4Ch, 64h
  624.         db    0C4h, 85h, 25h, 7, 0A7h, 0E6h
  625.         db    46h, 0A3h, 3, 42h, 0E2h, 0C0h
  626.         db    60h, 21h, 81h, 4Bh, 0EBh, 0AAh
  627.         db    0Ah, 28h, 88h, 0C9h, 69h, 8Ch
  628.         db    2Ch, 6Dh, 0CDh, 0EFh, 4Fh, 0Eh
  629.         db    0AEh, 3Ah, 9Ah, 0DBh, 7Bh, 59h
  630.         db    0F9h, 0B8h, 18h, 0FDh, 5Dh, 1Ch
  631.         db    0BCh, 9Eh, 3Eh, 7Fh, 0DFh, 15h
  632.         db    0B5h, 0F4h, 54h, 76h, 0D6h, 97h
  633.         db    37h, 0D2h, 72h, 33h, 93h, 0B1h
  634.         db    11h, 50h, 0F0h, 0, 97h, 0B9h
  635.         db    2Eh, 0E5h, 72h, 5Ch, 0CBh, 0CAh
  636.         db    5Dh, 73h, 0E4h, 2Fh, 0B8h, 96h
  637.         db    1, 3, 94h, 0BAh, 2Dh, 0E6h
  638.         db    71h, 5Fh, 0C8h, 0C9h, 5Eh, 70h
  639.         db    0E7h, 2Ch, 0BBh, 95h, 2, 6
  640.         db    91h, 0BFh, 28h, 0E3h, 74h, 5Ah
  641.         db    0CDh, 0CCh, 5Bh, 75h, 0E2h, 29h
  642.         db    0BEh, 90h, 7, 5, 92h, 0BCh
  643.         db    2Bh, 0E0h, 77h, 59h, 0CEh, 0CFh
  644.         db    58h, 76h, 0E1h, 2Ah, 0BDh, 93h
  645.         db    4, 0Ch, 9Bh, 0B5h, 22h, 0E9h
  646.         db    7Eh, 50h, 0C7h, 0C6h, 51h, 7Fh
  647.         db    0E8h, 23h, 0B4h, 9Ah, 0Dh, 0Fh
  648.         db    98h, 0B6h, 21h, 0EAh, 7Dh, 53h
  649.         db    0C4h, 0C5h, 52h, 7Ch, 0EBh, 20h
  650.         db    0B7h, 99h, 0Eh, 0Ah, 9Dh, 0B3h
  651.         db    24h, 0EFh, 78h, 56h, 0C1h, 0C0h
  652.         db    57h, 79h, 0EEh, 25h, 0B2h, 9Ch
  653.         db    0Bh, 9, 9Eh, 0B0h, 27h, 0ECh
  654.         db    7Bh, 55h, 0C2h, 0C3h, 54h, 7Ah
  655.         db    0EDh, 26h, 0B1h, 9Fh, 8, 8Fh
  656.         db    18h, 36h, 0A1h, 6Ah, 0FDh, 0D3h
  657.         db    44h, 45h, 0D2h, 0FCh, 6Bh, 0A0h
  658.         db    37h, 19h, 8Eh, 8Ch, 1Bh, 35h
  659.         db    0A2h, 69h, 0FEh, 0D0h, 47h, 46h
  660.         db    0D1h, 0FFh, 68h, 0A3h, 34h, 1Ah
  661.         db    8Dh, 89h, 1Eh, 30h, 0A7h, 6Ch
  662.         db    0FBh, 0D5h, 42h, 43h, 0D4h, 0FAh
  663.         db    6Dh, 0A6h, 31h, 1Fh, 88h, 8Ah
  664.         db    1Dh, 33h, 0A4h, 6Fh, 0F8h, 0D6h
  665.         db    41h, 40h, 0D7h, 0F9h, 6Eh, 0A5h
  666.         db    32h, 1Ch, 8Bh, 83h, 14h, 3Ah
  667.         db    0ADh, 66h, 0F1h, 0DFh, 48h, 49h
  668.         db    0DEh, 0F0h, 67h, 0ACh, 3Bh, 15h
  669.         db    82h, 80h, 17h, 39h, 0AEh, 65h
  670.         db    0F2h, 0DCh, 4Bh, 4Ah, 0DDh, 0F3h
  671.         db    64h, 0AFh, 38h, 16h, 81h, 85h
  672.         db    12h, 3Ch, 0ABh, 60h, 0F7h, 0D9h
  673.         db    4Eh, 4Fh, 0D8h, 0F6h, 61h, 0AAh
  674.         db    3Dh, 13h, 84h, 86h, 11h, 3Fh
  675.         db    0A8h, 63h, 0F4h, 0DAh, 4Dh, 4Ch
  676.         db    0DBh, 0F5h, 62h, 0A9h, 3Eh, 10h
  677.         db    87h
  678.   
  679. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  680. ;                   SUBROUTINE
  681. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  682.   
  683. sub_8        proc    near
  684.         push    bp
  685.         mov    bp,sp
  686.         push    es
  687.         mov    ah,2Fh            ; '/'
  688.         int    21h            ; DOS Services  ah=function 2Fh
  689.                         ;  get DTA ptr into es:bx
  690.         mov    ds:data_19e,bx        ; (7E60:031E=8404h)
  691.         mov    ds:data_20e,es        ; (7E60:0320=75C0h)
  692.         pop    es
  693.         lea    dx,cs:[2B3h]        ; Load effective addr
  694.         mov    ah,1Ah
  695.         int    21h            ; DOS Services  ah=function 1Ah
  696.                         ;  set DTA to ds:dx
  697.         mov    di,[bp+4]
  698.         test    di,di
  699.         jz    loc_49            ; Jump if zero
  700.         mov    si,di
  701.         mov    byte ptr ds:data_18e,0    ; (7E60:02DE=0Ah)
  702.         mov    cx,0FFFFh
  703.         xor    al,al            ; Zero register
  704.         cld                ; Clear direction
  705.         repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  706.         not    cx
  707.         dec    di
  708.         std                ; Set direction flag
  709.         mov    al,5Ch            ; '\'
  710.         repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  711.         jnz    loc_49            ; Jump if not zero
  712.         mov    cx,di
  713.         sub    cx,si
  714.         inc    cx
  715.         inc    cx
  716.         lea    di,cs:[2DEh]        ; Load effective addr
  717.         cld                ; Clear direction
  718.         rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  719.         xor    al,al            ; Zero register
  720.         stosb                ; Store al to es:[di]
  721. loc_49:
  722.         mov    ah,4Eh            ; 'N'
  723.         mov    cx,[bp+6]
  724.         mov    dx,[bp+4]
  725.         test    dx,dx
  726.         jnz    loc_50            ; Jump if not zero
  727.         mov    ah,4Fh            ; 'O'
  728. loc_50:
  729.         int    21h            ; DOS Services  ah=function 4Fh
  730.                         ;  find next filename match
  731.         pushf                ; Push flags
  732.         push    ds
  733.         lds    dx,dword ptr ds:data_19e    ; (7E60:031E=8404h) Load 32 bit ptr
  734.         mov    ah,1Ah
  735.         int    21h            ; DOS Services  ah=function 1Ah
  736.                         ;  set DTA to ds:dx
  737.         pop    ds
  738.         lea    ax,cs:[2C8h]        ; Load effective addr
  739.         popf                ; Pop flags
  740.         jnc    loc_52            ; Jump if carry=0
  741.         xor    ax,ax            ; Zero register
  742. loc_51:
  743.         mov    sp,bp
  744.         pop    bp
  745.         retn
  746. loc_52:
  747.         mov    di,[bp+8]
  748.         lea    si,cs:[2DEh]        ; Load effective addr
  749.         cld                ; Clear direction
  750. loc_53:
  751.         lodsb                ; String [si] to al
  752.         test    al,al
  753.         jz    loc_54            ; Jump if zero
  754.         stosb                ; Store al to es:[di]
  755.         jmp    short loc_53        ; (068C)
  756. loc_54:
  757.         lea    si,cs:[2D1h]        ; Load effective addr
  758. loc_55:
  759.         lodsb                ; String [si] to al
  760.         stosb                ; Store al to es:[di]
  761.         test    al,al
  762.         jnz    loc_55            ; Jump if not zero
  763.         mov    ax,0FFFFh
  764.         jmp    short loc_51        ; (0680)
  765. sub_8        endp
  766.   
  767. data_23        db    0, 0
  768. data_24        dw    0
  769. data_25        dw    0
  770. data_26        dw    0
  771. data_27        dw    0
  772. data_28        dw    0
  773.         db    55h, 8Bh, 0ECh, 2Eh, 0F7h, 6
  774.         db    0ABh, 6, 0FFh, 0FFh, 74h, 0Eh
  775.         db    0F7h, 46h, 4, 0FFh, 0FFh
  776.         db    74h, 54h
  777. loc_56:
  778.         mov    ax,0FFFFh
  779. loc_57:
  780.         mov    sp,bp
  781.         pop    bp
  782.         retn
  783.         db    0F7h, 46h, 4, 0FFh, 0FFh, 74h
  784.         db    0F2h, 6, 0B8h, 23h, 35h, 0CDh
  785.         db    21h, 2Eh, 89h, 1Eh, 0A3h, 6
  786.         db    2Eh, 8Ch, 6, 0A5h, 6, 0B8h
  787.         db    24h, 35h, 0CDh, 21h, 2Eh, 89h
  788.         db    1Eh, 0A7h, 6, 2Eh, 8Ch, 6
  789.         db    0A9h, 6, 7, 1Eh, 0Eh, 1Fh
  790.         db    8Dh, 16h, 38h, 7, 0B8h, 23h
  791.         db    25h, 0CDh, 21h, 8Dh, 16h, 49h
  792.         db    7, 0B8h, 24h, 25h, 0CDh, 21h
  793.         db    1Fh, 8Bh, 46h, 4, 2Eh, 0A3h
  794.         db    0ABh, 6, 2Eh, 8Ch, 1Eh, 0ADh
  795.         db    6, 33h, 0C0h, 0EBh, 0AFh, 1Eh
  796.         db    2Eh, 0C5h, 1Eh, 0A3h, 6, 0B8h
  797.         db    23h, 25h, 0CDh, 21h, 2Eh, 0C5h
  798.         db    1Eh, 0A7h, 6, 0B8h, 24h, 25h
  799.         db    0CDh, 21h, 1Fh, 33h, 0C0h, 2Eh
  800.         db    0A3h, 0ABh, 6, 2Eh, 0A3h, 0ADh
  801.         db    6, 0EBh, 8Dh
  802.   
  803. ;██████████████████████████████████████████████████████████████████████████
  804. ;
  805. ;            External Entry Point
  806. ;
  807. ;██████████████████████████████████████████████████████████████████████████
  808.   
  809. int_23h_entry    proc    far
  810.         push    ds
  811.         push    bx
  812.         lds    bx,dword ptr cs:data_27    ; (7E70:06AB=0) Load 32 bit ptr
  813.         mov    word ptr [bx],0FFFFh
  814.         pop    bx
  815.         pop    ds
  816.         clc                ; Clear carry flag
  817.         retf    2            ; Return far
  818. int_23h_entry    endp
  819.   
  820.   
  821. ;██████████████████████████████████████████████████████████████████████████
  822. ;
  823. ;            External Entry Point
  824. ;
  825. ;██████████████████████████████████████████████████████████████████████████
  826.   
  827. int_24h_entry    proc    far
  828.         push    ds
  829.         push    bx
  830.         lds    bx,dword ptr cs:data_27    ; (7E70:06AB=0) Load 32 bit ptr
  831.         push    ax
  832.         push    dx
  833.         mov    dx,di
  834.         mov    al,dl
  835.         mov    [bx],ax
  836.         pop    dx
  837.         pop    ax
  838.         mov    al,0
  839.         pop    bx
  840.         pop    ds
  841.         iret                ; Interrupt return
  842. int_24h_entry    endp
  843.   
  844.   
  845. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  846. ;                   SUBROUTINE
  847. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  848.   
  849. sub_9        proc    near
  850.         push    bp
  851.         mov    bp,sp
  852.         mov    dx,[bp+4]
  853.         mov    al,[bp+6]
  854.         mov    bx,dx
  855.         test    byte ptr [bx],0FFh
  856.         jz    loc_58            ; Jump if zero
  857.         mov    ah,3Dh            ; '='
  858.         int    21h            ; DOS Services  ah=function 3Dh
  859.                         ;  open file, al=mode,name@ds:dx
  860.         jnc    loc_58            ; Jump if carry=0
  861.         mov    ax,0FFFFh
  862. loc_58:
  863.         mov    sp,bp
  864.         pop    bp
  865.         retn
  866. sub_9        endp
  867.   
  868.   
  869. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  870. ;                   SUBROUTINE
  871. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  872.   
  873. sub_10        proc    near
  874.         push    bp
  875.         mov    bp,sp
  876.         mov    bx,[bp+4]
  877.         mov    ah,3Eh            ; '>'
  878.         int    21h            ; DOS Services  ah=function 3Eh
  879.                         ;  close file, bx=file handle
  880.         mov    ax,0
  881.         jnc    loc_59            ; Jump if carry=0
  882.         mov    ax,0FFFFh
  883. loc_59:
  884.         mov    sp,bp
  885.         pop    bp
  886.         retn
  887. sub_10        endp
  888.   
  889.   
  890. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  891. ;                   SUBROUTINE
  892. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  893.   
  894. sub_11        proc    near
  895.         push    bp
  896.         mov    bp,sp
  897.         mov    bx,[bp+4]
  898.         mov    dx,[bp+6]
  899.         mov    cx,[bp+8]
  900.         mov    ah,3Fh            ; '?'
  901.         int    21h            ; DOS Services  ah=function 3Fh
  902.                         ;  read file, cx=bytes, to ds:dx
  903.         jnc    loc_60            ; Jump if carry=0
  904.         mov    ax,0FFFFh
  905. loc_60:
  906.         mov    sp,bp
  907.         pop    bp
  908.         retn
  909. sub_11        endp
  910.   
  911.         db    55h, 8Bh, 0ECh, 8Bh, 5Eh, 4
  912.         db    8Bh, 56h, 6, 8Bh, 4Eh, 8
  913.         db    0B4h, 40h, 0CDh, 21h, 73h, 2
  914.         db    0B4h, 0FFh, 8Bh, 0E5h, 5Dh, 0C3h
  915.         db    55h, 8Bh, 0ECh, 8Bh, 56h, 4
  916.         db    0B4h, 41h, 0CDh, 21h, 0B8h, 0
  917.         db    0, 73h, 3, 0B8h, 0FFh, 0FFh
  918.         db    8Bh, 0E5h, 5Dh, 0C3h, 55h, 8Bh
  919.         db    0ECh, 8Bh, 56h, 4, 8Bh, 7Eh
  920.         db    6, 0B4h, 56h, 0CDh, 21h, 0B8h
  921.         db    0, 0, 73h, 3, 0B8h, 0FFh
  922.         db    0FFh, 8Bh, 0E5h, 5Dh, 0C3h, 55h
  923.         db    8Bh, 0ECh, 8Bh, 5Eh, 4, 8Bh
  924.         db    56h, 6, 8Bh, 4Eh, 8, 8Ah
  925.         db    46h, 0Ah, 0B4h, 42h, 0CDh, 21h
  926.         db    72h, 6, 8Bh, 0DAh
  927. loc_61:
  928.         mov    sp,bp
  929.         pop    bp
  930.         retn
  931.         db    0B8h, 0FFh, 0FFh, 8Bh, 0D8h, 0EBh
  932.         db    0F5h, 55h, 8Bh, 0ECh, 8Bh, 5Eh
  933.         db    4, 0B0h, 1, 0B9h, 0, 0
  934.         db    0BAh, 0, 0, 0B4h, 42h, 0CDh
  935.         db    21h, 72h, 7, 8Bh, 0DAh, 93h
  936. loc_62:
  937.         mov    sp,bp
  938.         pop    bp
  939.         retn
  940.         db    0B8h, 0FFh, 0FFh, 8Bh, 0D8h, 0EBh
  941.         db    0F5h, 55h, 8Bh, 0ECh, 8Bh, 56h
  942.         db    4, 55h, 83h, 0ECh, 2Fh, 8Bh
  943.         db    0ECh, 52h, 6, 0B4h, 2Fh, 0CDh
  944.         db    21h, 8Ch, 46h, 2Bh, 89h, 5Eh
  945.         db    2Dh, 7, 8Dh, 56h, 0, 0B4h
  946.         db    1Ah, 0CDh, 21h, 5Ah, 0B4h, 4Eh
  947.         db    0CDh, 21h, 72h, 8, 8Bh, 46h
  948.         db    1Ah, 8Bh, 5Eh, 1Ch, 0EBh, 5
  949.         db    0B8h, 0FFh, 0FFh, 8Bh, 0D8h, 50h
  950.         db    53h, 1Eh, 8Eh, 5Eh, 2Bh, 8Bh
  951.         db    56h, 2Dh, 0B4h, 1Ah, 0CDh, 21h
  952.         db    1Fh, 58h, 5Bh, 83h, 0C4h, 2Fh
  953.         db    5Dh, 8Bh, 0E5h, 5Dh, 0C3h, 55h
  954.         db    8Bh, 0ECh, 8Bh, 56h, 4, 8Bh
  955.         db    4Eh, 6, 0B0h, 1, 0B4h, 43h
  956.         db    0CDh, 21h, 0B8h, 0, 0, 73h
  957.         db    2, 0F7h, 0D0h, 8Bh, 0E5h, 5Dh
  958.         db    0C3h, 55h, 8Bh, 0ECh, 8Bh, 56h
  959.         db    4, 8Bh, 4Eh, 6, 0B4h, 3Ch
  960.         db    0CDh, 21h, 73h, 3, 0B8h, 0FFh
  961.         db    0FFh, 8Bh, 0E5h, 5Dh, 0C3h, 55h
  962.         db    8Bh, 0ECh, 8Bh, 56h, 4, 0B4h
  963.         db    3Bh, 0CDh, 21h, 0B8h, 0, 0
  964.         db    73h, 2, 0F7h, 0D0h, 8Bh, 0E5h
  965.         db    5Dh, 0C3h, 55h, 8Bh, 0ECh, 8Bh
  966.         db    56h, 4, 0B4h, 39h, 0CDh, 21h
  967.         db    0B8h, 0, 0, 73h, 2, 0F7h
  968.         db    0D0h, 8Bh, 0E5h, 5Dh, 0C3h, 55h
  969.         db    8Bh, 0ECh, 8Bh, 76h, 6, 8Ah
  970.         db    56h, 4, 0B4h, 47h, 0CDh, 21h
  971.         db    0B8h, 0, 0, 73h, 2, 0F7h
  972.         db    0D0h, 8Bh, 0E5h, 5Dh, 0C3h, 55h
  973.         db    8Bh, 0ECh, 0B4h, 19h, 0CDh, 21h
  974.         db    32h, 0E4h, 8Bh, 0E5h, 5Dh, 0C3h
  975.         db    55h, 8Bh, 0ECh, 8Ah, 56h, 4
  976.         db    0B4h, 0Eh, 0CDh, 21h, 32h, 0E4h
  977.         db    8Bh, 0E5h, 5Dh, 0C3h
  978.   
  979. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  980. ;                   SUBROUTINE
  981. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  982.   
  983. sub_12        proc    near
  984.         push    bp
  985.         mov    bp,sp
  986.         mov    dx,[bp+4]
  987.         mov    di,[bp+6]
  988.         mov    al,0
  989.         mov    ah,3Dh            ; '='
  990.         int    21h            ; DOS Services  ah=function 3Dh
  991.                         ;  open file, al=mode,name@ds:dx
  992.         jc    loc_64            ; Jump if carry Set
  993.         mov    bx,ax
  994.         push    ax
  995.         mov    al,0
  996.         mov    ah,57h            ; 'W'
  997.         int    21h            ; DOS Services  ah=function 57h
  998.                         ;  get/set file date & time
  999.         pop    bx
  1000.         jc    loc_64            ; Jump if carry Set
  1001.         push    dx
  1002.         push    cx
  1003.         mov    ah,3Eh            ; '>'
  1004.         int    21h            ; DOS Services  ah=function 3Eh
  1005.                         ;  close file, bx=file handle
  1006.         pop    bx
  1007.         pop    dx
  1008.         cld                ; Clear direction
  1009.         mov    al,dh
  1010.         shr    al,1            ; Shift w/zeros fill
  1011.         cbw                ; Convrt byte to word
  1012.         add    ax,7BCh
  1013.         stosw                ; Store ax to es:[di]
  1014.         mov    ax,dx
  1015.         mov    cl,5
  1016.         shr    ax,cl            ; Shift w/zeros fill
  1017.         and    ax,0Fh
  1018.         stosb                ; Store al to es:[di]
  1019.         mov    al,dl
  1020.         and    al,1Fh
  1021.         stosb                ; Store al to es:[di]
  1022.         mov    al,bh
  1023.         mov    cl,3
  1024.         shr    al,cl            ; Shift w/zeros fill
  1025.         stosb                ; Store al to es:[di]
  1026.         mov    ax,bx
  1027.         mov    cl,5
  1028.         shr    ax,cl            ; Shift w/zeros fill
  1029.         and    al,3Fh            ; '?'
  1030.         stosb                ; Store al to es:[di]
  1031.         mov    al,bl
  1032.         and    al,1Fh
  1033.         add    al,al
  1034.         stosb                ; Store al to es:[di]
  1035.         xor    ax,ax            ; Zero register
  1036. loc_63:
  1037.         mov    sp,bp
  1038.         pop    bp
  1039.         retn
  1040. loc_64:
  1041.         mov    ax,0FFFFh
  1042.         jmp    short loc_63        ; (0968)
  1043. sub_12        endp
  1044.   
  1045.         db    55h, 8Bh, 0ECh, 8Bh, 56h, 4
  1046.         db    8Bh, 76h, 6, 0FCh, 0ADh, 2Dh
  1047.         db    0BCh, 7, 0D1h, 0E0h, 0D1h, 0E0h
  1048.         db    0D1h, 0E0h, 0D1h, 0E0h, 8Bh, 0D8h
  1049.         db    0ACh, 0Ah, 0D8h, 0B1h, 5, 0D3h
  1050.         db    0E3h, 0ACh, 0Ah, 0D8h, 0ACh, 0B1h
  1051.         db    6, 0D3h, 0E0h, 8Bh, 0F8h, 0ACh
  1052.         db    0Bh, 0C7h, 0FEh, 0C9h, 0D3h, 0E0h
  1053.         db    8Bh, 0F8h, 0ACh, 32h, 0E4h, 0D1h
  1054.         db    0E8h, 0Bh, 0F8h, 53h, 57h, 0B0h
  1055.         db    0, 0B4h, 3Dh, 0CDh, 21h, 59h
  1056.         db    5Ah, 72h, 16h, 8Bh, 0D8h, 50h
  1057.         db    0B0h, 1, 0B4h, 57h, 0CDh, 21h
  1058.         db    5Bh, 72h, 0Ah, 0B4h, 3Eh, 0CDh
  1059.         db    21h, 33h, 0C0h, 8Bh, 0E5h, 5Dh
  1060.         db    0C3h, 0B8h, 0FFh, 0FFh, 8Bh, 0E5h
  1061.         db    5Dh, 0C3h, 55h, 8Bh, 0ECh, 0B4h
  1062.         db    45h, 8Bh, 5Eh, 4, 0CDh, 21h
  1063.         db    73h, 3, 0B8h, 0FFh, 0FFh, 8Bh
  1064.         db    0E5h, 5Dh, 0C3h, 55h, 8Bh, 0ECh
  1065.         db    0B4h, 46h, 8Bh, 5Eh, 4, 8Bh
  1066.         db    4Eh, 6, 0CDh, 21h, 8Bh, 46h
  1067.         db    6, 73h, 3, 0B8h, 0FFh, 0FFh
  1068.         db    8Bh, 0E5h, 5Dh, 0C3h, 55h, 8Bh
  1069.         db    0ECh, 8Bh, 7Eh, 4, 0B4h, 2Ah
  1070.         db    0CDh, 21h, 8Bh, 0C1h, 0FCh, 0ABh
  1071.         db    8Ah, 0C6h, 0AAh, 8Ah, 0C2h, 0AAh
  1072.         db    0B4h, 2Ch, 0CDh, 21h, 8Ah, 0C5h
  1073.         db    0AAh, 8Ah, 0C1h, 0AAh, 8Ah, 0C6h
  1074.         db    0AAh, 33h, 0C0h, 8Bh, 0E5h, 5Dh
  1075.         db    0C3h, 5Fh, 5Bh, 57h, 55h, 81h
  1076.         db    0ECh, 2Ch, 1, 8Bh, 0ECh, 53h
  1077.         db    0B4h, 37h, 0B0h, 0, 0CDh, 21h
  1078.         db    8Ah, 0C2h, 0FCh, 8Dh, 7Eh, 14h
  1079.         db    47h, 0AAh, 0B8h, 43h, 20h, 0ABh
  1080.         db    5Bh, 8Bh, 0F3h
  1081. loc_65:
  1082.         lodsb                ; String [si] to al
  1083.         stosb                ; Store al to es:[di]
  1084.         test    al,al
  1085.         jnz    loc_65            ; Jump if not zero
  1086.         dec    di
  1087.         mov    byte ptr [di],0Dh
  1088.         lea    bx,[bp+14h]        ; Load effective addr
  1089.         sub    di,bx
  1090.         mov    ax,di
  1091.         mov    [bx],al
  1092.         lea    di,[bp+0]        ; Load effective addr
  1093.         xor    ax,ax            ; Zero register
  1094.         stosw                ; Store ax to es:[di]
  1095.         lea    ax,[bp+14h]        ; Load effective addr
  1096.         stosw                ; Store ax to es:[di]
  1097.         mov    ax,ds
  1098.         stosw                ; Store ax to es:[di]
  1099.         lea    ax,cs:[32Bh]        ; Load effective addr
  1100.         stosw                ; Store ax to es:[di]
  1101.         mov    ax,ds
  1102.         stosw                ; Store ax to es:[di]
  1103.         lea    ax,cs:[32Bh]        ; Load effective addr
  1104.         stosw                ; Store ax to es:[di]
  1105.         mov    ax,ds
  1106.         stosw                ; Store ax to es:[di]
  1107.         mov    ah,51h            ; 'Q'
  1108.         int    21h            ; DOS Services  ah=function 51h
  1109.                         ;  get active PSP segment in bx
  1110.         mov    es,bx
  1111.         mov    ax,es:data_1e        ; (0016:002C=0)
  1112.         mov    es,ax
  1113.         xor    di,di            ; Zero register
  1114.         lea    si,cs:[322h]        ; Load effective addr
  1115.         cld                ; Clear direction
  1116. loc_66:
  1117.         xor    bx,bx            ; Zero register
  1118.         test    byte ptr es:[di],0FFh
  1119.         jnz    loc_67            ; Jump if not zero
  1120.         add    sp,12Ch
  1121.         mov    ax,ds
  1122.         mov    es,ax
  1123.         pop    bp
  1124.         jmp    short loc_70        ; (0B00)
  1125.         db    90h
  1126. loc_67:
  1127.         mov    al,es:[di]
  1128.         inc    di
  1129.         test    al,al
  1130.         jz    loc_66            ; Jump if zero
  1131.         mov    ah,al
  1132.         and    ah,40h            ; '@'
  1133.         shr    ah,1            ; Shift w/zeros fill
  1134.         not    ah
  1135.         and    al,ah
  1136.         cmp    al,[bx+si]
  1137.         jne    loc_68            ; Jump if not equal
  1138.         inc    bx
  1139.         test    byte ptr [bx+si],0FFh
  1140.         jnz    loc_67            ; Jump if not zero
  1141.         jmp    short loc_69        ; (0AC5)
  1142. loc_68:
  1143.         xor    al,al            ; Zero register
  1144.         mov    cx,0FFFFh
  1145.         repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  1146.         jmp    short loc_66        ; (0A89)
  1147. loc_69:
  1148.         mov    dx,di
  1149.         lea    bx,[bp+0]        ; Load effective addr
  1150.         mov    ax,ds
  1151.         mov    cs:data_29,ax        ; (7E70:0B04=0)
  1152.         mov    cs:data_30,sp        ; (7E70:0B06=0)
  1153.         mov    cx,es
  1154.         mov    es,ax
  1155.         mov    ds,cx
  1156.         mov    ah,4Bh            ; 'K'
  1157.         mov    al,0
  1158.         int    21h            ; DOS Services  ah=function 4Bh
  1159.                         ;  run progm @ds:dx, parm @es:bx
  1160.         mov    ax,cs:data_29        ; (7E70:0B04=0)
  1161.         mov    ds,ax
  1162.         mov    es,ax
  1163.         mov    ss,ax
  1164.         mov    sp,cs:data_30        ; (7E70:0B06=0)
  1165.         rcl    al,1            ; Rotate thru carry
  1166.         add    sp,12Ch
  1167.         pop    bp
  1168.         test    al,1
  1169.         jnz    loc_70            ; Jump if not zero
  1170.         mov    ah,4Dh            ; 'M'
  1171.         int    21h            ; DOS Services  ah=function 4Dh
  1172.                         ;  get return code info in ax
  1173.         retn
  1174. loc_70:
  1175.         mov    ax,0FFFFh
  1176.         retn
  1177. data_29        dw    0
  1178. data_30        dw    0
  1179.         db    55h, 8Bh, 0ECh, 6, 0B4h, 51h
  1180.         db    0CDh, 21h, 8Eh, 0C3h, 8Bh, 76h
  1181.         db    4, 26h, 0A1h, 2Ch, 0, 8Eh
  1182.         db    0C0h, 33h, 0FFh, 0FCh
  1183. loc_71:
  1184.         xor    bx,bx            ; Zero register
  1185.         test    byte ptr es:[di],0FFh
  1186.         jnz    loc_72            ; Jump if not zero
  1187.         pop    es
  1188.         mov    ax,0FFFFh
  1189.         pop    bp
  1190.         retn
  1191. loc_72:
  1192.         mov    al,es:[di]
  1193.         inc    di
  1194.         test    al,al
  1195.         jz    loc_71            ; Jump if zero
  1196.         mov    ah,al
  1197.         and    ah,40h            ; '@'
  1198.         shr    ah,1            ; Shift w/zeros fill
  1199.         not    ah
  1200.         and    al,ah
  1201.         cmp    al,[bx+si]
  1202.         jne    loc_74            ; Jump if not equal
  1203.         inc    bx
  1204.         test    byte ptr [bx+si],0FFh
  1205.         jnz    loc_72            ; Jump if not zero
  1206.         push    ds
  1207.         push    es
  1208.         pop    ds
  1209.         pop    es
  1210.         mov    si,di
  1211.         mov    di,[bp+6]
  1212.         mov    cx,0FFFFh
  1213.   
  1214. locloop_73:
  1215.         lodsb                ; String [si] to al
  1216.         stosb                ; Store al to es:[di]
  1217.         test    al,al
  1218.         loopnz    locloop_73        ; Loop if zf=0, cx>0
  1219.   
  1220.         not    cx
  1221.         dec    cx
  1222.         mov    ax,cx
  1223.         push    es
  1224.         pop    ds
  1225.         pop    es
  1226.         pop    bp
  1227.         retn
  1228. loc_74:
  1229.         xor    al,al            ; Zero register
  1230.         mov    cx,0FFFFh
  1231.         repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  1232.         jmp    short loc_71        ; (0B1E)
  1233.         db    55h, 8Bh, 0ECh, 8Bh, 46h, 4
  1234.         db    8Bh, 56h, 6, 5, 0Fh, 0
  1235.         db    83h, 0D2h, 0, 0B1h, 4, 0D3h
  1236.         db    0E8h, 80h, 0E2h, 0Fh, 0D3h, 0CAh
  1237.         db    0Ah, 0E6h, 8Bh, 0D8h, 0B4h, 48h
  1238.         db    0CDh, 21h, 73h, 2, 33h, 0C0h
  1239.         db    8Bh, 0E5h, 5Dh, 0C3h, 55h, 8Bh
  1240.         db    0ECh, 8Eh, 46h, 4, 0B4h, 49h
  1241.         db    0CDh, 21h, 8Ch, 0D8h, 8Eh, 0C0h
  1242.         db    0B8h, 0, 0, 73h, 2, 0F7h
  1243.         db    0D0h, 8Bh, 0E5h, 5Dh, 0C3h, 55h
  1244.         db    8Bh, 0ECh, 0BBh, 0FFh, 0FFh, 0B4h
  1245.         db    48h, 0CDh, 21h, 8Bh, 0C3h, 0B1h
  1246.         db    4, 0D3h, 0E0h, 0D3h, 0C3h, 81h
  1247.         db    0E3h, 0Fh, 0, 93h, 8Bh, 0E5h
  1248.         db    5Dh, 0C3h, 55h, 8Bh, 0ECh, 6
  1249.         db    8Bh, 46h, 8, 8Bh, 56h, 0Ah
  1250.         db    8Bh, 0F8h, 81h, 0E7h, 0Fh, 0
  1251.         db    0B1h, 4, 0D3h, 0E8h, 0D2h, 0E2h
  1252.         db    0Ah, 0E2h, 3, 46h, 4, 8Eh
  1253.         db    0C0h, 8Bh, 4Eh, 0Ch, 8Bh, 76h
  1254.         db    6, 0FCh, 0F3h, 0A4h, 7, 8Bh
  1255.         db    0E5h, 5Dh, 0C3h, 55h, 8Bh, 0ECh
  1256.         db    1Eh, 8Bh, 46h, 8, 8Bh, 56h
  1257.         db    0Ah, 8Bh, 0F0h, 81h, 0E6h, 0Fh
  1258.         db    0, 0B1h, 4, 0D3h, 0E8h, 0D2h
  1259.         db    0E2h, 0Ah, 0E2h, 3, 46h, 4
  1260.         db    8Eh, 0D8h, 8Bh, 4Eh, 0Ch, 8Bh
  1261.         db    7Eh, 6, 0FCh, 0F3h, 0A4h, 1Fh
  1262.         db    8Bh, 0E5h, 5Dh, 0C3h
  1263.   
  1264. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1265. ;                   SUBROUTINE
  1266. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1267.   
  1268. sub_13        proc    near
  1269.         mov    ax,1
  1270.         mov    ds:data_5e,ax        ; (00F4:0346=7332h)
  1271.         lea    ax,cs:[0EAEh]        ; Load effective addr
  1272.         mov    ds:data_4e,ax        ; (00F4:0344=28Bh)
  1273.         jmp    short loc_75        ; (0C4E)
  1274.         db    5Fh, 58h, 0A3h, 46h, 3, 8Dh
  1275.         db    6, 9Dh, 0Eh, 0A3h, 44h, 3
  1276.         db    57h, 0EBh, 10h
  1277.   
  1278. ;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1279.   
  1280. sub_14:
  1281.         pop    di
  1282.         pop    ax
  1283.         mov    ds:data_5e,ax        ; (00F4:0346=7332h)
  1284.         lea    ax,cs:[0EAEh]        ; Load effective addr
  1285.         mov    ds:data_4e,ax        ; (00F4:0344=28Bh)
  1286.         push    di
  1287.         jmp    short loc_75        ; (0C4E)
  1288.         db    90h
  1289. loc_75:
  1290.         push    bp
  1291.         sub    sp,20h
  1292.         mov    bp,sp
  1293.         lea    bx,[bp+26h]        ; Load effective addr
  1294.         mov    ds:data_6e,bx        ; (00F4:0348=2E09h)
  1295. loc_76:
  1296.         mov    si,[bp+24h]
  1297.         cld                ; Clear direction
  1298.         lodsb                ; String [si] to al
  1299.         mov    [bp+24h],si
  1300.         test    al,al
  1301.         jnz    loc_78            ; Jump if not zero
  1302. loc_77:
  1303.         xor    ax,ax            ; Zero register
  1304.         mov    sp,bp
  1305.         add    sp,20h
  1306.         pop    bp
  1307.         retn
  1308. loc_78:
  1309.         cmp    al,25h            ; '%'
  1310.         je    loc_79            ; Jump if equal
  1311.         call    word ptr ds:data_4e    ; (00F4:0344=28Bh)
  1312.         jmp    short loc_76        ; (0C5B)
  1313. loc_79:
  1314.         xor    dx,dx            ; Zero register
  1315.         xor    bh,bh            ; Zero register
  1316.         xor    ah,ah            ; Zero register
  1317.         mov    si,[bp+24h]
  1318.         cld                ; Clear direction
  1319.         lodsb                ; String [si] to al
  1320.         cmp    al,30h            ; '0'
  1321.         jne    loc_80            ; Jump if not equal
  1322.         not    bh
  1323. loc_80:
  1324.         test    al,al
  1325.         jz    loc_77            ; Jump if zero
  1326.         cmp    al,30h            ; '0'
  1327.         jb    loc_81            ; Jump if below
  1328.         cmp    al,39h            ; '9'
  1329.         ja    loc_81            ; Jump if above
  1330.         shl    dx,1            ; Shift w/zeros fill
  1331.         mov    cx,dx
  1332.         shl    dx,1            ; Shift w/zeros fill
  1333.         shl    dx,1            ; Shift w/zeros fill
  1334.         add    dx,cx
  1335.         and    al,0Fh
  1336.         add    dx,ax
  1337.         lodsb                ; String [si] to al
  1338.         jmp    short loc_80        ; (0C8B)
  1339. loc_81:
  1340.         test    bh,bh
  1341.         jz    loc_82            ; Jump if zero
  1342.         neg    dx
  1343. loc_82:
  1344.         mov    [bp+24h],si
  1345.         cmp    al,73h            ; 's'
  1346.         jne    loc_86            ; Jump if not equal
  1347.         mov    bx,ds:data_6e        ; (00F4:0348=2E09h)
  1348.         mov    si,[bx]
  1349.         inc    bx
  1350.         inc    bx
  1351.         mov    ds:data_6e,bx        ; (00F4:0348=2E09h)
  1352. loc_83:
  1353.         cld                ; Clear direction
  1354.         lodsb                ; String [si] to al
  1355.         test    al,al
  1356.         jz    loc_84            ; Jump if zero
  1357.         call    word ptr ds:data_4e    ; (00F4:0344=28Bh)
  1358.         test    dx,dx
  1359.         jz    loc_83            ; Jump if zero
  1360.         dec    dx
  1361.         jnz    loc_83            ; Jump if not zero
  1362.         jmp    short loc_87        ; (0CFC)
  1363.         db    90h
  1364. loc_84:
  1365.         test    dx,dx
  1366.         jz    loc_87            ; Jump if zero
  1367.         mov    cx,dx
  1368.   
  1369. locloop_85:
  1370.         mov    al,20h            ; ' '
  1371.         call    word ptr ds:data_4e    ; (00F4:0344=28Bh)
  1372.         loop    locloop_85        ; Loop if cx > 0
  1373.   
  1374.         jmp    short loc_87        ; (0CFC)
  1375.         db    90h
  1376. loc_86:
  1377.         cmp    al,63h            ; 'c'
  1378.         jne    loc_88            ; Jump if not equal
  1379.         mov    bx,ds:data_6e        ; (00F4:0348=2E09h)
  1380.         mov    al,[bx]
  1381.         push    word ptr [bx]
  1382.         inc    bx
  1383.         inc    bx
  1384.         mov    ds:data_6e,bx        ; (00F4:0348=2E09h)
  1385.         call    word ptr ds:data_4e    ; (00F4:0344=28Bh)
  1386. loc_87:
  1387.         jmp    loc_76            ; (0C5B)
  1388. loc_88:
  1389.         cmp    al,64h            ; 'd'
  1390.         jne    loc_91            ; Jump if not equal
  1391.         mov    bx,ds:data_6e        ; (00F4:0348=2E09h)
  1392.         test    word ptr ss:[bx],0FFFFh
  1393.         jns    loc_89            ; Jump if not sign
  1394.         mov    al,2Dh            ; '-'
  1395.         call    word ptr ds:data_4e    ; (00F4:0344=28Bh)
  1396.         neg    word ptr ss:[bx]
  1397.         test    dx,dx
  1398.         jz    loc_89            ; Jump if zero
  1399.         dec    dx
  1400. loc_89:
  1401.         push    dx
  1402.         mov    bx,ds:data_6e        ; (00F4:0348=2E09h)
  1403.         push    word ptr [bx]
  1404.         inc    bx
  1405.         inc    bx
  1406.         mov    ds:data_6e,bx        ; (00F4:0348=2E09h)
  1407.         push    bp
  1408.         call    sub_16            ; (0DE7)
  1409.         mov    sp,bp
  1410. loc_90:
  1411.         mov    si,bp
  1412.         xor    dx,dx            ; Zero register
  1413.         jmp    short loc_83        ; (0CC1)
  1414. loc_91:
  1415.         cmp    al,75h            ; 'u'
  1416.         je    loc_89            ; Jump if equal
  1417.         cmp    al,78h            ; 'x'
  1418.         jne    loc_92            ; Jump if not equal
  1419.         push    dx
  1420.         mov    bx,ds:data_6e        ; (00F4:0348=2E09h)
  1421.         push    word ptr [bx]
  1422.         inc    bx
  1423.         inc    bx
  1424.         mov    ds:data_6e,bx        ; (00F4:0348=2E09h)
  1425.         push    bp
  1426.         call    sub_15            ; (0D7A)
  1427.         mov    sp,bp
  1428.         jmp    short loc_90        ; (0D2F)
  1429. loc_92:
  1430.         cmp    al,44h            ; 'D'
  1431.         jne    loc_93            ; Jump if not equal
  1432.         push    dx
  1433.         mov    bx,ds:data_6e        ; (00F4:0348=2E09h)
  1434.         push    word ptr [bx]
  1435.         inc    bx
  1436.         inc    bx
  1437.         push    word ptr [bx]
  1438.         inc    bx
  1439.         inc    bx
  1440.         mov    ds:data_6e,bx        ; (00F4:0348=2E09h)
  1441.         push    bp
  1442.         call    sub_17            ; (0E38)
  1443.         mov    sp,bp
  1444.         jmp    short loc_90        ; (0D2F)
  1445. loc_93:
  1446.         cmp    al,25h            ; '%'
  1447.         jne    loc_94            ; Jump if not equal
  1448.         call    word ptr ds:data_4e    ; (00F4:0344=28Bh)
  1449. loc_94:
  1450.         jmp    loc_76            ; (0C5B)
  1451. sub_13        endp
  1452.   
  1453.   
  1454. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1455. ;                   SUBROUTINE
  1456. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1457.   
  1458. sub_15        proc    near
  1459.         push    bp
  1460.         mov    bp,sp
  1461.         mov    dx,[bp+6]
  1462.         xor    cx,cx            ; Zero register
  1463.         lea    bx,cs:[0DD7h]        ; Load effective addr
  1464.         mov    ax,dx
  1465. loc_95:
  1466.         and    al,0Fh
  1467.         xlat    cs:[bx]            ; al=[al+[bx]] table
  1468.         push    ax
  1469.         mov    ax,dx
  1470.         shr    ax,1            ; Shift w/zeros fill
  1471.         shr    ax,1            ; Shift w/zeros fill
  1472.         shr    ax,1            ; Shift w/zeros fill
  1473.         shr    ax,1            ; Shift w/zeros fill
  1474.         mov    dx,ax
  1475.         inc    cx
  1476.         test    ax,ax
  1477.         jnz    loc_95            ; Jump if not zero
  1478.         cld                ; Clear direction
  1479.         mov    di,[bp+4]
  1480.         test    word ptr [bp+8],0FFFFh
  1481.         jnz    loc_97            ; Jump if not zero
  1482.   
  1483. locloop_96:
  1484.         pop    ax
  1485.         stosb                ; Store al to es:[di]
  1486.         loop    locloop_96        ; Loop if cx > 0
  1487.   
  1488.         mov    byte ptr [di],0
  1489.         mov    ax,[bp+4]
  1490.         mov    sp,bp
  1491.         pop    bp
  1492.         retn
  1493. loc_97:
  1494.         mov    si,[bp+8]
  1495.         mov    bl,20h            ; ' '
  1496.         jns    locloop_98        ; Jump if not sign
  1497.         neg    si
  1498.         mov    bl,30h            ; '0'
  1499.   
  1500. locloop_98:
  1501.         cmp    si,cx
  1502.         jae    loc_99            ; Jump if above or =
  1503.         pop    ax
  1504.         loop    locloop_98        ; Loop if cx > 0
  1505.   
  1506. loc_99:
  1507.         sub    si,cx
  1508.         jz    locloop_96        ; Jump if zero
  1509.         xchg    cx,si
  1510.         mov    al,bl
  1511.         rep    stosb            ; Rep when cx >0 Store al to es:[di]
  1512.         mov    cx,si
  1513.         jmp    short locloop_96    ; (0DA9)
  1514. sub_15        endp
  1515.   
  1516.         db    '0123456789abcdef'
  1517.   
  1518. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1519. ;                   SUBROUTINE
  1520. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1521.   
  1522. sub_16        proc    near
  1523.         push    bp
  1524.         mov    bp,sp
  1525.         mov    ax,[bp+6]
  1526.         xor    cx,cx            ; Zero register
  1527.         mov    bx,0Ah
  1528. loc_100:
  1529.         xor    dx,dx            ; Zero register
  1530.         div    bx            ; ax,dx rem=dx:ax/reg
  1531.         add    dl,30h            ; '0'
  1532.         push    dx
  1533.         inc    cx
  1534.         test    ax,ax
  1535.         jnz    loc_100            ; Jump if not zero
  1536.         cld                ; Clear direction
  1537.         mov    di,[bp+4]
  1538.         test    word ptr [bp+8],0FFFFh
  1539.         jnz    loc_102            ; Jump if not zero
  1540.   
  1541. locloop_101:
  1542.         pop    ax
  1543.         stosb                ; Store al to es:[di]
  1544.         loop    locloop_101        ; Loop if cx > 0
  1545.   
  1546.         mov    byte ptr [di],0
  1547.         mov    ax,[bp+4]
  1548.         mov    sp,bp
  1549.         pop    bp
  1550.         retn
  1551. loc_102:
  1552.         mov    si,[bp+8]
  1553.         mov    bl,20h            ; ' '
  1554.         jns    locloop_103        ; Jump if not sign
  1555.         neg    si
  1556.         mov    bl,30h            ; '0'
  1557.   
  1558. locloop_103:
  1559.         cmp    si,cx
  1560.         jae    loc_104            ; Jump if above or =
  1561.         pop    ax
  1562.         loop    locloop_103        ; Loop if cx > 0
  1563.   
  1564. loc_104:
  1565.         sub    si,cx
  1566.         jz    locloop_101        ; Jump if zero
  1567.         xchg    cx,si
  1568.         mov    al,bl
  1569.         rep    stosb            ; Rep when cx >0 Store al to es:[di]
  1570.         mov    cx,si
  1571.         jmp    short locloop_101    ; (0E0A)
  1572. sub_16        endp
  1573.   
  1574.   
  1575. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  1576. ;                   SUBROUTINE
  1577. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  1578.   
  1579. sub_17        proc    near
  1580.         push    bp
  1581.         mov    bp,sp
  1582.         test    word ptr [bp+6],0FFFFh
  1583.         jnz    loc_105            ; Jump if not zero
  1584.         push    word ptr [bp+0Ah]
  1585.         push    word ptr [bp+8]
  1586.         push    word ptr [bp+4]
  1587.         call    sub_16            ; (0DE7)
  1588.         mov    sp,bp
  1589.         mov    sp,bp
  1590.         pop    bp
  1591.         retn
  1592. loc_105:
  1593.         mov    dx,[bp+6]
  1594.         mov    ax,[bp+8]
  1595.         mov    bx,2710h
  1596.         div    bx            ; ax,dx rem=dx:ax/reg
  1597.         push    dx
  1598.         test    word ptr [bp+0Ah],0FFFFh
  1599.         jz    loc_106            ; Jump if zero
  1600.         js    loc_108            ; Jump if sign=1
  1601.         sub    word ptr [bp+0Ah],4
  1602. loc_106:
  1603.         push    word ptr [bp+0Ah]
  1604.         push    ax
  1605.         push    word ptr [bp+4]
  1606.         call    sub_16            ; (0DE7)
  1607.         lea    sp,[bp-2]        ; Load effective addr
  1608.         pop    dx
  1609.         mov    si,[bp+4]
  1610.         cld                ; Clear direction
  1611. loc_107:
  1612.         lodsb                ; String [si] to al
  1613.         test    al,al
  1614.         jnz    loc_107            ; Jump if not zero
  1615.         dec    si
  1616.         mov    ax,0FFFCh
  1617.         push    ax
  1618.         push    dx
  1619.         push    si
  1620.         call    sub_16            ; (0DE7)
  1621.         mov    sp,bp
  1622.         mov    ax,[bp+4]
  1623.         mov    sp,bp
  1624.         pop    bp
  1625.         retn
  1626. loc_108:
  1627.         add    word ptr [bp+0Ah],4
  1628.         jmp    short loc_106        ; (0E6D)
  1629. sub_17        endp
  1630.   
  1631.         db    53h, 8Bh, 1Eh, 46h, 3, 88h
  1632.         db    7, 43h, 0C6h, 7, 0, 89h
  1633.         db    1Eh, 46h, 3, 5Bh, 0C3h, 51h
  1634.         db    52h, 50h, 0B9h, 1, 0, 3Ch
  1635.         db    0Ah, 75h, 6, 58h, 0B8h, 0Dh
  1636.         db    0Ah, 50h, 41h, 8Bh, 0D4h, 8Bh
  1637.         db    1Eh, 46h, 3, 0B4h, 40h, 0CDh
  1638.         db    21h, 58h, 5Ah, 59h, 0C3h, 5Fh
  1639.         db    5Ah, 59h, 5Bh, 57h, 52h, 0E3h
  1640.         db    25h
  1641.   
  1642. locloop_109:
  1643.         push    cx
  1644.         mov    cx,1
  1645.         mov    ah,3Fh            ; '?'
  1646.         int    21h            ; DOS Services  ah=function 3Fh
  1647.                         ;  read file, cx=bytes, to ds:dx
  1648.         jnc    loc_111            ; Jump if carry=0
  1649. loc_110:
  1650.         pop    dx
  1651.         pop    dx
  1652.         xor    ax,ax            ; Zero register
  1653.         retn
  1654. loc_111:
  1655.         test    ax,ax
  1656.         jz    loc_110            ; Jump if zero
  1657.         mov    si,dx
  1658.         mov    al,[si]
  1659.         cmp    al,0Ah
  1660.         je    loc_113            ; Jump if equal
  1661.         inc    dx
  1662.         cmp    al,1Ah
  1663.         je    loc_110            ; Jump if equal
  1664.         cmp    al,0Dh
  1665.         jne    loc_113            ; Jump if not equal
  1666.         pop    cx
  1667. loc_112:
  1668.         mov    si,dx
  1669.         mov    byte ptr [si-1],0
  1670.         pop    ax
  1671.         retn
  1672. loc_113:
  1673.         pop    cx
  1674.         loop    locloop_109        ; Loop if cx > 0
  1675.   
  1676.         jmp    short loc_112        ; (0EF9)
  1677.         db    5Fh, 5Ah, 5Bh, 57h, 8Bh, 0FAh
  1678.         db    0FCh, 32h, 0C0h, 0B9h, 0FFh, 0FFh
  1679.         db    0F2h, 0AEh, 0F7h, 0D1h, 49h, 0B4h
  1680.         db    40h, 0CDh, 21h, 0B9h, 2, 0
  1681.         db    52h, 8Dh, 16h, 42h, 3, 0B9h
  1682.         db    2, 0, 0B4h, 40h, 0CDh, 21h
  1683.         db    58h, 73h, 2, 33h, 0C0h
  1684.   
  1685. loc_ret_114:
  1686.         retn
  1687.         db    5Fh, 5Ah, 0B8h, 0, 0, 50h
  1688.         db    0B8h, 0FFh, 7Fh, 50h, 52h, 57h
  1689.         db    0EBh, 8Eh, 5Fh, 5Ah, 0B8h, 1
  1690.         db    0, 50h, 52h, 57h, 0EBh, 0BEh
  1691.         db    0, 82h, 1, 0B1h
  1692.         db    'Stack overflow', 0Dh, 0Ah
  1693.         db    0
  1694.         db    'Memory allocation failed', 0Dh, 0Ah
  1695.         db    '+'
  1696.         db    0, 0B2h, 0, 0Ah, 0, 0B0h
  1697.         db    10h
  1698.         db    'CRC Checker, Copyright 1988, Syd'
  1699.         db    'ex.  All rights reserved', 0Ah, 0Ah
  1700.         db    0
  1701.         db    'Syntax is CRCK file-list', 0Ah
  1702.         db    0
  1703.         db    '%34s%10s%10s%10s', 0Ah, '%34s%10'
  1704.         db    's%10s%10s', 0Ah
  1705.         db    0, 20h, 20h, 46h, 49h, 4Ch
  1706.         db    45h, 0
  1707.         db    '      CRC'
  1708.         db    0
  1709.         db    '    LENGTH'
  1710.         db    0
  1711.         db    '      DATE'
  1712.         db    0, 20h, 20h, 3Dh, 3Dh, 3Dh
  1713.         db    3Dh, 0
  1714.         db    '      ==='
  1715.         db    0
  1716.         db    '    ======'
  1717.         db    0
  1718.         db    '      ===='
  1719.         db    0, 0Ah, 0
  1720.         db    'Couldn', 27h, 't open %s', 0Ah
  1721.         db    0
  1722.         db    '%34s%10u%10D%6d/%2d/%2d', 0Ah
  1723.         db    0F3h, 0, 0B2h, 0, 70h, 0
  1724.         db    0B0h
  1725.         db    'COMSPEC='
  1726.         db    0, 0, 0Ah, 0, 0B2h, 20h
  1727.         db    0Bh, 0, 0B0h, 0, 0Bh, 0
  1728.         db    0B0h, 0Dh, 0Ah, 2, 0, 0B2h
  1729.         db    0, 0Ch, 0, 0B0h, 0FFh, 0FFh
  1730.         db    8 dup (0FFh)
  1731.   
  1732. seg_a        ends
  1733.   
  1734.   
  1735.   
  1736. ;--------------------------------------------------------------    seg_b  ----
  1737.   
  1738. seg_b        segment    para public
  1739.         assume cs:seg_b , ds:seg_b , ss:stack_seg_c
  1740.   
  1741.         db    2, 0
  1742. data_32        dw    0
  1743. data_33        dw    0
  1744. data_34        dw    13Ch
  1745. data_35        dw    100h
  1746. data_36        dw    129h
  1747. data_37        dw    129h
  1748.         db    52h, 42h
  1749.   
  1750. ;██████████████████████████████████████████████████████████████████████████
  1751. ;
  1752. ;            Program Entry Point
  1753. ;
  1754. ;██████████████████████████████████████████████████████████████████████████
  1755.   
  1756.   
  1757. crcheck        proc    far
  1758.   
  1759. start:
  1760.         mov    ax,es
  1761.         add    ax,10h
  1762.         push    cs
  1763.         pop    ds
  1764.         mov    data_33,ax        ; (7F7A:0004=0)
  1765.         add    ax,data_37        ; (7F7A:000C=129h)
  1766.         mov    es,ax
  1767.         mov    cx,data_34        ; (7F7A:0006=13Ch)
  1768.         mov    di,cx
  1769.         dec    di
  1770.         mov    si,di
  1771.         std                ; Set direction flag
  1772.         rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  1773.         push    ax
  1774.         mov    ax,32h
  1775.         push    ax
  1776.         retf                ; Return far
  1777.         db    8Ch, 0C3h, 8Ch, 0D8h, 48h, 8Eh
  1778.         db    0D8h, 8Eh, 0C0h, 0BFh, 0Fh, 0
  1779.         db    0B9h, 10h, 0, 0B0h, 0FFh, 0F3h
  1780.         db    0AEh, 47h, 8Bh, 0F7h, 8Bh, 0C3h
  1781.         db    48h, 8Eh, 0C0h, 0BFh, 0Fh, 0
  1782. loc_115:
  1783.         mov    cl,4
  1784.         mov    ax,si
  1785.         not    ax
  1786.         shr    ax,cl            ; Shift w/zeros fill
  1787.         jz    loc_116            ; Jump if zero
  1788.         mov    dx,ds
  1789.         sub    dx,ax
  1790.         mov    ds,dx
  1791.         or    si,0FFF0h
  1792.         nop                ;*Fixup for MASM (M)
  1793. loc_116:
  1794.         mov    ax,di
  1795.         not    ax
  1796.         shr    ax,cl            ; Shift w/zeros fill
  1797.         jz    loc_117            ; Jump if zero
  1798.         mov    dx,es
  1799.         sub    dx,ax
  1800.         mov    es,dx
  1801.         or    di,0FFF0h
  1802.         nop                ;*Fixup for MASM (M)
  1803. loc_117:
  1804.         lodsb                ; String [si] to al
  1805.         mov    dl,al
  1806.         dec    si
  1807.         lodsw                ; String [si] to ax
  1808.         mov    cx,ax
  1809.         inc    si
  1810.         mov    al,dl
  1811.         and    al,0FEh
  1812.         cmp    al,0B0h
  1813.         jne    loc_118            ; Jump if not equal
  1814.         lodsb                ; String [si] to al
  1815.         rep    stosb            ; Rep when cx >0 Store al to es:[di]
  1816.         jmp    short loc_119        ; (0092)
  1817.         db    90h
  1818. loc_118:
  1819.         cmp    al,0B2h
  1820.         jne    loc_124            ; Jump if not equal
  1821.         rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  1822. loc_119:
  1823.         mov    al,dl
  1824.         test    al,1
  1825.         jz    loc_115            ; Jump if zero
  1826.         mov    si,112h
  1827.         push    cs
  1828.         pop    ds
  1829.         mov    bx,data_33        ; (7F7A:0004=0)
  1830.         cld                ; Clear direction
  1831.         xor    dx,dx            ; Zero register
  1832. loc_120:
  1833.         lodsw                ; String [si] to ax
  1834.         mov    cx,ax
  1835.         jcxz    loc_122            ; Jump if cx=0
  1836.         mov    ax,dx
  1837.         add    ax,bx
  1838.         mov    es,ax
  1839.   
  1840. locloop_121:
  1841.         lodsw                ; String [si] to ax
  1842.         mov    di,ax
  1843.         add    es:[di],bx
  1844.         loop    locloop_121        ; Loop if cx > 0
  1845.   
  1846. loc_122:
  1847.         cmp    dx,0F000h
  1848.         je    loc_123            ; Jump if equal
  1849.         add    dx,1000h
  1850.         jmp    short loc_120        ; (00A4)
  1851. loc_123:
  1852.         mov    ax,bx
  1853.         mov    di,data_35        ; (7F7A:0008=100h)
  1854.         mov    si,data_36        ; (7F7A:000A=129h)
  1855.         add    si,ax
  1856.         add    word ptr data_32,ax    ; (7F7A:0002=0)
  1857.         sub    ax,10h
  1858.         mov    ds,ax
  1859.         mov    es,ax
  1860.         mov    bx,0
  1861.         cli                ; Disable interrupts
  1862.         mov    ss,si
  1863.         mov    sp,di
  1864.         sti                ; Enable interrupts
  1865.         jmp    dword ptr cs:[bx]    ;*1 entry
  1866. loc_124:
  1867.         mov    ah,40h            ; '@'
  1868.         mov    bx,2
  1869.         mov    cx,16h
  1870.         mov    dx,cs
  1871.         mov    ds,dx
  1872.         mov    dx,0FCh
  1873.         int    21h            ; DOS Services  ah=function 40h
  1874.                         ;  write file cx=bytes, to ds:dx
  1875.         mov    ax,4CFFh
  1876.         int    21h            ; DOS Services  ah=function 4Ch
  1877.                         ;  terminate with al=return code
  1878.         db    'Packed file is corrupt'
  1879.         db    5, 0, 3, 0, 1Eh, 0
  1880.         db    47h, 0, 52h, 0
  1881.         db    55h
  1882.         db    531 dup (0)
  1883.   
  1884. crcheck        endp
  1885.   
  1886. seg_b        ends
  1887.   
  1888.   
  1889.   
  1890. ;--------------------------------------------------------- stack_seg_c  ---
  1891.   
  1892. stack_seg_c    segment    para stack
  1893.   
  1894.         db    128 dup (0)
  1895.   
  1896. stack_seg_c    ends
  1897.   
  1898.   
  1899.   
  1900.         end    start
  1901.