PROTRACKER372 PLAYFAS4 H

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

playFAS4C���i�jTя

;fast(long) player,can be INCLUDEd
;#E21 3.31 by Nick/GDC Воронеж'97
;#D86 3.51 fix Mm<M,MOnS+eR Самара 26xii00
;#C03 3.695 fix AlCo 1vi01-26xi05
;#C11 3.699 fix AlCo (3xxx chnA/B when old 3xxx ends только что)
        IFN ?frq
frq=1;all freq tables(3.4x)
        ENDIF 
        IFN ?msx
msx=0
        ENDIF 
        IFN ?smpfix
smpfix=1;vol,T,E/N cumulations in SMPs
        ENDIF 
        IFN ?port3
port3=1;tone port.
        ENDIF 
        IFN ?vib6
vib6=1;vibrate
        ENDIF 
        IFN ?ts2
ts2=0;2nd TS player;играет пат47 вместо пат0 и т.д.
        ENDIF 

        IFN ?jp-2
        MACRO jp
        JR \0 ;JP
        ENDM 
        ENDIF 

        IFN ?m4-2
        MACRO m4
        SLA L,L
        ENDM 
        ENDIF 

        IFN ?shut-2
        MACRO shut
       ;LD HL,#E
       IFN msx
        LD BC,#A0
       ELSE 
        LD BC,-3
       ENDIF 
        DEC L
        OUT (C),L
       IFN msx
        LD C,#A1
       ELSE 
        LD B,#BF
       ENDIF 
        OUT (C),A;0/255
        JR NZ,$-10
        ENDM 
        ENDIF 

        IFN ?esld-2
        MACRO esld
Eef_sld LD A,(DE)
        INC DE
        LD (Esl_ist+1),A
        LD A,(DE),L,A
        INC DE
        LD A,(DE),H,A
        INC DE
        LD (Esl_ids+1),HL
        LD A,6,(E_ins0),A
        RET 
        ENDM 
        ENDIF 

        IFN ?l-2
        MACRO l
        LD A,(DE)
        INC DE
        LD (\0),A
        RET 
        ENDM 
        ENDIF 

       IF0 $-#8000
StAnDaLoNe
        ORG #C000
       ENDIF 
compile
        LD HL,module
        JR install
        JP play
       IFN frq
        JR stop
       ENDIF 
install
        DI 
        LD (sav_SP0+1),SP
        LD (ia_pos0+1),HL
      IFN frq
        PUSH HL
        LD DE,100
        ADD HL,DE
        PUSH DE
        PUSH HL
        DEC HL
        LD E,(HL)
        LD HL,NT_DATA
        LD BC,T_
        ADD HL,DE
        ADD HL,DE
        ADD HL,DE
        LD E,(HL)
        CALL MAKEfrq
        POP HL
        POP DE
        POP BC
      ELSE 
        LD B,H,C,L
        LD DE,100
        ADD HL,DE
      ENDIF 
        LD A,(HL)
        INC HL
        LD (temp+1),A
        LD SP,HL
        ADD HL,DE
        LD (Psa_beg+1),HL
        POP AF
        LD E,A
        ADD HL,DE
        LD (Psa_lop+1),HL
        POP HL
        ADD HL,BC
        LD (Psa_chn+1),HL
       LD HL,tba_smp
ia_s0   EX DE,HL
        POP HL
        ADD HL,BC
        EX DE,HL
        LD (HL),E
        INC L
        LD (HL),D
        INC L
        JR NZ,ia_s0
        INC L
        LD H,L
        LD (A_qty),HL
        LD (C_qty),HL
sav_SP0 LD SP,0
stop
       LD HL,DUMMYORN
        LD (Ao_adr+1),HL
        LD (Bo_adr+1),HL
        LD (Co_adr+1),HL
        LD (Asi_adr+1),HL
        LD (Bsi_adr+1),HL
        LD (Cs_adr+1),HL
        LD (Ach_adr+1),HL
        XOR A
        LD (Am_vol+1),A
        LD (Bm_vol+1),A
        LD (Cm_vol+1),A
       LD (Ei_form+1),A ;no glu glu after switch module
       SUB 16 ;FIX
       LD (Agi_vol+1),A
       LD (Bgi_vol+1),A
        LD (Cg_vol+1),A
       SBC A,A
        LD (Avb_lok+1),A
        LD (Cvb_lok+1),A
        LD (Bvb_lok+1),A
       XOR A
       IF0 frq
       NOP 
       ENDIF 
        shut
        RET 
       IF0 frq
esld
       ENDIF 
tba_smp DS 64,0
tba_orn DS 32,0
        DISPLAY $
tab_vol
frq_A   DB 0,0
frq_B   DB 0,0
frq_C   DB 0,0
N_frq   DB 0 ;;4
        DB 0     ;mix    ;no_use
