; its2.inc az ötfüttyhöz. 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 az ADSR és a kbd scan
; is a fő hang periódusával szinkronizáltan fut. Az ADSR-nél ez fontos.
; 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, bár tbl3 végül tbl2-vel azonos, hogy ne kelljen ismételni.
; Ez a változat annyival több az előzőnél, hogy minden hangnak külön
; 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,
; pedig ebben a modulban is definiálhatók lettek volna. Mivel várhatóan
; csak ez a változat él tovább, jó helyen vannak a főprogramban. 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
	swapf	sreg4,w	
	xorwf	sreg4,w
	movwf	aux
	movwf	porta	; csak ra2-re, a többi kimeneten periféria van!
	endm		; 12 hosszú

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

	org	4
	pagesel	0
	banksel	0
	
	noise	; zaj hívása (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
	call	dum	; itt 4 maradt, így most 64...............
			; és ezt a négyet nem tudom kihasználni
	noise		; (12)
	clrf	bh
	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	ccpr1l
	movf	nmsk,w
	andwf	sreg4,w
	addwf	ah,w
	movwf	ccpr1l
	banksel	0	
	rrf	al,f
	
	noise	; (12)
	banksel	ccpr1l
	rrf	al,w
	andlw	30h
	addlw	0dh
	movwf	ccp1con
;	banksel	0	; szükségtelen, mert a bank regiszter helyreáll
	retfie		; (20) ez a max. 26 még épp elfogadható, marad 38.
			; f1=2 kHz mellett is kb. 600 utasításidő van
			; két teendő között a főprogram számára.
	
	
	