*************************************************************************
* Nome: Joystick.s							*
*									*
* Autore: Fabrizio Farenga						*
*									*
* Commento: Gestisce il movimento di uno sprite tramite un Joystick	*
*	    collegato alla porta 1.					*
*									*
* Versione: 1.1								*
*									*
* Ultimo aggiornamento: 28-Sep-93 | 11:39				*
*									*
* Bugs: Nessuno conosciuto						*
*									*
*************************************************************************

		SECTION SPRITE1,CODE_C	;Ordina all'assemblatore di allocare
					;tutto nella memoria Chip.

HEIGHT		EQU 16		;Altezza (in pixel) dello sprite.

PALSYNC:	EQU $0020	;Frequenza video per la modalita' PAL.
NTSCSYNC:	EQU $0000	;Frequenza video per la modalita' NTSC.

;Registri dei Chip Custom utilizzati

DMACONR		EQU $DFF002
VHPOSR		EQU $DFF006
INTENAR		EQU $DFF01C
INTREQR		EQU $DFF01E
COP1LC		EQU $DFF080
COP2LC		EQU $DFF084
COPJMP1		EQU $DFF088
COPJMP2		EQU $DFF08A
DMACON		EQU $DFF096
INTENA		EQU $DFF09A
JOY0DAT:	EQU $DFF00A
JOY1DAT:	EQU $DFF00C
COLOR00:	EQU $DFF180
COLOR01:	EQU $DFF182
BEAMCON0:	EQU $DFF1DC
POTINP:		EQU $DFF016

;Registri del CIA utilizzati
CIAAPRA		EQU $BFE001

START
	move.l	4,A6				;Apre la graphics.library
	moveq	#0,D0
	lea	GFX_Name,A1
	jsr	-$0228(A6)			;Exec _OpenLibrary.
	move.l	d0,A5				;Preserva il puntatore alla
	move.l	d0,_GfxBase
	move.l	$26(A5),OLDCOP			;CopperList originale.

	move.l	4,A6				;'Congela' il sistema.
	jsr	-$78(a6)			;Exec _Disable

	move.w	INTENAR,OLDINTENA		;Preserva l'INTENA.
	move.w	DMACONR,OLDDMACON		;Preserva il DMACON.
	move.w	#%0111111111111111,DMACON	;Spegne tutti i DMA.
	jsr	InitSprites			;Inizializza i puntatori sprite
	move.w	#%1000001110100000,DMACON	;Accende solo il Copper DMA
						;e quello degli Sprites.
	move.w	#%0111111111111111,INTENA	;Spegne tutte le IRQ.
	move.l	#COP1,COP1LC			;Punta la nostra Copperlist.
	move.w	#PALSYNC,BEAMCON0		;Attiva il modo televisivo PAL
WaitMouse
	btst	#6,CIAAPRA			;Controlla che non sia premuto
	bne	NoExit				;il tasto sinistro del Mouse.
	btst	#10,POTINP			;Controlla che non sia premuto
	beq	Exit				;il tasto sinistro del Mouse.
NoExit
						;Nel qual caso esce (Exit).

	cmp.b	#$ff,VHPOSR			;Attende che il pennello
;	bne	WaitMouse			;elettronico sia alla posizione
						;$FF.
	jsr	SetCoords			;Copia le coordinate nella
;	jsr	JoyRead				;struttura sprite.
	jsr	MouseRead			;struttura sprite.

	cmp.b	#$0,VHPOSR			;Attende (per sicurezza) che il
;	bne	WaitMouse			;pennello elettronico non sia
						;ancora alla posizione $FF.
	bra	WaitMouse			;Ritorna al controllo del mouse

Exit