vol_A   DB 0
vol_B   DB 0
vol_C   DB 0
frq_E   DB 0,0
E_form  DB 0 ;;4
DUMMYORN
DUMMYSMP
       DS 2
        DB 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1
        DB 0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2
        DB 0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3
        DB 0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4
        DB 0,0,1,1,1,2,2,2,3,3,3,4,4,4,5,5
        DB 0,0,1,1,2,2,2,3,3,4,4,4,5,5,6,6
        DB 0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7
        DB 0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8
        DB 0,1,1,2,2,3,4,4,5,5,6,7,7,8,8,9
        DD 0001010203030405050607070809090A
        DD 000101020304040506070708090A0A0B
        DD 0001020203040506060708090A0A0B0C
        DD 00010203030405060708090A0A0B0C0D
        DD 00010203040506070708090A0B0C0D0E
        DD 000102030405060708090A0B0C0D0E0F
tab_frq
        DS #C0
        IFN ?tabl-2
        MACRO tabl
       IF0 port3
\0ef_nsT=0
       ENDIF 
       IF0 vib6
\0ef_vib=0
       ENDIF 
\0_eff  DW \0ef_slT ;1/2xxx
        DW \0ef_nsT ;3xxx
        DW \0ef_dSm ;4.xx
        DW \0ef_dOr ;5.xx
        DW \0ef_vib ;6.xx
       IF0 vib6
        DS 4,1
       ELSE 
\0ef_vib LD A,(DE)
        INC DE
        JR \0VIB
       ENDIF 
        DW Eef_sld
        DW eff_tmp
       IFN $-18!$&#FF00
        DISPLAY "ERROR \0_eff
       ENDIF 
       IFN vib6
;0ef_vib LD A,(DE)
       ;INC DE
\0VIB
        LD (\0vb_ist+1),A;fix fr/st
       IF0 "\0 "-"C "
        LD (\0vb_stp+1),A
       ENDIF 
        LD A,(DE)
        INC DE
        LD (\0vb_ifr+1),A;fix st/fr
       IFN "\0 "-"C "
        LD A,6,(\0_ins4),A
       ENDIF 
        RET 
       ENDIF 
        ENDM 
        ENDIF 
tabl A
tabl B
tabl C

A_qty   NOP 
B_qty   NOP 
C_qty   NOP 
play    JP play_0
       EXX ;for B'<>1
        LD A,#C3,(play),A
;--- install_A ----
        XOR A
        LD L,A,H,A
       LD DE,#618
A_gli   LD (Asl_dsp+1),HL
A_ins0  JR A_ins0Q
       LD (As_dsp+1),A ;note
       IFN smpfix
        LD (As_Nsl+1),A
        LD (As_Esl+1),A
        LD (As_dtn+1),HL
       ENDIF 
       LD (Ao_dsp+1),A ;todo VARIABLE?
        LD (Asl_stp+1),A
       IFN vib6
        LD (Avb_stp+1),A
       ENDIF 
Avb_cpl CPL 
        LD (Avb_lok+1),A
       IFN port3
       LD A,(A_ins3)    ;3.699
       CP E;24          ;
       JZ $+8           ;
       LD A,(Api_lok+1) ;
       OR A             ;
       JZ $+7           ;
       ENDIF 
Asi_not LD A,0
        LD (As_note+1),A
Asi_adr LD HL,0
        LD (As_adr+1),HL
       IFN smpfix
       LD A,16
       LD (As_Vsl+1),A
       ENDIF 
A_ins0Q

Agi_vol LD A,0         ;global_volume
avol    LD (Ag_vol+1),A

A_ins2  JR A_ins2Q
        XOR A          ;ornament
        LD (Ao_dsp+1),A
Aoi_adr LD HL,0
        LD (Ao_adr+1),HL
Ami_vol LD A,0
        LD (Am_vol+1),A
A_ins2Q
A_ins3  JR A_ins3Q
;port & sld
Api_stp LD A,0
        LD (Asl_stp+1),A
        LD (Asl_sts+1),A
Api_tfr LD HL,0
        LD (Asl_tfr+1),HL
       IFN port3
Api_not LD A,0
        LD (Asl_not+1),A
Api_lok LD A,0
        LD (Asl_plk-1),A
       ENDIF 
       IFN vib6
         XOR A
         LD (Avb_stp+1),A
       ENDIF 
A_ins3Q
        IFN vib6
A_ins4  JR A_ins4Q
       LD A,E;24        ;vib
        LD (A_ins4),A
Avb_ist LD A,0
        LD (Avb_sts+1),A
        LD (Avb_stp+1),A
Avb_ifr LD A,0
        LD (Avb_frq+1),A
A_ins4Q
        ENDIF 
A_ins5   JR A_ins5Q
Asi_dsp  LD A,0         ;disp_sample
         LD (As_dsp+1),A
        LD A,E;24
         LD (A_ins5),A
A_ins5Q
A_ins6   JR A_ins6Q
Aoi_dsp  LD A,0
         LD (Ao_dsp+1),A;disp_ornament
        LD A,E;24
         LD (A_ins6),A
