PROTRACKER372 PTUPLAY H

From MSX MUSIC WIKI
Jump to: navigation, search

PTUPLAY C��\V�W�Ÿ

;RUN=CREATE RELOC TBL
;pt3.67 micro SLOW player with 1 table
;no ini
;85 PATTERNS
;no IY!
;tempo1
        MACRO pp
tba_smp=MUZ+105
tba_orn=tba_smp+64
PLAYER
frq_A=MUZ
frq_B=MUZ+2
frq_C=MUZ+4
N_frq=MUZ+6
vol_A=MUZ+8
vol_B=MUZ+9
vol_C=MUZ+10
frq_E=MUZ+11
E_form=MUZ+13
play
        LD HL,int_qty
        DEC (HL)
        JP NZ,NOINS
;--- nota_A + calc_next_position ---
       INC HL
      ;LD HL,A_qty
       DEC (HL)
        JR NZ,Aq_0
Ach_adr LD DE,tab_vol+16
        LD A,(DE)
        OR A
        JR NZ,Ps_n0
_m1=$+2
       LD (N_frq),A ;;5!!!
       LD D,A          ;;
        LD (sav_SP2+1),SP
Psa_beg LD HL,MUZ+201
        LD A,(HL)
        INC A       ;AAA;6
        JR NZ,Ps_n1 ;NC ;6
Psa_lop LD HL,MUZ+201
Ps_n1   LD E,(HL)       ;6
        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,MUZ
        ;ADD HL,BC
        ;EX DE,HL       ;DE=adr_chn_A
       POP DE
        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
_m12=$+1
        LD H,'tba_smp
        CALL An_clc1
        LD (Ach_adr+1),DE
Ai_qty  LD A,0
        LD (A_qty),A
       DJNZ Aq_0
        LD H,B
        LD L,B
        LD (Asl_dsp+1),HL
Aq_0
;--- nota_B ---
       LD HL,B_qty
       DEC (HL)
        JR NZ,Bq_0
Bch_adr LD DE,0
_m13=$+1
        LD H,'tba_smp
        CALL Bn_clc1
        LD (Bch_adr+1),DE
Bi_qty  LD A,0
        LD (B_qty),A
       DJNZ Bq_0
        LD H,B
        LD L,B
        LD (Bsl_dsp+1),HL
Bq_0
;--- nota_C ---
       LD HL,C_qty
       DEC (HL)
        JR NZ,Cq_0
Cch_adr LD DE,0
_m14=$+1
        LD H,'tba_smp
        CALL Cn_clc1
        LD (Cch_adr+1),DE
Ci_qty  LD A,0
        LD (C_qty),A
       DJNZ Cq_0
        LD H,B
        LD L,B
        LD (Csl_dsp+1),HL
Cq_0
;--- install_E ---
Ei_form LD A,0         ;env_form
_m11=$+2
        LD (E_form),A
        OR A
        JR Z,temp
Ei_frq  LD HL,0        ;env_frq
        LD (E_frq+1),HL
        XOR A
        LD L,A
        LD H,A
        LD (Ei_form+1),A
        LD (Esl_frq+1),HL
        LD (Esl_stp+1),A

temp    LD A,3         ;temp
        LD (int_qty),A
NOINS
play_0 LD L,0        ;smp_sl_env
        EXX 
N_add   LD IX,0        ;HX=noise LX=mix
        LD (sav_SP1+1),SP
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,24
        LD (E_ins0),A
Ei_Q
;---- sampler_A ----

Avb_lok LD A,-1
        LD H,A
        INC A
        JP Z,Avb_n0

As_adr  LD SP,DUMMYSMP ;sample
        POP DE         ;loop E=beg D=end
As_dsp  LD A,0
        LD L,A
        INC A
        CP D
        JR C,As_n0     ;bug NZ/C
        LD A,E
As_n0   LD (As_dsp+1),A
       SLA L
       SLA L
      ;ADD HL,HL,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
       ;AND 15
        LD L,A
        LD A,E
        ADD A,A
