PROTRACKER372 PTUPLAY H

From MSX MUSIC WIKI
Revision as of 23:30, 14 February 2020 by Kumokosi (talk | contribs) (Created page with "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...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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