A_ins6Q
;--- install_B ---

        XOR A
        LD L,A,H,A
B_gli   LD (Bsl_dsp+1),HL
B_ins0  JR B_ins0Q
        LD (Bs_dsp+1),A
       IFN smpfix
        LD (Bs_Nsl+1),A
        LD (Bs_Esl+1),A
        LD (Bs_dtn+1),HL
       ENDIF 
        LD (Bo_dsp+1),A
        LD (Bsl_stp+1),A
       IFN vib6
        LD (Bvb_stp+1),A
       ENDIF 
Bvb_cpl CPL 
        LD (Bvb_lok+1),A
       IFN port3
       LD A,(B_ins3)    ;3.699
       CP E;24          ;
       JZ $+8           ;
       LD A,(Bpi_lok+1) ;
       OR A             ;
       JZ $+7           ;
       ENDIF 
Bsi_not LD A,0
        LD (Bs_note+1),A
Bsi_adr LD HL,0
        LD (Bs_adr+1),HL
       IFN smpfix
       LD A,16
       LD (Bs_Vsl+1),A
       ENDIF 
B_ins0Q

Bgi_vol LD A,0
bvol    LD (Bg_vol+1),A

B_ins2  JR B_ins2Q
        XOR A
        LD (Bo_dsp+1),A
Boi_adr LD HL,0
        LD (Bo_adr+1),HL
Bmi_vol LD A,0
        LD (Bm_vol+1),A
B_ins2Q
B_ins3  JR B_ins3Q
Bpi_stp LD A,0
        LD (Bsl_stp+1),A
        LD (Bsl_sts+1),A
Bpi_tfr LD HL,0
        LD (Bsl_tfr+1),HL
       IFN port3
Bpi_not LD A,0
        LD (Bsl_not+1),A
Bpi_lok LD A,0
        LD (Bsl_plk-1),A
       ENDIF 
       IFN vib6
        XOR A
        LD (Bvb_stp+1),A
       ENDIF 
B_ins3Q
       IFN vib6
B_ins4  JR B_ins4Q
       LD A,E;24
        LD (B_ins4),A
Bvb_ist LD A,0
        LD (Bvb_sts+1),A
        LD (Bvb_stp+1),A
Bvb_ifr LD A,0
        LD (Bvb_frq+1),A
B_ins4Q
       ENDIF 
B_ins5  JR B_ins5Q
Bsi_dsp LD A,0
        LD (Bs_dsp+1),A
       LD A,E;24
        LD (B_ins5),A
B_ins5Q
B_ins6  JR B_ins6Q
Boi_dsp LD A,0
        LD (Bo_dsp+1),A
       LD A,E;24
        LD (B_ins6),A
B_ins6Q
;--- install_E ---
Ei_form LD A,0         ;env_form
        LD (E_form),A ;;4
        OR A
        JR Z,temp
Ei_frq  LD HL,0        ;env_frq
        LD (E_frq+1),HL
        XOR A
        LD L,A,H,A
        LD (Ei_form+1),A
        LD (Esl_frq+1),HL
        LD (Esl_stp+1),A

temp    LD A,3,(int_qty+1),A
Ni_frq  LD A,0,(N_frq),A ;;4

E_ins0  JR Ei_Q
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,E;24
        LD (E_ins0),A
Ei_Q
;--- nota_A + calc next position ---
       LD HL,A_qty
       DEC (HL)
        LD H,E
      ;LD L,1 ;E
        LD B,E
        EXX 
        JR NZ,AqtyQ
      ;LD (avol+2),A
Ach_adr LD DE,tab_vol+16
        LD A,(DE)
        OR A
        JR NZ,Ps_n0
       LD (Ni_frq+1),A ;;5!!!
       LD D,A          ;;
        LD (sav_SP2+1),SP
Psa_beg LD HL,module+201
        LD A,(HL)
      ;LD E,A           ;6
        INC A       ;AAA;6
        JR NZ,Ps_n1 ;NC ;6
Psa_lop LD HL,module+201
Ps_n1
       IFN ts2
        LD A,47*3
        SUB (HL)
        LD E,A
       ELSE 
        LD E,(HL)       ;6
       ENDIF 
        INC HL
        LD (Psa_beg+1),HL

Psa_chn LD HL,0
        ADD HL,DE
       ADD HL,DE
        LD SP,HL
        POP HL
ia_pos0 LD BC,0
        ADD HL,BC
        EX DE,HL       ;DE=adr_chn_A
        POP HL
        ADD HL,BC      ;HL=adr_chn_B
        LD (Bch_adr+1),HL
        POP HL
        ADD HL,BC      ;HL=adr_chn_C
        LD (Cch_adr+1),HL
sav_SP2 LD SP,0
Ps_n0
        LD H,'compile
        CALL An_clc1
        LD (Ach_adr+1),DE
