;:ts=8

;	opt		OW+
	incdir 	"devpac:include/"

	nolist

	include	"exec/nodes.i"
	include	"exec/Ports.i"
	include	"exec/execbase.i"
	include	"exec/exec_lib.i"
	include	"libraries/dos_lib.i"
	include	"libraries/dosextens.i
	include	"libraries/dos.i

RecSize
	dc.l	26
tableptr
	dc.l	tabellink

tabellink
	dc.w	$d4		;IQR-virus offset 
	dc.l	$b1985680	;Control waarde
	dc.l	IRQ		;Pointer to Name
	dc.l	IRQMem		;Routine to check if the virus is in memory
	dc.l	IRQMemRem	;Routine to remove the virus from the memory
	dc.l	0
	dc.l	0

	dc.w	$58		;TTV1-virus
	dc.l	$421fffb9
	dc.l	TTV1
	dc.l	0
	dc.l	0
	dc.l	0
	dc.l	0

	dc.w	$38		;Revenge of Lamer 1 ....
	dc.l	$80059414
	dc.l	Rev1Lam
	dc.l	Rev1Mem
	dc.l	Rev1MemRem
	dc.l	0
	dc.l	0

	dc.w	$38		;Revenge of Lamer 2 ....
	dc.l	$000223d4
	dc.l	Rev2Lam
	dc.l	Rev2Mem
	dc.l	Rev2MemRem
	dc.l	0
	dc.l	0

	dc.w	$440		;Xeno
	dc.l	$d8e5eeef
	dc.l	Xeno
	dc.l	0
	dc.l	0
	dc.l	0
	dc.l	0

	dc.w	$8e2		;Butonic1.31
	dc.l	$0a98aaaa
	dc.l	But131
	dc.l	But131Mem
	dc.l	But131MemRem
	dc.l	0
	dc.l	0

	dc.w	$60		;Butonic 3.00
	dc.l	$0a59b4ed
	dc.l	But300
	dc.l	But300Mem
	dc.l	But300MemRem
	dc.l	0
	dc.l	0

	dc.w	$56		;CCCP
	dc.l	$4df8006c
	dc.l	CCCP
	dc.l	0
	dc.l	0
	dc.l	0
	dc.l	0

	dc.w	$316		;DisasterMaster
	dc.l	$b11851c8
	dc.l	Disast
	dc.l	0
	dc.l	0
	dc.l	0
	dc.l	0

	dc.w	$60		;Centurion
	dc.l	$303c0f3f
	dc.l	Cent
	dc.l	0
	dc.l	0
	dc.l	0
	dc.l	0

	dc.w	$2c		;Traveling-Jack2
	dc.l	$0a0200ad
	dc.l	Travel2
	dc.l	0
	dc.l	0
	dc.l	0
	dc.l	0

	dc.w	$28		;Traveling-Jack1
	dc.l	$0a02002f
	dc.l	Travel1
	dc.l	0
	dc.l	0
	dc.l	0
	dc.l	0

	dc.w	$08		;Terrorists
	dc.l	$41fa014e
	dc.l	Terror
	dc.l	0
	dc.l	0
	dc.l	0
	dc.l	0

	dc.w	$13c		;BBS
	dc.l	$23f80074
	dc.l	BBS
	dc.l	BBSMem
	dc.l	BBSMemRem
	dc.l	0
	dc.l	0

	dc.w	$1a		;Return of the LamerExterminator!
	dc.l	$06b1b118
	dc.l	RetLam
	dc.l	RetMem
	dc.l	RetMemRem
	dc.l	RetFileRem
	dc.l	0

	dc.w	$1a		;Saddam hussein
	dc.l	$06c1b118
	dc.l	Saddam
	dc.l	SadMem
	dc.l	SadMemRem
	dc.l	0
	dc.l	0

	dc.w	$38		;Bret Hawnes
	dc.l	$41faffca
	dc.l	Bret
	dc.l	0
	dc.l	0
	dc.l	0
	dc.l	0

	dc.w	$40		;Test programma
	dc.l	$45678901
	dc.l	Test
	dc.l	0
	dc.l	0
	dc.l	0
	dc.l	0

	dc.w	0		;End


