
**	X-MAS SURPRICE
**	CODE AND GRAPHICS BY CRADON/MATRIX (ASM-ONE FORMAT)

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

	SECTION	A,CODE_C

START	MOVEM.L	D0-A6,-(A7)
	MOVE.W	$DFF01C,INTENA
	MOVE.W	$DFF002,DMACON
	MOVE.W	$DFF010,ADKCON
	MOVE.W	#%0111111111111111,$DFF096
	MOVE.W	#%0111111111111111,$DFF09A
	MOVE.W	#%0111111111111111,$DFF09C
	JSR	FIELDS
	MOVE.L 	$6C,OLDIRQ
	MOVE.L 	#MYIRQ,$6C
	MOVE.W	#%1000001111000000,$DFF096
	MOVE.W 	#%1100000000100000,$DFF09A
LOOP	BTST	#6,$BFE001
	BNE.B	LOOP
ENDE	MOVE.W	#%0111111111111111,$DFF096
	MOVE.W	#%0111111111111111,$DFF09A
	MOVE.W	#%0111111111111111,$DFF09C
	MOVE.L	OLDIRQ,$00006C
	MOVE.W	DMACON,D0			
	OR.W	#$8000,D0			
	MOVE.W	D0,$DFF096
	MOVE.W	ADKCON,D0			
	OR.W	#$8000,D0
	MOVE.W	D0,$DFF09E
	MOVE.W	INTENA,D0			
	OR.W	#$C000,D0
	MOVE.W	#$7FFF,$DFF09C
	MOVE.W	D0,$DFF09A
	CLR.W	$DFF088
	MOVEM.L	(A7)+,D0-A6
	RTS

** DUAL PLAYFIELDS ************************************************************

FIELDS	LEA	FLD1,A0
	MOVE.L	#SCREEN,D0
	MOVE.L	#3,D1
LOOP1	MOVE.W	D0,6(A0)
	SWAP	D0
	MOVE.W	D0,2(A0)
	SWAP	D0
	ADD.L	#10240,D0
	ADD.L	#8,A0
	SUBQ.L	#1,D1
	BNE.S	LOOP1
	LEA     FLD2,A0
	MOVE.L  #SCREEN2,D0
	MOVE.W  D0,6(A0)
	SWAP    D0
	MOVE.W  D0,2(A0)
	SWAP    D0
	RTS

** A SMALL 3D STARFIELD RUTINE ************************************************

FIELD	BTST	#14,$DFF002
	BNE.S	FIELD
	MOVE.W	#$0100,$DFF040
	MOVE.L	#$FFFFFFFF,$DFF044
	MOVE.L	SCREEN_ADRESS(PC),$DFF054
	CLR.W	$DFF066
	CLR.W	$DFF042
	MOVE.W	#[512*64+320/16],$DFF058
	LEA.L	POINTS(PC),A1
PLTLOOP	CMP.W	#$FFFF,(A1)
	BEQ.W	PLOTOUT	
	MOVE.W	(A1),D0
	MOVE.W	2(A1),D1
	MOVE.W	4(A1),D2
	ADD.W	XDELTA,D0
	ADD.W	YDELTA,D1
	ADD.W	ZDELTA,D2
BORDER	CMP.W	#319,D0
	BLE.B	.XHI_OK
	SUB.W	#319,D0
.XHI_OK	CMP.W	#0,D0
	BHI.B	.XLO_OK
	ADD.W	#319,D0
.XLO_OK	CMP.W	#250,D1
	BLE.B	.YLO_OK			
	SUB.W	#250,D1
.YLO_OK	CMP.W	#0,D1
	BGE.B	.YHI_OK
	ADD.W	#250,D1	
.YHI_OK	CMP.W	#50,D2
	BHI.B	.ZFR_OK
	ADD.W	#69,D2
.ZFR_OK	CMP.W	#120,D2
	BLS.B	.ZBK_OK		
	SUB.W	#69,D2