Ai_qty  LD A,0,(A_qty),A
AqtyQ  LD A,1
       DJNZ $+4
       LD A,34
       LD (A_gli),A
        EXX 
        LD A,B,(A_ins2),A
        LD A,H,(A_ins0),A
        LD A,E,(A_ins3),A

play_0  LD L,0        ;smp_sl_env
        EXX 
N_add   LD IX,0        ;HX=noise LX=mix
        LD (sav_SP1+1),SP

        IFN ?sam1-2
        MACRO sam1
\0vb_lok LD A,-1
        LD H,A
        INC A
        JP Z,\0vb_n0
\0s_adr LD SP,DUMMYSMP ;sample
        POP DE         ;loop E=beg D=end
\0s_dsp LD A,0
        LD L,A
        INC A
        CP D
        JR C,$+3       ;bug NZ/C
        LD A,E
        LD (\0s_dsp+1),A
        m4
        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
       IFN smpfix
        OR #F0
        LD L,A
        LD A,E
        ADD A,A
\0s_Vsl LD A,16
        JR NC,\0s_VslG
        JP M,\0s_n2
        SUB 1
        JR $+4
\0s_n2  CP 31
        ADC A,0
        LD (\0s_Vsl+1),A
\0s_VslG
        ADD A,L
        JR C,$+3
        XOR A
        CP 16
        JR C,$+4
        LD A,15
       ELSE 
        AND 15
       ENDIF 
\0g_vol ADD A,#F0
        LD L,A,H,'tab_vol
        LD A,(HL)
        SRL E
        JR C,$+4
\0m_vol OR 0
        EXA 
        LD A,D
        RLCA 
        JR C,\0s_n5
       IFN smpfix
\0s_Nsl LD A,0
        ADD A,E
        BIT 5,D
        JR Z,$+5
        LD (\0s_Nsl+1),A
        LD HX,A
       ELSE 
        LD HX,E
       ENDIF 
        jp \0s_n7

\0s_n5  LD A,E
        AND 31
        CP 16
        JR C,$+4
        OR #F0
       IFN smpfix
\0s_Esl ADD A,0
        BIT 5,D
        JR Z,$+5
        LD (\0s_Esl+1),A
       ENDIF 
       EXX 
       ADD A,L
       LD L,A
       EXX 
\0s_n7  LD A,D
        RRCA 
        RRCA 
        AND 36
        ENDM 
        ENDIF 

        IFN ?sam2-2
        MACRO sam2
        LD LX,A
       IFN smpfix
        POP BC
\0s_dtn LD HL,0        ;dsp_frq_smp
        ADD HL,BC
       BIT 6,D
        JR Z,$+5
        LD (\0s_dtn+1),HL
        EX DE,HL
       ELSE 
        POP DE
       ENDIF 

\0o_adr LD SP,DUMMYORN ;ornament
        POP BC         ;loop C=beg B=end
\0o_dsp LD A,0
        LD L,A
        INC A
        CP B
        JR C,$+3       ;bug NZ/C
        LD A,C
        LD (\0o_dsp+1),A
        LD H,0
        ADD HL,SP
       IFN port3
        LD A,(\0s_note+1)
       ELSE 
\0s_note LD A,0
       ENDIF 
        ADD A,(HL)     ;dsp_orn
        ADD A,A
     JR NC,$+3
     XOR A
        LD L,A,H,'tab_frq
        LD SP,HL
        POP HL
        ADD HL,DE
\0sl_dsp LD BC,0
        ADD HL,BC
        LD (frq_\0),HL

\0sl_stp LD A,0
        DEC A
        JP M,\0sl_s0
        JR NZ,\0sl_s1
\0sl_tfr LD DE,0
       ADD HL,DE
       EX DE,HL
        ADD HL,BC
        LD (\0sl_dsp+1),HL
       IFN port3
        JR \0sl_sts     ;port off/on
\0sl_plk
\0sl_not LD A,0
        LD L,A
        ADD HL,HL
        LD H,'tab_frq
        LD SP,HL
        POP HL
\0s_note CP 0
        JR NC,$+3
        EX DE,HL
        SBC HL,DE
        JR C,\0sl_sts
        LD (\0s_note+1),A
        XOR A
        LD L,A
        LD (\0sl_dsp+1),HL
        JR $+4
       ENDIF 
\0sl_sts LD A,0
\0sl_s1 LD (\0sl_stp+1),A
\0sl_s0 EXA 

\0vb_n0 LD (vol_\0),A
       IFN vib6
\0vb_stp LD A,0
        DEC A
        JP M,\0smpQ
        JR NZ,\0vb_n1
        DEC A           ;;
        LD HL,\0vb_lok+1;;
        XOR (HL)        ;;
        LD (HL),A       ;;4
\0vb_frq LD A,0
        JR NZ,$+4
\0vb_sts LD A,0
\0vb_n1 LD (\0vb_stp+1),A
       ENDIF 
\0smpQ
        ENDM 
        ENDIF 
sam1 A
        RRCA 
        RRCA 
sam2 A
sam1 B
        RRCA 
        OR LX