IRQ	dc.b	'IRQ',0
TTV1	dc.b	'TTV1',0
Rev1Lam	dc.b	'Revenge of the lamer exterminator 1',0
Rev2Lam	dc.b	'Revenge of the lamer exterminator 2',0
Xeno	dc.b	'Xeno',0
But131	dc.b	'Butonic 1.31',0
But300	dc.b	'Butonic 3.00',0
CCCP	dc.b	'CCCP',0
Disast	dc.b	'DisasterMaster',0
Cent	dc.b	'Centurion',0
Travel1	dc.b	'Traveling Jack 1',0
Travel2	dc.b	'Traveling Jack 2',0
Terror	dc.b	'Terrorists',0
BBS	dc.b	'BBS',0
RetLam	dc.b	'ReturnOfTheLamer! (disk-validator)',0
Saddam	dc.b	'Saddam Hussein (disk-validator)',0
Bret	dc.b	'Bret Hawnes',0
Test	dc.b	'TestFile (Test file for PatchLoadSeg. Read Docs)',0

	even

IRQMem	movem.l	d1-d7/a0-a6,-(sp)
	move.l	4.w,a6
	move.l	_LVOOldOpenLibrary+2(a6),a5
	lea	-$306(a5),a5
	cmpi.l	#$b1985680,$18(a5)
	beq.s	IRQMYes
	clr.l	d0
	bra.s	IRQMEnd
IRQMYes	moveq.l	#1,d0
IRQMEnd	movem.l	(sp)+,a0-a6/d1-d7
	rts

IRQMemRem	
	movem.l	d1-d7/a0-a6,-(sp)
	move.l	4.w,a6
	move.l	_LVOOldOpenLibrary+2(a6),a5
	lea	-$306(a5),a5
	move.l	$318(a5),_LVOOldOpenLibrary+2(a6)
	bsr	ClearRes
	movem.l	(sp)+,d1-d7/a0-a6
	rts

Rev1Mem	movem.l	a0-a6/d1-d7,-(sp)
	bsr	FindTrackDisk
	move.l	-$1c(a1),a0
	cmpi.l	#$80059414,-$31c(a0)
	beq.s	Rev1Yes
	clr.l	d0
	bra.s	Rev1End
Rev1Yes	moveq.l	#1,d0
Rev1End	movem.l	(sp)+,a0-a6/d1-d7
	rts

Rev1MemRem
	movem.l	a0-a6/d1-d7,-(sp)
	bsr	FindTrackDisk
	jsr	_LVODisable(a6)
	jsr	_LVOForbid(a6)
	move.l	-$1c(a1),a5
	move.l	$e0c(a5),-$1c(a1)
	move.l	$df8(a5),_LVOAvailMem+2(a6)
	move.l	$df4(a5),_LVOSumKickData+2(a6)

	move.l	IVVERTB(a6),a0	;Struct IntVector IntVects (RasterBeam)
	move.l	(a0),a0
	move.l	$dfc(a5),$12(a0)
	jsr	_LVOEnable(a6)
	jsr	_LVOPermit(a6)
	bsr	ClearRes
	movem.l	(sp)+,a0-a6/d1-d7
	rts

Rev2Mem	movem.l	a0-a6/d1-d7,-(sp)
	bsr	FindTrackDisk
	move.l	-$1c(a1),a0
	cmpi.l	#$000223d4,-$318(a0)
	beq.s	Rev2Yes
	clr.l	d0
	bra.s	Rev2End
Rev2Yes	moveq.l	#1,d0
Rev2End	movem.l	(sp)+,a0-a6/d1-d7
	rts

Rev2MemRem
	movem.l	a0-a6/d1-d7,-(sp)
	bsr	FindTrackDisk
	jsr	_LVODisable(a6)
	jsr	_LVOForbid(a6)
	move.l	-$1c(a1),a5
	move.l	$e80(a5),-$1c(a1)
	move.l	$e6c(a5),_LVOAvailMem+2(a6)
	move.l	$e68(a5),_LVOSumKickData+2(a6)

	move.l	IVVERTB(a6),a0	;Struct IntVector IntVects (RasterBeam)
	move.l	(a0),a0
	move.l	$e70(a5),$12(a0)
	jsr	_LVOEnable(a6)
	jsr	_LVOPermit(a6)
	bsr	ClearRes
	movem.l	(sp)+,a0-a6/d1-d7
	rts