;Legge la sincronia dello schermo precedente (per risoluzioni particolari)
	move.l	_GfxBase,a6			;Assicurati che la graphics.lib
	cmp.w	#36,$14(a6)			;sia perlomeno V36 (kick 1.4).
	blo	NoViewExtra			;Altrimenti la ViewExtra non
						;puo' esistere.

	move.l	$22(a6),a0			;Prende la View attiva
	move.l	_GfxBase,a6			;Richiede eventuali estensioni.
	jsr	-702(a6)			;Gfx _GfxLookUp
	tst.l	d0				;Se sono nulle, non c'e nessuna
	beq	NoViewExtra			;ViewExtra.
	move.l	d0,a0				;Altrimenti:
	move.l	$1c(a0),a0			;Prende il puntatore al Monitor
	move.w	$28(a0),d0			;Legge la sincronia del Monitor
	move.w	d0,BEAMCON0			;e la copia nel registro di
						;sincronia hardware.
NoViewExtra:

	bset	#15,OLDINTENA			;Attiva il bit di controllo
	bset	#15,OLDDMACON			;nell'OLDINTENA e nell'OLDDMA.
	move.w	OLDINTENA,INTENA		;Ripristina l'INTENA.
	move.w	OLDDMACON,DMACON		;Ripristina il DMACON.

	move.l	OLDCOP,COP1LC			;Ripristina la Copperlist.

	move.l	4,A6				;'Scongela' il sistema.
	jsr	-$7e(a6)			;Exec _Enable

	move.l	_GfxBase,A1			;Chiude la graphics.library.
	move.l	4,a6
	jsr	-$019E(A6)			;Exec _CloseLibrary.

	rts					;Ritorna al DOS.

InitSprites
	lea	SpriteCopper,a0		;Prende l'indirizzo dei puntatori agli
					;sprites.
	move.l	#SPRITE1,d0		;Prende l'indirizzo dello Sprite1.
	move.w	d0,6(a0)		;Immette la word bassa.
	swap	d0			;Scambia le due word dell'indirizzo.
	move.w	d0,2(a0)		;Immette la word alta.

	add.w	#8,a0			;Fa avanzare il puntatore agli sprites.

	move.l	#SPRITENULL,d0		;Prende l'indirizzo dello Sprite vuoto.
	move.w	d0,6(a0)		;Immette la word bassa.
	swap	d0			;Scambia le due word dell'indirizzo.
	move.w	d0,2(a0)		;Immette la word alta.

	add.w	#8,a0			;Fa avanzare il puntatore agli sprites.

	move.l	#SPRITENULL,d0		;Prende l'indirizzo dello Sprite vuoto.
	move.w	d0,6(a0)		;Immette la word bassa.
	swap	d0			;Scambia le due word dell'indirizzo.
	move.w	d0,2(a0)		;Immette la word alta.

	add.w	#8,a0			;Fa avanzare il puntatore agli sprites.

	move.l	#SPRITENULL,d0		;Prende l'indirizzo dello Sprite vuoto.
	move.w	d0,6(a0)		;Immette la word bassa.
	swap	d0			;Scambia le due word dell'indirizzo.
	move.w	d0,2(a0)		;Immette la word alta.

	add.w	#8,a0			;Fa avanzare il puntatore agli sprites.

	move.l	#SPRITENULL,d0		;Prende l'indirizzo dello Sprite vuoto.
	move.w	d0,6(a0)		;Immette la word bassa.
	swap	d0			;Scambia le due word dell'indirizzo.
	move.w	d0,2(a0)		;Immette la word alta.

	add.w	#8,a0			;Fa avanzare il puntatore agli sprites.

	move.l	#SPRITENULL,d0		;Prende l'indirizzo dello Sprite vuoto.
	move.w	d0,6(a0)		;Immette la word bassa.
	swap	d0			;Scambia le due word dell'indirizzo.
	move.w	d0,2(a0)		;Immette la word alta.

	add.w	#8,a0			;Fa avanzare il puntatore agli sprites.

	move.l	#SPRITENULL,d0		;Prende l'indirizzo dello Sprite vuoto.
	move.w	d0,6(a0)		;Immette la word bassa.
	swap	d0			;Scambia le due word dell'indirizzo.
	move.w	d0,2(a0)		;Immette la word alta.

	add.w	#8,a0			;Fa avanzare il puntatore agli sprites.

	move.l	#SPRITENULL,d0		;Prende l'indirizzo dello Sprite vuoto.
	move.w	d0,6(a0)		;Immette la word bassa.
	swap	d0			;Scambia le due word dell'indirizzo.
	move.w	d0,2(a0)		;Immette la word alta.

	rts

