	section lame,code_c

>EXTERN"df0:PLANE",$60000

;PLANE 320x256x4


Trap_vec0  = $80
Execbase   = $4
Oldopen    = -$198
Intenar    = $01c
Intena     = $09a
Dmaconr    = $002
Dmacon     = $096
Cop1lch    = $080
Copjmp1    = $088
Vposr      = $004

	Move.l	#Start,$80.w	; Trap vector 0
	Trap	#0		; Execute trap 0 to give full control of the
	Rts			; 68000, needs an RTE to return.

Start:
	bsr	KillSys
	bsr	colint
	bsr	main
	bsr	setupsys

	Rte		; Return from exception 
		

*****************************************************************************
;Killsys - Disable operating system and interrupts
*****************************************************************************
Killsys:
	Move.l	$4.w,a6		; Execbase vector
	Lea	Gfxname(pc),a1	; Pointer to "graphics.library" into a1
	Jsr	Oldopen(a6)	; Open this library
	Lea	$dff000,a6	; Pointer to custom chips
	Move.l	d0,a0		; Address of the graphics library
	Move.l	38(a0),Sys_copl		; Remember the System copperlist
	Move	Intenar(a6),Int_set	; System interrupts
	Move	#$7fff,Intena(a6)	; Now switch off all interrupts
	Move.l	$6c.w,Vbl_vec		; System vertical blanking int.
	Move	Dmaconr(a6),Dma_set	; System DMA
	Move	#$7fff,Dmacon(a6)	; Clear all DMA
	Move	#$87c0,Dmacon(a6)	; Now set the required DMA channels

	Move.l	#COP,Cop1lch(a6)	; Init. our own copperlist
	Clr	Copjmp1(a6)

	Rts

Gfxname:		dc.b "graphics.library",0
	Even
*****************************************************************************
;Sysreturn - Re-enable operating system and interrupts
*****************************************************************************
Setupsys:
	Lea	$dff000,a6
	Move	#$7fff,Intena(a6)	; Clear all interrupts
	Move.l	Vbl_vec,$6c.w	; Restore VBL interrupt
	Move	Int_set,d0
	Or	#$c000,d0
	Move	d0,Intena(a6)		; Restore system interrupts
	Move	#$7fff,Dmacon(a6)
	Move	Dma_set,d0
	Or	#$8200,d0
	Move	d0,Dmacon(a6)		; Restore system DMA
	Move.l	Sys_copl,Cop1lch(a6)	; Restore system copperlist
	Clr	Copjmp1(a6)
	Rts

Vbl_vec:          	dc.l 0
Int_set:          	dc.l 0
Dma_set:          	dc.l 0
Sys_copl:          	dc.l 0


Main:
	Move.l	Vposr(a6),d0
	And.l	#$1ff00,d0
	Cmp.l	#$00100,d0	; Wait for vertical position 1
	Bne.s	Main

	BSR	M316
	BSR	M588
	BSR	FF

	; ROUTINE ;

	Btst	#6,$bfe001	; Check the left mouse button
	Bne.s	Main

	Rts

COPP:		dc.L	PLASMACOP
COP2:		dc.L	PLASMACOP2
 