As_Vsl  LD A,16
        JR NC,As_VslG
        JP M,As_n2
        SUB 1
        JR As_n3
As_n2   CP 31
As_n3   ADC A,0
        LD (As_Vsl+1),A
As_VslG
        ADD A,L
        JR C,As_n4
        XOR A
As_n4   CP 16
        JR C,Ag_vol
        LD A,15
Ag_vol  ADD A,#F0
        LD L,A
        LD H,'tab_vol
        LD A,(HL)
        SRL E
        JR C,Am_vo0
Am_vol  OR 0
Am_vo0  EXA 
        LD A,D
       ;LD L,A
        RLCA 
       ;LD H,A
        JR C,As_n5
As_Nsl  LD A,0
        ADD A,E
        BIT 5,D
        JR Z,As_n6
        LD (As_Nsl+1),A
As_n6   LD HX,A
        JR As_n7

As_n5   LD A,E
        AND 31
        CP 16
        JR C,As_Esl
        OR #F0
As_Esl  ADD A,0
        BIT 5,D
        JR Z,As_n9
        LD (As_Esl+1),A
As_n9  EXX 
       ADD A,L
       LD L,A
       EXX 
As_n7   LD A,D
        RLCA 
       RLCA 
        RLCA 
        RLCA 
        AND 9
        LD LX,A
        POP BC
       ;LD A,D
As_dtn  LD HL,0        ;dsp_frq_smp
        ADD HL,BC
       BIT 6,D
       ;AND 64
        JR Z,As_n10
        LD (As_dtn+1),HL
As_n10  EX DE,HL

Ao_adr  LD SP,DUMMYORN ;ornament
        POP BC         ;loop C=beg B=end
Ao_dsp  LD A,0
        LD L,A
        INC A
        CP B
        JR C,$+3       ;bug NZ/C
        LD A,C
        LD (Ao_dsp+1),A
        LD H,0
        ADD HL,SP
        LD A,(As_note+1)
        ADD A,(HL)     ;dsp_orn
        ADD A,A
     JR NC,$+3
     XOR A
        LD L,A
        LD H,'tab_frq
        LD SP,HL
        POP HL
        ADD HL,DE
Asl_dsp LD BC,0
        ADD HL,BC
_m3=$+2
        LD (frq_A),HL

Asl_stp LD A,0
        DEC A
        JP M,Asl_s0
        JR NZ,Asl_s1
Asl_tfr LD DE,0
       ADD HL,DE
       EX DE,HL
        ADD HL,BC
        LD (Asl_dsp+1),HL
        JR Asl_sts     ;port off/on
Asl_plk
Asl_not LD A,0
        LD L,A
        ADD HL,HL
        LD H,'tab_frq
        LD SP,HL
        POP HL
As_note CP 0
        JR NC,$+3
        EX DE,HL
        SBC HL,DE
        JR C,Asl_sts
        LD (As_note+1),A
        XOR A
        LD L,A
        LD (Asl_dsp+1),HL
        JR $+4
Asl_sts LD A,0
Asl_s1  LD (Asl_stp+1),A
Asl_s0  EXA 

_m7=$+2
Avb_n0  LD (vol_A),A
Avb_stp LD A,0
        DEC A
        JP M,Bvb_lok
        JR NZ,Avb_n1
        DEC A          ;;
        LD HL,Avb_lok+1;;
        XOR (HL)       ;;
        LD (HL),A      ;;4
Avb_frq LD A,0
        JR NZ,Avb_n1
Avb_sts LD A,0
Avb_n1  LD (Avb_stp+1),A

;---- sampler_B ----

Bvb_lok LD A,-1
        LD H,A
        INC A
        JP Z,Bvb_n0

Bs_adr  LD SP,DUMMYSMP
        POP DE
Bs_dsp  LD A,0
        LD L,A
        INC A
        CP D
        JR C,Bs_n0
        LD A,E
