;---------------------------------------------------------------------
; The Jetstrike Extension - Works with CD³² and AGA.
; By Nigel Critten

		OUTPUT hd1:AMOS_System/Hermit.lib


SHAREWARE	=	0
RECOVERY_ALERT equ $00000000

Gimmedablitter		equ	-456
dablitterisyours	equ	-462
waitblit	equ 	14
	
ExtNb		equ	21-1
	
 			Include	"_Includes.s"
 			incdir	'include:'
			include	'exec/memory.i'
			include 	'exec/interrupts.i'
 			include	'extensions:_Custgfxbase.i'
			include	'hardware/hw_example.i'
			include	'hardware/dmabits.i'
			include  'hardware/intbits.i'

illeagle	MACRO
			movem.l	a0-a6/d0-d7,-(sp)
			EcCalD	AMOS_WB,0
			movem.l	(sp)+,a0-a6/d0-d7
			illegal
			ENDM


Dlea		MACRO
			move.l	ExtAdr+ExtNb*16(a5),\2
			add.w	#\1-Table,\2
			ENDM

Dload		MACRO
			move.l	ExtAdr+ExtNb*16(a5),\1
			ENDM

GfxCall  MACRO
			move.l	T_GfxBase(a5),a6
			jsr		_LVO\1(a6)
			ENDM

Start		dc.l	C_Tk-C_Off
			dc.l	C_Lib-C_Tk
			dc.l	C_Title-C_Lib
			dc.l	C_End-C_Title
			dc.w	0	

;------------------------------------------------------------------
; 		OFFSETS TO FUNCTIONS
C_Off		dc.w (L1-L0)/2,(L2-L1)/2,(L3-L2)/2,(L4-L3)/2
     		dc.w (L5-L4)/2,(L6-L5)/2,(L7-L6)/2,(L8-L7)/2
        	dc.w (L9-L8)/2,(L10-L9)/2,(L11-L10)/2,(L12-L11)/2
			dc.w (L13-L12)/2,(L14-L13)/2,(L15-L14)/2
			dc.w (L16-L15)/2,(L17-L16)/2,(L18-L17)/2
			dc.w (L19-L18)/2,(L20-L19)/2,(L21-L20)/2
			dc.w (L22-L21)/2,(L23-L22)/2,(L24-L23)/2
			dc.w (L25-L24)/2,(L26-L25)/2,(L27-L26)/2
			dc.w (L28-L27)/2

;------------------------------------------------------------------
; 	TOKEN TABLE + Addresses
C_Tk	dc.w 	1,0
		dc.b 	$80,-1
		dc.w	-1,CScore
		dc.b	"cscor","e"+$80,"00",-1
		dc.w	DoScreen,-1
		dc.b	"patch scree","n"+$80,"I0",-1
		dc.w	WobbleSt,-1
		dc.b	"wobble ini","t"+$80,"I0,0 to 0,0,0",-1
		dc.w	WobbleDo,-1
		dc.b	"wobble d","o"+$80,"I",-1
		dc.w	MusicInt,-1
		dc.b	"musy d","o"+$80,"I0",-1
		dc.w	CopDo,-1
		dc.b	"coppy d","o"+$80,"I0",-1
		dc.w	CopEnd,-1
		dc.b	"coppy don","t"+$80,"I",-1
		dc.w	L_AAColour,-1
		dc.b	"pal2","4"+$80,"I0,0,0,0",-1
		dc.w	L_PaletteCopy,-1
		dc.b	"duplicate palett","e"+$80,"I0t0",-1
		dc.w	L_PCopy,-1
		dc.b	"panel cop","y"+$80,"I",-1
		dc.w	L_MCopy,-1
		dc.b	"main cop","y"+$80,"I0,0t0",-1
		dc.w	PanelUpdate,-1
		dc.b	"panel displa","y"+$80,"I2,2,0,0,0,0,0,0",-1
		dc.w	-1,Neg
		dc.b	"ne","g"+$80,"00",-1
		dc.w	ForeView,-1
		dc.b	"depth map vie","w"+$80,"I0,0t0,0",-1
		dc.w	ForeMap,-1
		dc.b	"depth map d","o"+$80,"I0,0",-1
		dc.w	MusyOff,-1
		dc.b	"musy of","f"+$80,"I",-1
		dc.w	DepthIcon,-1
		dc.b	"depth ico","n"+$80,"I0,0,0",-1
		dc.w	DOME,-1
		dc.b	"nice dok","e"+$80,"I0,0,0",-1
		dc.w	MapRestore,-1
		dc.b	"map restor","e"+$80,"I",-1 
		dc.w	EraseAll,-1
		dc.b	"bank erase al","l"+$80,"I",-1
		dc.w	0

		
