
;структура блока параметров канала
P.TMPT=0		;(1) счётчик тиков = темп
P.TPSV=1		;(1) текущий фрагмент громкости в сэмпле
P.TPSN=2		;(1) текущий фрагмент шума в сэмпле
P.TPST=3		;(1) текущий фрагмент тона в сэмпле
P.ASMP=4		;(2) адрес текущего сэмпла
P.BCYV=6		;(1) начальный фрагмент зацикливания громкости в сэмпле
P.BCYN=7		;(1) начальный фрагмент зацикливания шума в сэмпле
P.BCYT=10		;(1) начальный фрагмент зацикливания тона в сэмпле
P.ECYV=11		;(1) конечный фрагмент зацикливания громкости в сэмпле
P.ECYN=12		;(1) конечный фрагмент зацикливания шума в сэмпле
P.ECYT=13		;(1) конечный фрагмент зацикливания тона в сэмпле
P.TSLV=14		;(1) длительность звучания текущего фрагмента громкости
P.TSLN=15		;(1) длительность звучания текущего фрагмента шума
P.DVLV=16		;(2) приращение при плавном изменении громкости
P.CVLV=20		;(2) текущее значение громкости в ст.байте
P.RVLV=22		;(2) конечное значение громкости в ст.байте
P.DVLN=24		;(2) приращение при плавном изменении шума
P.CVLN=26		;(2) текущее значение шума в ст.байте
P.RVLN=30		;(2) конечное значение шума в ст.байте
P.DVLT=32		;(4) приращение при плавном изменении тона
P.CVLT=36		;(4) текущее значение тона в ст.слове
P.PAUS=42		;(1) флаг: 0 - нота, ^0 - пауза
P.NOTN=43		;(1) номер текущей ноты
P.TSLT=44		;(1) длительность звучания текущего фрагмента тона
;		45		свободно
P.NDLT=46		;(1) длительность звучания первого фрагмента
P.VOLP=47		;(1) признак волпака (<0 - волпак, >=0 - нет)
P.RVLT=50		;(2) конечное значение тона
P.ACHN=52		;(2) адрес в голосе текущего паттерна
P.ENCN=54		;(1) текущее количество пустых нот
P.ENNR=55		;(1) количество пустых нот
P.VPER=56		;(1) период волнового пакета
P.VVAL=57		;(1) приращение громкости
P.L1FR=60		;(2) текущая длительность звучания первого фрагмента
;константы в блоках параметров канала, у каждого канала - своя константа
P.CNOC=62		;(1) 0,2,4	;адрес регистра тона
P.CNMT=63		;(1) 1,2,4	;маска тона в миксере
P.CNMN=64		;(1) 10,20,40	;маска шума в миксере
P.CNOA=65		;(1) 10,11,12	;адрес регистра амплитуды
;если сместить константы в конец, начинаются необъяснимые искажения звука. почему, так и не ясно.

;регистры AY
Y.CLKA=0
Y.CLKB=2
Y.CLKC=4
Y.NOIS=6
Y.MIXR=7
Y.AMPA=10
Y.AMPB=11
Y.AMPC=12
Y.PERD=13
Y.VPCK=15

AYLEN=16	;длина области данных регистров AY
CHPLN=70	;длина области данных канала

; Модуль воспроизведения скомпилированного SND
SNDPLY:	mov		#102, @#100
		mov		#2, @#102
		mov		#5400, @#177662

PLAY:	call	INITPL		; вызов на просто воспроизведение из меню PLAY
LOOP$:	call	PLAY$
		wait
		tstb	@#177660
		bpl		LOOP$
		reset
		return
; ───────────────────────────────────────────────────────────────────────────
		jmp		INITPL

; ███████████████ S U B R O U T I N E ███████████████████████████████████████


PLAY$:	mov		R0, -(SP)
		mov		R1, -(SP)
		mov		R2, -(SP)
		mov		R3, -(SP)
		mov		R4, -(SP)
		mov		R5, -(SP)
		call	EXPNOT		; формируем квант данных для передачи в	AY
		add		#15, R3
		mov		#363, R2
		mov		#177714, R5	; и заполняем регистры AY
1$:		mov		R2, (R5)
		movb	-(R3), R0
		comb	R0
		movb	R0, (R5)
		incb	R2
		bmi		1$
		mov		(SP)+,R5
		mov		(SP)+,R4
		mov		(SP)+,R3
		mov		(SP)+,R2
		mov		(SP)+,R1
		mov		(SP)+,R0
		return


