*CODE D.BARNARD 1991 20_8_1991
**DUAL PLAYFIELD INNER SCREEN SCROLLS INSIDE THE OUTER SCROLLING SCREEN
***MAIN SCREEN FROM SHADOW OF THE BEAST II
****SNIPPETS OF CODE FROM OTHER DISCS TAKE CREDIT WHERE IT DUE
*****MODIFIED BY ME FOR MY PURPOSSES
	opt c-

	INCLUDE source:include/HARDWARE.I			H/WARE INCLUDE FILE
 	SECTION LOWMEM,CODE_C			CHIP RAM
 	OPT C-					CASE INDEPENDANT,OPTIMISE

***********************************************************************

	MOVEM.L A0-A6/D0-D7,-(A7)		SAVE REGISTERS
	MOVE.L  A7,STACKPOINT			SAVE POINTER
	LEA	$DFF000,A5

	JSR 	SETUP
	JSR 	KILL_OS
	JSR	MAIN_SECTION
	JSR 	HELP_OS

	MOVE.L  STACKPOINT,A7			RESTORE POINTER
	MOVEM.L (A7)+,A0-A6/D0-D7		RESTORE REGISTERS
	RTS

***********************************************************************

SETUP
	MOVE.L	#PICTURE,D0		SETUP PLAYFIELD 1 PLANE POINTERS
	MOVE.W	D0,PL1L
	SWAP	D0
	MOVE.W	D0,PL1H
	SWAP	D0
	ADD.L	#$5000,D0
	MOVE.W	D0,PL3L
	SWAP	D0
	MOVE.W	D0,PL3H
	SWAP	D0
	ADD.L	#$5000,D0
	MOVE.W	D0,PL5L
	SWAP	D0
	MOVE.W	D0,PL5H

	MOVE.L	#PICTURE1,D0		SETUP PLAYFIELD 2 PLANE POINTERS
	MOVE.W	D0,PL2L
	SWAP	D0
	MOVE.W	D0,PL2H
	SWAP	D0
	ADD.L	#$5400,D0
	MOVE.W	D0,PL4L
	SWAP	D0
	MOVE.W	D0,PL4H

		
	MOVE.L	#SPRITE_DATA,D0		SETUP SPRITE POINTERS
	MOVE.W	D0,SP0L
	SWAP	D0
	MOVE.W	D0,SP0H

	MOVE.L	#BLANK,D0		DUMMY SPRITE POINTERS
	MOVE.W	D0,SP1L
	MOVE.W	D0,SP2L
	MOVE.W	D0,SP3L
	MOVE.W	D0,SP4L
	MOVE.W	D0,SP5L
	MOVE.W	D0,SP6L
	MOVE.W	D0,SP7L
	SWAP	D0
	MOVE.W	D0,SP1H
	MOVE.W	D0,SP2H
	MOVE.W	D0,SP3H
	MOVE.W	D0,SP4H
	MOVE.W	D0,SP5H
	MOVE.W	D0,SP6H
	MOVE.W	D0,SP7H

	CLR.W	FLAGUP			CLEAR FLAGS THAT WILL BE USED 
	CLR.W	FLAGDOWN
	CLR.W	LEFT
	CLR.W	RIGHT
	CLR.W	WAITPLEASE
	CLR.W	WAITPLEASE1
	MOVE.W	#$0,SMOOTHY
	RTS

***********************************************************************

KILL_OS	MOVE.L	 $4,A6				EXEC ADDRESS
	CLR.L    D0				ANY GFX VERSION
	LEA	 GFXLIB,A1			LOAD GFX NAME
	JSR	 -552(A6)		     	OPEN GFX LIB
	MOVE.L   D0,A1				SAVE GFX ADDRESS
	MOVE.L	 $26(A1),OLDCOPPER   		SAVE OLD COPPER ADDRESS
	JSR	 -414(A6)			CLOSE GFX LIBARY
	JSR	 -132(A6)		     	FORBID MULTITASKING
	MOVE.W	 DMACONR(A5),SYSTEMDMA		SAVE DMA
	MOVE.W	 INTENAR(A5),SYSTEMINTERRUPT	SAVE INTERRUPT ENABLE
	MOVE.W   INTREQR(A5),SYSTEMREQUEST	SAVE INTERRUPT REQUEST