.ZBK_OK	MOVE.W	D0,(A1)
	MOVE.W	D1,2(A1)
	MOVE.W	D2,4(A1)
	SUB.W	XCENTER,D0
	SUB.W	YCENTER,D1
	MULS	ZOOM,D0
	MULS	ZOOM,D1
	DIVS	D2,D0
	DIVS	D2,D1
	ADD.W	XCENTER,D0
	ADD.W	YCENTER,D1
	MOVE.L	SCREEN_ADRESS(PC),A0
	MOVE.W	#256,D3
	SUBI.W	D1,D3
	MULU.W	#40,D3
	ADD.L	D3,A0
	CMP.W	#16,D0
	BLT.B	.XREST
	MOVE.W	D0,D1
	LSR.W	#4,D1
	LSL.W	#4,D1
	SUB.W	D1,D0
	LSR.W	#3,D1
	ADD.W	D1,A0
.XREST	MOVE.W	#$8000,D1
	ROR.W	D0,D1
.WAIT	BTST	#14,$DFF002
	BNE.S	.WAIT
	CMP.W	#100,D2
	BHI.B	DARK1
	CMP.W	#70,D2
	BHI.B	DARK2
LIGHT	ORI.W	D1,(A0)
	BRA.S	PLOTFIN
DARK1	ADDI.L	#[256*40],A0
	ORI.W	D1,(A0)
	BRA.S	PLOTFIN
DARK2	ORI.W	D1,(A0)
	ADDI.L	#[256*40],A0
	ORI.W	D1,(A0)
PLOTFIN	ADDQ.L	#6,A1
	JMP	PLTLOOP
PLOTOUT	RTS	

** FLIP BETWEEN FRAMESBUFFERS *************************************************

FLIP_SCREEN
	CMP.L 	#SCREEN1,SCREEN_ADRESS		
	BEQ.S	FLIP_TO_SCREEN2
	LEA.L	FLD2,A0
	MOVE.L	#SCREEN2,D0
	MOVE.W	D0,6(A0)
	SWAP 	D0
	MOVE.W	D0,2(A0)
	MOVE.L	#SCREEN2+[256*40],D0
	MOVE.W	D0,14(A0)
	SWAP 	D0
	MOVE.W	D0,10(A0)
	MOVE.L	#SCREEN1,SCREEN_ADRESS	
	RTS
FLIP_TO_SCREEN2
	LEA.L	FLD2,A0
	MOVE.L	#SCREEN1,D0
	MOVE.W	D0,6(A0)
	SWAP 	D0
	MOVE.W	D0,2(A0)
	MOVE.L	#SCREEN1+[256*40],D0
	MOVE.W	D0,14(A0)
	SWAP 	D0
	MOVE.W	D0,10(A0)
	MOVE.L	#SCREEN2,SCREEN_ADRESS
	RTS

** THIRD LEVEL INTERRUPT ******************************************************

MYIRQ	MOVEM.L	D0-A6,-(A7)
	MOVE.W	$DFF01E,D0
	BTST	#5,D0
	BNE.B	RESTART
	MOVE.W	D0,$DFF09C
	MOVEM.L	(A7)+,D0-A6 		
	RTE
RESTART	MOVE.L	#COPPER,$DFF084
	MOVE.B	#$00,$DFF08A
	JSR	FIELD
	JSR	FLIP_SCREEN
	MOVE.W	#$20,$DFF09C
	MOVEM.L	(A7)+,D0-A6 		
	RTE

** DATA ***********************************************************************
	
XDELTA	DC.W	0
YDELTA	DC.W	-1
ZDELTA	DC.W	0
OLDIRQ	DC.L	0
INTENA	DC.W	0
DMACON	DC.W	0
ADKCON	DC.W	0
SCREEN_ADRESS
	DC.L	SCREEN1
XCENTER	DC.W	159
YCENTER	DC.W	128
ZOOM	DC.W	50

