1,345
edits
Changes
no edit summary
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 ?msxmsx=0 LD C,#A1 ELSE LD B,#BF
ENDIF
ENDIF
compile LD HL,module JR install JP play IFN ?port3frqport3=1;tone port. 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 IFN ?vib6LD 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),Avib6= LD (Ei_form+1),A ;vibrateno 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 ?ts2tabl-2 MACRO tablts2 IF0 port3 \0ef_nsT=0;2nd TS player;играет пат47 вместо пат0 и т.д.
ENDIF
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 IFN ?m4-2IF0 vib6 DS 4,1 MACRO m4ELSE SLA L \0ef_vib LD A,L(DE) INC DE ENDM JR \0VIB
ENDIF
DW Eef_sld IFN ?shut-2 DW eff_tmp MACRO shut ;LD HL,#E IFN msx LD BC,#A0 ELSE LD BC,$-3 ENDIF DEC L OUT (C),L IFN msx LD C,18!$&#A1FF00 ELSE LD B,#BF ENDIF OUT (C),A;0/255 JR NZ,$-10 ENDM DISPLAY "ERROR \0_eff
ENDIF
IFN ?esld-2 MACRO esldvib6Eef_sld ;0ef_vib LD A,(DE) ;INC DE \0VIB LD (Esl_ist\0vb_ist+1),A;fix fr/st LD A,(DE),L,A INC DEIF0 "\0 "-"C " LD A,(DE),H,A INC DE LD (Esl_ids\0vb_stp+1),HL LD A,6,(E_ins0),A RET ENDM
ENDIF
ENDIF
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,#618A_gli LD (Asl_dsp+1),HLA_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),AAsi_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_volumeavol LD (Ag_vol+1),A A_ins2 JR A_ins2Q XOR A ;ornament LD (Ao_dsp+1),AAoi_adr LD HL,0 LD (Ao_adr+1),HLAmi_vol LD A,0 LD (Am_vol+1),AA_ins2QA_ins3 JR A_ins3Q;port & sldApi_stp LD A,0 LD (Asl_stp+1),A LD (Asl_sts+1),AApi_tfr LD HL,0 LD (Asl_tfr+1),HL IFN port3Api_not LD A,0 LD (Asl_not+1),AApi_lok LD A,0 LD (Asl_plk-1),A ENDIF IFN vib6
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
IFN vib6
ENDIF
LD A,E;24
LD (A_ins5B_ins6),AA_ins5Q B_ins6Q ;--- install_E --- Ei_form LD A,0 ;env_form LD (E_form),A ;;4A_ins6 OR A JR A_ins6QZ,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),AAoi_dsp Ni_frq LD A,0,(N_frq),A ;;4 E_ins0 JR Ei_Q Esl_ids LD HL,0 ;stp_sld_env LD (Ao_dspEsl_sds+1),HL Esl_ist LD A,0 ;disp_ornamentstp_sld_p LD (Esl_stp+1),A LD (Esl_sts+1),A
LD A,E;24
LD (A_ins6E_ins0),AA_ins6Q;--- install_B --- XOR A LD L,A,H,AB_gli LD (Bsl_dsp+1),HLB_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),ABsi_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,0bvol LD (Bg_vol+1),A B_ins2 JR B_ins2Q XOR A LD (Bo_dsp+1),ABoi_adr LD HL,0 LD (Bo_adr+1),HLBmi_vol LD A,0 LD (Bm_vol+1),AB_ins2QB_ins3 JR B_ins3QBpi_stp LD A,0 LD (Bsl_stp+1),A LD (Bsl_sts+1),ABpi_tfr LD HL,0 LD (Bsl_tfr+1),HL IFN port3Bpi_not LD A,0 LD (Bsl_not+1),ABpi_lok LD A,0 LD (Bsl_plk-1),A ENDIF IFN vib6 XOR A LD (Bvb_stp+1),A ENDIF B_ins3Q IFN vib6B_ins4 JR B_ins4Q LD A,E;24 LD (B_ins4),ABvb_ist LD A,0 LD (Bvb_sts+1),A LD (Bvb_stp+1),ABvb_ifr LD A,0 LD (Bvb_frq+1),AB_ins4Q ENDIF B_ins5 JR B_ins5QBsi_dsp LD A,0 LD (Bs_dsp+1),A LD A,E;24 LD (B_ins5),AB_ins5QB_ins6 JR B_ins6QBoi_dsp LD A,0 LD (Bo_dsp+1),A LD A,E;24 LD (B_ins6),AB_ins6Q;--- install_E ---Ei_form LD A,0 ;env_form LD (E_form),A ;;4 OR A JR Z,tempEi_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),ANi_frq LD A,0,(N_frq),A ;;4Ei_Q E_ins0 JR Ei_QEsl_ids LD HL,0 ;stp_sld_env LD (Esl_sds+1),HLEsl_ist LD A,0 ;stp_sld_p LD (Esl_stp+1),A LD (Esl_sts+1),A LD A,E;24 LD (E_ins0),AEi_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
EXX
EXX
ENDIF
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
\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),ABch_adr LD DE,0 LD H,'compile CALL Bn_clc1 LD (Bch_adr+1),DEBi_qty LD A,0,(B_qty),ABqtyQ 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 NZCch_adr LD DE,0 LD H,'compile CALL Cn_clc1 LD (Cch_adr+1),DECi_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
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
ENDIF
ENDIF
ENDIF
ENDIF
PUSH HL
ADC A,D