	include	'Killer.incl'


	moveq	#0,d2
	subq.w	#1,d0
args	move.b	(a0)+,d1		; Argument-Auswertung
	cmp.b	#$40,d1
	bls.s	narg
	and.w	#$1f,d1
	bset	d1,d2
narg	dbf	d0,args
	lea	Options(pc),a0
	move.l	d2,(a0)

	move.l	4,a6			; ExecBase
	lea	trddev(pc),a1		; 'trackdisk.device'
	lea	350(a6),a0		; Device-List
	jsr	-276(a6)		; FindName
	lea	TDBase(pc),a0
	move.l	d0,(a0)
	lea	DosName(pc),a1		; dos.library
	jsr	-408(a6)		; OldOpenLibrary
	lea	DosBase(pc),a0
	move.l	d0,(a0)
	move.l	d0,a6			; DosBase
	jsr	-60(a6)			; Output()
	lea	stdout(pc),a0
	move.l	d0,(a0)
	lea	vers(pc),a0		; Titel
	bsr	output
	lea	Autor(pc),a0
	bsr	output
	move.l	Std(pc),d7
	lea	550(a6),a5
	move.l	(a5),a3			; KickTagPtr
	move.l	42(a6),d5		; ColdCapture
	move.l	46(a6),d6		; CoolCapture
	bne.s	memtest
	tst.l	d5
	bne.s	memtest
	tst.l	(a5)
	beq	ok			; kein resetfestes Programm im Speicher
memtest					; testet, welcher Virus im Speicher ist
	cmp.l	#$7ec3e,d6		; SCA-Virus
	bne.s	nsca
	bsr	ClrCool			; CoolCapture löschen
	move.l	$7efde,d0		; ist DoIO verändert ?
	beq.s	sca1			; nein	->
	move.l	d0,-454(a6)		; normale DoIO-Funktion einsetzen
sca1	virus	SCA_Clones
nsca	move.w	148(a6),d0		; VBlank-Interrupt.iv_code
	and.w	#$00f0,d0		; zeigt ins ROM ?
	cmp.w	#$00f0,d0
	beq.s	nbb			; sonst ByteBandit-Virus
	move.l	148(a6),a0
	suba.w	#$2ca,a0
	cmp.l	(a0),d7			; ist es wirklich ByteBandit ?
	bne.s	nbb			; sonst verzweige
	move.l	$3da(a0),148(a6)	; VBlank-Interrupt rücksetzen
	move.l	TDBase(pc),a1
	move.l	$3d6(a0),-28(a1)	; BeginIO-Funktion rücksetzen
	bsr	KillRes
	virus	ByteBandit
nbb	cmp.l	#$7f94c,a3		; ByteWarrior
	bne.s	nbw
	move.l	#$fc06dc,-454(a6)	; DoIO-Funktion rücksetzen
	bsr	KillRes
	virus	ByteWarrior
nbw	cmp.l	#$7ec0e,d6		; NorthStar-Antivirus
	bne.s	nns
	bsr	ClrCool
	virus	NorthStar
nns	cmp.l	#$7f4d8,a3		; System_Z4.0
	beq.s	szfmem
	cmp.l	#$7f4dc,a3		; System_Z5.0
	bne.s	nsz
szfmem	bsr	KillRes
	virus	System_Z
nsz	cmp.l	#$7fb4c,d6		; Pentagon Circle Virusslayer
	bne.s	npc
	bsr	ClrCool
	virus	Pentagon
npc	cmp.l	#$7e060,d6		; Revenge-Virus
	bne.s	nrev
	bsr	ClrCool
	move.l	$7e068,-454(a6)		; DoIO rücksetzen
	move.l	$7e06e,148(a6)		; VBlank-IRQ rücksetzen
	virus	Revenge
nrev	cmp.l	#$7fc24,a3		; Gadaffi-Virus
	bne.s	ngad
	bsr	KillRes
	bsr	ClrCool			; CoolCapture löschen
	move.l	#$fc06dc,-454(a6)	; DoIO rücksetzen
	virus	Gadaffi
ngad	move.l	d5,a0			; Disk-Doktors-Virus
	cmp.l	-$25c(a0),d7		; 'DOS'
	bne.s	ncrr
	lea	clpdev(pc),a1		; clipboard.device
	jsr	-294(a6)		; FindTask
	tst.l	d0
	beq.s	ncrr
	move.l	d0,-(a7)
	jsr	-120(a6)		; Disable
	move.l	(a7),a1			; Task
	jsr	-288(a6)		; RemTask
	move.l	#$fc06dc,-454(a6)	; DoIO rücksetzen
	move.w	148(a6),d0		; VBlank-Interrupt
	cmp.w	#$fc,d0			; verändert ?
	bge.s	crrvb			; nein	->
	move.l	#$fc12fc,148(a6)
crrvb	move.l	(a7)+,a1
	suba.w	#$40a,a1
	move.l	#$7d0,d0
	jsr	-210(a6)		; FreeMem
	jsr	-126(a6)		; Enable
	moveq	#0,d5
	move.l	d5,42(a6)		; ColdCapture löschen
	bsr	ClrCool			; CoolCapture löschen
	virus	DiskDoktors
ncrr	cmp.l	#$7f300,a3		; ASS-Virus
	bne.s	nass
	bsr	KillRes
	virus	ASS
nass	cmp.l	#$7ec74,d6		; Phantasmumble
	bne.s	nphm
	bsr	ClrCool
* Der folgende Programmteil ist von VirusX gestohlen.
* Er sollte noch verbessert werden!
; ha, ha, here's nothing!!
* Ende des gestohlenen Teils
	virus	Phantasmumble
nphm	cmp.l	#$7ec64,d6		; HCS
	bne.s	nhcs
	bsr	ClrCool
* Der folgende Programmteil ist von VirusX gestohlen.
* Er sollte noch verbessert werden!
	move.l	$7ef9c,-454(a6)
* Ende des gestohlenen Teils
	virus	HCS
nhcs	cmp.l	#$7ed36,d6		; UltraFox
	bne.s	nuf
	bsr	ClrCool
* Der folgende Programmteil ist von VirusX gestohlen.
* Er sollte noch verbessert werden!
	cmp.w	#7,-454(a6)
	bne.s	uf1
	move.l	$7eb38,-454(a6)
uf1
* Ende des gestohlenen Teils
	virus	UltraFox
nuf	move.l	d6,d0			; VKill 1.0
	sub.l	58(a6),d0
	cmp.l	#$82,d0
	bne.s	nvk1
	bsr	ClrCool
	move.l	58(a6),a0
	move.l	286(a0),-364(a6)	; PutMsg rücksetzen
	virus	VKill_1_0
nvk1	moveq	#$6c,d1
	cmp.l	d1,d0			; Obelisk ?
	bne.s	nob
	bsr	ClrCool
	move.l	58(a6),a0
	lea	$b0(a0),a0
	tst.l	(a0)			; DoIO verändert ?
	beq.s	ob1
	move.l	(a0),-454(a6)		; DoIO rücksetzen
ob1	virus	Obelisk
nob	cmp.l	#$7faa8,d6		; Suntronic
	bne.s	nst
	bsr	ClrCool
	move.l	#$fc06dc,-454(a6)	; DoIO rücksetzen (Kick 1.2)
	virus	Suntronic