Bs_n0   LD (Bs_dsp+1),A
       SLA L
       SLA L
      ;ADD HL,HL,HL,HL
        ADD HL,SP
        LD SP,HL
        POP DE
        LD A,D
       OR #F0
       ;AND 15
        LD L,A
        LD A,E
        ADD A,A
Bs_Vsl  LD A,16
        JR NC,Bs_VslG
        JP M,Bs_n2
        SUB 1
        JR Bs_n3
Bs_n2   CP 31
Bs_n3   ADC A,0
        LD (Bs_Vsl+1),A
Bs_VslG
        ADD A,L
        JR C,Bs_n4
        XOR A
Bs_n4   CP 16
        JR C,Bg_vol
        LD A,15
Bg_vol  ADD A,#F0
        LD L,A
        LD H,'tab_vol
        LD A,(HL)
        SRL E
        JR C,Bm_vo0
Bm_vol  OR 0
Bm_vo0  EXA 
        LD A,D
       ;LD L,A
        RLCA 
       ;LD H,A
        JR C,Bs_n5
Bs_Nsl  LD A,0
        ADD A,E
        BIT 5,D
        JR Z,Bs_n6
        LD (Bs_Nsl+1),A
Bs_n6   LD HX,A
        JR Bs_n7

Bs_n5   LD A,E
        AND 31
        CP 16
        JR C,Bs_Esl
        OR #F0
Bs_Esl  ADD A,0
        BIT 5,D
        JR Z,Bs_n9
        LD (Bs_Esl+1),A
Bs_n9  EXX 
       ADD A,L
       LD L,A
       EXX 
Bs_n7   LD A,D
       RRCA 
       RRCA 
       RRCA 
        AND 18
        OR LX
        LD LX,A
        POP BC
       ;LD A,D
Bs_dtn  LD HL,0
        ADD HL,BC
       BIT 6,D
       ;AND 64
        JR Z,Bs_n10
        LD (Bs_dtn+1),HL
Bs_n10  EX DE,HL

Bo_adr  LD SP,DUMMYORN
        POP BC
Bo_dsp  LD A,0
        LD L,A
        INC A
        CP B
        JR C,Bo_n0
        LD A,C
Bo_n0   LD (Bo_dsp+1),A
        LD H,0
        ADD HL,SP
        LD A,(Bs_note+1)
        ADD A,(HL)
        ADD A,A
     JR NC,$+3
     XOR A
        LD L,A
        LD H,'tab_frq
        LD SP,HL
        POP HL
        ADD HL,DE
Bsl_dsp LD BC,0
        ADD HL,BC
_m5=$+2
        LD (frq_B),HL

Bsl_stp LD A,0
        DEC A
        JP M,Bsl_s0
        JR NZ,Bsl_s1
Bsl_tfr LD DE,0
       ADD HL,DE
       EX DE,HL
        ADD HL,BC
        LD (Bsl_dsp+1),HL
        JR Bsl_sts
Bsl_plk
Bsl_not LD A,0
        LD L,A
        ADD HL,HL
        LD H,'tab_frq
        LD SP,HL
        POP HL
Bs_note CP 0
        JR NC,$+3
        EX DE,HL
        SBC HL,DE
        JR C,Bsl_sts
        LD (Bs_note+1),A
        XOR A
        LD L,A
        LD (Bsl_dsp+1),HL
        JR $+4
Bsl_sts LD A,0
Bsl_s1  LD (Bsl_stp+1),A
Bsl_s0  EXA 

_m8=$+2
Bvb_n0  LD (vol_B),A
Bvb_stp LD A,0
        DEC A
        JP M,Cvb_lok
        JR NZ,Bvb_n1
        DEC A          ;;
        LD HL,Bvb_lok+1;;
        XOR (HL)       ;;
        LD (HL),A      ;;4
Bvb_frq LD A,0
        JR NZ,Bvb_n1
Bvb_sts LD A,0
Bvb_n1  LD (Bvb_stp+1),A

;---- sampler_C ----

Cvb_lok LD A,-1
        LD H,A
        INC A
        JP Z,Cvb_n0

