Changes

Jump to: navigation, search

PROTRACKER372 PT5 371 H

36,660 bytes added, 23:24, 14 February 2020
Created page with "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..."
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

Navigation menu