ZXNet эхоконференция «zxnet.soft»
тема: Исправление плеера Pro Tracker 3.51
от: Ivan Roshin
кому: All
дата: 11 Apr 2001
Hello, All!
Как исправить плеер Pro Tracker 3.51, чтобы команды 9 и A,
изменяющие частоту огибающей, обрабатывались правильно.
В исходном тексте плеера имеется такой фрагмент:
;--- install_E ---
E_ins0 JR Ei_form
Esl_ids LD HL,0 ;stp_sld_env
LD (Esl_sds+1),HL
Esl_ist LD A,0 ;stp_sld_p
LD (Esl_stp+1),A <──────────────────────────── (1)
LD (Esl_sts+1),A
LD A,#18
LD (E_ins0),A
Ei_form LD A,0 ;env_form
LD (E_form+1),A
AND A
JR Z,temp
Ei_frq LD HL,0 ;env_frq
LD (E_frq+1),HL
XOR A
LD L,A
LD H,A
LD (Ei_form+1),A
LD (Esl_stp+1),A <──────────────────────────── (2)
LD (Esl_frq+1),HL
Что мы видим? (1) - в переменную по адресу Esl_stp+1
помещается один из параметров команды 9 или A. Далее, если эта
команда стояла на ноте, использующей огибающую (т.е. Ei_form+1
не 0), то выполняется фрагмент программы, содержащий (2) -
обнуление переменной Esl_stp+1. Параметр команды обнуляется -
и в результате изменения частоты огибающей не будет.
Как исправить? Рецепт, который я приводил в описании
прошлой версии BestView (обнуление байта по смещению #4C1 от
начала плеера), фактически отменял команду (2). При этом
команды 9 и A начинали работать, но - не заканчивали изменять
частоту, когда встречалась следующая нота, использующая
огибающую. Так что все равно некоторые модули звучали
неправильно.
Для окончательного исправления фрагмент плеера надо
переделать так:
;--- install_E ---
E_ins0 JR Ei_form
Esl_ids LD HL,0 ;stp_sld_env
LD (Esl_sds+1),HL
Esl_ist LD A,0 ;stp_sld_p
LD (Esl_stp+1),A
LD (Esl_sts+1),A
LD A,(Ei_form+1)
AND A
JR Z,BUG_F3
LD A,#3E
LD (BUG_F2),A
BUG_F3 LD A,#18
LD (E_ins0),A
Ei_form LD A,0 ;env_form
LD (E_form+1),A
AND A
JR Z,temp
Ei_frq LD HL,0 ;env_frq
LD (E_frq+1),HL
XOR A
LD L,A
LD H,A
LD (Esl_frq+1),HL
LD (Ei_form+1),A
BUG_F2 JR BUG_F1
LD A,#18
LD (BUG_F2),A
JR temp
BUG_F1 LD (Esl_stp+1),A
Обратите внимание, что длина плеера при этом немного
увеличится.
С уважением, Иван Рощин.
|