Cs_adr  LD SP,DUMMYSMP
        POP DE
Cs_dsp  LD A,0
        LD L,A
        INC A
        CP D
        JR C,Cs_n0
        LD A,E
Cs_n0   LD (Cs_dsp+1),A
       SLA L
       SLA L
      ;ADD HL,HL,HL,HL
        ADD HL,SP
        LD SP,HL
        POP DE
        LD A,D
       OR #F0
       ;AND 15
        LD L,A
        LD A,E
        ADD A,A
Cs_Vsl  LD A,16
        JR NC,Cs_VslG
        JP M,Cs_n2
        SUB 1
        JR Cs_n3
Cs_n2   CP 31
Cs_n3   ADC A,0
        LD (Cs_Vsl+1),A
Cs_VslG
        ADD A,L
        JR C,Cs_n4
        XOR A
Cs_n4   CP 16
        JR C,Cg_vol
        LD A,15
Cg_vol  ADD A,#F0
        LD L,A
        LD H,'tab_vol
        LD A,(HL)
        SRL E
        JR C,Cm_vo0
Cm_vol  OR 0
Cm_vo0  EXA 
        LD A,D
       ;LD L,A
        RLCA 
       ;LD H,A
        JR C,Cs_n5
Cs_Nsl  LD A,0
        ADD A,E
        BIT 5,D
        JR Z,Cs_n6
        LD (Cs_Nsl+1),A
Cs_n6   LD HX,A
        JR Cs_n7

Cs_n5   LD A,E
        AND 31
        CP 16
        JR C,Cs_Esl
        OR #F0
Cs_Esl  ADD A,0
        BIT 5,D
        JR Z,Cs_n9
        LD (Cs_Esl+1),A
Cs_n9  EXX 
       ADD A,L
       LD L,A
       EXX 
Cs_n7   LD A,D
        RRCA 
        RRCA 
       ;RRCA
        AND 36
        OR LX
        LD LX,A
        POP BC
       ;LD A,D
Cs_dtn  LD HL,0
        ADD HL,BC
       BIT 6,D
       ;AND 64
        JR Z,Cs_n10
        LD (Cs_dtn+1),HL
Cs_n10  EX DE,HL

Co_adr  LD SP,DUMMYORN
        POP BC
Co_dsp  LD A,0
        LD L,A
        INC A
        CP B
        JR C,Co_n0
        LD A,C
Co_n0   LD (Co_dsp+1),A
        LD H,0
        ADD HL,SP
        LD A,(Cs_note+1)
        ADD A,(HL)
        ADD A,A
     JR NC,$+3
     XOR A
        LD L,A
        LD H,'tab_frq
        LD SP,HL
        POP HL
        ADD HL,DE
Csl_dsp LD BC,0
        ADD HL,BC
_m6=$+2
        LD (frq_C),HL

Csl_stp LD A,0
        DEC A
        JP M,Csl_s0
        JR NZ,Csl_s1
Csl_tfr LD DE,0
       ADD HL,DE
       EX DE,HL
        ADD HL,BC
        LD (Csl_dsp+1),HL
        JR Csl_sts
Csl_plk
Csl_not LD A,0
        LD L,A
        ADD HL,HL
        LD H,'tab_frq
        LD SP,HL
        POP HL
Cs_note CP 0
        JR NC,$+3
        EX DE,HL
        SBC HL,DE
        JR C,Csl_sts
        LD (Cs_note+1),A
        XOR A
        LD L,A
        LD (Csl_dsp+1),HL
        JR $+4
Csl_sts LD A,0
Csl_s1  LD (Csl_stp+1),A
Csl_s0  EXA 

_m9=$+2
Cvb_n0  LD (vol_C),A
Cvb_stp LD A,0
        DEC A
        JP M,Esl_
        JR NZ,Cvb_n1
        DEC A          ;;
        LD HL,Cvb_lok+1;;
        XOR (HL)       ;;
        LD (HL),A      ;;4
Cvb_frq LD A,0
        JR NZ,Cvb_n1