M316:	MOVE.L	COP2,D0
	MOVE.L	COPP,COP2
	MOVE.L	D0,COPP
	SUB.L	#PLASMACOP-COP,D0
	MOVE.L	D0,$DFF080
	
	MOVE.L	#$00420042,$60(A6)
	MOVE.L	#$FFFFFFFF,$44(A6)
	MOVE.L	#$00000042,$64(A6)
	MOVE.W	#$2D01,D6
	MOVE.L	COPP(PC),A0	
	ADD.L	#10,A0
	MOVE.L	INV+4(PC),A1	
	MOVE.L	INV+72(PC),A2	
	MOVE.L	DEV+4(PC),A3	
	BSR	BLIT
	ADDQ.L	#4,A0
	MOVE.L	INV+8(PC),A1
	MOVE.L	INV+76(PC),A2
	MOVE.L	DEV+8(PC),A3
	BSR	BLIT
	ADDQ.L	#4,A0
	MOVE.L	INV+12(PC),A1
	MOVE.L	INV+80(PC),A2
	MOVE.L	DEV+12(PC),A3
	BSR	BLIT
	ADDQ.L	#4,A0
	MOVE.L	INV+16(PC),A1
	MOVE.L	INV+84(PC),A2
	MOVE.L	DEV+16(PC),A3
	BSR	BLIT
	ADDQ.L	#4,A0
	MOVE.L	INV+20(PC),A1
	MOVE.L	INV+88(PC),A2
	MOVE.L	DEV+20(PC),A3
	BSR	BLIT
	ADDQ.L	#4,A0
	MOVE.L	INV+24(PC),A1
	MOVE.L	INV+92(PC),A2
	MOVE.L	DEV+24(PC),A3
	BSR	BLIT
	ADDQ.L	#4,A0
	MOVE.L	INV+28(PC),A1
	MOVE.L	INV+96(PC),A2
	MOVE.L	DEV+28(PC),A3
	BSR	BLIT
	ADDQ.L	#4,A0
	MOVE.L	INV+32(PC),A1
	MOVE.L	INV+100(PC),A2
	MOVE.L	DEV+32(PC),A3
	BSR	BLIT
	ADDQ.L	#4,A0
	MOVE.L	INV+36(PC),A1
	MOVE.L	INV+104(PC),A2
	MOVE.L	DEV+36(PC),A3
	BSR	BLIT
	ADDQ.L	#4,A0
	MOVE.L	INV+40(PC),A1
	MOVE.L	INV+108(PC),A2
	MOVE.L	DEV+40(PC),A3
	BSR	BLIT
	ADDQ.L	#4,A0
	MOVE.L	INV+44(PC),A1
	MOVE.L	INV+112(PC),A2
	MOVE.L	DEV+44(PC),A3
	BSR	BLIT
	ADDQ.L	#4,A0
	MOVE.L	INV+48(PC),A1
	MOVE.L	INV+116(PC),A2
	MOVE.L	DEV+48(PC),A3
	BSR	BLIT
	ADDQ.L	#4,A0
	MOVE.L	INV+52(PC),A1
	MOVE.L	INV+120(PC),A2
	MOVE.L	INV+52(PC),A3
	BSR	BLIT
	ADDQ.L	#4,A0
	MOVE.L	INV+56(PC),A1
	MOVE.L	INV+124(PC),A2
	MOVE.L	DEV+56(PC),A3
	BSR	BLIT
	MOVE.L	COPP(PC),A0
	ADDQ.L	#6,A0
	MOVE.L	INV(PC),A1
	MOVE.L	INV+68(PC),A2
	MOVE.L	DEV(PC),A3
	BSR	BLIT
	MOVEQ	#0,D0
	RTS	
 
BLIT:	BTST	#14,$00DFF002		;ok
	BNE	BLIT
	MOVE.L	A1,$50(A6)
	MOVE.L	A0,$54(A6)
	MOVE.L	#$09F00000,$40(A6)
	MOVE.W	D6,$58(A6)
BLIT2:	BTST	#14,$00DFF002
	BNE	BLIT2
	MOVE.L	A0,$48(A6)
	MOVE.L	A2,$50(A6)
	MOVE.L	A0,$54(A6)
	MOVE.L	#$0B5A0000,$40(A6)
	MOVE.W	D6,$58(A6)
BLIT3:	BTST	#14,$00DFF002
	BNE	BLIT3
	MOVE.L	A0,$48(A6)
	MOVE.L	A3,$50(A6)
	MOVE.L	A0,$54(A6)
	MOVE.L	#$0B5A0000,$40(A6)
	MOVE.W	D6,$58(A6)
	RTS	
 
M588:	MOVE.B	SPEED1(PC),D0
	MOVE.L	SINPOINTER1(PC),D1
	ADD.L	D0,D1
	AND.L	#$FF,D1
	MOVE.L	D1,SINPOINTER1
	LEA	SINUS+$200(PC),A0
	ADD.L	D1,A0
	MOVEQ	#0,D0
	MOVEQ	#0,D1
	MOVE.L	#COLL1,D2
	LEA	INV(PC),A1
	MOVE.W	#14,D7
