10 'OPL4 PCM test program 11 print"OPL4 PCM test program":print"Developed 20210313":print"by Eugeny Brychkov" 12 print"If using this program for":print"development, you are required":print"to credit the usage" 13 print"and the author of this program":print 19 vdp(10)=vdp(10)and&hfd:'60 Hz mode 20 out&hc6,5:out&hc7,3:out&h7e,2:a=inp(&h7f):if(aand&he0)<>&h20thenprint"OPL4 PCM not found":stop 21 out&h7e,2:out&h7f,&h1f 27 m=7:print"Using sample RAM @ ";hex$(m*8);"0000" 40 ' sample RAM found 41 out&h7e,3:out&h7f,m*8:out&h7e,4:out&h7f,0:out&h7e,5:out&h7f,0:out&h7e,6:restore1100 42 reada:ifa=-1thenreada:a=a+m*8 43 ifa=-2then45 44 out&h7f,a:goto42 45 defintc:dimc(64):p=8*atn(1):fori=0to63:a=127*sin((i/64)*p):ifa<0thena=256+a 46 c(i)=a:nexti:fori=0to63:out&h7f,c(i):nexti:fori=0to63:out&h7f,c(i):out&h7f,0:nexti:out&h7e,2:out&h7f,m*4+2 49 out&h7e,&h20:out&h7f,1:out&h7e,8:out&h7f,&h80 50 out&h7e,&hc8:out&h7f,15:out&h7e,&h68:out&h7f,0:out&h7e,&h38:out&h7f,0:out&h7e,&h50:out&h7f,0:'RCR=0;RR=F;KOFF;DAMP=0;LFORST=0;FN=0;RVB=0;TL=0;LD=0 51 out&h7e,&he0:out&h7f,0:out&h7e,&h80:out&h7f,0:'AM=0;LFO=0;VIB=0 52 print:print"1. Attack":print"2. Release":print"3. Env shape/key":print"4. Rls-during-Att" 53 print"5. TL interpolation":print"6. DAMP/Pseudo-RVB":print"7. AM/VIB/LFO" 54 print"8. Mix/panpot":print"9. Spectrum":print"10. Data size":print"0. Exit" 70 input"Choice";A:onagoto80,100,160,90,110,120,130,150,170,180 71 print"Finished":stop 80 'attack test: rate timing and shape - AR(98H)=variable, D1R(98L)=F, D2R(B0L)=0, RR(C8L)=0, DL(B0H)=4, RCR(C8H)=variable, F[9](38[2])=variable 81 out&h7e,&hb0:out&h7f,64:out&h7e,&h98:out&h7f,255:out&h7e,&hc8:out&h7f,0:out&h7e,&h38:out&h7f,0:'DL=4;D2R=0;AR=F;D1R=F;RCR=0;RR=0;F[9]=0 82 out&h7e,&h68:out&h7f,&h80:fori=0to20:nexti:out&h7e,&h68:out&h7f,0:'spare keyon/off 83 fori=0to63:ifi=4thenz=24:print" T";elsez=i:printi;:'non-zero time to check start of rate=4 84 printchr$(13);:out&h7e,&h68:out&h7f,&h0 85 out&h7e,&h98:out&h7f,(z\4)*16+15:out&h7e,&hc8:out&h7f,((z\2)and1)*16:'AR;D1R=F;RCR;RR=0 86 out&h7e,&h38:out&h7f,(zand1)*4:out&h7e,&h68:out&h7f,&h80:'F[9];key-on 87 d=50+2^((64-z)\8+2):gosub2000:ifi=4andz=24thenz=4:printi;:goto84 88 nexti:goto50 90 'release-during-attack 91 out&h7e,&hb0:out&h7f,&h40:out&h7e,&hc8:out&h7f,15:out&h7e,&h98:out&h7f,&h2f:'DL=4;D2R=0;RCR=0;RR=F;AR=2;D1R=F 92 fori=0to108:printi;chr$(13);:out&h7e,&h68:out&h7f,&h80 93 d=i+1:gosub2000:out&h7f,&h0:d=2:gosub2000:nexti:goto50 100 'release test: timing and shape - AR(98H)=F, D1R(98L)=variable, D2R(B0L)=0, RR(C8L)=F, DL(B0H)=4, RCR(C8H)=variable, F[9](38[2])=variable 101 out&h7e,&hb0:out&h7f,4*16:'DL=4;D2R=0 102 fori=0to63:printi;chr$(13);:out&h7e,&h98:out&h7f,(i\4)+240:out&h7e,&hc8:out&h7f,((i\2)and1)*16+15:'AR=F;D1R;RR=F;RCR 103 out&h7e,&h38:out&h7f,(iand1)*4:out&h7e,&h68:out&h7f,&h80:'F[9];key-on 104 d=50+2^((64-i)\8+4):if(i\4)=1thend=d+320 105 gosub2000:out&h7f,&h0:forj=0to20:nextj:nexti:goto50 110 'TL interpolation 111 out&h7e,&hb0:out&h7f,0:out&h7e,&hc8:out&h7f,0:out&h7e,&h98:out&h7f,&hf0:out&h7e,&h50:out&h7f,&h0:'DL=0;D2R=0;RCR=0;RR=0;AR=15;D1R=0;TL=0;LD=0 112 d=10:out&h7e,&h68:out&h7f,0:out&h7f,128:out&h7e,&h50:out&h7f,&h41:gosub2000:out&h7f,0:gosub2000 113 fori=1to127:out&h7f,i*2:gosub2000:out&h7f,0:gosub2000:nexti:goto50 120 'DAMP/Pseudo-RVB 121 out&h7e,32:out&h7f,0:out&h7e,8:out&h7f,0:out&h7e,&hb0:out&h7f,&hf2:out&h7e,&hc8:out&h7f,15:out&h7e,&h98:out&h7f,&hf2:out&h7e,&h38:out&h7f,&h0:'DL=F;D2R=2;RCR=0;RR=F;AR=F;D1R=2;PRVB=0 122 print" 1";chr$(13);:out&h7e,&h68:out&h7f,&h80:d=100:gosub2000:out&h7f,0:d=10:gosub2000:out&h7e,&h38:out&h7f,8:'KON;KOFF;RVB=1 123 print" 2 ";:fori=0to15:printi;:out&h7e,&hc8:out&h7f,i*16+15:forj=0to2:out&h7e,&h38:out&h7f,j*16+8:'RCR;RR=15;OCT 124 out&h7e,&h68:out&h7f,&h80:d=800-j*100:gosub2000:out&h7f,0:d=5:gosub2000:nextj:nexti:'KON;KOFF 125 'out&h7e,&hc8:out&h7f,255:forj=0to2:out&h7e,&h38:out&h7f,j*16:out&h7e,&h68:out&h7f,&h80:d=600:gosub2000:out&h7f,0:d=5:gosub2000:nextj:'RCR=7;RR=F;OCT 126 out&h7e,&hb0:out&h7f,&hf2:out&h7e,&h98:out&h7f,&hf1:out&h7e,&hc8:out&h7f,15:'DL=F;D2R=2;AR=F;D1R=1;PRVB=0;RCR=0;RR=F 127 out&h7e,32:out&h7f,1:out&h7e,8:out&h7f,128:out&h7e,&h68:out&h7f,0:out&h7e,&h38:out&h7f,0:d=10:gosub2000:out&h7e,&hb0:out&h7f,0:out&h7e,&h98:out&h7f,&hf0:'KOFF;RVB=0;DL=0;D2R=0;AR=F;D1R=0 128 d=500:gosub2000:print:print" 3 ";:fori=0to15:printi;:out&h7e,&hc8:out&h7f,i*16+15:forj=13to16:out&h7e,&h38:out&h7f,(jand15)*16:'RCR;RR=15;OCT 129 out&h7e,&h68:out&h7f,&h80:d=5:gosub2000:out&h7f,&hc0:d=20:gosub2000:out&h7f,&h0:d=5:gosub2000:nextj:nexti:goto50:'KON;DAMP;KOFF 130 'AM/VIB/LFO 131 out&h7e,&he0:out&h7f,0:out&h7e,&h80:out&h7f,&h38:out&h7e,&h98:out&h7f,&hf0:out&h7e,&hb0:out&h7f,0:'AM=0;LFO=7;AR=15;D1R=0 132 out&h7e,&hc8:out&h7f,15:out&h7e,&h68:out&h7f,0:out&h7f,&h80:out&h7e,&he0:'RCR=0;RR=F;KOFF;KON 133 print" 1";chr$(13);:fori=0to7:out&h7f,i:d=500:gosub2000:nexti:'AM=0..7 134 d=20:out&h7e,&h68:out&h7f,0:gosub2000:out&h7f,128:'KOFF;KON 135 print" 2";chr$(13);:d=500:out&h7e,&h80:fori=7to0step-1:out&h7f,i*8:gosub2000:nexti:'AM=7;LFO=7..0; 136 d=20:out&h7e,&h68:out&h7f,0:gosub2000:out&h7f,128:'KOFF;KON 137 print" 3";chr$(13);:d=500:out&h7e,&h80:out&h7f,&h38:out&h7e,&h68:out&h7f,&ha0:gosub2000:out&h7e,&h68:out&h7f,&h80:gosub2000:'LFO=7;LFORST 138 d=20:out&h7e,&h68:out&h7f,0:gosub2000:out&h7f,128:'KOFF;KON 139 print" 4";chr$(13);:d=500:out&h7e,&he0:out&h7f,0:out&h7e,&h80:fori=0to7:out&h7f,&h38+i:gosub2000:nexti:out&h7f,&h38'AM=0;LFO=7;VIB 140 d=20:out&h7e,&h68:out&h7f,0:gosub2000:out&h7f,128:out&h7e,&h80:out&h7f,&h3f:'KOFF;KON;LFO=7;VIB=7 141 print" 5";chr$(13);:d=500:out&h7e,&h80:fori=7to0step-1:out&h7f,i*8+7:gosub2000:nexti:out&h7f,0:goto50:'VIB=7;LFO=7..0 150 'mix/panpot 151 out&h7e,&he0:out&h7f,0:out&h7e,&h80:out&h7f,&h38:out&h7e,&h98:out&h7f,&hf0:out&h7e,&hb0:out&h7f,0:'AM=0;LFO=7;AR=15;D1R=0 152 out&h7e,&hc8:out&h7f,15:out&h7e,&h68:out&h7f,0:out&h7f,&h80:out&h7e,&hf8:out&h7f,0:out&h7e,&hf9:out&h7f,0:'RCR=0;RR=F;KOFF;KON;PP=0;MIX=0 153 print" 1";chr$(13);:d=10:gosub2000:out&h7e,&h68:d=100:fori=0to16:out&h7f,&h80+(iand15):gosub2000:nexti:'PP 154 d=10:out&h7e,&h68:out&h7f,0:gosub2000:out&h7f,128:'KOFF;KON 155 print" 2";chr$(13);:d=10:gosub2000:out&h7e,&hf9:d=100:fori=0to64:out&h7f,iand63:gosub2000:nexti:goto50:'MIX 160 'envelope shape/key operation 161 out&h7e,&hc8:out&h7f,15:out&h7e,&h68:out&h7f,0:'RR=F;KOFF 162 out&h7e,&he0:out&h7f,0:out&h7e,&h80:out&h7f,0:out&h7e,&h98:out&h7f,&h46:out&h7e,&hb0:out&h7f,&h22:'AM=0;LFO=0;VIB=0;AR=4;D1R=6;DL=2;D2R=2 163 out&h7e,&hc8:out&h7f,10:out&h7e,&h68:out&h7f,&h80:'RCR=0;RR=A;KON 164 print" 1";chr$(13);:d=250:gosub2000:out&h7e,&h68:out&h7f,0:d=100:gosub2000:out&h7e,&hb0:out&h7f,&h20:out&h7e,&h68:out&h7f,&h80:'DL=2;D2R=0;KOFF;KON 165 print" 2";chr$(13);:d=250:gosub2000:out&h7e,&h68:out&h7f,0:d=100:gosub2000:out&h7e,&h98:out&h7f,&h16:out&h7e,&h68:out&h7f,&h80:'AR=1;D1R=8;KOFF;KON 166 print" 3";chr$(13);:d=160:gosub2000:out&h7e,&h98:out&h7f,&hf8:d=200:gosub2000:out&h7e,&h98:out&h7f,&h18:'AR=F;AR=1 167 d=250:gosub2000:out&h7e,&h68:out&h7f,0:d=100:gosub2000:out&h7e,&h98:out&h7f,&h42:out&h7e,&hc8:out&h7f,8:out&h7e,&hb0:out&h7f,&h60:out&h7e,&h68:out&h7f,&h80:'AR=4;D1R=2;RCR=0;RR=8;DL=6:D2R=0;KOFF;KON 168 print" 4";chr$(13);:d=100:gosub2000:out&h7e,&h68:out&h7f,0:goto50 170 'spectrum test 171 out&h7e,&h20:out&h7f,0:out&h7e,8:out&h7f,0:out&h7e,&h68:out&h7f,128:'test_instr;KON 172 fori=0to15:printi;chr$(13);:forj=0to1023:out&h7e,&h38:out&h7f,i*16+j\128:out&h7e,&h20:out&h7f,(jand127)*2:d=1:gosub2000:nextj:nexti:goto50 180 'data size test 181 print" 1";chr$(13);:out&h7e,32:out&h7f,0:out&h7e,8:out&h7f,0:out&h7e,&h68:out&h7f,128:d=100:gosub2000:out&h7f,0:d=10:gosub2000 182 print" 2";chr$(13);:out&h7e,32:out&h7f,1:out&h7e,8:out&h7f,129:out&h7e,&h68:out&h7f,128:d=100:gosub2000:out&h7f,0:d=10:gosub2000 183 print" 3";chr$(13);:out&h7e,8:out&h7f,130:out&h7e,&h68:out&h7f,128:d=100:gosub2000:out&h7f,0:d=10:gosub2000 184 print" 4";chr$(13);:out&h7e,8:out&h7f,128:out&h7e,&h68:out&h7f,128:d=100:gosub2000:out&h7f,0:d=10:gosub2000:goto50 1100 data -1,0,0,36,0,0,&hff,&hfc,0,&hf0,&h00,15,0:'size=4 8bit 1101 data -1,0,0,40,0,0,&hff,&hc0,0,&hf0,0,15,0:'size=64 8-bit 1102 data -1,128,0,104,0,0,&hff,&hc0,0,&hf0,0,15,0:'size=64 16-bit 1103 data 127,128,127,128,-2 2000 'delay, D=number of seconds 2001 oninterval=dgosub2003:intervalon:v=0 2002 ifv=1thenreturnelsegoto2002 2003 v=1:return