;**************************************************************************
;*
;* console sound test 2
;*
;**************************************************************************
	
	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   

	;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
	
	;set sample data
	
	lda	#<sampleData
	sta	za0
	sta	za2
	lda	#>sampleData
	sta	za0+1
	sta	za2+1
	
	;sample data end
	
	lda	#<sampleDataEnd
	sta	za1
	lda	#>sampleDataEnd
	sta	za1+1
		
loop	

	ldy	#0
	lda	(za0),y		;get 8 bit of sample data
	sta	zd0
	
	.rept	8
	asl	zd0		;msb to carry

	lda	#0		;dont jump to disturb timing
        adc	#0          
        asl
        asl
        asl          
        sta 	CONSOL	
	jsr	delay
	.endr
	
	;increment sample pointer
	
	clc
	lda	za0
	adc	#1
	sta	za0
	bcc	@+
	inc	za0+1
@
	
	;check end of sampe
	
	lda	za0
	cmp	za1
	bne	?endNotReached
	
	lda	za0+1
	cmp	za1+1
	bne	?endNotReached
	
	;end reached so za0 to start
	
	lda	za2
	sta	za0
	lda	za2+1
	sta	za0+1
	
?endNotReached	
	
	
		
		
	jmp	loop
	
delay
	.rept	36
	nop
	.endr
	
	rts

delayStartCount .byte	0
	

;************************************************
;*
;* dummy
;*
;************************************************
	
noKeyRead	
	rts	
	
	lda	#$0
	sta	HSCROL	
	
;************************************************
;*
;* vertical blank interrupt (immidiate, x,y regs save bei os rom)
;*
;************************************************

vbi_irq
					
	;prolog (like XITVBL)
	
	pla					  
	tay
	pla					  
	tax
	pla					  
	rti
	
	; 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	"> CONSOLE SOUND    <"
	.byte   "> TEST 2           <"
	.byte	"> SAY ATARI POWER  <"
	.byte	">                  <"
	.byte	">                  <"
	.byte   ">                  <"
	.byte	">                  <"
	.byte	">                  <"	
	.byte	">                  <" 
	.byte   ">                  <"	
	.byte	">------------------<"	
		
