		
	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 (usable width GTIA mode 2)			
	sta	COLPF3
		
		
	;disable player/missile dma
	
	lda	#$00
	sta	GRACTL
	
	;setup displays
	   
	lda	#$22	;playfield normal display (40)
			;no player missle dma 
			;enable display list dma 
			
	sta	DMACTL	;DMACTL
	
	lda	#0
	sta	HSCROL
	
	;enable dli
	
	lda	#$c0
	sta	NMIEN	;VBI + DLI enbable
	
	;
	
	cli		;irq enable

loop
	
	jmp loop			;end
	

;************************************************
;*
;* vertical blank interrupt (immidiate, x,y regs save bei os rom)
;*
;************************************************

vbi_irq

	;

	lda	#0
	sta	dliCounter
	
	;
	
	inc	dli2ColorTableOffset
	lda	dli2ColorTableOffset
	and	#$f	
	sta	dli2ColorTableOffset
	
	;prolog (like XITVBL)
	
	pla					  
	tay
	pla					  
	tax
	pla					  
	rti
		
;************************************************
;*
;* display list interrupt
;*
;************************************************

dli_irq

	;prolog

        pha 
	txa	
	pha
	tya	
	pha
	
	;jmp to dli function
	
	lda	dliCounter
	and	#$f
	asl
	tax
	
	lda 	dliJumpList,x
        sta 	dliJmpTarget
        lda 	dliJumpList+1,x
        sta 	dliJmpTarget+1
	
	
	jmp	(dliJmpTarget)
	
dli_irq_end

	inc	dliCounter
	
	;epilog
	
        pla					  
	tay
	pla					  
	tax
	pla
        rti   	;direct (no stack used)

        ;temp target for jump
        
dliJmpTarget	.word	0
    	
	;only change color 0

dli_0	lda	#$1a	
	sta	WSYNC	;wait scan line		
	sta	COLPF0
	jmp	dli_empty
	
	;only change color 0

dli_1	lda	#$0c	
	sta	WSYNC	;wait scan line		
	sta	COLPF0
	jmp	dli_empty

	;color bar for color 0/1 and background
	
dli_2	

	ldx	#0
colorLoop
	
	txa
	clc
	adc	dli2ColorTableOffset
	tay
	lda	dli2ColorTable,y	

	sta	COLPF0
	clc
	adc	#$10
	sta	WSYNC	;wait scan line	
	sta	COLBK
	adc	#$70
	sta	COLPF1
	
        inx
	cpx	#14
        bne 	colorLoop
        jmp	dli_empty           

	;only change color 0 and reset color 1 and background

dli_3	sta	WSYNC	;wait scan line
	lda	#$34			
	sta	COLPF0
	lda	#$b6
	sta	COLPF1
	lda	#0
	sta	COLBK
	
	jmp	dli_empty
	
	;do nothing and jump bacl

dli_empty

	jmp	dli_irq_end

	;jumplist 8 entries

dliJumpList	.word	dli_0
		.word	dli_1
		.word	dli_2
		.word	dli_3
		.word	dli_empty
		.word	dli_empty
		.word	dli_empty
		.word	dli_empty

	;dli counter
		
dliCounter	.byte	0

	;color list and offset

dli2ColorTable	.byte	$00,$02,$04,$06,$08,$0a,$0c,$0e 
		.byte	$0f,$0c,$0a,$08,$06,$04,$02,$00 
		.byte	$00,$02,$04,$06,$08,$0a,$0c,$0e 
		.byte	$0f,$0c,$0a,$08,$06,$04,$02,$00 

dli2ColorTableOffset	.byte	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 $70,$70,$70  ; 8 blank lines (mode 0) * 3
	.byte $47,<charData,>charData  ; Mode 7 + LMS, setting screen memory to $4000
	.byte $7  ;1
	.byte $7  ;2
	.byte $87 ;3 DLI
	.byte $7  ;4
	.byte $87 ;5 DLI
	.byte $87 ;6 DLI
	.byte $87 ;7 DLI
	.byte $7  ;8 
	.byte $7  ;9 
	.byte $7  ;10
	.byte $7  ;11
	.byte $41,<displayList,>displayList ; wait vblank, restart same display list on next frame	
	
	org	$4000
	 
	;note here its a 8x16 pixel mode
	
charData

	;20 chars per screen width (20*8 = 160Pixel)
	;12 char height (12*16 = 192 (/2))

	;        --------------------
	.byte	"hello all           " ;0
	.byte	"GOLDMoMo is back    " ;1
	.byte	"one atari 8 bit     " ;2
	.byte	"                    " ;3
	.byte	"as old amiga fan    " ;4
	.byte	"now i like atari too" ;5
	.byte	"                    " ;6
	.byte	"lets MOVE colors !! " ;7
	.byte	"                    " ;8
	.byte	"                    " ;9
	.byte	"no TEXT at last line" ;10
	.byte	":-)                 " ;12
	
	
	org	$8000
	
	
	
