; 16F1704-re (05-re) hangszerelve: CCP1 helyett PWM3, ettől rövidebb.
; Ezt használja ki a 8 megszakításonként jelentkező adsrf flag, feltéve,
; hogy adsren engedélyezi. A megszakítás ezzel portolva.

; its3.inc: a 8 bitesD/A-ba író megszakítás a 16F1704 ötcsatornásához.
; A megszakítás a generáláson kívül egy egybájtos
; számlálót is kezel, aminek túlcsordulásakor flaget állít (8,192 ms).
; Állít öt további flaget is, amikor egy-egy hang új ciklust kezd. 
; Jelenleg a fő hang a főprogram időzítője, vagyis kbd scan is a fő hang 
; periódusával szinkronizáltan fut. Az ADSR-nek külön gyors flagje lett.
; A negyedik hang a pöfögés ritmusához használható, és egy bájttal hosz-
; szabb a számlálója. Ha nem kell, legyen nulla. A főhurok a többi flaget 
; ebben a változatban nem kezeli. Minden freki saját sorszámú táblázatot 
; kapott. Az azonosság megengedett, de minden táblázatot definiálni kell.
; Ez a változat annyival több its1-nél, hogy minden hangnak saját
; vezérlőbitje van és minden hang képez szinkronbitet.
; Van egy független zajcsatornája, de be is keveri a zajt a "nmsk" által
; meghatározott szinten. A bekevert zaj mintavételi frekvenciája viszont
; csak negyede a függetlenének, mert a PWM frekinél sűrűbben nem lehet
; amplitúdót változtatni. Csak akkor nincs zaj, ha nmsk=0, vagy az ADSR
; mindent elcsendesít. A külön zajgenerátor állandóan működik a független
; zajkimeneten. A hasznos feladatoknak több időt biztosítandó a zaj
; szubrutin noise makróvá alakult. Hossza 12 egység, elől kettővel és 
; hátul kettővel rövidebb a szubrutinnál. Paramétere nincs.
; A főprogram a szükséges többlet változók definícióival kiegészítve.
; Először kiszámítja az összes pointert, utána használja fel őket. 

noise macro	; eggyel lépteti és visszacsatolja a zajregisztert
	clc
	btfss	aux,2
	stc
	rlf	sreg0,f
	rlf	sreg1,f
	rlf	sreg2,f
	rlf	sreg3,f 
	rlf	sreg4,f	; sreg4 mindenhonnan látható, a többi nem
	swapf	sreg4,w	
	xorwf	sreg4,w
	movwf	aux	; ez aux-ot örökre leköti!!!
	movwf	portc	; ott csak 1 bit van, ami portkimenet, de akkor
			; pwm3 kimenetét örökre engedélyezni kell.
	endm		; 12 hosszú

#define tbl3h	tbl2h	; tbl2 és tbl3 azonos (azonos alakú és
#define	tbl3l	tbl2l	; amplitúdójú jelek)

	org	4
;	pagesel	0	; nem kell, nincs ugrás, a hívások meg választanak.
	banksel	0
	
	noise	; zaj makró (64 ütemenként ismétlődik) (12)
; aktuális fázisok kiszámítása, szinkronbit képzés
	movf	bl1,w
	addwf	al1,f
	movf	bh1,w
	addwfc	ah1,f
	snc
	bsf	flag1
	movf	bl2,w
	addwf	al2,f
	movf	bh2,w
	addwfc	ah2,f
	snc
	bsf	flag2
	movf	bl3,w
	addwf	al3,f
	movf	bh3,w
	addwfc	ah3,f
	snc
	bsf	flag3
	movf	bll4,w
	addwf	all4,f
	movf	bl4,w
	addwfc	al4,f
	movf	bh4,w
	addwfc	ah4,f
	snc
	bsf	flag4	; szinkronbit a 4. frekihez
	movf	bl5,w
	addwf	al5,f
	movf	bh5,w
	addwfc	ah5,f
	snc
	bsf	flag5	; szinkronbit az 5. frekihez  (44)
; értékek kikeresése, engedély esetén összegzése
	movlp	high tbl1h&0X7F
	clrf	ah
	movf	ah1,w
	callw
	snb	v1en
	movwf	ah
	movlp	high tbl1l&0X7F
	clrf	al
	movf	ah1,w
	callw
	snb	v1en
	movwf	al	
	bcf	pir1,tmr2if	; itt volt egy nop, kihasználtam	
	pagesel	0	; 64 (0) nem is kellene, mert a noise csak makro	

	noise		; 76 (12) 	
	clrf	bh
	clrf	bl
	movlp	high tbl2h&0X7F
	movf	ah2,w
	callw
	snb	v2en
	movwf	bh
	movlp	high tbl2l&0X7F
	movf	ah2,w
	callw
	snb	v2en
	movwf	bl
	movf	bl,w
	addwf	al,f
	movf	bh,w
	addwfc	ah,f	;22!
	clrf	bh
	clrf	bl
	movlp	high tbl3h&0X7F
	movf	ah3,w
	callw
	snb	v3en
	movwf	bh
	movlp	high tbl3l&0X7F
	movf	ah3,w
	callw
	snb	v3en
	movwf	bl
	pagesel	0
	movf	bl,w
	addwf	al,f
	movf	bh,w
	addwfc	ah,f ; 44
	incf	belso,f	; ez a fix főszinkron, 8,192 ms
	snz
	bsf	nyolc	; 52
	nop
	nop
	nop
	clrf	bh
	noise		; (12)
	clrf	bl
	movlp	high tbl4h&0X7F
	movf	ah4,w
	callw
	snb	v4en
	movwf	bh
	movlp	high tbl4l&0X7F
	movf	ah4,w
	callw
	snb	v4en
	movwf	bl
	movf	bl,w
	addwf	al,f
	movf	bh,w
	addwfc	ah,f
	clrf	bh
	clrf	bl
	movlp	high tbl5h&0X7F
	movf	ah5,w
	callw
	snb	v5en
	movwf	bh
	movlp	high tbl5l&0X7F
	movf	ah5,w
	callw
	snb	v5en
	movwf	bl
	pagesel	0
	movf	bl,w
	addwf	al,f
	movf	bh,w
	addwfc	ah,f	
	banksel	dac1con1
	movf	nmsk,w
	andwf	sreg4,w
	xorwf	ah,w
	movwf	dac1con1
	movf	al,w
	nop
	banksel	0	
	noise	; (12)
	sb	adsren
	retfie
	decfsz	adsrdiv
	retfie
	bsf	adsrf
	movlw	adiv0
	movwf	adsrdiv
	retfie		
			
	
	
	