; ███████████████ S U B R O U T I N E ███████████████████████████████████████

; деление
; вход:	 R1 - делимое
;		 R2 - делитель
; выход: R1 - целая часть
;		 R3 - остаток
; портит R0
DIVDE$:	clr		R3
		mov		#20, R0
2$:		asl		R1
		rol		R3
		cmp		R3, R2
		blo		1$
		sub		R2, R3
		inc		R1
1$:		sob		R0, 2$
		bic		#140000, R1
		tst		R4
RET1$:	return

; ───────────────────────────────────────────────────────────────────────────
;чтение очередной ноты в канале
;R5 - адрес блока параметров канала
;R4 - адрес в массиве нот канала
;остальные регистры - рабочие

GETNOT:	movb	(PC)+, (R5)		;темп на место
TEMP:	.word	6
		decb	P.ENCN(R5)		;пустые ноты в канале закончились?
		bpl		RET1$			;нет ещё - продолжаем звучать прошлой нотой
NEXT3$:	mov		P.ACHN(R5), R4	;текущий адрес нот в канале
		clrb	P.VOLP(R5)		; волпака пока нет
NEXT2$:	movb	P.NDLT(R5), P.L1FR(R5) ;обновляем длительность звучания первого фрагмента
NEXT1$:	movb	(R4)+, R1		;берём очередной байт
		cmpb	R1, (PC)+		;конец раздела?
ENDPTN:	.word	377
		bne		0NXT1$			;нет
LOOP1$:	mov		CURATR, R0		;да - текущий адрес в таблице разделов
		tstb	(R0)			;номер следующего раздела
		bpl		0NXT2$			;разделы закончились? нет - переход
		mov		(PC)+, (PC)+	;да - тогда - начнём сначала
BGNATR:	.word	0				;начало списка разделов
CURATR:	.word	0				;текущий адрес в таблице разделов
		br		LOOP1$
; ───────────────────────────────────────────────────────────────────────────
;переход к следующему разделу из таблицы
0NXT2$:	clr		R1
		bisb	(R0)+, R1		;номер нового раздела
		movb	(R0)+, HEIGHT	;и высота нового раздела
		mov		R0, CURATR		;адрес в таблице разделов сохраним на месте
		asl		R1				;┐
		mov		R1, R0			;│ умножаем номер раздела на 6
		asl		R1				;│
		add		R1, R0			;┘
		mov		(PC)+, R1		;адрес начала смещений до нотных массивов
BGNONA:	.word	0				;начало таблицы смещений до нотных массивов
		add		R1, R0
		add		(R0)+, R1
		mov		R1, P.ACHN(R5)	;адрес голоса A
		add		(R0)+, R1
		mov		R1, CHPLN+P.ACHN(R5)	;адрес голоса B
		add		(R0), R1
		mov		R1, CHPLN+CHPLN+P.ACHN(R5) ;адрес голоса C
		br		NEXT3$
; ───────────────────────────────────────────────────────────────────────────
;обработка следующей ноты раздела.
0NXT1$:	mov		R5, R3
		tstb	R1				;пауза?
		beq		0PAUS$			;да - обработать
		cmpb	#376, R1		;отсутствует нота?
		bne		1$
		;обработка отсутствия ноты
		clr		P.L1FR(R5)
		br		0NXT4$
; ───────────────────────────────────────────────────────────────────────────

1$:		decb	R1				;смотрим, что за нота
		cmpb	R1, #140		;Это просто нота?
		bhis	2$				;нет
		;обработка нот.
		add		(PC)+, R1		;корректируем высоту тона
HEIGHT:	.word	0				;высота проигрыша всего раздела
		movb	R1, P.NOTN(R5)
		inc		R3
		movb	#-1, (R3)+		;P.TPSV
		mov		#-1, (R3)		;P.TPSN, P.TPST
		clrb	P.PAUS(R5)		;сбрасываем флаг паузы
		br		0NXT3$
; ───────────────────────────────────────────────────────────────────────────

2$:		mov		R1, R0
		bic		#177760, R1		;сделаем тут значение переменной
		cmpb	R0, #160
		bhis	3$
		;обработка номеров сэмплов
		swab	R1				;┐
		asr		R1				;│ умножим номер сэмпла на 100
		asr		R1				;┘
		add		(PC)+, R1		;прибавим адрес начала сэмплов