;-----------------------------------------------------------------
C_Lib
;-----------------------------------------------------------------
;		COLD START
	
L0					

					lea		Default(pc),a0
					move.l	a0,ExtAdr+ExtNb*16+4(a5)
					lea		Quit(pc),a0
					move.l	a0,ExtAdr+ExtNb*16+8(a5)
					lea		Table(pc),a0
					move.l	a0,ExtAdr+ExtNb*16(a5)
				
					Dload		a2
					
			; Get Restore Map Address					
			
					Dlea		RestoreMap,a0
					move.l	a0,MapAdr-Table(a2)
					
					Dlea		FastCopper,a0
					moveq		#0,d1
.Loop
					move.l	(a0)+,d0
					cmp.l		#$FFFFFFFE,d0
					beq		.End
					add.l		#8,d1
					bra		.Loop	
.End				move.l	d1,d0
					add.l		#8,d0
					move.l	d0,CopperSize-Table(a2)
					Rjsr		L_RamChip
					tst.l		d0
					beq		.ENDIT
					Dload		a2
					move.l	d0,CopperList-Table(a2)
					Dlea		FastCopper,a0
					move.l	d0,a1
.Loop1				
					move.l	(a0)+,(a1)
					cmp.l		#$FFFFFFFE,(a1)+
					beq		.END
					bra		.Loop1
.END				
					move.l	#$FFFFFFFE,(a1)+

					moveq		#ExtNb,d0			* NO ERRORS
.ENDIT			rts
	
;------- SCREEN RESET
Default				; Replace Old copper lists
					Dload		a2
					move.l	CopLog-Table(a2),d0
					tst.l		d0
					beq		.NoLog
					move.l	d0,T_CopLogic(a5)
.NoLog			move.l	CopPhy-Table(a2),d0
					tst.l		d0
					beq		.NoPhy
					move.l	d0,T_CopPhysic(a5)
.NoPhy
					move.w	#(DMAF_SETCLR|DMAF_SPRITE|DMAF_COPPER|DMAF_RASTER|DMAF_AUDIO|DMAF_DISK|DMAF_BLITTER|DMAF_MASTER),DMACON(a0)
					rts



;------- QUIT
Quit	
					Dload		a2
					tst.l		CopperList-Table(a2)
					beq.s		.NoPhy
					move.l	CopperSize-Table(a2),d0
					move.l	CopperList-Table(a2),a1
					Rjsr		L_RamFree
; Replace old copper lists 			
					Dload		a2
					move.l	CopLog-Table(a2),d0
					tst.l		d0
					beq		.NoLog
					move.l	d0,T_CopLogic(a5)
.NoLog			move.l	CopPhy-Table(a2),d0
					tst.l		d0
					beq		.NoPhy
					move.l	d0,T_CopPhysic(a5)
.NoPhy
					rts

;--- Lets start with a nice table
Table:
PatchTable		dc.w		$180,$182,$184,$186,$188,$18A,$18C,$18E,$190,$192,$194,$196
					dc.w		$198,$19A,$19C,$19E,$1A0,$1A2,$1A4,$1A6,$1A8,$1AA,$1AC,$1AE
					dc.w		$1B0,$1B2,$1B4,$1B6,$1B8,$1BA,$1BC,$1BE
ColTable			dc.w		$0,$2000,$4000,$6000,$8000,$a000,$c000,$e000
skiptable		dc.w		0,32,64,96,128,160,192,224,256
CopLog			dc.l		0				; AMOS Logic copper storeroom
CopPhy			dc.l		0				; AMOS Physic copper 
OldCopper		dc.l		0
CopperList		dc.l		0
CopperSize		dc.l		0
old				dc.l		0
musicinit		dc.l		0
TLX				dc.w		0		; Top left X
TLY				dc.w		0		; Top Left Y
BRX				dc.w		0		; Bottom Right X
BRY				dc.w		0		; Bottom Right Y
MapWidth			dc.w		0		
MapHeight		dc.w		0
mapbank			dc.l		0
iconbank			dc.l		0
numicons			dc.w		0
Ptr				dc.l		0
TOMEBank			dc.l		0