lb386:	MOVE.L	D2,(A1)
	MOVE.B	(A0),D0
	ADD.W	D0,D0
	ADD.L	D0,(A1)+
	ADD.L	#$10,A0		;SCHRITTWEITE *2
	DBRA	D7,lb386
	MOVE.B	SPEED2(PC),D0
	MOVE.L	SINPOINTER2(PC),D1
	ADD.L	D0,D1
	AND.L	#$FF,D1
	MOVE.L	D1,SINPOINTER2
	LEA	SINUS+$200(PC),A0
	ADD.L	D1,A0
	MOVEQ	#0,D0
	MOVEQ	#0,D1
	MOVE.L	#COLL2,D2
	LEA	INV+68(PC),A1
	MOVE.W	#14,D7
lb3E8:	MOVE.L	D2,(A1)
	MOVE.B	(A0),D0
	ADD.W	D0,D0
	ADD.L	D0,(A1)+
	ADD.L	#$0E,A0		;SCHRITTWEITE *2
	DBRA	D7,lb3E8
	MOVE.B	SPEED3(PC),D0
	MOVE.L	SINPOINTER3(PC),D1
	ADD.L	D0,D1
	AND.L	#$FF,D1
	MOVE.L	D1,SINPOINTER3
	LEA	SINUS+$200(PC),A0
	ADD.L	D1,A0
	MOVEQ	#0,D0
	MOVEQ	#0,D1
	MOVE.L	#COLL3,D2
	LEA	DEV(PC),A1
	MOVE.W	#14,D7
lb44A:	MOVE.L	D2,(A1)
	MOVE.B	(A0),D0
	ADD.W	D0,D0
	ADD.L	D0,(A1)+
	ADD.L	#$0E,A0		;SCHRITTEWEITE *2
	DBRA	D7,lb44A
	RTS	



COLINT:	LEA	COLL1(PC),A1
	LEA	COLL2(PC),A2
	LEA	COLL3(PC),A3
	LEA	COLTAB(PC),A0
	MOVEQ	#$1D,D6
WUF2:	MOVEQ	#$0B,D5
WUF1:	MOVE.W	(A0),D0
	MOVE.W	D0,(A3)+
	ROR.L	#4,D0
	MOVE.W	D0,(A2)+
	ROR.L	#4,D0
	MOVE.W	D0,(A1)+
	DBF	D5,WUF1
	ADD.W	#2,A0
	DBF	D6,WUF2

	LEA	PLASMACOP(PC),A0
	LEA	PLASMACOP2(PC),A2
	MOVE.W	#$B3,D7
IN1:	LEA	COPYCOP(PC),A1
	MOVE.W	#$10,D6
IN2:	MOVE.L	(A1),(A0)+
	MOVE.L	(A1)+,(A2)+
	DBF	D6,IN2
	ADD.W	#$0100,COPYCOP
	DBF	D7,IN1

	RTS



SPEED1:		dc.B	2
SPEED2:		dc.B	1
SPEED3:		dc.B	2
	EVEN

SINPOINTER1:		dc.L	0
SINPOINTER2:		dc.L	0
SINPOINTER3:		dc.L	0

COLTAB:		dc.W	$0100,$0200,$0300,$0400,$0500,$0600,$0700,$0800
		dc.W	$0900,$0A00,$0B00,$0C00,$0D00,$0E00,$0F00,$0E00
		dc.W	$0D00,$0C00,$0B00,$0A00,$0900,$0800,$0700,$0600
		dc.W	$0500,$0400,$0300,$0200,$0100,$0000

COPYCOP:
		dc.W	$4707,$FFFE
		dc.W	$0182,$0000,$0184,$0000,$0186,$0000,$0188,$0000
		dc.W	$018A,$0000,$018C,$0000,$018E,$0000,$0190,$0000
		dc.W	$0192,$0000,$0194,$0000,$0196,$0000,$0198,$0000
		dc.W	$019A,$0000,$019C,$0000,$019E,$0000
		dc.W	$0102,$0000