BGNASA:	.word	0				;это начало сэмплов
		bit		(R3)+, (R3)+
		mov		R1, (R3)+		;адрес сэмпла -> P.ASMP(R5)
		movb	(R1)+, (R3)+	;начало зацикливания для громкости -> P.BCYV(R5)
		movb	7(R1), (R3)+	;начало зацикливания для шума -> P.BCYN(R5)
		movb	1(R1), (R3)+	;начало зацикливания для тона -> P.BCYT(R5)
		movb	(R1)+, (R3)+	;конец зацикливания для громкости -> P.ECYV(R5)
		movb	7(R1), (R3)+	;конец зацикливания для шума -> P.ECYN(R5)
		movb	1(R1), (R3)		;конец зацикливания для тона -> P.ECYT(R5)
		bicb	#200, (R3)		;bic #100000, P.ECYN(R5)
		br		NEXT1$
; ───────────────────────────────────────────────────────────────────────────

3$:		tstb	R0
		bmi		4$
		;обработка громкостей
		mov		#17, R2
		sub		R1, R2
		movb	R2, P.VVAL(R5)	;громкость - это 17 - value
		br		NEXT1$
; ───────────────────────────────────────────────────────────────────────────

4$:		cmpb	R0, #220
		bhis	5$
		;обработка длительностей ноты
		asl		R1
		movb	R1, P.NDLT(R5)
		movb	R1, P.L1FR(R5)
		br		NEXT1$
; ───────────────────────────────────────────────────────────────────────────

5$:		cmpb	R0, #240
		bhis	6$
		;обработка формы пакета
		movb	(R4)+, P.VPER(R5)	;период пакета
		movb	R0, P.VOLP(R5)		;если волпак, то должен быть <0
		mov		#362, @#177714
		comb	R1
		movb	R1, @#177714		;устанавливаем форму пакета
		br		NEXT1$
; ───────────────────────────────────────────────────────────────────────────

6$:		sub		#240, R0
		movb	R0, P.ENNR(R5)		;количество пустых нот
		br		NEXT1$
; ───────────────────────────────────────────────────────────────────────────
;обработка паузы
0PAUS$:	clr		P.L1FR(R5)
		tstb	P.PAUS(R5)		;пауза есть?
		bne		0NXT4$			;да
		decb	P.PAUS(R5)		;нет - установим признак паузы
		inc		R3
		movb	P.ECYV(R5), (R3)+	;P.ECYV(R5) -> P.TPSV(R5)
		movb	P.ECYN(R5), (R3)+	;P.ECYN(R5) -> P.TPSN(R5)
		movb	P.ECYT(R5), (R3)+	;P.ECYT(R5) -> P.TPST(R5)
0NXT3$:	clr		P.TSLV(R5)
		clrb	P.TSLT(R5)
0NXT4$:	mov		R4, P.ACHN(R5)
		movb	P.ENNR(R5), P.ENCN(R5)
		return

; ███████████████ S U B R O U T I N E ███████████████████████████████████████

;Вход: R0 - номер текущего фрагмента в сэмпле 0..14
;Выход: R4 - маска
;		R0 - смещение до фрагмента в сэмпле
;		R3 - адрес начала сэмпла
GETMSK:	mov		#1, R4
		mov		R0, R3
		beq		1$
2$:		asl		R4
		sob		R3, 2$
1$:
GETASM:	mov		P.ASMP(R5), R3
		add		R3, R0
		return
; End of function GETMSK

; ███████████████ S U B R O U T I N E ███████████████████████████████████████

;работа с длительностями звучания, сюда попадает длит*16
;результат:
;0 -0; 1 -1; 2 -5; 3 -9; N -(N*4-3)
SETDLT:	asr		R2
		asr		R2
		beq		1$
		sub		#3, R2
1$:		add		P.L1FR(R5), R2
		return

; ███████████████ S U B R O U T I N E ███████████████████████████████████████

;вход:	R0 - маска для миксера.
;		R3 - маска тона / шума в сэмпле
;		R4 - бит в маске для текущего фрагмента сэмпла
;		R2 - длительность * 16 текущего фрагмента
;		R1 - громкость текущего фрагмента
SETMXR:	bicb	R0, AYREG+Y.MIXR
		bit		R4, R3
		bne		1$
		bisb	R0, AYREG+Y.MIXR