MouseRead:
	move.w	JOY0DAT,d0
	move.b	d0,d1
	move.w	d0,d2
	lsr.w	#8,d2

	sub.b	OldMouseX,d1
	sub.b	OldMouseY,d2
	add.b	d1,OLDMOUSEX
	add.b	d2,OLDMOUSEY
	and.w	#$FF,d1
	and.w	#$FF,d2
	ext.w	d1
	ext.w	d2


	tst.b	d1
	bpl	MouseRight
	move.w	XPOS,d0
	add.w	d1,D0
	bmi	NoUseMouseX
	move.w	D0,XPOS
	bra	NoUseMouseX
MouseRight:
	move.w	XPOS,d0
	add.w	d1,D0
	cmp.w	#138,d0
	bgt	NoUseMouseX
	move.w	D0,XPOS
NoUseMouseX:

	tst.b	d2
	bpl	MouseDown
	move.w	YPOS,d0
	add.w	d2,D0
	bmi	NoUseMouseY
	move.w	D0,YPOS
	bra	NoUseMouseY
MouseDown:
	move.w	YPOS,d0
	add.w	d2,D0
	cmp.w	#194,d0
	bgt	NoUseMouseY
	move.w	D0,YPOS
NoUseMouseY:

	btst	#10,POTINP
	bne	NoMouse0Right
	move.w	#$F00,COLOR00
	move.w	#$F00,COLOR01
NoMouse0Right:

	btst	#6,CIAAPRA
	bne	NoMouse0Left
	move.w	#$0F0,COLOR00
	move.w	#$0F0,COLOR01
NoMouse0Left:

	rts

JoyRead:				;Esegue la lettura del joystick:
	moveq	#0,d1
	moveq	#0,d2
	move.w	JOY1DAT,d0		;Legge il contenuto di JOY1DAT.
	btst	#1,d0			;Se e' attivo il bit 1 il joystick
	beq	NoJoyRight		;e' premuto verso destra.
	moveq	#1,d1			;Preserva lo stato del bit (in D1).
	cmp.w	#145,XPOS		;Controlla che lo sprite non abbia
	beq	NOJoyRight		;raggiunto la coordinata X 290 (145*2)
	add.w	#1,XPOS			;nel qual caso incrementala.
NoJoyRight:
	btst	#9,d0			;Se e' attivo il bit 9 il joystick
	beq	NoJoyLeft		;e' premuto verso sinistra.
	moveq	#1,d2			;Preserva lo stato del bit (in D2).
	tst.w	XPOS			;Controlla che lo sprite non abbia
	beq	NoJoyLeft		;raggiunto la coordinata X 0, nel
	sub.w	#1,XPOS			;qual caso decrementala.
NoJoyLeft:
	btst	#0,d0			;Se il bit di "joy indietro" e' attivo
	beq	NoXORBit1		;esegui una operazione di XOR con il
	eor.b	#1,d1			;bit di "joy a destra" per calcolare il
NoXORBit1:				;vero stato di "joy indietro".

	btst	#8,d0			;Se il bit di "joy avanti" e' attivo
	beq	NoXORBit9		;esegui una operazione di XOR con il
	eor.b	#1,d2			;bit di "joy a sinistra" per calcolare
