1,345
edits
Changes
no edit summary
PTCMPv8 C��·Б�В√Ц MAIN "",#C6 CMbuf DB -1 ;USED ORNS+SMPS DS 16+31 t1buf DB -1,-1,-1,-1,0 MACRO IYAi LD (IY),A INC IY ENDM MACRO IYNi LD (IY),\0 INC IY ENDM MACRO IYLi LD (IY),L INC IY ENDM MACRO IYHi LD (IY),H INC IY ENDM PatDisp LD A,(IX-0) ;-8 patdisp=$-1 IYAi LD A,(IX-0) ;-7 patdisp1=$-1 IYAi RET PUTIY PUSH AF CALL OUT7 PUSH HL LD HL,(pnter) LD A,LY SUB mod LD (HL),A INC HL LD A,HY SBC A,'mod LD (HL),A INC HL LD (pnter),HL POP HL POP AF RET cMPILE LD (CMsmpU0),A LD (CMornU0),A XOR A LD (CMPcnt),A DI CALL CMPIL CALL CMPso LD IY,iy EI IYAiIFN process CALL CLOSWIN LD A,205,(MHEXFNT+2),A CALL OUT7 ENDIF sngE=$+1 LD HL,lce84 LD DE,mod ;OR A SBC HL,DE EXD RET PUTIY ;1 CMPIL IFN process CALL PROCESS ENDIF IF0 portres LD A,97 LD (t1not),A LD (po2not),A ENDIF ;DI LD HL,CMbuf+1 LD DE,CMbuf+2 LD BC,16+31-1 LD (HL),B LDIR LD DE,l5b00+1 LD H,D,L,B LD C,250 LD (HL),L LDIR CALL OUT7 LD HL,TPROTR LD DE,mod LD C,99 LDIR LD H,D,L,E INC DE LD (HL),B LD B,3 ;на всякий случ trks LDIR LD A,(FRQn) LD (lce84),A LD A,(TEMPO) LD (lce85),A LD A,(LENG) LD (lce86),A LD B,A LD A,(LOOP) CP B JC $+3 XOR A LD (lce87),A LD HL,TPOSS LD DE,lceea CMPpos LD A,(HL) ADD A,A ADD A,(HL) LD (DE),A INC L INC DE DJNZ CMPpos LD A,-1 LD (DE),A INC DE EXD LD (sngCUR),HL LD DE,-mod ADD HL,DE LD (lce88),HL LD A,(LENG) LD C,A LD A,PATS-1 CMPmax LD B,C LD HL,TPOSS CP (HL) JZ CMPmaxQ INC L DJNZ $-4 DEC A JP P,CMPmax CMPmaxQ INC A LD (CMPlst),A LD B,A ADD A,A ADD A,B LD L,A,H,0 ADD HL,HL ;LD DE,6 ;LD H,D,L,D ;ADD HL,DE ;DJNZ $-1 sngCUR=$+1 LD DE,0 ADD HL,DE LD (sngE),HL PUSH DE LD B,3 CMP00 XOR A ;PUSH DE CMP0 IFN portres LD (CMporeA),A ENDIF PUSH AF PUSH BC CALL CMPP POP BC POP AF INC A CMPlst=$+1 CP 0 IFN process JZ CMP0Q ;PUSH AF PUSH BC BIT 0,B ;A<>0: bar увеличивается на 1 CALL OUT7Z,PROBAR POP BC ;POP AF ;LD L,A JR CMP0 ELSE JNZ CMP0 ENDIF CMP0Q ;POP HL ;INC HL,HL ;LD (sngCUR),HL ;EXD LD A,B ADD A,5 LD B,A CP 13+5 JC CMP00 POP HL
PUSH HL
LDIR
DEC A
LD (HL),A
DEC HL
LD C,A
LD A,(t1smp)
IYAi
DEC L
JZ CMt1INE
;JZ CMt1INo ;DEC L CP #F JNZ $+5 CP (HL) JZ CMt1INE LD (HL),A INC A AND #F SUB -#B0 IYAi SUB #B0 ;JZ CMt1INE ;B0 ;Bx,Henv,Lenv CALL NZ,PatDisp CMt1INE INC L LD A,(IX+4) AND #F0 CP C JZ CMt1INo RRCA RRCA RRCA RRCA CP (HL)
JZ CMt1INo
LD DE,mod
ADD IX,DE ;LD IY,(CMt2IY) ;начало текущего трека XOR A CMt20 LD E,A ADD A,A LD L,A LD H,'l5b00 LD C,(HL) INC L LD B,(HL) ;длина старого трека LD A,E EXA LD L,(IX) INC IX LD H,(IX) LD (CMt2HL),HL ;смещ. старого трека INC IX LD DE,mod ADD HL,DE ;PUSH IY ;POP DE ;начало текущего трека LD DE,(CMt2IY) ;начало текущего трека LD A,B OR C JZ CMt2Ncp CMt2cp LD A,(DE) CP (HL) JNZ CMt2Ncp INC HL,DE DEC BC LD A,B OR C JNZ CMt2cp CMt2Ycp POP HL ;бывший IY CMt2HL=$+1 LD DE,0 ;смещ. старого трека (к-й такой же, как новый) LD HL,CMPcnt INC (HL) LD HL,(sngCUR) LD (HL),E INC HL LD (HL),D INC HL ;INC HL,HL,HL,HL LD (sngCUR),HL CMt2IY=$+2 LD IY,0 ;как было до компиляции трека RET CMt2Ncp BIT 7,D JNZ CMtNeMEM LD A,6 OUT (-2),A JR CMt2Ycp ;память кончилась CMtNeMEM EXA INC A CMPcnt=$+1 CP 0 ;кол-во сделанных треков JNZ CMt20 CMt2Q LD HL,CMPcnt LD B,(HL) INC (HL) ;кол-во сделанных треков LD HL,(CMt2IY) PUSH HL LD DE,-mod ADD HL,DE EXD LD HL,(sngCUR) LD (HL),E INC HL LD (HL),D INC HL ;INC HL,HL,HL,HL LD (sngCUR),HL POP DE ;начало текущего трека POP HL ;бывший IY=после конца трека
PUSH HL
LD DE,-mod ADD HL,DE EXD LD HL,(sngCUR) LD (HL),E INC HL LD (HL),D INC HL ;INC HL,HL,HL,HL LD (sngCUR),HL POP DE ;начало текущего трека POP HL ;бывший IY=после конца трека PUSH HL POP IY OR A SBC HL,DE EXD LD L,B ;кол-во сделанных треков ADD HL,HL LD H,'l5b00 LD (HL),E INC L LD (HL),D ;длина трека RET CMPso LD HL,lce8a LD (pnter),HL LD IY,(sngE) XOR A CMPs PUSH AF CALL CMPsmp POP AF INC A AND 31 JNZ CMPs LD HL,lceca LD (pnter),HL CMPo PUSH AF CALL CMPorn POP AF INC A AND 15 JNZ CMPo LD (sngE),IY RET CMPsmp LD L,0 PUSH AF ADD A,'SMPS LD H,A CALL OUT4 LD DE,BUF PUSH DE POP IX LD BC,256 LDIR POP AF LD B,A ADD A,16 LD H,'CMbuf LD L,A LD A,(HL) LD L,B ADD HL,HL LD H,'TSMPSZ OR A JNZ CMsmpU OR (HL) JNZ CMsmpU0 INC A INC HL SUB (HL) DEC HL JNZ CMsmpU0 LD A,(IX+2) XOR 64 OR (IX) OR (IX+1) JNZ CMsmpU0 LD A,(IX+3) CP 15 CMsmpU0 JZ pntii ; CMsmpU CALL PUTIY LD A,(HL) IYAi INC HL LD A,(HL) IYAi LD B,A CMPS0 LD A,(IX+2) LD C,A AND 31 RLCA LD D,A LD A,C AND #20 JZ $+4 LD A,1 OR D
LD D,A
OR D
LD E,A
LD (DE),A
INC E
XOR A
LD (DE),A
INC DEE JNZ $-2 CALL PT2SMP CALL PT2ORN CALL PT2PATS GETPATLEN LD HL,(DETPOSS),A LD HLH,TAUTHOR'TPATSZ LD DEA,TAUTHOR+1 LD (HL),(PATLEN),A LD C,31 RET LDIR PT3PATS POP AF CALL OUT7 LD CB,APATS-1 PT3P0 LD HL,_cea4TPOSS PT3P1 LD DEA,TPOSS(HL) LDIR CP B JZ PT3P0Q XOR A INC L JNZ PT3P1 DJNZ PT3P0 PT3P0Q LD A,B,(DEPT3Plst),A INC E JNZ $-2 CALL PT2SMP CALL PT2ORN CALL PT2PATSGETPATLEN LD LD HL,(TPOSSlce88) LD DE,Hmod ADD HL,'TPATSZDE XOR A PT3P2 PUSH AF CALL KILLBUF LD AE,(HL),(PATLEN),A RET PT3PATS CALL OUT7 LD B,PATS-1PT3P0 LD INC HL,TPOSSPT3P1 LD AD,(HL) CP B JZ PT3P0Q INC LHL JNZ PT3P1 DJNZ PT3P0 PUSH HLPT3P0Q LD A,B3,(PT3PlstPT3Edsp),A LD IX,BUF+3 CALL PT3PAPP POP HL LD E,(lce88HL) INC HL LD DED,mod(HL) ADD INC HL,DE XOR APT3P2 PUSH AF CALL KILLBUFHL LD EA,8,(HLPT3Edsp),A INC HL;LD (PT3putN+1),A ;noise ON LD DIX,(HL)BUF+8 INC HL CALL PT3PAPP PUSH POP HL LD A,3E,(PT3EdspHL),A LD IX,BUF+3 CALL PT3PAPP POP INC HL LD ED,(HL) INC HL LD D,( PUSH HL) INC HL;XOR A PUSH HL LD A,8,(PT3Edsp),A ;LD (PT3putN+1),A ;noise ONOFF LD A,13,(PT3Edsp),A LD IX,BUF+813 CALL PT3PAPP POP HL LD E,(HL) POP AF INC HL LD ;D,(HL)=patlen-1 INC HLCALL PATfrBUF PUSH HL PT3Plst=$+1 ;XOR A CP 0 ;LD (PT3putN+1),A ;noise OFF RET Z LD A,13,(PT3Edsp),INC A LD IX,BUF+13 JR PT3P2 CALL PT3PAPP POP HL ;на 99% совпадает с PT3PATS POP AF PT2PATS;D=patlen-1 CALL PATfrBUFOUT7PT3Plst=$+1 LD B,31 CP 0 PT2P0 LD HL,TPOSS RET Z PT2P1 LD A,(HL) INC A CP B JR PT3P2 JZ PT2P0Q INC L;на 99% совпадает с PT3PATS JNZ PT2P1PT2PATS DJNZ PT2P0 CALL OUT7 PT2P0Q LD A,B,31(PT2Plst),APT2P0 LD HL,TPOSS(_ce84)PT2P1 LD ADE,(mod ADD HL),DE CP B XOR A JZ PT2P0Q PT2P2 PUSH AF INC LCALL KILLBUF JNZ PT2P1 DJNZ PT2P0PT2P0Q LD A,BE,(PT2PlstHL),A LD INC HL, LD D,(_ce84HL) LD DE,mod INC HL ADD PUSH HL,DE XOR LD A,3PT2P2 PUSH AF LD IX,BUF+3 CALL KILLBUFPT2PAPP POP HL LD E,(HL) INC HL LD D,(HL) INC HL PUSH HL LD A,38 LD IX,BUF+38 CALL PT2PAPP POP HL LD E,(HL) INC HL LD D,(HL) INC HL PUSH HL LD A,813 LD IX,BUF+813 CALL PT2PAPP POP HL LD E,(HL) POP AF INC HLCALL PATfrBUF LD D,(HL) PT2Plst=$+1 INC HL CP 0 PUSH HL RET Z LD INC A,13 JR PT2P2 PT3PAPP EXD LD IXDE,BUF+13mod CALL PT2PAPP POP ADD HL,DE POP AF XOR A CALL PATfrBUF LD (PT3orN),APT2Plst=$+1 LD (PT3n),A CP 0 LD D,A RET Z PT3PAP0 LD BC,#1020 INC LD A,(HL) JR PT2P2PT3PAPP INC HL EXD OR A LD DE,mod RET Z ADD HLA,DEB XOR JC PT3orn ADD A,C LD (PT3orN), JC PT3smp ADD A LD (PT3n),AB LD D JP C,PT3vol ADD A,BPT3PAP0 LD BC JP C,#1020PT3Et LD ADD A,(HL)96 INC HL JC PT3note OR A RET Z ADD A,B JC PT3orn JP C,PT3newO ADD A,C JC PT3smp JP C,PT3nois ADD A,B JP C,PT3volPT3Etyp ADD A,B JP C,PT3EtPT3com PT3blN ADD LD A,96(HL) JC PT3note INC HL ADD DEC A,B JP C LD (PT3bls),PT3newO ADD A,C JP C,PT3nois JR PT3PAP0 ADD A,B PT3bls=$+1 JP C,PT3Etyp PT3blQ ADD LD A,B0 JP PT3com OR APT3blN JZ PT3PAP0 LD AE,(HL) INC HL DEC A LD (PT3bls)BC,A18 JR PT3PAP0 PT3bl0 INC D CALL PT3putNPT3bls=$+1 ADD IX,BCPT3blQ DEC E LD A,0 JNZ PT3bl0 OR JR PT3PAP0 PT3note INC D INC A JZ PT3PAP0 LD B,A LD EA,(IX) AND #80 OR B LD (IX),A CALL PT3putN CALL PT3cU LD BC,18 ADD IX,BC JR PT3blQ PT3orn ;Fx,smp*2 RRCA RRCA RRCA RRCA LD (PT3orN),A OR (IX+4) LD (IX+4),A LD A,#F ;LD (PT3typ),A LD (IX+3),A PT3oQ LD A,(HL) INC HL RLCA RLCA LD B,A AND #80 LD (IX),A LD A,B RLA OR (IX+3) LD (IX+3),A JP PT3PAP0 PT3smp JZ PT3bl ;end of note CP 16 JC $+6 SET 7,(IX) AND #F RLCA RLCA RLCA RLCA OR (IX+3) LD (IX+3),A JP PT3PAP0 PT3bl INC D CALL PT3putN CALL PT3cU LD BC,18 ADD IX,BC JP PT3blQ PT3vol JZ PT3res OR (IX+4) LD (IX+4),A JP PT3PAP0 PT3res LD A,(IX) AND #80 OR 97 LD (IX),A CALL PT3putN CALL PT3cU LD BC,18 ADD IX,BC INC D JP PT3blQ PT3Et JNZ PT3nEof ;B0=envoff LD A,#F ;LD (PT3typ),A OR (IX+3) LD (IX+3),A JP PT3eQ PT3nEof DEC A JP Z,PT3blN ;LD (PT3typ),A LD B,A LD A,(IX+3) AND #F0 OR B LD (IX+3),A CALL PT3env PT3orN=$+1 PT3eQ LD A,0 OR (IX+4) LD (IX+4),A JP PT3PAP0 PT3env PUSH HL PUSH IX POP HL PT3Edsp=$+1 LD BC,0 OR A SBC HL,BC LD B,H LD C,L POP HL LD A,(HL) INC HL LD (BC),A INC BC LD A,(HL) INC HL LD (BC),A RET PT3newO RLCA RLCA RLCA RLCA LD (PT3orN),A LD B,A JNZ PT3nXF0X LD A,(IX+3) AND #F JNZ PT3nXF0X LD A,(IX+3) OR #F LD (IX+3),A PT3nXF0X LD A,(IX+4) AND #F OR B LD (IX+4),A ;PT3typ=$+1 ;LD A,0 ;OR (IX+3) ;LD (IX+3),A JP PT3PAP0 PT3nois LD (PT3n),A JP PT3PAP0 ;4 PT3putN ;LD A,0 ;OR A ;RET Z LD A,LX ;проверяем channel=B RRA RET C LD (IX-6),0 PT3n=$-1 RET PT3Etyp JNZ PT3EnO LD A,#F ;LD (PT3typ),A OR (IX+3) LD (IX+3),A JR PT3EtyQ PT3EnO ;LD (PT3typ),A OR (IX+3) LD (IX+3),A CALL PT3env PT3EtyQ LD A,(PT3orN) OR (IX+4) LD (IX+4),A JP PT3oQ PT3jp=$+1 PT3cU CALL PT3ret PUSH HL LD HL,PT3ret LD (PT3jp),HL POP HL PT3ret RET PT3com PUSH HL DEC A LD HL,PT3glis JZ PT3cQ DEC A LD HL,PT3port JZ PT3cQ DEC A LD HL,PT3so JZ PT3cQ DEC A LD HL,PT3oo JZ PT3cQ DEC A LD HL,PT3vib JZ PT3cQ SUB 3 LD HL,PT3egl JZ $+5 LD HL,PT3tmp PT3cQ LD (PT3jp),HL POP HL JP PT3PAP0 PT3tmp LD A,(HL) INC HL LD (IX+2),A LD (IX+1),#B0 RET PT3port LD A,(HL) OR #30 LD (IX+1),A INC HL,HL,HL PUSH DE LD E,(HL) INC HL LD D,(HL) INC HL EXD LD A,H OR A ;JP P,$+6 CALL M,NEGHL XIX2EPOP EXD IFN goodpak LD (IX+2),E POP DE RET ELSE LD A,E POP DE IX2A LD (IX+2),A RET ENDIF PT3so LD A,(HL) INC HL LD (IX+1),#40 IFN goodpak LD (IX+2),A RET ELSE JR IX2A ENDIF PT3oo LD A,(HL) INC HL LD (IX+1),#50 IFN goodpak LD (IX+2),A RET ELSE JR IX2A ENDIF PT3vib LD A,(HL) RRCA RRCA RRCA RRCA INC HL OR (HL) INC HL LD (IX+1),#60 IFN goodpak LD (IX+2),A RET ELSE JR IX2A ENDIF PT3glis PUSH DE LD A,(HL) OR #10 LD C,A INC HL LD E,(HL) INC HL LD D,(HL) INC HL EXD ;LD A,H ;OR A LD (IX+1),C BIT 7,H JZ PT3gl1 ;JP P,PT3gl1 CALL NEGHL LD A,C AND #F OR #20 LD (IX+1),A PT3gl1 EXD LD (IX+2),E POP DE RET PT3egl PUSH DE LD A,(HL) OR #90 LD C,A INC HL LD E,(HL) INC HL LD D,(HL) INC HL EXD ;LD A,H ;OR A LD (IX+1),C BIT 7,H JZ PT3egl9 ;JP P,PT3egl9 CALL NEGHL LD A,C AND #F OR #A0 LD (IX+1),A PT3egl9 IFN goodpak EXD LD (IX+2),E POP DE RET ELSE JR XIX2EPOP ENDIF PT2orn RLCA RLCA RLCA RLCA LD (PT2orN),A LD B,A LD A,(IX+4) AND #F OR B LD (IX+4),A PT2typ=$+1 LD A,0 OR (IX+3) LD (IX+3),A JR PT2PAP0 PT2blN LD (PT2bls),A JR PT2PAP0 PT2vol OR (IX+4) LD (IX+4),A JR PT2PAP0 PT2tmp LD (IX+1),#B0 LD A,(HL) JR IX2P2P PT2port LD (IX+1),#31 LD A,(HL) INC HL INC HL OR A JP P,IX2P2P NEG JR IX2P2P PT2glis LD (IX+1),#11 LD A,(HL) BIT 7,A JZ $+8 LD (IX+1),#21 NEG IX2P2P LD (IX+2),A INC HL JR PT2PAP0 PT2PAPP LD (PT2Edsp),A EXD LD DE,mod ADD HL,DE XOR A LD (PT2typ),A LD (PT2orN),A LD D,A PT2PAP0 LD C,16 LD A,(HL) INC HL OR A RET Z ADD A,32 JC PT2smp ADD A,96 JC PT2note ADD A,C JP C,PT2env ADD A,C JC PT2orn ADD A,64 JC PT2blN ADD A,C JC PT2vol INC A JZ PT2tmp INC A JZ PT2glis INC A JZ PT2port INC A JZ PT2PAP0 LD A,(HL) INC HL PUSH HL LD BC,(PT2Edsp) DEC BC,BC PUSH IX POP HL SBC HL,BC PT2NOI LD (HL),A ;noise
LD BC,18
SBC HL,BC
OR (IX+4)
LD (IX+4),A
POP HL
LD C,A
XOR A
;LD A,(IX+1+2)
;AND #F
INC L
LD A,(HL),(BC),A
DEC L
LD A,(HL)