1$:		call	SETDLT

		movb	R1, P.RVLV+1(R5)
		tst		R3				;огибающую изменять плавно?
		bmi		2$
		movb	R1, P.CVLV+1(R5)	;нет
		return
; ───────────────────────────────────────────────────────────────────────────

2$:		movb	P.CVLV+1(R5), R0	;да - плавное изменение
		clr		R4
		sub		R0, R1
		bpl		3$
		neg		R1
		inc		R4
3$:		swab	R1
		call	DIVDE$		; деление
							; вход:	 R1 - делимое
							;		 R2 - делитель
							; выход: R1 - целая часть
							;		 R3 - остаток
		beq		4$
		neg		R1
4$:		mov		R1, P.DVLV(R5)
		return

; ███████████████ S U B R O U T I N E ███████████████████████████████████████

;Вход: за командой - смещение в блоке параметров.
; 1 - для громкости
; 2 - для шума
; 3 - для тона
;выход: R0 - номер текущего фрагмента в сэмпле 0..13.
GETFRS:	mov		(R3)+,R4
		add		R5, R4
		incb	(R4)		;увеличиваем текущий фрагмент громкости/шума/тона в сэмпле
		movb	(R4), R0	;вот его значение
		tstb	P.PAUS(R5)	;пауза?
		bne		1$			;да
		cmpb	R0, 10(R4)	;нет - достигли конца зацикливания?
		blos	1$			;нет ещё
		movb	5(R4), R0	;да - берём начальный фрагмент
		movb	R0, (R4)	;и его в позицию текущего
1$:		cmpb	R0, #13.	;конец сэмпла?
		blo		2$			;нет.
		decb	(R4)		;да - не дадим выйти за пределы.
2$:		rts		R3

; ───────────────────────────────────────────────────────────────────────────
		.ascii "(c)GID prod.*CAROLINE*"

; ███████████████ S U B R O U T I N E ███████████████████████████████████████

; формируем квант данных для передачи в AY
EXPNOT:	.addr	R5, VARPRT
		clrb	AYREG+Y.VPCK
		call	2(PC)
		mov		PC, -(SP)
		decb	(R5)		;тики кончились?
		bgt		0$			;нет ещё - звучим текущую ноту
		call	GETNOT		;да - берём новую ноту
0$:		decb	P.TSLV(R5)	;текущий фрагмент громкости отзвучал?
		bpl		1$			;нет ещё - продолжаем
		;достаём из сэмпла новую громкость и её длительность
		clr		P.DVLV(R5)
		jsr		R3, GETFRS	;получим номер текущего фрагмента в сэмпле
		.word	P.TPSV		;для громкости
		blo		2$			;переход, если номер текущего фрагмента в сэмпле < 13. ?
		clr		P.CVLV(R5)	;если >= 13.
		br		1$
; ───────────────────────────────────────────────────────────────────────────

2$:		call	GETMSK
		clr		R1
		bisb	46(R0), R1	;значение текущего фрагмента громкости
		mov		R1, R2
		bic		#360, R1	;значение громкости
		bic		R1, R2		;длительность фрагмента громкости * 16.
		mov		4(R3), R3	;маска в огибающей громкости
		movb	P.CNMT(R5), R0 ;маска в микшере для громкости
		call	SETMXR
		movb	R2, P.TSLV(R5)

1$:		decb	P.TSLN(R5)	;текущий фрагмент шума отзвучал?
		bpl		3$			;нет ещё - продолжаем
		;достаём из сэмпла новый уровень шума и его длительность
		clr		P.DVLN(R5)
		jsr		R3, GETFRS	;получим номер текущего фрагмента в сэмпле
		.word	P.TPSN		;для шума
		bhis	3$			;переход, если номер текущего фрагмента в сэмпле >= 13.
		call	GETMSK		;если номер текущего фрагмента в сэмпле < 13.
		clr		R1
		bisb	63(R0), R1	;значение текущего фрагмента шума
		mov		R1, R2
		bic		#340, R1	;значение громкости
		bic		R1, R2		;длительность фрагмента шума * 16.
		bit		R4, 12(R3)	;бит длительности, который не полез в байт есть?
		beq		4$			;нету
		add		#20, R2		;есть - поместим на место - это младший бит был.