nst	lea	-$3f4(a3),a1		; Joshua
	cmp.l	(a1),d7			; 'DOS'
	bne.s	njo
	move.l	TDBase(pc),a0
	move.l	$3e8(a1),-28(a0)	; BeginIO rücksetzen
	move.l	$3ec(a1),148(a6)	; VB-IRQ rücksetzen
	clr.l	546(a6)			; KickMemPtr
	move.l	#$4f2,d0
	jsr	-210(a6)		; FreeMem
	bsr	KillRes
	virus	Joshua
njo	cmp.l	#$6100fd24,-$24(a3)	; IRQ ?
	bne.s	nirq
	bsr	KillIRQMem
	bsr	KillRes
	virus	IRQ
nirq


	move.l	(a3),a1
	move.l	14(a1),a1		; Resident->Name
	lea	LamerEX(pc),a0
	bsr	strcmp
	cmp.w	#22,d0
	bls.s	nlm
	lea	-18(a3),a0
	cmpi.w	#$abcd,(a0)+
	bne.s	lm1
	moveq	#Lamer2,d0
	bra.s	lm2
lm1	cmpi.w	#$abcd,(a0)+
	bne.s	lm3
	moveq	#Lamer1,d0
lm2	move.l	d0,-(a7)
	move.l	(a0)+,-610(a6)		; KickSumData-Funktion	rücksetzen
	move.l	TDBase(pc),a1
	move.l	(a0)+,-28(a1)		; BeginIO-Funktion rücksetzen
	move.l	(a0),a1
	bsr.s	FreeLamerMem
	move.l	(a7)+,d0
	bra	vim
lm3	cmp.l	#$b3beb2bb,-$46(a3)
	bne.s	lmunk
	move.l	-18(a3),-610(a6)	; KickSumData-Funktion	rücksetzen
	move.l	TDBase(pc),a1
	move.l	-14(a3),-28(a1)		; BeginIO-Funktion rücksetzen
	move.l	-6(a3),a1
	bsr.s	FreeLamerMem
	virus	Lamer3
lmunk	virus	Unknown
FreeLamerMem
	move.l	#1024,d0
	jsr	-210(a6)		; FreeMem
	bra	KillRes
nlm	lea	clist(pc),a0		; Revenge of the LAMER Exterminator
	bsr	strcmp
	bne.s	nrlm
	lea	-98(a3),a4
	move.l	(a4)+,-610(a6)		; KickSumData rücksetzten
	move.l	(a4)+,-214(a6)		; AvailMem rücksetzen
	move.l	144(a6),a1
	move.l	(a1),a1
	move.l	(a4)+,18(a1)		; VB-IRQ rücksetzen
	adda.w	#12,a4			; OpenWindow, DoIO, CloseDevice
	move.l	TDBase(pc),a1
	move.l	(a4)+,-28(a1)		; BeginIO rücksetzen
	addq.l	#8,a4
	move.l	(a4)+,a1
	move.l	#$12c0,d0
	jsr	-210(a6)		; FreeMem
	addq.l	#6,a4
	move.l	(a4)+,a1
	move.l	#1024,d0
	jsr	-210(a6)		; FreeMem
	bsr	KillRes
	virus	RevengeLAMER
nrlm	lea	ttv1(pc),a0		; Terrorists, BGS9
	bsr	strcmp
	bne.s	nbgs
	move.l	(a3),a0
	move.b	11(a0),d0
	move.w	d0,-(a7)
	clr.l	546(a6)			; KickMemPtr
	bsr	KillRes
	move.w	(a7)+,d0
	subq.b	#1,d0
	beq.s	terr
	subq.b	#1,d0
	beq.s	bgs
	virus	Unknown
terr	virus	Terrorists
bgs	virus	BGS9
nbgs	lea	vers(pc),a0		; ACT-Viruskiller
	bsr	strcmp
	cmp.w	#13,d0
	bhi	ACTf			; schon im Speicher ->
	lea	asdgdev(pc),a0		; asdg.vdisk.device
	bsr	strcmp
	beq.s	rrd
	lea	raddev(pc),a0		; ramdrive.device
	bsr	strcmp
	bne.s	unkm
rrd	bsr	NextRes
	lea	rad(pc),a0
	bsr	output
	bra.s	ok2
unkm	lea	unkmem(pc),a0		; unbekanntes resetfestes Programm
	bsr	output
	tst.l	d5
	beq.s	uncld
	lea	unkcold(pc),a0
	bsr	output
	moveq	#0,d5
	move.l	d5,42(a6)		; ColdCapture löschen
uncld	tst.l	d6
	beq.s	uncol
	lea	unkcool(pc),a0
	bsr	output
uncol	bsr	ClrCool
	tst.l	(a5)
	beq.s	ok3
	move.l	(a3),a0
	tst.l	14(a0)
	beq.s	unnon
	move.l	a0,-(a7)
	lea	unkname(pc),a0
	bsr	output
	move.l	(a7)+,a0
	move.l	14(a0),a0
	bsr	output
	lea	unkname2(pc),a0
	bsr	output
	bra.s	unkr
unnon	lea	unknoname(pc),a0
	bsr	output
unkr	bsr	KillRes
	bra.s	ok2
ok	lea	nomem(pc),a0
	bsr	output
ok2					; noch	ein Virus ?
	tst.l	d5			; ColdCapture
	bne	memtest
	tst.l	d6			; CoolCapture
	bne	memtest
	tst.l	(a5)			; KickTagPtr
	bne	memtest
ok3	moveq	#0,d1
	move.l	#ende-resident,d0
	jsr	-198(a6)		; AllocMem
	move.l	d0,a3
	beq	error
	move.l	TDBase(pc),a2
	lea	io+2(pc),a0
	move.l	-28(a2),(a0)		; Adresse der echten BeginIO speichern
	lea	ksd(pc),a0
	move.l	-610(a6),(a0)		; KickSumData speichern
	lea	WT+2(pc),a0
	move.l	-316(a6),(a0)		; Wait speichern
	move.l	a3,a1
	lea	resident(pc),a0
	move.l	#ende-resident,d0
	jsr	-624(a6)		; CopyMem
	move.l	a3,d0
	add.l	d0,(a3)			; Resident-Tabelle
	add.l	d0,10(a3)		; MatchWord
	add.l	d0,14(a3)		; EndSkip
	add.l	d0,22(a3)		; Name
	add.l	d0,26(a3)		; IdString
	add.l	d0,30(a3)		; Init
	move.l	550(a6),d0		; KickTagPtr
	beq.s	1$
	bset	#31,d0
1$	move.l	d0,4(a3)		; als Fortsetzung der Resident-Tabelle
	move.l	a3,550(a6)		; KickTagPtr
	jsr	-612(a6)		; KickSumData
	move.l	d0,554(a6)		; Prüfsumme speichern
	lea	SetFunctions-resident(a3),a0
	jsr	(a0)
error	btst	#0,Options(pc)		; -> 24 = X (eXit)
	beq.s	notX
	move.l	550(a6),d0
	beq.s	notX
	move.l	d0,a3
	jsr	34(a3)			; eject
notX	move.l	DosBase(pc),a1
	jsr	-414(a6)		; CloseLibrary
	moveq	#0,d0
	rts

KillRes:
	move.l	(a3)+,d0
	beq.s	1$
	bpl.s	KillRes
