	opt	p=68020

START	move.l	$4.w,a6
	jsr	_LVOForbid(a6)
	lea	SetExept(pc),a5
	jsr	_LVOSupervisor(a6)
	lea	START-4(pc),a0
	clr.l	(a0)
	jsr	_LVOCacheClearU(a6)
	jsr	_LVOPermit(a6)
	moveq	#0,d0
	rts
	cnop	0,4
SetExept	lea	Except,a0
	btst	#AFB_68010,AttnFlags+1(a6)
	beq.s	.68000
	movec	vbr,a1
	move.l	$20(a1),OldVec-Except+2(a0)
	move.l	a0,$20(a1)
	move.l	a0,$20.w
	btst	#AFB_68040,AttnFlags+1(a6)
	beq.s	.skip
	opt	p=68040
	cpusha	dc
	opt	p=68020
.skip	rte
	cnop	0,4
.68000	move.l	$20.w,OldVec-Except+2(a0)
	move.l	a0,$20.w
	rte

	dc.b	"$VER: PatchExcept 1.2 (15.1.95) by Martin Berndt",0

	section	Patch,CODE

Exit	movem.l	(sp)+,d0/a0/a6
OldVec	jmp	$f80000
	cnop	0,4
Except	movem.l	d0/a0/a6,-(sp)
	move.l	$4.w,a6
	btst	#AFB_68010,AttnFlags+1(a6)
	beq.s	Exit
	move.l	$e(sp),a0
	cmpi.w	#$21fc,-8(a0)
	bne.s	.cont
	cmp.l	-6(a0),a0
	bne.s	.cont
	cmpi.w	#$20,-2(a0)
	bne.s	.cont
	move.l	usp,a6
	move.l	a0,-(a6)
	move.l	a6,usp
	movem.l	(sp)+,d0/a0/a6
	move.l	usp,sp
	rts
	cnop	0,4
.cont	move.w	(a0),d0
	andi.w	#$ffc0,d0
	cmpi.w	#$40c0,d0
	bne.s	Exit
	ori.b	#2,(a0)
	btst	#AFB_68020,AttnFlags+1(a6)
	beq.s	.exit
	btst	#AFB_68040,AttnFlags+1(a6)
	bne.s	.68040
	movec	a0,caar
	movec	cacr,d0
	bset	#2,d0
	movec	d0,cacr
	bra.s	.exit
	cnop	0,4
	opt	p=68040
.68040	cpusha	dc
	cinva	bc
.exit	movem.l	(sp)+,d0/a0/a6
	rte
