PROTRACKER372 PLAYFAS4 H

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

playFAS4C���i�jTя;fast(long) player,can be INCLUDEd

  1. E21 3.31 by Nick/GDC Воронеж'97
  2. D86 3.51 fix Mm<M,MOnS+eR Самара 26xii00
  3. C03 3.695 fix AlCo 1vi01-26xi05
  4. 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