1$	bclr	#31,d0
	move.l	d0,(a5)
	move.l	d0,a3
	rts

NextRes:
	move.l	(a3)+,d0
	beq.s	nmr2
	bpl.s	NextRes
nmr2	bclr	#31,d0
	lea	-4(a3),a5
	move.l	d0,a3
	rts

ACTf	move.l	26(a3),a4		; IdString
	tst.l	(a4)
	beq	ok3
	lea	actmem(pc),a0
	bsr	output
	move.l	idstring(pc),d0
	cmp.l	(a4)+,d0
	blt	ACTneu			; neue Version im Speicher ->
	jsr	34(a3)			; eject
	bra	ok3
ACTneu	move.l	Options(pc),(a4)
	bra	error

output:	move.l	a0,d2			; Zeiger auf Text
	moveq	#0,d3			; Textlänge
2$	tst.b	(a0)+			; Zeichen zählen
	beq.s	1$
	addq.w	#1,d3
	bra.s	2$
1$	move.l	stdout(pc),d1		; FileHandle
	move.l	DosBase(pc),a6
	jsr	-48(a6)			; Write
	move.l	4,a6			; ExecBase
	rts

vim	clr.l	-(sp)			; Virus in Memory
	bsr	GetName
	tst.l	(sp)+
	bsr.s	output
	lea	memtext(pc),a0
	bsr.s	output
	bra	ok2

ClrCool:
	moveq	#0,d6			; CoolCapture löschen
	move.l	d6,46(a6)
	bra	ChkSum


clpdev		dc.b	'clipboard.device',0
raddev		dc.b	'ramdrive.device',0
asdgdev		dc.b	'asdg.vdisk.device',0
LamerEX 	dc.b	'The LAMER Exterminator !!!',0
Autor		dc.b	10,'written in 1989/90 by Christian Kläger',10,10,0
actmem		dc.b	'ACT-Viruskiller schon im Speicher',10,0
memtext		dc.b	'-Virus im Speicher gekillt',10,0
rad		dc.b	'Resetfeste RAM-Disk im Speicher',10,0
unkmem		dc.b	'Unbekanntes resetfestes Programm!',10,0
unkcold		dc.b	'(Cold-Capture gesetzt)',10,0
unkcool		dc.b	'(Cool-Capture gesetzt)',10,0
unkname		dc.b	'Name :  ',0
unknoname	dc.b	'Kein Name angegeben'
unkname2	dc.b	10,0
nomem		dc.b	'Kein Virus im Speicher',10,0

	even
TDBase	dc.l	0
stdout	dc.l	0

resident:
	dc.l	8,0			; Resident-Tabelle
	dc.w	$4afc			; MatchWord
	dc.l	8			; MatchTag (+Anfang)
	dc.l	ende-resident		; EndSkip (+Anfang)
	dc.b	1			; Flags
	dc.b	33			; Version
	dc.b	0			; Type
	dc.b	-5			; Priorität
	dc.l	vers-resident		; Name	(+Anfang)
	dc.l	idstring-resident	; IdString (+Anfang)
	dc.l	init-resident		; Init	(+Anfang)

eject:	move.l	4,a6			; ExecBase
	bsr	ObtainSemaphore
	lea	trddev(pc),a1		; 'trackdisk.device'
	lea	350(a6),a0		; Device-List
	jsr	-276(a6)		; FindName
	move.l	d0,a0
	move.l	io+2(pc),-28(a0)	; BeginIO rücksetzen
	move.l	ksd(pc),-610(a6)	; KickSumData rücksetzen
	move.l	WT+2(pc),-316(a6)	; Wait rücksetzen
	move.l	resident+4(pc),d0
	bclr	#31,d0
	move.l	d0,550(a6)		; KickTagPtr
	jsr	-612(a6)		; KickSumData
	move.l	d0,554(a6)
	move.l	boot(pc),a1
	move.l	#$c60,d0
	jsr	-210(a6)		; FreeMem
	lea	resident(pc),a1
	move.l	#ende-resident,d0
	jmp	-210(a6)		; FreeMem + rts

init:
	movem.l	d0-d1/a0-a1/a6,-(a7)
	move.l	Options(pc),d0
	btst	#18,d0			; R (not Resident)
	bne	remove
	lea	$dff000,a0
	moveq	#4,d1
	move.w	#$0100,$96(a0)
1$	move.w	6(a0),$180(a0)
	dbf	d0,1$
	dbf	d1,1$
	move.w	#$fff,$180(a0)
	move.l	4,a6
	move.l	#ende-resident,d0
	lea	resident(pc),a1
	jsr	-204(a6)		; AllocAbs
	bsr.s	SetFunctions
endinit	movem.l	(a7)+,d0-d1/a0-a1/a6
	rts
SetFunctions:
	move.l	4,a6			; ExecBase
	jsr	-120(a6)		; Disable
	move.l	#$10002,d1		; Chip-Memory, Clear
	move.l	#$c60,d0		; 3KByte
	jsr	-198(a6)		; AllocMem
	lea	boot(pc),a0
	move.l	d0,(a0)
	GetSemaphore	a0
	jsr	-558(a6)		; InitSemaphore
	lea	trddev(pc),a1		; 'trackdisk.device'
	lea	350(a6),a0		; Device-List
	jsr	-276(a6)		; FindName
	move.l	d0,a0
	lea	begin(pc),a1
	move.l	a1,-28(a0)		; BeginIO setzen
	lea	kicksumdata(pc),a1
	move.l	a1,-610(a6)
	lea	newWait(pc),a1
	move.l	a1,-316(a6)
	lea	offsettab(pc),a0
	move.l	a6,(a0)+
	move.w	#314,d0
	move.w	d0,(a0)+
	moveq	#0,d1
	move.l	a6,a1
ol11	add.w	-(a1),d1
	dbf	d0,ol11
	move.w	d1,(a0)
	jmp	-126(a6)		; Enable

* Diese Funktion wird von der Init-Funktion aufgerufen, falls das Programm
* nicht resetfest sein soll.
remove:
	move.l	4,a6
	move.l	resident+4(pc),d0
	bclr	#31,d0
	move.l	d0,550(a6)
	jsr	-612(a6)		; KickSumData
	move.l	d0,554(a6)
	lea	vers(pc),a1		; Namen löschen
	clr.b	(a1)
	bra	endinit

newWait:
	move.l	Options(pc),d1
	btst	#12,d1			; L (Libraryoffsets)
	beq.s	WT
	movem.l	d0/a0/a3/a5/a6,-(sp)
	lea	offsettab(pc),a3
	move.l	(a3)+,a1
	move.w	(a3)+,d0
	moveq	#0,d1
1$	add.w	-(a1),d1
	dbf	d0,1$
	cmp.w	(a3)+,d1
	beq.s	wtok
	move.w	d1,-2(a3)
	bsr	ObtainSemaphore
	move.l	4,a6
	bsr	SetStack
	bsr	BeginGuruTX
	lea	libch(pc),a3
	moveq	#36,d0
	bsr	CenterLine
	moveq	#50,d1
	bsr	DisplayAlert
	move.l	(a7),a7
	bsr	ReleaseSemaphore
wtok	movem.l	(sp)+,d0/a0/a3/a5/a6
WT	jmp	(0).l

