
;	--------------------------------------------------
;	**  MC680x0 y Blitter 100% DMA Working.  v1.27  **
;	**  Por: Juan Antonio Gómez. (Alias 007)        **
;	--------------------------------------------------

;	A0=Dir. de la inter. del VBlank. (Nivel 3)
;	Finalizar Inter. VBlank con:  Trap #1  en vez de RTE.
;	JA_DIRCON.L:	Puntero a dejar datos. (+$22)
;	JA_DAT.B:	Numero de llamadas para atender. (+1)

JA_PRIOR=0		; 0=Priorirad del BLT al terminar CPU (Inter.)
JA_LLAMADAS=60		; Bufer para Max. llamadas al blitter. (Max=255)
JA_COLOR=0		; 1=Poner colores de fondo.

JA_INICIO:
	MOVE.L	A0,JA_INTERVB+2		; Inter. para VBlank.
	MOVE.L	#JA_INTER2,$84.W	; Retorno a JA_Inter. (Trap #1)
	LEA	$DFF000,A6		; Para siempre...
	MOVE.W	#$8440,$96(A6)		; Blitter y Prioridad ON
JA_ESPBLT:
	BTST	#$0E,$02(A6)		; Espera que termine BLT
	BNE.S	JA_ESPBLT

	MOVE.W	#$0440,$96(A6)		; Blitter y Prioridad OFF
	MOVE.W	#$0070,$9A(A6)		; Nivel 3 OFF
	MOVE.W	#$0070,$9C(A6)		; Nivel 3 (Por atender OFF)
	MOVE.L	#JA_INTER,$6C.W		; Inter de nivel 3
	SF	JA_DAT			; Cero llamadas al BLT
	SF	JA_DAT2			; Finalizadas llamadas anteriores
	MOVE.L	#JA_BUFER,JA_DIRDAT	; Bufer 1
	MOVE.L	#JA_BUFER,JA_DIRCON	; Bufer 1 (Contador)
	MOVE.L	#JA_BUFER2,JA_DIRDAT2	; Bufer 1
	MOVE.L	#JA_BUFER2,JA_DIRCON2	; Bufer 1 (Contador)
	RTS

JA_INTER:
	MOVE.W	#$0020,$9A(A6)		; Nivel 3 OFF (VB)
	MOVE.W	#$0070,$9C(A6)		; Nivel 3 OFF (Peticion TODO)

	TST.B	JA_DAT			; ¿Alguna llamada al BLT?
	BEQ.S	JA_INTERVB

	MOVE.L	D0,-(SP)
	MOVE.L	JA_DIRDAT,D0		; Intercambia punteros bufers
	MOVE.L	JA_DIRDAT2,JA_DIRDAT	; 		"
	MOVE.L	JA_DIRDAT2,JA_DIRCON	; 		"
	MOVE.L	D0,JA_DIRDAT2		; 		"
	MOVE.L	D0,JA_DIRCON2		; 		"
	MOVE.L	(SP)+,D0
	MOVE.B	JA_DAT,JA_DAT2		; Numero de llamadas ahora.
	SF	JA_DAT			; Cero peticiones.

	MOVE.L	#JA_INTERBLT,$6C.W	; Inter de nivel 3 para BLT
	MOVE.W	#$C040,$9A(A6)		; Nivel 3 ON (BLT)
	MOVE.W	#$8040,$96(A6)		; Blitter ON

	MOVE.W	#$0400,$96(A6)		; Prioridad del BLT OFF
	MOVE.W	#$8040,$9C(A6)		; Llamada a Nivel 3. (BLT)
JA_INTERVB:
	MOVE.L	#JA_FIN,-(SP)		; Salto Inter. VBlank.
	CLR.W	-(SP)			; Modo Usuario.
	RTE

JA_INTER2:
	ADD.W	#6,SP
	IFNE	JA_COLOR
	MOVE.W	#$0F0F,$180(A6)
	ENDC
	IFEQ	JA_PRIOR
	MOVE.W	#$8400,$96(A6)		; Prioridad del Blitter.
	ENDC
JA_SWAP2:
	TST.B	JA_DAT2			; ¿Todas las peticiones realizadas?
	BNE.S	JA_SWAP2

	IFEQ	JA_PRIOR
	MOVE.W	#$0400,$96(A6)		; Prioridad del Blitter OFF
	ENDC
	MOVE.L	#JA_INTER,$6C.W		; Inter de nivel 3 para BLT (OFF)
	MOVE.W	#$0040,$9A(A6)		; Nivel 3 OFF (BLT)
	MOVE.W	#$0070,$9C(A6)		; Peticiones Nivel 3 OFF
	MOVE.W	#$8020,$9A(A6)		; Nivel 3 ON  (VB)
JA_FIN:	RTE

JA_INTERBLT:
	IFNE	JA_COLOR
	MOVE.W	#$000F,$180(A6)
	ENDC
	MOVE.W	#$0040,$9C(A6)		; Peticion liberada
	SUB.B	#1,JA_DAT2		; Resta y mira si mas peticiones
	BMI.S	JA_NOINT
	MOVEM.L	D0-D7/A0,-(SP)		; Nuevos datos para BLT
	MOVE.L	JA_DIRCON2,A0
	MOVEM.L	(A0)+,D0-D7
	MOVEM.L	D0-D5,$40(A6)
	MOVEM.L	D6-D7,$60(A6)
	MOVE.W	(A0)+,$58(A6)
	MOVE.L	A0,JA_DIRCON2		; Puntero siguiente peticion
	MOVEM.L	(SP)+,D0-D7/A0
	IFNE	JA_COLOR
	MOVE.W	#$0F00,$180(A6)
	ENDC
	RTE
JA_NOINT:
	SF	JA_DAT2			; Cero peticiones
	MOVE.W	#$0040,$9A(A6)		; Nivel 3 OFF
	MOVE.W	#$0040,$96(A6)		; Blitter OFF
	IFNE	JA_COLOR
	MOVE.W	#$00F0,$180(A6)
	ENDC
	RTE
JA_DAT:		DC.B	0
JA_DAT2:	DC.B	0
JA_DIRDAT:	DC.L	0
JA_DIRDAT2:	DC.L	0
JA_DIRCON:	DC.L	0
JA_DIRCON2:	DC.L	0
JA_BUFER:	DS.B	$24*JA_LLAMADAS
JA_BUFER2:	DS.B	$24*JA_LLAMADAS
; ------------------------------------------------ ;