COLL1:	BLK.W	$180,0
COLL2:	BLK.W	$180,0
COLL3:	BLK.W	$180,0

INV:	BLK.W	68,0
DEV:	BLK.W	64,0



SINUS:
	dc.L	$32333436,$3738393B,$3C3D3E3F,$41424344,$45464748,$4A4B4C4D
	dc.L	$4E4F5051,$52535454,$55565758,$59595A5B,$5C5C5D5E,$5E5F5F60
	dc.L	$60616161,$62626363,$63636364,$64646464,$64646464,$64646363
	dc.L	$63636362,$62616161,$60605F5F,$5E5E5D5C,$5C5B5A59,$59585756
	dc.L	$55545453,$5251504F,$4E4D4C4B,$4A484746,$45444342,$413F3E3D
	dc.L	$3C3B3938,$37363433,$3231302E,$2D2C2B29,$28272625,$23222120
	dc.L	$1F1E1D1C,$1A191817,$16151413,$12111010,$0F0E0D0C,$0B0B0A09
	dc.L	$08080706,$06050504,$04030303,$02020101,$01010100,$00000000
	dc.L	$00000000,$00000101,$01010102,$02030303,$04040505,$06060708
	dc.L	$08090A0B,$0B0C0D0E,$0F101011,$12131415,$16171819,$1A1C1D1E
	dc.L	$1F202122,$23252627,$28292B2C,$2D2E3031,$32333436,$3738393B
	dc.L	$3C3D3E3F,$41424344,$45464748,$4A4B4C4D,$4E4F5051,$52535454
	dc.L	$55565758,$59595A5B,$5C5C5D5E,$5E5F5F60,$60616161,$62626363
	dc.L	$63636364,$64646464,$64646464,$64646363,$63636362,$62616161
	dc.L	$60605F5F,$5E5E5D5C,$5C5B5A59,$59585756,$55545453,$5251504F
	dc.L	$4E4D4C4B,$4A484746,$45444342,$413F3E3D,$3C3B3938,$37363433
	dc.L	$3231302E,$2D2C2B29,$28272625,$23222120,$1F1E1D1C,$1A191817
	dc.L	$16151413,$12111010,$0F0E0D0C,$0B0B0A09,$08080706,$06050504
	dc.L	$04030303,$02020101,$01010100,$00000000,$00000000,$00000101
	dc.L	$01010102,$02030303,$04040505,$06060708,$08090A0B,$0B0C0D0E
	dc.L	$0F101011,$12131415,$16171819,$1A1C1D1E,$1F202122,$23252627
	dc.L	$28292B2C,$2D2E3031,$32333436,$3738393B,$3C3D3E3F,$41424344
	dc.L	$45464748,$4A4B4C4D,$4E4F5051,$52535454,$55565758,$59595A5B
	dc.L	$5C5C5D5E,$5E5F5F60,$60616161,$62626363,$63636364,$64646464
	dc.L	$64646464,$64646363,$63636362,$62616161,$60605F5F,$5E5E5D5C
	dc.L	$5C5B5A59,$59585756,$55545453,$5251504F,$4E4D4C4B,$4A484746
	dc.L	$45444342,$413F3E3D,$3C3B3938,$37363433,$3231302E,$2D2C2B29
	dc.L	$28272625,$23222120,$1F1E1D1C,$1A191817,$16151413,$12111010
	dc.L	$0F0E0D0C,$0B0B0A09,$08080706,$06050504,$04030303,$02020101
	dc.L	$01010100,$00000000,$00000000,$00000101,$01010102,$02030303
	dc.L	$04040505,$06060708,$08090A0B,$0B0C0D0E,$0F101011,$12131415
	dc.L	$16171819,$1A1C1D1E,$1F202122,$23252627,$28292B2C,$2D2E3031
	dc.L	$32333436,$3738393B,$3C3D3E3F,$41424344,$45464748,$4A4B4C4D
	dc.L	$4E4F5051,$52535454,$55565758,$59595A5B,$5C5C5D5E,$5E5F5F60
	dc.L	$60616161,$62626363,$63636364,$64646464,$64646464,$64646363
	dc.L	$63636362,$62616161,$60605F5F,$5E5E5D5C,$5C5B5A59,$59585756
	dc.L	$55545453,$5251504F,$4E4D4C4B,$4A484746,$45444342,$413F3E3D
	dc.L	$3C3B3938,$37363433,$3231302E,$2D2C2B29,$28272625,$23222120
	dc.L	$1F1E1D1C,$1A191817,$16151413,$12111010,$0F0E0D0C,$0B0B0A09
	dc.L	$08080706,$06050504,$04030303,$02020101,$01010100,$00000000
	dc.L	$00000000,$00000101,$01010102,$02030303,$04040505,$06060708
	dc.L	$08090A0B,$0B0C0D0E,$0F101011,$12131415,$16171819,$1A1C1D1E
	dc.L	$1F202122,$23252627,$28292B2C,$2D2E3031

