;**************************************************************************
;*
;* show all player / missiles width no h/w zoom
;*
;**************************************************************************
	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
	
	;color player/missile
	
	lda 	#$1F
        sta 	COLPM0
        lda 	#$2F
        sta 	COLPM1
        lda 	#$3F
        sta 	COLPM2
        lda 	#$70
        sta 	COLPM3
        
        ;hpos players
        lda	#60
        sta	HPOSP0
        lda	#80
        sta	HPOSP1
        lda	#100
        sta	HPOSP2
        lda	#120
        sta	HPOSP3
        
        ;hpos missile
        
	lda	#130
        sta	HPOSM0
        lda	#138
        sta	HPOSM1
        lda	#146
        sta	HPOSM2
        lda	#152
        sta	HPOSM3
                
        ;width/size play 0
        lda	#0		;x1 player
        sta	SIZEP0
        sta	SIZEP1
        sta	SIZEP2
	sta	SIZEP3
	
	lda	#0		;x1 missile
	sta	SIZEM
        
        ;pmbase
        
        lda	#>playerMissleBlock
        sta	PMBASE
		
	;enable player & missile
	
	lda	#$03
	sta	GRACTL
	
	;setup displays
	   
	lda	#%00111110
			;playfield normal display (40)
			;player dma (1 line)
			;missile 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

	;

	
	;prolog (like XITVBL)
	
	pla					  
	tay
	pla					  
	tax
	pla					  
	rti
		
;************************************************
;*
;* display list interrupt
;*
;************************************************

dli_irq

	;prolog

        pha 
	txa	
	pha
	tya	
	pha
	
	;
	
	;epilog
	
        pla					  
	tay
	pla					  
	tax
	pla
        rti   	;direct (no stack used)

; 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 $7 ;3
	.byte $7 ;4
	.byte $7 ;5
	.byte $7 ;6
	.byte $7 ;7
	.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	"XXXXXXXXXXXXXXXXXXXX" ;0
	.byte	"X                  X" ;1
	.byte	"X                  X" ;2
	.byte	"X                  X" ;3
	.byte	"X                  X" ;4
	.byte	"X                  X" ;5
	.byte	"X                  X" ;6
	.byte	"X                  X" ;7
	.byte	"X                  X" ;8
	.byte	"X                  X" ;9
	.byte	"X                  X" ;10
	.byte	"XXXXXXXXXXXXXXXXXXXX" ;11
	
	;there are 4 player and 4 missile "sprites"
	;player width is 8 pixel
	;missile width is 2 pixels
	;player missile pair have unique color (0,1,2,3)
	;height is 128 or 256 lines
	
	org	$4800
	
;+--------+--------------------+--------------------+
;| Offset | Double Line        | Single Line        |
;+--------+--------------------+--------------------+
;| +128   | unused             | unused             |
;+--------+--------------------+--------------------+
;| +256   |                    |                    |
;+--------+--------------------+--------------------+
;| +384   | M3   M2   M1   M0  |                    |
;+--------+--------------------+--------------------+
;| +512   | Player 0           |                    |
;+--------+--------------------+--------------------+
;| +640   | Player 1           |                    |
;+--------+--------------------+--------------------+
;| +768   | Player 2           | M3   M2   M1   M0  |
;+--------+--------------------|                    |
;| +896   | Player 3           |                    |
;+--------+--------------------+--------------------+
;| +1024  |                    | Player 0           |
;|        |                    |                    |
;+--------+--------------------+--------------------+
;| +1280  |                    | Player 1           |
;|        |                    |                    |
;+--------+--------------------+--------------------+
;| +1536  |                    | Player 2           |
;|        |                    |                    |
;+--------+--------------------+--------------------+
;| +1792  |                    | Player 3           |
;|        |                    |                    |
;+--------+--------------------+--------------------+

playerMissleBlock

	.rept	(768)
	.byte	0
	.endr
	
	
	;missiles M3 M2 M1 M0
	
	.byte	0,0,0,0,0,0,0,0	;v blanks
	
	.rept	(30)		;30*8=240 pixels
		;33221100
	.byte	%10011111
	.byte	%01100101
	.byte	%10010111
	.byte	%01101101
	.byte	%10010100
	.byte	%01100111
	.byte	%10010101
	.byte	%01101111
	.endr
	
	.byte	0,0,0,0,0,0,0,0	;v blanks

	;player 0
	
	.byte	0,0,0,0,0,0,0,0	;v blanks
	
;duck

	.rept	(30)		;30*8=240 pixels
        .byte %00011000
        .byte %00111100
        .byte %01111110
        .byte %11111111
        .byte %10011001
        .byte %10000001
        .byte %01100110
        .byte %00000000
        .endr
        
        .byte	0,0,0,0,0,0,0,0	;v blanks
        
        ;player 1
	
	.byte	0,0,0,0,0,0,0,0	;v blanks
        
;alien

	.rept	(30)		;30*8=240 pixels
        .byte %00111100
        .byte %01111110
        .byte %11011011
        .byte %11111111
        .byte %10111101
        .byte %00100100
        .byte %01000010
        .byte %10000001
        .endr
        
        .byte	0,0,0,0,0,0,0,0	;v blanks
        
	;player 2
	
	.byte	0,0,0,0,0,0,0,0	;v blanks
        
;shield

	.rept	(30)		;30*8=240 pixels
        .byte %00011000
        .byte %00111100
        .byte %01111110
        .byte %11111111
        .byte %11111111
        .byte %01111110
        .byte %00111100
        .byte %00011000
        .endr
        
        .byte	0,0,0,0,0,0,0,0	;v blanks

        ;player 3
	
	.byte	0,0,0,0,0,0,0,0	;v blanks
        
;rocket

	.rept	(30)		;30*8=240 pixels
        .byte %00011000
        .byte %00111100
        .byte %01111110
        .byte %11011011
        .byte %11111111
        .byte %00111100
        .byte %01111110
        .byte %00100100
        .endr
        
        .byte	0,0,0,0,0,0,0,0	;v blanks
        
	
	
	
	
	