sampleData

        .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
        .byte $FF,$FF,$FF,$FF,$FF,$FF,$FB,$EF,$C1,$9F,$FF,$DF,$FF,$FC,$BB,$FE
        .byte $0F,$3F,$B1,$FF,$EC,$9F,$7E,$EF,$FF,$F4,$39,$7D,$00,$C3,$F9,$CA
        .byte $F7,$6F,$8D,$F2,$F3,$6B,$87,$7E,$61,$46,$C4,$C5,$7A,$97,$6E,$C6
        .byte $62,$1C,$1D,$BA,$4F,$3F,$FB,$07,$E8,$C0,$1C,$DF,$32,$4F,$FF,$F8
        .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
        .byte $00,$00,$00,$00,$00,$00,$01,$30,$C7,$19,$FF,$DD,$F3,$FE,$FF,$FF
        .byte $FF,$FF,$DF,$FF,$FF,$FF,$FF,$FF,$FF,$7F,$FF,$FF,$FF,$FF,$00,$00
        .byte $03,$FF,$FF,$FF,$80,$00,$02,$C0,$FF,$FF,$EF,$00,$13,$9E,$7F,$FF
        .byte $FF,$00,$03,$FF,$87,$FF,$FC,$00,$00,$7F,$E4,$3F,$F0,$03,$FE,$3F
        .byte $FF,$80,$00,$1F,$FE,$07,$FF,$81,$FF,$80,$00,$7F,$FF,$FF,$FF,$80
        .byte $00,$00,$FF,$E0,$3F,$FE,$00,$00,$00,$FF,$F0,$3F,$FF,$C0,$00,$00
        .byte $0F,$FF,$CF,$FF,$FE,$FF,$00,$00,$00,$03,$FF,$FF,$FF,$FF,$2D,$00
        .byte $00,$00,$01,$FF,$FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$00,$FF,$F6
        .byte $00,$00,$01,$7F,$40,$00,$81,$FF,$FE,$00,$1F,$FE,$9F,$FF,$FF,$FF
        .byte $F0,$0F,$F8,$00,$FF,$DF,$FB,$3B,$CF,$7B,$00,$00,$1F,$FB,$73,$FF
        .byte $F8,$00,$00,$1F,$DF,$FF,$FF,$FE,$7B,$FF,$FF,$E0,$3F,$FF,$FF,$77
        .byte $FC,$F1,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01
        .byte $02,$10,$28,$49,$45,$2A,$D5,$34,$B6,$96,$5A,$16,$95,$29,$B4,$97
        .byte $5A,$94,$BE,$B5,$EA,$D6,$BD,$25,$29,$4A,$D5,$42,$52,$94,$A9,$4A
        .byte $14,$94,$A5,$69,$4A,$56,$82,$94,$A4,$85,$6A,$5A,$52,$94,$A1,$AD
        .byte $08,$42,$54,$C2,$94,$38,$C7,$08,$72,$D7,$38,$E3,$2E,$63,$CE,$3D
        .byte $D7,$AA,$52,$B3,$A2,$3D,$47,$E6,$E4,$6F,$85,$39,$FB,$8B,$B1,$8F
        .byte $1C,$78,$F9,$D3,$1E,$30,$F2,$3D,$E3,$C7,$9F,$3E,$38,$C3,$8C,$38
        .byte $87,$58,$F7,$E7,$CF,$0E,$10,$70,$0E,$7D,$FB,$FF,$E4,$00,$00,$04
        .byte $3D,$FF,$FF,$FE,$80,$00,$00,$1F,$FF,$FF,$FE,$80,$00,$00,$3F,$FF
        .byte $FF,$F8,$00,$00,$03,$FF,$FF,$FF,$FF,$C0,$00,$07,$9F,$FF,$FF,$FF
        .byte $C0,$00,$0F,$9D,$FF,$FF,$FF,$C0,$00,$07,$DF,$FF,$FF,$FF,$E0,$00
        .byte $03,$C7,$FF,$FF,$FF,$F0,$00,$01,$E7,$CF,$FF,$FF,$FC,$00,$00,$F3
        .byte $A7,$FF,$FF,$FF,$00,$00,$F9,$B7,$FF,$FF,$FF,$C0,$00,$3C,$71,$FF
        .byte $FF,$FF,$F0,$00,$1E,$3C,$7F,$FF,$FF,$F8,$00,$01,$E3,$FF,$FF,$FF
        .byte $FF,$80,$00,$70,$FF,$FF,$FF,$FF,$E0,$00,$0E,$0F,$FF,$FF,$FF,$FE
        .byte $00,$00,$E1,$FF,$FF,$FF,$FF,$C0,$00,$1C,$3F,$FF,$FF,$FF,$FC,$00
        .byte $03,$C3,$FF,$FF,$FF,$FF,$80,$00,$1C,$3E,$7F,$FF,$FF,$FC,$00,$01
        .byte $E3,$E7,$FF,$FF,$FF,$C0,$00,$07,$07,$FF,$FF,$FF,$FE,$00,$00,$1C
        .byte $7C,$FF,$FF,$FF,$FC,$00,$00,$70,$F3,$FF,$FF,$FF,$F0,$00,$00,$E1
        .byte $FF,$FF,$FF,$FF,$E0,$00,$01,$C3,$FF,$FF,$FF,$FF,$E0,$00,$01,$C7
        .byte $FF,$FF,$FF,$FF,$F0,$00,$03,$C7,$FF,$FF,$FF,$FF,$F0,$00,$01,$E3
        .byte $8F,$FF,$FF,$FF,$F0,$00,$00,$63,$C7,$FF,$FF,$FF,$F8,$00,$00,$39
        .byte $FF,$FF,$FF,$FF,$FE,$00,$00,$07,$FC,$FF,$FF,$FF,$FF,$F0,$00,$00
        .byte $8F,$9F,$7F,$FF,$FF,$FC,$00,$00,$01,$FF,$F7,$FF,$FF,$FF,$F0,$00
        .byte $00,$07,$FF,$FF,$FF,$FF,$FF,$C0,$00,$00,$1F,$FF,$FF,$FF,$FF,$FF
        .byte $00,$00,$00,$3F,$FF,$FF,$FF,$FF,$FE,$00,$00,$00,$1F,$FF,$FF,$8F
        .byte $FF,$FF,$80,$00,$00,$0F,$FF,$FF,$C7,$FF,$FF,$80,$00,$00,$07,$FF
        .byte $FF,$83,$FF,$FF,$C0,$00,$00,$07,$FF,$FF,$01,$FF,$FF,$E0,$00,$00
        .byte $06,$FF,$FF,$80,$FF,$FF,$F0,$00,$00,$03,$FF,$FF,$80,$7F,$FF,$F0
        .byte $00,$00,$06,$FF,$FF,$C0,$7F,$FF,$F0,$00,$00,$02,$FF,$FF,$E0,$7F
        .byte $FF,$F8,$00,$00,$03,$FF,$FF,$E0,$7F,$FF,$F0,$00,$00,$03,$FF,$FF
        .byte $F0,$7F,$FF,$F0,$00,$00,$03,$FF,$FF,$FF,$FF,$FF,$E0,$00,$00,$01
        .byte $FF,$FF,$FF,$FF,$FF,$80,$00,$00,$00,$02,$7F,$FF,$FF,$FF,$FC,$00
        .byte $00,$00,$03,$FF,$FF,$FF,$FE,$00,$37,$F0,$00,$FF,$FF,$FF,$FF,$FF
        .byte $BF,$FF,$FE,$C0,$00,$4F,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$00
        .byte $03,$3F,$FF,$FF,$80,$04,$40,$00,$00,$00,$07,$FF,$E0,$00,$00,$00
        .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
        .byte $00,$00,$00,$00,$00,$00,$00,$00,$3F,$ED,$FB,$EB,$DD,$10,$05,$FF
        .byte $EF,$7F,$F3,$CF,$FF,$F8,$FF,$F8,$63,$EC,$39,$86,$0C,$30,$FA,$04
        .byte $03,$DF,$5E,$FF,$E7,$9F,$FF,$E3,$FF,$00,$43,$E0,$07,$E0,$0F,$10
        .byte $20,$00,$C0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$80,$00,$04
        .byte $18,$00,$40,$04,$00,$07,$00,$38,$C3,$C4,$3C,$03,$F0,$3C,$3D,$81
        .byte $78,$E3,$8F,$1C,$FD,$FE,$FF,$01,$E1,$63,$7E,$0F,$FE,$F3,$E1,$60
        .byte $1E,$00,$3C,$3F,$FF,$FF,$FC,$00,$08,$00,$7E,$7F,$FF,$FF,$FF,$D6
        .byte $00,$40,$07,$5C,$FF,$FF,$FF,$F0,$C0,$00,$00,$71,$FF,$BF,$FF,$FF
        .byte $9C,$00,$00,$03,$3F,$FF,$FF,$FF,$FB,$80,$00,$00,$1E,$7F,$FF,$FF
        .byte $FF,$18,$00,$00,$00,$F7,$FF,$FF,$FF,$FC,$00,$00,$00,$1E,$7F,$F7
        .byte $FF,$FF,$F0,$00,$00,$00,$78,$FF,$FF,$FF,$FF,$80,$20,$00,$03,$C7
        .byte $FF,$FF,$FF,$FF,$80,$00,$00,$01,$C7,$FF,$FF,$FF,$FF,$80,$00,$00
        .byte $07,$CF,$FF,$FF,$FF,$FF,$B8,$00,$00,$07,$C7,$FF,$FF,$FF,$FF,$F8
        .byte $00,$00,$03,$E3,$FF,$FF,$FF,$FF,$EE,$00,$00,$00,$F1,$FF,$FF,$FF
        .byte $FF,$FC,$00,$00,$00,$1E,$3D,$FF,$E7,$FF,$FF,$80,$00,$00,$03,$C7
        .byte $9F,$FF,$FF,$F7,$E0,$00,$00,$00,$78,$FB,$FF,$EF,$FF,$FF,$00,$00
        .byte $00,$1F,$1F,$FF,$FF,$FF,$FF,$E0,$00,$00,$03,$E3,$FF,$FF,$FF,$FF
        .byte $F8,$80,$00,$00,$1F,$9F,$FF,$FF,$FF,$FE,$00,$00,$00,$01,$F9,$FF
        .byte $FF,$FF,$FF,$F8,$00,$00,$00,$0F,$FF,$FF,$FF,$FF,$FF,$80,$00,$00
        .byte $07,$FF,$FF,$FF,$FF,$FF,$C0,$00,$00,$00,$FF,$FF,$FF,$FF,$FF,$F8
        .byte $00,$00,$00,$3F,$FF,$FF,$FF,$FF,$FF,$00,$00,$00,$03,$FF,$FF,$FF
        .byte $FF,$FF,$E0,$00,$00,$00,$FF,$FF,$FF,$FF,$FF,$FC,$00,$00,$00,$3F
        .byte $FF,$FF,$FF,$FF,$FF,$80,$00,$00,$03,$FF,$FF,$FF,$FF,$FF,$F8,$00
        .byte $00,$00,$7F,$FF,$FF,$FF,$FF,$FE,$00,$00,$00,$0F,$FF,$FF,$FF,$FF
        .byte $FF,$C0,$00,$00,$00,$7F,$FF,$FF,$FF,$FF,$FC,$00,$00,$00,$07,$FF
        .byte $FF,$FF,$FF,$FF,$80,$00,$00,$00,$7F,$FF,$FF,$FF,$FF,$F8,$00,$00
        .byte $00,$0F,$FF,$FF,$FF,$FF,$FF,$C0,$00,$00,$00,$FF,$FB,$FF,$FF,$FF
        .byte $FC,$00,$00,$00,$07,$FF,$FF,$FF,$FF,$FF,$C0,$00,$00,$00,$7F,$FF
        .byte $FF,$FF,$FF,$FC,$00,$00,$00,$07,$DF,$FF,$FF,$FF,$FF,$80,$00,$00
        .byte $00,$FF,$FF,$FF,$FF,$FF,$E0,$00,$00,$00,$1F,$FF,$FF,$FF,$FF,$FC
        .byte $00,$00,$00,$07,$FF,$FF,$FF,$FF,$FF,$00,$00,$00,$02,$7F,$FF,$FF
        .byte $FF,$F8,$00,$00,$00,$09,$FF,$FF,$FF,$FF,$E0,$00,$00,$00,$03,$FF
        .byte $FF,$FF,$FF,$C0,$00,$00,$00,$3F,$FF,$FF,$FF,$FB,$C0,$00,$00,$3C
        .byte $7F,$FF,$FF,$FF,$F0,$00,$00,$00,$7F,$FF,$FF,$FF,$F1,$E0,$0E,$3D
        .byte $FF,$FF,$FF,$FF,$F0,$00,$10,$73,$FF,$BE,$7F,$FF,$38,$20,$00,$04
        .byte $00,$00,$80,$00,$10,$00,$00,$00,$00,$00,$00,$03,$8E,$10,$60,$80
        .byte $00,$00,$01,$87,$1F,$FF,$BF,$27,$CF,$0F,$F9,$FA,$76,$C7,$BD,$B3
        .byte $66,$FF,$F3,$EF,$E3,$FF,$E0,$12,$FD,$E4,$0C,$40,$89,$15,$4A,$CF
        .byte $FF,$F8,$03,$02,$81,$D3,$27,$7D,$FF,$FF,$69,$BF,$FF,$EF,$BF,$FF
        .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
        .byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
	
	;wait
	
	.rept	400
	.byte	$ff
	.endr
	
sampleDataEnd	