NoXORBit9:				;il vero stato di "joy avanti".

	tst	d1			;Se (dopo l'operazione di XOR) il bit
	beq	NoJoyBack		;di "joy indietro" e' attivo e lo
	cmp.w	#195,YPOS		;sprite non ha raggiunto la coordinata Y
	beq	NoJoyBack		;195 incrementa quest'ultima.
	add.w	#1,YPOS
NoJoyBack:
	tst	d2			;Se (dopo l'operazione di XOR) il bit
	beq	NoJoyForward		;di "joy avanti" e' attivo e lo
	tst.w	YPOS			;sprite non raggiunto la coordinata Y 0
	beq	NoJoyForward		;incrementa quest'ultima.
	sub.w	#1,YPOS
NoJoyForward:

	btst	#7,CIAAPRA		;Legge il tasto del joystick
	bne	NoJoy1Fire
	move.w	#$F00,COLOR00		;Se il tasto e' premuto colora di
	move.w	#$F00,COLOR01		;rosso il fondo dello schermo.
NoJoy1Fire:

	rts

SetCoords			;Copia le coordinate dalle variabili nella
				;struttura sprite.
	lea	SPRITE1,a0
	move.w	XPos,d0		;Prende la X.
	add.b	#70,d0		;Ci somma l'OffSet del video.
	move.b	d0,1(a0)	;Lo immette in HSTART della struttura sprite.

	move.w	YPos,d0		;Prende la Y.
	add.b	#44,d0		;Ci somma l'OffSet del video.
	move.b	d0,(a0)		;Lo immette in VSTART della struttura sprite.
	add.b	#HEIGHT,d0	;Ci somma l'altezza.
	move.b	d0,2(a0)	;La immette in VSTOP della struttura sprite.
	rts


XPos	dc.w 0			;Contiene la coordinata X dello sprite
YPos	dc.w 0			;Contiene la coordinata Y dello sprite

SPRITE1				;Struttura sprite
	DC.W $64C8,$7400	;Word di controllo
	DC.W $003F,$FFC0	;Dati
	DC.W $007F,$FF80
	DC.W $00FF,$FF00
	DC.W $01FF,$FE00
	DC.W $03FF,$FC00
	DC.W $07FF,$F800
	DC.W $0FFF,$F001
	DC.W $1FFF,$E003
	DC.W $3FFF,$C007
	DC.W $7FFF,$800F
	DC.W $FFFF,$001F
	DC.W $FFFF,$003F
	DC.W $FFFF,$007F
	DC.W $FFFF,$00FF
	DC.W $FFFF,$01FF
	DC.W $FFFF,$03FF
	DC.W $0000,$0000	;Terminatori


SPRITENULL			;Sprite vuoto
	DC.W 0,0		;Word di controllo (azzerate)


COP1						;Inizio della CopperList.
	DC.W $0001,$FFFE
	DC.W $0180,$0000,$0182,$0000		;Colore di fondo e #1 neri
	DC.W $00E0,$0000,$00E2,$0000		;I puntatori ai bitplane
						;possono essere indirizzati
						;a qualunque locazione visto
						;che l'immagine non sara'
						;visualizzata (colore Nero).

	DC.W $008E,$2C81,$0090,$2CC1		;Dimensiona lo schermo in
	DC.W $0092,$0038,$0094,$00D0		;modalita' standard 320x256.

	DC.W $0100,$1201			;Attiva un bitplane.

;----Settaggi per la compatibilita' con il Chipset AGA e ECS----
	DC.W $0102,$0224			;BPLCON1
	DC.W $0104,$0024			;BPLCON2
	DC.W $0106,$0C60			;BPLCON3
	DC.W $010C,$0011			;BPLCON4
	DC.W $01FC,$0000			;FMODE
;---------------------------------------------------------------

	DC.W $01A2,$0fff,$01A4,$00f0,$01A6,$0f00;Setta i colori dello sprite.

SpriteCopper:					;Puntatori agli sprite.
	DC.W $0120,$0000,$0122,$0000
	DC.W $0124,$0000,$0126,$0000
	DC.W $0128,$0000,$012A,$0000
	DC.W $012C,$0000,$012E,$0000
	DC.W $0130,$0000,$0132,$0000
	DC.W $0134,$0000,$0136,$0000
	DC.W $0138,$0000,$013A,$0000
	DC.W $013C,$0000,$013E,$0000


	DC.W $FFFF,$FFFE	;WAIT X=$FF Y=$FF (Fine della CopperList)

GFX_Name	dc.b "graphics.library",0,0	;Nome della graphics.library

VERSION		dc.b "$VER:Joystick 1.1 (28.09.93) By Fabrizio Farenga",0


	CNOP 0,2
OldMouseX	dc.w 0
OldMouseY	dc.w 0
OLDINTENA	dc.w 0				;Buffer per l'INTENA
OLDDMACON	dc.w 0				;Buffer per il DMACON
OLDCOP		dc.l 0				;Buffer per la CopperList
_GFxBase:	dc.l 0				;Base della graphics.library

 END

*************************************************************************
* Nome: Mouse.s								*
*									*
* Autore: Fabrizio Farenga						*
*									*
* Commento: Gestisce il movimento di uno sprite tramite un Mouse	*
*	    collegato alla porta 0.					*
*									*
* Versione: 1.0								*
*									*
* Ultimo aggiornamento: 06-Ago-93 | 11:27				*
*									*
* Bugs: Nessuno conosciuto						*
*									*
*************************************************************************

		SECTION SPRITE1,CODE_C	;Ordina all'assemblatore di allocare
					;tutto nella memoria Chip.

SPEEDX		EQU 2		;Velocita' di movimento lungo l'asse delle X.
SPEEDY		EQU 2		;Velocita' di movimento lungo l'asse delle Y.
HEIGHT		EQU 16		;Altezza (in pixels) dello sprite.


;Registri dei Chip Custom utilizzati

DMACONR		EQU $DFF002
VHPOSR		EQU $DFF006
INTENAR		EQU $DFF01C
INTREQR		EQU $DFF01E
COP1LC		EQU $DFF080
COP2LC		EQU $DFF084
COPJMP1		EQU $DFF088
COPJMP2		EQU $DFF08A
DMACON		EQU $DFF096
INTENA		EQU $DFF09A
JOY0DAT:	EQU $DFF00A
JOY1DAT:	EQU $DFF00C
COLOR00:	EQU $DFF180
COLOR01:	EQU $DFF182
POTINP:		EQU $DFF016

;Registri del CIA utilizzati

CIAAPRA		EQU $BFE001

START
	move.l	4,A6				;Apre la graphics.library
	moveq	#0,D0
	lea	GFX_Name,A1
	jsr	-$0228(A6)			;Exec _OpenLibrary.
	move.l	d0,A5				;Preserva il puntatore alla
	move.l	$26(A5),OLDCOP			;CopperList originale.

	move.w	INTENAR,OLDINTENA		;Preserva l'INTENA.
	move.w	DMACONR,OLDDMACON		;Preserva il DMACON.
	move.w	#%0111111111111111,DMACON	;Spegni tutti i DMA.
	jsr	InitSprites			;inizializza i puntatori.
	move.w	#%1000001110100000,DMACON	;Accendi solo il Copper DMA
						;e quello degli Sprites.
	move.w	#%0111111111111111,INTENA	;Spegni tutte le IRQ.
	move.l	#COP1,COP1LC			;Punta la nostra Copperlist.
;	move.w	#$0000,COPJMP1			;Fai ripartire il Copper.

	move.w	JOY0DAT,d0
	move.b	d0,d1
	move.w	d0,d2
	lsr.w	#8,d2

	move.b	d1,OldMouseX
	move.b	d2,OldMouseY

WaitMouse
	btst	#6,CIAAPRA			;Attendi che venga premuto il
	beq	Exit				;tasto sinistro del Mouse.

	cmp.b	#$ff,VHPOSR			;Attendi che il pennello
	bne	WaitMouse			;elettronico sia alla posizione
						;$FF.
	jsr	SetCoords			;Copia le coordinate nella
	jsr	MouseRead				;struttura sprite.

	cmp.b	#$0,VHPOSR			;Attendi (per sicurezza) che il
	bne	WaitMouse			;pennello elettronico non sia
						;ancora sulla linea precedente.
	bra	WaitMouse			;Ritorna al controllo del mouse

Exit
	move.l	OLDCOP,COP1LC			;Ripristina la CopperList.
	bset	#15,OLDINTENA			;Attiva il bit di controllo
	bset	#15,OLDDMACON			;nell'OLDINTENA e nell'OLDDMA.
	move.l	OLDINTENA,INTENA		;Ripristina l'INTENA.
	move.l	OLDDMACON,DMACON		;Ripristina il DMACON.

	move.l	A5,A1				;Chiude la graphics.library.
	jsr	-$019E(A6)			;Exec _CloseLibrary.
	rts

InitSprites
	lea	SpriteCopper,a0		;Prende l'indirizzo dei puntatori agli
					;sprites.
	move.l	#SPRITE1,d0		;Prende l'indirizzo dello Sprite1.
	move.w	d0,6(a0)		;Immette la word bassa.
	swap	d0			;Scambia le due word dell'indirizzo.
	move.w	d0,2(a0)		;Immette la word alta.

	add.w	#8,a0			;Fa avanzare il puntatore agli sprites.

	move.l	#SPRITENULL,d0		;Prende l'indirizzo dello Sprite vuoto.
	move.w	d0,6(a0)		;Immette la word bassa.
	swap	d0			;Scambia le due word dell'indirizzo.
	move.w	d0,2(a0)			;Immette la word alta.

	add.w	#8,a0			;Fa avanzare il puntatore agli sprites.

	move.l	#SPRITENULL,d0		;Prende l'indirizzo dello Sprite vuoto.
	move.w	d0,6(a0)		;Immette la word bassa.
	swap	d0			;Scambia le due word dell'indirizzo.
	move.w	d0,2(a0)		;Immette la word alta.

	add.w	#8,a0			;Fa avanzare il puntatore agli sprites.

	move.l	#SPRITENULL,d0		;Prende l'indirizzo dello Sprite vuoto.
	move.w	d0,6(a0)		;Immette la word bassa.
	swap	d0			;Scambia le due word dell'indirizzo.
	move.w	d0,2(a0)				;Immette la word alta.

	add.w	#8,a0			;Fa avanzare il puntatore agli sprites.

	move.l	#SPRITENULL,d0		;Prende l'indirizzo dello Sprite vuoto.
	move.w	d0,6(a0)		;Immette la word bassa.
	swap	d0			;Scambia le due word dell'indirizzo.
	move.w	d0,2(a0)		;Immette la word alta.

	add.w	#8,a0			;Fa avanzare il puntatore agli sprites.

	move.l	#SPRITENULL,d0		;Prende l'indirizzo dello Sprite vuoto.
	move.w	d0,6(a0)		;Immette la word bassa.
	swap	d0			;Scambia le due word dell'indirizzo.
	move.w	d0,2(a0)		;Immette la word alta.

	add.w	#8,a0			;Fa avanzare il puntatore agli sprites.

	move.l	#SPRITENULL,d0		;Prende l'indirizzo dello Sprite vuoto.
	move.w	d0,6(a0)		;Immette la word bassa.
	swap	d0			;Scambia le due word dell'indirizzo.
	move.w	d0,2(a0)		;Immette la word alta.

	add.w	#8,a0			;Fa avanzare il puntatore agli sprites.

	move.l	#SPRITENULL,d0		;Prende l'indirizzo dello Sprite vuoto.
	move.w	d0,6(a0)		;Immette la word bassa.
	swap	d0			;Scambia le due word dell'indirizzo.
	move.w	d0,2(a0)		;Immette la word alta.

	rts

MouseRead:
	move.w	JOY0DAT,d0
	move.b	d0,d1
	move.w	d0,d2
	lsr.w	#8,d2

	sub.b	OldMouseX,d1
	sub.b	OldMouseY,d2
	add.b	d1,OLDMOUSEX
	add.b	d2,OLDMOUSEY
	and.w	#$FF,d1
	and.w	#$FF,d2
	ext.w	d1
	ext.w	d2


	tst.b	d1
	bpl	MouseRight
	move.w	XPOS,d0
	add.w	d1,D0
	bmi	NoUseMouseX
	move.w	D0,XPOS
	bra	NoUseMouseX
MouseRight:
	move.w	XPOS,d0
	add.w	d1,D0
	cmp.w	#138,d0
	bgt	NoUseMouseX
	move.w	D0,XPOS
NoUseMouseX:

	tst.b	d2
	bpl	MouseDown
	move.w	YPOS,d0
	add.w	d2,D0
	bmi	NoUseMouseY
	move.w	D0,YPOS
	bra	NoUseMouseY
MouseDown:
	move.w	YPOS,d0
	add.w	d2,D0
	cmp.w	#194,d0
	bgt	NoUseMouseY
	move.w	D0,YPOS
NoUseMouseY:

	btst	#10,POTINP
	bne	NoMouse0Right
	move.w	#$F00,COLOR00
	move.w	#$F00,COLOR01
NoMouse0Right:

	rts

SetCoords			;Copia le coordinate dalle variabili nella
				;struttura sprite.
	lea	SPRITE1,a0
	move.w	XPos,d0		;Prende la X.
	add.b	#70,d0		;Ci somma l'OffSet del video.
	move.b	d0,1(a0)	;Lo immette in HSTART della struttura sprite.

	move.w	YPos,d0		;Prende la Y.
	add.b	#44,d0		;Ci somma l'OffSet del video.
	move.b	d0,(a0)		;Lo immette in VSTART della struttura sprite.
	add.b	#HEIGHT,d0	;Ci somma l'altezza.
	move.b	d0,2(a0)	;La immette in VSTOP della struttura sprite.
	rts


OldMouseX:	dc.b 0
OldMouseY:	dc.b 0

XPos	dc.w 0
YPos	dc.w 0

XSpeed	dc.w SPEEDX
YSpeed	dc.w SPEEDY

SPRITE1				;Struttura sprite
	DC.W $64C8,$7400	;Word di controllo
	DC.W $003F,$FFC0	;Dati
	DC.W $007F,$FF80
	DC.W $00FF,$FF00
	DC.W $01FF,$FE00
	DC.W $03FF,$FC00
	DC.W $07FF,$F800
	DC.W $0FFF,$F001
	DC.W $1FFF,$E003
	DC.W $3FFF,$C007
	DC.W $7FFF,$800F
	DC.W $FFFF,$001F
	DC.W $FFFF,$003F
	DC.W $FFFF,$007F
	DC.W $FFFF,$00FF
	DC.W $FFFF,$01FF
	DC.W $FFFF,$03FF
	DC.W $0000,$0000	;Terminatori


SPRITENULL			;Sprite vuoto
	DC.W 0,0		;Word di controllo (azzerate)


COP1						;Inizio della CopperList.
	DC.W $0001,$FFFE
	DC.W $0180,$0000,$0182,$0000		;Colore di fondo e #1 neri
	DC.W $00E0,$0000,$00E2,$0000		;I puntatori ai bitplane
						;possono essere indirizzati
						;a qualunque locazione visto
						;che l'immagine non sara'
						;visualizzata (colore Nero).
	DC.W $0100,$1200			;Attiva un bitplane.

	DC.W $01A2,$0fff,$01A4,$00f0,$01A6,$0f00;Setta i colori dello sprite.

SpriteCopper:					;Puntatori agli sprite.
	DC.W $0120,$0000,$0122,$0000
	DC.W $0124,$0000,$0126,$0000
	DC.W $0128,$0000,$012A,$0000
	DC.W $012C,$0000,$012E,$0000
	DC.W $0130,$0000,$0132,$0000
	DC.W $0134,$0000,$0136,$0000
	DC.W $0138,$0000,$013A,$0000
	DC.W $013C,$0000,$013E,$0000


	DC.W $FFFF,$FFFE	;WAIT X=$FF Y=$FF (Fine della CopperList)

GFX_Name	dc.b "graphics.library",0,0	;Nome della graphics.library

VERSION		dc.b "$VER: Mouse.EXE (06-Ago-93) By Fabrizio Farenga",0

OLDINTENA	dc.w 0				;Buffer per l'INTENA
OLDDMACON	dc.w 0				;Buffer per il DMACON
OLDCOP		dc.l 0				;Buffer per la CopperList