kicksumdata:
	bsr	ObtainSemaphore
	movem.l	a0/a1,-(a7)
	move.l	550(a6),a1
	cmp.l	#$6100fd24,-$24(a1)
	beq.s	LVirq
	cmp.l	(a1),d0
	bne.s	1$
	move.b	#$22,d0
	cmp.l	a1,d0
	beq.s	LVbgs
1$	move.l	(a1),a1
	move.l	14(a1),a1		; Resident->Name
	lea	clist(pc),a0
	bsr	strcmp
	beq.s	LVrlm
	lea	resident(pc),a0
	move.l	a0,550(a6)
	move.l	ksd(pc),a0
	jsr	(a0)
	movem.l	(a7)+,a0/a1
	bra	ResetGuru

LVirq	bsr	KillIRQMem
	moveq	#IRQ,d0
	bra.s	LV
LVrlm	moveq	#0,d7
	move.l	8(a7),a0		; Rücksprungadresse
	move.w	#$4e75,(a0)		; rts einsetzen
	moveq	#RevengeLAMER,d0
	bra.s	LV
LVbgs	move.l	550(a6),a0
	moveq	#Terrorists,d1
	moveq	#0,d0
	move.b	-15(a0),d0
	subq.w	#1,d0
	beq.s	1$
	moveq	#BGS9,d1
1$	swap	d0
	move.w	#$ff80,d0
	asr.l	#4,d0
	move.l	(a0),a1
	move.l	d1,-(a7)
	jsr	-210(a6)		; FreeMem
	clr.l	546(a6)			; KickMemPtr
	move.l	(a7)+,d0
LV:	movem.l	d1-d4/a0-a5,-(a7)
	move.w	d0,-(a7)
	move.w	d0,-(a7)
	move.l	#1000,d0
	moveq	#0,d1
	jsr	-198(a6)		; AllocMem
	lea	LVtext(pc),a0
	move.l	d0,(a0)
	bsr	SwapLVtext
	bsr	BeginGuruTX
	bsr	SwapLVtext
	move.w	(a7)+,d0
	bsr	GetName
	move.l	a0,a3
	moveq	#36,d0
	bsr	BeginLine
	lea	infile(pc),a3
	copytx	a3,a5
	bsr	EndLine
	bsr	ReleaseSemaphore
	move.b	#1,(a5)+
	bsr	GetFileName
	bsr	ObtainSemaphore
	bsr	SwapLVtext
	moveq	#60,d1
	bsr	DisplayAlert
	bsr	SwapLVtext
	bsr	ReleaseSemaphore
	move.l	4,a5
	move.w	(a7)+,d0
	move.l	a4,d1
	beq	LVexit
	cmp.b	#IRQ,d0
	bne	LVnirq
					; IRQ im File löschen
	move.l	d3,d0			; Filelänge
	moveq	#0,d1
	exg	a5,a6
	jsr	-198(a6)		; AllocMem
	exg	a5,a6
	tst.l	d0
	beq	LVerror
	move.l	d0,a2			; Puffer
	move.l	a4,d1
	move.l	#1005,d2		; MODE_OLDFILE
	jsr	-30(a6)			; Open
	move.l	d0,d1
	beq	1$
	move.l	d0,d4
	move.l	a2,d2
	jsr	-42(a6)			; Read
	move.l	d4,d1
	jsr	-36(a6)			; Close
	move.l	a2,a0
	move.l	8(a0),d0
	lsl.l	#2,d0
	cmpi.l	#$fffe6100,30(a0,d0.l)
	bne	1$
	subq.l	#1,8(a0)
	subq.l	#1,16(a0)
	lea	20(a0),a1
	lea	24(a0),a0
	exg	a5,a6
	subq.l	#4,d0
	jsr	-630(a6)		; CopyMemQuick
	lea	1092(a0),a0
	move.l	a2,d0
	add.l	d3,d0
	sub.l	a0,d0
	move.l	a1,-(a7)
	jsr	-630(a6)		; CopyMemQuick
	move.l	(a7)+,a0
2$	move.l	(a0)+,d1
	cmp.w	#$3eb,d1		; hunk_bss
	bne.s	4$
	move.l	(a0)+,d1
	bra.s	3$
4$	cmp.w	#$3ec,d1		; hunk_reloc32
	bne.s	6$
5$	move.l	(a0)+,d1
	beq.s	3$
	subq.l	#1,(a0)+
	lsl.l	#2,d1
	add.l	d1,a0
	bra.s	5$
6$	cmp.w	#$3f1,d1		; hunk_debug
	beq.s	7$
	cmp.w	#$3e7,d1		; hunk_unit
	blt.s	8$
	cmp.w	#$3ea,d1		; hunk_data
	bgt.s	8$
7$	move.l	(a0)+,d1
	lsl.l	#2,d1
	add.l	d1,a0
	bra.s	3$
8$	cmp.w	#$3f2,d1		; hunk_end
	bne.s	9$	
3$	cmp.l	a0,a1
	bne.s	2$
9$	move.l	a1,a3
	exg	a5,a6
	move.l	a4,d1
	moveq	#0,d2
	jsr	-186(a6)		; SetProtection   (RWED)
	move.l	a4,d1
	move.l	#1006,d2		; MODE_NEWFILE
	jsr	-30(a6)			; Open
	move.l	d0,d1
	beq.s	1$
	move.l	d0,d4
	move.l	a2,d2
	move.l	d3,-(a7)
	move.l	a3,d3
	sub.l	d2,d3
	jsr	-48(a6)			; Write
	move.l	(a7)+,d3
	move.l	d4,d1
	jsr	-36(a6)			; Close
	moveq	#-1,d0			; Z-Flag löschen
1$	seq	d4
	exg	a5,a6
	move.l	a2,a1
	move.l	d3,d0
	jsr	-210(a6)		; FreeMem
	tst.b	d4
	bne	LVerror
	bra	LVexit
LVnirq	cmp.b	#Terrorists,d0
	beq.s	1$
	cmp.b	#BGS9,d0
	bne	LVnbgs
	lea	bgsname(pc),a3
	bra.s	2$
1$	lea	terrname(pc),a3
2$	move.l	a4,d1
	jsr	-72(a6)			; DeleteFile
	move.l	a4,a0
3$	tst.b	(a0)+
	bne.s	3$
	move.l	a0,a2
	move.l	a4,a1
	copytx	a1,a0
bgs2	move.l	a2,a0
4$	cmp.b	#':',(a0)+
	bne.s	4$
	move.l	a3,a1
	copytx	a1,a0
	move.l	a2,d1
	move.l	a4,d2
	jsr	-78(a6)			; Rename
	tst.l	d0
	bne	LVexit
	lea	bgsname(pc),a0
	cmp.l	a0,a3
	bne	LVerror
	lea	5(a0),a3
	bra.s	bgs2
LVnbgs	cmp.b	#RevengeLAMER,d0
	bne	LVnrlm
	move.l	a4,d1
	jsr	-72(a6)			; DeleteFile
	move.l	a4,a0
1$	tst.b	(a0)+
	bne.s	1$
	move.l	a0,a2
	move.l	a4,a1
	copytx	a1,a0
	move.l	a2,a0
2$	cmp.b	#':',(a0)+
	bne.s	2$
	lea	startup(pc),a1
	copytx	a1,a0
	move.l	a2,d1
	move.l	#1005,d2		; MODE_OLDFILE
	jsr	-30(a6)			; Open
	move.l	d0,d1
	beq	5$
	move.l	d0,d4
	subq.l	#6,a7
	move.l	a7,d2
	moveq	#6,d3
	jsr	-42(a6)			; Read
	move.l	a7,a0