RestoreMap		ds.b		180		; Save 30 map changes
MapAdr			dc.l		0
								
FastCopper		dc.w		BPL1PTL,$0
					dc.w		BPL1PTH,$0
					dc.w		BPL2PTL,$0
					dc.w		BPL2PTH,$0
					dc.w		BPL3PTL,$0
					dc.w		BPL3PTH,$0
					dc.w		BPL4PTL,$0
					dc.w		BPL4PTH,$0
					dc.w		BPL5PTL,$0
					dc.w		BPL5PTH,$0
					dc.w		BPL6PTL,$0
					dc.w		BPL6PTH,$0
					dc.w		DDFSTRT,$0038
					dc.w		DDFSTOP,$00d0
					dc.w		DIWSTRT,$2C81
					dc.w		DIWSTOP,$0cc1
					dc.w		FMODE,$0
					dc.w		BPLCON0,$5200		; 5 bitplanes	(32 colours)
					dc.w		BPLCON1,$00
					dc.w		BPLCON2,$200
					dc.w		BPLCON3,$0
					dc.w		BPL1MOD,$0
					dc.w		BPL2MOD,$0
					
					dc.w		COLOR00,$12
					dc.w		COLOR01,$31
					dc.w		COLOR02,$43
					dc.w		COLOR03,$45
					dc.w		COLOR04,$657
					dc.w		COLOR05,$876
					dc.w		COLOR06,$65
					dc.w		COLOR07,$456
					dc.w		COLOR08,$346
					dc.w		COLOR09,$346
					dc.w		COLOR10,$34
					dc.w		COLOR11,$123
					dc.w		COLOR12,$767
					dc.w		COLOR13,$165
					dc.w		COLOR14,$352
					dc.w		COLOR15,$102
					dc.w		COLOR16,$567
					dc.w		COLOR17,$fff
					dc.w		COLOR18,$fff
					dc.w		COLOR19,$0
					dc.w		COLOR20,$a0f
					dc.w		COLOR21,$444
					dc.w		COLOR22,$456
					dc.w		COLOR23,$567
					dc.w		COLOR24,$678
					dc.w		COLOR25,$789
					dc.w		COLOR26,$890
					dc.w		COLOR27,$123
					dc.w		COLOR28,$234
					dc.w		COLOR29,$345
					dc.w		COLOR30,$456
					dc.w		COLOR31,$567
					dc.w		BPLCON3,$2020		;Second Bank