4$:		mov		6(R3), R3	;маска в огибающей шума
		movb	P.CNMN(R5), R0 ;маска в микшере для шума
		mov		R5, -(SP)
		add		#P.DVLN-P.DVLV, R5
		call	SETMXR		;то же самое, только для шума.
		mov		(SP)+, R5
		movb	R2, P.TSLN(R5)

3$:		decb	P.TSLT(R5)	;текущий фрагмент тона отзвучал?
		bpl		5$			;нет ещё - продолжаем
		;достаём из сэмпла новый тон и его длительность
		clr		P.DVLT(R5)
		clr		P.DVLT+2(R5)
		jsr		R3, GETFRS	;получим номер текущего фрагмента в сэмпле
		.word	P.TPST		;для тона
		bhis	5$			;переход, если номер текущего фрагмента в сэмпле >= 13.
		asl		R0			;если номер текущего фрагмента в сэмпле < 13.
		call	GETASM		;в R3 адрес сэмпла, он ещё пригодится
							;в R0 смещение до фрагмента
		mov		14(R0), R2	;значение фрагмента огибающей тона
		mov		R2, R1
		mov		#2000, R0
		bic		#176000, R1	;значение тона
		bit		R0, R2		;минус?
		beq		6$
		bis		#176000, R1	;да
6$:		movb	P.NOTN(R5), R4
		asl		R0
		bit		R0, R2		;изменение в полутонах?
		beq		7$			;нет
		add		R1, R4		;да - просто прибавим
		bmi		8$			;и проконтролируем
		cmp		R4, #140	;чтоб не вылезло
		blo		7$
		mov		#137, R4	;за пределы
		br		7$
; ───────────────────────────────────────────────────────────────────────────

8$:		clr		R4
7$:		asl		R4
		add		PC, R4
		add		(PC)+, R4
		.word	@NTCLKP+2
		mov		(R4), R4	;получим частоту
		bit		R0, R2		;снова проверим: изменение в полутонах?
		bne		9$			;да пойдём туда
		sub		R1, R4		;отнимем значение от частоты
		bpl		9$
		clr		R4
9$:		mov		R4, R1
		swab	R2
		bic		#177417, R2	;получим длительность * 16
		call	SETDLT
		movb	R2, P.TSLT(R5)
		mov		R1, P.RVLT(R5)
		tst		2(R3)		;ноту менять плавно?
		bmi		10$
		mov		R1, P.CVLT+2(R5)	;нет
		br		5$
; ───────────────────────────────────────────────────────────────────────────

10$:	clr		R4			;плавное изменение ноты
		sub		P.CVLT+2(R5), R1
		bpl		11$
		neg		R1
		inc		R4
11$:	call	DIVDE$		; деление
							; вход:	 R1 - делимое
							;		 R2 - делитель
							; выход: R1 - целая часть
							;		 R3 - остаток
		beq		12$
		neg		R1
		dec		R1
12$:	mov		R1, P.DVLT+2(R5)
		mov		#10, R0
		clr		R1
14$:	asl		R1
		asl		R3
		cmp		R3, R2
		blo		13$
		sub		R2, R3
		inc		R1
13$:	sob		R0, 14$
		tst		R4
		beq		15$
		neg		R1
15$:	movb	R1, P.DVLT+1(R5)
		;заполняем регистры AY
5$:		.addr	R3, AYREG		;начало снимка памяти для сопра
		mov		R5, R0
		add		#P.DVLV, R0
		add		(R0)+, (R0)+	;P.CVLV += P.DVLV, прибавляем к текущей амплитуде значение для плавного изменения
		mov		R0, R2			;P.RVLV
		tstb	P.TSLV(R5)		;а надо ли плавно изменять?
		bne		16$
		mov		(R0), -(R0)		;P.CVLV = P.RVLV, нет - сразу подставляем конечный результат
16$:	movb	P.CNOA(R5), R4	;смещение до регистра амплитуды
		add		R3, R4			;адрес регистра амплитуды
		movb	P.CVLV+1(R5), R1	;текущее значение громкости
		tstb	P.VOLP(R5)		;волпак есть?
		bpl		17$				;нет
		tstb	R1				;что там с амплитудой?
		beq		18$				;нету
		movb	#20, (R4)		;ставим признак волпака
		bisb	P.CNMN(R5), Y.MIXR(R3)	;запрещаем шум - вот этого в оригинале нету. И это единственное различие
		movb	P.VPER(R5), Y.PERD(R3)
		br		19$
; ───────────────────────────────────────────────────────────────────────────