3$	cmp.b	#$a0,(a0)
	bne.s	4$
	move.b	#$0a,(a0)+
	bra.s	3$
4$	move.l	d4,d1
	moveq	#0,d2
	moveq	#-1,d3
	jsr	-66(a6)			; Seek
	move.l	d4,d1
	move.l	a7,d2
	moveq	#6,d3
	jsr	-48(a6)			; Write
	move.l	d4,d1
	jsr	-36(a6)			; Close
	addq.l	#6,a7
5$	bra	LVexit
LVnrlm
LVerror	bsr	ObtainSemaphore
	bsr	BeginGuruTX
	lea	LVerr(pc),a3
	moveq	#36,d0
	bsr	CenterLine
	moveq	#50,d1
	bsr	DisplayAlert
	bsr	ReleaseSemaphore
LVexit	move.l	DosBase(pc),a1
	move.l	4,a6
	jsr	-414(a6)		; CloseLibrary
	move.l	LVtext(pc),a1
	move.l	#1000,d0
	jsr	-210(a6)		; FreeMem
	movem.l	(a7)+,d1-d4/a0-a5
	lea	resident(pc),a0
	move.l	a0,550(a6)
	move.l	ksd(pc),a0
	jsr	(a0)
	movem.l	(a7)+,a0/a1
	rts

GetFileName:
	lea	DosName(pc),a1
	jsr	-408(a6)		; OldOpenLibrary
	lea	DosBase(pc),a0
	move.l	d0,(a0)
	move.l	276(a6),a4		; ThisTask
	move.l	$98(a4),-(a7)		; CurrentDir
	move.l	$b8(a4),-(a7)		; WindowPtr
	move.l	$ac(a4),a2		; pr_CLI
	move.l	d0,a6
	add.l	a2,a2
	add.l	a2,a2
	move.l	16(a2),a3		; CommandName
	add.l	a3,a3
	add.l	a3,a3
	moveq	#0,d0
	move.b	(a3)+,d0
	clr.b	0(a3,d0.w)
	bsr.s	ExistsFile
	bne.s	1$
	moveq	#-1,d0
	move.l	d0,$b8(a4)		; WindowPtr (keine Requesters)
	move.l	8(a2),d0		; cli_CommandDir
2$	lsl.l	#2,d0
	beq.s	3$
	move.l	d0,a2
	move.l	4(a2),d1
	jsr	-126(a6)		; CurrentDir
	bsr.s	ExistsFile
	bne.s	1$
	move.l	(a2),d0
	bra.s	2$
3$	clr.l	$b8(a4)			; Requesters auf Workbench
	lea	Cdir(pc),a0
	move.l	a0,d1
	moveq	#-2,d2
	jsr	-84(a6)			; Lock
	jsr	-126(a6)		; CurrentDir
	bsr.s	ExistsFile
	bne.s	1$
	moveq	#46,d0
	lea	LVerr(pc),a3
	bsr	CenterLine
	move.l	(a7)+,$b8(a4)
	move.l	(a7)+,d1
	jsr	-126(a6)		; CurrentDir
	sub.l	a4,a4
	rts
1$	move.l	d0,a2			; Zeiger auf Lock
	move.l	(a7)+,$b8(a4)
	move.l	(a7)+,d1
	jsr	-126(a6)		; CurrentDir
	lea	3(a5),a4
	move.l	a2,d1
	bsr	PathName
	move.l	a2,d1
	jsr	-90(a6)			; UnLock
	clr.b	-(a5)
	bra	EndLine

ExistsFile:
	move.l	a3,d1
	moveq	#-2,d2
	jsr	-84(a6)			; Lock
	tst.l	d0
	rts

PathName:
	move.l	d1,-(a7)
	jsr	-210(a6)		; ParentDir
	move.l	d0,d1
	beq.s	2$
	bsr.s	PathName
	moveq	#'/',d3
1$	move.l	(a7)+,d1
	move.l	boot(pc),d2
	add.l	#$800,d2
	jsr	-102(a6)		; Examine
	move.l	boot(pc),a0
	lea	$808(a0),a0
	tst.b	d3
	bpl.s	3$
	move.l	a0,a3
	moveq	#46,d0
	bsr	BeginLine
	move.b	#':',(a5)+
	rts
2$	moveq	#-1,d3
	bra.s	1$
3$	move.l	a0,-(a7)
	copytx	a0,a5
	move.b	d3,(a5)+
	move.l	(a7)+,a0
	move.l	$74(a0),d3
	rts

SwapLVtext:
	movem.l	d0/a0,-(a7)
	lea	boot(pc),a0
	move.l	(a0),d0
	move.l	4(a0),(a0)+
	move.l	d0,(a0)
	movem.l	(a7)+,d0/a0
	rts

install:
	move.l	Options(pc),d0
	btst	#23,d0			; W (Write)
	bne	endio
	bsr	toMemo
	bra	kill2
begin:
	bsr	ObtainSemaphore
	movem.l	d0-d2/a0/a2/a3/a5,-(a7)
	move.l	a6,a5
	move.l	4,a6
	tst.l	42(a6)			; CoolCapture prüfen
	bne.s	coolst
	tst.l	46(a6)			; ColdCapture prüfen
	beq.s	nores
coolst	bsr	ResetGuru
nores	move.l	a5,a6
	bsr	BeginIO
	tst.l	44(a1)			; io_Offset = Bootblock
	bne	endio
	cmp.w	#3,28(a1)		; CMD_WRITE
	beq.s	install
	cmp.w	#2,28(a1)		; CMD_READ
	bne	endio
	bsr	WaitIO
	bne	endio			; Lesefehler
	bsr	toMemo
	move.l	40(a1),a0
	add.w	#12,a0
	lea	Std2(pc),a3
	moveq	#18,d0
scm1	move.w	(a0)+,d1
	cmp.w	(a3)+,d1
	bne.s	nstd
	dbf	d0,scm1
	beq	endio			; keinen Text ausgeben
nstd	move.l	40(a1),a0
	bsr	BeginGuruTX

	lea	viren(pc),a3		; allg. Virentest-Schleife
	lea	endviren(pc),a2
test	moveq	#0,d0
	move.b	1(a3),d0
	add.w	d0,d0
	move.l	0(a0,d0.w),d0
	cmp.l	2(a3),d0
	beq	virusfound
	addq.l	#8,a3
	cmp.l	a3,a2
	bne.s	test


	bsr	Read
	bsr	BootCheckSum		; Prüfsumme prüfen
	bne	endio			; nicht bootfähig
	move.l	40(a1),a0

	move.l	a0,a2
	lea	$400(a2),a3
12$	cmp.w	#$337c,(a2)+		; move.w #3,28(a1)
	beq.s	11$
	cmp.l	a2,a3
	bne.s	12$
	move.l	a0,a2
22$	cmp.w	#$137c,(a2)+		; move.b #3,29(a1)
	beq.s	21$
	cmp.l	a2,a3
	bne.s	22$
	bra.s	30$
11$	cmp.l	#$0003001c,(a2)
	bne.s	12$
	bra.s	25$
21$	cmp.l	#$0003001d,(a2)
	bne.s	22$
