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
;---------------------------------------------------------------



Другие статьи номера:

Введение - О новом интерфейсе в газете.

Маленькие хитрости - Изящная очистка экрана. Быстрое сканирование клавиатуры. Установка прерываний (IM2).

HARDWARE - анонс Falcon Sound Drive.

HARDWARE - Еще несколько слов о дисководах 5'25 и 3'5.

Hardware- доработка компьютера Балтик.

Презентация - Генератор Спрайтов v4.5 от REAL SOFT.

Проблемы Байта - Почему не работают некоторые программы на Спектрум-совместимом компьютере "Байт".

Фантастика - Фантастическая повесть Рея Бредбери "Лед и пламя" (часть 1).

Сказки дядюшки Gill'а - Рассказы: Автобиография, Инкубаторный период, Происшествие на улице, Реабилитация...

Дерево смерти - Отчет о работе службы "Спасение 911".

Богатые тоже плачут - О проблемах, которые создают СНГ'шные кодеры для пользователей фирменных спектрумов (EXODUS из Польши).

Анкета - Опрос среди спектрумовского населения стран СНГ.

Знаете ли вы... - Гасить ВГ-шку нулем в порт #FF нельзя. Перед записью через #3D13 на конкретную дорожку, если моторчик включен, а головка на ней торчит. Как ускорить процедуру чтения и загрузки через #3D13, если необходимо загрузить/записать несколько небольших блоков подряд.

Музобзор - Интервью с группой "Too Late! Frozen".

Книга о вкусной пище - Холодные закуски, горячие закуски и супы. (кулинарные рецепты). Реклама: часы командирские.

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

Открытое письмо - Открытое письмо OLDMAN'у о создании газет...

AMIGA vs IBM - Какие возможности у этих компьютеров.

Амига - Немного истории создания Амиги.

Амига - Краткое описание различных моделей Амиги.

Амига - Описание AMIGA 500/2000 - Амига из нутри: клавиатура, дисководы, разъемы ввода/вывода. Что еще можно подключить?

Амига - Описание AMIGA 1200.

Besta - мы предлагаем скидываться на свежий софт для Спектрума всей Белорусью и закупать его везде где только возможно.

Новье - Список нового ПО, которое появилось в Бресте в декабре.

PENTIUM - Pentium Processor - Технический обзор.

Реклама - Реклама и объявления ...

Credits - создатели газеты.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
voters - список участников опроса
По следам легендарной группы - "Ласковый май"
ascii'2008 graphics review - обзор графики с ascii'2008 от diver/4d.

В этот день...   21 августа