;**************************************************************************
;*
;* horizontal bg color set via dli
;*
;**************************************************************************

	;.define	DEBUG

	org $2000			   ;prg start
	
	icl "custom.i"
	
start	;

	sei				  ;disable irqs
	lda	#$00
	sta	NMIEN			  ;NMIEN all off 
	sta	DMACTL			  ;DMACTL all off

	;set display list (use shadow regs)
	
	lda	#<displayList
	sta	DLISTL	
	lda	#>displayList
	sta	DLISTH
	
	;set display list interrupt
	  
	lda	#<dli_irq
        sta	VDSLSTL           
        lda	#>dli_irq
        sta	VDSLSTH    
	
	;vertical blank interrupt 
	
	lda 	#>vbi_irq
	sta	VVBLKIH	
	lda 	#<vbi_irq
	sta	VVBLKIL	
	
	;chbase
	
	lda	#$e0	
	sta	CHBASE
	
	;color setup
	
	lda	#$0	;black
	sta	COLBK
	
	lda	#$34	;red		
	sta	COLPF0
	lda	#$b6	;green	
	sta	COLPF1
	lda	#$1a	;yellow		
	sta	COLPF2
	lda	#$70	;blue		
	sta	COLPF3
	
	;enable missile

	lda	#GRACTL_MISSILES
	sta	GRACTL
		
	;setup displays
	   	
	lda	#DMACTL_DL
		
		;enable display list dma 			
		;playfield normal display (40)
		
			
	sta	DMACTL	;DMACTL
	
	lda	#$0
	sta	HSCROL
	
	;enable dli
	
	lda	#NMIEN_VBI|NMIEN_DLI	;
	sta	NMIEN	;VBI + DLI enbable
	
	;
	
	cli		;irq enable

	
	
	;
loop
	;Wait VBlank

?WaitVC0
        lda	VCOUNT		
        beq	?WaitVC0   	
?WaitVCnot0
        lda	VCOUNT		
        bne	?WaitVCnot0   	                

	;
	
	jmp loop			;end
		
;************************************************
;*
;* vertical blank interrupt (immidiate, x,y regs save bei os rom)
;*
;************************************************

vbi_irq

	; reset dli counter
	
	
	lda	vblankCounter
	clc
	adc	#$20
	sta	vblankCounter
	lda	vblankCounter+1
	adc	#0
	sta	vblankCounter+1
	and	#$3
	sta	cycler

	;prolog (like XITVBL)
	
	pla					  
	tay
	pla					  
	tax
	pla					  
	rti
	
	;.align	$100
	
;************************************************
;*
;* display list interrupt
;*
;************************************************

dli_irq
	clc
	.byte	$90	;bcc
cycler	.byte	0
	
	nop
	nop
	nop
	
	lda	#1
	sta	COLBK
	lda	#4
	sta	COLBK
	lda	#8
	sta	COLBK
	lda	#12
	sta	COLBK
	lda	#15
	sta	COLBK
	lda	#12
	sta	COLBK
	lda	#8
	sta	COLBK
	lda	#0
	sta	COLBK
	sta	WSYNC

        rti   	;direct
	

vblankCounter .word	0	
	
; display list

	;7	6	5	4	3	2	1	0
	;DLI	LMS	VSCROLL	HSCOLL	Mode
	;
	;Mode 0 Blank lines 7..4 is count+1 of blank lines
	;Mode 1 JMP (use with LMS to set destination)
	;Mode $2-$f is ANTIC mode
		
	 .align $400
	 
displayList	 
	.byte 	0			   ; Mode 0
	.byte	$08
	.rept	200	;232
	.byte 	$80	; 1 blank lines (mode 0) + DLI
	.endr
	.byte $41,<displayList,>displayList ; wait vblank, restart same display list on next frame	
		
	