25$	lea	endviren(pc),a3
	beq	virusfound

30$	lea	unk(pc),a3		; Unknown Bootblock
	moveq	#36,d0
	bsr	CenterLine
	bsr	drivenr
	moveq	#12,d0			; 13 Zeilen
tx1	moveq	#76,d1			; zu 77 Zeichen
	move.b	#1,(a5)+		; Text	noch nicht fertig
	clr.b	(a5)+
	move.b	#$c,(a5)+		; horiz. Koordinate
	move.w	d0,d2
	asl.w	#3,d2
	neg.w	d2
	add.w	#148,d2			; vert. Koordinate berechnen
	move.b	d2,(a5)+		; und einfügen
tx2	bsr	zeich			; Zeichen umwandeln
	dbf	d1,tx2			; nächstes Zeichen
	clr.b	(a5)+			; Ende	der Zeile
	dbf	d0,tx1			; nächste Zeile
	move.b	#1,(a5)+		; Text	noch nicht fertig
	clr.b	(a5)+
	move.b	#$c,(a5)+		; horiz. Koordinate
	move.b	#156,(a5)+		; vert. Koordinate
	moveq	#22,d1			; 23 Zeichen
tx3	bsr	zeich			; umwandeln
	dbf	d1,tx3			; und nächstes
	clr.b	(a5)+			; Ende	der Zeile
	move.l	#175,d1			; Höhe	des Gurus

guru	movem.l	a1/a6,-(a7)
	move.b	#1,(a5)+
	clr.b	(a5)+
	move.b	#64,(a5)+
	move.b	d1,(a5)+
	add.w	#12,d1
	move.l	d1,-(a7)
	lea	wprot(pc),a3
	lea	write(pc),a0
	tst.w	(a0)
	bne.s	gu1
	lea	wena(pc),a3
gu1	copytx	a3,a5
	move.l	(a7)+,d1		; Höhe	des Gurus
	bsr	DisplayAlert
	movem.l	(a7)+,a1/a6
	moveq	#-1,d1
	lea	write(pc),a0
	tst.w	(a0)
	bne.s	gu2
	tst.w	d0
	bne.s	gu2
kill2	bsr	kill
	bne.s	vererr			; Schreibfehler
	bsr	ReadIt			; Verify !!!
	moveq	#0,d1
	lea	Std(pc),a3
	moveq	#24,d0
v1	cmpm.w	(a3)+,(a0)+
	dbne	d0,v1
	beq.s	gu2
vererr	bsr	BeginGuruTX
	lea	verr(pc),a3
	moveq	#36,d0
	bsr	CenterLine
	moveq	#50,d1
	bsr	DisplayAlert
	moveq	#-1,d1
gu2	move.w	d1,-(a7)
	move.l	#$400,d0
	move.l	d0,44(a1)		; ab Block 2
	move.l	d0,36(a1)		; 2 Blocks
	move.w	#2,28(a1)		; CMD_READ
	move.l	boot(pc),40(a1)
	bsr	DoIO
	move.l	40(a1),a0
	cmp.l	#$889ea600,(a0)
	bne.s	nolm3
	move.w	#511,d0			; Anz. Worte -1
lm3dec	ror.w	(a0)+
	dbf	d0,lm3dec
	clr.l	44(a1)
	move.w	#3,28(a1)		; CMD_WRITE
	bsr	DoIO
nolm3	move.w	(a7)+,d1
	moveq	#11,d0
	GetMemo	a0
	move.l	a1,a3
c2	move.l	(a0)+,(a3)+		; original Rückmeldung holen
	dbf	d0,c2
	cmp.l	#$400,36(a1)		; io_Length = 1KByte
	bne	endio
	cmp.l	40(a1),a4		; booten wir ?
	bne	endio			; nein	->
	tst.w	d1
	beq.s	dont
	bsr	BeginGuruTX
	lea	doit(pc),a3
doit2	move.b	(a3)+,(a5)+		; Text ausgeben
	bne.s	doit2
	move.b	(a3)+,(a5)+		; Textende ?
	bne.s	doit2
	moveq	#70,d1
	bsr	DisplayAlert
	tst.w	d0
	bne	endio
dont	move.l	40(a1),a3
	move.l	a3,a0
	move.w	#255,d0
dont1	clr.l	(a3)+
	dbf	d0,dont1
	lea	Std(pc),a3
	moveq	#24,d0
dont2	move.w	(a3)+,(a0)+
	dbf	d0,dont2

endio	movem.l	(a7)+,d0-d2/a0/a2/a3/a5
	bra	ReleaseSemaphore

copys:	move.b	#1,(a5)+
	lea	anz(pc),a3
	moveq	#52,d0
	bsr	BeginLine
	moveq	#0,d1
	move.l	40(a1),a0
	move.w	0(a0,d2.w),d1
	bsr.s	itoa
	moveq	#70,d1
	bra	guru

itoa:	move.l	#10000,d0
	move.b	#$20,(a5)
nziff	divu	d0,d1
	bne.s	cout
	cmp.b	#$20,-1(a5)
	beq.s	ncout
cout	add.b	#$30,d1
	move.b	d1,(a5)+
ncout	swap	d1
	ext.l	d1
	divu	#10,d0
	cmp.w	#1,d0
	bne.s	nziff
	add.b	#$30,d1
	move.b	d1,(a5)+
	bra	EndLine

zeich:	move.b	(a0)+,d2
	cmp.b	#$1f,d2
	bhi.s	z1
	move.b	#$2e,d2
z1	cmp.b	#$7d,d2
	bls.s	z2
	move.b	#$2e,d2
z2	move.b	d2,(a5)+
	rts

GetName:
	lea	names(pc),a0
	bra.s	1$
2$	tst.b	(a0)+
	bne.s	2$
1$	dbf	d0,2$
	tst.b	(a0)			; SCA-Clone ?
	bpl.s	3$			; nein ->
	move.l	a5,-(a7)
	move.l	a0,a5
	move.l	8(a7),d0
	beq.s	4$
	bsr	Read
	move.l	a0,8(a7)
	bra.s	5$
4$	lea	$7ec00,a0
5$	movem.l	a2/a3,-(a7)
	lea	SCAviren(pc),a3
	lea	endSCA(pc),a2
6$	move.w	2(a3),d0
	move.l	0(a0,d0.w),d0
	cmp.l	4(a3),d0
	beq	7$
	addq.l	#8,a3
	cmp.l	a3,a2
	bne.s	6$
	lea	1(a5),a0
	bra.s	8$
7$	move.w	(a3),d0
	bsr.s	GetName
8$	movem.l	(a7)+,a2/a3
	move.l	(a7)+,a5
3$	rts

virusfound:
	move.l	a3,-(a7)
	moveq	#0,d0
	move.b	(a3),d0
	move.l	a0,-(a7)
	bsr.s	GetName
	move.l	a0,a3
	move.l	(a7)+,a0
	moveq	#36,d0
	bsr	BeginLine
	lea	indrive(pc),a3
	copytx	a3,a5
	bsr	EndLine
	bsr.s	drivenr
	bsr.s	Read
	move.l	(a7)+,a3
	move.w	6(a3),d2
	bne	copys
	moveq	#50,d1
	bra	guru