; Colours 31-64 
					dc.w		COLOR00,$0
					dc.w		COLOR01,$0
					dc.w		COLOR02,$0
					dc.w		COLOR03,$0
					dc.w		COLOR04,$0
					dc.w		COLOR05,$0
					dc.w		COLOR06,$0
					dc.w		COLOR07,$0
					dc.w		COLOR08,$0
					dc.w		COLOR09,$0
					dc.w		COLOR10,$0
					dc.w		COLOR11,$0
					dc.w		COLOR12,$0
					dc.w		COLOR13,$0
					dc.w		COLOR14,$0
					dc.w		COLOR15,$0
					dc.w		COLOR16,$0
					dc.w		COLOR17,$0
					dc.w		COLOR18,$0
					dc.w		COLOR19,$0
					dc.w		COLOR20,$0
					dc.w		COLOR21,$0
					dc.w		COLOR22,$0
					dc.w		COLOR23,$0
					dc.w		COLOR24,$0
					dc.w		COLOR25,$0
					dc.w		COLOR26,$0
					dc.w		COLOR27,$0
					dc.w		COLOR28,$0
					dc.w		COLOR29,$0
					dc.w		COLOR30,$0
					dc.w		COLOR31,$0
					dc.w		BPLCON3,$220		; LOCT set		
					dc.w		COLOR00,$14
					dc.w		COLOR01,$31
					dc.w		COLOR02,$43
					dc.w		COLOR03,$45
					dc.w		COLOR04,$657
					dc.w		COLOR05,$876
					dc.w		COLOR06,$65
					dc.w		COLOR07,$456
					dc.w		COLOR08,$346
					dc.w		COLOR09,$346
					dc.w		COLOR10,$34
					dc.w		COLOR11,$123
					dc.w		COLOR12,$767
					dc.w		COLOR13,$165
					dc.w		COLOR14,$352
					dc.w		COLOR15,$102
					dc.w		COLOR16,$567
					dc.w		COLOR17,$fff
					dc.w		COLOR18,$fff
					dc.w		COLOR19,$0
					dc.w		COLOR20,$a0f
					dc.w		COLOR21,$444
					dc.w		COLOR22,$456
					dc.w		COLOR23,$567
					dc.w		COLOR24,$678
					dc.w		COLOR25,$789
					dc.w		COLOR26,$890
					dc.w		COLOR27,$123
					dc.w		COLOR28,$234
					dc.w		COLOR29,$345
					dc.w		COLOR30,$456
					dc.w		COLOR31,$567

				;colours 31-64
					dc.w		BPLCON3,$2220		; LOCT set and Second bank
					dc.w		COLOR00,0000
					dc.w		COLOR01,$0
					dc.w		COLOR02,$0
					dc.w		COLOR03,$0
					dc.w		COLOR04,$0
					dc.w		COLOR05,$0
					dc.w		COLOR06,$0
					dc.w		COLOR07,$0
					dc.w		COLOR08,$0
					dc.w		COLOR09,$0
					dc.w		COLOR10,$0
					dc.w		COLOR11,$0
					dc.w		COLOR12,$0
					dc.w		COLOR13,$0
					dc.w		COLOR14,$0
					dc.w		COLOR15,$0
					dc.w		COLOR16,$0
					dc.w		COLOR17,$0
					dc.w		COLOR18,$0
					dc.w		COLOR19,$0
					dc.w		COLOR20,$0
					dc.w		COLOR21,$0
					dc.w		COLOR22,$0
					dc.w		COLOR23,$0
					dc.w		COLOR24,$0
					dc.w		COLOR25,$0
					dc.w		COLOR26,$0
					dc.w		COLOR27,$0
					dc.w		COLOR28,$0
					dc.w		COLOR29,$0
					dc.w		COLOR30,$0
					dc.w		COLOR31,$0
					dc.w		BPLCON3,$20
					dc.w		$ffcf,COPWAIT
					dc.w		intreq,$8010		; Request An Interrupt
					dc.l		COPPER_HALT
ver				dc.b		"$VER:Hermit by N.Critten (9-5-94)",0
intr				ds.l		LN_SIZE

					even
					


									
L1
L2
DoScreen			equ	2
					rts
					
L3
WobbleSt			equ	3
					rts
L4
WobbleDo			equ	4
					rts
L5
MusyOff			equ	5
			
			
			
			
					rts
L6
CScore			equ	6
				move.l	(a3)+,d0
				moveq		#5,d1
				divu.w	d1,d0
				moveq		#0,d2
				swap d0
				move.w	d0,d3
				rts		
					
L7
MusicInt		equ	7
				move.l	a6,-(sp)
				move.l	(a3)+,a1
				move.l	a1,VblRout(a5)
				move.l	(sp)+,a6
				rts

				
L8	
CopDo			equ	8
				move.l	(a3)+,d1		; Screen
				Dload		a2
				move.l	CopperList-Table(a2),a1
				Dlea		FastCopper,a0
.Loop
				move.l	(a0)+,(a1)
				cmp.l		#$FFFFFFFE,(a1)+
				beq		.END
				bra		.Loop
.END				
				move.l	#$FFFFFFFE,(a1)+
; Store AMOS Coppers 
			
				moveq		#0,d0
				move.w	ActuMask(a5),d0
				bclr		#BitEcrans,d0
				move.w	d0,ActuMask(a5)
				
				Rjsr		L_GetEc
				Dload		a2
				move.l	CopperList-Table(a2),a2
				add.l		#2,a2
				moveq		#4,d0
				lea		EcCurrent(a0),a1
				moveq		#0,d2
