*************************************************************************
* Nome: BLIT2.s								*
*									*
* Autore: Fabrizio Farenga						*
*									*
* Commento: Pulizia di un'area  rettangolare di di dimensioni variabili	*
*	    in uno schermo.						*
*									*
* Versione: 1.0								*
*									*
* Ultimo aggiornamento: 17-Sep-92 | 14:42:13				*
*									*
* Bugs: Nessuno conosciuto						*
*									*
*************************************************************************


WIDTH EQU 40			;Larghezza dello schermo in cui ripulire.
DIMX EQU 32			;Larghezza dell'area da ripulire.
DIMY EQU 32			;Altezza dell'area da ripulire.

;TUTTE LE MISURE SOVRASTANTI SONO ESPRESSE IN BYTE (PIXEL/8)

CLEAR EQU $70000		;Indirizzo dell'area da ripulire.

DMACONR	EQU   $DFF002	;Registri dei Chip Custom utilizzati dalla routine
BLTCON0	EQU   $DFF040
BLTCON1	EQU   $DFF042
BLTDPT	EQU   $DFF054
BLTSIZE	EQU   $DFF058
BLTDMOD	EQU   $DFF066

Start
	jsr	WaitBlit	;Attende che il Blitter sia libero.

	move.w	#%0000000100000000,BLTCON0
;		  |
;		  |
;Questi 16 bit rappresentano il valore che verra' immesso il BLTCON0 ed
;e' cosi' ripartito a cominciare da destra
;Bit 00-07 -> Minitermi=00000000 (Invio esclusivamente di 0 al Canale D)
;Bit 08-11 -> Attivazione canali=0001 (---D)
;Bit 12-15 -> Shifter=0000 (spostamento a destra di 0 pixel)

	move.w	#0,BLTCON1	;Azzera il BLTCON1 (modo linea spento).
	move.l	#CLEAR,BLTDPT	;Punta il Canale D alla destinazione.
	move.w	#WIDTH-((DIMX)/8),BLTDMOD		;Modulo del Canale D
	move.w	#(DIMY*64)!((DIMX)/16),BLTSIZE	;Dimensioni del Blitter
;		 |
;	         |
;L'altezza e' impostata secondo il valore di DIMY, mentre la larghezza e'
;basata sul valore di DIMX.

	rts

WaitBlit			;Routine che attende che il Blitter sia libero
	btst	#14,DMACONR	;Fa un controllo fittizio per evitare il BUG di
WaitBlitLoop			;alcuni vecchi AGNUS
	btst	#14,DMACONR	;Esegue il vero controllo.
	bne	WaitBlitLoop
	rts
