home *** CD-ROM | disk | FTP | other *** search
Wrap
' ' The Effects Machine ' Written by Robert Slater, 1988-1990 ' ©1990 Amiga Computing ' Clmemm%=0:POKEL 0,0 DEFLNG T,S DEFINT p,RT DIM NBuf&(20),BufLen&(20),St&(20),E&(20),Pi&(20),Reps&(20),Start&(20),EndPos&(20),Res&(20),p(255),Per&(20),Grf%,Vol&(20),Ins$(20),Gr(5),Octs%(10),Key$(24),Keyf(24),Keyb$(24),Fred(7),Fgre(7),Fblu(7),Blit1%(66),Nam$(255),Sta$(255) FOR A%=1 TO 20:Grf%=0:Reps&(A%)=1:BufLen&(A%)=0:Vol&(A%)=64:NEXT Fred(0)=0:Fgre(0)=0:Fblu(0)=0 Fred(1)=1:Fgre(1)=1:Fblu(1)=1 Fred(2)=.53:Fgre(2)=.53:Fblu(2)=.53 Fred(3)=.26:Fgre(3)=.26:Fblu(3)=.26 Fred(4)=.86:Fgre(4)=0:Fblu(4)=0 Fred(5)=1:Fgre(5)=.73:Fblu(5)=0 Fred(6)=0:Fgre(6)=.6:Fblu(6)=1 Fred(7)=1:Fgre(7)=.46:Fblu(7)=.4 LIBRARY "df0:libs/dos.library" LIBRARY "df0:libs/exec.library" LIBRARY "df0:libs/intuition.library" WINDOW CLOSE 3 WINDOW CLOSE 4 SCREEN 1,640,256,3,2 WINDOW 1,"Effects Machine",(0,0)-(625,200),0,1 WINDOW OUTPUT 1 bless&=2^11:gmzero&=2^10:w.base&=WINDOW(7):w.modi&=w.base&+24 Mode&=PEEKL(w.modi&):Mode&=Mode& AND (2^26-1-gmzero&) Mode&=Mode& OR bless& :POKEL w.modi&,Mode& CALL RefreshWindowFrame(w.base&) FOR i%=0 TO 7 :PALETTE i%,0,0,0:NEXT DECLARE FUNCTION AllocMem& LIBRARY DECLARE FUNCTION AvailMem& LIBRARY DECLARE FUNCTION xOpen& LIBRARY DECLARE FUNCTION xWrite& LIBRARY DECLARE FUNCTION xRead& LIBRARY DECLARE FUNCTION Examine& LIBRARY DECLARE FUNCTION Lock& LIBRARY DECLARE FUNCTION Rename% LIBRARY DECLARE FUNCTION ExNext& LIBRARY DECLARE FUNCTION IoErr& LIBRARY RT=1 :S=0 :NFilt%=1 :ILock%=0 MemType&=65538& :Stat$="CHIP Memory" :Octs%=1:Rpt%=0 :Playing%=0 Infobytes&=252 Inflop&=AllocMem&(Infobytes&,MemType&) Info2&=AllocMem&(4&,MemType&) GOSUB InitFreqs SpecMem&=AllocMem&(306&,65537&) LoadDolby Vol&=64 :Meml&=2&:Oxy=6:Oxy2=2:Dir$="df0:"+CHR$(0) Ech%=1:Ech1%=1:GOSUB Infobits GET(0,42)-(320,42),Blit1%:Hack%=0:Bay%=20:Try%=20:WINDOW 2,"Hello",(0,0)-(10,10),0,1:WINDOW OUTPUT 2:WINDOW CLOSE 2:WINDOW OUTPUT 1:LINE(0,0)-(40,20),2,bf FOR j=0 TO 16:Fac!=j/16:FOR i%=0 TO 7:PALETTE i%,Fred(i%)*Fac!,Fgre(i%)*Fac!,Fblu(i%)*Fac!:NEXT:NEXT GOTO MenuInit Infobits: COLOR 5,3:LINE (7,112)-(407,167),3,bf:LINE(0,33)-(610,41),0,bf LOCATE 15,2:PRINT"Memfree :";AvailMem&(Meml&) LOCATE 16,2:PRINT"Length :":LOCATE 17,2:PRINT"Address :":LOCATE 18,2:PRINT"Finish :" LOCATE 19,2:PRINT"Period :":LOCATE 20,2:PRINT"Channel :":LOCATE 18,27:PRINT"Status :" LOCATE 15,27:PRINT"Start:":LOCATE 17,27:PRINT"Sampling period:":LOCATE 19,27:PRINT"Play length:" LOCATE 16,27:PRINT"End :":LOCATE 21,2 :PRINT"Name= ":COLOR 1,2:RETURN MenuInit: MENU 1,0,1,"Project" MENU 1,1,1,"LOAD & Catalogue" MENU 1,2,1,"Quick LOAD" MENU 1,3,1,"LOAD as DUMP" MENU 1,4,1,"Rename File" MENU 1,5,1,"Delete File" MENU 1,6,1,"SAVE as IFF" MENU 1,7,1,"SAVE as DUMP" MENU 1,8,1,"QUIT" MENU 3,0,1,"Effects" MENU 3,1,1,"Metallic" MENU 3,2,1,"Backwards" MENU 3,3,1,"Flip" MENU 3,4,1,"Mix" MENU 3,5,1,"Expand" MENU 3,6,1,"Compress" MENU 3,7,1,"Treble Waah" MENU 3,8,1,"FadeIn" MENU 3,9,1,"FadeOut" MENU 3,10,1,"Echo" MENU 3,11,1,"Alter Volume" MENU 3,12,1,"Waah In" MENU 3,13,1,"Interpolate" MENU 3,14,1,"Distort" MENU 4,0,1,"Special1" MENU 4,1,1,"Spectrum graph" MENU 4,2,1,"Invert Sound" MENU 4,3,1,"SPECTRUM Analysis" MENU 4,4,1,"Harmonic Filter" MENU 2,0,1,"General" MENU 2,1,1,"Play Start" MENU 2,2,1,"Play End" MENU 2,3,1,"Play Pitch" MENU 2,4,1,"NEW Channel" MENU 2,5,1,"SYNTHESIZE" MENU 2,6,1,"REPEAT PLAY (Y/N)?" MENU 2,7,1,"Filter Mode Switch" MENU 2,8,1,"Get Volumes" MENU 2,9,1,"Memory Hack ON" MENU 2,10,1,"Keyboard" MENU 2,11,1,"Octave" MENU 2,12,1,"Filter Correct ON" MENU 2,13,1,"Set Sampling Period" MENU 6,0,1,"MEMORY" MENU 6,1,1,"CHIP Memory" MENU 6,2,1,"FAST Memory" MENU 6,3,1,"FAST to CHIP" MENU 6,4,1,"CHIP to FAST" MENU 6,5,1,"Edit Waveform" MENU 6,6,1,"Cut Sample" MENU 6,7,1,"DELETE Sample" MENU 6,8,1,"Copy to New Channel" MENU 6,9,1,"ADD Channel to Channel" MENU 6,10,1,"CLEAR MEMORY" MENU 5,0,1,"Special2" MENU 5,1,1,"Smooth Waveform" MENU 5,2,1,"Low-Pass Filter" MENU 5,3,1,"High-Pass Filter" MENU 5,4,1,"BASS boost" MENU 5,5,1,"Centralise" MENU 5,6,1,"Brighten Sound" MENU 5,7,1,"TREBLE boost" MENU 5,8,1,"Band Pass Filter" MENU 5,9,1,"Tremolo" ON MENU GOSUB Mem MENU ON BBoost%=0:PBP=0:PBP2=608:PYY=115:Occy=3:DmCh%=1:Froct=2^(3-7):Dma%=1:Dma2%=0:FCor%=0 Con&=14676118&:Ad&=Con&+10+Dma2%:Le&=Ad&+4:Pe&=Ad&+6:Vo&=Ad&+8:Xla%=0:Yla%=0 PXP=350:LINE(PXP,33)-(PXP,41),7:TT%=0 LoopB: A1&=0:B1&=2:IF Rpt%=1 THEN A1&=St&(RT):B1&=NBuf&(RT)/2 LoopC: X=MOUSE(1):Y=MOUSE(2):A$=INKEY$:IF PEEK(&Hbfec01)=97 AND RT>1 THEN RT=RT-1:Plonk:GOSUB Pat IF PEEK(&Hbfec01)=99 AND RT<20 THEN RT=RT+1:Plonk:GOSUB Pat IF MOUSE(0)=0 THEN GOTO LoopB IF Y>32 AND Y<42 AND X<613 THEN GOTO CPit IF X>608 THEN GOTO LoopB IF Y>168 AND Y<177 THEN GOTO Csta IF Y>177 AND Y<186 THEN GOTO Cend IF Y>42 AND Y<107 THEN GOTO MemoryPos IF X>579 AND X<598 AND Y>114 AND Y<160 THEN GOTO AltVol IF X>453 AND X<569 AND Y>115 AND Y<160 THEN GOTO IconJobby GOTO LoopB SUB PlaySample(X1&,X2&,X3&,X4&,X5&,X6&,X7&) STATIC END SUB IconJobby: Ic%=0:B%=1 FOR Y%=115 TO 130 STEP 15:FOR X%=453 TO 513 STEP 60 IF X>X% AND X<(X%+56) AND Y>Y% AND Y<(Y%+15) THEN Ic%=B% B%=B%+1:NEXT:NEXT FOR Y%=145 TO 152 STEP 7:FOR X%=453 TO 513 STEP 60 IF X>X% AND X<(X%+56) AND Y>Y% AND Y<(Y%+15) THEN Ic%=B% B%=B%+1:NEXT:NEXT IF Ic%=0 THEN Xla%=X:YLa%=Y:GOTO LoopB IF Ic%=1 THEN GOSUB Play IF Ic%=2 THEN CALL Stopp:Playing%=0:Yla%=Y:XLa%=X IF Ic%=3 THEN Grf%=1:GOSUB Graph IF Ic%=4 THEN GOSUB ResetIt:Yla%=Y:Xla%=X IF Ic%=5 AND St&(RT)>Start&(RT) THEN St&(RT)=St&(RT)-1:NBuf&(RT)=E&(RT)-St&(RT):GOSUB DrawIt IF Ic%=6 AND St&(RT)<E&(RT) THEN St&(RT)=St&(RT)+1:NBuf&(RT)=E&(RT)-St&(RT):GOSUB DrawIt2 IF Ic%=7 AND E&(RT)>St&(RT) THEN E&(RT)=E&(RT)-1:NBuf&(RT)=E&(RT)-St&(RT):GOSUB DrawIt3 IF Ic%=8 AND E&(RT)<EndPos&(RT) THEN E&(RT)=E&(RT)+1:NBuf&(RT)=E&(RT)-St&(RT):GOSUB DrawIt4 GOTO LoopB DrawIt: IF (St&(RT)/2) <> INT(St&(RT)/2) THEN St&(RT)=St&(RT)-1 LINE(0,169)-(608,176),0,bf:X=(St&(RT)-Start&(RT))/(BufLen&(RT)/608):LINE(X,169)-(X,176),7:COLOR 7,3:LOCATE 15,33:PRINT St&(RT);" ":LOCATE 19,39:PRINT E&(RT)-St&(RT);" ":COLOR 1,2:RETURN DrawIt2: IF (St&(RT)/2) <> INT(St&(RT)/2) THEN St&(RT)=St&(RT)+1 LINE(0,169)-(608,176),0,bf:X=(St&(RT)-Start&(RT))/(BufLen&(RT)/608):LINE(X,169)-(X,176),7:COLOR 7,3:LOCATE 15,33:PRINT St&(RT);" ":LOCATE 19,39:PRINT E&(RT)-St&(RT);" ":COLOR 1,2:RETURN DrawIt3: IF (E&(RT)/2) <> INT(E&(RT)/2) THEN E&(RT)=E&(RT)-1 LINE(0,178)-(608,185),0,bf:X=(E&(RT)-Start&(RT))/(BufLen&(RT)/608):LINE(X,178)-(X,185),7:COLOR 7,3:LOCATE 16,33:PRINT E&(RT);" ":LOCATE 19,39:PRINT E&(RT)-St&(RT);" ":COLOR 1,2:RETURN DrawIt4: IF (E&(RT)/2) <> INT(E&(RT)/2) THEN E&(RT)=E&(RT)+1 LINE(0,178)-(608,185),0,bf:X=(E&(RT)-Start&(RT))/(BufLen&(RT)/608):LINE(X,178)-(X,185),7:COLOR 7,3:LOCATE 16,33:PRINT E&(RT);" ":LOCATE 19,39:PRINT E&(RT)-St&(RT);" ":COLOR 1,2:RETURN ResetIt: St&(RT)=Start&(RT):E&(RT)=EndPos&(RT):NBuf&(RT)=BufLen&(RT) LINE(0,169)-(608,176),0,bf:LINE(0,178)-(608,185),0,bf:LINE(0,169)-(0,176),7:LINE(608,178)-(608,185),7:COLOR 7,3:LOCATE 15,33:PRINT St&(RT);" ":LOCATE 16,33:PRINT E&(RT);" ":LOCATE 19,39:PRINT E&(RT)-St&(RT);" ":COLOR 1,2 RETURN MemoryPos: AA&=St&(RT)+INT(X*(NBuf&(RT)/608)):LOCATE 1,1:PRINT"Address= ";AA&;" ":GOTO LoopB Csta: Xoff&=Start&(RT)+(X*(BufLen&(RT)/608)) IF Xoff&>E&(RT) THEN GOTO LoopB St&(RT)=Xoff&:LINE(0,169)-(608,176),0,bf:LINE(X,169)-(X,176),7:IF (St&(RT)/2) <> INT(St&(RT)/2) THEN St&(RT)=St&(RT)-1 NBuf&(RT)=E&(RT)-Xoff&:COLOR 7,3 LOCATE 15,33 :PRINT St&(RT);" " IF (NBuf&(RT)/2) <> INT(NBuf&(RT)/2) THEN NBuf&(RT)=NBuf&(RT)-1:E&=St&(RT)+NBuf&(RT) LOCATE 19,39:PRINT NBuf&(RT);" ":COLOR 1,2:GOTO LoopB Cend: Xoff&=Start&(RT)+(X*(BufLen&(RT)/608)) IF Xoff&<St&(RT) THEN GOTO LoopB E&(RT)=Xoff&:LINE(0,178)-(608,185),0,bf:LINE(X,178)-(X,185),7:IF (E&(RT)/2) <> INT(E&(RT)/2) THEN E&(RT)=E&(RT)-1 NBuf&(RT)=E&(RT)-St&(RT):COLOR 7,3:LOCATE 16,33 :PRINT E&(RT);" " IF (NBuf&(RT)/2) <> INT(NBuf&(RT)/2) THEN NBuf&(RT)=NBuf&(RT)-1:E&=St&(RT)+NBuf&(RT) LOCATE 19,39:PRINT NBuf&(RT);" ":COLOR 1,2:GOTO LoopB SUB Stopp STATIC SHARED Con& POKEW Con&,15 END SUB SUB Player(X1&,X2&,X3&,X4&,X5&,X6&) STATIC SHARED Dma%,Con&,Ad&,Rpt% Per%=X3&:Volu%=X4&:IF X2&>65534 THEN X5&=X1&+131068:X6&=X2&-65534:X2&=65534 IF (X2&+X6&)>131068 THEN LOCATE 2,1 :PRINT "Sorry, too large.":EXIT SUB Ad&=Ad&+16:Dma2%=Dma2%+1:Dma%=2^Dma2%:IF Ad&>14676176 THEN Ad&=Con&+10:Dma%=1:Dma2%=0 IF X5&>X1& THEN POKEW Con&,Dma%:FOR T%=1 TO 500:NEXT:POKEL Ad&+2,X2&:POKEL Ad&,X1&:POKEW Ad&+6,Per%:POKEW Ad&+8,Volu%:POKEW Con&,&H8200+Dma%:FOR T%=1 TO 500:NEXT:POKEL Ad&+2,X6&:POKEL Ad&,X5&:EXIT SUB POKEW Con&,Dma%:FOR T%=1 TO 500:NEXT:POKEL Ad&+2,X2&:POKEL Ad&,X1&:POKEW Ad&+6,Per%:POKEW Ad&+8,Volu% Dmc%=&H8200+Dma%:POKEW Con&,Dmc%:FOR T%=1 TO 500:NEXT IF Rpt%=0 THEN POKEW Ad&+4,2:POKEL Ad&,0 END SUB CPit: Playing%=1:COLOR 7,3 Pitch%=(.9*X)+124 :Pi&(RT)=Pitch%:LOCATE 19,11 :PRINT Pi&(RT);" ":COLOR 1,2 LINE(0,33)-(610,41),0,bf:PXP=X:LINE(X,33)-(X,41),7 Buff&=NBuf&(RT)/2 :IF (Buff&/2) <> INT(Buff&/2) THEN Buff&=Buff&-1 A1&=0:B1&=2 :Playing%=1 IF Rpt%=1 THEN A1&=St&(RT):B1&=Buff& CALL Player(St&(RT),Buff&,Pi&(RT),Vol&(RT),A1&,B1&) PitchLoop: X%=MOUSE(1):Pi&(RT)=(.9*X%)+124:LINE(X,33)-(X,41),7:LINE(PXP,33)-(PXP,41),0:PXP=X:LINE(X,33)-(X,41),7 POKEW Ad&+6,Pi&(RT):IF MOUSE(0)=-1 THEN PitchLoop GOTO LoopB Pat: GOSUB InfoBits:COLOR 7,3 LOCATE 17,11:PRINT Start&(RT):LOCATE 19,11:PRINT Pi&(RT);" " LOCATE 16,11:PRINT BufLen&(RT):LOCATE 20,11:PRINT RT;" " NBuf&(RT)=E&(RT)-St&(RT):LOCATE 15,33 :PRINT St&(RT);" " LOCATE 16,33 :PRINT E&(RT);" ":LOCATE 15,11 :PRINT AvailMem&(Meml&) LOCATE 18,11:PRINT EndPos&(RT):LOCATE 17,43 :PRINT Per&(RT) LOCATE 18,35 :PRINT Stat$:LOCATE 21,8 :PRINT Ins$(RT):LOCATE 19,39:PRINT NBuf&(RT) COLOR 1,2:GOTO Graph Play: IF Playing%=1 THEN CALL Stopp Buff&=NBuf&(RT)/2:IF (Buff&/2) <> INT(Buff&/2) THEN Buff&=Buff&-1 A1&=0:B1&=2 :Playing%=1 IF Rpt%=1 THEN A1&=St&(RT):B1&=Buff& CALL Player(St&(RT),Buff&,Pi&(RT),Vol&(RT),A1&,B1&) PlayLoopo: IF MOUSE(0)=-1 THEN PlayLoopo RETURN Pitch:IF Playing%=1 THEN CALL Stopp COLOR 7,3:LOCATE 19,11:INPUT " ",Pi&(RT) :Buff&=NBuf&(RT)/2 :IF (Buff&/2) <> INT(Buff&/2) THEN Buff&=Buff&-1 A1&=0:B1&=2 :Playing%=1:COLOR 1,2 IF Rpt%=1 THEN A1&=St&(RT):B1&=Buff& CALL Player(St&(RT),Buff&,Pi&(RT),Vol&(RT),A1&,B1&) RETURN Rep: IF Rpt%=0 THEN Rpt%=1 ELSE Rpt%=0 RETURN Start: COLOR 7,3:LOCATE 15,33:INPUT " ",St&(RT) IF Hack%=1 THEN StartOk IF St&(RT)<Start&(RT) OR St&(RT)>EndPos&(RT) THEN St&(RT)=Start&(RT) StartOk: IF (St&(RT)/2)<>INT(St&(RT)/2) THEN St&(RT)=St&(RT)-1 NBuf&(RT)=E&(RT)-St&(RT):COLOR 1,2:GOTO Pat Fin: COLOR 7,3:LOCATE 16,33:INPUT " ",E&(RT) IF Hack%=1 THEN FinOk IF E&(RT)<St&(RT) OR E&(RT)>EndPos&(RT) THEN E&(RT)=EndPos&(RT) FinOk: IF (E&(RT)/2)<>INT(E&(RT)/2) THEN E&(RT)=E&(RT)-1 NBuf&(RT)=E&(RT)-St&(RT):COLOR 1,2:GOTO Pat Graph: LINE(0,44)-(609,106),0,bf:LINE(0,43)-(609,43),3:LINE(0,75)-(609,75),3:LINE(0,107)-(609,107),3 IF NBuf&(RT)=0 OR Grf%=0 THEN RETURN Y%=PEEK(St&(RT)):IF Y%>127 THEN Y%=Y%-256 Frac=NBuf&(RT)/608 FOR X%=0 TO 608:X1%=X%:Y1%=Y%:Y%=PEEK(St&(RT)+INT(X%*Frac)):IF Y%>127 THEN Y%=Y%-256 LINE (X1%,75-(Y1%/4))-(X%+1,75-(Y%/4)),6:NEXT:Grf%=0 Graphloopo: IF MOUSE(0)=-1 THEN GraphLoopo RETURN SUB Plonk STATIC SHARED BufLen&(),St&(),Start&(),E&(),RT LINE(0,169)-(608,176),0,bf:LINE(0,178)-(608,185),0,bf IF BufLen&(RT)=0 THEN EXIT SUB X=(St&(RT)-Start&(RT))/(BufLen&(RT)/608):LINE(X,169)-(X,176),7:X=(E&(RT)-Start&(RT))/(BufLen&(RT)/608):LINE(X,178)-(X,185),7 END SUB Mem: Unc%=0 :Abc%=0 :Botch%=0 :LDump%=0 LINE(0,0)-(620,31),2,bf:LOCATE 10,30 :COLOR 1,3:PRINT"PROCESSING - Please Wait...":COLOR 1,2:LOCATE 1,1 MenDuf%=MENU(0):MenDuf1%=MENU(1) ON MenDuf% GOSUB Fst,Scn,Thr,Frt,Ffth,Sixth LOCATE 1,1 :PRINT" " IF (NBuf&(RT)/2) <> INT(NBuf&(RT)/2) THEN NBuf&(RT)=NBuf&(RT)-1:E&(RT)=St&(RT)+NBuf&(RT) LINE(0,0)-(615,23),2,bf:LINE(0,33)-(610,41),0,bf:LINE(0,169)-(608,176),0,bf:LINE(0,178)-(608,185),0,bf:LINE(0,44)-(609,106),0,bf:LINE(0,43)-(609,43),3:LINE(0,75)-(609,75),3:LINE(0,107)-(609,107),3:X%=(Pi&(RT)-124)/.9:LINE(X%,33)-(X%,41),7 CALL Plonk:LOCATE 2,1 :PRINT "First Graph Sample = ";:Y%=PEEK(St&(RT)):IF Y%>127 THEN Y%=-256+Y% Y1%=PEEK(E&(RT)):IF Y1%>127 THEN Y1%=-256+Y1% PRINT Y%:LOCATE 3,1 :PRINT "Last Graph Sample = ";Y1%:IF FCor%=1 THEN POKE Start&(RT),0:POKE EndPos&(RT),0 RETURN QJobby: LOCATE 1,1 :INPUT "Are you sure you want to quit? (Y/N) : ",A$ IF A$="Y" OR A$="y" THEN GOSUB Clmem:SCREEN CLOSE 1:END RETURN Fst: ON MenDuf1% GOSUB Ldr,Qlo,LDump,Renm,KilFile,Sav,Savd,QJobby RETURN Scn: ON MenDuf1% GOSUB Start,Fin,Pitch,Ch1,CreSin,Rep,Nfon,GetVol,GetHack,KeyBoard,OccyWoccy,FiltCorrect,SetPerd fhandle&=0 RETURN Thr: ON MenDuf1% GOSUB Wibble,Backw,Flip,Mixat,DoubCycle,HalfCycle,twaah,Fdin,Fdou,Echo,Nams,Waah,Nspd,NeWav RETURN Frt: ON MenDuf1% GOSUB Spegraph,Invt,FFT2,HarFilt RETURN Ffth: ON MenDuf1% GOSUB Fltr,Fltr2,HighPass,BoBass,Centralise,UnFltr,DoBTreb,GetTone,Tremolo RETURN Sixth: Clmemm%=1 ON MenDuf1% GOSUB Chip,Fast,FCHIP,CFAST,Edform,Cut,Filter,Nslot,Acc,ClMem COLOR 7,3:LOCATE 18,35 :PRINT Stat$:Clmemm%=0 LOCATE 15,11 :PRINT AvailMem&(Meml&);" ":COLOR 1,2 RETURN Tremolo: IF NBuf&(RT)=0 THEN RETURN LOCATE 1,1:PRINT "Enter cycle length (1-";NBuf&(RT);") : ";:INPUT Cyc& IF Cyc&<1 OR Cyc&>NBuf&(RT) THEN BEEP:RETURN INPUT "Enter depth (0-127): ",Fdep :IF Fdep<0 OR Fdep>127 THEN BEEP:RETURN Frac=3.1415926*2/Cyc& FOR T=St&(RT) TO E&(RT):Y%=PEEK(T):IF Y%>127 THEN Y%=Y%-256 Fa=ABS(SIN(T*Frac)):Fmul=(127-(ABS(SIN(T*Frac))*Fdep))/127 Y%=Y%*Fmul:IF Y%<0 THEN Y%=Y%+256 POKE T,Y%:NEXT:RETURN SetPerd: LOCATE 1,1 :INPUT "Enter new sampling period : ",Per&(RT) IF Per&(RT)<124 THEN BEEP:Per&(RT)=350 GOTO PlayIt DoBTreb: IF NBuf&(RT)=0 THEN RETURN LOCATE 1,1 :INPUT "Enter Treble Volume (0-800%): ",FBass IF FBass<0 OR FBass>800 THEN BEEP:RETURN FBass=FBass/100:CALL Sharp(NBuf&(RT),St&(RT),FBass) RETURN tWaah: IF NBuf&(RT)=0 THEN RETURN LOCATE 1,1 :INPUT "Enter brightness multiplier (2-?): ",Fbri IF Fbri<2 THEN BEEP:RETURN l&=NBuf&(RT)/Fbri:B&=E&(RT):S&=St&(RT):Fgra=Fbri/(B&-S&):Bu&=l&-1 FOR T=S& TO B& STEP l& :Fbrt=(T-S&)*Fgra:CALL Sharp(Bu&,T,Fbrt):NEXT:RETURN SUB Sharp(Buff&,Sta&,Fmul) SHARED MemType& AlloAc&=AllocMem&(Buff&,MemType&) IF AlloAc&<=0 THEN BEEP:PRINT "Not enough memory!":EXIT SUB CALL CopyMem(Sta&,AlloAc&,Buff&) En&=Sta&+Buff&:SS&=AlloAc&+1:EE&=AlloAc&+Buff&-1:CALL Dolb2(SS&,EE&):Dis&=AlloAc&-Sta& FOR T=Sta& TO En&:Y%=PEEK(T+Dis&):Y1%=PEEK(T):IF Y%>127 THEN Y%=Y%-256 IF Y1%>127 THEN Y1%=Y1%-256 Y1%=((Y1%-Y%)*Fmul)+Y%:IF Y1%>127 THEN Y1%=127 IF Y1%<-128 THEN Y1%=-128 IF Y1%<0 THEN Y1%=Y1%+256 POKE T,Y1%:NEXT CALL FreeMem&(AlloAc&,Buff&) END SUB Fltr2: SS&=St&(RT)+1:EE&=E&(RT)-1:CALL Dolb2(SS&,EE&) RETURN FiltCorrect: IF FCor%=0 THEN FCor%=1:MENU 2,12,1,"Filter Correct OFF":RETURN FCor%=0:MENU 2,12,1,"Filter Correct ON":RETURN GetHack: IF Hack%=0 THEN Hack%=1:MENU 2,9,1,"Memory Hack OFF":RETURN Hack%=0:MENU 2,9,1,"Memory Hack ON":RETURN GetVol :Q&=0:Q1&=0:IF NBuf&(RT)=0 THEN RETURN FOR T=St&(RT) TO E&(RT) :Y%=PEEK(T):IF Y%>127 THEN Y%=Y%-256 Q&=Q&+ABS(Y%):Q1&=Q1&+Y%:NEXT:A%=Q&/NBuf&(RT):B%=Q1&/NBuf&(RT) LOCATE 4,1 :PRINT "Resultant Volume= ";A%:RETURN KeyBoard: Period&=60000&:IF NBuf&(RT)=0 THEN RETURN Buff&=NBuf&(RT)/2 :IF (Buff&/2) <> INT(Buff&/2) THEN Buff&=Buff&-1 A1&=0:B1&=2 :Playing%=1:LOCATE 1,1 :PRINT "Press Shift AND 'z' to exit" PRINT "Press keys on keyboard to play tune":IF Rpt%=1 THEN A1&=St&(RT):B1&=Buff& Board2: A$=INKEY$:IF A$="" THEN Board2 FOR T%=1 TO 24:IF Keyb$(T%)=A$ THEN Period&=INT(3579545&/(Keyf(T%)*50))*Oxy2:CALL Player(St&(RT),Buff&,Period&,Vol&(RT),A1&,B1&) NEXT:IF A$<>"Z" THEN Board2 RETURN OccyWoccy: LOCATE 1,1 :PRINT "Current Octave= ";Oxy;" " INPUT "Enter Octave (1-8): ",Oxy :IF Oxy<1 OR Oxy>8 THEN Oxy=6 Oxy2=2^(7-Oxy):RETURN StopIt: CALL Stopp RETURN SUB scan1(X1&) STATIC SHARED T,RT,E&(),T1,A1%,A2%,B1%,Tbot% A1%=0:B1%=0:A%=0:B%=0:C%=0:TT=X1&:Y1%=PEEK(TT):IF Y1%>127 THEN Y1%=Y1%-256 Peak1&=T:Peak2&=T1 WHILE (C%=0):Y%=PEEK(TT):IF Y%>127 THEN Y%=Y%-256 IF Y%<Y1% AND B%=0 THEN B%=1:Peak1&=TT-1:A1%=Y1%:Y1%=Y%:A%=0 IF Y%>Y1% AND B%=1 AND A%=0 THEN A%=1:B1%=Y1% IF Y%<Y1% AND A%=1 THEN C%=1:Peak2&=TT-1:A2%=Y1% IF TT=E&(RT) THEN C%=1:Peak2&=TT:Tbot%=1 Y1%=Y%:TT=TT+1:WEND:T=Peak1&:T1=peak2&:END SUB SUB scan0(X1&) STATIC SHARED T,RT,E&(),T1,A1%,A2% A%=0:B%=0:C%=0:TT=X1&:Y1%=PEEK(TT):IF Y1%>127 THEN Y1%=Y1%-256 Peak1&=T:Peak2&=T1 WHILE (C%=0):Y%=PEEK(TT):IF Y%>127 THEN Y%=Y%-256 IF Y%>Y1% AND A%=0 THEN A%=1 IF Y%<Y1% AND A%=1 AND B%=0 THEN B%=1:C%=1:Peak1&=TT-1:A1%=Y1%:Y1%=Y%:A%=0 IF TT=E&(RT) THEN C%=1:Peak2&=TT:Tbot%=1 Y1%=Y%:TT=TT+1:WEND:T=Peak1&:END SUB SpeGraph: IF NBuf&(RT)=0 THEN RETURN LINE(0,43)-(609,107),0,bf:IF Pi&(RT)=0 THEN BEEP:RETURN LINE(0,0)-(620,31),2,bf:FTime=512/(3579545&/Pi&(RT)):FOR Har%=0 TO 304 :Y%=PEEK(Har%+SpecMem&):IF Y%<>0 THEN LINE(Har%*2,107)-((Har%*2)+1,107-Y%),4,b NEXT:LOCATE 2,1 :PRINT " - Press mouse button at horiz. position to find Frequencies - ":PRINT "Click on top bar to exit" MoFrLo3: X%=MOUSE(1):Y%=MOUSE(2):IF MOUSE(0)=0 THEN MoFrLo3 LOCATE 1,1:PRINT "Frequency = ";INT(X%/2)/Ftime;" Harmonic Content = ";PEEK(INT(X%/2)+SpecMem&)*2.53165;" ":LOCATE 4,1:PRINT "Wavelength = ";INT(512/INT((X%+2)/2));" bytes":IF Y%<>0 THEN MoFrLo3 LINE(0,0)-(620,31),2,bf:RETURN FFT2: IF NBuf&(RT)=0 THEN RETURN LOCATE 1,1:INPUT "How many harmonics do you want? (1-304): ",Hs%:IF Hs%<1 OR Hs%>304 THEN BEEP:RETURN LOCATE 2,20:PRINT "Analysing Spectrum of 1st 512 bytes" Fpi=3.1415926*2/512:T=St&(RT):FOR Har%=1 TO Hs%:Ftota=0:Ftotb=0:FOR X%=0 TO 511:Y%=PEEK(X%+T):IF Y%>127 THEN Y%=Y%-256 Fra=Har%*Fpi*X%:Ftota=Ftota+(Y%*COS(Fra)):Ftotb=Ftotb+(Y%*SIN(Fra)):NEXT:POKE Har%+SpecMem&,INT((Ftota^2+Ftotb^2)^.5*.001543):NEXT:GOTO SpeGraph HarFilt: IF NBuf&(RT)=0 THEN RETURN IF Pi&(RT)=0 THEN RETURN FTime=512/(3579545&/Pi&(RT)):WvL%=512:Fdt=Ftime/WvL%:Fpi=3.1416*2/FTime LOCATE 1,1 :PRINT "What Frequency minimum? (0-";512/FTime;") :";:INPUT " ",FHar IF FHar<0 OR FHar>(512/FTime) THEN BEEP:RETURN Har1%=FHar*FTime:PRINT "What Frequency maximum? (";FHar;" -";512/FTime;") :";:INPUT " ",FHar2 IF FHar2<FHar OR FHar2>(512/FTime) THEN BEEP:RETURN Har2%=FHar2*FTime:INPUT "Amplify by (-10 to 10) (-1 = remove) : ",Fmu :IF Fmu<-10 OR Fmu>10 THEN BEEP:RETURN Fmu=2*Fmu/WvL%:FOR Har%=Har1% TO Har2%:Fhar=Har%*Fpi:LOCATE 1,1:PRINT Har2%-Har%:FOR T=St&(RT) TO E&(RT) STEP 512:T1=T+512:Fdtim=0:Ftota=0:Ftotb=0 FOR TT=T TO T1 :Y%=PEEK(TT):IF Y%>127 THEN Y%=Y%-256 Fba=FHar*Fdtim:Ftota=Ftota+(Y%*COS(Fba)):Ftotb=Ftotb+(Y%*SIN(Fba)):Fdtim=Fdtim+Fdt:NEXT:Bn%=Fmu*Ftotb:An%=Fmu*Ftota Fdtim=0:FOR TT=T TO (T1-1) :YY%=PEEK(TT):IF YY%>127 THEN YY%=YY%-256 Fba=FHar*Fdtim:Y%=An%*COS(Fba):Y1%=Bn%*SIN(Fba):YY%=YY%+Y%+Y1%:IF YY%>127 THEN YY%=127 IF YY%<-128 THEN YY%=-128 IF YY%<0 THEN YY%=YY%+256 POKE TT,YY%:Fdtim=Fdtim+Fdt:NEXT:NEXT:NEXT:RETURN GetTone: IF NBuf&(RT)=0 OR Pi&(RT)=0 THEN RETURN T2=St&(RT):T1=T2:T=T2:Co&=0:Tper&=0:Freq=0:Co2&=0:A1%=0:A2%=0:B1%=0:Fde%=1 LOCATE 1,1 :INPUT "Enter Frequency filter range FROM (0-15000 Hz)= ",Y LOCATE 2,1 :PRINT"Enter Frequency filter range TO (";Y;"-15000)= ";:INPUT Y1 IF NFilt%=0 THEN LOCATE 3,1 :INPUT "Enter filter depth (1-10) : ",Fde% LOCATE 4,1 :INPUT "Enter Volume minimum to filter (1-255) : ",Vmi% IF Y<=0 OR Y>15000 OR Y1<Y OR Y1>15000 OR Fde%<1 OR Fde%>10 OR Vmi%<1 OR Vmi%>255 THEN BEEP:RETURN CALL Scan0(T2):T2=T WHILE (T2<E&(RT)) CALL Scan1(T2):Co&=Co&+1:T2=T1:Vo%=ABS(A1%-B1%):IF T1<>T THEN Freq=1/(((T1-T)/(3579545&/Pi&(RT)))) IF Freq>=Y AND Freq<=Y1 AND Vo%<=Vmi% THEN DoFiltJob GOTO GToneE DoFiltJob: Co2&=Co2&+1:IF NFilt%=0 THEN CALL Dolb2(T+1,T1-1):GOTO GToneE Dis&=T1-T:FGra=(A2%-A1%)/Dis& FOR T3=0 TO Dis& :YY%=(T3*FGra)+A1%:IF YY%<0 THEN YY%=YY%+256 POKE T3+T,YY%:NEXT GToneE: WEND :LOCATE 1,1 :PRINT " -- The frequency was found ";Co2&;" times." RETURN BoBass: IF NBuf&(RT)=0 THEN RETURN LOCATE 1,1 :INPUT "Enter Bass Volume (0-400%): ",FBass IF FBass<0 OR FBass>400 THEN BEEP:RETURN FBass=FBass/100 AlloAc&=AllocMem&(NBuf&(RT),MemType&) IF AlloAc&<=0 THEN BEEP:PRINT "Not enough memory!":RETURN CALL CopyMem(St&(RT),AlloAc&,NBuf&(RT)) SS&=AlloAc&+1:EE&=AlloAc&+NBuf&(RT)-1:FOR A%=1 TO 6:CALL Dolb2(SS&,EE&):NEXT:Dis&=AlloAc&-St&(RT) FOR T=St&(RT) TO E&(RT):Y%=PEEK(T):Y1%=PEEK(T+Dis&):IF Y%>127 THEN Y%=Y%-256 IF Y1%>127 THEN Y1%=Y1%-256 Y%=Y%-Y1%:Y1%=Y1%*FBass:Y%=Y%+Y1%:IF Y%>127 THEN Y%=127 IF Y%<-128 THEN Y%=-128 IF Y%<0 THEN Y%=256+Y% POKE T,Y%:NEXT:CALL FreeMem&(AlloAc&,NBuf&(RT)) RETURN Centralise: Ytot&=0:IF NBuf&(RT)=0 THEN RETURN FOR T=St&(RT) TO E&(RT):Y%=PEEK(T):IF Y%>127 THEN Y%=Y%-256 Ytot&=YTot&+Y%:NEXT:Av%=Ytot&/NBuf&(RT):IF Av%>-1 AND Av%<2 THEN LOCATE 1,1 :PRINT "Sample is Central":RETURN Dis%=-Av%-1:CALL Mamp(St&(RT),E&(RT),Dis%):LOCATE 1,1:PRINT "Sample was moved by ";Dis%;" ":RETURN HighPass: IF NBuf&(RT)=0 THEN RETURN AlloAc&=AllocMem&(NBuf&(RT),MemType&) IF AlloAc&<=0 THEN BEEP:PRINT "Not enough memory!":RETURN CALL CopyMem(St&(RT),AlloAc&,NBuf&(RT)) SS&=AlloAc&+1:EE&=AlloAc&+NBuf&(RT)-1:FOR A%=1 TO 6:CALL Dolb2(SS&,EE&):NEXT:Dis&=AlloAc&-St&(RT) FOR T=St&(RT) TO E&(RT):Y%=PEEK(T):Y1%=PEEK(T+Dis&):IF Y%>127 THEN Y%=Y%-256 IF Y1%>127 THEN Y1%=Y1%-256 Y%=Y%-Y1%:IF Y%>127 THEN Y%=127 IF Y%<-128 THEN Y%=-128 IF Y%<0 THEN Y%=256+Y% POKE T,Y%:NEXT:CALL FreeMem&(AlloAc&,NBuf&(RT)) RETURN Waah: IF NBuf&(RT)=0 THEN RETURN LOCATE 1,1 :INPUT "Enter waah depth (2-?): ",Wa& IF Wa&<2 THEN BEEP:RETURN l&=NBuf&(RT)/Wa&:B&=E&(RT)-l&:S&=St&(RT)+1 FOR T=1 TO (Wa&-1):CALL Dolb2(S&,B&) :B&=B&-l&:NEXT RETURN Nspd:IF NBuf&(RT)=0 THEN RETURN LOCATE 1,1 :INPUT "Enter period multiplier (0-20): ",Frac INPUT "Enter new channel: ",Ch% IF Frac<=0 OR Frac>20 THEN BEEP:RETURN IF Ch%<1 OR Ch%>20 THEN BEEP:RETURN Buf&=NBuf&(RT)/Frac MemTry&=AllocMem&(Buf&,MemType&) IF MemTry&<=0 THEN BEEP:LOCATE 4,1:PRINT "No Memory free":RETURN Tp=MemTry& :INPUT "Anti-alias? (Y/N): ",An$ IF An$="y" OR An$="Y" THEN GOSUB FiltIn:GOTO Blpe GOSUB NormIn Blpe: Ch1%=RT:RT=Ch%:BufLen&(RT)=Buf&:Per&(RT)=Per&(Ch1%)*Frac:Pi&(RT)=Per&(Ch1%)*Frac:GOSUB PlayIt RETURN ClMem: FOR T%=1 TO 20 IF BufLen&(T%)=0 THEN NeCl CALL FreeMem&(Start&(T%),BufLen&(T%)) BufLen&(T%)=0:Start&(T%)=0:EndPos&(T%)=0:St&(T%)=0:E&(T%)=0:Ins$(T%)="" NeCl: NEXT Clmemm%=0 RETURN Nfon: IF NFilt%=1 THEN NFilt%=0 ELSE NFilt%=1 IF NFilt%=1 THEN LOCATE 4,1 :PRINT "NORMAL filter mode ON":RETURN LOCATE 4,1 :PRINT "DETAILED filter mode ON" RETURN DoubCycle: PPl%=0:IF NBuf&(RT)=0 THEN RETURN LOCATE 1,1 :INPUT "Enter New Channel: ",Ch% IF Ch%<1 OR Ch%>20 THEN BEEP:RETURN LOCATE 2,1 :INPUT "How Many times longer do you want the sample to be?: ",Lng% IF Lng%<2 THEN BEEP:RETURN LOCATE 3,1 :INPUT "Enter Wavelength (10-512) : ",WvLen& IF WvLen&<10 OR WvLen&>512 THEN BEEP:RETURN AcLenRout: T2=St&(RT):T=St&(RT) Buffer&=NBuf&(RT)*Lng% MemTry&=AllocMem&(Buffer&+512,MemType&) IF MemTry&<=0 THEN BEEP:RETURN MemBit&=MemTry& WHILE (T<E&(RT)) FOR Q=1 TO Lng%:Dis&=MemBit&-T:FOR T3=T TO (T+WvLen&) :POKE T3+Dis&,PEEK(T3):NEXT:MemBit&=MemBit&+WvLen&:NEXT T=T+WvLen&:WEND BufLen&(Ch%)=Buffer&:Per&(Ch%)=Per&(RT):Pi&(Ch%)=Pi&(RT) RT=Ch%:GOTO PlayIt FiltIn: FOR T2=0 TO Buf&:Fx=Frac*T2:IF Fx=INT(Fx) THEN POKE(T2+Tp),PEEK(Fx+St&(RT)):GOTO Blpe2 Y1%=PEEK(INT(Fx)+St&(RT)):Y2%=PEEK(INT(Fx)+St&(RT)+1):IF Y1%>127 THEN Y1%=Y1%-256 IF Y2%>127 THEN Y2%=Y2%-256 Av%=((Fx-INT(Fx))*(Y2%-Y1%))+Y1%:IF Av%<0 THEN Av%=256+Av% POKE T2+Tp,Av% Blpe2: NEXT:RETURN NormIn: FOR T2=0 TO Buf&:Fx=Frac*T2:POKE(T2+Tp),PEEK(Fx+St&(RT)):NEXT:RETURN CreSin: LOCATE 1,1 :PRINT " 1 - Sine Wave":PRINT " 2 - Square Wave":PRINT " 3 - Ramp Wave" INPUT " Enter Number of wave type to Synthesize: ",Wvn% IF Wvn%<1 OR Wvn%>3 THEN BEEP:RETURN LINE(0,0)-(630,31),2,bf:LOCATE 1,1:INPUT "Enter sampling period (124 - 1000) : ",Spr%:IF Spr%<124 OR Spr%>1000 THEN BEEP:RETURN LINE(0,0)-(630,31),2,bf:LOCATE 1,1 :INPUT "Enter New Channel: ",Ch% IF Ch%<1 OR Ch%>20 THEN BEEP:RETURN LINE(0,0)-(630,31),2,bf:LOCATE 1,1:INPUT "Enter Vol (1-127): ",NVol INPUT "Enter Note (in capitals): ",No$ INPUT "Enter Octave (0-10): ",Ocv% INPUT "How long do you want sample to be? (bytes): ",Buf& IF Ocv%<0 OR Ocv%>10 THEN BEEP:RETURN IF Buf&<1 THEN BEEP:RETURN TTT%=0 FOR T%=1 TO 12 IF No$=Key$(T%) THEN TTT%=T% NEXT T% IF TTT%=0 THEN LOCATE 1,1:PRINT"not a note":RETURN Hz=Keyf(TTT%) Hz=Hz*(2^(Ocv%-1)) IF NVol<1 OR NVol>127 THEN BEEP:RETURN CyClen&=(3579545&/Spr%)/Hz MemTry&=AllocMem&(Buf&,MemType&) IF MemTry&<=0 THEN BEEP:LOCATE 1,1:PRINT "Too Big":RETURN IF Wvn%=1 THEN SinWave IF Wvn%=2 THEN SquWave IF Wvn%=3 THEN RamWave SinWave: FPi=6.28318531# :Fstoofp=FPi/CyClen& Fstoof=-FPi FOR T=MemTry& TO (MemTry&+Buf&) A%=SIN(Fstoof)*NVol:IF A%<0 THEN A%=256+A% POKE T,A%:Fstoof=Fstoof+Fstoofp NEXT RT=Ch%:BufLen&(RT)=Buf&:Per&(RT)=Spr%:Pi&(RT)=Spr% GOTO PlayIt SquWave: Fp%=1:Fstoof&=0:Cll&=CyClen&/2 FOR T=MemTry& TO (MemTry&+Buf&) A%=Fp%*NVol:IF A%<0 THEN A%=256+A% POKE T,A%:Fstoof&=Fstoof&+1:IF Fstoof&=Cll& THEN Fp%=-1 IF Fstoof&=CyClen& THEN Fstoof&=0:Fp%=1 NEXT RT=Ch%:BufLen&(RT)=Buf&:Per&(RT)=Spr%:Pi&(RT)=Spr% GOTO PlayIt RamWave: Fgra=255/CyClen&:Fstoof&=0:Frac=NVol/127:Bot%=Frac*-128 FOR T=MemTry& TO (MemTry&+Buf&) A%=(Fgra*Fstoof&*Frac)+Bot%:IF A%<0 THEN A%=256+A% POKE T,A%:Fstoof&=Fstoof&+1:IF Fstoof&=CyClen& THEN Fstoof&=0 NEXT:RT=Ch%:BufLen&(RT)=Buf&:Per&(RT)=Spr%:Pi&(RT)=Spr% GOTO PlayIt AltVol: LINE(580,PYY)-(597,159),0,bf:NVol%=(64/44)*(159-Y):PYY=Y:LINE(580,Y)-(597,159),4,bf POKEW Ad&+8,NVol%:Vol&(RT)=NVol%:GOTO LoopB Mixat: IF NBuf&(RT)=0 THEN RETURN LOCATE 1,1 :INPUT "Enter Channel to mix: ",Ch% INPUT "Enter Channel to be mixed into: ",Ch1% INPUT "Enter Mix position address: ",MixPos& INPUT "New Channel= ",NCh% IF Ch%<1 OR Ch%>20 OR Ch1%<1 OR Ch1%>20 OR NCh%<1 OR NCh%>20 THEN BEEP:RETURN IF MixPos&<Start&(Ch1%) OR MixPos&>EndPos&(Ch1%) THEN BEEP:RETURN Buf1&=NBuf&(Ch%) :Buf2&=BufLen&(Ch1%) MixDis&=MixPos&-Start&(Ch1%) :Buffer&=Buf2& IF (MixDis&+Buf1&)>Buf2& THEN Buffer&=MixDis&+Buf1& MemTry&=AllocMem&(Buffer&,MemType&) IF MemTry&<=0 THEN BEEP:RETURN RT=NCh% :Per&(RT)=Per&(Ch1%):BufLen&(RT)=Buffer& CALL CopyMem(Start&(Ch1%),MemTry&,Buf2&) MixPos&=MemTry&+MixDis& CALL Mixa(MixPos&,St&(Ch%),Buf1&) Pi&(Ch%)=352:GOTO PlayIt SUB Mixa(X1&,X2&,X3&) STATIC En&=X1&+X3&:Dis&=X2&-X1& FOR T=X1& TO En&:Y%=PEEK(T):Y1%=PEEK(T+Dis&):IF Y%>127 THEN Y%=Y%-256 IF Y1%>127 THEN Y1%=Y1%-256 Y2%=Y%+Y1%:IF Y2%>127 THEN Y2%=127 IF Y2%<-128 THEN Y2%=-128 IF Y2%<0 THEN Y2%=256+Y2% POKE T,Y2%:NEXT:END SUB Backw:IF NBuf&(RT)=0 THEN RETURN LOCATE 1,1 :PRINT "Enter backwards step (2-";NBuf&(RT) INPUT TT IF TT<2 OR TT>NBuf&(RT) THEN BEEP:RETURN FOR T=St&(RT) TO (E&(RT)-TT) STEP TT:FOR T1=T TO T+(TT/2):RTY=PEEK(T+T+TT-T1):RTYY=PEEK(T1):POKE T1,RTY:POKE T+T+TT-T1,RTYY:NEXT:NEXT RETURN Renm: LOCATE 1,1 :PRINT"Enter file to change" INPUT Fi$ PRINT "Enter new name" INPUT Fi1$ File0$=Fi$+CHR$(0) anew$=Fi1$+CHR$(0) suc%=Rename%(SADD(File0$),SADD(anew$)) IF suc%<>-1 THEN PRINT "Rename unsuccessful!!" END IF RETURN SUB Mamp(X1&,X2&,X3%) STATIC FOR T=X1& TO X2&:Y%=PEEK(T):IF Y%>127 THEN Y%=Y%-256 Y%=Y%+X3%:IF Y%>127 THEN Y%=127 IF Y%<-128 THEN Y%=-128 IF Y%<0 THEN Y%=256+Y% POKE T,Y%:NEXT END SUB Edform: IF NBuf&(RT)=0 THEN RETURN LOCATE 1,1 :PRINT "Enter Edit address:" INPUT Ed& IF Ed&<Start&(RT) OR Ed&>EndPos&(RT) THEN BEEP:RETURN TT%=320 IF (Ed&+TT%)>EndPos&(RT) THEN TT%=EndPos&(RT)-Ed& LINE(0,0)-(320,106),0,bf :X%=0:Y%=PEEK(Ed&) LINE(321,0)-(321,107),3:LINE(0,53)-(320,53),3 FOR T=Ed& TO (Ed&+TT%) :X1%=X%:Y1%=Y%:Y%=PEEK(T):IF Y%>127 THEN Y%=Y%-256 LINE(X1%,53-(Y1%*.4140625))-(X%,53-(Y%*.4140625)),4:X%=X%+1:NEXT Mlooped: X=MOUSE(1):Y1=MOUSE(2) IF INKEY$="q" OR INKEY$="Q" THEN Lastbbit LOCATE 1,41 :PRINT "Edit address: ";INT(Ed&+X);" " IF MOUSE(0)=0 THEN Mlooped IF (Ed&+X)>EndPos&(RT) OR (Ed&+X)>(Ed&+TT%) OR Y1>106 THEN Mlooped Y=(53-Y1):IF (Y/.4140625)<-128 THEN Y=-53 IF (Y/.4140625)>127 THEN Y=52.5 Y%=Y/.4140625 :IF Y%<0 THEN Y%=256+Y% POKE Ed&+X,Y%:LINE(X,0)-(X,106),0:PSET(X,53),3:PSET(X,Y1),4:GOTO Mlooped Lastbbit: LINE(0,42)-(330,42),1:CALL Refart:GOSUB Infobits :GOTO Pat RETURN SUB Cyco(X1&,X2&) STATIC SHARED RT,E&():A%=0:B%=0:C%=0:WHILE (C%=0):Y%=PEEK(X1&):IF Y%>127 THEN Y%=Y%-256 IF Y%>0 AND A%=0 AND B%=0 THEN A%=1 IF Y%<0 AND A%=1 AND B%=0 THEN B%=1 IF Y%>=0 AND B%=1 THEN C%=1:POKEL X2&,X1& IF X1&>=E&(RT) THEN C%=1:POKEL X2&,X1& X1&=X1&+1:WEND:END SUB NeWav: FOR T=St&(RT) TO E&(RT) :Y%=PEEK(T):IF Y%>127 THEN POKE T,255-Y% NEXT:GOSUB Centralise RETURN Invt: IF NBuf&(RT)=0 THEN RETURN CALL Inve(St&(RT),E&(RT)) RETURN SUB Inve(X1&,X2&) STATIC FOR T=X1& TO X2&:Y%=PEEK(T):IF Y%>127 THEN Y%=Y%-256 IF Y%=-128 THEN Y%=-127 Y%=-Y%:IF Y%<0 THEN Y%=256+Y% POKE T,Y%:NEXT END SUB KilFile: LOCATE 1,1 :INPUT "Enter File name: ",Nam$ IF Nam$="" THEN RETURN LOCATE 2,1 :PRINT "Are you sure you want to delete ";Nam$;"? (Y/N)" INPUT A$ IF A$="y" OR A$="Y" THEN Deletey RETURN Deletey: KILL Nam$ RETURN Chip: MemType&=65538& :Stat$="CHIP Memory" :Meml&=2&:RETURN Fast: MemType&=65540& :Stat$="FAST Memory" :Meml&=4&:RETURN FCHIP: IF St&(RT)<10000000& THEN BEEP:RETURN LOCATE 1,1 :PRINT"Enter new CHIP Channel(SLOT):" INPUT NCA :NNBf&=NBuf&(RT) IF NCA<1 OR NCA>20 THEN BEEP:RETURN MemTry&=AllocMem&(NNBf&,65538&) IF MemTry&<=0 THEN BEEP:RETURN MemC&=MemTry& CALL CopyMem(St&(RT),MemTry&,NNBf&) Per&(NCA)=Per&(RT):RT=NCA :BufLen&(RT)=NNBf& :Pi&(RT)=350 EndPos&(RT)=MemTry&+BufLen&(RT) GOTO PlayIt CFAST: IF St&(RT)>10000000& THEN BEEP:RETURN LOCATE 1,1 :PRINT"Enter new FAST Channel(SLOT):" INPUT NCA :NNBf&=NBuf&(RT) IF NCA<1 OR NCA>20 THEN BEEP:RETURN MemTry&=AllocMem&(NNBf&,65540&) IF MemTry&<=0 THEN BEEP:RETURN MemC&=MemTry& CALL CopyMem(St&(RT),MemTry&,NNBf&) Per&(NCA)=Per&(RT):RT=NCA:BufLen&(RT)=NNBf& :Pi&(RT)=350 EndPos&(RT)=MemTry&+BufLen&(RT) GOTO PlayIt Fltr:IF NBuf&(RT)=0 THEN RETURN CALL Dolb(St&(RT),NBuf&(RT)-1) RETURN SUB Dolb(X1&,X2&) STATIC X3&=X1&+X2& FOR T=X1& TO X3&:X%=PEEK(T):Y%=PEEK(T+1):IF X%>127 THEN X%=X%-256 IF Y%>127 THEN Y%=Y%-256 X%=(X%+Y%)/2:IF X%<0 THEN X%=X%+256 POKE T,X%:NEXT:END SUB SUB Dolb2(X1&,X2&) STATIC FOR T=X1& TO X2&:X%=PEEK(T-1):Y%=PEEK(T+1):IF X%>127 THEN X%=X%-256 IF Y%>127 THEN Y%=Y%-256 X%=(X%+Y%)/2:IF X%<0 THEN X%=X%+256 POKE T,X%:NEXT:END SUB UnFltr: IF NBuf&(RT)=0 THEN RETURN CALL Bright(E&(RT),St&(RT)+1) RETURN SUB Bright(X1&,X2&) STATIC FOR T=X1& TO X2& STEP -1:Y%=PEEK(T):Y1%=PEEK(T-1):IF Y%>127 THEN Y%=Y%-256 IF Y1%>127 THEN Y1%=Y1%-256 Y2%=(2*Y1%)-Y%:IF Y2%>127 THEN Y2%=127 IF Y2%<-128 THEN Y2%=-128 IF Y2%<0 THEN Y2%=256+Y2% POKE T-1,Y2%:NEXT:END SUB Filter: IF BufLen&(RT)=0 THEN BEEP:RETURN CALL FreeMem&(Start&(RT),BufLen&(RT)) Start&(RT)=0:BufLen&(RT)=0:GOTO PlayIt RETURN Savd: IF NBuf&(RT)=0 THEN RETURN LOCATE 2,4:PRINT "SAVE FILE (DUMP):" INPUT "Name= ",SV$ IF SV$="" THEN RETURN Plop&=Lock&(SADD(SV$+CHR$(0)),-2) IF Plop&=0 THEN CALL UnLock&(Plop&):GOTO ItsFine2 CALL UnLock&(Plop&) LOCATE 2,4 :PRINT SV$;" already exists. Do you want to overwrite? (Y/N)" INPUT A$ :IF A$="Y" OR A$="y" THEN ItsFine2 RETURN ItsFine2: fhandle& = xOpen&(SADD(SV$+CHR$(0)),1006) wLen&=xWrite&(fhandle&,St&(RT),NBuf&(RT)) CALL xClose(fhandle&) RETURN Sav: IF NBuf&(RT)=0 THEN RETURN LOCATE 1,4:PRINT "SAVE FILE (IFF):" INPUT " Enter file Name: ",SV$ IF SV$="" THEN RETURN Plop&=Lock&(SADD(SV$+CHR$(0)),-2) IF Plop&=0 THEN CALL UnLock&(Plop&):GOTO ItsFine CALL UnLock&(Plop&) LOCATE 2,1 :PRINT SV$;" already exists. Do you want to overwrite? (Y/N)" INPUT A$ :IF A$="Y" OR A$="y" THEN ItsFine RETURN ItsFine: fhandle& = xOpen&(SADD(SV$+CHR$(0)),1006) IF fhandle&=0 THEN BEEP:RETURN A$="FORM":B$="8SVX":C$="VHDR":D$="NAME":E$="BODY" NamStr$="Slatsy Samples":NmLen&=14 Fsize&=66+NBuf&(RT) Vhd&=20 OSHS&=NBuf&(RT) RHS&=0 SPHC&=0 SPS%=INT(3579545&/Pi&(RT)) POKE Inflop&,Octs% sComp%=0 sFvol&=65536& wLen&=xWrite&(fhandle&,SADD(A$),4) wLen&=xWrite&(fhandle&,VARPTR(Fsize&),4) wLen&=xWrite&(fhandle&,SADD(B$),4) wLen&=xWrite&(fhandle&,SADD(C$),4) wLen&=xWrite&(fhandle&,VARPTR(Vhd&),4) wLen&=xWrite&(fhandle&,VARPTR(OSHS&),4) wLen&=xWrite&(fhandle&,VARPTR(RHS&),4) wLen&=xWrite&(fhandle&,VARPTR(SPHC&),4) wLen&=xWrite&(fhandle&,VARPTR(SPS%),2) wLen&=xWrite&(fhandle&,Inflop&,1) wLen&=xWrite&(fhandle&,VARPTR(sComp%),1) wLen&=xWrite&(fhandle&,VARPTR(sFvol&),4) wLen&=xWrite&(fhandle&,SADD(D$),4) wLen&=xWrite&(fhandle&,VARPTR(NmLen&),4) wLen&=xWrite&(fhandle&,SADD(NamStr$),NmLen&) wLen&=xWrite&(fhandle&,SADD(E$),4) wLen&=xWrite&(fhandle&,VARPTR(NBuf&(RT)),4) wLen&=xWrite&(fhandle&,St&(RT),NBuf&(RT)) CALL xClose(fhandle&) RETURN Acc: LOCATE 1,1 :PRINT "Enter Chan to be added to:" INPUT FC% LOCATE 2,1 :PRINT "Enter Chan to add:" INPUT SC% LOCATE 3,1 :PRINT "Enter New Channel:" INPUT NC% NNBf&=NBuf&(FC%)+NBuf&(SC%):IF FC%<1 OR FC%>20 OR SC%<1 OR SC%>20 OR NC%<1 OR NC%>20 THEN BEEP:RETURN MemT&=AllocMem&(NNBf&,MemType&):R&=MemT&-St&(FC%):R1&=(MemT&+NBuf&(FC%))-St&(SC%) IF MemT&<=0 THEN BEEP:RETURN CALL CopyMem&(St&(FC%),MemT&,NBuf&(FC%)) CALL CopyMem&(St&(SC%),MemT&+NBuf&(FC%),NBuf&(SC%)) MemTry&=MemT&:Per&(NC%)=Per&(RT):RT=NC%:BufLen&(RT)=NNBf&:GOTO PlayIt Ch1: LOCATE 2,1 :PRINT "Enter Channel (1-20)" INPUT RY IF RY<1 OR RY>20 THEN BEEP:LOCATE 3,1 :PRINT" ":GOTO Ch1 RT=RY:GOTO Pat Flip: IF NBuf&(RT)=0 THEN RETURN CALL Flipy(St&(RT),NBuf&(RT)) RETURN SUB Flipy(X1&,X2&) STATIC FOR T=0 TO (X2&/2):Y%=PEEK(T+X1&):POKE T+X1&,PEEK(X1&+X2&-T):POKE X1&+X2&-T,Y%:NEXT:END SUB Fdin: IF NBuf&(RT)=0 THEN RETURN D&=E&(RT)-St&(RT):IF D&=0 THEN BEEP:RETURN FGra=80/D& FOR T=0 TO D&:Fmul=(T*FGra)/80:Y%=PEEK(St&(RT)+T):IF Y%>127 THEN Y%=Y%-256 Y%=Y%*Fmul:IF Y%<0 THEN Y%=256+Y% POKE St&(RT)+T,Y%:NEXT RETURN Wibble: IF NBuf&(RT)=0 THEN RETURN LOCATE 1,1 :PRINT "Enter distort step" INPUT RTT :IF RTT<1 THEN RETURN FOR T=St&(RT) TO (E&(RT)-(RTT*2)) STEP (RTT*2):FOR T1=T TO (T+RTT-1):Y%=PEEK(T1):IF Y%>127 THEN Y%=-256+Y% Y%=-Y%:IF Y%<0 THEN Y%=256+Y% POKE T1,Y%:NEXT:NEXT RETURN Fdou: IF NBuf&(RT)=0 THEN RETURN D&=E&(RT)-St&(RT):IF D&=0 THEN BEEP:RETURN FGra=80/D& FOR T=0 TO D&:Fmul=(80-(T*FGra))/80:Y%=PEEK(St&(RT)+T):IF Y%>127 THEN Y%=Y%-256 Y%=Y%*Fmul:IF Y%<0 THEN Y%=256+Y% POKE St&(RT)+T,Y%:NEXT RETURN Cut: IF NBuf&(RT)=0 THEN RETURN FOR T=St&(RT) TO E&(RT):POKE T,0:NEXT:GOTO Graph Echo: Abc%=1:IF NBuf&(RT)=0 THEN RETURN LOCATE 1,1 :INPUT"Enter Number of Echoes: ",Ech% INPUT"Enter Echo rate: ",Ech1% PRINT"Enter Decay Rate (1-64): ";:INPUT DECR% INPUT"Destination Channel: ",Dest% IF Ech%<1 OR Ech1%<1 OR DECR%<1 OR DECR%>64 OR Dest%<1 OR Dest%>20 THEN BEEP:RETURN Ebf&=BufLen&(RT) :Efac&=Ebf&+(Ech%*(Ebf&/Ech1%)) NSize&=Efac& :Abc%=0:FDeca=DECR%/64:Fmu=FDeca:NSe&=NSize& MemTry&=AllocMem&(NSe&,MemType&) IF MemTry&<=0 THEN BEEP:RETURN Per&(Dest%)=Per&(RT):Pi&(Dest%)=Pi&(RT) CALL CopyMem(Start&(RT),MemTry&,BufLen&(RT)) D&=Ebf&/Ech1%:Ee&=Ebf&+Start&(RT) CALL Echoi(Start&(RT),MemTry&,Ee&,D&) RT=Dest%:BufLen&(RT)=NSe&:Start&(RT)=MemTry&:GOTO PlayIt SUB Echoi(X1&,X2&,X3&,X4&) STATIC SHARED FDeca,Fmu,Ech% FOR A%=1 TO Ech%:TT=X2&+(A%*X4&):FOR T=X1& TO X3&:Y%=PEEK(T):Y1%=PEEK(TT):IF Y%>127 THEN Y%=Y%-256 IF Y1%>127 THEN Y1%=Y1%-256 Y1%=Y1%+(Y%*Fmu):IF Y1%>127 THEN Y1%=127 IF Y1%<-128 THEN Y1%=-128 IF Y1%<0 THEN Y1%=Y1%+256 POKE TT,Y1%:TT=TT+1:NEXT:Fmu=Fmu*FDeca:NEXT END SUB Lo: LOCATE 2,1 :PRINT "File Type is IFF " Leng&=0 :At$="ANNO" rLen&=xRead&(fhandle&,Inflop&,4) rLen&=xRead&(fhandle&,Inflop&,4) rLen&=xRead&(fhandle&,Inflop&,4) rLen&=xRead&(fhandle&,Inflop&,4) rLen&=xRead&(fhandle&,Inflop&,4) rLen&=xRead&(fhandle&,Inflop&,4) rLen&=xRead&(fhandle&,Inflop&,4) rLen&=xRead&(fhandle&,Inflop&,2) RecRate&=PEEKW(Inflop&) LOCATE 1,5 :PRINT "Record Rate= ";RecRate&;" " rLen&=xRead&(fhandle&,Inflop&,1) rLen&=xRead&(fhandle&,Inflop&,1) rLen&=xRead&(fhandle&,Inflop&,4) rLen&=xRead&(fhandle&,SADD(At$),4) IF At$="BODY" THEN BodyLoader At$="CHAN" rLen&=xRead&(fhandle&,VARPTR(Leng&),4) IF (Leng&/2)<>INT(Leng&/2) THEN Leng&=Leng&+1 rLen&=xRead&(fhandle&,Inflop&,Leng&) rLen&=xRead&(fhandle&,SADD(At$),4) IF At$="BODY" THEN BodyLoader At$="POOP" rLen&=xRead&(fhandle&,VARPTR(Leng&),4) IF (Leng&/2)<>INT(Leng&/2) THEN Leng&=Leng&+1 rLen&=xRead&(fhandle&,Inflop&,Leng&) Leng&=0 rLen&=xRead&(fhandle&,Inflop&,4) BodyLoader: rLen&=xRead&(fhandle&,Inflop&,4) Length&=PEEKL(Inflop&):SoundSize&=Length& COLOR 7,3:LOCATE 16,11 :PRINT Length&;" ":COLOR 1,2 Ebf&=SoundSize& :Efac&=Ebf&+(Ebf&*(Ech%*(1/Ech1%))) IF Abc%=1 THEN SoundSize&=Efac&:Abc%=0 MemTry& = AllocMem&(SoundSize&,MemType&) MemSize& = 0 IF MemTry& <= 0 THEN BEEP:LOCATE 2,1 :PRINT "No Mem for IFF ":CALL Refart:RETURN rLen&=xRead&(fhandle&,MemTry&,SoundSize&) IF rLen&=0 THEN BEEP:CALL Refart:RETURN MemSize& = Ebf& BufLen&(RT) = SoundSize& CALL xClose(fhandle&) FinLoad: SoundSize&=BufLen&(RT):CALL Refart Ins$(RT)=SV$:IF LEN(Ins$(RT))>32 THEN Ins$(RT)=LEFT$(Ins$(RT),32) IF RecRate& = 0 THEN Pi&(RT)=350:LOCATE 2,5 :PRINT "No playback rate specified: 350 used":Per&(RT)=350:BufLen&(RT)=SoundSize&:GOTO PlayIt Per&(RT)= INT(3579545& / RecRate&) IF Per&(RT)>1000 THEN Per&(RT)=350:LOCATE 2,5 :PRINT "Unreasonable playback rate specified: 350 used" Pi&(RT)=Per&(RT) PlayIt: St&(RT)=MemTry&:E&(RT)=MemTry&+BufLen&(RT):Start&(RT)=MemTry&:EndPos&(RT)=MemTry&+BufLen&(RT) GOTO Pat LDump: LDump%=1 Qlo: WINDOW 2,"LOAD",(0,0)-(270,25),0,1:WINDOW OUTPUT 2 PRINT "Enter File:" GOTO Qlom Ldr: LOCATE 1,1 :ReRoo%=0:Anus%=0:Dood%=0 INPUT "Enter Drawer : ",T$ IF T$="" THEN T$=LEFT$(Dir$,LEN(Dir$)-1) Count1%=-1:Hello%=-2:Dir$=T$+CHR$(0) Lock2&=Lock&(SADD(Dir$),Hello%) IF Lock2&=0 THEN CALL UnLock&(Lock2&) :LOCATE 2,1 :PRINT "Big Mistake!":CALL Refart:RETURN suc&=Examine&(Lock2&,Inflop&) FOR Loopy%=1 TO 2 :DirName&=Inflop&+8:FOR search%=0 TO 29:check=PEEK(DirName&+search%) IF check<>0 THEN check$=check$+CHR$(check) ELSE search%=29 END IF NEXT search% DirName$=check$:check$="":type&=PEEKL(Inflop&+120) IF type&<0 THEN DirType$="F" ELSEIF Count1%=-1 THEN DirName$=" ---- "+DirName$+" ----":DirType$="P" ELSE DirType$="D" END IF IF DirType$="D" THEN DirName$=" ["+DirName$+"]" Count1%=Count1%+1:IF DirName$=Nam$(Count1%) THEN Dood%=Count1% suc&=ExNext&(Lock2&,Inflop&) NEXT Loopy%:IF Dood%=1 THEN printthem more3: Dir$=T$+CHR$(0) Lock2&=Lock&(SADD(Dir$),Hello%) suc&=Examine&(Lock2&,Inflop&) FOR T%=0 TO 255:Nam$(T%)="":Sta$(T%)="":NEXT:DosCount%=0 more: DirName&=Inflop&+8:FOR search%=0 TO 29:check=PEEK(DirName&+search%) IF check<>0 THEN check$=check$+CHR$(check) ELSE search%=29 END IF NEXT search% DirName$=check$:check$="":type&=PEEKL(Inflop&+120) IF type&<0 THEN DirType$="F" ELSEIF DosCount%=0 THEN DirName$=" ---- "+DirName$+" ----":DirType$="P" ELSE DirType$="D" END IF IF DirType$="D" THEN DirName$=" ["+DirName$+"]" DirComm$=check$:check$="":Nam$(DosCount%)=DirName$:Sta$(DosCount%)=DirType$ suc&=ExNext&(Lock2&,Inflop&) IF suc&=0 THEN printthem DosCount%=DosCount%+1:GOTO more printthem: Y2%=400:LINE(0,0)-(400,106),0,bf:COLOR 6,0:LOCATE 13,1:PRINT "LOAD: ":COLOR 5,4:LOCATE 13,47:PRINT "OK":Fil%=0 Top%=0:Bot%=11:Fra=255/86:Siz%=86-(DosCount%/Fra):COLOR 7,0:LINE(401,0)-(401,106),3:LINE(385,0)-(385,106),3:LINE(386,0)-(400,106),4,bf:COLOR 1,0 :LOCATE 1,50:PRINT "+":LOCATE 13,50:PRINT "-" LINE(385,7)-(400,7),3:LINE(385,95)-(400,95),3:Y%=0:COLOR 7,0:LINE(386,Y%+8)-(400,Y%+8+Siz%),1,bf:GOSUB PrLoo Piggy: X%=MOUSE(1):Y1%=MOUSE(2):IF MOUSE(0)=0 THEN Piggy IF X%>367 AND X%<386 AND Y1%>95 AND Y1%<107 THEN AllSet IF X%>0 AND X%<365 AND Y1%>95 AND Y1%<107 THEN AllSet2 IF X%<385 AND Y1%<96 THEN GetBog IF Y1%=(Y%+8) THEN Piggy IF X%>385 AND X%<401 AND Y1%>7 AND Y1%<(95-Siz%) THEN LINE(386,Y%+8)-(400,Y%+8+Siz%),4,bf:Y%=Y1%-8:LINE(386,Y%+8)-(400,Y%+8+Siz%),1,bf:Top%=Y%*Fra:GOSUB PrLoo IF X%>385 AND X%<404 AND Y1%<8 AND Top%>0 THEN Top%=Top%-1:GOSUB PrLoo IF X%>385 AND X%<404 AND Y1%>95 AND Y1%<107 AND Top%<DosCount% THEN Top%=Top%+1:GOSUB PrLoo GOTO Piggy GetBog: IF Y2%=Y1% THEN Piggy FOR T%=0 TO 88 STEP 8 :IF Y1%>T% AND Y1%<(T%+8) THEN Fil%=Top%+(T%/8):COLOR 1:LINE(48,95)-(360,106),0,bf:LOCATE 13,7:PRINT Nam$(Fil%):COLOR 7 NEXT :Y2%=Y1%:GOTO Piggy AllSet2: IF Y1%=Y2% THEN Piggy Y2%=Y1%:COLOR 1:LINE(48,95)-(360,106),0,bf:LOCATE 13,6:INPUT " ",SV$ :IF SV$="" THEN COLOR 7:GOTO Piggy Anus%=1:GOTO Piggy AllSet: IF Y1%=Y2% THEN GOTO Piggy IF ReRoo%=1 THEN ReRoo%=0:Y2%=Y1%:GOTO Piggy Y2%=Y1%:IF Anus%=1 THEN Fil%=255:Nam$(Fil%)=SV$:Sta$(Fil%)="F" IF Fil%=0 THEN LINE(0,42)-(402,42),1:LINE(0,43)-(401,106),0,bf:CALL Refart:COLOR 1,2:RETURN IF Sta$(Fil%)="P" THEN Fil%=0:GOTO AllSet IF Sta$(Fil%)="D" THEN B$=RIGHT$(Nam$(Fil%),LEN(Nam$(Fil%))-2):CHDIR T$:T$=LEFT$(B$,LEN(B$)-1):ReRoo%=1:GOTO more3 Doodo: CHDIR T$ SV$=Nam$(Fil%):LINE(0,42)-(402,42),1:LINE(0,43)-(401,106),0,bf:CALL Refart:COLOR 1,2:GOTO QLom4 PrLoo: LINE (0,0)-(384,95),0,bf:LOCATE 1,1:FOR T%=Top% TO (Top%+Bot%):PRINT Nam$(T%):NEXT:RETURN Qlom: COLOR 3,2 INPUT SV$ IF SV$="" THEN WINDOW CLOSE 2:CALL Refart:RETURN WINDOW CLOSE 2 QLom4: IF BufLen&(RT)<>0 THEN GOSUB Filter GOTO Los RETURN SUB Refart STATIC SHARED Blit1%() PUT(0,42),Blit1%,PSET:LINE(0,0)-(620,31),2,bf:LINE(0,32)-(402,32),3:LINE(0,107)-(402,107),3:LINE(0,33)-(600,41),0,bf:LINE(0,43)-(401,43),3:LINE(0,75)-(401,75),3:LINE(0,42)-(401,42),1 END SUB Los: At$="":AA=0:BB=0 fhandle& = xOpen&(SADD(SV$+CHR$(0)),1005) IF fhandle&=0 THEN LOCATE 1,1 :PRINT"Loading Error!":CALL xClose(fhandle&) :CALL Refart:RETURN rLen&=xRead&(fhandle&,Info2&,4) IF PEEK(Info2&)=70 AND PEEK(Info2&+1)=79 AND PEEK(Info2&+2)=82 AND PEEK(Info2&+3)=77 THEN BB=1 IF LDump%=1 THEN BB=0 IF BB=1 THEN GOTO Lo CALL xClose(fhandle&) LOCATE 2,1 :PRINT "Unknown File Format" SoundName$=SV$+CHR$(0) DosLock&=Lock&(SADD(SoundName$),-2) IF DosLock&=0 THEN BEEP:LOCATE 2,1 :PRINT "Can't lock file!":CALL Refart:RETURN Dummy&=Examine&(DosLock&,Inflop&) IF PEEKL(Inflop&+4)>0 THEN BEEP :LOCATE 3,1 :PRINT "Crummy Error" CALL UnLock&(DosLock&) CALL Refart:RETURN END IF Length&=PEEKL(Inflop&+124) CALL UnLock&(DosLock&) LOCATE 16,11 :PRINT Length&;" " BufLen&(RT)=Length& RecRate&=0 Bufs&=BufLen&(RT):Efac&=Bufs&+(Bufs&*(Ech%*(1/Ech1%))) IF Abc%=1 THEN Ebf&=BufLen&(RT):BufLen&(RT)=Efac&:Abc%=0 fhandle& = xOpen&(SADD(SV$+CHR$(0)),1005) IF fhandle&=0 THEN LOCATE 1,1 :PRINT"Loading Error!":CALL xClose(fhandle&) :CALL Refart:RETURN MemTry&=AllocMem&(BufLen&(RT),MemType&) IF MemTry&<=0 THEN BEEP:CALL xClose(fhandle&) :LOCATE 3,1 :PRINT"Can't get Unknown mem!":CALL Refart:RETURN rLen& = xRead&(fhandle&,MemTry&,Bufs&) CALL xClose(fhandle&) GOTO FinLoad SUB LoadDolby STATIC file$="Piccy2"+CHR$(0) fhandle&=xOpen&(SADD(file$),1005) IF fhandle&=0 THEN PRINT "Can't find it" :CALL xClose(fhandle&):END BitMp&=PEEKL(WINDOW(7)+46)+184 Bplane0&=PEEKL(BitMp&+8):Bplane1&=PEEKL(BitMp&+12):Bplane2&=PEEKL(BitMp&+16) rLen&=xRead&(fhandle&,Bplane0&,20480&) rLen&=xRead&(fhandle&,Bplane1&,20480&) rLen&=xRead&(fhandle&,Bplane2&,20480&) CALL xClose(fhandle&) END SUB Nslot: LOCATE 1,1 :PRINT"Copy Play Range to new Channel" INPUT "Enter Range Channel: ",RC INPUT "Enter new Channel: ",NC IF RC<1 OR RC>20 THEN BEEP:RETURN IF NC<1 OR NC>20 THEN BEEP:RETURN MemTry&=AllocMem&(NBuf&(RC),MemType&) IF MemTry&<=0 THEN BEEP:RETURN D&=MemTry&-St&(RC) CALL CopyMem(St&(RC),MemTry&,NBuf&(RC)) Per&(NC)=Per&(RC):RT=NC:BufLen&(RT)=NBuf&(RC):EndPos&(RT)=E&(RC):Pi&(RT)=Per&(RT) GOTO PlayIt Nams: IF NBuf&(RT)=0 THEN RETURN LOCATE 1,1 :INPUT "Enter new volume (0-800%): ",Nv% IF Nv%<0 OR Nv%>800 THEN BEEP:RETURN Fov=Nv%/100:IF Fov=1 THEN RETURN FOR T=St&(RT) TO E&(RT):Y%=PEEK(T):IF Y%>127 THEN Y%=Y%-256 Y%=Y%*Fov:IF Y%>127 THEN Y%=127 IF Y%<-128 THEN Y%=-128 IF Y%<0 THEN Y%=Y%+256 POKE T,Y%:NEXT RETURN HalfCycle: IF NBuf&(RT)=0 THEN RETURN LOCATE 1,1 :INPUT "Enter New Channel: ",Ch% IF Ch%<1 OR Ch%>20 THEN BEEP:RETURN LOCATE 2,1 :INPUT "How many times smaller? (2-8): ",Ms% IF Ms%<2 OR Ms%>8 THEN BEEP:RETURN LOCATE 3,1 :INPUT "Enter Wavelength (10-512) : ",WvLen& IF WvLen&<10 OR WvLen&>512 THEN BEEP:RETURN T2=St&(RT) Buffer&=NBuf&(RT)/Ms% MemTry&=AllocMem&(Buffer&+512,MemType&) IF MemTry&<=0 THEN BEEP:RETURN MemBit&=MemTry&:T=St&(RT):MemEnd&=MemTry&+Buffer&-2 WHILE (MemBit&<MemEnd&) Dis&=MemBit&-T:FOR T3=T TO (T+WvLen&) :POKE T3+Dis&,PEEK(T3):NEXT:MemBit&=MemBit&+WvLen& FOR X%=1 TO Ms%:T=T+WvLen&:NEXT:WEND BufLen&(Ch%)=Buffer&:Per&(Ch%)=Per&(RT):Pi&(Ch%)=Pi&(RT) RT=Ch% GOTO PlayIt InitFreqs: FOR T%=1 TO 24 READ Key$(T%),Keyf(T%),Keyb$(T%) NEXT RETURN DATA "C",261.7,"q","C#",277.2,"2","D",293.7,"w","D#",311.2,"3","E",329.7,"e" DATA "F",349.3,"r","F#",370,"5","G",392,"t","G#",415.3,"6","A",440,"y","A#",466.2,"7" DATA "B",493.9,"u","C",130.85,"z","C#",138.6,"s","D",146.85,"x","D#",155.6,"d" DATA "E",164.85,"c","F",174.65,"v","F#",185,"g","G",196,"b","G#",207.65,"h" DATA "A",220,"n","A#",233.1,"j","B",246.95,"m"