WAIT1	BTST	 #0,VPOSR(A5)			TEST MSB OF VPOS
	BNE.S	 WAIT1
WAIT2	CMPI.B	 #55,VHPOSR(A5)			WAIT FOR VBL LINE 310
	BNE.S	 WAIT2				(stops Spurious Sprite Data)
	MOVE.W   #$7FFF,INTENA(A5)   	     	DISABLE INTERRUPTS
	MOVE.W   #$7FFF,DMACON(A5)   		DISABLE DMA
	JSR	 SET_INTERRUPT			SET UP INTERRUPTS
	MOVE.L   #COPPERLIST,COP1LCH(A5)	REPLACE COPPER 
	MOVE.W   COPJMP1(A5),D0			STROBE COPPER
	MOVE.W   #%1000001110100000,DMACON(A5)	DMA CONTROLLER
	MOVE.W	 #%1100000000100000,INTENA(A5)	INSERT VBL INTERRUPT		
;		   5432109876543210		
	RTS 

***********************************************************************

SET_INTERRUPT
	MOVE.L	$6C,LEVEL3SAVE			SAVE OLD LEVEL 3
	MOVE.L	#NEW_INTERRUPT,$6C		INSERTMINE INTO ITS PLACE
	RTS

NEW_INTERRUPT
	MOVEM.L	A0-A6/D0-D7,-(A7)		SAVE REGISTERS

	JSR	ROUTINES			MY INTERRUPT ROUTINE 

	MOVEM.L	(A7)+,A0-A6/D0-D7		RESTORE REGISTERS
	MOVE.W	#%0000000001110000,INTREQ(A5)	CLEAR LEVEL 3
;		  5432109876543210
	RTE

***********************************************************************

ROUTINES
	JSR	BOUNCE 
	JSR	SCROLL
	JSR	STARFIELD
	RTS

***********************************************************************

BOUNCE
	CMPI	#256,FLAGUP			SCROLL UP
	BNE	UP
	CMPI	#56,WAITPLEASE			WAIT TO KEEP IN SYNC 
	BNE	PLEASEWAIT
	CMPI	#256,FLAGDOWN			SCROLL DOWN
	BNE	DOWN
	CMPI	#56,WAITPLEASE1			WAIT
	BNE 	PLEASEWAIT1
	CLR.W	FLAGUP				CLEAR FLAGS TO START AGAIN
	CLR.W	FLAGDOWN
	CLR.W	WAITPLEASE
	CLR.W	WAITPLEASE1
	RTS

PLEASEWAIT
	ADDQ.W	#1,WAITPLEASE			SUBROUTINES FOR THE VERTICAL SCROLLING
	RTS

PLEASEWAIT1
	ADDQ.W	#1,WAITPLEASE1
	RTS

; Yo! These routines will not always work since adding 42 ( the answer to
;life, the universe and all that ) to the low part of an address will
;sometimes cause an overflow. ie if the low part of an address was $fffe
;and you add 42 you will incorrectly get $0028, you have not taken account
;of the overflow! M.Meany waz here ok.


UP	ADD.W	#42,PL2L
	ADD.W	#42,PL4L
	ADDQ.W	#1,FLAGUP
	RTS

DOWN	SUB.W	#42,PL2L
	SUB.W	#42,PL4L
	ADDQ.W	#1,FLAGDOWN
	RTS

***********************************************************************

SCROLL
	CMPI	#20,RIGHT		HORIZONTAL SCROLLING ROUTINES
	BNE.S	THERE	
	CMPI	#20,LEFT
	BNE.S	BACKAGAIN
	CLR.W	RIGHT
	CLR.W	LEFT
	RTS

BACKAGAIN
	CMPI.W	#$0F,SMOOTHY
	BEQ.S	STEP2
	ADDI.W	#$01,SMOOTHY
	RTS