17$:	movb	P.VVAL(R5), R0	;приращение громкости
		sub		R0, R1
		bpl		20$
18$:	clr		R1
20$:	movb	R1, (R4)		;формируем амплитуду в канале
19$:	tst		(R2)+			;P.DVLN
		add		(R2)+, (R2)+	;P.CVLN += P.DVLN, прибавляем к текущему шуму значение для плавного изменения
		tstb	P.TSLN(R5)		;а надо ли плавно изменять?
		bne		21$
		mov		(R2), -(R2)		;P.CVLN = P.RVLN, нет - сразу подставляем конечный результат
21$:	bitb	P.CNMN(R5), Y.MIXR(R3)	;шум запрещён?
		bne		22$				;да - пропускаем
		movb	P.CVLN+1(R5), Y.NOIS(R3)

22$:	mov		R5, R2
		add		#P.CVLT, R2		;P.CVLT
		add		P.DVLT(R5), (R2)+	;P.CVLT += P.DVLT
		adc		(R2)
		add		P.DVLT+2(R5), (R2)
		tstb	P.TSLT(R5)		;а надо ли плавно изменять?
		bne		23$
		mov		P.RVLT(R5), (R2)	;нет - сразу подставляем конечный результат
23$:	movb	P.CNOC(R5), R4	;смещение до регистра тона
		add		R3, R4			;адрес регистра тона
		mov		(R2), (R4)		;формируем тон
LGONX:	clr		P.L1FR(R5)
		add		#CHPLN, R5
		return


; ███████████████ S U B R O U T I N E ███████████████████████████████████████

INITPL:	reset
		movb	#377, AYREG+Y.MIXR	;глушим всё
		.addr	R0, ADATA		;начало области темпа и смещений
		mov		R0, R4
		mov		(R0)+, R5
		movb	R5, TEMP
		mov		(R0)+, R5
		add		R4, R5
		mov		R5, BGNATR		;это начало
		mov		R5, CURATR		;списка разделов
		mov		(R0)+, R5
		add		R4, R5
		mov		R5, BGNONA		;начало таблицы смещений до нотных массивов
		mov		R0, BGNASA		;начало сэмплов
		.addr	R5, VARPRT
		.addr	R4, ENDPTN
		call	2(PC)
		mov		PC, -(SP)
		clr		(R5)
		mov		R0, P.ASMP(R5)
		mov		R4, P.ACHN(R5)
		clr		P.ENCN(R5)
		mov		#20, P.VVAL(R5)
		br		LGONX

; ───────────────────────────────────────────────────────────────────────────
		.word 0,0,0	;надо уложиться в 02220 байтов
; таблица нот
NTCLKP:	.word 7370, 7020, 6540, 6200, 5730, 5450, 5210, 4760, 4540, 4340, 4130, 3740
		.word 3574, 3410, 3260, 3100, 2754, 2624, 2504, 2370, 2260, 2160, 2054, 1760
		.word 1676, 1604, 1530, 1440, 1366, 1312, 1242, 1174, 1130, 1070, 1026, 770
		.word 737, 702, 654, 620, 573, 545, 521, 476, 454, 434, 413, 374
		.word 357, 341, 326, 310, 275, 262, 250, 237, 226, 216, 205, 176
		.word 167, 160, 153, 144, 136, 131, 124, 117, 113, 107, 102, 77
		.word 73, 70, 65, 62, 57, 54, 52, 47, 45, 43, 41, 37
		.word 35, 34, 32, 31, 27, 26, 25, 23, 22, 21, 20, 17
; три блока по 70 байтов на канал
VARPRT:	.word	177400,177777,0,7417,7417,7417
		.blkb	46	;блок параметров канала A
		.byte	Y.CLKA, 1, 10, Y.AMPA, 0, 0	;константы в блоке параметров
		.word	177400,177777,0,7417,7417,7417
		.blkb	46	;блок параметров канала B
		.byte	Y.CLKB, 2, 20, Y.AMPB, 0, 0	;константы в блоке параметров
		.word	177400,177777,0,7417,7417,7417
		.blkb	46	;блок параметров канала C
		.byte	Y.CLKC, 4, 40, Y.AMPC, 0, 0	;константы в блоке параметров
;область регистров AY 016 штук
AYREG:	.blkb	AYLEN
;начало	области	данных(мелодии) в массиве переменных
ADATA:	.word	0

		.END