.FillBPL		move.l	(a1)+,d1
				move.w	d1,(a2)+
				swap		d1
				add.l		#2,a2
				move.w	d1,(a2)+
				add.l		#2,a2
				dbra		d0,.FillBPL

				Dload		a2
				move.l	T_CopLogic(a5),CopLog-Table(a2)
				move.l	T_CopPhysic(a5),CopPhy-Table(a2)
				move.l	CopperList-Table(a2),a1
				move.l	a1,T_CopLogic(a5)
				move.l	a1,T_CopPhysic(a5)
				EcCalD	CopOnOff,-1
				lea		_CUSTOM,a0
				move.l	a1,COP1LC(a0)
				move.w	a1,COPJMP1(a0)
				move.w	#(DMAF_SETCLR|DMAF_COPPER|DMAF_RASTER|DMAF_AUDIO|DMAF_DISK|DMAF_BLITTER|DMAF_MASTER),DMACON(a0)
				move.w	#DMAF_SPRITE,DMACON(a0)
				rts

				
L9			
CopEnd		equ	9	
				rts
		
L10
L_AAColour			equ	10
; $2e3a42
; D0 = Scratch for MSB		; $234
; D5 = Scartch for LSB		; $ea2
			;		illeagle
					move.l	(a3)+,d3			; Blue
					move.l	(a3)+,d2			; Green
					move.l	(a3)+,d1			; Red
					move.l	(a3)+,d0			; Colour	

					move.l	d0,-(sp)
					moveq		#0,d0
					moveq		#0,d5
; RGB Converter
			;Red MSB
					move.l	d1,d4
					andi.w	#$F0,d1
					asr.w		#4,d1
					or.w		d1,d0
					asl.w		#4,d0
			;Red LSB
					move.w	d4,d1
					andi.w	#$0F,d1
					or.w		d1,d5
					asl.w		#4,d5
			;Green MSB
					move.l	d2,d4
					andi.w	#$F0,d2
					asr.w		#4,d2
					or.w		d2,d0
					asl.w		#4,d0
			;Green LSB	
					move.w	d4,d2
					andi.w	#$0F,d2
					or.w		d2,d5
					asl.w		#4,d5
			;Blue MSB
					move.l	d3,d4
					andi.w	#$F0,d3
					asr.w		#4,d3
					or.w		d3,d0
			;Blue LSB
					move.w	d4,d3	
					andi.w	#$0F,d3			
					or.w		d3,d5

					
					move.l	d0,d1				
					move.l	d5,d2
					
					move.l	(sp)+,d4			; Colour
					move.l	d4,d0
					mulu		#4,d4

					Dload		a2
					move.l	CopperList-Table(a2),a0
					cmp		#63,d0
					bgt		Git
					cmp		#31,d0
					ble		.thirty
					add.l		#4,a0
.thirty			add.l		#94,a0
					move.w	d1,(a0,d4.w)
					add.l		#264,a0
					move.w	d2,(a0,d4.w)
Git				rts




L11
L_PaletteCopy			equ	11
;Dest=a1
;sour=a0
	
					move.l	(a3)+,d1
					Rjsr		L_GetEc
					move.l	a0,a1
					move.l	(a3)+,d1
					Rjsr		L_GetEc					
					lea		EcPal(a0),a0
					lea		EcPal(a1),a1					
					moveq		#31,d0
.Loop				move.w	(a0)+,(a1)+
					dbra		d0,.Loop	
					rts
					
L12
L_PCopy	equ	12	
	movem.l	a3-a6,-(sp)
	move.l	T_GfxBase(a5),a6
	jsr	Gimmedablitter(a6)
	movem.l	(sp)+,a3-a6

	move.l	T_EcAdr+8(a5),a0
	move.l	T_EcAdr+8(a5),a1
	add.l		#EcLogic,a0
	add.l		#EcPhysic,a1

	moveq		#0,d3
	moveq		#0,d4
	
	lea	$DFF000,a2

	; Calc Blitsize
	
	move.w	#40,d0
	mulu	d0,d3
	
	move.l	#$0a14,d0		; 320 x 40

	moveq.l	#4,d2

	move.l	#-1,$44(a2)
	move.l	#$9F00000,BLTCON0(a2)
	

LOOP2:
	move.l	(a0)+,d4
	move.l	(a1)+,d1	; get bitplane
	add.l	d3,d4