STEP2	
	SUBI.W	#$2,PL1L
	SUBI.W	#$2,PL3L
	SUBI.W	#$2,PL5L
	MOVE.W	#$0,SMOOTHY
	ADDI.W	#1,LEFT
	RTS
THERE
	CMPI.W	#$00,SMOOTHY
	BEQ.S	STEP3
	SUBI.W	#$01,SMOOTHY
	RTS

STEP3
	ADDI.W	#$2,PL1L
	ADDI.W	#$2,PL3L
	ADDI.W	#$2,PL5L
	MOVE.W	#$0f,SMOOTHY
	ADDI.W	#1,RIGHT
	RTS

**********************************************************************

MAIN_SECTION
	BTST	#6,$BFE001			WAIT MOUSE BUTTON
	BNE	MAIN_SECTION

************************************************************************

Help_OS	
	MOVE.L	LEVEL3SAVE,$6C			RESTORE OLD LEVEL 3
	MOVE.W  SYSTEMINTERRUPT,D7		GET OLD SYSTEM INTERRUPT
	OR.W	#$C000,D7			SET BITS 15,14
	MOVE.W  D7,INTENA(A5)			RESTORE INTERRUPT
	MOVE.W  SYSTEMREQUEST,D7		GET OLD SYSTEM REQUEST
	BSET    #$F,D7				SET BIT 15
	MOVE.W  D7,INTREQ(A5)			RESTORE INTERRUPT REQUEST
	MOVE.W  SYSTEMDMA,D7			GET OLD SYSTEM DMA
	OR.W	#$8100,D7			SET BITS 15,8
	MOVE.W  D7,DMACON(A5)	  		RESTORE DMA
	MOVE.L  OLDCOPPER,COP1LCH(A5)		REPLACE SYSTEM COPPER
	MOVE.L  $4,A6
	JSR     -138(A6)			MULTITASK PERMIT
	RTS 

***********************************************************************

Copperlist
	DC.W	BPLCON1
SMOOTHY	DC.W	$0000
	DC.W	DIWSTRT,$2C81
	DC.W	DIWSTOP,$2CC1
	DC.W	DDFSTRT,$30
	DC.W	DDFSTOP,$D0
	DC.W	BPLCON0,%0101010000000000
;			 5432109876543210
	DC.W	BPLCON2,$0000
	DC.W	BPL1MOD,$0026,BPL2MOD,$0000
	DC.W	COLOR00,$0000,COLOR01,$099F,COLOR02,$0999,COLOR03,$0555
	DC.W	COLOR04,$0433,COLOR05,$0333,COLOR06,$0223,COLOR07,$0223
	DC.W	COLOR08,$0000,COLOR09,$0FFF,COLOR10,$099A,COLOR11,$0556
	DC.W	COLOR17,$0FFF	
	DC.W	BPL1PTH
PL1H	DC.W	0,BPL1PTL
PL1L	DC.W	0,BPL2PTH
PL2H	DC.W	0,BPL2PTL
PL2L	DC.W	0,BPL3PTH
PL3H	DC.W	0,BPL3PTL
PL3L	DC.W	0,BPL4PTH
PL4H	DC.W	0,BPL4PTL
PL4L	DC.W	0,BPL5PTH
PL5H	DC.W	0,BPL5PTL
PL5L	DC.W	0

	DC.W	SPR0PTH	
SP0H	DC.W	0,SPR0PTL		SPRITE
SP0L	DC.W	0
	DC.W	SPR1PTH
SP1H	DC.W	0,SPR1PTL
SP1L	DC.W	0,SPR2PTH
SP2H	DC.W	0,SPR2PTL
SP2L	DC.W	0,SPR3PTH	
SP3H	DC.W	0,SPR3PTL
SP3L	DC.W	0,SPR4PTH	
SP4H	DC.W	0,SPR4PTL
SP4L	DC.W	0,SPR5PTH
SP5H	DC.W	0,SPR5PTL
SP5L	DC.W	0,SPR6PTH
SP6H	DC.W	0,SPR6PTL
SP6L	DC.W	0,SPR7PTH
SP7H	DC.W	0,SPR7PTL
SP7L	DC.W	0

	DC.W 	$FFFF,$FFFE

**********************************************************************