Cvb_sts LD A,0
Cvb_n1  LD (Cvb_stp+1),A

;---- 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
        LD L,A
        ADD HL,DE
_m10=$+2
        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_
        LD DE,#FFBF
        LD C,-3
_m4=$+2
        LD HL,frq_A

        LD A,7
        CALL OUTER

        LD A,HX        ;noise
        LD (N_add+3),A
        ADD A,(HL)
        OUT (C),A
        INC L
        LD B,D
        OUT (C),L
        LD A,LX        ;mix
        LD B,E
        OUT (C),A
        INC L

        LD A,6
        CALL OUTER

        OR (HL)
       RET Z
        OUT (C),A
        LD (HL),0 ;;4
       RET 

;--- nota_A ---

Ani_vol JR NZ,Ani_v0
        LD (Avb_stp+1),A
        DEC A
        LD (Avb_lok+1),A
        RET 
Ani_v0
       DUP 4
       ADD A,A
       EDUP 
        LD (Ag_vol+1),A
       JP  An_clc2
Ani_s_o
       CALL ornPP
       LD (Ao_adr+1),BC
Ani_vse
       CALL NZ,EiPP
Ani_sm0 LD (Am_vol+1),A
        XOR A
        LD (Ao_dsp+1),A
        LD A,(DE)
        INC DE
       JR Anism0U ;
Ani_smp RET Z     ;
        ADD A,A   ;
Anism0U
       CALL smpPP
        LD (As_adr+1),BC

An_clc1 LD BC,#1020
An_clc2 LD A,(DE)
        INC DE
        ADD A,B
        JR C,Ani_s_o
        ADD A,C
        JR C,Ani_smp
        ADD A,B
        JR C,Ani_vol
        ADD A,B
        JR C,Ani_vqe
        ADD A,96
        JR C,Ani_not
        ADD A,B
        JR C,Ani_orn
        ADD A,48
        JR C,Ani_vse
        LD HL,A_eff+30
        LD BC,As_note+1
       CALL NPUSH
        JR An_clc1

Ani_vqe JR Z,Ani_v1
        DEC A
        JR NZ,Ani_e0
        LD A,(DE)
        LD (Ai_qty+1),A
        INC DE
        JR An_clc2

Ani_e0 CALL EiPP
Ani_v1  LD (Am_vol+1),A
        JR An_clc2
Ani_orn
       CALL ornPP
       LD (Ao_adr+1),BC
        LD (Ao_dsp+1),A
        JR An_clc1

Ani_not LD (As_note+1),A
        XOR A
        LD H,A
        LD L,A
        LD (As_dsp+1),A
        LD (As_Nsl+1),A
        LD (As_Esl+1),A
        LD (Ao_dsp+1),A
        LD (Asl_stp+1),A
        LD (Avb_lok+1),A
        LD (Avb_stp+1),A
       ;LD (Asl_dsp+1),HL
        LD (As_dtn+1),HL
       LD A,16
       LD (As_Vsl+1),A
      ;JR LDB1
        LD B,1
        RET 

;--- nota_B ---

Bni_vol JR NZ,Bni_v0
        LD (Bvb_stp+1),A
        DEC A
        LD (Bvb_lok+1),A
        RET 
Bni_v0
       DUP 4
       ADD A,A
       EDUP 
        LD (Bg_vol+1),A
       JP  Bn_clc2
Bni_s_o
       CALL ornPP
       LD (Bo_adr+1),BC
Bni_vse
       CALL NZ,EiPP
Bni_sm0 LD (Bm_vol+1),A
        XOR A
        LD (Bo_dsp+1),A
        LD A,(DE)
        INC DE
       JR Bnism0U ;
Bni_smp RET Z     ;
        ADD A,A   ;
Bnism0U
       CALL smpPP
        LD (Bs_adr+1),BC