drivenr:				; Drive-Nummer korrigieren
	movem.l	d0/a0,-(a7)
	move.l	24(a1),a0		; -> io_Unit
	move.b	67(a0),d0		; Drivenummer
	add.b	d0,-3(a5)		; bei DF0: addieren
	move.b	64(a0),d0
	lea	write(pc),a0
	and.w	#$10,d0
	move.w	d0,(a0)
	movem.l	(a7)+,d0/a0
	rts

BeginIO:
	movem.l	a1/a6,-(a7)
io	jsr	(0).l			; Original-Funktion
	movem.l	(a7)+,a1/a6
	rts

DoIO:	bsr.s	BeginIO
WaitIO:	movem.l	a1/a6,-(a7)
	move.l	4,a6
	jsr	-474(a6)		; WaitIO
	movem.l	(a7)+,a1/a6
	rts

Read:	cmp.l	#$200,36(a1)		; nur 1 Block gelesen ?
	bne.s	nread
ReadIt:	move.l	#$400,36(a1)
	move.l	boot(pc),a0
	lea	$800(a0),a0
	move.l	a0,40(a1)
	bsr.s	DoIO
nread	move.l	40(a1),a0
	rts

kill:	move.l	#$400,36(a1)
	move.l	boot(pc),a0
	lea	$800(a0),a0
	move.l	a0,40(a1)
	move.l	a0,a3
	move.w	#3,28(a1)			; CMD_WRITE
	move.w	#255,d0
1$	clr.l	(a3)+
	dbf	d0,1$
	lea	Std(pc),a3
	moveq	#24,d0
2$	move.w	(a3)+,(a0)+
	dbf	d0,2$
	bra	DoIO

BootCheckSum:
	move.w	#$ff,d1
	moveq	#0,d0
	move.l	40(a1),a0
bcloop	add.l	(a0)+,d0
	bcc.s	bcnext
	addq.l	#1,d0
bcnext	dbf	d1,bcloop
	not.l	d0
	rts

SetStack:
	lea	4(a7),a0
	GetMemo	a7
	move.l	a0,-(a7)
	move.l	-(a0),-(a7)
	rts

ResetGuru:
	movem.l	d0-d3/a0-a5,-(sp)
	bsr.s	SetStack
	clr.l	42(a6)			; CoolCapture löschen
	clr.l	46(a6)			; ColdCapture löschen
	bsr	ChkSum
	bsr	BeginGuruTX
	lea	res(pc),a3
	moveq	#36,d0
	bsr	CenterLine
	moveq	#50,d1
	bsr.s	DisplayAlert
	move.l	(a7),a7
	movem.l	(sp)+,d0-d3/a0-a5
	bra	ReleaseSemaphore

BeginGuruTX:
	move.l	boot(pc),a5
	lea	vers(pc),a3
	moveq	#20,d0
	bsr	CenterLine
	move.b	#1,(a5)+
	rts

DisplayAlert:
	movem.l	d4-d5/a0-a1/a6,-(a7)
	clr.b	(a5)+
	clr.b	(a5)+
	move.l	d1,d5
	move.l	4,a6			; ExecBase
	jsr	-132(a6)		; Forbid
	lea	378(a6),a0		; LibList
	lea	intuition(pc),a1	; intuition.library
	jsr	-276(a6)		; FindName
	move.l	d0,a6
	move.w	d0,-(a7)		; 2 Bytes auf Stack reservieren
	move.l	a7,a0
	moveq	#2,d0
	jsr	-132(a6)		; GetPrefs
	move.w	(a7),d4
	move.b	#8,(a7)			; topaz.80
	move.l	a7,a0
	moveq	#2,d0
	moveq	#0,d1
	jsr	-324(a6)		; SetPrefs
	move.l	d5,d1
	moveq	#0,d0
	move.l	boot(pc),a0
	jsr	-90(a6)			; DisplayAlert
	move.w	d0,-(a7)
	move.w	d4,2(a7)
	lea	2(a7),a0
	moveq	#2,d0
	moveq	#0,d1
	jsr	-324(a6)		; SetPrefs
	move.l	4,a6
	jsr	-138(a6)		; Permit
	movem.w	(a7)+,d0/d4
	movem.l	(a7)+,d4-d5/a0-a1/a6
	rts

ChkSum:	lea	34(A6),A0		; Prüfsumme berechnen
	clr.w	D0
	moveq	#$17,D1
1$	add.w	(A0)+,D0
	dbf	D1,1$
	not.w	D0
	move.w	D0,(A0)			; Prüfsumme speichern
	rts

toMemo	moveq	#11,d0
	Getmemo	a0
	move.l	a1,a3
1$	move.l	(a3)+,(a0)+
	dbf	d0,1$
	rts

strcmp:	movem.l	a0-a1,-(a7)
	moveq	#0,d0
2$	cmpm.b	(a0)+,(a1)+
	bne.s	1$
	addq.w	#1,d0
	tst.b	-1(a0)
	bne.s	2$
1$	movem.l	(a7)+,a0-a1
	rts

CenterLine:
	bsr.s	BeginLine
EndLine: clr.b	(a5)+
lineanf	lea	(0).l,a3
	move.l	a5,d0
	sub.l	a3,d0
	bmi.s	1$
	lsl.w	#2,d0
	sub.w	#336,d0
	bpl.s	1$
	neg.w	d0
	move.b	d0,1(a3)
	asr.w	#8,d0
	move.b	d0,(a3)
	rts
1$	clr.b	(a3)+
	clr.b	(a3)+
	rts

BeginLine:
	move.l	a0,-(a7)
	lea	lineanf+2(pc),a0
	move.l	a5,(a0)
	move.l	(a7)+,a0	
	addq.l	#2,a5
	move.b	d0,(a5)+
	copytx	a3,a5
	rts

KillIRQMem:
	move.l	-406(a6),a0
	move.l	$12(a0),-406(a6)	; OldOpenLibrary rücksetzen
	lea	-$3c6(a0),a1
	move.l	#$42c,d0
	jmp	-210(a6)		; FreeMem

ObtainSemaphore:
	movem.l	d0-d1/a0-a1/a6,-(a7)
	GetSemaphore	a0
	move.l	4,a6
	jsr	-564(a6)		; ObtainSemaphore
	movem.l	(a7)+,d0-d1/a0-a1/a6
	rts

ReleaseSemaphore:
	movem.l	d0-d1/a0-a1/a6,-(a7)
	GetSemaphore	a0
	move.l	4,a6
	jsr	-570(a6)		; ReleaseSemaphore
	movem.l	(a7)+,d0-d1/a0-a1/a6
	rts