WBlit2:	
	move.w	dmaconr(a2),d5
	btst	#14,d5
	bne.s	WBlit2
	move.l	d4,BLTAPTH(a2)
	move.l	d1,BLTDPTH(a2)
	move.w	#0,BLTAMOD(a2)
	move.w	#0,BLTDMOD(a2)
	move.w	d0,BLTSIZE(a2)
	dbra	d2,LOOP2	

	movem.l	a3-a6,-(a7)
	move.l	T_GfxBase(a5),a6
	jsr	dablitterisyours(a6)
	movem.l	(a7)+,a3-a6

				rts
					
L13					
L_MCopy	equ	13
* Scopy fy,source to dest	 fy=0-15 fx=0-15

	
	movem.l	a3-a6,-(sp)
	move.l	T_GfxBase(a5),a6
	jsr	Gimmedablitter(a6)
	movem.l	(sp)+,a3-a6

	move.l	(a3)+,d1
	Rjsr	L_GetEc
	move.l	a0,a1
	move.l	(a3)+,d1
	Rjsr	L_GetEc
	move.l	(a3)+,d3


	lea	$DFF000,a2

	; Calc Blitsize
	
	move.w	#42,d0
	mulu	d0,d3
	
	move.l	#$3415,d0		; 336 x 208

	moveq.l	#4,d2

	move.l	#-1,$44(a2)
	move.l	#$9F00000,BLTCON0(a2)



LOOP3:
	move.l	(a0)+,d4
	move.l	(a1)+,d1	; get bitplane
	add.l	d3,d4
WBlit3:	
	move.w	dmaconr(a2),d5
	btst	#14,d5
	bne.s	WBlit3
	move.l	d4,BLTAPTH(a2)
	move.l	d1,BLTDPTH(a2)
	move.w	#0,BLTAMOD(a2)
	move.w	#0,BLTDMOD(a2)
	move.w	d0,BLTSIZE(a2)
	dbra	d2,LOOP3

	movem.l	a3-a6,-(a7)
	move.l	T_GfxBase(a5),a6
	jsr	dablitterisyours(a6)
	movem.l	(a7)+,a3-a6
	rts

L14
PanelUpdate		equ	14
; param Score,Time,Lives,pups,Enegy,Spin,Duck,special_weapon

					lea		$DFF000,a2				; Custom Chip Base

					movem.l	a3-a6,-(sp)
					move.l	T_GfxBase(a5),a6
					jsr	Gimmedablitter(a6)
					movem.l	(sp)+,a3-a6


;--------------------------- Clear All Scores -----------------------------------------

					move.l	T_EcAdr+8(a5),a1		; Destination 2
					move.l	a1,a0						; Source 2 
				
	; Calc Blitsize
	
					moveq		#113,d3
					moveq.l	#40,d0
					mulu		d0,d3
		
					moveq.l	#32,d5
					moveq.l	#40,d0
					mulu 		d0,d5
		
					move.l	#$0894,d0		; 320,11

					moveq.l	#4,d2
					move.l	#-1,BLTAFWM(a2)
					move.l	#$9F00000,BLTCON0(a2)
pnLOOP:
					move.l	(a0)+,d4
					move.l	(a1)+,d1	; get bitplane
					add.l		d3,d4
					add.l		d5,d1
pnWBlit:	
					move.w	dmaconr(a2),d6
					btst		#14,d6
					bne.s		pnWBlit
					move.l	d4,BLTAPTH(a2)
					move.l	d1,BLTDPTH(a2)
					move.w	#0,BLTAMOD(a2)
					move.w	#0,BLTDMOD(a2)
					move.w	d0,BLTSIZE(a2)
					dbra		d2,pnLOOP
;----------------------------------------------------------------------------------

					move.l	T_EcAdr+8(a5),a1		; Screen 2
			
					move.l	(a3)+,d4			; Special Weapon + Weapon Time
					move.l	a1,a0						; Source 2 
				
	; Calc Blitsize
	
					moveq		#70,d3
					moveq.l	#40,d0
					mulu		d0,d3
					mulu		#2,d4
					add.w		d4,d3
			
					moveq.l	#34,d5
					moveq.l	#40,d0
					mulu 		d0,d5
					add.l		#10,d5
		
					move.l	#$0894,d0		; 320,11

					moveq.l	#4,d2
					move.l	#-1,BLTAFWM(a2)
					move.l	#$9F00000,BLTCON0(a2)
weapLOOP:
					move.l	(a0)+,d4
					move.l	(a1)+,d1	; get bitplane
					add.l		d3,d4
					add.l		d5,d1