But131Mem
	movem.l	a0-a6/d1-d7,-(sp)
	move.l	$4.w,a6
	move.l	_LVODoIO+2(a6),a5
	lea	-$202(a5),a5
	cmpi.l	#$0a98aaaa,$8de(a5)
	beq.s	B131Yes
	clr.l	d0
	bra.s	B131End
B131Yes	moveq.l	#1,d0
B131End	movem.l	(sp)+,a0-a6/d1-d7
	rts

But131MemRem
	movem.l	d1-d7/a0-a6,-(sp)
	move.l	$4.w,a6
	move.l	_LVODoIO+2(a6),a5
	lea	-$202(a5),a5
	move.l	$79a(a5),_LVODoIO+2(a6)	;DoIO
	bsr	ClearRes
	movem.l	(sp)+,d1-d7/a0-a6
	rts

But300Mem
	movem.l	a0-a6/d1-d7,-(sp)
	move.l	$4.w,a6
	move.l	_LVODoIO+2(a6),a5
	lea	-$1d4(a5),a5
	cmpi.l	#$0a59b4ed,$5c(a5)
	beq.s	B300Yes
	clr.l	d0
	bra.s	B300End
B300Yes	moveq.l	#1,d0
B300End	movem.l	(sp)+,a0-a6/d1-d7
	rts

But300MemRem
	movem.l	d1-d7/a0-a6,-(sp)
	move.l	$4.w,a6
	move.l	_LVODoIO+2(a6),a5
	lea	-$1d4(a5),a5
	move.l	$b1e(a5),_LVODoIO+2(a6)	;DoIO
	bsr	ClearRes
	movem.l	(sp)+,d1-d7/a0-a6
	rts

BBSMem	movem.l	a0-a6/d1-d7,-(sp)
	lea	InputDev,a1
	move.l	4.w,a6
	jsr	_LVOFindTask(a6)	;FindTask
	tst.l	d0
	bne.s	BBSYes
	clr.l	d0
	bra.s	BBSEnd
BBSYes	moveq.l	#1,d0
BBSEnd	movem.l	(sp)+,a0-a6/d1-d7
	rts

BBSMemRem
	movem.l	a0-a6/d1-d7,-(sp)
	move.l	4.w,a6
	jsr	_LVODisable(a6)
	jsr	_LVOForbid(a6)
	lea	InputDev,a1
	jsr	_LVOFindTask(a6)	;FindTask
	move.l	d0,d7
	move.l	d0,a5
	move.l	pr_SegList(a5),d0	;SegList
	lsl.l	#2,d0			;BCPL -> APTR
	move.l	d0,a5
	move.l	12(a5),d0		;????
	lsl.l	#2,d0			;BCPL -> APTR
	move.l	d0,a5			;Start 'input.device ',0 task.
	move.l	$294(a5),$74
	move.l	d7,a1
	jsr	_LVORemTask(a6)
	jsr	_LVOEnable(a6)
	jsr	_LVOPermit(a6)
	bsr	ClearRes
	movem.l	(sp)+,a0-a6/d1-d7
	rts

RetMem	movem.l	a0-a6/d1-d7,-(sp)
	bsr	FindTrackDisk
	move.l	-$a(a1),a0
	cmpi.l	#$06b1b118,-$2de(a0)
	beq.s	RetYes
	clr.l	d0
	bra.s	RetEnd
RetYes	moveq.l	#1,d0
RetEnd	movem.l	(sp)+,a0-a6/d1-d7
	rts

RetMemRem
	movem.l	a0-a6/d1-d7,-(sp)
	bsr	FindTrackDisk
	move.l	-$a(a1),a5
	lea	-$2f4(a5),a5	;Start Virus
	move.l	$4.w,a6
	jsr	_LVOForbid(a6)
	jsr	_LVODisable(a6)
	move.l	IVVERTB(a6),a0	;Struct IntVector IntVects (RasterBeam)
	move.l	(a0),a0
	move.l	$718(a5),$12(a0)

	bsr	FindTrackDisk
	move.l	$74a(a5),-$a(a1)	;Trackdisk Close
	move.l	$71c(a5),-$1c(a1)	;TrackBeginIO

	move.l	4.w,a6
	jsr	_LVOEnable(a6)
	jsr	_LVOPermit(a6)

	bsr	ClearRes

	movem.l	(sp)+,a0-a6/d1-d7
	rts