viren		; Name	      ,Adr/2,Langwort	   ,CopyCnt
	dc.b		     ASS,$18,$20,$41,$4d,$49,$00,$00
	dc.b		   Bit16,$a8,$3f,$ff,$2c,$78,$00,$00
	dc.b		 Butonic,$13,$ff,$fc,$61,$3c,$00,$00
	dc.b	      ByteBandit,$06,$60,$00,$00,$3e,$00,$4a
	dc.b	  ByteBanditPlus,$0a,$0c,$39,$00,$02,$00,$00
	dc.b	     ByteWarrior,$23,$43,$fa,$ff,$b8,$00,$00
	dc.b	     DiskDoktors,$a9,$00,$fc,$06,$dc,$03,$aa
	dc.b		 Gadaffi,$20,$47,$41,$44,$41,$00,$00
	dc.b	       Graffitti,$a8,$00,$01,$00,$bf,$00,$00
	dc.b		   Gyros,$42,$4e,$75,$2c,$79,$00,$00
	dc.b		  Joshua,$15,$ff,$88,$30,$2e,$00,$12
	dc.b		  Lamer1,$1e,$ff,$88,$41,$fa,$00,$00	; 1.0 - 1.2
	dc.b		  Lamer2,$23,$d3,$10,$b1,$18,$03,$a4	; 2.0
	dc.b		  Lamer2,$19,$b3,$be,$b2,$bb,$03,$c6	; 2.1
	dc.b		  Lamer3,$11,$d3,$10,$b1,$18,$03,$f2	; 3.0
	dc.b		  Lamer3,$18,$10,$39,$00,$df,$00,$00	; lt. Vir.Kat.
	dc.b	       NorthStar,$08,$4e,$6f,$72,$74,$00,$1c	; 1
	dc.b	       NorthStar,$09,$4e,$6f,$72,$74,$00,$1e	; 2
	dc.b		 Obelisk,$0a,$fe,$3a,$65,$18,$00,$00
	dc.b	       Paramount,$60,$50,$53,$57,$43,$00,$00
	dc.b		Pentagon,$09,$00,$07,$fd,$84,$00,$00
	dc.b	   Phantasmumble,$20,$42,$40,$32,$3c,$00,$00
	dc.b		 Revenge,$07,$49,$44,$39,$32,$03,$f6
	dc.b	      SCA_Clones,$06,$41,$fa,$ff,$f2,$02,$f8	; AEK,BS1,LSD
	dc.b	       Suntronic,$2f,$2d,$40,$02,$2a,$00,$00
	dc.b		System_Z,$02,$50,$56,$4c,$2e,$00,$00
	dc.b		     HCS,$20,$51,$c8,$ff,$fc,$00,$00
	dc.b		Timebomb,$d8,$53,$55,$43,$4b,$00,$00
	dc.b		UltraFox,$e8,$83,$35,$3e,$f0,$00,$00
	dc.b	       VKill_1_0,$1f,$00,$3a,$26,$49,$02,$de
	dc.b		    WAFT,$35,$ff,$3a,$28,$40,$00,$00
	dc.b		 Warhawk,$43,$e6,$3a,$4c,$df,$00,$00
endviren dc.l	0,0		; dummy-Eintrag für unbekannte Viren

SCAviren     ; Name, Adr, Langwort
	dc.w	AEK,$3d0,$2041,$454b
	dc.w	BS1,$3b8,$2043,$3634
	dc.w	LSD,$3f0,$4c53,$4421
endSCA
names:
virusnum	set	0
 virusname	Unknown,<'Unknown'>
 virusname	AEK,<'AEK'>
 virusname	ASS,<'ASS'>
 virusname	BS1,<'Bamiga Sector One'>
 virusname	Bit16,<'16 Bit Crew'>			; fehlt in Sammlung
 virusname	BGS9,<'BGS 9'>
 virusname	Butonic,<'Butonic'>			; fehlt in Sammlung
 virusname	ByteBandit,<'ByteBandit'>
 virusname	ByteBanditPlus,<'ByteBanditPlus'>	; fehlt in Sammlung
 virusname	ByteWarrior,<'ByteWarrior'>
 virusname	DiskDoktors,<'DiskDoktors'>
 virusname	Gadaffi,<'Gadaffi'>
 virusname	Graffitti,<'Graffitti'>			; fehlt in Sammlung
 virusname	Gyros,<'Gyros'>				; fehlt in Sammlung
 virusname	HCS,<'HCS'>				; fehlt in Sammlung
 virusname	IRQ,<'IRQ'>
 virusname	Joshua,<'Joshua'>
 virusname	Lamer1,<'LAMER Exterminator I'>
 virusname	Lamer2,<'LAMER Exterminator II'>
 virusname	Lamer3,<'LAMER Exterminator III'>
 virusname	LSD,<'LSD'>
 virusname	NorthStar,<'NorthStar'>			; Versionen 1 und 2
 virusname	Obelisk,<'Obelisk'>
 virusname	Paramount,<'Paramount'>			; fehlt in Sammlung
 virusname	Pentagon,<'Pentagon Circle'>
 virusname	Phantasmumble,<'Phantasmumble'>		; fehlt in Sammlung
 virusname	Revenge,<'Revenge'>
 virusname	RevengeLAMER,<'Revenge Of The LAMER Exterminator'>
 virusname	SCA_Clones,<-1,'SCA'>			; AEK, BS1, LSD, SCA
 virusname	Suntronic,<'Suntronic'>
 virusname	System_Z,<'System Z'>		; Vers. 3.0,4.0,5.0 (5.3 fehlt)
 virusname	Terrorists,<'Terrorists'>
 virusname	Timebomb,<'Timebomb'>
 virusname	UltraFox,<'UltraFox'>			; fehlt in Sammlung
 virusname	VKill_1_0,<'VKill'>
 virusname	WAFT,<'WAFT'>				; fehlt in Sammlung
 virusname	Warhawk,<'Warhawk'>		; fehlt in Sammlung

res	dc.b	'WARNUNG: Ein Programm wollte sich resetfest machen !!!',0
libch	dc.b	'WARNUNG: Eine Library-Funktion wurde verändert!!!',0
verr	dc.b	'Verify-Error!!!   Bootblock nicht installiert!',0
doit	dc.b	0,172,36,'Soll der Bootblock ausgeführt werden?',0,1
	dc.b	0,100,48,'Links: ja',0,1,1,188,48,'Rechts: nein',0,0
wprot	dc.b	'Linker Mausknopf: weiter         '
	dc.b	'        Disk ist schreibgeschützt',0
wena	dc.b	'Linker Mausknopf: weiter         '
	dc.b	'       Rechter Mausknopf: install',0
indrive		dc.b	'-Virus in Drive DF0:',0
infile		dc.b	'-Virus im File:',0
anz		dc.b	'Anzahl Kopien: ',0
unk		dc.b	'Unknown Bootblock in Drive DF0:',0
LVerr		dc.b	'Fehler beim Linkvirus killen!!!',0
bgsname		dc.b	'devs/',$a0,$a0,$a0,$20,$20,$20,$a0,$20,$20,$20,$a0,0
terrname	dc.b	$a0,$20,$20,$20,$a0,$20,$20,$a0,$20,$a0,$a0,0
startup		dc.b	's/startup-sequence',0
Cdir		dc.b	'C:',0
clist		dc.b	'clist.library',0
trddev		dc.b	'trackdisk.device',0
intuition	dc.b	'intuition.library',0
ttv1		dc.b	'TTV1',0
		even
idstring	dc.l	$31303000		; 1.0
Options 	dc.l	0
vers		dc.b	'ACT-Viruskiller Version 1.0',0
	even
Std	dc.w	$444f,$5300,$c020,$0f19,$0000,$0370
Std2	dc.w	$43fa,$0018,$4eae,$ffa0,$4a80,$670a,$2040,$2068
	dc.w	$0016,$7000,$4e75,$70ff,$60fa
DosName dc.b	'dos.library',0		; muss hier sein, da zu Std gehört!!

DosBase	dc.l	0
ksd	dc.l	0

boot		set	*
LVtext		set	boot+4
write		set	LVtext+4
offsettab	set	write+2
ende		set	offsettab+8


	end

