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