RetFileRem
	movem.l	a0-a6/d1-d7,-(sp)
					;Remove file
	move.l	#DiskValLen,-(sp)
	pea	DiskVal
	jsr	MyPuts
	addq.l	#8,sp
	movem.l	(sp)+,a0-a6/d1-d7
	rts

DiskVal	dc.b	'Copy l:disk-validator to this disk.',10,0
DiskValLen	equ	*-DiskVal

	even

SadMem	movem.l	a0-a6/d1-d7,-(sp)
	bsr	FindTrackDisk
	move.l	-$a(a1),a0
	cmpi.l	#$06c1b118,-$368(a0)
	beq.s	SadYes
	clr.l	d0
	bra.s	SadEnd
SadYes	moveq.l	#1,d0
SadEnd	movem.l	(sp)+,a0-a6/d1-d7
	rts

SadMemRem
	movem.l	a0-a6/d1-d7,-(sp)
	bsr	FindTrackDisk
	move.l	-$a(a1),a5
	lea	-$37e(a5),a5	;Start Virus
	move.l	$4.w,a6
	jsr	_LVOForbid(a6)
	jsr	_LVODisable(a6)
	move.l	IVVERTB(a6),a0	;Struct IntVector IntVects (RasterBeam)
	move.l	(a0),a0
	move.l	$718(a5),$12(a0)

	bsr	FindTrackDisk
	move.l	$74e(a5),-$a(a1)	;Trackdisk Close
	move.l	$71c(a5),-$1c(a1)	;TrackBeginIO

	move.l	4.w,a6
	jsr	_LVOEnable(a6)
	jsr	_LVOPermit(a6)

	bsr	ClearRes

	movem.l	(sp)+,a0-a6/d1-d7
	rts

ClearRes
	move.l	$4.w,a6
	clr.l	ColdCapture(a6)
	clr.l	CoolCapture(a6)
	bsr	FixCheckSum

	clr.l	KickMemPtr(a6)
	clr.l	KickTagPtr(a6)
	jsr	_LVOSumKickData(a6)
	move.l	d0,KickCheckSum(a6)
	rts

	
FixCheckSum
	move.l	$4.w,a6
	MOVEQ	#$16,D0		;Calculate ExecBase Checksum
	MOVEQ	#$00,D1
	LEA	SoftVer(A6),A0
FCC1	ADD.W	(A0)+,D1
	DBF	D0,FCC1
	NOT.W	D1
	MOVE.W	D1,ChkSum(A6)	;Exec.ChkSum
	RTS	

FindTrackDisk
	move.l	$4.w,a6
	lea	DeviceList(a6),a0
	lea	TrackName,a1
	jsr	_LVOFindName(a6)
	move.l	d0,a1
	rts

NotImp	movem.l	a0-a6/d1-d7,-(sp)
	move.l	#NotImpStrLen,-(sp)
	pea	NotImpStr
	jsr	MyPuts
	addq.l	#8,sp
	clr.l	d0
	movem.l	(sp)+,a0-a6/d1-d7
	rts


MyPuts	link	a5,#-(14*4)
	movem.l	a0-a6/d1-d7,-56(a5)
	move.l	4.w,a6
	lea	DosName,a1
	move.l	LibList(a6),a0	;Library list
	jsr	_LVOFindName(a6)	
	move.l	d0,a6	
	jsr	_LVOOutput(a6)
	move.l	d0,d1
	move.l	12(a5),d3
	move.l	8(a5),d2
	jsr	_LVOWrite(a6)
	movem.l	-56(a5),a0-a6/d1-d7
	unlk	a5
	rts


NotImpStr
	dc.b	'Not implemented yet!!',10,0
NotImpStrLen	equ	*-NotImpStr

DosName	dc.b	'dos.library',0

TrackName
	dc.b	'trackdisk.device',0

InputDev
	dc.b	'input.device ',0