COP:		dc.W $008E,$3681,$0090,$FFC1,$0092,$0038,$0094,$00D0
		dc.W $0100,$0200
		dc.W $0180,$0000,$0102,$0000,$0108,$0000
		dc.W $0104,$0000
PL0:		dc.W $00E0,$0006,$00E2,$0000,$00E4,$0006,$00E6,$0028
		dc.W $00E8,$0006,$00EA,$0050,$00EC,$0006,$00EE,$0078
		dc.W $0108,$0078,$010A,$0078
		dc.W $4701,$FFFE
		dc.W $0100,$4200
PLASMACOP:
	BLK.W	6120,0

		dc.W $FF19,$FFFE,$0100,$0200
		dc.W $0180,$0000
		dc.W $FFFF,$FFFE

COPSEC:		dc.W $008E,$3681,$0090,$FFC1,$0092,$0038,$0094,$00D0
		dc.W $0100,$0200
		dc.W $0180,$0000,$0102,$0000,$0108,$0000
		dc.W $0104,$0000
PL1:		dc.W $00E0,$0006,$00E2,$0000,$00E4,$0006,$00E6,$0028
		dc.W $00E8,$0006,$00EA,$0050,$00EC,$0006,$00EE,$0078
		dc.W $0108,$0078,$010A,$0078
		dc.W $4701,$FFFE
		dc.W $0100,$4200
PLASMACOP2:
	BLK.W	6120,0

		dc.W $FF19,$FFFE,$0100,$0200
		dc.W $0180,$0000
		dc.W $FFFF,$FFFE

FLAG:		dc.W	0
COUNTER:		dc.W	3
FF:
	SUB.W	#1,COUNTER
	BNE	RAUS
	MOVE.W	#3,COUNTER

	LEA	PL1,A0
	LEA	PL0,A1

	BTST	#0,FLAG
	BEQ	SUBI
	CMP.W 	#$A0*70,6(A0)
	BNE	GOGO2
	BCHG	#0,FLAG
	RTS
GOGO2:
	ADD.W	#$A0,6(A0)
	ADD.W	#$A0,14(A0)
	ADD.W	#$A0,22(A0)
	ADD.W	#$A0,30(A0)

	ADD.W	#$A0,6(A1)
	ADD.W	#$A0,14(A1)
	ADD.W	#$A0,22(A1)
	ADD.W	#$A0,30(A1)
RAUS:
	RTS

SUBI:
	CMP.W 	#0,6(A0)
	BNE	GOGO
	BCHG	#0,FLAG
	RTS
GOGO:
	SUB.W	#$A0,6(A0)
	SUB.W	#$A0,14(A0)
	SUB.W	#$A0,22(A0)
	SUB.W	#$A0,30(A0)

	SUB.W	#$A0,6(A1)
	SUB.W	#$A0,14(A1)
	SUB.W	#$A0,22(A1)
	SUB.W	#$A0,30(A1)
	RTS