STARFIELD					
	MOVE.W	#41,D2			SPRITE STARFIELD ROUTINE
	MOVE.L	#SPRITE_DATA,A0
STAR1	SUBQ.B	#$1,1(A0)		LAYER 1 MOVE 1
	SUBQ.B	#$2,9(A0)		  "   2  "   2
	SUBQ.B	#$3,17(A0)		  "   3  "   3
	ADD.L	#24,A0			NEXT SET OF STARS
	SUB	#1,D2
	BNE	STAR1			FINISHED NO/YES TICK CORRECT ONE?
	RTS

;		SPRITE POSITION DATA SOME WILL NOT BE SEEN (BEHIND) THE 
;              PLAYFIELDS  BUT LEFT IN ANY WAY .IM LAZY I GUESS

SPRITE_DATA	 
	dc.w    $307A,$3100,$1000,$0000,$3220,$3300,$0000,$0000
	dc.w    $34C0,$3500,$1000,$0000,$3650,$3700,$1000,$0000
	dc.w    $3842,$3900,$1000,$0000,$3A6D,$3B00,$1000,$0000
	dc.w    $3CA2,$3D00,$1000,$0000,$3E9C,$3F00,$1000,$0000
	dc.w    $40DA,$4100,$1000,$0000,$4243,$4300,$1000,$0000
	dc.w    $445A,$4500,$1000,$0000,$4615,$4700,$1000,$0000
	dc.w    $4845,$4900,$1000,$0000,$4A68,$4B00,$1000,$0000
	dc.w    $4CB8,$4D00,$1000,$0000,$4EB4,$4F00,$1000,$0000
	dc.w    $5082,$5100,$1000,$0000,$5292,$5300,$1000,$0000
	dc.w    $54D0,$5500,$1000,$0000,$56D3,$5700,$1000,$0000
	dc.w    $58F0,$5900,$1000,$0000,$5A6A,$5B00,$1000,$0000
	dc.w    $5CA5,$5D00,$1000,$0000,$5E46,$5F00,$1000,$0000
	dc.w    $606A,$6100,$1000,$0000,$62A0,$6300,$1000,$0000
	dc.w    $64D7,$6500,$1000,$0000,$667C,$6700,$1000,$0000
	dc.w    $68C4,$6900,$1000,$0000,$6AC0,$6B00,$1000,$0000
	dc.w    $6C4A,$6D00,$1000,$0000,$6EDA,$6F00,$1000,$0000
	dc.w    $70D7,$7100,$1000,$0000,$7243,$7300,$1000,$0000
	dc.w    $74A2,$7500,$1000,$0000,$7699,$7700,$1000,$0000
	dc.w    $7872,$7900,$1000,$0000,$7A77,$7B00,$1000,$0000
	dc.w    $7CC2,$7D00,$1000,$0000,$7E56,$7F00,$1000,$0000
	dc.w    $805A,$8100,$1000,$0000,$82CC,$8300,$1000,$0000
	dc.w    $848F,$8500,$1000,$0000,$8688,$8700,$1000,$0000
	dc.w    $88B9,$8900,$1000,$0000,$8AAF,$8B00,$1000,$0000
	dc.w    $8C48,$8D00,$1000,$0000,$8E68,$8F00,$1000,$0000
	dc.w    $90DF,$9100,$1000,$0000,$924F,$9300,$1000,$0000
	dc.w    $9424,$9500,$1000,$0000,$96D7,$9700,$1000,$0000
	dc.w    $9859,$9900,$1000,$0000,$9A4F,$9B00,$1000,$0000
	dc.w    $9C4A,$9D00,$1000,$0000,$9E5C,$9F00,$1000,$0000
	dc.w    $A046,$A100,$1000,$0000,$A2A6,$A300,$1000,$0000
	dc.w    $A423,$A500,$1000,$0000,$A6FA,$A700,$1000,$0000
	dc.w    $A86C,$A900,$1000,$0000,$AA44,$AB00,$1000,$0000
	dc.w    $AC88,$AD00,$1000,$0000,$AE9A,$AF00,$1000,$0000
	dc.w    $B06C,$B100,$1000,$0000,$B2D4,$B300,$1000,$0000
	dc.w    $B42A,$B500,$1000,$0000,$B636,$B700,$1000,$0000
	dc.w    $B875,$B900,$1000,$0000,$BA89,$BB00,$1000,$0000
	dc.w    $BC45,$BD00,$1000,$0000,$BE24,$BF00,$1000,$0000
	dc.w    $C0A3,$C100,$1000,$0000,$C29D,$C300,$1000,$0000		
	dc.w    $C43F,$C500,$1000,$0000,$C634,$C700,$1000,$0000		
	dc.w    $C87C,$C900,$1000,$0000,$CA1D,$CB00,$1000,$0000		
	dc.w    $CC6B,$CD00,$1000,$0000,$CEAC,$CF00,$1000,$0000		
	dc.w    $D0CF,$D100,$1000,$0000,$D2FF,$D300,$1000,$0000		
	dc.w    $D4A5,$D500,$1000,$0000,$D6D6,$D700,$1000,$0000		
	dc.w    $D8EF,$D900,$1000,$0000,$DAE1,$DB00,$1000,$0000		
	dc.w    $DCD9,$DD00,$1000,$0000,$DEA6,$DF00,$1000,$0000		
	dc.w    $E055,$E100,$1000,$0000,$E237,$E300,$1000,$0000		
	dc.w    $E47D,$E500,$1000,$0000,$E62E,$E700,$1000,$0000		
	dc.w    $E8AF,$E900,$1000,$0000,$EA46,$EB00,$1000,$0000
	dc.w	$EC65,$ED00,$1000,$0000,$EE87,$EF00,$1000,$0000
	dc.w	$F0D4,$F100,$1000,$0000,$F2F5,$F300,$1000,$0000
	dc.w	$F4FA,$F500,$1000,$0000,$F62C,$F700,$1000,$0000
	dc.w	$F84D,$F900,$1000,$0000,$FAAC,$FB00,$1000,$0000
	dc.w	$FCB2,$FD00,$1000,$0000,$FE9A,$FF00,$1000,$0000
	dc.w	$009A,$0106,$1000,$0000,$02DF,$0306,$1000,$0000
	dc.w	$0446,$0506,$1000,$0000,$0688,$0706,$1000,$0000
	dc.w	$0899,$0906,$1000,$0000,$0ADD,$0B06,$1000,$0000
	dc.w	$0CEE,$0D06,$1000,$0000,$0EFF,$0F06,$1000,$0000
	dc.w	$10CD,$1106,$1000,$0000,$1267,$1306,$1000,$0000
	dc.w	$1443,$1506,$1000,$0000,$1664,$1706,$1000,$0000
	dc.w	$1823,$1906,$1000,$0000,$1A6D,$1B06,$1000,$0000
	dc.w	$1C4F,$1D06,$1000,$0000,$1E5F,$1F06,$1000,$0000
	dc.w	$2055,$2106,$1000,$0000,$2267,$2306,$1000,$0000
	dc.w	$2445,$2506,$1000,$0000,$2623,$2706,$1000,$0000
	dc.w	$2834,$2906,$1000,$0000,$2AF0,$2B06,$1000,$0000
	dc.w	$2CBC,$2D06,$1000,$0000
SP_END	dc.w 	$0000,$0000

************************************************************************
* LABELS,INCLUDES							
************************************************************************

GFXLIB			DC.B "graphics.library"
	EVEN
STACKPOINT		DC.L 0
OLDCOPPER		DC.L 0
SYSTEMREQUEST		DC.W 0
SYSTEMINTERRUPT		DC.W 0
SYSTEMDMA		DC.W 0
LEVEL3SAVE		DC.L 0
FLAGUP			DC.W 0
FLAGDOWN		DC.W 0
LEFT			DC.W 0
RIGHT			DC.W 0
WAITPLEASE		DC.W 0
WAITPLEASE1		DC.W 0
BLANK			DC.L 0
PICTURE			INCBIN source:bitmaps/BEASTscroll1.BM
PICTURE1		INCBIN source:bitmaps/DISPLAYPIC.BM