weapWBlit:	
					move.w	dmaconr(a2),d6
					btst		#14,d6
					bne.s		weapWBlit
					move.l	d4,BLTAPTH(a2)
					move.l	d1,BLTDPTH(a2)
					move.w	#38,BLTAMOD(a2)
					move.w	#38,BLTDMOD(a2)
					move.w	#$0781,BLTSIZE(a2)
					dbra		d2,weapLOOP


					move.l	(a3)+,d3			; Duck Energy
					
					move.l	(a3)+,d2			; Spin Energy
					move.l	(a3)+,d1			; Energy

					move.l	(a3)+,d0			; Pups

;-----------------------------------------------------------------------------------
					
					move.l	(a3)+,d0			; Lives
					cmp		#9,d0				
					bge.s		.Max9
					moveq.l	#9,d0
.Max9				

;---------------------------- Blit the Time ----------------------------------------

					move.l	(a3)+,a4			; Time
					moveq		#2,d1				; 000
					
TmLoop			move.l	(a4)+,a0			
					and.l		#$0000000f,d0
					dbra		d1,TmLoop

;---------------------------- Blit The Score ----------------------------------------

					move.l	(a3)+,a4		; Score		
					moveq		#4,d6				; 00000
					moveq		#101,d3
					mulu		#40,d3			; d3 = Y offset
				
					move.l	#-1,BLTAFWM(a2)
					move.l	#$9F00000,BLTCON0(a2)

					add.l		#2,a4
					moveq		#-1,d0
		

									
ScLoop			move.b	(a4)+,d1
				
					and.l		#$0000000f,d1
					mulu		#2,d1
					add.w		d1,d3															
					
					move.l	T_EcAdr+8(a5),a1		; Screen 2
					move.l	a1,a0
					moveq.l	#4,d2				; Do 3 bitplanes

					add.w		#1,d0
					move.l	#55,d5
					mulu		#40,d5
					add.w		#20,d5
					add.w		d0,d5


Bltloop			
					move.l	(a0)+,d4
					move.l	(a1)+,d1	; get bitplane
					add.l		d3,d4
					add.l		d5,d1
scrWBlit:	
					move.w	dmaconr(a2),d7
					btst		#14,d7
					bne.s		scrWBlit
					move.l	d4,BLTAPTH(a2)
;					move.l	d1,BLTBPTH(a2)
					move.l	d1,BLTDPTH(a2)
					move.w	#38,BLTAMOD(a2)
					move.w	#38,BLTDMOD(a2)
					move.w	#$0241,BLTSIZE(a2)
					dbra		d2,Bltloop
					
					dbra		d6,ScLoop

;----------------------- Disown Blitter ---------------------------------					

					movem.l	a3-a6,-(a7)
					move.l	T_GfxBase(a5),a6
					jsr	dablitterisyours(a6)
					movem.l	(a7)+,a3-a6
					rts

L15
Neg				equ	15
					move.l	(a3)+,d3
					neg.l		d3
					moveq		#0,d2
					rts

; Depth Map instructions
; Bank 13 = Icons
; Bank 12 = Map Bank
					
L16
ForeView			equ	16
					Dload 	a0

					move.l	(a3)+,d3
					move.l	d3,BRY-Table(a0)			; Bottom Y					
					move.l	(a3)+,d2
					move.l	d2,BRX-Table(a0)			; Bottom X
					move.l	(a3)+,d1
					move.l	d1,TLY-Table(a0)			; Top Y
					move.l	(a3)+,d0
					move.l	d0,TLX-Table(a0)			; Top X
					sub.l		d0,d2
					divu		#16,d2						
					move.w	d2,MapWidth-Table(a0)
					sub.l		d1,d3
					divu		#16,d3
					move.w	d3,MapHeight-Table(a0)
					rts							

L17				
ForeMap			equ	17
					move.l	(a3)+,d1			; TOME MapY POS
					move.l	(a3)+,d0			; TOME MapX POS


					Dload		a1
					Rbsr		L_geticonbank
					move.l	a2,iconbank-Table(a1)
					Rbsr		L_getmapbank
					move.l	a2,mapbank-Table(a1)
					move.l	(a2)+,d7					; Map Length
;					subq.l	#1,d7
					cmp		#0,d7
					ble		NoPlot
					