Bn_clc1 LD BC,#1020
Bn_clc2 LD A,(DE)
        INC DE
        ADD A,B
        JR C,Bni_s_o
        ADD A,C
        JR C,Bni_smp
        ADD A,B
        JR C,Bni_vol
        ADD A,B
        JR C,Bni_vqe
        ADD A,96
        JR C,Bni_not
        ADD A,B
        JR C,Bni_orn
        ADD A,C
        JR C,Bni_noi
        ADD A,B
        JR C,Bni_vse
        LD HL,B_eff+30
        LD BC,Bs_note+1
       CALL NPUSH
        JR Bn_clc1

Bni_not LD (Bs_note+1),A
        XOR A
        LD H,A
        LD L,A
        LD (Bs_dsp+1),A
        LD (Bs_Nsl+1),A
        LD (Bs_Esl+1),A
        LD (Bo_dsp+1),A
        LD (Bsl_stp+1),A
        LD (Bvb_lok+1),A
        LD (Bvb_stp+1),A
       ;LD (Bsl_dsp+1),HL
        LD (Bs_dtn+1),HL
       LD A,16
       LD (Bs_Vsl+1),A
LDB1   LD B,1
        RET 

_m2=$+2
Bni_noi LD (N_frq),A;GLOBALnoise
        JR Bn_clc2

Bni_vqe JR Z,Bni_v1
        DEC A
        JR NZ,Bni_e0
        LD A,(DE)
        LD (Bi_qty+1),A
        INC DE
        JR Bn_clc2

Bni_e0 CALL EiPP
Bni_v1  LD (Bm_vol+1),A
        JR Bn_clc2
Bni_orn
       CALL ornPP
       LD (Bo_adr+1),BC
        LD (Bo_dsp+1),A
        JR Bn_clc1

;--- nota_C ---

Cni_not LD (Cs_note+1),A
        XOR A
        LD H,A
        LD L,A
        LD (Cs_dsp+1),A
        LD (Cs_Nsl+1),A
        LD (Cs_Esl+1),A
        LD (Co_dsp+1),A
        LD (Csl_stp+1),A
        LD (Cvb_lok+1),A
        LD (Cvb_stp+1),A
       ;LD (Csl_dsp+1),HL
        LD (Cs_dtn+1),HL
       LD A,16
       LD (Cs_Vsl+1),A
      ;JR LDB1
        LD B,1
        RET 

Cni_vol JR NZ,Cni_v0
        LD (Cvb_stp+1),A
        DEC A
        LD (Cvb_lok+1),A
        RET 
Cni_v0
       DUP 4
       ADD A,A
       EDUP 
        LD (Cg_vol+1),A
       JP  Cn_clc2
Cni_s_o
       CALL ornPP
       LD (Co_adr+1),BC
Cni_vse
       CALL NZ,EiPP
Cni_sm0 LD (Cm_vol+1),A
        XOR A
        LD (Co_dsp+1),A
        LD A,(DE)
        INC DE
       JR Cnism0U ;
Cni_smp RET Z     ;
        ADD A,A   ;
Cnism0U
       CALL smpPP
        LD (Cs_adr+1),BC

Cn_clc1 LD BC,#1020
Cn_clc2 LD A,(DE)
        INC DE
        ADD A,B
        JR C,Cni_s_o
        ADD A,C
        JR C,Cni_smp
        ADD A,B
        JR C,Cni_vol
        ADD A,B
        JR C,Cni_vqe
        ADD A,96
        JR C,Cni_not
        ADD A,B
        JR C,Cni_orn
        ADD A,48
        JR C,Cni_vse
        LD HL,C_eff+30
        LD BC,Cs_note+1
       CALL NPUSH
        JR Cn_clc1

Cni_vqe JR Z,Cni_v1
        DEC A
        JR NZ,Cni_e0
        LD A,(DE)
        LD (Ci_qty+1),A
        INC DE
        JR Cn_clc2

Cni_e0 CALL EiPP
Cni_v1  LD (Cm_vol+1),A
        JR Cn_clc2
Cni_orn
       CALL ornPP
       LD (Co_adr+1),BC
        LD (Co_dsp+1),A
        JR Cn_clc1

;---- special_effects_COM.xxxx ----

