|
Echo
#02
30 ноября 1996 |
|
Музыка - Форматы компилированных модулей известных музыкальных редакторов. Pro Tracker v2.101 by GDC, Стандартный проигрыватель.

(C) VfNG/NEW
Многим в процессе написаний эффектов не хватало где-нибудь
пары тысяч тактов. Обычно в таких случаях первым делом пытаются
оптимизировать проигрыватель музыки. Думаю, что не лишним будет
опубликовать форматы компилированых модулей самых известных
музыкальных редакторов. Это немного облегчит вам жизнь и сделает
более простым ковыряние в старом PLAYER'е.
Начнем, пожалуй, с PRO TRACKER 2.101 by GDC. В следующий раз,
может быть, опубликуем формат музыки STP PRO.
Tерминология:
QUARK: те элементы, из которых состоят SAMPLES, ORNAMENTS.
QUANT: число QUARKS в каждом элементе PATTERN. Фактически-ско-
рость проигрывания;
PATTERN: куплет;
POSITION LIST: порядок проигрывания PATTERNS;
POSITION: позиция в POSITION LIST;
Формат компилированого модуля:
+0
DELAY-число QUARKS, за которое проигрывается 1 QUANT;
+1
MUS_LEN-число позиций в мелодии;
+2
LOOP TO POSITION-номер позиции, в которую будет производиться
зацикливание по проигрывании всей мелодии (0-#FF);
+3,64
SAMP_A-смещения от +0 до каждого из 32-х SAMPLE. SAMPLE с но-
мером 0-не описан. Его номер используется для заглушения канала.
+67,32
ORN_A-аналогично SAMP_A для 16 орнаментов. Орнамент номер
0-отсутствие орнамента.
+99,2
PAT_OFFSET-смещение от +0 до первого описателя PATTERN'ов
PAT.
+101,30
NAME-имя музыки в ASCII.
+131
POSITION LIST-список позиций-номера PATTERN для каждой пози-
ции. Окончание таблицы-#FF.
+?
PAT-описатели PATTERN'ов. Kaждый PATTERN состоит из 3-х кана-
лов. В этой таблице-смещения от +0 до описателей каналов каждого
PATTERN. Таким образом по 6 байт/PATTERN. Окончание табли-
цы-#0000.
+?
CHAN-описатели каналов. Канал представлен в виде списка бай-
тов, которые анализируются следующим образом:
LOOP LD A,(DE)
INC DE
ADD A,#20
JR C,L1
ADD A,#60
JR C,L2
ADD A,#10
JR C,L3
ADD A,#10
JR C,L4
ADD A,#40
JR C,L5
ADD A,#10
JR C,L6
INC A
JR Z,L7
INC A
JR Z,L8
INC A
JR Z,L9
INC A
JR NZ,L10
L11 Отключение команд и переход на LOOP.
L10 Извлечь следующий байт-в нем значение прибавления к частоте
NOISE. Затем на LOOP.
L9 Извлечь три байта. В 1-м значение PORT, т.е. то число, кото-
рое будет прибавляться к текущей частоте ноты. Следует учесть,
что значение частоты самой высокой ноты самое маленькое, а самой
низкой-самое большое, значит: положит. 128-255, отриц. 0-127. Во
2-м и 3-м байтах-разница в значениях частоты новой (той на кото-
рой вызван PORT) и предидущей ноты. Существует ошибка компилято-
ра, который неверно определяет это значение, если новая нота
стоит в начале PATTERN. Команду следует выключить, когда сумма
прибавлений из +1 превысит значение +2,+3. Переход на LOOP.
L8 Извлечь 1 байт. В нем значение GLISSADE. Знаки-аналогично
PORT. Затем переход на LOOP.
L7 Извлечь 1 байт. В нем значение для DELAY (скорость проигрыва-
ния). Затем переход на LOOP.
L6 В А-громкость (0-F). Это значение умножается на 16 и прибав-
ляется к началу таблицы TABL1. К полученому значению следует от-
носиться как к началу 16-байтовой таблицы, где содержаться зна-
чения для регистров амплитуды сопроцессора для каждого значения
извлекаемого из SAMPLE. Затем переход на LOOP.
L5 В А-сколько QUANTS не надо проводить анализ канала, т.е.
расстояние в QUANTS между очередными изменениями параметров ка-
нала. Затем на LOOP.
L4 В А-номер орнамента. Если равен 0, то отсутствие орнамента.
Переход на LOOP.
L3 Если А=0 то выход. Если 0<А<F, то установка типа огибающей,
затем извлечение 2-х следующих байт с периодом огибающей, пере-
ход на LOOP. Ecли А=F, то отключение огибающих, переход на LOOP.
L2 В А-номер ноты. Всего 8 октав по 12 нот, итого 96 нот. Значе-
ния частоы для каждой из нот в таблице TABL2 (по 2 байта/кажда-
я). Переход на LOOP.
L1 В А-номер SAMPLE. Eсли=0, то отключение канала, выход. Иначе
установка номера SAMPLE и переход на LOOP.
+?
SAMPLES-описатели SAMPLES. Каждый SAMPLE состоит из:
++0 Число QUARKS в SAMPLE.
++1 Номер QUARK в SAMPLE, на который производиться зациклива-
ние по окончании SAMPLE.
++2 Описатели QUARKS по 3 байта каждый:
+++0
Биты 7-3-частота NOISE (0-31);
Бит 2-знак вибратто (1="-", 0="+");
Бит 1-маска TONE;
Бит 0-маска NOISE.
+++1
Биты 7-4-амплитуда (0-15);
Биты 3-0-старшая часть значения частотного вибратто.
+++2
Биты 7-0-младшая часть значения частотного вибратто.
+?
ORNAMENTS-описатели орнаментов. Они состоят из:
++0-Длина орнамента в QUARKS;
++1-Номер QUARK в орнаменте, на который надо перейти по окон-
чании ORNAMENT;
++2-Отклонения от текущего значения ноты в полутонах. Значе-
ния 0-63. Старший бит-знаковый:0='+',1='-'.
В описании могут быть отдельные неточности, которые нетрудно
обнаружить и скорректировать.
Теперь о том, как вообще происходит проигрывание музыки. Бе-
рется значение DELAY и записывается в спец. переменную. При каж-
дом вызове проигрывателя это значение уменьшается на 1. Если оно
больше 2-х, то параметры каналов не меняются. Если 2, то прове-
ряется на конец канал. Если конец-то обрабатывается следующая
позиция, устанавливаются новые значения в переменные, указываю-
щие на текущие позиции в каналах. Обрабатывается канал А. Если
1, то обрабатывается канал B. Если 0, то обрабатывается канал C
и полученные данные в результате обработки всех трех каналов
(номера SAMPLES, ORNAMENTS, etc...) устанавливаются на проигры-
вание, переменная снова получает значение DELAY.
***** ПРИЛОЖЕНИЕ *****
;Стандартный проигрыватель. Здесь же и таблички.
;---------------------------------------------------------------
LD HL,MUSIC ;Адрес компилированного модуля
JP INIT ;Инициализация
JP PLAY ;Проигрывание
INIT DI
PUSH HL
LD (LF84D+1),HL
PUSH HL
LD A,(HL)
LD (LFBE0+1),A
LD (LFAB2+1),A
INC HL
INC HL
LD A,(HL)
INC HL
LD (LF7F0+1),HL
LD DE,#0020
ADD HL,DE
ADD HL,DE
LD (LF803+1),HL
ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD BC,#001E
ADD HL,BC
LD (LF83A+1),HL
LD C,A
ADD HL,BC
LD (LF82F+1),HL
POP HL
ADD HL,DE
LD (LF848+1),HL
LD HL,LF74B
LD DE,LF74C
LD BC,#000D
LD (HL),B
LDIR
XOR A
LD (LF748),A
LD (LF749),A
LD (LF74A),A
LD (LFB38+1),A
LD (LFB9D+1),A
LD (LF8DA+1),A
LD (LF959+1),A
LD (LF9DB+1),A
LD (LFB33+1),A
LD (LFB98+1),A
LD (LF928+1),A
LD (LF9AA+1),A
LD (LFA2D+1),A
LD B,A
CPL
LD (LF8AE+1),A
LD (LF92D+1),A
LD (LF9AF+1),A
LD A,#2F
LD (LFB82),A
LD (LFB1D),A
LD HL,TABL1_F
LD (LFB3D+1),HL
LD (LFBA2+1),HL
LD (LF923+1),HL
LD (LF9A5+1),HL
LD (LFA28+1),HL
CALL LF836
LD (LFACA+1),DE
POP BC
LD (LF816+1),SP
LF7F0 LD SP,#0000
LD DE,SMP_A
LD A,#20
LF7F8 POP HL
ADD HL,BC
EX DE,HL
LD (HL),E
INC HL
LD (HL),D
INC HL
EX DE,HL
DEC A
JR NZ,LF7F8
LF803 LD SP,#0000
LD DE,ORN_A
LD A,#10
LF80B POP HL
ADD HL,BC
EX DE,HL
LD (HL),E
INC HL
LD (HL),D
INC HL
EX DE,HL
DEC A
JR NZ,LF80B
LF816 LD SP,#0000
LD HL,(ORN_A)
LD (LFB4D+1),HL
LD (LFBB2+1),HL
LD (LF8B9+1),HL
LD (LF938+1),HL
LD (LF9BA+1),HL
CALL INITVOL
JP LFA32
;---------------------------------------------------------------
;Продолжение проигрывателя
;---------------------------------------------------------------
PLAY DI
XOR A
LD B,A
EX AF,AF'
LFAB2 LD A,#03
DEC A
LD (LFAB2+1),A
JR Z,LFAF8
DEC A
JR Z,LFADF
DEC A
JP NZ,LF8AE
LD HL,LF748
DEC (HL)
JP P,LF8AE
LFAC8 LD (HL),#00
LFACA LD DE,#0000
LD A,(DE)
AND A
CALL Z,LF836
CALL LFC74
LD (LFACA+1),DE
LD (LFB0C),A
JP LF8AE
LFADF LD HL,LF749
DEC (HL)
JP P,LF8AE
LFAE6 LD (HL),#00
LFAE8 LD DE,#0000
CALL LFD98
LD (LFAE8+1),DE
LD (LFB71),A
JP LF8AE
LFAF8 LD HL,LF74A
DEC (HL)
JP P,LFB0B
LFAFF LD (HL),#00
LFB01 LD DE,#0000
CALL LFE9F
LD (LFB01+1),DE
LFB0B XOR A
LFB0C NOP
JR NC,LFB2D
LD (LFB0C),A
LD (LF8E7+2),A
LD H,A
LD L,A
LD (LF8B3+1),HL
LD (LF8DF+1),HL
LFB1D CPL
LD (LF8AE+1),A
LFB21 LD A,#00
LD (LF8D8+1),A
LFB26 LD HL,#0000
LD (LF8B6+1),HL
XOR A
LFB2D NOP
JR NC,LFB44
LD (LFB2D),A
LFB33 LD A,#00
LD (LF928+1),A
LFB38 LD A,#00
LD (LF8DA+1),A
LFB3D LD HL,#0000
LD (LF923+1),HL
XOR A
LFB44 NOP
JR NC,LFB54
LD (LF8B3+1),A
LD (LFB44),A
LFB4D LD HL,#0000
LD (LF8B9+1),HL
XOR A
LFB54 NOP
JR NC,LFB71
LD (LFB54),A
LFB5A LD A,#00
LD (LF902+1),A
LFB5F LD HL,#0000
LD (LF8F1+1),HL
LFB65 LD A,#00
LD (LF916+1),A
LFB6A LD HL,#0000
LD (LF8E7+1),HL
XOR A
LFB71 NOP
JR NC,LFB92
LD H,A
LD L,A
LD (LF966+2),A
LD (LF95E+1),HL
LD (LF932+1),HL
LD (LFB71),A
LFB82 CPL
LD (LF92D+1),A
LFB86 LD A,#00
LD (LF957+1),A
LFB8B LD HL,#0000
LD (LF935+1),HL
XOR A
LFB92 NOP
JR NC,LFBA9
LD (LFB92),A
LFB98 LD A,#00
LD (LF9AA+1),A
LFB9D LD A,#00
LD (LF959+1),A
LFBA2 LD HL,#0000
LD (LF9A5+1),HL
XOR A
LFBA9 NOP
JR NC,LFBB9
LD (LF932+1),A
LD (LFBA9),A
LFBB2 LD HL,#0000
LD (LF938+1),HL
XOR A
LFBB9 NOP
JR NC,LFBD5
LD (LFBB9),A
LFBBF LD HL,#0000
LD (LF970+1),HL
LFBC5 LD A,#00
LD (LF981+1),A
LFBCA LD A,#00
LD (LF995+1),A
LFBCF LD HL,#0000
LD (LF966+1),HL
LFBD5 LD A,#00
LD (LF758),A
LFBDA LD HL,#0000
LD (LF756),HL
LFBE0 LD A,#05
LD (LFAB2+1),A
XOR A
LD (LFBD5+1),A
JP LF8AE
LF863 LD A,E
ADD A,A
ADD A,E
LD E,A
LD D,#00
ADD HL,DE
LD A,(HL)
RRA
JR NC,LF870
LD D,#04
LF870 RRA
RL D
RRA
EX AF,AF'
INC HL
LD A,(HL)
RRCA
RRCA
RRCA
RRCA
AND #0F
EX AF,AF'
BIT 3,D
JR NZ,LF888
PUSH AF
ADD A,B
LD (LF751),A
POP AF
LF888 LD A,(HL)
RLA
AND #1F
INC HL
LD L,(HL)
LD H,A
DB #DD
LD H,D
EX DE,HL
LD B,#00
LF894 LD HL,#0000
ADD HL,BC
DB #DD
LD A,L
ADD A,(HL)
ADD A,A
LD C,A
LD HL,TONE_TB
ADD HL,BC
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
SRL D
JR C,LF8AC
SBC HL,DE
RET
LF8AC ADD HL,DE
RET
LF8AE LD A,#00
INC A
JR Z,LF92A
LF8B3 LD BC,#0000
LF8B6 LD DE,#0000
LF8B9 LD HL,#0000
LD A,C
INC A
CP (HL)
INC HL
JR NZ,LF8C3
LD A,(HL)
LF8C3 LD (LF8B3+1),A
INC HL
LD (LF894+1),HL
EX DE,HL
LD A,B
LD E,A
INC A
CP (HL)
INC HL
JR NZ,LF8D3
LD A,(HL)
LF8D3 LD (LF8B3+2),A
INC HL
DB #DD
LF8D8 LD L,#00
LF8DA LD B,#00
CALL LF863
LF8DF LD DE,#0000
ADD HL,DE
LD (LF74B),HL
EX DE,HL
LF8E7 LD DE,#0000
DEC D
JP M,LF91C
JR Z,LF916
PUSH HL
LF8F1 LD HL,#0000
LD A,E
AND A
JP P,LF8FB
NEG
LF8FB LD C,A
AND A
SBC HL,BC
JR NC,LF912
POP HL
LF902 LD A,#00
LD (LF8D8+1),A
XOR A
LD (LF8E7+2),A
LD H,A
LD L,A
LD (LF8DF+1),HL
JR LF91C
LF912 LD (LF8F1+1),HL
POP HL
LF916 LD D,#00
ADD HL,DE
LD (LF8DF+1),HL
LF91C DB #DD
LD A,H
LD (LF752),A
EX AF,AF'
LD C,A
LF923 LD HL,#0000
ADD HL,BC
LD A,(HL)
LF928 OR #00
LF92A LD (LF753),A
LF92D LD A,#00
INC A
JR Z,LF9AC
LF932 LD BC,#0000
LF935 LD DE,#0000
LF938 LD HL,#0000
LD A,C
INC A
CP (HL)
INC HL
JR NZ,LF942
LD A,(HL)
LF942 LD (LF932+1),A
INC HL
LD (LF894+1),HL
EX DE,HL
LD A,B
LD E,A
INC A
CP (HL)
INC HL
JR NZ,LF952
LD A,(HL)
LF952 LD (LF932+2),A
INC HL
DB #DD
LF957 LD L,#00
LF959 LD B,#00
CALL LF863
LF95E LD DE,#0000
ADD HL,DE
LD (LF74D),HL
EX DE,HL
LF966 LD DE,#0000
DEC D
JP M,LF99B
JR Z,LF995
PUSH HL
LF970 LD HL,#0000
LD A,E
AND A
JP P,LF97A
NEG
LF97A LD C,A
AND A
SBC HL,BC
JR NC,LF991
POP HL
LF981 LD A,#00
LD (LF957+1),A
XOR A
LD (LF966+2),A
LD H,A
LD L,A
LD (LF95E+1),HL
JR LF99B
LF991 LD (LF970+1),HL
POP HL
LF995 LD D,#00
ADD HL,DE
LD (LF95E+1),HL
LF99B DB #DD
LD A,H
LD HL,LF752
RLCA
OR (HL)
LD (HL),A
EX AF,AF'
LD C,A
LF9A5 LD HL,#0000
ADD HL,BC
LD A,(HL)
LF9AA OR #00
LF9AC LD (LF754),A
LF9AF LD A,#00
INC A
JR Z,LFA2F
LF9B4 LD BC,#0000
LF9B7 LD DE,#0000
LF9BA LD HL,#0000
LD A,C
INC A
CP (HL)
INC HL
JR NZ,LF9C4
LD A,(HL)
LF9C4 LD (LF9B4+1),A
INC HL
LD (LF894+1),HL
EX DE,HL
LD A,B
LD E,A
INC A
CP (HL)
INC HL
JR NZ,LF9D4
LD A,(HL)
LF9D4 LD (LF9B4+2),A
INC HL
DB #DD
LF9D9 LD L,#00
LF9DB LD B,#00
CALL LF863
LF9E0 LD DE,#0000
ADD HL,DE
LD (LF74F),HL
EX DE,HL
LF9E8 LD DE,#0000
DEC D
JP M,LFA1D
JR Z,LFA17
PUSH HL
LF9F2 LD HL,#0000
LD A,E
AND A
JP P,LF9FC
NEG
LF9FC LD C,A
AND A
SBC HL,BC
JR NC,LFA13
LFA02 LD A,#00
LD (LF9D9+1),A
XOR A
LD (LF9E8+2),A
LD H,A
LD L,A
LD (LF9E0+1),HL
POP HL
JR LFA1D
LFA13 LD (LF9F2+1),HL
POP HL
LFA17 LD D,#00
ADD HL,DE
LD (LF9E0+1),HL
LFA1D DB #DD
LD A,H
LD HL,LF752
RLCA
RLCA
OR (HL)
LD (HL),A
EX AF,AF'
LD C,A
LFA28 LD HL,#0000
ADD HL,BC
LD A,(HL)
LFA2D OR #00
LFA2F LD (LF755),A
LFA32 LD HL,LF758
LD DE,#FFBF
LD C,#FD
XOR A
OR (HL)
LD A,#0D
JR NZ,LFA47
SUB #03
LD HL,LF755
JR LFA5C
LFA47 LD B,D
OUT (C),A
LD B,E
OUTD
DEC A
LD B,D
OUT (C),A
LD B,E
OUTD
DEC A
LD B,D
OUT (C),A
LD B,E
OUTD
DEC A
LFA5C LD B,D
OUT (C),A
LD B,E
OUTD
DEC A
LD B,D
OUT (C),A
LD B,E
OUTD
DEC A
LD B,D
OUT (C),A
LD B,E
OUTD
DEC A
LD B,D
OUT (C),A
LD B,E
OUTD
DEC A
LD B,D
OUT (C),A
LD B,E
OUTD
DEC A
LD B,D
OUT (C),A
LD B,E
OUTD
DEC A
LD B,D
OUT (C),A
LD B,E
OUTD
DEC A
LD B,D
OUT (C),A
LD B,E
OUTD
DEC A
LD B,D
OUT (C),A
LD B,E
OUTD
DEC A
LD B,D
OUT (C),A
LD B,E
OUTD
DEC A
LD B,D
OUT (C),A
LD B,E
OUTD
LD (LF752),A
LD (LF758),A
RET
LFBEC LD (LFB5A+1),A
LD A,(LFB6A+2)
DEC A
JR Z,LFBFA
LD A,C
LD (LFB21+1),A
XOR A
LFBFA LD (LFB1D),A
LD A,#37
LD (LFB54),A
RET
LFC03 EX AF,AF'
LD (LFB2D),A
LD A,(LF8D8+1)
LD C,A
EX AF,AF'
LD (LFB21+1),A
INC B
JR Z,LFBEC
XOR A
LD (LFB6A+2),A
LD (LFB1D),A
LD A,#37
RET
LFC1C ADD A,A
ADD A,A
ADD A,A
ADD A,A
LD HL,VOLTAB
LD C,A
ADD HL,BC
LD (LFB3D+1),HL
LD A,#37
EX AF,AF'
JP LFC74
LFC2E LD A,#37
LD (LFB54),A
LD A,(DE)
INC DE
LD H,#01
LD L,A
LD (LFB6A+1),HL
AND A
LD A,B
JP P,LFC41
CPL
LFC41 LD (LFB65+1),A
DEC B
JR LFC74
LFC47 LD A,(DE)
INC DE
LD H,#02
LD L,A
LD (LFB6A+1),HL
AND A
LD A,B
JP P,LFC55
CPL
LFC55 LD (LFB65+1),A
LD A,(DE)
LD L,A
INC DE
LD A,(DE)
INC DE
LD H,A
LD (LFB5F+1),HL
DEC B
JR LFC74
LFC64 LD A,(DE)
INC DE
LD (LFB38+1),A
LD A,#37
EX AF,AF'
JR LFC74
LFC6E LD (LF748),A
LD (LFAC8+1),A
LFC74 LD A,(DE)
INC DE
ADD A,#20
JR C,LFCA5
ADD A,#60
JR C,LFC03
ADD A,#10
JR C,LFCE9
ADD A,#10
JR C,LFCB7
ADD A,#40
JR C,LFC6E
ADD A,#10
JR C,LFC1C
INC A
JR Z,LFD07
INC A
JR Z,LFC2E
INC A
JR Z,LFC47
INC A
JR NZ,LFC64
XOR A
LD (LFB6A+2),A
LD A,#37
LD (LFB54),A
JR LFC74
LFCA5 JR Z,LFCCC
ADD A,A
LD HL,SMP_A
LD C,A
ADD HL,BC
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
LD (LFB26+1),HL
JP LFC74
LFCB7 LD HL,ORN_A
ADD A,A
LD C,A
ADD HL,BC
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
LD (LFB4D+1),HL
LD A,#37
LD (LFB44),A
JP LFC74
LFCCC EX AF,AF'
LD (LFB2D),A
LD A,#2F
LD (LFB1D),A
LD A,#37
RET
LFCD8 EX AF,AF'
LD (LFB2D),A
LD A,#A7
RET
LFCDF XOR A
LD (LFB33+1),A
LD A,#37
EX AF,AF'
JP LFC74
LFCE9 JR Z,LFCD8
CP #0F
JR Z,LFCDF
LD (LFBD5+1),A
LD A,#10
LD (LFB33+1),A
LD A,(DE)
LD (LFBDA+1),A
INC DE
LD A,(DE)
LD (LFBDA+2),A
INC DE
LD A,#37
EX AF,AF'
JP LFC74
LFD07 LD A,(DE)
INC DE
LD (LFBE0+1),A
JP LFC74
LFD0F LD (LFBC5+1),A
LD A,(LFBCF+2)
DEC A
JP Z,LFD1E
LD A,C
LD (LFB86+1),A
XOR A
LFD1E LD (LFB82),A
LD A,#37
LD (LFBB9),A
RET
LFD27 EX AF,AF'
LD (LFB92),A
LD A,(LF957+1)
LD C,A
EX AF,AF'
LD (LFB86+1),A
INC B
JR Z,LFD0F
XOR A
LD (LFBCF+2),A
LD (LFB82),A
LD A,#37
RET
LFD40 ADD A,A
ADD A,A
ADD A,A
ADD A,A
LD HL,VOLTAB
LD C,A
ADD HL,BC
LD (LFBA2+1),HL
LD A,#37
EX AF,AF'
JP LFD98
LFD52 LD A,#37
LD (LFBB9),A
LD A,(DE)
INC DE
LD H,#01
LD L,A
LD (LFBCF+1),HL
AND A
LD A,B
JP P,LFD65
CPL
LFD65 LD (LFBCA+1),A
DEC B
JR LFD98
LFD6B LD A,(DE)
INC DE
LD H,#02
LD L,A
LD (LFBCF+1),HL
AND A
LD A,B
JP P,LFD79
CPL
LFD79 LD (LFBCA+1),A
LD A,(DE)
LD L,A
INC DE
LD A,(DE)
INC DE
LD H,A
LD (LFBBF+1),HL
DEC B
JR LFD98
LFD88 LD A,(DE)
INC DE
LD (LFB9D+1),A
LD A,#37
EX AF,AF'
JR LFD98
LFD92 LD (LF749),A
LD (LFAE6+1),A
LFD98 LD A,(DE)
INC DE
ADD A,#20
JR C,LFDC9
ADD A,#60
JR C,LFD27
ADD A,#10
JR C,LFE0D
ADD A,#10
JR C,LFDDB
ADD A,#40
JR C,LFD92
ADD A,#10
JR C,LFD40
INC A
JR Z,LFE2B
INC A
JR Z,LFD52
INC A
JR Z,LFD6B
INC A
JR NZ,LFD88
XOR A
LD (LFBCF+2),A
LD A,#37
LD (LFBB9),A
JR LFD98
LFDC9 JR Z,LFDF0
ADD A,A
LD HL,SMP_A
LD C,A
ADD HL,BC
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
LD (LFB8B+1),HL
JP LFD98
LFDDB LD HL,ORN_A
ADD A,A
LD C,A
ADD HL,BC
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
LD (LFBB2+1),HL
LD A,#37
LD (LFBA9),A
JP LFD98
LFDF0 EX AF,AF'
LD (LFB92),A
LD A,#2F
LD (LFB82),A
LD A,#37
RET
LFDFC EX AF,AF'
LD (LFB92),A
LD A,#A7
RET
LFE03 XOR A
LD (LFB98+1),A
LD A,#37
EX AF,AF'
JP LFD98
LFE0D JR Z,LFDFC
CP #0F
JR Z,LFE03
LD (LFBD5+1),A
LD A,#10
LD (LFB98+1),A
LD A,(DE)
LD (LFBDA+1),A
INC DE
LD A,(DE)
LD (LFBDA+2),A
INC DE
LD A,#37
EX AF,AF'
JP LFD98
LFE2B LD A,(DE)
INC DE
LD (LFBE0+1),A
JP LFD98
LFE33 EX AF,AF'
LD A,(LF9D9+1)
LD C,A
EX AF,AF'
LD (LF9D9+1),A
INC B
JR Z,LFE46
XOR A
LD (LF9E8+2),A
JP LFE55
LFE46 LD (LFA02+1),A
LD A,(LF9E8+2)
DEC A
JP Z,LFE55
LD A,C
LD (LF9D9+1),A
XOR A
LFE55 LD H,A
LD L,A
LD (LF9E0+1),HL
LD (LF9AF+1),A
LD (LF9B4+1),HL
RET
LFE61 LD A,(DE)
INC DE
LD H,#01
LD L,A
LD (LF9E8+1),HL
AND A
LD A,B
JP P,LFE6F
CPL
LFE6F LD (LFA17+1),A
DEC B
JR LFE9F
LFE75 LD A,(DE)
INC DE
LD L,A
LD H,#02
LD (LF9E8+1),HL
AND A
LD A,B
JP P,LFE83
CPL
LFE83 LD (LFA17+1),A
LD A,(DE)
LD L,A
INC DE
LD A,(DE)
INC DE
LD H,A
LD (LF9F2+1),HL
DEC B
JR LFE9F
LFE92 LD A,(DE)
INC DE
LD (LF9DB+1),A
JR LFE9F
LFE99 LD (LF74A),A
LD (LFAFF+1),A
LFE9F LD A,(DE)
INC DE
ADD A,#20
JR C,LFECB
ADD A,#60
JR C,LFE33
ADD A,#10
JR C,LFEF7
ADD A,#10
JR C,LFEDD
ADD A,#40
JR C,LFE99
ADD A,#10
JR C,LFF20
INC A
JR Z,LFF18
INC A
JR Z,LFE61
INC A
JR Z,LFE75
INC A
JR NZ,LFE92
XOR A
LD (LF9E8+2),A
JR LFE9F
LFECB JR Z,LFEF1
ADD A,A
LD HL,SMP_A
LD C,A
ADD HL,BC
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
LD (LF9B7+1),HL
JP LFE9F
LFEDD LD HL,ORN_A
ADD A,A
LD C,A
ADD HL,BC
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
LD (LF9BA+1),HL
XOR A
LD (LF9B4+1),A
JP LFE9F
LFEF1 LD A,#FF
LD (LF9AF+1),A
RET
LFEF7 RET Z
CP #0F
JR Z,LFF11
LD (LFBD5+1),A
LD A,#10
LD (LFA2D+1),A
LD A,(DE)
LD (LFBDA+1),A
INC DE
LD A,(DE)
LD (LFBDA+2),A
INC DE
JP LFE9F
LFF11 XOR A
LD (LFA2D+1),A
JP LFE9F
LFF18 LD A,(DE)
INC DE
LD (LFBE0+1),A
JP LFE9F
LFF20 ADD A,A
ADD A,A
ADD A,A
ADD A,A
LD HL,VOLTAB
LD C,A
ADD HL,BC
LD (LFA28+1),HL
JP LFE9F
LF82F LD HL,#0000
LD A,(HL)
ADD A,A
JR LF841
LF836 LD (LF85D+1),SP
LF83A LD HL,#0000
LD A,(HL)
ADD A,A
JR C,LF82F
LF841 ADD A,(HL)
ADD A,A
INC HL
LD (LF83A+1),HL
LD C,A
LF848 LD HL,#0000
ADD HL,BC
LD SP,HL
LF84D LD BC,#0000
POP HL
ADD HL,BC
EX DE,HL
POP HL
ADD HL,BC
LD (LFAE8+1),HL
POP HL
ADD HL,BC
LD (LFB01+1),HL
LF85D LD SP,#0000
LD B,#00
RET
;---------------------------------------------------------------
INITVOL LD IX,VOLTAB
LD DE,#0000
LD B,#10
INITV2 LD HL,0
LD C,#10
INITV1 LD A,L
RLA
LD A,H
ADC A,0
INITV3 LD (IX+0),A
ADD HL,DE
INC IX
DEC C
JR NZ,INITV1
LD A,E
CP 119
JR NZ,INITV4
INC E
INITV4 EX DE,HL
LD DE,17
ADD HL,DE
EX DE,HL
DJNZ INITV2
RET
;---------------------------------------------------------------
TABL2
TONE_TB DB #F8,#0E,#10
DB #0E,"`",#0D
DB #80,#0C,#D8
DB #0B,"(",#0B
DB #88,#0A,#F0
DB #09,"`",#09
DB #E0,#08,"X"
DB #08,#E0,#07
DB "|",#07,#08
DB #07,#B0,#06
DB "@",#06,#EC
DB #05,#94,#05
DB "D",#05,#F8
DB #04,#B0,#04
DB "p",#04,","
DB #04,#FD,#03
DB #BE,#03,#84
DB #03,"X",#03
DB " ",#03,#F6
DB #02,#CA,#02
DB #A2,#02,"|"
DB #02,"X",#02
DB "8",#02,#16
DB #02,#F8,#01
DB #DF,#01,#C2
DB #01,#AC,#01
DB #90,#01,"{"
DB #01,"e",#01
DB "Q",#01,">"
DB #01,",",#01
DB #1C,#01,#0A
DB #01,#FC,#00
DB #EF,#00,#E1
DB #00,#D6,#00
DB #C8,#00,#BD
DB #00,#B2,#00
DB #A8,#00,#9F
DB #00,#96,#00
DB #8E,#00,#85
DB #00,"~",#00
DB "w",#00,"p"
DB #00,"k",#00
DB "d",#00,"^"
DB #00,"Y",#00
DB "T",#00,"O"
DB #00,"K",#00
DB "G",#00,"B"
DB #00,"?",#00
DB ";",#00,"8"
DB #00,"5",#00
DB "2",#00,"/"
DB #00,",",#00
DB "*",#00,"'"
DB #00,"%",#00
DB "#",#00,"!"
DB #00,#1F,#00
DB #1D,#00,#1C
DB #00,#1A,#00
DB #19,#00,#17
DB #00,#16,#00
DB #15,#00,#13
DB #00,#12,#00
DB #11,#00,#10
DB #00,#0F,#00
;---------------------------------------------------------------
TABL1 ;ИНИЦИАЛИЗИРУЕТСЯ ПРОЦЕДУРОЙ
;INITVOL
VOLTAB DS #F0
TABL1_F DS #10
;---------------------------------------------------------------
LF748 DB #00 ;COUNTER A
LF749 DB #00 ;COUNTER B
LF74A DB #00 ;COUNTER C
;---------------------------------------------------------------
LF74B DB #00 ;TONE A
LF74C DB #00
LF74D DB #00,#00 ;TONE B
LF74F DB #00,#00 ;TONE C
LF751 DB #00 ;NOISE
LF752 DB #00 ;MASKS
LF753 DB #00 ;AMPLITUDE A
LF754 DB #00 ;AMPLITUDE B
LF755 DB #00 ;AMPLITUDE C
LF756 DB #00 ;ENVELOPE TYPE
LF757 DB #00 ;ENVELOPE PERIOD
LF758 DB #00 ;
;---------------------------------------------------------------
SMP_A DS #40
ORN_A DS #20
;---------------------------------------------------------------
Другие статьи номера:
Похожие статьи:
В этот день... 13 ноября