POINTS	DC.W	1,1,50	
	DC.W	319,2,63
	DC.W	20,249,76	
	DC.W	200,180,88
	DC.W	316,171,91	; 5
	DC.W	159,70,54
	DC.W	65,23,66
	DC.W	66,190,79
	DC.W	188,101,81
	DC.W	35,135,94	; 10
	DC.W	269,221,56
	DC.W	176,167,69
	DC.W	44,96,71
	DC.W	312,120,84
	DC.W	149,49,96	; 15
	DC.W	99,120,59
	DC.W	17,160,62
	DC.W	165,181,74
	DC.W	143,163,87
	DC.W	319,3,59	; 20
	DC.W	205,128,62
	DC.W	142,129,65
	DC.W	255,179,68
	DC.W	37,70,71
	DC.W	12,244,74	; 25
	DC.W	66,138,77
	DC.W	166,33,80
	DC.W	319,145,83	
	DC.W	167,100,86	
	DC.W	279,21,89	; 30
	DC.W	55,40,92
	DC.W	1,67,95
	DC.W	240,250,98
	DC.W	50,3,50
	DC.W	2,30,63		; 45
	DC.W	80,200,75
	DC.W	191,1,88
	DC.W	85,66,91
	DC.W	240,231,53
	DC.W	200,20,65	; 50
	DC.W	132,240,78
	DC.W	170,185,51
	DC.W	36,101,54
	DC.W	3,1,56
	DC.W	312,158,58	; 60
	DC.W	150,76,61
	DC.W	278,9,63
	DC.W	300,40,66
	DC.W	55,110,69
	DC.W	40,110,72	; 65
	DC.W	1,128,75
	DC.W	30,240,78
	DC.W	100,3,81
	DC.W	180,109,84
	DC.W	240,20,87	; 70
	DC.W	319,4,90
	DC.W	11,169,93
	DC.W	2,30,96
	DC.W	1,1,99
	DC.W	30,190,101	; 85
	DC.W	50,249,103
	DC.W	316,249,106
	DC.W	167,115,109
	DC.W	40,100,111
	DC.W	179,99,115	; 90
	DC.W	$FFFF		; END SIGNAL

** COPPERLIST *****************************************************************

	SECTION	B,DATA_C

COPPER	DC.W	$0106,$0000,$01FC,$0000
	DC.W    $008E,$2C81,$0090,$2CC1
	DC.W    $0092,$0038,$0094,$00D0
	DC.W    $0102,$0000,$0104,%0000000001000000
	DC.W	$0108,$0000,$010A,$0000
	DC.W	$0120,$0000,$0122,$0000

COLOUR	DC.W	$0180,$0000,$0182,$0FFF
	DC.W	$0184,$0CDE,$0186,$09BD
	DC.W	$0188,$069C,$018A,$047B
	DC.W	$018C,$025A,$018E,$0049
	DC.W	$0190,$0000,$0192,$0FFF
	DC.W	$0194,$0444,$0196,$0999
	DC.W	$0198,$0500,$019A,$0400
	DC.W	$019C,$0300,$019E,$0200

; DUAL PLAYFIELD

FLD1:	DC.W	$00E0,$0000,$00E2,$0000	;1
	DC.W	$00E8,$0000,$00EA,$0000	;3
	DC.W	$00F0,$0000,$00F2,$0000	;5

FLD2:	DC.W	$00E4,$0000,$00E6,$0000	;2
	DC.W	$00EC,$0000,$00EE,$0000	;4
	DC.W	$00F4,$0000,$00F6,$0000	;6

	DC.W    $3001,$FF00;,$0100,$2200
	DC.W	$3011,$FFFE,$0100,%0101010000000000
	DC.W	$FFE1,$FFFE,$2901,$FF00
	DC.W	$0100,$0200,$FFFF,$FFFE

** SCREEN *********************************************************************

SCREEN1	BLK.B	20512,$00
SCREEN2	BLK.B	20512,$00

SCREEN	INCBIN	"DH0:CODING/SOURCE/SCROLLER/MOONSCAPE.BIT"