sam2 B
sam1 C
        OR LX
sam2 C
;---- sampler_E ----
Esl_    EXX 
        LD A,L
Esl_frq LD DE,0        ;stp_sl_env
E_frq   LD HL,0        ;frq_env
        ADD A,L        ;stp_smp_sl_env
        LD L,A
        ADD HL,DE
        LD (frq_E),HL
Esl_stp LD A,0
        DEC A
        JP M,sav_SP1
        JR NZ,E_n0
Esl_sds LD HL,0
        ADD HL,DE
        LD (Esl_frq+1),HL
Esl_sts LD A,0
E_n0    LD (Esl_stp+1),A

;---- out_to_processor ----

sav_SP1 LD SP,0
out_
       IFN msx
        LD DE,#A0A1
        LD HL,frq_A
       DUP 6
        LD C,D
        OUT (C),L
        LD C,E
        OUTI 
       EDUP 
        LD C,D
        OUT (C),L
        LD A,HX        ;noise
        LD (N_add+3),A
        ADD A,(HL) ;;4
        OUT (#A1),A
        INC L
        OUT (C),L
       LD A,LX        ;mix TODO (HL)
       AND %00111111
       OR %10000000 ;portA=input, portB=output
        OUT (#A1),A
        INC L
        OUT (C),L
        LD C,E
        OUTI 
       DUP 4
        LD C,D
        OUT (C),L
        LD C,E
        OUTI 
       EDUP 
        LD A,(HL) ;;4
        OR A
        JR Z,int_qty
        LD C,D
        OUT (C),L
        OUT (#A1),A
        LD (HL),0 ;;4
       ELSE ;zx
        LD DE,#FFBF
        LD BC,-3
        LD HL,frq_A
       DUP 6
        OUT (C),L
        LD B,E
        OUTI 
        LD B,D
       EDUP 
        OUT (C),L
        LD A,HX        ;noise
        LD (N_add+3),A
        ADD A,(HL) ;;4
        LD B,E
        OUT (C),A
        INC L
        LD B,D
        OUT (C),L
       LD A,LX        ;mix TODO (HL)
        LD B,E
        OUT (C),A
        INC L
       DUP 5
        LD B,D
        OUT (C),L
        LD B,E
        OUTI 
       EDUP 
        LD A,(HL) ;;4
        OR A
        JR Z,int_qty
        LD B,D
        OUT (C),L
        LD B,E
        OUT (C),A
        LD (HL),0 ;;4
       ENDIF 

;--- calc_next_positon_channels ---
int_qty LD A,3
        DEC A
        LD (int_qty+1),A
        JR Z,notaC;if tmp=1,CALL notaB first!!!
        DEC A
        RET NZ

;--- nota_B ---
       LD HL,B_qty
       DEC (HL)
        LD DE,#618
        LD H,E
      ;LD L,1 ;E
        LD B,E
        EXX 
        JR NZ,BqtyQ
      ;LD (bvol+2),A
Bch_adr LD DE,0
        LD H,'compile
        CALL Bn_clc1
        LD (Bch_adr+1),DE
Bi_qty  LD A,0,(B_qty),A
BqtyQ  LD A,1
       DJNZ $+4
       LD A,34
       LD (B_gli),A
        EXX 
        LD A,B,(B_ins2),A
        LD A,H,(B_ins0),A
       ;LD A,L,(B_ins1),A
        LD A,E,(B_ins3),A
        RET 

;--- nota_C ---
notaC
       INC A;LD A,1
        LD (play),A
       LD HL,C_qty
       DEC (HL)
        RET NZ
Cch_adr LD DE,0
        LD H,'compile
        CALL Cn_clc1
        LD (Cch_adr+1),DE
Ci_qty  LD A,0,(C_qty),A
       DEC B
       RET NZ
        LD H,B,L,B
        LD (Csl_dsp+1),HL
        RET 

        IFN ?not-2
        MACRO not
       IFN "\0 "-"C "
\0ni_v0 LD A,47
\0nivolU LD (\0vb_cpl),A
        EXX 
        LD H,D
        EXX 
        RET 
\0ni_not LD (\0si_not+1),A
        XOR A
       LD B,1
       jp \0nivolU
       ENDIF 
\0ni_vol JR Z,\0ni_v0
        DUP 4
        ADD A,A
        EDUP 
        LD (\0gi_vol+1),A
        jp \0n_clc2
\0ni_vqe JR Z,\0ni_v1
        DEC A
        JR NZ,\0ni_e0
        LD A,(DE)
        INC DE
        LD (\0i_qty+1),A
        jp \0n_clc2

\0ni_e0 LD (Ei_form+1),A
        LD A,(DE)
        INC DE
        LD (Ei_frq+2),A
        LD A,(DE)
        INC DE
        LD (Ei_frq+1),A
        LD A,16
\0ni_v1 LD (\0mi_vol+1),A
       IFN "\0 "-"C "
        EXX 
        LD B,D
        EXX 
       ENDIF 
       jp \0n_clc2

\0ni_s_o ADD A,A
        ADD A,tba_orn
        LD L,A
        LD C,(HL)
        INC L
        LD B,(HL)
        LD (\0oi_adr+1),BC
        XOR A
\0ni_sm0 LD (\0mi_vol+1),A
       IFN "\0 "-"C "
        EXX 
        LD B,D
        EXX 
       ELSE 
        XOR A
        LD (\0o_dsp+1),A
       ENDIF 
        LD A,(DE)
        INC DE
\0nism0U ADD A,tba_smp
        LD L,A
        LD C,(HL)
        INC L
        LD B,(HL)
        LD (\0si_adr+1),BC
\0n_clc1 LD BC,#1020
\0n_clc2 LD A,(DE)
        INC DE
        ADD A,B
        JR C,\0ni_s_o
        ADD A,C
        JR C,\0ni_smp
        ADD A,B
        JR C,\0ni_vol
        ADD A,B
        JR C,\0ni_vqe
        ADD A,96
        JR C,\0ni_not
        ADD A,B
        JR C,\0ni_orn
       IF0 "\0 "-"B "
        ADD A,C
        JR C,\0ni_noi
        ADD A,B
       ELSE 
        ADD A,48
       ENDIF 
        JR C,\0ni_vse
        RLA 
        LD HL,-256&\0_eff+.(\0_eff+30)
        ADD A,L
        LD L,A
        LD A,(HL)
        INC L
        LD H,(HL)
        LD L,A
        PUSH HL
       IF0 "\0 "-"C "
       IFN port3
       LD A,(Cs_note+1)
       LD (CnsTnxt+1),A
       ENDIF 
       ENDIF 
        jp \0n_clc2
       IF0 "\0 "-"B "
\0ni_noi LD (Ni_frq+1),A;global_noise
        jp \0n_clc2
       ENDIF 
\0ni_vse JR Z,\0ni_sm0
        LD (Ei_form+1),A
        LD A,(DE)
        INC DE
        LD (Ei_frq+2),A
        LD A,(DE)
        INC DE
        LD (Ei_frq+1),A
        LD A,16
        jp \0ni_sm0

\0ni_smp RET Z
        ADD A,A
        jp \0nism0U

\0ni_orn ADD A,A
        ADD A,tba_orn
        LD L,A
        LD C,(HL)
        INC L
        LD B,(HL)
        LD (\0oi_adr+1),BC
       IFN "\0 "-"C "
        EXX 
        LD B,D
        EXX 
       ELSE 
        XOR A
        LD (Co_dsp+1),A
       ENDIF 
        jp \0n_clc1
        ENDM 
        ENDIF 
not A
not B
Cgi_vol=Cg_vol
Cmi_vol=Cm_vol
Coi_adr=Co_adr
Csi_adr=Cs_adr
Cni_v0
       IFN vib6
        LD (Cvb_stp+1),A
       ENDIF 
        DEC A
        LD (Cvb_lok+1),A
        RET 
not C
Cni_not LD (Cs_note+1),A
        XOR A
        LD H,A,L,A
        LD (Cs_dsp+1),A
        LD (Co_dsp+1),A
        LD (Csl_stp+1),A
        LD (Cvb_lok+1),A
       IFN vib6
        LD (Cvb_stp+1),A
       ENDIF 
       IFN smpfix
        LD (Cs_Nsl+1),A
        LD (Cs_Esl+1),A
        LD (Cs_dtn+1),HL
       LD A,16,(Cs_Vsl+1),A
       ENDIF 
       LD B,1
        RET 

;---- special_effects_COM.xxxx ----
Aef_dSm LD A,6,(A_ins5),A
        l Asi_dsp+1
Aef_dOr LD A,6,(A_ins6),A
        l Aoi_dsp+1
Bef_dSm LD A,6,(B_ins5),A
        l Bsi_dsp+1
Bef_dOr LD A,6,(B_ins6),A
        l Boi_dsp+1
Cef_dSm l Cs_dsp+1
Cef_dOr l Co_dsp+1

Cpi_stp=Csl_stp
Cpi_tfr=Csl_tfr
        IFN ?_slT-2
        MACRO _slT
\0ef_slT LD A,(DE)
        INC DE
        LD (\0pi_stp+1),A
       IF0 "\0 "-"C "
        LD (\0sl_sts+1),A
       ENDIF 
        LD A,(DE),L,A
        INC DE
        LD A,(DE),H,A
        INC DE
        LD (\0pi_tfr+1),HL
       IFN port3
        LD A,\0sl_sts-\0sl_plk
        LD (\0pi_lok+1),A;port_off
       ENDIF 
        ENDM 
        ENDIF 
_slT A
        EXX 
        LD E,D
        EXX 
        RET 
_slT B
        EXX 
        LD E,D
        EXX 
        RET 
_slT C
       IFN vib6
        XOR A
        LD (Cvb_stp+1),A
       ENDIF 
        RET 

       IFN port3
        IFN ?_nsT-2
        MACRO _nsT
\0ef_nsT LD A,(DE)
        INC DE
        LD (\0pi_stp+1),A
       IF0 "\0 "-"C "
        LD (\0sl_sts+1),A
       ENDIF 
        INC DE
        INC DE
        LD A,(DE),L,A
        INC DE
        LD A,(DE),H,A
        INC DE
        LD (\0pi_tfr+1),HL
        XOR A
       LD B,A
        ENDM 
        ENDIF 
_nsT A
        LD (Api_lok+1),A;port_on
      ; LD HL,Asi_not+1
      ; LD A,(HL)
       LD A,(Asi_not+1)
        LD (Api_not+1),A
      ;LD A,(As_note+1)
      ; LD (HL),A
        EXX 
        LD E,D
        EXX 
        RET 
_nsT B
        LD (Bpi_lok+1),A
      ; LD HL,Bsi_not+1
      ; LD A,(HL)
       LD A,(Bsi_not+1)
        LD (Bpi_not+1),A
      ;LD A,(Bs_note+1)
      ; LD (HL),A
        EXX 
        LD E,D
        EXX 
        RET 
_nsT C
       IFN vib6
        LD (Cvb_stp+1),A
       ENDIF 
        LD (Csl_plk-1),A
        LD HL,Cs_note+1
        LD A,(HL)
        LD (Csl_not+1),A
CnsTnxt LD (HL),0
        RET 
      ENDIF 

eff_tmp l temp+1
       IFN frq
esld
MAKEfrq
;Roshin
        INC HL
        EX DE,HL
        ADD HL,BC
        LD A,(DE)
       LD (COPF3),A
        INC DE
        LD A,(DE)
        ADD A,C
        LD C,A
        ADC A,B
        SUB C
        LD B,A
        PUSH BC
        LD DE,tab_frq
        PUSH DE
        LD B,12
COPF1   PUSH BC
        LD C,(HL)
        INC HL
        PUSH HL
        LD B,(HL)
        PUSH DE
        EX DE,HL
        LD DE,23
        LD HX,8
COPF2   SRL B
        RR C
;COPF3   NOP ;AND A
        LD A,C
COPF3   ADC A,D ;=ADC 0
        LD (HL),A
        INC HL
        LD A,B
        ADC A,D
        LD (HL),A
        ADD HL,DE
        DEC HX
        JR NZ,COPF2
        POP DE
        INC DE,DE
        POP HL
        INC HL
        POP BC
        DJNZ COPF1

        POP HL
        POP DE

        ;LD A,E
        ;CP TCOLD_1
        ;JR NZ,CORR_1
        ;LD A,#FD,(FrTab+#2E),A
CORR_1  LD A,(DE)
        AND A
        RET Z
        INC DE
        RRA 
       PUSH HL
        PUSH AF
        ADD A,A
        LD C,A
        ADD HL,BC
        POP AF
        INC (HL)
        JR NC,$+4
        DEC (HL),(HL)
       POP HL
       ;AND A
       ;SBC HL,BC
        JR CORR_1

NT_DATA
        DB T_NEW_0-T_
       ADC A,D
        DB TCNEW_0-T_
       ;DB T_OLD_0-T_
       ;AND A
       ;DB TCOLD_0-T_

        DB T_NEW_1-T_
        AND A
        DB TCNEW_1-T_
       ;DB T_OLD_1-T_
       ;AND A
       ;DB TCOLD_1-T_

        DB T_NEW_2-T_
       ADC A,D
        DB TCNEW_2-T_
       ;DB T_OLD_2-T_
       ;NOP
       ;DB TCOLD_2-T_

        DB T_NEW_3-T_
       ADC A,D
        DB TCNEW_3-T_
       ;DB T_OLD_3-T_
       ;NOP
       ;DB TCOLD_3-T_
T_
;COLD_0 DB #00+1,#04+1,#08+1,#0A+1,#0C+1,#0E+1,#12+1,#14+1
;       DB #18+1,#24+1,#3C+1,0
TCNEW_1
TCOLD_1 DB #5C+1,0
;COLD_2 DB #30+1,#36+1,#4C+1,#52+1,#5E+1,#70+1,#82,#8C,#9C
;       DB #9E,#A0,#A6,#A8,#AA,#AC,#AE,#AE,0
TCNEW_3 DB #56+1
TCOLD_3 DB #1E+1,#22+1,#24+1,#28+1,#2C+1,#2E+1,#32+1,#BE+1,0
TCNEW_0 DB #1C+1,#20+1,#22+1,#26+1,#2A+1,#2C+1,#30+1,#54+1
        DB #BC+1,#BE+1,0
TCNEW_2 DB #1A+1,#20+1,#24+1,#28+1,#2A+1,#3A+1,#4C+1,#5E+1
        DB #BA+1,#BC+1,#BE+1,0

;first 12 values of tone tables

T_NEW_1
T_OLD_1 DW #0EF8*2,#0E10*2,#0D60*2,#0C80*2,#0BD8*2,#0B28*2
        DW #0A88*2,#09F0*2,#0960*2,#08E0*2,#0858*2,#07E0*2
;_OLD_2 DW #0D3E*2,#0C80*2,#0BCC*2,#0B22*2,#0A82*2,#09EC*2
;       DW #095C*2,#08D6*2,#0858*2,#07E0*2,#076E*2,#0704*2
T_NEW_3
T_OLD_3 DW #0CDA*2,#0C22*2,#0B73*2,#0ACF*2,#0A33*2,#09A1*2
        DW #0917*2,#0894*2,#0819*2,#07A4*2,#0737*2,#06CF*2
T_OLD_0=T_OLD_3+2
T_NEW_0=T_OLD_3+2
        DW #066D*2
T_NEW_2 DW #0D10*2,#0C55*2,#0BA4*2,#0AFC*2,#0A5F*2,#09CA*2
        DW #093D*2,#08B8*2,#083B*2,#07C5*2,#0755*2,#06EC*2
       ENDIF 

DISPLAY $-compile
       IFN vib6
Cvb_ifr=Cvb_frq
Cvb_ist=Cvb_sts
       ENDIF 
       IFN port3
Cpi_lok=Csl_plk-2
       ENDIF 
       IF0 ?StAnDaLoNe
module
        INCBIN "*.m"
       ENDIF 
       IF0 frq
plyend
        ORG tab_frq
IF0 .{module+99}-0
       ;INCBIN "tb_PT
        DD 220C730BCF0A330AA109170994081908A4073707CF066D06
        DD 1106BA0567051A05D0048B044A040C04D2039B0367033703
        DD 0803DD02B4028D026802460225020602E901CE01B4019B01
        DD 84016E015A0146013401230112010301F500E700DA00CE00
        DD C200B700AD00A3009A009100890082007A0073006D006700
        DD 61005C00560052004D004900450041003D003A0036003300
        DD 31002E002B00290027002400220020001F001D001B001A00
        DD 180017001600140013001200110010000F000E000D000C00
ENDIF 
IF0 .{module+99}-1
       ;INCBIN "tb_ST
        DD F80E100E600D800CD80B280B880AF0096009E0085808E007
        DD 7C070807B0064006EC0594054405F804B00470042C04FD03
        DD BE03840358032003F602CA02A2027C02580238021602F801
        DD DF01C201AC0190017B01650151013E012C011C010A01FC00
        DD EF00E100D600C800BD00B200A8009F0096008E0085007E00
        DD 770070006B0064005E00590054004F004B00470042003F00
        DD 3B003800350032002F002C002A0027002500230021001F00
        DD 1D001C001A00190017001600150013001200110010000F00
ENDIF 
IF0 .{module+99}-2
       ;INCBIN "tb_ASM
        DD 100D550CA40BFC0A5F0ACA093D09B8083B08C5075507EC06
        DD 88062A06D2057E052F05E5049E045C041D04E203AB037603
        DD 44031503E902BF02980272024F022E020F02F101D501BB01
        DD A2018B01740160014C013901280117010701F900EB00DD00
        DD D100C500BA00B000A6009D0094008C0084007C0075006F00
        DD 690063005D00580053004E004A00460042003E003B003700
        DD 340031002F002C00290027002500230021001F001D001C00
        DD 1A00190017001600150014001200110010000F000E000D00
ENDIF 
IF0 .{module+99}-3
       ;INCBIN "tb_REAL
        DD DA0C220C730BCF0A330AA109170994081908A4073707CF06
        DD 6D061106BA0567051A05D0048B044A040C04D2039B036703
        DD 37030803DD02B4028D026802460225020602E901CE01B401
        DD 9B0184016E015A0146013401230112010301F500E700DA00
        DD CE00C200B700AD00A3009A009100890082007A0073006D00
        DD 670061005C00560052004D004900450041003D003A003600
        DD 330031002E002B00290027002400220020001F001D001B00
        DD 1A00180017001600140013001200110010000F000E000D00
ENDIF 
        ORG plyend
       ENDIF 
       IF0 ?StAnDaLoNe
        ORG #7000
        CALL compile
play_l  EI 
        HALT 
        CALL play
        LD A,#7F
        IN A,(-2)
        RRA 
        JR C,play_l
       LD L,#E
       XOR A
        shut
        RET 
       ENDIF 0858*2,#07E0*2
;_OLD_2 DW #0D3E*2,#0C80*2,#0BCC*2,#0B22*2,#0A82*2,#09EC*2
;       DW #095C*2,#08D6*2,#0858*2,#07E0*2,#076E*2,#0704*2
T_NEW_3
T_OLD_3 DW #0CDA*2,#0C22*2,#0B73*2,#0ACF*2,#0A33*2,#09A1*2
        DW #0917*2,#0894*2,#0819*2,#07A