PROTRACKER372 PT5 371 H
pt5_371 C��VМ�НNщ
MAIN "",#C6 AUTOS LD HL,AUTO1 LD A,4 LD DE,#E0A CALL EDTXT AUTOSu LD HL,AUTO1 LD DE,AUTO2 LD A,(HL) CP "G JC AUT0s CP "W JNC AUT0s SUB "G OR #80 LD (DE),A INC DE,HL JR AUTO0-2 AUT0s CALL D0TO_ LD (DE),A INC DE,HL LD B,3 AUTO0 CALL D0TO_ LD (DE),A INC DE,HL DJNZ AUTO0 LD HL,AUTO1 LD DE,#E0A LD B,4 JP PRTXADD BYS LD HL,TAUTHOR,DE,#60D JR $+8 TITLES LD HL,TTITLE,DE,#60C LD A,#20 JP EDTXT COPYSMP CALL OUT4 SMP2=$+1 smp=$+2 LD BC,#101 LD A,B ADD A,'SMPS LD H,A SUB B ADD A,C LD D,A PUSH BC LD BC,256 LD L,C,E,C LDIR POP BC LD A,B ADD A,A LD L,A,H,'TSMPSZ LD E,(HL) INC L LD D,(HL) LD A,C ADD A,A LD L,A LD (HL),E INC L LD (HL),D JP PROK DECSMP LD A,31 JR $+4 INCSMP LD A,1 ONCSMP LD HL,smp LD DE,#2F06 LD B,A ADD A,(HL) AND 31 JNZ $+3 ADD A,B LD (HL),A CALL D2HEX LD A,(digit),(EDSMPN),A RET DECSMP2 LD A,31 JR $+4 INCSMP2 LD A,1 ONCSMP2 LD HL,SMP2 LD DE,#3906 LD B,A ADD A,(HL) AND 31 JR IORN2U DECORN LD A,15 JR $+4 INCORN LD A,1 ONCORN LD HL,ORN LD DE,#2F07 LD B,A ADD A,(HL) AND 15 JNZ $+3 ADD A,B LD (HL),A CALL D2HEX digit=$+1 LD A,"1 LD (EDORNN),A RET DECORN2 LD A,15 JR $+4 INCORN2 LD A,1 ONCORN2 LD HL,ORN2 LD DE,#3907 LD B,A ADD A,(HL) AND 15 IORN2U JNZ $+3 ADD A,B LD (HL),A JP D2HEX COPYORN CALL OUT4 CALL HLORN LD D,A PUSH HL ORN2=$+1 LD A,0 CALL HLOR3 LD E,A EXD EX (SP),HL LD BC,64 LDIR POP BC LD L,B,H,'TORNSZ LD E,(HL) INC L LD D,(HL) LD L,C LD (HL),E INC L LD (HL),D JP PROK IFN about ABOUT CALL PIANAY LD BC,mABOUT CALL WINDUM LD HL,tABOUT LD DE,0 CALL PRMENU CALL TSTFIRH JNC $-3 JP CLOSWIN ENDIF HOMEtra XOR A JZ ITRAQ INCTRA LD A,(transp) INC A ITRAQ LD C,0 JP P,$+7 NEG LD C,-1 AND #3F LD B,A INC C JNZ $+4 NEG LD (transp),A DEC C LD A,"+ JZ $+4 LD A,"- LD DE,#360D CALL PRADD LD A,B INC D JP toOO DECTRA LD A,(transp) DEC A JR ITRAQ pat1=$+1 INCPAT1 LD A,0 INC A LD B,0 IPAT1Q CP PATS JC $+3 LD A,B iPATq LD (pat1),A LD DE,#4937 JP PRF8 DECPAT1 LD A,(pat1) LD B,PATS-1 DEC A JR IPAT1Q pat2=$+1 INCPAT2 LD A,0 INC A LD B,0 IPAT2Q CP PATS JC $+3 LD A,B iPAT2q LD (pat2),A LD DE,#493C JP PRF8 DECPAT2 LD A,(pat2) LD B,PATS-1 DEC A JR IPAT2Q HOMEcop XOR A LD (beg1),A CALL IBEGq XOR A LD (beg2),A CALL IBEG2q LD A,63 JR IENDQ ENDcur LD A,(CURY) JR IENDQ INCEND LD A,(fromEND) INC A IENDQ AND 63 LD (fromEND),A LD DE,#2E0C JP toOO DECEND LD A,(fromEND) DEC A JR IENDQ PLSONG POS=$+1 LD DE,TPOSS LD A,(DE),(EPAT),A LD E,A INC D LD A,(DE),(PATLEN),A LD A,-1 PLPaSo LD HL,ESNGon LD B,(HL) PUSH BC,HL LD (HL),A CALL PATFON ;для PLPAT не надо,но можно CALL PRPAT LD HL,PLEXT,(PLJP),HL CALL INICHAN IFN pttfc LD A,pttfc CALL OUTME LD HL,tfmmuz CALL tfmini CALL tfm ;первый фрейм пуст LD A,1 LD (tfcplayon),A ENDIF CALL PLAYER IFN pttfc XOR A LD (tfcplayon),A LD A,pttfc CALL OUTME CALL tfmshut ENDIF POP HL,BC LD (HL),B RET PLPAT XOR A JR PLPaSo ;1(PRPAT) INITPLY LD A,#F LD (Avol),A LD (Bvol),A LD (Cvol),A LD A,#F0 LD (Avol2),A LD (Bvol2),A LD (Cvol2),A LD HL,ORNS LD (Aorn),HL LD (Born),HL LD (Corn),HL IFN ts LD HL,ayblock LD DE,ayblock2 LD BC,szayblock LDIR ENDIF ;3(EPENT,PLPAT,PLSONG) INICHAN LD A,-1 LD (Achan),A LD (Bchan),A LD (Cchan),A IFN ts LD (Achan+szayblock),A LD (Bchan+szayblock),A LD (Cchan+szayblock),A ENDIF RET PATLENS LD A,(PATLEN) CALL FILLENS CALL PROK PRPAT XOR A LD (CURY),A PRPATU CALL PIANAY CALL INITPLY PRPATUU CALL CHKTS ;3.7 LD A,(CURY) LD HL,PATLEN CP (HL) JC $+3 LD A,(HL) LD (CURY),A PUSH AF CALL PRCU7 LD A,(POS) EXA LD HL,(EPAT) LD B,L LD H,'TPATSZ LD C,(HL) ;0..63 POP AF ;line# patSUB=$+1 LD E,4 ;5 для UPROLL IFN 1 ;см IFN ниже SUB E JNC $+3 ADC A,C ELSE ;глючит печать 0-й позиции, т.к.идем на посл.поз., потом на LOOP ;а надо на 0-ю ;т.е. на средней строке надо вспоминать тек. позицию PRPATu0 DEC A JP P,PRPATuY LD A,(ESNGon) OR A JZ PRPATuP PUSH DE EXA ;A=pos CALL ROLprPO ;будет A'=pos LD B,E ;pat ;глючит при ssQ !!!??? LD A,(DE) ;patsz LD C,A ;0..63 POP DE PRPATuP LD A,C PRPATuY DEC E JNZ PRPATu0 ENDIF ;A=line# ;B=pat INC C ;C=patsz 1..64 EXA LD D,A EXA ;D=POS patHGT=$+1 LD L,9 LD E,#F PRPAT0 PUSH HL,DE CALL STROKA POP DE INC E,A POP HL CP C JNZ PRPATNE LD A,(ESNGon) INC A JNZ PRPATE IFN 1 ;см IFN выше LD A,E CP #14 JC PRPATE ENDIF LD B,E LD A,D CALL GETnPAA LD D,E LD E,B LD B,A LD A,L LD L,B LD H,'TPATSZ LD C,(HL) INC C LD L,A PRPATE XOR A PRPATNE DEC L JNZ PRPAT0 CALL FILLATR JP PLREAD CLPATS XOR A CLPATS0 PUSH AF CALL CLPAT POP AF INC A CP PATS JNZ CLPATS0 RET EDSONGCS CALL 8026 JP NC,ONOFFTS EDSONG CALL MELINV LD HL,ESNGon LD A,(HL) CPL LD (HL),A LD A,(POS) LD E,A,D,'TPOSS LD A,(DE),(EPAT),A LD E,A INC D LD A,(DE),(PATLEN),A CALL PATFON CALL PRPATU LD A,(editON) OR A ;0=не редактируем RET NZ ;редактируем JP EDPATu ;включаем редактирование curfla=$+1 FLACUR LD A,1 DEC A RET NZ curon=$+1 PRCUR LD A,0 CPL LD (curon),A LD A,(CURX) CP 6 JZ CUR2 CP 11+4 JZ CUR2 CP 16+8 JZ CUR2 LD HL,TEDCURX ADD A,L LD L,A LD A,(HL) lineX=$+1 ADD A,0 SRL A LD C,#F0 JNC $+4 LD C,#F LD D,A,E,#13 CALL DE2SCR LD B,8 LD A,(HL) XOR C LD (HL),A INC H DJNZ $-4 CURQ LD A,6 RET CUR2 LD HL,TEDCURX ADD A,L LD L,A LD A,(HL) RRA LD D,A,E,#13 CALL DE2SCR LD BC,#8F0 cUR3 LD A,(HL) CPL LD (HL),A INC L LD A,(HL) XOR C LD (HL),A DEC L INC H DJNZ cUR3 JR CURQ PRCU7 LD A,(curon) OR A RET Z JR PRCUR EDPATQ CALL JPITEM LD A,#6F LD (DOWNM),A JR EDPAT0 INCROLL roll=$+1 LD A,0 INC A CP 9 JC $+3 XOR A IROLQ LD (roll),A LD DE,#D09 JP PRBCD DECROLL LD A,(roll) DEC A JP P,IROLQ LD A,8 JR IROLQ EPss LD A,C JR IROLQ EPDOWN CALL PRCU7 LD L,1 CALL ROLLPATFON EPDQ JP SHOLK EPEXT CALL PRCU7 XOR A LD (editON),A LD HL,ESNGon CP (HL) LD (HL),A CALL NZ,MELINV POP AF JP WAITNOK EPUP CALL PRCU7 LD L,1 CALL UPROLL JR EPDQ ;3(ini,NLOOP,MENUUSE) EDPAT editON=$+1 LD A,0 OR A ;если не редактировали(0), то входим на EDPATu JZ EDPATu ;иначе ;если был EDSONG, то на EDSONG LD A,(ESNGon) INC A JP Z,EDSONG RET EDPATu LD A,-1 LD (editON),A XOR A LD (CURY),A CALL PRPAT EDPAT0 CALL RESHALT CALL FLACUR LD HL,EDPATQ PUSH HL LD (curfla),A CALL BIT5 RET Z LD HL,tSS LD BC,9 CPIR JZ EPss CP "W JP Z,EDSONGCS IFN bemol CP kBEM JP Z,EPbem ENDIF CP kssA JP Z,SSA CP kssR JP Z,EPssr CP kIns JP Z,EPins CP kssE JP Z,EPsse CP kDelLn JP Z,EPdelln CP kHom JZ EPGRA CP kEnd JZ EPEND IFN tab CP kTab JP Z,JCUR CP kTabL JP Z,JCURL ENDIF IFN ts CP kChip JP Z,SWPSONG ENDIF CP kSmp JP Z,EDSMP CP kOrn JP Z,EDORN SUB 4 JP Z,DECPOSU DEC A JP Z,INCPOSU SUB 3 JZ LCUR DEC A JZ RCUR DEC A JP Z,EPDOWN DEC A JP Z,EPUP DEC A,A JP Z,EPENT DEC A JP Z,EPEXT CALL 8026 JC NCAPCOM LD A,(23560) CP kAON JP Z,AUTOON CP kEON JP Z,ENVON CP kTRA JP Z,TRANSP CP kBEG JP Z,BEGcur CP kEND JP Z,ENDcur CP kCOP JP Z,COPcur CP kORD JP Z,POSEDIT NCAPCOM CALL TSTNOTE CALL XPPSCF JP Z,TSTOCT RET EPGRA XOR A LD HL,CURY CP (HL) JNZ ePGQ DEC H EPEND LD HL,(EPAT) LD H,'TPATSZ LD A,(HL) JZ $+4 INC A RRA ePGQ LD (CURY),A JP PRPATU LCUR CALL PRCU7 CURX=$+1 LD A,6 DEC A JP P,LCURQM3 LD A,20+12 JP LCURQM3 RCUR CALL PRCU7 LD A,(CURX) INC A CP 21+12 JC $+3 XOR A LCURQM3 LD (CURX),A LCURQ CALL PRCUR JP SHOLK EPENT playon=$+1 LD A,-1 OR A JP NZ,EPENTi LD A,(CURX) CP 6 JZ EPENTi CP 11 JZ EPENTi CP 16 JP NZ,PLNOTE EPENTi LD A,(NOTENV) LD (env),A LD HL,PLCANC LD (PLJP),HL CALL INICHAN JP PLAYER IFN tab JCUR CALL PRCU7 LD BC,TJP JR JCUROK JCURL CALL PRCU7 LD BC,TJPLEFT JCUROK LD HL,(CURX),H,0 ADD HL,BC LD A,(HL) JP LCURQM3 ENDIF ROLLPATFON CALL ROLL JP PATFON ;3 ROLL ;L=на сколько строк (для autoscroll) PUSH HL CALL PRCU7 ROLnRE LD A,(EPAT) LD (nPAT),A POP HL ROL0 ;идем на строчку вниз LD A,(PATLEN) INC A LD C,A LD A,(CURY) INC A CP C JNZ ROLNZ LD A,(ESNGon) OR A CALL NZ,ROLnxPO ;C тоже корректируется XOR A ROLNZ LD (CURY),A ;ищем +4-ю строчку EXA LD A,(POS) EXA LD B,4 ROLnx0 INC A CP C ;patsz=1..64 JNZ ROLnx4 ESNGon=$+1 LD A,0 OR A JZ ROLnxY EXA CALL GETnPAA;T ;(DE)->A->(nPAT) EXA LD A,E EXA LD E,A INC D ;TPATSZ LD A,(DE) INC A LD C,A ROLnxY XOR A ROLnx4 DJNZ ROLnx0 ;печатаем +4-ю строчку PUSH HL CALL scrolST ;DI;не портит регистры LD HL,(POS) PUSH HL EXA LD (POS),A EXA nPAT=$+1 LD B,0 LD E,#17 CALL STROKA ;A=line#,E=scrY POP HL LD (POS),HL POP HL DEC L JNZ ROL0 rOLQ JP FILLATR ;DI;EI ;JP PATFON ;3000t UPROLL CALL PRCU7 PATLEN=$+1 UPRnRE LD C,63 LD A,(CURY) DEC A CP C JC UPRNZ LD A,(ESNGon) OR A JNZ UPRnxPO LD A,C UPRNZ LD (CURY),A LD B,4 UPRnx4 DEC A CP C JC $+3 LD A,C DJNZ UPRnx4 LD E,#F LD BC,(EPAT-1) CALL scrol2 ;не портит регистры,не DI CALL STROKA uPRQ JR rOLQ UPRnxPO PUSH AF LD A,(POS) CALL ROLprPO LD (EPAT),A EXA LD (POS),A POP AF RET C;pgUp LD A,(DE) LD (PATLEN),A LD (CURY),A ; PUSH AF ;! ; LD A,5 ;LD (patHGT),A ; LD (patSUB),A ;CALL scrol2 ;не портит регистры,не DI CALL PRPATU ;PRPAT CALL POSFON ;3+699 ; POP AF ; LD (CURY),A ; LD A,4,(patSUB),A ;LD A,9,(patHGT),A JR uPRQ PLAYER IFN hidearr LD A,1 LD (ARROWt),A ENDIF LD A,18,(options),A LD A,(TEMPO) LD (temp1),A LD (tempCNT),A XOR A LD (Acom),A LD (Bcom),A LD (Ccom),A CALL PLREAD IFN ts ;5 tson=$+1 LD A,0 OR A JZ PLnots1 LD A,#FE CALL SWPAYPP XOR A LD (Acom),A LD (Bcom),A LD (Ccom),A CALL PLREAD LD A,#FF CALL SWPAYPP PLnots1 ENDIF CALL ARROW ;1700 LD A,(temp1) LD (tempCNT),A ;иначе игнорит темп на 1-й строке PLAYER0 LD A,(tempCNT) DEC A LD L,1 CALL Z,ROLL ;35500 CALL HALTnAR ;10000 CALL JPITEM ;стрелка выкл. CALL PATFON ;3000 ;при выходе после перекл.POS будет сначала READ,потом ROLL CALL ARROW ;1700 CALL OUT4 ;100 CALL PLnOUT ;5400 IFN ts LD A,(tson) OR A JZ PLnots2 LD A,(tempCNT) DEC A CALL Z,PLREAD ;2100 LD A,#FE CALL SWPAYPP ;7700;6881 CALL OUT4 ;100 CALL PLnOUT ;5400 PLnots2 ENDIF tempCNT=$+1 LD A,0 DEC A JNZ PLnoNL CALL PLREAD ;2100 temp1=$+1 LD A,0 PLnoNL LD (tempCNT),A IFN ts LD A,(tson) OR A LD A,#FF CALL NZ,SWPAYPP;7700;6881 ENDIF ;CALL RE ;1000 ;CALL JPITEM IFN pttfc tfcplayon=$+1 LD A,0 OR A JZ tfcplayno LD A,pttfc CALL OUTME CALL tfm tfcplayno ENDIF PLJP=$+1 JP PLCANC ;or PLEXT (ed.song) PLCANC CALL CANCEL JNC PLAYER0 JR PLQ PLEXT CALL CANCEL2 JNC PLQ CALL 8026 JC PLAYER0 CALL 8020 RRA JC PLAYER0 PLQ LD A,mains LD (options),A CALL RE ;1000 CALL PIAN2AY JP WAITNOK PLREAD LD A,(CURY),C,A LD A,(EPAT),B,A CALL GETnADR LD A,(HL),(ENV+1),A INC HL LD A,(HL),(ENV),A INC HL LD A,(HL),(DNOIS),A INC HL PUSH HL POP IX LD IY,Achan CALL USEchan LD BC,5 ADD IX,BC LD IY,Bchan CALL USEchan LD BC,5 ADD IX,BC LD IY,Cchan CALL USEchan LD IY,iy RET USEchan LD C,(IX+3) LD A,(IX) AND #7F DEC A JP M,USEbl CP 96 JNZ USEnR LD (IY+#E),0 LD A,-1 JR uSEnNOT USEnR LD B,(IY+#B) LD (IY+#B),A LD (IY+#12),B XOR A LD (IY+#1C),A LD (IY+#18),A LD (IY+#19),A ; LD (IY+#1A),A ;shift LD (IY+#1B),A LD (IY+#E),A LD L,(IY+#13) LD H,(IY+#14) LD (usedisp),HL LD (IY+#13),A LD (IY+#14),A LD (IY+4),A LD (IY+9),A uSEnNOT LD (IY),A LD A,(IX) RLA LD A,C RRA RRA RRA RRA AND 31 JZ USEbl LD L,A ADD HL,HL LD H,'TSMPSZ LD B,(HL) LD (IY+#A),B INC L LD B,(HL) LD (IY+8),B LD (IY+6),0 ADD A,'SMPS LD (IY+7),A USEbl LD A,C LD B,#F AND B LD C,A ;FX:B=F ;?X:B=1F ;0X:не менять JZ USE0x ;JZ USEoldE CP B JZ USEnE LD (NOTENV),A LD (env),A XOR A LD L,A,H,A LD (Efrq),HL LD (EstCNT),A LD HL,(ENV),(BASENV),HL LD B,31 USEnE LD (IY+#D),B ;vol|envmask USE0x LD A,(IX+4) AND #F0 CP C JZ USEoldE RRCA RRCA RRCA RRCA CALL HLOR3 LD (IY+4),0 LD (IY+1),L LD (IY+2),H LD L,A,H,'TORNSZ LD A,(HL),(IY+5),A INC L LD A,(HL),(IY+3),A USEoldE LD A,(IX+4) AND #F JZ USEnV ADD A,A,A,A,A,A,A,A LD (IY+#C),A USEnV LD A,(IX+1) AND #F0 RET Z LD C,16 SUB C JZ dncom SUB C JZ upcom SUB C JZ portcom SUB C JZ smpcom SUB C JZ orncom SUB C JP Z,vibcom SUB C RET Z SUB C RET Z SUB C JP Z,edcom SUB C JP Z,eucom SUB C RET NZ LD A,(IX+2) CP 1 RET C ;LD (tempCNT),A ;v3+698 LD (temp1),A RET upcom LD A,(IX+1) AND #F upcomQ LD (IY+#F),A ;delay LD (IY+#E),1 ;com.type LD (IY+#10),A ;count IFN fixtoENV PUSH AF ENDIF LD L,(IX+2) LD H,0 CALL NC,NEGHL LD (IY+#11),L LD (IY+#15),H IFN fixtoENV POP AF RET NZ OR H,L RET Z ;3!699(глючили 1000,2000) LD (IY+#13),L LD (IY+#14),H ENDIF RET dncom LD A,(IX+1) AND #F SCF JR upcomQ smpcom LD A,(IX+2),(IY+9),A RET orncom LD A,(IX+2),(IY+4),A RET vibcom LD (IY+#E),3 LD A,(IX+2),B,A AND #F LD (IY+#17),A LD A,B AND #F0 RRCA RRCA RRCA RRCA LD (IY+#16),A LD (IY+#10),A RET portcom LD A,(IX) AND #7F DEC A CP 96 RET NC LD A,(IX+1) AND #F LD (IY+#F),A LD (IY+#10),A LD A,(IX+2) LD (IY+#11),A LD (IY+#15),0 LD (IY+#E),2 LD A,(IY+#12),C,A LD HL,FrTab ADD A,A ADD A,L LD L,A LD E,(HL) INC L LD D,(HL) PUSH DE LD HL,(usedisp) LD (IY+#13),L LD (IY+#14),H ADD HL,DE EXD LD A,(IY+#B) LD (IY+#12),A LD (IY+#B),C LD HL,FrTab ADD A,A ADD A,L LD L,A LD A,(HL) INC L LD H,(HL),L,A PUSH HL ;OR A SBC HL,DE POP HL POP DE JNC portUP EXD PUSH HL LD L,(IY+#11) LD H,(IY+#15) CALL NEGHL LD (IY+#11),L LD (IY+#15),H POP HL portUP OR A SBC HL,DE LD (IY+#16),L LD (IY+#17),H RET edcom LD A,(IX+1) AND #F LD (EstCNT),A LD (EiniCNT),A LD L,(IX+2),H,0 LD (Estep),HL RET eucom CALL edcom CALL NEGHL LD (Estep),HL RET ;2:TSTNQ,EPENT(nu) PLNOTE IFN ts LD A,(tson) OR A JZ PLnotsP LD A,#FE CALL SWPAYPP CALL PLNOTPP LD A,#FF CALL SWPAYPP PLnotsP ENDIF CALL PLNOTPP PLNOTE0 CALL HALTER CALL OUT4 IFN ts LD A,(tson) OR A JZ PLnotsP2 LD A,#FE CALL SWPAYPP CALL PLnOUT LD A,#FF CALL SWPAYPP PLnotsP2 ENDIF CALL PLnOUT LD A,#81 IN A,(-2) CPL AND 31 JNZ PLNOTE0 CALL 8020 CPL AND 14 JNZ PLNOTE0 CALL 8026 CPL AND 15 JNZ PLNOTE0 PIAN2AY IFN ts LD A,#FE CALL SWPAYPP CALL PIANAY LD A,#FF CALL SWPAYPP ENDIF JP PIANAY ;2 тут PLNOTPP LD A,(NOTENV) LD (env),A XOR A LD (Acom),A LD (Bcom),A LD (Ccom),A CPL LD (Achan),A LD (Bchan),A LD (Cchan),A JP PLREAD FILLATR DI LD HL,LINESon LD A,(PATLEN) LD C,A INC C LD DE,#FF00 ;;; LD A,(CURY) LD B,4 SUB B FATR0 OR A JP P,FATR0Q LD (HL),D INC HL INC A DJNZ FATR0 JR FATR1Q FATR0Q LD (HL),E INC HL DJNZ $-2 FATR1Q INC HL LD B,4 LD A,(CURY) FATR2 INC A CP C JZ FATR2Q LD (HL),E INC HL DJNZ FATR2 JR FATR3Q FATR2Q LD (HL),D INC HL DJNZ $-2 FATR3Q LD (FATRSP),SP LD IX,#59FF LD IY,LINESon LD A,9 FATRFIL EXA col1=$+1 LD HL,#606 col2=$+1 LD DE,#707 LD BC,#744 LD A,(IY) CP #7F JZ FATRNO OR A JZ FATRPUS LD HL,0 LD D,L,E,L LD C,L FATRPUS LD SP,IX PUSH HL DEC SP PUSH HL,HL DEC SP PUSH HL DEC SP PUSH HL,HL DEC SP PUSH HL DEC SP PUSH HL,HL DEC SP PUSH DE,HL DEC SP PUSH BC FATRNO INC IY LD BC,32 ADD IX,BC EXA DEC A JNZ FATRFIL FATRSP=$+1 LD SP,0 LD IY,iy EI RET PLnOUT XOR A LD (mix),A LD IY,Achan LD A,(IY) INC A JZ PLnAres CALL iSMPORN LD DE,(Adfrq) ADD HL,DE LD (frqA),HL CALL ADDVOL LD A,B CALL GLOVOL1 PLoffA=$+1 AND -1 PLnAres LD (volA),A CALL PLcoms LD IY,Bchan LD A,(IY) INC A JZ PLnBres CALL iSMPORN LD DE,(Bdfrq) ADD HL,DE LD (frqB),HL CALL ADDVOL RLC B CALL GLOVOL PLoffB=$+1 AND -1 PLnBres LD (volB),A CALL PLcoms LD IY,Cchan LD A,(IY) INC A JZ PLnCres CALL iSMPORN LD DE,(Cdfrq) ADD HL,DE LD (frqC),HL CALL ADDVOL RLC B,B CALL GLOVOL PLoffC=$+1 AND -1 PLnCres LD (volC),A CALL PLcoms LD HL,(BASENV) LD A,(Edfrq) ADD A,L LD L,A LD DE,(Efrq) ADD HL,DE LD (frqE),HL LD A,(EstCNT) DEC A JP M,EstOFF JNZ EstNZ LD HL,(Estep) ADD HL,DE LD (Efrq),HL LD A,(EiniCNT) EstNZ LD (EstCNT),A EstOFF XOR A LD (Edfrq),A LD IY,iy JP OUTAY GLOVOL LD A,(mix) OR B GLOVOL1 LD (mix),A LD H,'TVOL,L,(IY+#C) ADD HL,DE LD E,(HL) glovol=$+1 LD L,#F0 ADD HL,DE LD A,(HL) OR C AND (IY+#D) RET PLcoms LD A,(IY+#E) DEC A RET M JNZ PLcomNG DEC (IY+#10) RET NZ PLcomG LD A,(IY+#F),(IY+#10),A LD L,(IY+#13) LD H,(IY+#14) LD E,(IY+#11) LD D,(IY+#15) ADD HL,DE LD (IY+#13),L LD (IY+#14),H RET PLcomNG DEC A JNZ PLcomNP DEC (IY+#10) RET NZ CALL PLcomG LD A,D EXD LD L,(IY+#16) LD H,(IY+#17) RLA JNC PLportA ADD HL,DE,HL,DE PLportA SBC HL,DE INC H RET NZ LD A,(IY+#12),(IY+#B),A XOR A LD (IY+#E),A LD (IY+#13),A LD (IY+#14),A RET PLcomNP DEC A RET NZ DEC (IY+#10) RET NZ LD A,(IY) XOR -1 LD (IY),A LD A,(IY+#16) JZ $+5 LD A,(IY+#17) LD (IY+#10),A RET COPcur LD A,(CURY),(beg2),A XOR A CALL IBEG2q LD A,(EPAT) CALL iPAT2q CALL XPP2 LD A,C CALL ICHN2Q LD HL,TSTNROL PUSH HL COPY CALL FROMSZ LD DE,(pat2),D,A LD HL,(beg1) beg2=$+1 LD H,0 CALL CHN1PP chn2=$+1 LD A,1 LD B,3 DEC A JZ COP2X LD B,8 DEC A JZ $+4 LD B,13 COP2X LD A,(pat1) IFN opcompl SCF ENDIF COPYU ;A=patfrom ;D=lines ;E=patto ;B=chnto(3/8/13) ;C=chnfrom ;H=lineto ;L=linefrom IFN opcompl PUSH AF ENDIF PUSH DE,DE,HL PUSH BC CALL PATtoBUF ;делает OUT7 POP BC LD A,C ADD A,3 LD (DISPc1),A LD A,B INC A LD (DISPc2),A POP HL LD A,H ADD HL,HL LD H,'TLINES LD E,(HL) INC L LD D,(HL) LD HL,BUF ADD HL,DE LD E,C,D,0 LD C,A LD A,(chnall) OR A JNZ noall1 ADD HL,DE noall1 EX (SP),HL LD A,L CALL AtoPAT ;DE LD L,C ADD HL,HL LD H,'TLINES LD A,(HL) INC L LD H,(HL),L,A ADD HL,DE LD A,(chnall) OR A JNZ noall2 LD E,B,D,0 ADD HL,DE noall2 LD A,64 SUB C POP DE EXD LD C,A POP AF CP C JC $+3 LD A,C chnall=$+1 LD C,0 ;не0=все каналы INC C DEC C JZ COPSCF ;копирование всех каналов COPYAL0 LD BC,18 LDIR DEC A JNZ COPYAL0 JR COPYALQ ;копирование 1 канала ;1 COPSCF SCF ;NC=9 on COPY0 PUSH HL,DE JC COPyN EXA LD A,(HL) AND #7F JZ COPnN COPyN PUSH DE,HL LDI INC HL,DE INC HL,DE LDI LDI POP HL,DE COPnN INC HL,DE JC COPyC LD A,(HL) AND #F0 JZ COPnC EXA COPyC EXA LDI LDD COPnC INC HL,HL LD A,(HL) AND #F JZ COPnE XOR #F JZ COPnE DISPc2=$+1 LD BC,0 EXD SBC HL,BC EXD DISPc1=$+1 LD C,0 SBC HL,BC LDI LDI COPnE POP HL LD BC,18;B портится ADD HL,BC EXD POP HL ADD HL,BC EXA DEC A JNZ COPY0 COPYALQ IFN opcompl POP AF CALL C,PROK ENDIF COPQJP JP PRPATU FROMSZ fromEND=$+1 LD A,63 beg1=$+1 LD C,0 SUB C INC A RET NC POP AF IFN opcompl PRERR LD HL,TERROR JR PROKU ELSE RET ENDIF ;5 PROK IFN opcompl LD HL,TCOMPLE PROKU LD (PROKHL),HL ENDIF LD BC,mOK CALL WINDUM PROKHL=$+1 LD HL,TCOMPLE LD DE,0 CALL PRMENU CALL DOWNMER CALL WAITNOK HALT XOR A CALL CANCEL+2 JC $-5 JP CLOSWIN CLEARS XOR A LD (patcled),A LD HL,CLEACOO LD DE,CLEAUSE LD BC,mCLEAR CALL WINDOW LD HL,tCLEAR LD DE,0 CALL PRMENU CLELOOP CALL HALTER CALL JPITEM CALL TSTFIRE JNC CLELOOP CLEARSQ CALL CLOSWIN CALL POSFON patcled=$+1 LD A,0 OR A CALL NZ,PRPAT RET clPAT CALL SURE DEC A JZ clPATS LD A,(EPAT) CALL CLPAT LD A,-1 LD (patcled),A JR clQ clSONG CALL SURE CALL CLORNSM clPATS CALL CLPATS CALL CLPOS XOR A LD (LOOP),A LD (POS),A LD (EPAT),A INC A LD (LENG),A LD A,63 ;LD BC,PATS-1 ;LD DE,TPATSZ+1 ;LD H,D,L,B ;LD (HL),A ;LDIR CALL FILLENS LD (patcled),A LD (PATLEN),A clQ POP HL JR CLEARSQ clPOS CALL SURE CALL CLPOS XOR A LD (LOOP),A JR clQ clSMP CALL SURE DEC A CALL Z,CLSMPS LD A,(smp) CALL CLSMP JR clQ clORN CALL SURE DEC A CALL Z,CLORNS LD A,(ORN) CALL CLORN JR clQ SURE LD HL,SURECOO LD DE,SUREUSE LD BC,mSURE CALL WINDOW LD HL,tSURE LD DE,0 CALL PRMENU SURE0 CALL HALTER CALL JPITEM CALL TSTFIRE JNC SURE0 LD C,1 SUREQ CALL CLOSWIN LD A,C DEC A RET NZ POP AF JP clQ YES LD A,(ITEM) DEC A LD C,A POP HL JR SUREQ TRANSP CALL TransPP TRNS0 LD A,(HL) AND #80 LD D,A XOR (HL) JZ TRNSNO CP 97 JZ TRNSNO DEC A ADD A,C CP 96 JC $+3 SUB C INC A TRNSNO OR D LD (HL),A LD DE,18 ADD HL,DE DJNZ TRNS0 PRPATO CALL PROK JP PRPATU TRANVOL CALL TransPP INC HL,HL,HL,HL TRNV0 LD A,(HL) AND #F0 LD D,A XOR (HL) JZ TRNVNO ADD A,C JZ TRNV1 CP 16 JC TRNVNO CPL ; RLA ; SBC A,A ;будет AND #0F ;F TRNV1 OR 1 ;или 1 TRNVNO OR D LD (HL),A LD DE,18 ADD HL,DE DJNZ TRNV0 JR PRPATO TransPP CALL FROMSZ PUSH AF LD A,(pat1) CALL AtoPAT CALL CHN1PP LD A,(beg1) ADD A,A LD L,A,H,'TLINES LD A,(HL) INC L LD H,(HL),L,A ADD HL,DE,HL,BC POP BC transp=$+1 LD C,0 RET ;edsmp/orn PIANO XOR A LD H,A,L,A LD (piCURv),HL LD (piCURv+2),HL LD (mix),A LD (DNOIS),A LD HL,piaSMP LD D,(HL),(HL),A LD (piSLIN),A LD (piOLIN),A LD A,D ADD A,'SMPS INC HL LD (HL),A LD A,(piaORN) CALL HLOR3 LD (piaORN),HL CALL NOTEKEY LD A,D DEC A CP 24 RET NC pIANO0 CALL NotOct DEC A LD L,A LD IY,pianRG LD DE,(piaORN),(ORNADR),DE LD BC,(piOLIN) LD A,C INC A CP B JC $+5 LD A,(piOLOOP) LD (piOLIN),A LD IX,(piaSMP) LD A,(piSEND),B,A LD A,(piSLIN),E,A INC A CP B JC $+5 LD A,(piSLOOP) LD (piSLIN),A LD A,E,B,0 CALL SAMPLER LD (frqB),HL CALL ADDVOL LD (volB),A LD A,B RLCA LD (mix),A CALL OUTAY LD IY,iy LD (IY-52),1 LD (IY-56),1 CALL RESHALT CALL NOTEKEY LD A,D DEC A CP 24 JC pIANO0 ;6 PIANAY LD HL,pianRG JR $+5 ;2 OUTAY LD HL,frqA LD DE,#00BF LD A,#D OUTAY0 LD BC,-3 OUT (C),D LD B,E OUTI INC D DEC A JNZ OUTAY0 LD B,-1 OUT (C),D LD B,E LD D,(HL) CP D LD (env),A RET Z OUT (C),D RET NOTEKEY CALL BIT5 JZ NOTEKYQ LD BC,TNOTEKE-TNOTEKY PUSH HL LD HL,TNOTEKY CPIR POP HL LD D,C RET Z LD D,97 CP "R RET Z INC D CP kssL RET Z INC D CP kK RET Z NOTEKYQ LD D,-1 RET ADDVOL ADD A,(IY+#18) JP P,$+6 XOR A JR PLnAv CP 16 JC $+4 LD A,#F PLnAv LD D,0,E,A RET iSMPORN LD E,(IY+1) LD D,(IY+2) LD (ORNADR),DE LD B,(IY+3) ;len LD A,(IY+4) ;pos LD C,A INC A CP B JC $+5 LD A,(IY+5) ;loop LD (IY+4),A LD L,(IY+6) ; LD H,(IY+7) ;smpadr PUSH HL POP IX LD B,(IY+8) ;len LD A,(IY+9),E,A INC A CP B JC $+5 LD A,(IY+10) ;loop LD (IY+9),A ;pos LD A,E ;oldpos LD L,(IY+11) ;note ;JP SAMPLER SAMPLER ;L=note ;C=posinORN ;A=posinSMP ADD A,A,A,A LD LX,A ;+smpadr CALL OUT4 LD A,(IX+2),E,A LD B,8 AND #40 JNZ NOnois LD B,A LD A,(IX+2) ADD A,(IY+#1B) BIT 4,(IX+3) JZ $+5 LD (IY+#1B),A LD D,A LD A,(DNOIS) ;DNOIS=$+1 ADD A,D LD (nois),A JR NOdenv NOnois LD A,(Edfrq),H,A LD A,(IX+2) AND 31 CP 16 JC $+4 OR #F0 ADD A,(IY+#1C) BIT 4,(IX+3) JZ $+5 LD (IY+#1C),A ADD A,H LD (Edfrq),A NOdenv LD A,E AND #80 JZ $+4 SET 0,B LD A,E AND #20 LD E,C,D,0 LD C,16 JZ $+3 LD C,D LD A,L ;note ORNADR=$+1 LD HL,0 ADD HL,DE ADD A,(HL),A,A JNC $+3 XOR A LD HL,FrTab LD E,A ADD HL,DE LD A,(HL) INC HL LD H,(HL),L,A LD D,(IX+1) LD E,(IX) ;shift в сэмпле BIT 5,(IX+3) JZ NOdfrq PUSH HL LD L,(IY+#19) LD H,(IY+#1A) ADD HL,DE LD (IY+#19),L LD (IY+#1A),H ;shift LD DE,0 POP HL NOdfrq ADD HL,DE LD E,(IY+#19) LD D,(IY+#1A) ;shift ADD HL,DE LD A,(IX+3),D,A AND #80 JZ NOdvol LD A,D AND #40 CPL JZ $+4 LD A,1 ADD A,(IY+#18) CP 16 JZ YEdvol INC A CP -17 JZ $+3 YEdvol DEC A LD (IY+#18),A NOdvol LD A,D AND #F RET ;4 ;Z=NOTE XPPSCF SCF ;2 ;Z=SMP XPP LD A,(CURX) ADC A,-7 LD BC,#C04 RET Z RET NC SUB 9 RET C LD BC,#1609 SCF RET Z SUB 9 RET C LD BC,#200E SCF RET Z SUB 9 RET ;4 XPP2 LD A,(CURX) LD C,1 SUB 11+4 RET C INC C SUB 5+4 RET C INC C RET IT5 JZ NOTEKYQ LD BC,TNOTEKE-TNOTEKY PUSH HL LD HL,TNOTEKY CPIR POP HL LD D,C RET Z LD D,97