	; ****************************************************
	;    EJERCICIO GESTION DE SPRITES EN TODA LA PANTALLA
	; ****************************************************
	
	
	.INCLUDE "CONSTANTES.ASM"
	*=$0801				; INICIA PROGRAMA EN ESA POSICION
	.WORD	NEXT,10		; CREA LINEA EN BASIC E INICIA CODIGO MAQUINA
	.NULL	$9E,^START	; "SYS START" (START=INIT M.C.)
	NEXT	.WORD	0		; FIN BASIC
	; LOAD SPRITES		; CARGA SPRITES
	*=$2000				; CARGA SPRITES POSICION 49152 BANK0
	.BINARY	SPRITES.BIN	
	FRAMES	.BYTE	0		; VIDEO FRAMES COUNTER
	FRAMES2	.BYTE	0		; VIDEO FRAMES COUNTER
	*=FONTS_END			; CARGA PAQUETE DE FUENTES POSICION AL FINAL DE PROGRAMA
	; 	START
	START				; HABILITA INTERRUPCIONES (SEI, DESABILITA)
	
VICCHIP
	LDA VMCSB			; VIC-II CHIP MEMORY CONTROL REGISTER
	AND	#$F1		
	ORA	#$0A		
	STA	VMCSB			; VIC-II CHIP MEMORY CONTROL REGISTER

	; COLOR NEGRO A PANTALLA Y BORDE
	LDA	#$00			; NEGRO
	STA	EXTCOL			; BORDER COLOR
	LDA	#$00			; GRIS MEDIO
	STA	BGCOL0			; BACKGROUND COLOR 0
	
	; RUTINA QUE LIMPIA PANTALLA
	LDX #0			; CARGA VALOR
	LDA #$00		; SIMBOLO ESPACIO SEGUN EL SET DE CHAR CARGADO Y MODIFICADO
BUCLE1				; INICIO DE BUCLE
	STA $0400,X		; APLICA A POSICION DE COLOR MAS ESPACIO
	STA $04FF,X		; APLICA A POSICION DE COLOR MAS ESPACIO
	STA $05FE,X		; APLICA A POSICION DE COLOR MAS ESPACIO
	STA $06FD,X		; APLICA A POSICION DE COLOR MAS ESPACIO
	INX				; INCREMENTA ESPACIO
	CPX #255			; TOPE DE ESPACIO
	BNE BUCLE1		; SI NO ES IGUAL VUELVE A BUCLE
	
	; ACTIVA MODO MULTICOLOR EN TODOS LOS SPRITES
	LDA	#$FF			; CARGA MAXIMO VALOR 
	STA	SPMC			; SPRITE MULTICOLOR REGISTERS

	; PREPARA PARAMETROS SPRITES 1,2 Y 3 Y MUESTRA EN PANTALLA
	; PUNTEROS DE GRAFICO
	LDA	#$80			; BLOQUE GRAFICO 
	STA	POINSP0			; PUNTERO SPRITE #0
	LDA	#$81			; BLOQUE GRAFICO 
	STA	POINSP1			; PUNTERO SPRITE #1
	LDA	#$82			; BLOQUE GRAFICO 
	STA	POINSP2			; PUNTERO SPRITE #0
	; COORDENADAS SPRITES 0 Y 1
	LDA	#150			; CARGA VALOR 50 COORDENADAS DE XAIN
	STA	SP0X			; APLICA A X SPRITE 0
	LDA	#80			; CARGA VALOR 50 COORDENADAS DE XAIN
	STA	SP1X			; APLICA A X SPRITE 0
	LDA	#200			; CARGA VALOR 50 COORDENADAS DE XAIN
	STA	SP0Y			; APLICA A Y SPRITE 0
	STA	SP1Y			; APLICA A Y SPRITE 0
	STA	SP2Y			; APLICA A Y SPRITE 0
	; COORDENADAS SPRITE 2
	LDA $D010
	ORA #%00000100		; CARGA VALOR SPRITE O ENCENDIDO
	STA $D010			; APLICA A $D010, POR ENCIMA DE 255

	LDA	#30				; CARGA VALOR 50 COORDENADAS DE XAIN
						; ATENCION PORQUE SOLO ES 30 YA QUE SE MOSTRARA POR ENCIMA
						; DE LA BARRERA DE 255 COMO SE VE MAS ADELANTE
	STA	SP2X			; APLICA A Y SPRITE 0
	; COLOR DE SPRITES
	LDA #$01			; COLOR BLANCO
	STA	SP0COL			; APLICA A COLOR SPRITE 0
	STA	SP1COL			; APLICA A COLOR SPRITE 0
	STA	SP2COL			; APLICA A COLOR SPRITE 0
	
	;ACTIVA TODOS LOS SPRITES
	LDA #$FF			; CARGA MAXIMO VALOR Y ACTIVARA TODOS LOS SPRITES
	STA SPENA			; APLICA A LA POSICION DE MEMORIA $DO15 QUE LO ACOMETE
						
	; COMIENZA RUTINA QUE GESTIONA JOYSTICK EN PUERTO 2 Y QUE NOS PERMITIRA
	; GESTIONAR EL MOVIMIENTO DEL SPRITE 0 QUE SERA EL NUESTRO
MENUJOY
	
DERECHA
	LDA CIAPRA			; CARGA POSICION DE JOY EN PUERTO 2
	AND #8				; COMPARA CON EL BIT QUE CONTROLA DERECHA
	BNE IZQUIERDA		; SI NO SE HA PULSADO MANDA A IZQUIERDA
	LDA	#$80			; BLOQUE GRAFICO FLECHA A LA DERECHA
	STA	POINSP0			; PUNTERO SPRITE #0
	INC SP0X			; SI SE HA PULSADO MUEVE EN UN PUNTO EL SPRITE 0 A LA DERECHA
	JSR RETARDO			; RUTINA QUE CONTIENE BUCLE QUE CREA RETARDO DE TIEMPO
	
IZQUIERDA
	LDA CIAPRA			; CARGA POSICION DE JOY EN PUERTO 2
	AND #4				; COMPARA CON EL BIT QUE CONTROLA IZQUIERDA
	BNE FINAL			; SI NO SE A PULSADO MANDA A ARRIBA	
	LDA	#$83			; BLOQUE GRAFICO FLECHA A LA IZQUIERDA
	STA	POINSP0			; PUNTERO SPRITE #0
	DEC SP0X			; SI SE HA PULSADO MUEVE EN UN PUNTO EL SPRITE 0 A LA IZQUIERDA
	JSR RETARDO			; RUTINA QUE CONTIENE BUCLE QUE CREA RETARDO DE TIEMPO
	
FINAL
	JMP MENUJOY			; RETORNA AL INICIO DE BUCLE QUE GESTIONA JOYSTICIK
	
RETARDO
	LDX #$FF
CICL					; PRIMER BUCLE
	DEX
	BNE CICL
	LDX #$FF
CICL2					; SEGUNDO BUCLE
	DEX
	BNE CICL2
CICL3					; SEGUNDO BUCLE
	DEX
	BNE CICL3
	RTS
	
	
	; DATA: FUENTES LETRAS
	*=$4000
	CHARS
	.BINARY	"FONTS.BIN"	; BANCO DE CARACTERES
	FONTS_END
	
	