;**************************************************************************
;*
;* timer test
;*
;**************************************************************************
	
	org	$2000			   ;prg start
	
	
	
	icl "custom.i"

	cld
	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
	
	;vertical blank interrupt 
	
	lda 	#>vbi_irq
	sta	VVBLKIH	
	lda 	#<vbi_irq
	sta	VVBLKIL	

	;os key remove
	
	lda	#<noKeyRead
        sta	VSERINL        
        lda	#>noKeyRead
        sta	VSERINH   

	;store Timer-1 vector

	lda	VTIMR1L
	sta	oldTimer1Vector
	lda	VTIMR1H
	sta	oldTimer1Vector+1

	;set	Timer-1 vector

	lda	#<timerIrq
        sta	VTIMR1L        
        lda	#>timerIrq
        sta	VTIMR1H 
	
	;chbase
	
	lda	#$E0
	sta	CHBASE
	
	;color setup
	
	lda	#$0	
	sta	COLBK
	lda	#$a	
	sta	COLPF0
	lda	#$e	
	sta	COLPF1
	lda	#$8	
	sta	COLPF2
	lda	#$88				
	sta	COLPF3
				
	;disable player/missile dma
	
	lda	#$00
	sta	GRACTL
	
	;setup displays
	   
	lda	#DMACTL_DL|DMACTL_PF_NORMAL		
		
		;enable display list dma 			
		;playfield normal display (40)
		
	sta	DMACTL	;DMACTL
	
	;enable ints
	
	lda	#NMIEN_VBI
	sta	NMIEN	;VBI
	
	;config timer
	
	lda	#1	      
        sta	AUDCTL        ;15 kHz frequency 
	
        lda	#150		
        sta	AUDF1         ;~100 Hz
        lda	#0
        sta	AUDC1         ;no sound
	
	;enable timer irq
	
	lda	#1
        sta	POKMSK
        sta	IRQEN
	
	;start timer
	
        lda	#0
        sta	STIMER		;start time (strobe)

        cli
	
loop	

?WaitVC0
        lda	VCOUNT		
        beq	?WaitVC0   	
?WaitVCnot0
        lda	VCOUNT		
        bne	?WaitVCnot0   
	
	inc	pf0Counter	
	lda	pf0Counter
	sta	COLPF0
	
		
	jmp	loop

pf0Counter	.byte	0	
blkScounter	.byte	0
oldTimer1Vector	.word	0	
	
;************************************************
;*
;* timerIrq
;*
;************************************************

timerIrq

        ;pha	;don't do pha, already pushed by OS!
        txa
        pha
        tya
        pha

	;change bg
	
	inc	blkScounter
	lda	blkScounter
	sta	COLBK
      
        lda	POKMSK
	sta	IRQEN

        pla
        tay
        pla
        tax
        pla
        rti

		
	
;************************************************
;*
;* dummy
;*
;************************************************
	
noKeyRead	
	rts	
	
	lda	#$0
	sta	HSCROL	
	
;************************************************
;*
;* vertical blank interrupt (immidiate, x,y regs save bei os rom)
;*
;************************************************

vbi_irq
					
	;prolog (like XITVBL)
	
	jmp	XITVBL
	
	; 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 $70		;8 blank lines	
	.byte $70		;8 blank lines	
	.byte $47,<charData,>charData   	;Mode 7 + LMS	 
	.rept 12
	.byte $7   
	.endr
	.byte $41,<displayList,>displayList ; wait vblank, restart same display list on next frame

charData

	.byte	">------------------<"
	.byte	">                  <"
	.byte	"> TIMER            <"
	.byte   "> TEST 1           <"
	.byte	">                  <"
	.byte	">                  <"
	.byte	">                  <"
	.byte   ">                  <"
	.byte	">                  <"
	.byte	">                  <"	
	.byte	">                  <" 
	.byte   ">                  <"	
	.byte	">------------------<"	
		

	