EiPP   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
       RET ;16

Aef_dSm LD A,(DE)      ;dsp_smp
        INC DE
        LD (As_dsp+1),A           ;;si
        RET 
Bef_dSm LD A,(DE)
        INC DE
        LD (Bs_dsp+1),A           ;;si
        RET 
Cef_dSm LD A,(DE)
        INC DE
        LD (Cs_dsp+1),A
        RET 

A_eff   DW Aef_slT ;1xxx,2xxx - sld_tone
        DW Aef_nsT ;3xxx - port_note
        DW Aef_dSm ;4.xx - dsp_smp
        DW Aef_dOr ;5.xx - dsp_orn
        DW Aef_vib ;6.xx - vibrato
Aef_vib LD A,(DE)
        INC DE
       JR Aef_vjr
        DW Eef_sld ;9xxx,Axxx - sld_env
        DW eff_tmp ;B.xx - temp

Aef_vjr LD (Avb_sts+1),A;fix fr/st;;ist
       LD (Avb_stp+1),A
        LD A,(DE)
        INC DE
        LD (Avb_frq+1),A;fix st/fr;;ifr
        RET 

B_eff   DW Bef_slT
        DW Bef_nsT
        DW Bef_dSm
        DW Bef_dOr
        DW Bef_vib
Bef_vib LD A,(DE)
        INC DE
       JR Bef_vjr
        DW Eef_sld
        DW eff_tmp

Bef_vjr LD (Bvb_sts+1),A;fix fr/st;;ist
       LD (Bvb_stp+1),A
        LD A,(DE)
        INC DE
        LD (Bvb_frq+1),A;fix st/fr;;ifr
        RET 

C_eff   DW Cef_slT
        DW Cef_nsT
        DW Cef_dSm
        DW Cef_dOr
        DW Cef_vib
int_qty DB 1
A_qty  DB 1
B_qty  DB 1
C_qty  DB 1
        DW Eef_sld
        DW eff_tmp

Cef_vib LD A,(DE)
        INC DE
        LD (Cvb_sts+1),A;fix fr/st
        LD (Cvb_stp+1),A
        LD A,(DE)
        INC DE
        LD (Cvb_frq+1),A;fix st/fr
        RET 

Aef_nsT
       CALL Aef_slT
       ;LD (Asl_pfr+1),HL         ;;pi
       CALL GETHL
        LD (Asl_tfr+1),HL         ;;pi
        LD (Asl_plk-1),A;port_on  ;;pi_lok
        LD HL,As_note+1           ;;si
        LD A,(HL)
        LD (Asl_not+1),A          ;;pi
AnsQ   EXA 
        LD (HL),A
       LD B,0
        RET 
Bef_nsT
       CALL Bef_slT
       ;LD (Bsl_pfr+1),HL         ;;pi
       CALL GETHL
        LD (Bsl_tfr+1),HL         ;;pi
        LD (Bsl_plk-1),A          ;;pi_lok
        LD HL,Bs_note+1           ;;si
        LD A,(HL)
        LD (Bsl_not+1),A          ;;pi
       JR AnsQ
Cef_nsT
       CALL Cef_slT
       ;LD (Csl_pfr+1),HL
       CALL GETHL
        LD (Csl_tfr+1),HL
        LD (Csl_plk-1),A
        LD HL,Cs_note+1
        LD A,(HL)
        LD (Csl_not+1),A
       JR AnsQ

Aef_slT LD A,(DE)
        LD (Asl_stp+1),A          ;;pi
       LD (Asl_sts+1),A
       CALL IGETHL     ;sld_ton
        LD (Asl_tfr+1),HL         ;;pi
       LD (Avb_stp+1),A
        LD A,Asl_sts-Asl_plk
        LD (Asl_plk-1),A;port_off ;;pi
        RET 

Bef_slT LD A,(DE)
        LD (Bsl_stp+1),A          ;;pi
       LD (Bsl_sts+1),A
       CALL IGETHL
        LD (Bsl_tfr+1),HL         ;;pi
       LD (Bvb_stp+1),A
        LD A,Bsl_sts-Bsl_plk
        LD (Bsl_plk-1),A          ;;pi
        RET 

