PROTRACKER372 PT3X0A H

From MSX MUSIC WIKI
Revision as of 20:20, 8 March 2020 by Kumokosi (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

PT3x0A C��┴O�P�з

;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;$                                                             $
;$     PRO TRACKER 3.X PLAYER v3x0A by Dr.Lion/RSM (c) 2004    $
;$                                                             $
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;Редактирование: 8.07.2004
;Файл исходника: PT3x0A (оптимизирован для малого размера)
;Основные технические параметры плеера:
; - базирован на ядре проигрывателя RC367 by Alone Coder;
; - версия ядра проигрывателя: [0] универсальное,малого размера;
; - максимальное время работы: 8864 такта (тестовый спецмодуль);
; - среднее время работы     : 5440 такта (тестовый спецмодуль);
; - размер проигрывателя     : 1742 (#06CE) байт;
; - качество звука           : среднее
;------ Основные точки входа в плеер ------
        ORG  #C000              ;Адрес компиляции
Compile LD   HL,module          ;Адрес модуля
        JR   INSTALL
        JP   PLAY
        JP   STOP
;------ Процедура инсталляции ------
INSTALL DI 
        PUSH HL
        LD   BC,99
        ADD  HL,BC
        LD   A,(HL)
        INC  HL
        PUSH HL
        LD   HL,Tb_PT-24
        LD   C,24
Find_FT ADD  HL,BC
        DEC  A
        JP   P,Find_FT
        LD   IX,tab_frq
;------ Frequency Table Generator ------
        LD   (SP_SV+1),SP
        LD   SP,HL
        LD   C,12
MkFT_L0 POP  HL
        LD   DE,24
        LD   B,8
MkFT_L1 SRL  H
        RR   L
        LD   A,L
        ADC  A,D
        LD   (IX+0),A
        LD   A,H
        ADC  A,D
        LD   (IX+1),A
        ADD  IX,DE
        DJNZ MkFT_L1
        LD   DE,-8*24+2
        ADD  IX,DE
        DEC  C
        JR   NZ,MkFT_L0
SP_SV   LD   SP,0
;------ продолжение инсталляции ------
        POP  HL
        LD   A,(HL)
        LD   (temp+1),A
        INC  HL
        INC  HL
        LD   A,(HL)
        INC  HL
        LD   E,(HL)
        INC  HL
        LD   D,(HL)
        INC  HL
        LD   (smpPP+1),HL
        LD   C,64
        ADD  HL,BC
        LD   (ornPP+1),HL
        LD   C,32
        ADD  HL,BC
        LD   (Psa_beg+1),HL
        LD   C,A
        ADD  HL,BC
        LD   (Psa_lop+1),HL
        POP  HL
        ADD  HL,DE
        LD   (Psa_chn+1),HL
        LD   A,B
        LD   (Am_vol),A
        LD   (Bm_vol),A
        LD   (Cm_vol),A
        INC  A
        LD   (A_qty),A
        LD   (B_qty),A
        LD   (C_qty),A
        LD   HL,ZERO_M
        LD   (Ao_adr),HL
        LD   (Bo_adr),HL
        LD   (Co_adr),HL
        LD   (As_adr),HL
        LD   (Bs_adr),HL
        LD   (Cs_adr),HL
        LD   (Ach_adr),HL
        SUB  16+1
        LD   (Ag_vol),A
        LD   (Bg_vol),A
        LD   (Cg_vol),A
        SBC  A,A
        LD   (Avb_lok),A
        LD   (Cvb_lok),A
        LD   (Bvb_lok),A
STOP    LD   DE,#0E00
        DEC  D
        LD   BC,#FFFD
        OUT  (C),D
        LD   B,#BF
        OUT  (C),E
        JR   NZ,STOP+3
res     RET 
;------ Вычисление адреса орнамента/сэмпла ------
ornPP   LD   HL,ZERO_M
        ADD  A,A
        JR   sm_or_P
smpPP   LD   HL,ZERO_M
sm_or_P LD   C,A
        XOR  A
        LD   B,A
        ADD  HL,BC
        LD   C,(HL)
        INC  HL
        LD   B,(HL)
        LD   HL,(Compile+1)
        ADD  HL,BC
        RET 
;------ Установка формы и частоты ENV ------
EiPP    LD   (E_form),A
        EX   DE,HL
        LD   D,(HL)
        INC  HL
        LD   E,(HL)
        INC  HL
        EX   DE,HL
        LD   (Env_frq+1),HL
        XOR  A
        LD   L,A
        LD   H,A
        LD   (Esl_frq+1),HL
        JR   Eipp
;------ Special Effects COM.9XXX ------
Eef_sld LD   A,(DE)             ;sld_env
        INC  DE
        EX   DE,HL
        LD   E,(HL)
        INC  HL
        LD   D,(HL)
        INC  HL
        EX   DE,HL
        LD   (Esl_sds+1),HL     ;sds
        LD   (Esl_sts+1),A
Eipp    LD   (Esl_stp+1),A      ;stp
        LD   A,%00010000
        RET 
;------ #C100 Таблица громкости (логарифмическая) ------
        DISPLAY "Volume Table :",$
frq_A   DW   0
frq_B   DW   0
frq_C   DW   0
Noise   DB   0
Mixer   DB   0
vol_A   DB   0
vol_B   DB   0
vol_C   DB   0
frq_E   DW   0
E_form  DB   0
ZERO_M  DW   0
DB 0,0,0,0,0,0,0,0,01,01,01,01,01,01,01,01
DB 0,0,0,0,1,1,1,1,01,01,01,01,02,02,02,02
DB 0,0,0,1,1,1,1,1,02,02,02,02,02,03,03,03
DB 0,0,1,1,1,1,2,2,02,02,03,03,03,03,04,04
DB 0,0,1,1,1,2,2,2,03,03,03,04,04,04,05,05
DB 0,0,1,1,2,2,2,3,03,04,04,04,05,05,06,06
DB 0,0,1,1,2,2,3,3,04,04,05,05,06,06,07,07
DB 0,1,1,2,2,3,3,4,04,05,05,06,06,07,07,08
DB 0,1,1,2,2,3,4,4,05,05,06,07,07,08,08,09
DB 0,1,1,2,3,3,4,5,05,06,07,07,08,09,09,10
DB 0,1,1,2,3,4,4,5,06,07,07,08,09,10,10,11
DB 0,1,2,2,3,4,5,6,06,07,08,09,10,10,11,12
DB 0,1,2,3,3,4,5,6,07,08,09,10,10,11,12,13
DB 0,1,2,3,4,5,6,7,07,08,09,10,11,12,13,14
DB 0,1,2,3,4,5,6,7,08,09,10,11,12,13,14,15
;------ #C200 Область таблицы частот нот -------
tab_frq EQU  $
Test_AY LD   DE,#FFBF
        LD   C,#FD
        LD   A,#02
        LD   B,D
        OUT  (C),A
        LD   B,E
        OUT  (C),E
        LD   B,D
        IN   A,(C)
        CP   E
        LD   HL,DC_StrA
        JR   NZ,AY_Exit
AY_Pres LD   A,#10
        OUT  (C),A
        IN   A,(C)
        CP   D
        LD   HL,AY_StrA
        JR   NZ,AY_Exit
        LD   HL,YM_StrA
AY_Exit JP   STOP
        DS   8
        DB   "Pro Tracker 3.x Player v3x0A"
        DB   " by Dr.Lion (C) 2004 LEN:6CE"
        DS   8
DC_StrA DB   "Disconnected",0
AY_StrA DB   "AY-3-8910",0
YM_StrA DB   "YM2149F",0
        DS   192-($-tab_frq)
;------ Таблица подпрограмм комманд ------
X_eff   DW   Xef_slT ;1xxx,2xxx - sld_tone
        DW   Xef_nsT ;3xxx      - port_note
        DW   Xef_dSm ;4.xx      - dsp_smp
        DW   Xef_dOr ;5.xx      - dsp_orn
        DW   Xef_vib ;6.xx      - vibrato
        DW   res
        DW   res
        DW   Eef_sld ;9xxx,Axxx - sld_env
        DW   eff_tmp ;B.xx      - temp
;------ Все переменные канала A ------
Ach_adr DW   ZERO_M             ;-04 POSITION ADR
Ai_qty  DB   #01                ;-02 STEP COUNTER PRESET
A_qty   DB   #01                ;-01 STEP COUNTER
Afrq_Ad DW   frq_A              ;+00 ADR IN MEM OF FRQ REG
Avol_Ad DW   vol_A              ;+02 ADR IN MEM OF VOL REG
As_adr  DW   ZERO_M             ;+04 SAMPLE ADR
Ao_adr  DW   ZERO_M             ;+06 ORNAMENT ADR
ACh_IDN DB   4                  ;+08 CHANNEL ROLL FOR MIXER
Asl_plk DB   Xsl_sts-Xsl_plk    ;+09 DSP FOR PORT ON/OFF
Avb_lok DB   #FF                ;+10 SOUND LOCK (VIBRATO)
As_Vsl  DB   #10                ;+11 VOLUME SLIDE ACC
Ag_vol  DB   #F0                ;+12 GLOBAL VOLUME
Am_vol  DB   0                  ;+13 ENVELOPMENT MASK
As_Nsl  DB   0                  ;+14 NOISE SLIDE ACC
As_Esl  DB   0                  ;+15 ENVELOPMENT SLIDE ACC
As_dtn  DW   0                  ;+16 SAMP FRQ DSP ACC
As_dsp  DB   0                  ;+18 SAMPLE POSITION
Ao_dsp  DB   0                  ;+19 ORNAMENT POSITION
Asl_dsp DW   0                  ;+20 SLIDE DSP
Asl_stp DB   0                  ;+22 SLIDE STEP (DELAY)
Asl_tfr DW   0                  ;+23 SLIDE ADD DSP
Asl_not DB   0                  ;+25 SLIDE TO NOTE
As_note DB   0                  ;+26 SAMPLE NOTE
Asl_sts DB   0                  ;+27 SLIDE COUNTER PRESET
Avb_stp DB   0                  ;+28 VIBRATO COUNTER
Avb_frq DB   0                  ;+29 SOUND OFF DELAY (VIBRATO)
Avb_sts DB   0                  ;+30 VIBRATO COUNTER PRESET
;------ Все переменные канала B ------
Bch_adr DW   ZERO_M
Bi_qty  DB   #01
B_qty   DB   #01
Bfrq_Ad DW   frq_B
Bvol_Ad DW   vol_B
Bs_adr  DW   ZERO_M
Bo_adr  DW   ZERO_M
BCh_IDN DB   3
Bsl_plk DB   Xsl_sts-Xsl_plk
Bvb_lok DB   #FF
Bs_Vsl  DB   #10
Bg_vol  DB   #F0
Bm_vol  DB   0
Bs_Nsl  DB   0
Bs_Esl  DB   0
Bs_dtn  DW   0
Bs_dsp  DB   0
Bo_dsp  DB   0
Bsl_dsp DW   0
Bsl_stp DB   0
Bsl_tfr DW   0
Bsl_not DB   0
Bs_note DB   0
Bsl_sts DB   0
Bvb_stp DB   0
Bvb_frq DB   0
Bvb_sts DB   0
;------ Все переменные канала C ------
Cch_adr DW   ZERO_M
Ci_qty  DB   #01
C_qty   DB   #01
Cfrq_Ad DW   frq_C
Cvol_Ad DW   vol_C
Cs_adr  DW   ZERO_M
Co_adr  DW   ZERO_M
CCh_IDN DB   2
Csl_plk DB   Xsl_sts-Xsl_plk
Cvb_lok DB   #FF
Cs_Vsl  DB   #10
Cg_vol  DB   #F0
Cm_vol  DB   0
Cs_Nsl  DB   0
Cs_Esl  DB   0
Cs_dtn  DW   0
Cs_dsp  DB   0
Co_dsp  DB   0
Csl_dsp DW   0
Csl_stp DB   0
Csl_tfr DW   0
Csl_not DB   0
Cs_note DB   0
Csl_sts DB   0
Cvb_stp DB   0
Cvb_frq DB   0
Cvb_sts DB   0
;------ Play One Frame of Module ------
PLAY    PUSH IY
int_qty LD   A,1
        DEC  A
        JR   NZ,SamplIT
;------ Просчет следующей строки паттерна ------
        LD   IY,Afrq_Ad
        CALL Get_Pos
        LD   IY,Bfrq_Ad
        CALL Get_Pos
        LD   IY,Cfrq_Ad
        CALL Get_Pos
temp    LD   A,3                ;temp
SamplIT LD   (int_qty+1),A
;------ Проигрывание сэмплером каналов ABC ------
N_add   LD   IX,0               ;HX=noise LX=mix
        LD   BC,0               ;smp_sl_env
        EXX 
        LD   IY,Afrq_Ad
        CALL OneChan
        LD   IY,Bfrq_Ad
        CALL OneChan
        LD   IY,Cfrq_Ad
        CALL OneChan
;------ Модифицированый сэмплер Envelopment ------
Sampl_E EXX 
Esl_frq LD   DE,0              ;stp_sl_env
Env_frq LD   HL,0              ;frq_env
        ADD  HL,BC
        ADD  HL,DE
        LD   (frq_E),HL
;------ Просчет Slide DSP для Envelopment ------
Esl_stp LD   A,0
        DEC  A
        JP   M,MPU_Out
        JR   NZ,Esl_n0
Esl_sds LD   HL,0
        ADD  HL,DE
        LD   (Esl_frq+1),HL
Esl_sts LD   A,0
Esl_n0  LD   (Esl_stp+1),A
;---- Update Noise & Mixer Than Out ----
MPU_Out LD   A,HX               ;noise value
        LD   (N_add+3),A
N_frq   ADD  A,0
        LD   (Noise),A
        LD   A,LX               ;mixer bits
        LD   (Mixer),A
        POP  IY                 ;old IY value
        LD   HL,frq_A
        LD   DE,#FFBF
        LD   C,#FD
        LD   A,14
AY_Out  LD   B,D
        OUT  (C),L
        LD   B,E
        DEC  A
        JR   Z,EN_Out
        OUTI 
        JR   AY_Out
EN_Out  OR   (HL)
        RET  Z
        OUT  (C),A
        LD   (HL),0
        RET 
;------ Универсальный сэмплер для каналов ABC ------
OneChan LD   (Quit_S+1),SP
        LD   SP,IY
        POP  HL
        LD   (FrqR_A+1),HL
        POP  HL
        LD   (VolR_A+1),HL
        POP  HL
        LD   (Xs_adr+1),HL
        POP  HL
        LD   (Xo_adr+1),HL
        POP  HL
        LD   A,L
        LD   (Ch_Roll+1),A
        LD   A,H
        LD   (Xsl_plk-1),A
;------ Переделанный под переменные сэмплер PT3.67 ------
tab_vol EQU  frq_A
        LD   A,(IY+10)          ;Xvb_lok
        LD   H,A
        INC  A
        JP   Z,Xvb_n0
Xs_adr  LD   SP,0               ;sample
        POP  DE                 ;loop E=beg D=end
        LD   A,(IY+18)          ;Xs_dsp
        LD   L,A
        INC  A
        CP   D
        JR   C,Xs_n0
        LD   A,E
Xs_n0   LD   (IY+18),A
        ADD  HL,HL
        ADD  HL,HL
        ADD  HL,SP
        LD   SP,HL
        POP  DE                 ;D= Nm ts ns Tm v3 v2 v1 v0
        LD   A,D                ;E= sv +- N4 N3 N2 N1 N0 Em
        OR   #F0
        LD   L,A
        LD   A,E
        ADD  A,A
        LD   A,(IY+11)          ;Xs_Vsl
        JR   NC,Xs_VslG
        JP   M,Xs_n2
        SUB  1
        JR   Xs_n3
Xs_n2   CP   31
Xs_n3   ADC  A,0
        LD   (IY+11),A
Xs_VslG ADD  A,L
        JR   C,Xs_n4
        XOR  A
Xs_n4   CP   16
        JR   C,Xg_vol
        LD   A,15
Xg_vol  ADD  A,(IY+12)          ;Xg_vol
        LD   L,A
        LD   H,'tab_vol
        LD   A,(HL)
        SRL  E
        JR   C,Xm_vo0
        OR   (IY+13)            ;Xm_vol
Xm_vo0  EXA 
        LD   A,D
        RLCA 
        JR   C,Xs_n5
        LD   A,(IY+14)          ;Xs_Nsl
        ADD  A,E
        BIT  5,D
        JR   Z,Xs_n6
        LD   (IY+14),A
Xs_n6   LD   HX,A
        JR   Xs_n7
Xs_n5   LD   A,E
        AND  31
        CP   16
        JR   C,Xs_Esl
        OR   #F0
Xs_Esl  ADD  A,(IY+15)          ;Xs_Esl
        BIT  5,D
        JR   Z,Xs_n9
        LD   (IY+15),A
Xs_n9   EXX 
        ADD  A,C
        LD   C,A
        EXX 
Xs_n7   LD   A,D
        AND  %10010000
Ch_Roll LD   B,0
MixLoop RRCA 
        DJNZ MixLoop
        OR   LX
        LD   LX,A
        POP  BC                 ;smp_frq_dsp
        LD   L,(IY+16)          ;накопитель dsp
        LD   H,(IY+17)
        ADD  HL,BC
        BIT  6,D
        JR   Z,Xs_n10
        LD   (IY+16),L          ;новое значение
        LD   (IY+17),H          ;накопителя dsp
Xs_n10  EX   DE,HL
Xo_adr  LD   SP,0               ;ornament
        POP  BC                 ;loop C=beg B=end
        LD   A,(IY+19)          ;Xo_dsp
        LD   L,A
        INC  A
        CP   B
        JR   C,Xo_n0
        LD   A,C
Xo_n0   LD   (IY+19),A
        LD   H,0
        ADD  HL,SP
        LD   A,(IY+26)          ;Xs_note
        ADD  A,(HL)             ;dsp_orn  (ORNAMENTS ON/OFF)
        ADD  A,A
        JR   NC,Xo_n1           ;;
        XOR  A                  ;;
Xo_n1   LD   L,95*2             ;;
        CP   L                  ;;
        JR   NC,Xo_n2           ;;
        LD   L,A                ;;
Xo_n2   LD   H,'tab_frq
        LD   SP,HL
        POP  HL                 ;частота ноты+
        ADD  HL,DE              ;+накопитель сэмпла (смещение)+
        LD   C,(IY+20)
        LD   B,(IY+21)
        ADD HL,BC               ;+накопитель SLIDE TONE/PORT
FrqR_A  LD   (frq_A),HL
        LD   A,(IY+22)          ;Xsl_stp
        DEC  A
        JP   M,Xsl_s0           ;If Xsl_stp=0 then SLIDE OFF
        JR   NZ,Xsl_s1
        LD   E,(IY+23)          ;Xsl_tfr-приращение накопителя
        LD   D,(IY+24)          ;SLIDE TONE/PORT при его изме-
        ADD  HL,DE              ;нении.
        EX   DE,HL
        ADD  HL,BC
        LD   (IY+20),L          ;новое значение измененного
        LD   (IY+21),H          ;накопителя SLIDE TONE/PORT
        JR   Xsl_sts            ;переключатель PORT ON/OFF!
Xsl_plk EQU  $
        LD   A,(IY+25)          ;нота, к которой стремится
        LD   L,A                ;команда PORT.
        ADD  HL,HL
        LD   H,'tab_frq
        LD   SP,HL
        POP  HL
        CP   (IY+26)            ;последняя встреченая нота, в HL
        JR   NC,Xsl_n0          ;вычесленная по ней частота.
        EX   DE,HL
Xsl_n0  SBC  HL,DE
        JR   C,Xsl_sts
        LD   (IY+26),A          ;частоты нот совпали и теперь:
        XOR  A                  ;- Xs_note=Xsl_not
        LD   (IY+20),A          ;- Xsl_dsp=0
        LD   (IY+21),A
        JR   Xsl_s1
Xsl_sts LD   A,(IY+27)
Xsl_s1  LD   (IY+22),A
Xsl_s0  EXA 
Xvb_n0  EQU  $
VolR_A  LD   (vol_A),A
        LD   A,(IY+28)
        DEC  A
        JP   M,Quit_S
        JR   NZ,Xvb_n1
        DEC  A                  ;A=#FF
        XOR  (IY+10)            ;A XOR Xvb_lok
        LD   (IY+10),A
        LD   A,(IY+29)
        JR   NZ,Xvb_n1
        LD   A,(IY+30)
Xvb_n1  LD   (IY+28),A
Quit_S  LD   SP,0
        RET 
;------ Get Position + Next Pattern ------
Get_Pos DEC  (IY-01)            ;X_qty
        RET  NZ
        LD   E,(IY-04)          ;adr_chan
        LD   D,(IY-03)
        LD   A,(DE)
        AND  A
        JR   NZ,Cont_0
        LD   (N_frq+1),A
        LD   D,A
        LD   (Sv_SP0+1),SP
Psa_beg LD   HL,module+201
        LD   A,(HL)
        INC  A
        JR   NZ,Cont_1
Psa_lop LD   HL,module+201
Cont_1  LD   E,(HL)
        INC  HL
        LD   (Psa_beg+1),HL
Psa_chn LD   HL,0
        ADD  HL,DE
        ADD  HL,DE
        LD   SP,HL
ia_pos0 LD   BC,(Compile+1)
        POP  HL
        ADD  HL,BC
        EX   DE,HL              ;DE=adr_chn_A
        POP  HL
        ADD  HL,BC              ;HL=adr_chn_B
        LD   (Bch_adr),HL
        POP  HL
        ADD  HL,BC              ;HL=adr_chn_C
        LD   (Cch_adr),HL
Sv_SP0  LD   SP,0
Cont_0  CALL Xn_clc1
        LD   (IY-04),E
        LD   (IY-03),D
        LD   A,(IY-02)          ;Xi_qty
        LD   (IY-01),A          ;X_qty
        RET 
;------ Дешифрация позиции по одному каналу ------
Xni_not LD   (IY+26),A          ;Xs_note
        XOR  A
        LD   (IY+10),A          ;Xvb_lok
        LD   (IY+18),A          ;Xs_dsp
        LD   (IY+11),#10        ;Xs_Vsl
        LD   (IY+14),A          ;Xs_Nsl
        LD   (IY+15),A          ;Xs_Esl
        LD   (IY+16),A          ;Xs_dtn  low
        LD   (IY+17),A          ;Xs_dtn  High
        LD   (IY+19),A          ;Xo_dsp
        LD   (IY+20),A          ;Xsl_dsp low
        LD   (IY+21),A          ;Xsl_dsp High
        LD   (IY+22),A          ;Xsl_stp
        LD   (IY+28),A          ;Xvb_stp
        RET 
Xni_vol JR   NZ,Xni_v0
        LD   (IY+28),A          ;Xvb_stp=#00
        DEC  A
        LD   (IY+10),A          ;Xvb_lok=#FF
        RET 
Xni_v0  ADD  A,A
        ADD  A,A
        ADD  A,A
        ADD  A,A
        LD   (IY+12),A          ;Xg_vol=A*16
        JR   Xn_clc2
Xni_s_o CALL ornPP
        LD   (IY+06),L          ;Xo_adr=HL
        LD   (IY+07),H
Xni_vse CALL NZ,EiPP
Xni_sm0 LD   (IY+13),A          ;Xm_vol
        XOR  A
        LD   (IY+19),A          ;Xo_dsp=0
        LD   A,(DE)
        INC  DE
        JR   Xnism0U
Xni_smp RET  Z
        ADD  A,A
Xnism0U CALL smpPP
        LD   (IY+04),L           ;Xs_adr
        LD   (IY+05),H
Xn_clc1 LD   BC,#1020
Xn_clc2 LD   A,(DE)
        INC  DE
        ADD  A,B
        JR   C,Xni_s_o
        ADD  A,C
        JR   C,Xni_smp
        ADD  A,B
        JR   C,Xni_vol
        ADD  A,B
        JR   C,Xni_vqe
        ADD  A,96
        JR   C,Xni_not
        ADD  A,B
        JR   C,Xni_orn
        ADD  A,C
        JR   C,Xni_noi
        ADD  A,B
        JR   C,Xni_vse
        ADD  A,B
        LD   HL,X_eff-2
        ADD  A,A
        ADD  A,L
        LD   L,A
        LD   C,(HL)
        INC  L
        LD   B,(HL)
        PUSH BC
        LD   A,(IY+26)          ;Xs_note
        EXA 
        JR   Xn_clc1
Xni_noi LD   (N_frq+1),A        ;GLOBALnoise
        JR   Xn_clc2
Xni_vqe JR   Z,Xni_v1
        DEC  A
        JR   NZ,Xni_e0
        LD   A,(DE)
        LD   (IY-02),A          ;Xi_qty
        INC  DE
        JR   Xn_clc2
Xni_e0  CALL EiPP
Xni_v1  LD   (IY+13),A          ;Xm_vol
        JR   Xn_clc2
Xni_orn CALL ornPP
        LD   (IY+06),L          ;Xo_adr=HL
        LD   (IY+07),H
        LD   (IY+19),A          ;Xo_dsp=0
        JR   Xn_clc1
;------ Special Effects COM.XXXX ------
Off_PRT EQU  Xsl_sts-Xsl_plk
Xef_slT LD   A,(DE)
        INC  DE
        LD   (IY+22),A          ;Xsl_stp
        LD   (IY+27),A          ;Xsl_sts
        LD   A,(DE)
        INC  DE
        LD   (IY+23),A          ;Xsl_tfr (LOW)
        LD   A,(DE)
        INC  DE
        LD   (IY+24),A          ;Xsl_tfr (HIGH)
        LD   (IY+28),0          ;Xvb_stp
        LD   (IY+09),Off_PRT    ;Xsl_plk=PORT_OFF
        RET 
Xef_nsT CALL Xef_slT
        LD   A,(DE)
        INC  DE
        LD   (IY+23),A          ;Xsl_tfr (LOW)
        LD   A,(DE)
        INC  DE
        LD   (IY+24),A          ;Xsl_tfr (HIGH)
        LD   (IY+09),0          ;Xsl_plk=PORT_ON
        LD   A,(IY+26)          ;Xs_note
        LD   (IY+25),A          ;Xsl_not
        EXA 
        LD   (IY+26),A
        RET 
Xef_dSm LD   A,(DE)
        INC  DE
        LD   (IY+18),A          ;Xs_dsp
        RET 
Xef_dOr LD   A,(DE)
        INC  DE
        LD   (IY+19),A          ;Xo_dsp
        RET 
Xef_vib LD   A,(DE)
        INC  DE
        LD   (IY+28),A
        LD   (IY+30),A
        LD   A,(DE)
        INC  DE
        LD   (IY+29),A
        LD   (IY+22),0          ;Xsl_stp отключение SLIDE
        RET 
eff_tmp LD   A,(DE)
        INC  DE
        LD   (temp+1),A
        RET 
;------ Frequency Tables for Generate ------
Tb_PT   DW   #0C22*2,#0B72*2,#0ACF*2,#0A33*2
        DW   #09A1*2,#0917*2,#0894*2,#0819*2
        DW   #07A4*2,#0737*2,#06CF*2,#066D*2
Tb_ST   DW   #0EF8*2,#0E10*2,#0D60*2,#0C80*2
        DW   #0BD8*2,#0B28*2,#0A88*2,#09F0*2
        DW   #0960*2,#08E0*2,#0858*2,#07E0*2
Tb_REAL DW   #0CDA*2,#0C22*2,#0B72*2,#0ACF*2
        DW   #0A33*2,#09A1*2,#0917*2,#0894*2
        DW   #0819*2,#07A4*2,#0737*2,#06CF*2
Tb_ASM  DW   #0D10*2,#0C55*2,#0BA4*2,#0AFC*2
        DW   #0A5F*2,#09CA*2,#093D*2,#08B8*2
        DW   #083B*2,#07C5*2,#0755*2,#06EC*2
;------ Конец плеера-начало модуля ------
module  DISPLAY "Module Adress:",module
        DISPLAY "Player Lenght:",module-Compile

;------ пример использования -------
        INCBIN  "ace.m"
        ORG  #7000
        DI 
        CALL Compile
play_l  EI 
        HALT 
        CALL Compile+5
        LD   A,#7F
        IN   A,(-2)
        RRA 
        JR   C,play_l
        JP   Compile+8
        ADD  A,B
        JR   C,Xni_orn
        ADD  A,C