; Get Map Corners
					move.w	MapWidth-Table(a1),d2
					add.l		d0,d2
					move.w	MapHeight-Table(a1),d3
					add.l		d1,d3
					
; Scan MapBank and Check if the tile needs printing					



ScanBank
					move.w	(a2)+,d4			; Get X
					move.w	(a2)+,d5			; Get Y
					move.w	(a2)+,d6			; get tile value
	
															
					cmp		#0,d6
					ble		NoPlot
					
	;				cmp		d0,d4
	;				blt		NoPlot
	;				cmp		d1,d5
	;				blt		NoPlot
	;				cmp		d2,d4
	;				bgt		NoPlot
	;				cmp		d3,d5
;					bgt		NoPlot
;
					sub.w		d1,d5
					sub.w		d0,d4

				; Yes Already to plot
; Plot Icon
					movem.l	a1/a2/d0-d7,-(sp)
					moveq		#0,d1
					moveq		#0,d2
					moveq		#0,d3
					mulu		#16,d4
					mulu		#16,d5
					move.l	iconbank-Table(a1),a2
					move.w	d6,d1				; n
					move.w	d5,d3				; Y
					move.w	d4,d2				; X
					lsl.w		#3,d1
					lea		-6(a2,d1.w),a2
			;		tst.l		(a2)
			;		beq		SafeNoPlot
					move.l	BufBob(a5),a1
					moveq		#0,d0
					moveq		#0,d4
					moveq		#-1,d5
					SyCall	Patch
					movem.l	(sp)+,a1/a2/d0-d7
					dbra		d7,ScanBank

NoPlot			rts
					
SafeNoPlot		
					movem.l	(sp)+,a1/a2/d0-d7
					rts
					
	

L18
L_geticonbank	equ	18
					movem.l	a1/d0-d7,-(sp)
					move.l	#13,-(a3)		; ICONBANK
					Rjsr		L_AdOuBank
					move.l	d3,a2
					addq.l	#8,a2
					move.l	(a2),d7
					Dload		a0
					move.w	d7,numicons-Table(a0)
					movem.l	(sp)+,a1/d0-d7	
					rts	

L19
L_getmapbank	equ 	19
					movem.l	a1/d0-d7,-(sp)
					move.l	#12,-(a3)		; MAPBANK
					Rjsr		L_AdOuBank
					move.l	d3,a2
					movem.l	(sp)+,a1/d0-d7
					rts
					
L20
DepthIcon		equ	20
					move.l	(a3)+,d1
					move.l	(a3)+,d3
					move.l	(a3)+,d2

					Rbsr		L_geticonbank

					lsl.w		#3,d1
					lea		-6(a2,d1.w),a2
					tst.l		(a2)
					beq		NoIcon
					move.l	BufBob(a5),a1
					moveq		#0,d0
					moveq		#0,d4
					moveq		#-1,d5
					SyCall	Patch
NoIcon
					rts
					
L21
NWait				equ	21
					move.l	(a3)+,d3		; time
					add.l		T_VblCount(a5),d3
waitloop			cmp.l		T_VblCount(a5),d3
					ble.s		Waitover
					btst		#$07,$bfe001			; check if fire pressed
					bne.s		waitloop
Waitover
					rts

L22	
DOME				equ	22
					Dload		a2
					move.l	(a3)+,d2				; Tile
					move.l	(a3)+,d1				; Y
					move.l	(a3)+,d0				; X
					move.l	MapAdr-Table(a2),a1
					move.l	Ptr-Table(a2),d3
					move.w	d0,(a1,d3.w)
					addq.l	#2,d3
					move.w	d1,(a1,d3.w)
					addq.l	#2,d3
					move.w	d2,(a1,d3.w)							
					addq.l	#2,d3
					move.l	d3,Ptr-Table(a2)
					rts
					
L23	
MapRestore		equ	23
					rts
					
					
L24
EraseAll			equ	24
					moveq		#15,d3
.Eloop
					Rjsr		L_EffBank
					dbra	d3,.Eloop
					rts
					
L25
L26

L27				moveq		#0,d1
					moveq		#ExtNb,d2
					moveq		#-1,d3
					Rjmp		L_ErrorExt


L28

C_Title		dc.b	31,"Hermit V1.034 by NC",0

*		End of extension
C_End			dc.w	0
	even