Cef_slT LD A,(DE)
        LD (Csl_stp+1),A
        LD (Csl_sts+1),A
       CALL IGETHL
        LD (Csl_tfr+1),HL
        LD (Cvb_stp+1),A
        LD A,Csl_sts-Csl_plk
        LD (Csl_plk-1),A
        RET 

eff_tmp
        LD A,(DE)
DISPLAY $,"=#XX00"
tab_vol
        INC DE
        LD (temp+1),A
        RET 

ornPP  ADD A,A
       ADD A,tba_orn-tba_smp
smpPP  ADD A,tba_smp
       LD L,A
       LD C,(HL)
       INC L
       LD B,(HL)
        XOR A
       RET ;11
DUMMYORN
DUMMYSMP
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
DB 0,1,1,2,3,3,4,5,5,6,7,7,8,9,9,10
DB 0,1,1,2,3,4,4,5,6,7,7,8,9,10,10,11
DB 0,1,2,2,3,4,5,6,6,7,8,9,10,10,11,12
DB 0,1,2,3,3,4,5,6,7,8,9,10,10,11,12,13
DB 0,1,2,3,4,5,6,7,7,8,9,10,11,12,13,14
DB 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
tab_frq DS #C0
Eef_sld LD A,(DE)      ;sld_env
        LD (Esl_ist+1),A          ;;stp
       CALL IGETHL
        LD (Esl_ids+1),HL         ;;sds
        LD A,6
        LD (E_ins0),A
        RET ;16

       OUTI 
OUTER  LD B,D
       OUT (C),L
       LD B,E
       DEC A
       JR NZ,OUTER-2
       RET ;10

Aef_dOr LD A,(DE)      ;dsp_orn
        INC DE
        LD (Ao_dsp+1),A           ;;oi
        RET 
Bef_dOr LD A,(DE)
        INC DE
        LD (Bo_dsp+1),A           ;;oi
        RET 
Cef_dOr LD A,(DE)
        INC DE
        LD (Co_dsp+1),A
        RET ;6

IGETHL INC DE
GETHL
       EX DE,HL
       LD E,(HL)
       INC HL
       LD D,(HL)
       INC HL
       EX DE,HL
        XOR A
       RET ;9

NPUSH  RLA 
       ADD A,L
       LD L,A
     ;LD H,'A_eff
       LD A,(HL)
       INC L
       LD H,(HL)
       LD L,A
       EX (SP),HL
       LD A,(BC)
      EXA 
       JP (HL) ;11
LENP=$-PLAYER
        DISPLAY "SIZE=",LENP
T_m
        DW _m1
        DW _m2
        DW _m3
        DW _m4
        DW _m5
        DW _m6
        DW _m7
        DW _m8
        DW _m9
        DW _m10
        DW _m11
        DW _m12
        DW _m13
        DW _m14
T_m_l=$-T_m/2
        ENDM 

       IF0 $-#8000
MUZ
P1
        LOCAL 
pp
        ENDL 
        ORG #C000
P2
pp
        ORG $
        LD IX,#7000
        LD HL,P1
        LD DE,P2
        LD BC,LENP
CP0     LD A,(DE)
        SUB (HL)
        JR Z,CPOK
        CP #40
        JR NZ,ERR
        LD (IX),E
        LD (IX+1),D
        INC IX,IX
CPOK    INC HL,DE
        DEC BC
        LD A,B
        OR C
        JR NZ,CP0
        RET 
ERR     LD HL,0
        LD DE,#5800
        LD BC,768
        LDIR 
        RET 
       ELSE 
pp
       ENDIF D (Avb_stp+1),A
        LD A,Asl_sts-Asl_plk
        LD (Asl_plk-1),A;port_off ;;pi
        RET 

Bef_slT LD A,(DE)
        LD (Bsl_stp+1),A          ;;pi
       LD