Changes

Jump to: navigation, search

PROTRACKER372 PTSPLAY H

8,446 bytes added, 23:49, 14 February 2020
no edit summary
PTUPLAY C��\V�W�ŸPTSPlay C��3w�x{�;RUNUniversal PT2'n'PT3 Turbo Sound player for ZX Spectrum;2004-2007 S.V.Bulba <vorobey@mail.khstu.ru>;http://bulba.untergrund.net/ (http://bulba.at.kz/) Release=CREATE RELOC TBL"0" ;pt3read SjAsm or ZXAsm version source for comments.67 micro SLOW player with  ;Conditional assembly;1 table) Current position counters at (Vars1+0) and (Vars2+0)CurPosCounter=0;2) Allow channels allocation bits at (START+10)ACBBAC=0;no ini3) Allow loop checking and disablingLoopChecker=0;85 PATTERNS4) Insert official identificatorIFN ?IdId=1ENDIF ;no 5) Set IY!for correct return to ZX BasicIFN ?BasicBasic=0ENDIF   ;ORG #C000 TonA=0TonB=2TonC=4Noise=6Mixer=7AmplA=8AmplB=9AmplC=10Env=11EnvTp=13 ;ChannelsVars ;STRUCT CHP;tempo1reset groupPsInOr=0PsInSm=1CrAmSl=2CrNsSl=3 MACRO ppCrEnSl=4TSlCnt=5CrTnSl=6TnAcc=8COnOff=10;reset group OnOffD=11 ;IX for PTDECOD here (+12)OffOnD=12OrnPtr=13SamPtr=15NNtSkp=17Note=18SlToNt=19Env_En=20Flags=21 ;Enabled - 0, SimpleGliss - 2TnSlDl=22TSlStp=23TnDelt=25NtSkCn=27Volume=28 ;ENDSCHP=29  ;STRUCT VRS CurPos=0PosSub=1 ModNum=2 ;bit0: ChipNum ;bit1: 1-reversed patterns order (AlCo TS)ChanA=3tba_smpChanB=MUZChanA+105CHPtba_ornChanC=tba_smpChanB+64CHP PLAYER;GlobalVarsfrq_AMODADDR=MUZChanC+CHPfrq_BOrnPtrs=MUZMODADDR+2frq_CSamPtrs=MUZMODADDR+4N_frqPatsPtr=MUZMODADDR+6vol_AAdInPtA=MUZMODADDR+8vol_BAdInPtB=MODADDR+10AdInPtC=MODADDR+12CrPsPtr=MUZMODADDR+914LPosPtr=MODADDR+16Delay=MODADDR+18DelyCnt=MODADDR+19ESldAdd=MODADDR+20CurESld=MODADDR+22Env_Del=MODADDR+24CurEDel=MODADDR+25Ns_Base=MODADDR+26AddToNs=MODADDR+27AddToEn=MODADDR+28vol_CEnvBase=MUZMODADDR+1029frq_EAYREGS=MUZMODADDR+1131 ;ENDSE_formVRS=MUZAYREGS+1314 playSTART LD HL,int_qtyMDLADDR ;DE - address of 2nd module for TS DEC (HL)JR INIT JP NZPLAY JR MUTESETUP DB 0  IFN Id DB "=UniPT2/PT3/TS-Player r.",Release,NOINS"=" ENDIF ;--- nota_A + calc_next_position --- INC HL IFN LoopChecker ;CHECKLP LD HL,A_qtySETUP BIT 0,(IY-100+ModNum) JR Z,CHL1 DEC SET 6,(HL) JR NZCHL2CHL1 SET 7,Aq_0(HL)Ach_adr LD DECHL2 BIT 0,tab_vol(HL) RET Z POP HL INC (IY-100+16DelyCnt) LD A,INC (DEIY-100+ChanA+NtSkCn) OR XOR A JR NZLD (IY-100+AYREGS+AmplA),Ps_n0A_m1=$ LD (IY-100+AYREGS+2AmplB),A LD (N_frqIY-100+AYREGS+AmplC),A ;;5!!! RET ENDIF  MUTE XOR A LD H,A LD DL,A ;; LD (sav_SP2VARS1+AYREGS+1AmplA),SPAPsa_beg LD (VARS1+AYREGS+AmplB),HL LD (VARS2+AYREGS+AmplA),MUZ+201A LD A(VARS2+AYREGS+AmplB),(HL) INC A JP ROUT INIT;AAAHL - AddressOfModule;6DE - AddresOf2ndModule PUSH DE PUSH HL JR NZLD HL,Ps_n1 ;NC ;6VARSPsa_lop LD (HL),MUZ0 LD DE,VARS+2011Ps_n1 LD EBC,(HL) ;6VAR0END-VARS-1 LDIR
INC HL
LD (Psa_begVARS1+1AdInPtA),HL ;ptr to zero LD (VARS2+AdInPtA),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 LD IY,VARS1+100 LD A,(START+10) AND 2 JP NZ,I_PT2  CALL INITPT3 LD HL,BC #1F18 ;(e_-SamCnv-2)*256+#18 ;ALASM :( LD (SamCnv),HL=adr_chn_B LD A,#BA LD (OrnCP),A LD (SamCP),A LD A,#7B LD (Bch_adr+1OrnLD),A LD (SamLD),A LD A,#87 LD (SamClc2),HLA
POP HL
;ADD HL,BC ;HL=adr_chn_CUse version and ton table of 1st module LD A,(Cch_adrIX+113-100),HL;EXTRACT VERSION NUMBERsav_SP2 LD SP,0Ps_n0_m12=$+1 SUB #30 LD HJR C,'tba_smpL20 CALL An_clc1CP 10 LD (Ach_adr+1)JR C,DEL21Ai_qty L20 LD A,06 L21 LD (A_qtyVersion),A DJNZ Aq_0 PUSH AF ;VolTable version CP 4 LD HA,B(IX+99-100) ;TONE TABLE NUMBER RLA AND 7 PUSH AF ;NoteTable number  LD LIY,BVARS2+100 LD A,(Asl_dspSTART+110) AND 48 JR Z,HLNOTSAq_0 CP 16;--- nota_B --- JR Z,TwoPT3s LD HLA,(Version) CP 7 JR C,B_qtyNOTS DEC LD A,(HLIX+98-100);ALCO TS MARKER CP #20 JR NZZ,NOTS LD HL,Bq_0VARS1Bch_adr LD DE,0_m13=$+1VARS2 LD HBC,'tba_smpVRS CALL Bn_clc1LDIR LD SET 1,(Bch_adrIY-100+1ModNum) LD C,A ADD A,DEABi_qty LD ADD A,0C SUB 2 LD (B_qtyTSSub),A DJNZ Bq_0 JR AlCoTS_TwoPT3s CALL INITPT3 AlCoTS_ LD HA,B1 LD L(is_ts),BA LD SET 0,(Bsl_dspIY-100+1ModNum),HLBq_0;--- nota_C ---NOTS LD BC,PT3PD LD HL,C_qty0 DEC (HL) LD DE,PT3EMPTYORN JR NZINITCOMMON I_PT2 CALL INITPT2 LD HL,Cq_0#51CBCch_adr LD DE(SamCnv),0_m14=$+1HL LD HA,'tba_smp#BB CALL Cn_clc1LD (OrnCP),A LD (Cch_adr+1SamCP),DEACi_qty LD A,0#7A LD (C_qtyOrnLD),A DJNZ Cq_0 LD H(SamLD),BA LD LA,B#80 LD (Csl_dsp+1SamClc2),A POP HLCq_0;--- install_E ---Ei_form LD A,0 ;env_form_m11=$+25 LD (E_formVersion),A OR PUSH AF LD A,2 JR Z,tempPUSH AFEi_frq LD HL,0 ;env_frq LD A,(E_frqSTART+110) AND 48 JR Z,HLNOTS2 XOR A LD LIY,AVARS2+100 LD HA,A1 LD (Ei_form+1is_ts),A LD SET 0,(Esl_frqIY-100+1ModNum) CALL INITPT2 NOTS2 LD BC,PT2PD LD HL,#8687 LD (Esl_stp+1)DE,PT2EMPTYORN INITCOMMON  IFN Basic LD IY,A#5C3A ENDIF
temp LD A,3 ;temp LD (int_qtyPTDEC),ANOINSplay_0 LD L,0 ;smp_sl_env EXX N_add LD IX,0 ;HX=noise LX=mixBC LD (sav_SP1+1),SPE_ins0 JR Ei_QEsl_ids LD HL,0 ;stp_sld_env LD (Esl_sds+1PsCalc),HLEsl_ist LD A,0 ;stp_sld_p LD (Esl_stp+1),A LD (Esl_sts+1),A LD A,24 LD (E_ins0),AEi_Q;---- sampler_A ----PUSH DE
Avb_lok ;note table data depacker;(c) Ivan Roshin LD ADE,T_PACK LD BC,T1_+(2*49)-1TP_0 LD A,(DE) INC DE CP 15*2 JR NC,TP_1
LD H,A
LD A,(DE)
LD L,A
INC DE
JR TP_2
TP_1 PUSH DE
LD D,0
LD E,A
ADD HL,DE
ADD HL,DE
POP DE
TP_2 LD A,H
LD (BC),A
DEC BC
LD A,L
LD (BC),A
DEC BC
SUB #F8*2
JR NZ,TP_0
 
INC A
JP ZLD (VARS1+DelyCnt),Avb_n0A LD (VARS2+DelyCnt),A LD HL,#F001 ;H - Volume, L - NtSkCn LD (VARS1+ChanA+NtSkCn),HL LD (VARS1+ChanB+NtSkCn),HL LD (VARS1+ChanC+NtSkCn),HL LD (VARS2+ChanA+NtSkCn),HL LD (VARS2+ChanB+NtSkCn),HL LD (VARS2+ChanC+NtSkCn),HL POP HL LD (VARS1+ChanA+OrnPtr),HL LD (VARS1+ChanB+OrnPtr),HL LD (VARS1+ChanC+OrnPtr),HL LD (VARS2+ChanA+OrnPtr),HL LD (VARS2+ChanB+OrnPtr),HL LD (VARS2+ChanC+OrnPtr),HL  POP AF ;NoteTableCreator (c) Ivan Roshin;A - NoteTableNumber*2+VersionForNoteTable;(xx1b - 3.xx..3.4r, xx0b - 3.4x..3.6x..VTII1.0)
As_adr LD SP,DUMMYSMP ;sample POP DE ;loop E=beg D=endAs_dsp LD A,0 LD L,A INC A CP D JR C,As_n0 ;bug NZ/C LD A,EAs_n0 LD (As_dsp+1),A SLA L SLA L ;ADD HL,HL,HL,HL ADD HL,SPNT_DATA 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,E0
ADD A,A
As_Vsl LD A,16 JR NC,As_VslG JP M,As_n2 SUB 1 JR As_n3As_n2 CP 31As_n3 ADC A,0 LD (As_Vsl+1)E,AAs_VslG ADD AHL,L JR C,As_n4 XOR AAs_n4 CP 16 JR C,Ag_volDE LD AE,15Ag_vol ADD A,#F0(HL) LD L,A LD H,'tab_vol LD A,(INC HL)
SRL E
JR CSBC A,A AND #A7 ;#00 (NOP) or #A7 (AND A) LD (L3),A EX DE,HL LD BC,Am_vo0T1_Am_vol OR 0 ADD HL,BCAm_vo0 EXA LD A,D(DE) ADD A,T_ ; LD LC,A RLCA ADC A,'T_ SUB C ; LD HB,A JR PUSH BC LD DE,NT_ PUSH DE  LD B,12L1 PUSH BC LD C,As_n5(HL)As_Nsl INC HL PUSH HL LD B,(HL)  PUSH DE EX DE,HL LD DE,23 LD HX,8 L2 SRL B RR CL3 DB #19 ;AND A or NOP LD A,C ADC A,D ;=ADC 0 ADD LD (HL),A,E BIT 5INC HL LD A,DB JR ZADC A,As_n6D LD (As_Nsl+1HL),AAs_n6 LD ADD HL,DE DEC HX,A JR As_n7NZ,L2
As_n5 LD A,E AND 31 CP 16 JR C,As_Esl OR #F0As_Esl ADD A,0 BIT 5,D JR Z,As_n9 LD (As_Esl+1),AAs_n9 EXX ADD A,L LD L,A EXX As_n7 LD A,D RLCA RLCA POP DE RLCA INC DE RLCA INC DE AND 9POP HL LD LX,AINC HL
POP BC
; DJNZ L1  POP HL POP DE  LD A,DE CP TCOLD_1 JR NZ,CORR_1 LD A,#FD LD (NT_+#2E),A As_dtn CORR_1 LD HLA,(DE) AND A JR Z,TC_EXIT RRA PUSH AF ADD A,A LD C,0 ;dsp_frq_smpA
ADD HL,BC
BIT 6 POP AF JR NC,CORR_2 DEC (HL) DEC (HL)CORR_2 INC (HL) AND A SBC HL,BC INC DE JR CORR_1 TC_EXIT  POP AF ;VolTableCreator (c) Ivan Roshin;A - VersionForVolumeTable (0..4 - 3.xx..3.4x; ;5.. - 2.x,3.5x..3.6x..VTII1.0)  CP 5 LD HL,#11 LD D,H LD E,H ;AND 64 LD A,#17 JR ZNC,As_n10M1 DEC L LD E,L XOR AM1 LD (As_dtnM2),A  LD IX,VT_+1)16  LD C,#FINITV2 PUSH HLAs_n10 ADD HL,DE EX DE,HL SBC HL,HL  LD B,#10INITV1 LD A,LM2 DB #7D LD A,H ADC A,0 LD (IX),A INC IX ADD HL,DE DJNZ INITV1
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
LD A,E
CP #77
JR NZ,M3
INC E
M3 DEC C
JR NZ,INITV2
 
JP ROUT
 
INITPT3 CALL SETMDAD
PUSH HL
LD DE,100
ADD HL,DE
Asl_dsp LD BCA,0(HL) LD (IY-100+Delay),A PUSH HL POP IX ADD HL,BCDE_m3=$ CALL SETCPPT LD E,(IX+2102-100) INC HL  IFN CurPosCounter LD (frq_AIY-100+PosSub),L ENDIF   ADD HL,DE CALL SETLPPT POP DE LD L,(IX+103-100) LD H,(IX+104-100) ADD HL,DE CALL SETPTPT LD HL,169 ADD HL,DE CALL SETORPT LD HL,105 ADD HL,DE SETSMPT LD (IY-100+SamPtrs),L LD (IY-100+SamPtrs+1),H RET
Asl_stp INITPT2 LD A,0(HL) DEC LD (IY-100+Delay),A JP M,Asl_s0PUSH HL JR NZ,Asl_s1PUSH HLAsl_tfr LD DE,0 ADD PUSH HL,DE EX DE, INC HL ADD INC HL,BC LD A,(Asl_dsp+1HL), INC HL JR Asl_sts ;port off/onAsl_plkAsl_not LD A,0CALL SETSMPT LD LE,A(HL) ADD HL,INC HL LD H,'tab_frq LD SPD,(HL)
POP HL
As_note CP 0 JR NC,$+3 EX DE,HLAND A
SBC HL,DE
JR CALL SETMDAD POP HL LD DE,67 ADD HL,DE CALL SETORPT LD E,32 ADD HL,DE LD C,Asl_sts(HL) INC HL LD B,(HL) LD E,30 ADD HL,DE CALL SETCPPT LD E,A INC HL  IFN CurPosCounter LD (IY-100+PosSub),L ENDIF   ADD HL,DE CALL SETLPPT POP HL ADD HL,BC SETPTPT LD (As_noteIY-100+PatsPtr),L LD (IY-100+PatsPtr+1),H RET  SETMDAD LD (IY-100+MODADDR),L LD (IY-100+MODADDR+1),H RET  SETORPT LD (IY-100+OrnPtrs),L LD (IY-100+OrnPtrs+1),H RET  SETCPPT LD (IY-100+CrPsPtr),L LD (IY-100+CrPsPtr+1),H RET  SETLPPT LD (IY-100+LPosPtr),L LD (IY-100+LPosPtr+1),H RET  SETENBS LD (IY-100+EnvBase),L LD (IY-100+EnvBase+1),H RET  SETESLD LD (IY-100+CurESld),L LD (IY-100+CurESld+1),H RET  GETIX PUSH IY POP IX ADD IX,DE RET  PTDECOD CALL GETIXPTDEC=$+1 JP #C3C3 ;PT2 pattern decoderPD2_SAM CALL SETSAM JR PD2_LOOP PD2_EOff LD (IX-12+Env_En),A JR PD2_LOOP PD2_ENV LD (IX-12+Env_En),16 LD (IY-100+AYREGS+EnvTp),A XOR LD A,(BC) INC BC
LD L,A
LD A,(Asl_dsp+1BC) INC BC LD H,HLA CALL SETENBS JR PD2_LOOP PD2_ORN CALL SETORN JR $+4PD2_LOOP PD2_SKIP INC AAsl_sts LD (IX-12+NNtSkp),A,0Asl_s1 JR PD2_LOOP PD2_VOL RRCA RRCA RRCA RRCA LD (Asl_stpIX-12+1Volume),AAsl_s0 EXA JR PD2_LOOP
_m7=$+PD2_DEL CALL C_DELAY JR PD2_LOOP PD2_GLIS SET 2Avb_n0 LD ,(vol_AIX-12+Flags),AAvb_stp LD A,0 DEC INC A JP MLD (IX-12+TnSlDl),Bvb_lokA JR NZLD (IX-12+TSlCnt),Avb_n1 DEC A ;; LD HLA,Avb_lok+1;;(BC) XOR (HL) ;;INC BC LD (HLIX-12+TSlStp),A ;;4Avb_frq LD ADD A,0A JR NZSBC A,Avb_n1Avb_sts LD A,0Avb_n1 LD (Avb_stpIX-12+TSlStp+1),A SCF JR PD2_LP2 PT2PD AND A
;---- sampler_B ----PD2_LP2 EXA
Bvb_lok PD2_LOOP LD A,-1(BC) LD HINC BC ADD A,#20 JR Z,PD2_REL JR C,PD2_SAM ADD A,96 JR C,PD2_NOTE INC A JR Z,PD2_EOff ADD A,15 JP Z,PD_FIN JR C,PD2_ENV ADD A,#10 JR C,PD2_ORN ADD A,#40 JR C,PD2_SKIP ADD A,#10 JR C,PD2_VOL INC A JR Z,PD2_DEL INC A JR Z,PD2_GLIS INC A JR Z,PD2_PORT
INC A
JP JR Z,Bvb_n0PD2_STOP LD A,(BC) INC BC LD (IX-12+CrNsSl),A JR PD2_LOOP PD2_PORT RES 2,(IX-12+Flags) LD A,(BC) INC BC INC BC ;ignoring precalc delta to right sound INC BC SCF JR PD2_LP2 PD2_STOP LD (IX-12+TSlCnt),A JR PD2_LOOP PD2_REL LD (IX-12+Flags),A JR PD2_EXIT
Bs_adr PD2_NOTE LD SPL,DUMMYSMPA POP DELD A,(IX-12+Note)Bs_dsp LD (PrNote+1),A LD (IX-12+Note),L XOR A LD (IX-12+TSlCnt),A SET 0,(IX-12+Flags) EXA JR NC,NOGLIS2 BIT 2,(IX-12+Flags) JR NZ,NOPORT2 LD (LoStep),A ADD A,A SBC A,A EXA LD H,A
LD L,A
INC A
CP DCALL SETPORTNOPORT2 LD (IX-12+TSlCnt),1NOGLIS2 XOR A  PD2_EXIT LD (IX-12+PsInSm),A LD (IX-12+PsInOr),A LD (IX-12+CrTnSl),A LD (IX-12+CrTnSl+1),A JP PD_FIN ;PT3 pattern decoderPD_OrSm LD (IX-12+Env_En),0 CALL SETORNPD_SAM_ LD A,(BC) INC BC RRCA  PD_SAM CALL SETSAM JR PD_LOOP PD_VOL RRCA RRCA RRCA RRCA LD (IX-12+Volume),A JR PD_LP2 PD_EOff LD (IX-12+Env_En),A LD (IX-12+PsInOr),A JR PD_LP2 PD_SorE DEC A JR NZ,PD_ENV LD A,(BC) INC BC LD (IX-12+NNtSkp),A JR PD_LP2 PD_ENV CALL SETENV JR PD_LP2 PD_ORN CALL SETORN JR CPD_LOOP PD_ESAM LD (IX-12+Env_En),Bs_n0A LD (IX-12+PsInOr),A CALL NZ,ESETENV JR PD_SAM_ Bs_n0 PT3PD LD A,(Bs_dspIX-12+Note) LD (PrNote+1),A SLA LD L,(IX-12+CrTnSl) LD H,(IX-12+CrTnSl+1) LD (PrSlide+1),HL PD_LOOP LD DE,#2010PD_LP2 LD A,(BC) INC BC ADD A,E JR C,PD_OrSm ADD A,D SLA L JR Z,PD_FIN JR C,PD_SAM ; ADD HLA,HLE JR Z,HLPD_REL JR C,HLPD_VOL ADD HLA,SPE LD SPJR Z,HLPD_EOff POP DEJR C,PD_SorE LD ADD A,D96 OR #F0 JR C,PD_NOTE ;AND 15 ADD A,E LD LJR C,PD_ORN ADD A,D JR C,PD_NOIS LD ADD A,E JR C,PD_ESAM
ADD A,A
Bs_Vsl LD E,A LD HL,16SPCCOMS+#FF20-#2000 JR NCADD HL,Bs_VslGDE JP MLD E,Bs_n2(HL) SUB 1INC HL LD D,(HL) PUSH DE JR Bs_n3PD_LOOPBs_n2 CP 31Bs_n3 ADC PD_NOIS LD (IY-100+Ns_Base),A JR PD_LP2 PD_REL RES 0,0(IX-12+Flags) JR PD_RES PD_NOTE LD (Bs_VslIX-12+1Note),ABs_VslG ADD ASET 0,L JR C,Bs_n4(IX-12+Flags)
XOR A
Bs_n4 CP 16PD_RES LD (PDSP_+1),SP JR CLD SP,Bg_volIX LD AH,15Bg_vol ADD A,#F0
LD L,A
PUSH HL PUSH HL PUSH HL PUSH HL PUSH HL PUSH HLPDSP_ LD HSP,#3131 PD_FIN LD A,(IX-12+NNtSkp) LD (IX-12+NtSkCn),'tab_volA RET  C_PORTM LD A,(HLBC) SRL EINC BC;SKIP PRECALCULATED TONE DELTA (BECAUSE;CANNOT BE RIGHT AFTER PT3 COMPILATION) JR C,Bm_vo0INC BCBm_vol OR 0 INC BCBm_vo0 EXA LD A,D (BC) ;LD L,ASIGNED TONE STEP RLCA INC BC ; LD H(LoStep),A JR C,Bs_n5Bs_Nsl LD A,0(BC) INC BC ADD AND A,E BIT 5,DEXA JR ZLD L,Bs_n6(IX-12+CrTnSl) LD H,(Bs_NslIX-12+CrTnSl+1),ABs_n6 LD HX,A JR Bs_n7
Bs_n5 LD ;Set portamento variables;A,E AND 31 CP 16 JR C,Bs_Esl OR #F0Bs_Esl ADD - Delay; A,0 BIT 5,D JR Z,Bs_n9 LD ' - Hi(Bs_Esl+1Step),ABs_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 ZF' - (A,DBs_dtn LD HL,'=0 ADD HL,BC BIT 6,D );AND 64 JR Z,Bs_n10 LD (Bs_dtn+1),HLBs_n10 EX DE,HL- CrTnSl
Bo_adr SETPORT RES 2,(IX-12+Flags) LD (IX-12+TnSlDl),A LD (IX-12+TSlCnt),A PUSH HL LD SPDE,DUMMYORNNT_ POP BCLD A,(IX-12+Note)Bo_dsp LD (IX-12+SlToNt),A ADD A,0A
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,SPDE LD A,(Bs_note+1HL) INC HL LD H,(HL) ADD LD L,A PUSH HLPrNote LD A,#3E LD (HLIX-12+Note),A
ADD A,A
JR NC,$+3
XOR A
LD L,A
LD H,'tab_frq LD SP,HL POP HL0
ADD HL,DE
Bsl_dsp LD BC,0 ADD HLE,BC_m5=$+2 LD (frq_B),HL Bsl_stp LD A,0 DEC A JP M,Bsl_s0 JR NZ,Bsl_s1Bsl_tfr LD DE,0 ADD HL,DE EX DE,HL ADD HL,BC LD (Bsl_dsp+1),HL JR Bsl_stsBsl_plkBsl_not LD A,0 LD L,A ADD HL,INC HL LD H,'tab_frq LD SPD,(HL)
POP HL
Bs_note SBC HL,DE LD (IX-12+TnDelt),L LD (IX-12+TnDelt+1),H POP DEVersion=$+1 LD A,#3E CP 06 JR NCC,OLDPRTM ;Old 3xxx for PT v3.5-PrSlide LD DE,#1111 LD (IX-12+CrTnSl),E LD (IX-12+CrTnSl+1),DLoStep=$+31OLDPRTM LD A,#3E EXA JR Z,NOSIG
EX DE,HL
NOSIG SBC HL,DE JP P,SET_STP CPL EXA NEG EXA SET_STP LD (IX-12+TSlStp+1),A EXA LD (IX-12+TSlStp),A LD (IX-12+COnOff),0 RET  C_GLISS SET 2,(IX-12+Flags) LD A,(BC) INC BC LD (IX-12+TnSlDl),A AND A JR NZ,GL36 LD A,(Version) ;AlCo PT3.7+ CP 7 SBC A,A INC AGL36 LD (IX-12+TSlCnt),A LD A,(BC) INC BC EXA LD A,(BC) INC BC JR CSET_STP C_SMPOS LD A,Bsl_sts(BC) INC BC LD (Bs_noteIX-12+1PsInSm),A RET  C_ORPOS LD A,(BC) INC BC LD (IX-12+PsInOr),A RET  C_VIBRT LD A,(BC) INC BC LD (IX-12+OnOffD),A LD (IX-12+COnOff),A LD A,(BC) INC BC LD (IX-12+OffOnD),A
XOR A
LD (IX-12+TSlCnt),A
LD (IX-12+CrTnSl),A
LD (IX-12+CrTnSl+1),A
RET
 
C_ENGLS LD A,(BC)
INC BC
LD (IY-100+Env_Del),A
LD (IY-100+CurEDel),A
LD A,(BC)
INC BC
LD L,A
LD A,(Bsl_dsp+1BC),HL JR $+4INC BCBsl_sts LD H,A LD (IY-100+ESldAdd),0LBsl_s1 LD (Bsl_stpIY-100+ESldAdd+1),AHBsl_s0 EXA RET
_m8=$+2Bvb_n0 C_DELAY LD A,(vol_BBC),ABvb_stp LD A,0 DEC AINC BC JP M,Cvb_lok JR NZLD (IY-100+Delay),Bvb_n1 DEC A ;; LD HL,Bvb_lokVARS2+1;ModNum ;if AlCo_TS XOR BIT 1,(HL) ;; RET Z LD (HLVARS1+Delay),A ;;4Bvb_frq LD (VARS1+DelyCnt),A,0 JR NZ,Bvb_n1Bvb_sts LD A,0Bvb_n1 LD (Bvb_stpVARS2+1Delay),A ;---- sampler_C ---- RET
Cvb_lok SETENV LD (IX-12+Env_En),E LD (IY-100+AYREGS+EnvTp),A LD A,-1(BC) INC BC
LD H,A
INC A JP Z,Cvb_n0 Cs_adr LD SP,DUMMYSMP POP DECs_dsp LD A,0 LD L,A INC A CP D JR C,Cs_n0 LD A,ECs_n0 LD (Cs_dsp+1BC),A SLA L SLA L ;ADD HL,HL,HL,HL ADD HL,SP LD SP,HL POP DE LD A,D OR #F0 ;AND 15INC BC
LD L,A
LD A,E ADD A,ACs_Vsl LD A,16 JR NC,Cs_VslG JP M,Cs_n2 SUB 1 JR Cs_n3Cs_n2 CP 31Cs_n3 ADC A,0 LD (Cs_Vsl+1),ACs_VslG ADD A,L JR C,Cs_n4CALL SETENBS
XOR A
Cs_n4 CP 16 LD (IX-12+PsInOr),A JR CLD (IY-100+CurEDel),Cg_volA LD AH,15Cg_vol ADD A,#F0
LD L,A
JP SETESLD SETORN ADD A,A LD E,A LD HD,0 LD (IX-12+PsInOr),'tab_volD LD AL,(HLIY-100+OrnPtrs) SRL ELD H,(IY-100+OrnPtrs+1) JR CADD HL,Cm_vo0DECm_vol OR 0 LD E,(HL)Cm_vo0 EXA INC HL LD AD,D(HL) ; LD L,A(IY-100+MODADDR) LD H,(IY-100+MODADDR+1) ADD HL,DE RLCA LD (IX-12+OrnPtr),L ; LD (IX-12+OrnPtr+1),HC_NOP RET  SETSAM ADD A,A JR CLD E,Cs_n5ACs_Nsl LD AD,0 LD L,(IY-100+SamPtrs); LD H,(IY-100+SamPtrs+1); ADD AHL,DE LD E,(HL) BIT 5INC HL LD D,D(HL) JR ZLD L,Cs_n6(IY-100+MODADDR) LD H,(Cs_NslIY-100+MODADDR+1) ADD HL,DE LD (IX-12+SamPtr),ALCs_n6 LD HX(IX-12+SamPtr+1),AH JR Cs_n7RET
Cs_n5 LD A,E;ALL 16 ADDRESSES TO PROTECT FROM BROKEN PT3 MODULES AND 31SPCCOMS DW C_NOP CP 16DW C_GLISS JR C,Cs_EslDW C_PORTM OR #F0Cs_Esl ADD A,0DW C_SMPOS BIT 5,DDW C_ORPOS JR Z,Cs_n9DW C_VIBRT LD (Cs_Esl+1),ACs_n9 EXX ADD A,L LD L,A EXX Cs_n7 LD A,DDW C_NOP RRCA DW C_NOP RRCA ;RRCADW C_ENGLS AND 36DW C_DELAY OR LXDW C_NOP LD LX,ADW C_NOP POP BC ;LD A,DCs_dtn LD HL,0DW C_NOP ADD HL,BC BIT 6,D ;AND 64DW C_NOP JR Z,Cs_n10DW C_NOP LD (Cs_dtn+1),HLCs_n10 EX DE,HLDW C_NOP
Co_adr CHREGS CALL GETIX XOR A LD (Ampl),A BIT 0,(IX+Flags) PUSH HL JP Z,CH_EXIT LD (CSP_+1),SP LD L,(IX+OrnPtr) LD H,(IX+OrnPtr+1) LD SP,DUMMYORNHL POP BCDE LD H,ACo_dsp LD A,0(IX+PsInOr)
LD L,A
ADD HL,SP
INC A
;PT2 PT3OrnCP INC A ;CP E CP D JR C,CH_ORPSOrnLD DB 1 ;LD A,D LD A,ECH_ORPS LD (IX+PsInOr),A LD A,(IX+Note) ADD A,(HL) JP P,CH_NTP XOR ACH_NTP CP B96 JR C,Co_n0CH_NOK LD A,C95CH_NOK ADD A,A EXA LD L,(IX+SamPtr)Co_n0 LD H,(Co_dspIX+SamPtr+1) LD SP,AHL POP DE
LD H,0
ADD HL,SP LD A,(Cs_noteIX+1PsInSm) ADD LD B,A,(HL)
ADD A,A
JR NCSamClc2 ADD A,$+3 XOR A;or ADD A,B for PT2
LD L,A
LD HADD HL,'tab_frqSP
LD SP,HL
LD A,B
INC A
;PT2 PT3
SamCP INC A ;CP E CP D
JR C,CH_SMPS
SamLD DB 1 ;LD A,D LD A,E
CH_SMPS LD (IX+PsInSm),A
POP BC
POP HL
 
;Convert PT2 sample to PT3
;PT2 PT3
SamCnv POP HL ;BIT 2,C JR e_
POP HL
LD H,B
JR NZ,$+8
EX DE,HL
AND A
SBC HL,HL
SBC HL,DE
LD D,C
RR C
SBC A,A
CPL
AND #3E
RR C
RR B
AND C
LD C,A
LD A,B
RRA
RRA
RR D
RRA
AND #9F
LD B,A
 
e_ LD E,(IX+TnAcc)
LD D,(IX+TnAcc+1)
ADD HL,DE
Csl_dsp LD BC BIT 6,0B ADD HLJR Z,BC_m6=$+2CH_NOAC LD (frq_CIX+TnAcc),HL Csl_stp LD A,0 DEC AL JP M,Csl_s0 JR NZ,Csl_s1Csl_tfr LD DE(IX+TnAcc+1),0H ADD HL,DE CH_NOAC EX DE,HL ADD HL,BCEXA LD (Csl_dsp+1),HL JR Csl_stsCsl_plkCsl_not LD ADD A,0NT_
LD L,A
ADD HLADC A,HL'NT_ SUB L LD H,'tab_frqA
LD SP,HL
POP HL
Cs_note CP 0 ADD HL,DE LD E,(IX+CrTnSl) LD D,(IX+CrTnSl+1) ADD HL,DECSP_ LD SP,#3131 EX (SP),HL XOR A OR (IX+TSlCnt) JR NCZ,$CH_AMP DEC (IX+3TSlCnt) JR NZ,CH_AMP LD A,(IX+TnSlDl) LD (IX+TSlCnt),A LD L,(IX+TSlStp) LD H,(IX+TSlStp+1) LD A,H ADD HL,DE LD (IX+CrTnSl),L LD (IX+CrTnSl+1),H BIT 2,(IX+Flags) JR NZ,CH_AMP LD E,(IX+TnDelt) LD D,(IX+TnDelt+1) AND A JR Z,CH_STPP
EX DE,HL
CH_STPP SBC HL,DE JP M,CH_AMP LD A,(IX+SlToNt) LD (IX+Note),A XOR A LD (IX+TSlCnt),A LD (IX+CrTnSl),A LD (IX+CrTnSl+1),ACH_AMP LD A,(IX+CrAmSl) BIT 7,C JR Z,CH_NOAM BIT 6,C JR Z,CH_AMIN CP 15 JR Z,CH_NOAM INC A JR CH_SVAMCH_AMIN CP -15 JR Z,Csl_stsCH_NOAM DEC ACH_SVAM LD (Cs_noteIX+1CrAmSl),ACH_NOAM LD L,A LD A,B AND 15 ADD A,L JP P,CH_APOS
XOR A
CH_APOS CP 16
JR C,CH_VOL
LD A,15
CH_VOL OR (IX+Volume)
ADD A,VT_
LD L,A
ADC A,'VT_ SUB L LD H,A LD A,(Csl_dspHL)CH_ENV BIT 0,C JR NZ,CH_NOEN OR (IX+1Env_En)CH_NOEN LD (Ampl),HLA BIT 7,B LD A,C JR Z,NO_ENSL RLA RLA SRA A SRA A SRA A ADD A,(IX+CrEnSl) ;SEE COMMENT BELOW BIT 5,B JR $Z,NO_ENAC LD (IX+CrEnSl),ANO_ENAC ADD A,(IY-100+4AddToEn) ;BUG IN PT3 - NEED WORD HERECsl_sts LD (IY-100+AddToEn),A JR CH_MIXNO_ENSL RRA ADD A,0(IX+CrNsSl) LD (IY-100+AddToNs),A BIT 5,B JR Z,CH_MIX LD (IX+CrNsSl),ACsl_s1 CH_MIX LD A,B RRA AND #48CH_EXIT OR (IY-100+AYREGS+Mixer) RRCA LD (IY-100+AYREGS+Mixer),A POP HL XOR A OR (IX+COnOff) RET Z DEC (IX+COnOff) RET NZ XOR (IX+Flags) LD (IX+Flags),A RRA LD A,(Csl_stpIX+1OnOffD) JR C,CH_ONDL LD A,(IX+OffOnD)CH_ONDL LD (IX+COnOff),ACsl_s0 EXA RET
_m9=$+2PLAY_ XOR ACvb_n0 LD (vol_CIY-100+AddToEn),ACvb_stp LD (IY-100+AYREGS+Mixer),A,0
DEC A
JP MLD (IY-100+AYREGS+EnvTp),Esl_A DEC (IY-100+DelyCnt) JR JP NZ,Cvb_n1PL2 DEC A ;;(IY-100+ChanA+NtSkCn) JR NZ,PL1B LD HLC,Cvb_lok(IY-100+1;;AdInPtA) XOR LD B,(HLIY-100+AdInPtA+1) ;; LD A,(HLBC),A ;;4Cvb_frq LD AND A,0 JR NZ,Cvb_n1PL1ACvb_sts LD D,A LD (IY-100+Ns_Base),A LD L,0(IY-100+CrPsPtr)Cvb_n1 LD H,(Cvb_stpIY-100+CrPsPtr+1) INC HL LD A,(HL) INC A JR NZ,PLNLP  IFN LoopChecker CALL CHECKLP ENDIF
;---- sampler_E - LD L,(IY-100+LPosPtr) LD H,(IY-100+LPosPtr+1) LD A,(HL) INC APLNLP CALL SETCPPT DEC A BIT 1,(IY-100+ModNum) JR Z,NoAlCoTSSub=$+1 SUB #D6 CPL NoAlCo ;PT2 PT3PsCalc DEC A ;ADD A,A NOP DEC A ;ADD A,(HL) NOP ADD A,A LD E,A RL D
Esl_ EXX IFN CurPosCounter
LD A,L
Esl_frq SUB (IY-100+PosSub) LD (IY-100+CurPos),A ENDIF   LD L,(IY-100+PatsPtr) LD H,(IY-100+PatsPtr+1) ADD HL,DE LD E,0 ;stp_sl_env(IY-100+MODADDR)E_frq LD D,(IY-100+MODADDR+1) LD (PSP_+1),SP LD SP,HL POP HL ADD HL,0 ;frq_envDE ADD ALD B,LH LD C,L,A POP HL
ADD HL,DE
_m10=$+2 LD (frq_EIY-100+AdInPtB),HLLEsl_stp LD A(IY-100+AdInPtB+1),0 DEC AH JP M,sav_SP1 JR NZ,E_n0Esl_sds LD POP HL,0
ADD HL,DE
LD (Esl_frqIY-100+AdInPtC),L LD (IY-100+AdInPtC+1),HLHEsl_sts PSP_ LD ASP,0#3131E_n0 PL1A LD DE,ChanA+12-100 CALL PTDECOD LD (IY-100+AdInPtA),C LD (Esl_stpIY-100+AdInPtA+1),AB
;PL1B DEC (IY-100+ChanB+NtSkCn) JR NZ,PL1C LD DE,ChanB+12-100 LD C,(IY-100+AdInPtB) LD B,(IY- out_to_processor --100+AdInPtB+1) CALL PTDECOD LD (IY-100+AdInPtB),C LD (IY-100+AdInPtB+1),B
sav_SP1 LD SPPL1C DEC (IY-100+ChanC+NtSkCn) JR NZ,0out_PL1D LD DE,#FFBFChanC+12-100 LD C,(IY-3100+AdInPtC)_m4=$ LD B,(IY-100+2AdInPtC+1) CALL PTDECOD LD HL(IY-100+AdInPtC),C LD (IY-100+AdInPtC+1),frq_AB
PL1D LD A,7(IY-100+Delay) CALL OUTERLD (IY-100+DelyCnt),A
PL2 LD DE,ChanA-100 LD L,(IY-100+AYREGS+TonA) LD H,(IY-100+AYREGS+TonA+1) CALL CHREGS LD (IY-100+AYREGS+TonA),L LD (IY-100+AYREGS+TonA+1),HAmpl=$+1 LD A,HX ;noise#3E LD (N_addIY-100+AYREGS+3AmplA),A ADD LD DE,ChanB-100 LD L,(IY-100+AYREGS+TonB) LD H,(IY-100+AYREGS+TonB+1) CALL CHREGS LD (IY-100+AYREGS+TonB),L LD (IY-100+AYREGS+TonB+1),H LD A,(HLAmpl) OUT LD (CIY-100+AYREGS+AmplB),A INC LD DE,ChanC-100 LD L,(IY-100+AYREGS+TonC) LD BH,D(IY-100+AYREGS+TonC+1) CALL CHREGS OUT LD (CIY-100+AYREGS+TonC),L LD A(IY-100+AYREGS+TonC+1),LX ;mixH LD BA,E(Ampl) OUT LD (CIY-100+AYREGS+AmplC),A INC L
LD A,6(IY-100+Ns_Base) CALL OUTERADD A,(IY-100+AddToNs) LD (IY-100+AYREGS+Noise),A
OR LD A,(HLIY-100+AddToEn) RET Z LD E,A ADD A,A SBC A,A OUT (C)LD D,A LD L,(HLIY-100+EnvBase) LD H,0 ;;4(IY-100+EnvBase+1) RET ADD HL,DE LD E,(IY-100+CurESld);--- nota_A LD D,(IY-100+CurESld+1) ADD HL,DE LD (IY-100+AYREGS+Env),L LD (IY-100+AYREGS+Env+1),H
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 OR (Ao_dspIY-100+1CurEDel),A LD A,RET Z DEC (DEIY-100+CurEDel) INC DE JR Anism0U ;Ani_smp RET Z ;NZ ADD LD A,(IY-100+Env_Del) LD (IY-100+CurEDel),A ;Anism0U CALL smpPP LD L,(IY-100+ESldAdd) LD H,(As_adrIY-100+ESldAdd+1) ADD HL,BCDE JP SETESLD
An_clc1 PLAY LD BCIY,#1020VARS1+100 CALL PLAY_An_clc2 LD A,(DEis_ts) INC DE ADD AND A,B JR CZ,Ani_s_oPL_nts ADD ALD IY,CVARS2+100 JR C,Ani_smp ADD A,B JR C,Ani_vol ADD A,B JR C,Ani_vqe ADD A,96 JR C,Ani_notCALL PLAY_ ADD A,BPL_nts JR C,Ani_orn ADD A,48 JR C,Ani_vseIFN Basic LD HLIY,A_eff+30#5C3A LD BC,As_note+1 CALL NPUSH JR An_clc1ENDIF
Ani_vqe JR ZROUT LD BC,#FFFD LD A,Ani_v1(is_ts) DEC AND A JR NZZ,Ani_e0r_nts IF0 ?ONtfm LD AL,#F9 OUT (DEC),L LD ELSE OUT (Ai_qty+1C),AB INC DEENDIF JR An_clc2r_nts EXA
Ani_e0 CALL EiPP IFN ACBBACAni_v1 LD (Am_volIX,VARS1+1),AAYREGS JR An_clc2ELSE Ani_orn CALL ornPP LD (Ao_adr+1)HL,BC LD (Ao_dspVARS1+1),AAYREGS JR An_clc1ENDIF
Ani_not LD (As_note+1),A XOR ACALL ROUT_ LD H,AEXA LD L,ARET Z LD (As_dsp+1)B,AD LD (As_Nsl+1),AIF0 ?ONtfm LD (As_Esl+1),A LD (Ao_dsp+1),A#F8 LD (Asl_stp+1),AELSE LD (Avb_lok+1),ACPL LD (Avb_stp+1),A ;LD (Asl_dsp+1),HLENDIF LD OUT (As_dtn+1C),HL LD A,16 LD (As_Vsl+1),A ;JR LDB1 LD B,1 RET
;--- nota_B --- IFN ACBBAC LD IX,VARS2+AYREGS ELSE LD HL,VARS2+AYREGS ENDIF
Bni_vol JR NZ,Bni_v0ROUT_ IFN ACBBAC LD A,(Bvb_stp+1SETUP),A DEC AAND 12 LD (Bvb_lok+1)JR Z,AABC RET Bni_v0 DUP 4 ADD A,A EDUP CHTABLE LD (Bg_vol+1)E,A JP Bn_clc2 ADC A,'CHTABLEBni_s_o SUB E CALL ornPP LD (Bo_adr+1)D,BCABni_vse CALL NZ,EiPPBni_sm0 LD (Bm_vol+1)B,A0 XOR APUSH IX LD (Bo_dsp+1),APOP HL
LD A,(DE)
INC DE
JR Bnism0U ; LD C,ABni_smp RET Z ; ADD HL,BC ADD LD A,(IX+TonB) LD C,(HL) LD (IX+TonB),C LD (HL),A ;Bnism0U INC HL LD A,(IX+TonB+1) CALL smpPP LD C,(HL) LD (Bs_adrIX+TonB+1),BCC Bn_clc1 LD BC(HL),#1020ABn_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 LD 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_dspIX+1AmplB),A LD (Bs_Nsl+1)C,A LD (Bs_Esl+1HL),A LD (Bo_dspIX+1AmplB),A LD (Bsl_stp+1),A LD (Bvb_lok+1),A LD (Bvb_stp+1),A ;LD (Bsl_dsp+1),HLC LD (Bs_dtn+1),HL LD A,16 LD (Bs_Vsl+1),ALDB1 LD B,1 RET  _m2=$+2Bni_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_clc2LD (RxCA1),A XOR 8 LD (RxCA2),A LD A,(DE) AND (IX+Mixer) LD E,A LD A,(IX+Mixer)RxCA1 DB #E6 AND %010010 OR E LD E,A LD A,(IX+Mixer) AND %010010RxCA2 OR E OR E LD (IX+Mixer),AABC ENDIF
Bni_e0 CALL EiPPBni_v1 LD (Bm_vol+1), XOR A JR Bn_clc2Bni_orn CALL ornPP LD (Bo_adr+1),BC LD (Bo_dsp+1)DE,A JR Bn_clc1#FFBF
;--- nota_C --- IFN ACBBAC LD BC,#FFFD PUSH IX POP HL ENDIF
Cni_not LD LOUT IF0 ?ONtfm INF JP M,$-2 ENDIF OUT (Cs_note+1C),A IF0 ?ONtfm XOR AINF LD HJP M,A$-2 ENDIF LD LB,AE LD (Cs_dsp+1),AOUTI LD (Cs_Nsl+1)B,AD LD (Cs_Esl+1),INC A LD (Co_dsp+1),ACP 13 LD (Csl_stp+1)JR NZ,ALOUT IF0 ?ONtfm LD (Cvb_lok+1),AINF LD (Cvb_stp+1)JP M,A$-2 ;LD (Csl_dsp+1),HLENDIF LD OUT (Cs_dtn+1C),HLA LD A,16 LD (Cs_Vsl+1HL),A ;JR LDB1 LD B,1AND A RET M IF0 ?ONtfm INF Cni_vol JR NZ JP M,Cni_v0$-2 ENDIF LD (Cvb_stp+1)B,AE DEC A LD OUT (Cvb_lok+1C),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 IFN ACBBACCni_v1 LD (Cm_vol+1),ACHTABLE=$-4 JR Cn_clc2Cni_orn CALL ornPP LD (Co_adr+1)DB 4,5,15,%001001,0,7,BC LD (Co_dsp+1)7,A%100100 JR Cn_clc1ENDIF
;Stupid ALASM limitationsNT_DATA DB 50*2 ;(T_NEW_0-T1_)*2 DB TCNEW_0-T_ DB 50*2+1 ;(T_OLD_0-T1_)*2+1 DB TCOLD_0- special_effects_COM.xxxx T_ DB 0*2+1 ;(T_NEW_1-T1_)*2+1 DB TCNEW_1-T_ DB 0*2+1 ;(T_OLD_1-T1_)*2+1 DB TCOLD_1-T_ DB 74*2;(T_NEW_2-T1_)*2 DB TCNEW_2-T_ DB 24*2 ;(T_OLD_2-T1_)*2 DB TCOLD_2-T_ DB 48*2 ;(T_NEW_3-T1_)*2 DB TCNEW_3-T_ DB 48*2 ;(T_OLD_3-T1_)*2 DB TCOLD_3-T_
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 ;16T_
Aef_dSm LD ATCOLD_0 DB #00+1,#04+1,(DE) ;dsp_smp#08+1,#0A+1,#0C+1,#0E+1,#12+1,#14+1 INC DEDB #18+1,#24+1,#3C+1,0 LD (As_dspTCOLD_1 DB #5C+1,0TCOLD_2 DB #30+1,#36+1,#4C+1,#52+1,#5E+1,#70+1),A ;;si#82,#8C,#9C RET DB #9E,#A0,#A6,#A8,#AA,#AC,#AE,#AE,0Bef_dSm LD ATCNEW_3 DB #56+1TCOLD_3 DB #1E+1,(DE)#22+1,#24+1,#28+1,#2C+1,#2E+1,#32+1,#BE+1,0 INC DETCNEW_0 DB #1C+1,#20+1,#22+1,#26+1,#2A+1,#2C+1,#30+1,#54+1 LD (Bs_dspDB #BC+1),A ;;si#BE+1,0 RET TCNEW_1=TCOLD_1Cef_dSm LD ATCNEW_2 DB #1A+1,#20+1,#24+1,#28+1,#2A+1,(DE)#3A+1,#4C+1,#5E+1 INC DE LD (Cs_dspDB #BA+1,#BC+1,#BE+1),A RET 0
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 PT3EMPTYORN=$- vibratoAef_vib LD A,(DE)1 INC DE JR Aef_vjr DW Eef_sld ;9xxxDB 1,Axxx - sld_env DW eff_tmp ;B.xx - temp0
Aef_vjr LD (Avb_sts+1),A;fix fr/st;;ist LD first 12 values of tone tables (Avb_stp+1packed),A LD A,(DE) INC DE LD (Avb_frq+1),A;fix st/fr;;ifr RET
B_eff DW Bef_slTT_PACK DB #06EC*2/256,#06EC*2 DB #0755-#06EC DB #07C5-#0755 DW Bef_nsTDB #083B-#07C5 DW Bef_dSmDB #08B8-#083B DW Bef_dOrDB #093D-#08B8 DW Bef_vibDB #09CA-#093DBef_vib LD A DB #0A5F-#09CA DB #0AFC-#0A5F DB #0BA4-#0AFC DB #0C55-#0BA4 DB #0D10-#0C55 DB #066D*2/256,(DE)#066D*2 DB #06CF-#066D DB #0737-#06CF DB #07A4-#0737 DB #0819-#07A4 DB #0894-#0819 INC DEDB #0917-#0894 JR Bef_vjr DB #09A1-#0917 DB #0A33-#09A1 DB #0ACF-#0A33 DB #0B73-#0ACF DB #0C22-#0B73 DB #0CDA-#0C22 DB #0704*2/256,#0704*2 DB #076E-#0704 DB #07E0-#076E DB #0858-#07E0 DB #08D6-#0858 DB #095C-#08D6 DB #09EC-#095C DB #0A82-#09EC DB #0B22-#0A82 DB #0BCC-#0B22 DB #0C80-#0BCC DB #0D3E-#0C80 DB #07E0*2/256,#07E0*2 DB #0858-#07E0 DB #08E0-#0858 DB #0960-#08E0 DB #09F0-#0960 DB #0A88-#09F0 DB #0B28-#0A88 DB #0BD8-#0B28 DB #0C80-#0BD8 DB #0D60-#0C80 DW Eef_sldDB #0E10-#0D60 DW eff_tmpDB #0EF8-#0E10
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 DISPLAY $
C_eff DW Cef_slT;vars from here can be stripped DW Cef_nsT DW Cef_dSm DW Cef_dOr DW Cef_vibint_qty DB 1A_qty DB 1B_qty DB 1C_qty DB 1 DW Eef_sld DW eff_tmp;you can move VARS to any other address
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 VARS
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 ;;piAnsQ is_ts EXA LD (HL),A LD B,DB 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 AnsQCef_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)VARS1 DS VRS 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 VARS2 DS VRS
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_stsVT_=$-Bsl_plk16 LD (Bsl_plkDS 256-1),A ;16 ;pi RET CreatedVolumeTableAddress
Cef_slT LD A,(DE) LD (Csl_stpT1_=VT_+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 16 ;Tone tables data depacked here
eff_tmpT_OLD_1=T1_ LD A,(DE)T_OLD_2=T_OLD_1+24DISPLAY $,"T_OLD_3=#XX00"T_OLD_2+24tab_volT_OLD_0=T_OLD_3+2 INC DET_NEW_0=T_OLD_0 LD (tempT_NEW_1=T_OLD_1T_NEW_2=T_NEW_0+1),A24 RET T_NEW_3=T_OLD_3
ornPP ADD A,A ADD A,tba_orn-tba_smpsmpPP ADD A,tba_smp LD L,A LD C,(HL) INC L LD B,(HL) XOR A RET PT2EMPTYORN=VT_+31 ;11DUMMYORNDUMMYSMPDB 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1DB 0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2DB 0,0,0,1,1,1,1,1,2,2,2,2,2,3,3,3DB 0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4DB 0,0,1,1,1,2,2,2,3,3,3,4,4,4,5,5DB 0,0,1,1,2,2,2,3,3,4,4,4,5,5,6,6DB 0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7DB 0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8DB 0,1,1,2,2,3,4,4,5,5,6,7,7,8,8,9DB 0,1,1,2,3,3,4,5,5,6,7,7,8,9,9,10DB 0,1,1,2,3,4,4,5,6,7,7,8,9,10,10,11DB 0,1,2,2,3,4,5,6,6,7,8,9,10,10,11,12DB 0,1,2,3,3,4,5,6,7,8,9,10,10,11,12,13DB 0,1,2,3,4,5,6,7,7,8,9,10,11,12,13,14DB 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15tab_frq DS #C0Eef_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 ;16sequence
OUTI OUTER LD B,D OUT (C),L LD B,E DEC A JR NZ,OUTER-2 RET NT_ DS 192 ;10CreatedNoteTableAddress
Aef_dOr LD A,(DE) ;dsp_orn INC DE LD (Ao_dspVAR0END=VT_+1),A 16 ;;oi RET Bef_dOr LD A,(DE) INC DE LD (Bo_dsp+INIT zeroes from VARS to VAR0END-1),A ;;oi RET Cef_dOr LD A,(DE) INC DE LD (Co_dsp+1),A RET ;6
IGETHL INC DEGETHL EX DE,HL LD E,(HL) INC HL LD D,(HL) INC HL EX DE,HL XOR A RET ;9VARSEND=$
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) ;11LENPMDLADDR=$-PLAYER DISPLAY "SIZE=",LENPT_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 _m14T_m_l=$-T_m/2 ENDM
IF0 $-#8000MUZP1 LOCAL pp ENDL ORG #C000P2pp ORG DISPLAY $ LD IX,#7000 LD HL,P1 LD DE,P2 LD BC,LENPCP0 LD A,(DE) SUB (HL) JR Z,CPOK CP #40 JR NZ,ERR LD (IX),E LD (IX+1),D INC IX,IXCPOK 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,LOUT IF0 ?ONtfm INF JP M,$-2 ENDIF OUT (DEC),A LD A,(Bsl_stp+1HL) AND A RET M IF0 ?ONtfm INF JP M,A ;;pi$-2 ENDIF LD

Navigation menu