0 PRINT"...initializing";:RUN 10 1 SAVE"dxhtotxt.bas" 2 END:RUN 3 ' 10 DEFINT A-Z 20 DIM D$(32):D$(0)=STRING$(128,0):FOR I=1 TO 32:D$(I)=D$(0):NEXT 30 DIM D2$(6):FOR I=0 TO 6:READ D2$(I):NEXT:DATA -3,-2,-1," 0",+1,+2,+3 40 DIM R$(63):FOR I=0 TO 63:READ R$(I):NEXT 50 DATA " 0.50"," 0.71"," 0.78"," 0.87"," 1.00"," 1.41"," 1.57"," 1.73" 60 DATA " 2.00"," 2.82"," 3.00"," 3.14"," 3.46"," 4.00"," 4.24"," 4.71" 70 DATA " 5.00"," 5.19"," 5.65"," 6.00"," 6.28"," 6.92"," 7.00"," 7.07"," 7.85" 80 DATA " 8.00"," 8.48"," 8.65"," 9.00"," 9.42"," 9,89" 90 DATA 10.00,10.38,10.99,11.00,11.30,12.00,12.11,12.56,12.72,13.00,13.84 100 DATA 14.00,14.10,14.13,15.00,15.55,15.57,15.70,16.96,17.27,17.30,18.37 110 DATA 18.84,19.03,19.78,20.41,20.76,21.20,21.98,22.49,23.55,24.22,25.95 120 DIM MC$(48),ST$(11):FOR I=0 TO 11:READ ST$(I):NEXT 130 FOR I=0 TO 48:MC$(I)=ST$(I MOD 12)+MID$(STR$(1+I/12),2,1):NEXT:ERASE ST$ 140 DATA "C ","C#","D ","D#","E ","F ","F#","G ","G#","A ","A#","B " 150 ' 160 ON ERROR GOTO 0 170 CLS:PRINT"* - Convert VMEM data to Midicom DX-100 text template - *" 180 PRINT:LINE INPUT"Enter filename >";F$:IF F$="" THEN END:RUN 190 ON ERROR GOTO 200:GOTO 220 200 IF ERR=53 THEN PRINT"> FILE NOT FOUND <":GOSUB 2400:RESUME 160 210 GOTO 240 220 OPEN"I",1,F$:CLOSE:PRINT"Loading" 230 ON ERROR GOTO 240:GOTO 260 240 PRINT:PRINT ERR;"> VMEM VOICE FILE ERROR <":RESUME 250 250 ON ERROR GOTO 0:CLOSE:END:RUN 260 OPEN"R",1,F$,128:FIELD#1,6 AS DP$,122 AS DN$:R=1:GET#1,1:H$=DP$ 'header 270 FOR V=1 TO 32:MID$(D$(V),1)=DN$:R=R+1:GET#1,R:MID$(D$(V),123)=DP$:NEXT 280 E$=DN$:CLOSE 290 PRINT"Verify CHECKSUM (Y/n)?";:ON INSTR("Nn",INPUT$(1))/2 GOTO 340 300 PRINT:PRINT"Verifying CHECKSUM (...please, stand by)" 310 FOR V=1 TO 32:FOR B=1 TO &H80:E=E+ASC(MID$(D$(V),B)):NEXT:E=E MOD 256:NEXT 320 E=NOT E AND &HFF:E=E+1 AND &H7F:IF E<>ASC(E$) THEN ERROR 330 ' 340 ON ERROR GOTO 0 350 CLS:GOSUB 670 'display filename and voices 360 PRINT"> Functions < - "; 370 PRINT"[Q]uit, [S]ave, [D]isplay, [P]rint, [N]ew":PRINT STRING$(80,"-"); 380 LOCATE ,,1 390 PRINT"Command >";:S=0:WHILE S=0:S=INSTR("QqSsDdPpNn",INPUT$(1))/2:WEND 400 IF S=5 THEN 170 410 S=S-1:IF S=0 THEN PRINT:PRINT"> End of Program <":END:GOTO 350 420 PRINT:ON S GOTO 430,440,450 430 PRINT"SAVE ";:GOTO 460 440 PRINT"DISPLAY ";:GOTO 460 450 PRINT"PRINT OUT "; 460 INPUT"which voice # ";VS:IF VS=0 THEN 350 470 IF VS>0 AND VS<33 THEN 490 480 PRINT"> A number from 1 to 32 !!! <":GOTO 420 490 ON S GOSUB 510,580,620:GOSUB 2400:GOTO 350 'do selection then wait 500 ' 510 LINE INPUT"Enter FileName to SAVE >";FO$:IF FO$="" THEN RETURN 520 PRINT"Saving"; 530 OPEN"O",1,FO$ 540 GOSUB 740 'stuff template and do I/O routine 550 CLOSE 560 RETURN 570 ' 580 PRINT"Displaying"; 590 GOSUB 740 600 RETURN 610 ' 620 PRINT"Printing"; 630 GOSUB 740 640 RETURN 650 ' 660 '> Display VMEM file & name 670 PRINT" ";F$:PRINT STRING$(80,"-"); 680 FOR V=1 TO 32:R=1+(V-1) MOD 8:C=1+21*FIX((V-1)/8) 690 LOCATE 2+R,1+C:PRINT USING"##. &";V;MID$(D$(V),58,10); 700 NEXT:LOCATE R+3,1:PRINT STRING$(80,"-"); 710 RETURN 720 ' 730 '> Stuff the template & I/O 740 RESTORE 2440 750 L$="":GOSUB 2310 'do I/O 760 'stuff 770 READ L$:P=INSTR(L$,"."):MID$(L$,P)=MID$(D$(VS),58,10) 'name & ... 780 P=INSTR(P+10,L$," ."):MID$(L$,P)=STR$(VS):GOSUB 2310 '...number 790 READ L$:P=INSTR(L$,"."):P$="":MID$(L$,P)=P$:GOSUB 2310 'programmer 800 READ L$:D=ASC(MID$(D$(VS),41)) 810 P=INSTR(L$,"."):MID$(L$,P)=MID$(STR$(1+(D AND 7)),2) 'algorithm 820 P=INSTR(P,L$,"."):MID$(L$,P)=MID$(STR$((D AND &H38)/8),2):GOSUB 2310 'FBL 830 FOR I=1 TO 2:READ L$:GOSUB 2310:NEXT 'no data here 840 READ L$:P=INSTR(L$,"."):D=ASC(MID$(D$(VS),46)) 850 IF (D AND 3)=0 THEN MID$(L$,P)=">" 'saw up 860 D=ASC(MID$(D$(VS),42)):P=INSTR(P,L$,":.")+1 870 MID$(L$,P)=MID$(STR$(D),2) 'speed 880 D=ASC(MID$(D$(VS),43)):P=INSTR(P,L$,":.")+1 890 MID$(L$,P)=MID$(STR$(D),2) 'delay 900 D=ASC(MID$(D$(VS),44)):P=INSTR(P,L$,":.")+1 910 MID$(L$,P)=MID$(STR$(D),2) 'PMD 920 D=ASC(MID$(D$(VS),45)):P=INSTR(P,L$,":.")+1 930 MID$(L$,P)=MID$(STR$(D),2):GOSUB 2310 'AMD 940 READ L$:D=ASC(MID$(D$(VS),46)):P=INSTR(L$,".") 950 IF (D AND 3)=1 THEN MID$(L$,P)=">" 'square wave 960 D=ASC(MID$(D$(VS),41)):P=INSTR(P+1,L$,".") 970 IF D AND &H40 THEN MID$(L$,P)=">" 'sync on 980 GOSUB 2310 990 READ L$:D=ASC(MID$(D$(VS),46)):P=INSTR(L$,".") 'triangle wave 1000 IF (D AND 3)=2 THEN MID$(L$,P)=">" 1010 D=ASC(MID$(D$(VS),41)):P=INSTR(P+1,L$,".") 'sync off 1020 IF (D AND &H40)=0 THEN MID$(L$,P)=">" 1030 GOSUB 2310 1040 READ L$:D=ASC(MID$(D$(VS),46)):P=INSTR(L$,".") 's/hold wave 1050 IF (D AND 3)=3 THEN MID$(L$,P)=">" 1060 GOSUB 2310 1070 FOR I=1 TO 3:READ L$:GOSUB 2310:NEXT 'skip three lines 1080 READ L$:D=ASC(MID$(D$(VS),46)):P=INSTR(L$,".") 'PMS 1090 MID$(L$,P)=MID$(STR$((D AND &H70)/16),2) 1100 P=INSTR(P+2,L$,"."):MID$(L$,P)=MID$(STR$((D AND &HC)/4),2) 'AMS 1110 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),37)) 'AME op1 1120 IF D AND &H40 THEN MID$(L$,P)=">" 1130 P=INSTR(P+1,L$,"."):MID$(L$,P)=MID$(STR$((D AND &H38)/8),2) 'EBS op1 1140 P=INSTR(P+2,L$,"."):MID$(L$,P)=MID$(STR$(D AND 7),2) 'KVS op1 1150 GOSUB 2310 1160 READ L$:D=ASC(MID$(D$(VS),17)) 'AME op2 1170 P=INSTR(L$,"."):IF D AND &H40 THEN MID$(L$,P)=">" 1180 P=INSTR(P+1,L$,"."):MID$(L$,P)=MID$(STR$((D AND &H38)/8),2) 'EBS op2 1190 P=INSTR(P+2,L$,"."):MID$(L$,P)=MID$(STR$(D AND 7),2) 'KVS op2 1200 GOSUB 2310 1210 READ L$:D=ASC(MID$(D$(VS),27)) 'AME op3 1220 P=INSTR(L$,"."):IF D AND &H40 THEN MID$(L$,P)=">" 1230 P=INSTR(P+1,L$,"."):MID$(L$,P)=MID$(STR$((D AND &H38)/8),2) 'EBS op3 1240 P=INSTR(P+2,L$,"."):MID$(L$,P)=MID$(STR$(D AND 7),2) 'KVS op3 1250 GOSUB 2310 1260 READ L$:D=ASC(MID$(D$(VS),7)) 'AME op4 1270 P=INSTR(L$,"."):IF D AND &H40 THEN MID$(L$,P)=">" 1280 P=INSTR(P+1,L$,"."):MID$(L$,P)=MID$(STR$((D AND &H38)/8),2) 'EBS op4 1290 P=INSTR(P+2,L$,"."):MID$(L$,P)=MID$(STR$(D AND 7),2) 'KVS op4 1300 GOSUB 2310 1310 READ L$:GOSUB 2310 'skip 1 1320 READ L$:P=INSTR(L$,".") 1330 D=ASC(MID$(D$(VS),39)):MID$(L$,P)=R$(D AND 63) 'Ratio op1 1340 P=INSTR(P+6,L$,"."):D=ASC(MID$(D$(VS),40)) 'detune op1 1350 MID$(L$,P)=D2$(D AND 7):GOSUB 2310 1360 READ L$:P=INSTR(L$,".") 1370 D=ASC(MID$(D$(VS),19)):MID$(L$,P)=R$(D AND 63) 'Ratio op2 1380 P=INSTR(P+6,L$,"."):D=ASC(MID$(D$(VS),20)) 'detune op2 1390 MID$(L$,P)=D2$(D AND 7):GOSUB 2310 1400 READ L$:P=INSTR(L$,".") 1410 D=ASC(MID$(D$(VS),29)):MID$(L$,P)=R$(D AND 63) 'Ratio op3 1420 P=INSTR(P+6,L$,"."):D=ASC(MID$(D$(VS),30)) 'detune op3 1430 MID$(L$,P)=D2$(D AND 7):GOSUB 2310 1440 READ L$:P=INSTR(L$,".") 1450 D=ASC(MID$(D$(VS),9)):MID$(L$,P)=R$(D AND 63) 'Ratio op4 1460 P=INSTR(P+6,L$,"."):D=ASC(MID$(D$(VS),10)) 'detune op4 1470 MID$(L$,P)=D2$(D AND 7):GOSUB 2310 1480 FOR I=1 TO 3:READ L$:GOSUB 2310:NEXT 'skip 3 1490 READ L$:P=INSTR(L$,".") 'op1 1500 D=ASC(MID$(D$(VS),31)):MID$(L$,P)=MID$(STR$(D),2) 'AR 1510 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),32)):MID$(L$,P)=MID$(STR$(D),2) 'D1R 1520 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),35)):MID$(L$,P)=MID$(STR$(D),2) 'D1L 1530 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),33)):MID$(L$,P)=MID$(STR$(D),2) 'D2R 1540 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),34)):MID$(L$,P)=MID$(STR$(D),2) 'RR 1550 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),38)):MID$(L$,P)=MID$(STR$(D),2) 'OUT 1560 GOSUB 2310 1570 READ L$:P=INSTR(L$,".") 'op2 1580 D=ASC(MID$(D$(VS),11)):MID$(L$,P)=MID$(STR$(D),2) 'AR 1590 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),12)):MID$(L$,P)=MID$(STR$(D),2) 'D1R 1600 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),15)):MID$(L$,P)=MID$(STR$(D),2) 'D1L 1610 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),13)):MID$(L$,P)=MID$(STR$(D),2) 'D2R 1620 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),14)):MID$(L$,P)=MID$(STR$(D),2) 'RR 1630 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),18)):MID$(L$,P)=MID$(STR$(D),2) 'OUT 1640 GOSUB 2310 1650 READ L$:P=INSTR(L$,".") 'op3 1660 D=ASC(MID$(D$(VS),21)):MID$(L$,P)=MID$(STR$(D),2) 'AR 1670 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),22)):MID$(L$,P)=MID$(STR$(D),2) 'D1R 1680 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),25)):MID$(L$,P)=MID$(STR$(D),2) 'D1L 1690 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),23)):MID$(L$,P)=MID$(STR$(D),2) 'D2R 1700 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),24)):MID$(L$,P)=MID$(STR$(D),2) 'RR 1710 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),28)):MID$(L$,P)=MID$(STR$(D),2) 'OUT 1720 GOSUB 2310 1730 READ L$:P=INSTR(L$,".") 'op4 1740 D=ASC(MID$(D$(VS),1)):MID$(L$,P)=MID$(STR$(D),2) 'AR 1750 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),2)):MID$(L$,P)=MID$(STR$(D),2) 'D1R 1760 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),5)):MID$(L$,P)=MID$(STR$(D),2) 'D1L 1770 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),3)):MID$(L$,P)=MID$(STR$(D),2) 'D2R 1780 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),4)):MID$(L$,P)=MID$(STR$(D),2) 'RR 1790 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),8)):MID$(L$,P)=MID$(STR$(D),2) 'OUT 1800 GOSUB 2310 1810 READ L$:GOSUB 2310 'skip 1 1820 READ L$:P=INSTR(L$,"."):D=ASC(MID$(D$(VS),47)) 1830 MID$(L$,P)=MID$(MC$(D),1):GOSUB 2310 1840 READ L$:P=INSTR(L$,"."):D=ASC(MID$(D$(VS),40)) 'op1 1850 MID$(L$,P)=MID$(STR$((D AND &H18)/8),2) 'Rate scaling 1860 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),36)) 1870 MID$(L$,P)=MID$(STR$(D),2):GOSUB 2310 'level scaling 1880 READ L$:P=INSTR(L$,"."):D=ASC(MID$(D$(VS),20)) 'op2 1890 MID$(L$,P)=MID$(STR$((D AND &H18)/8),2) 'Rate scaling 1900 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),16)) 1910 MID$(L$,P)=MID$(STR$(D),2):GOSUB 2310 'level scaling 1920 READ L$:P=INSTR(L$,"."):D=ASC(MID$(D$(VS),30)) 'op3 1930 MID$(L$,P)=MID$(STR$((D AND &H18)/8),2) 'Rate scaling 1940 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),26)) 1950 MID$(L$,P)=MID$(STR$(D),2):GOSUB 2310 'level scaling 1960 READ L$:P=INSTR(L$,"."):D=ASC(MID$(D$(VS),10)) 'op4 1970 MID$(L$,P)=MID$(STR$((D AND &H18)/8),2) 'Rate scaling 1980 P=INSTR(P+2,L$,"."):D=ASC(MID$(D$(VS),6)) 1990 MID$(L$,P)=MID$(STR$(D),2):GOSUB 2310 'level scaling 2000 FOR I=1 TO 2:READ L$:GOSUB 2310:NEXT 'skip 2 2010 READ L$:D=ASC(MID$(D$(VS),49)) 'poly/mono 2020 P=INSTR(L$,"."):IF (D AND 8)=0 THEN MID$(L$,P)=">" 'poly 2030 P=INSTR(P+1,L$,"."):IF D AND 8 THEN MID$(L$,P)=">" 'mono 2040 P=INSTR(P+1,L$,"."):D=ASC(MID$(D$(VS),48)) 'pitch bend 2050 MID$(L$,P)=MID$(STR$(D),2):GOSUB 2310 2060 FOR I=1 TO 2:READ L$:GOSUB 2310:NEXT 'skip 2 2070 READ L$:D=ASC(MID$(D$(VS),49)) 'porta mode 2080 P=INSTR(L$,"."):IF (D AND 1)=0 THEN MID$(L$,P)=">" 'full t 2090 P=INSTR(P+1,L$,"."):IF D AND 1 THEN MID$(L$,P)=">" 'fingered 2100 D=ASC(MID$(D$(VS),50)) 'porta time 2110 P=INSTR(P+1,L$,"."):MID$(L$,P)=MID$(STR$(D),2) 2120 D=ASC(MID$(D$(VS),49)) 'foot sw assign 2130 P=INSTR(P+2,L$,"."):IF D AND 4 THEN MID$(L$,P)=">" 'sus 2140 P=INSTR(P+2,L$,"."):IF D AND 2 THEN MID$(L$,P)=">" 'porta 2150 GOSUB 2310:READ L$:GOSUB 2310 'skip 1 2160 READ L$:D=ASC(MID$(D$(VS),52)) 'wheel pitch range 2170 P=INSTR(L$,"."):MID$(L$,P)=MID$(STR$(D),2) 2180 D=ASC(MID$(D$(VS),53)) 'wheel amplitude range 2190 P=INSTR(P+2,L$,"."):MID$(L$,P)=MID$(STR$(D),2):GOSUB 2310 2200 FOR I=1 TO 2:READ L$:GOSUB 2310:NEXT 'skip 2 2210 READ L$:D=ASC(MID$(D$(VS),54)) 'Breath 2220 P=INSTR(L$,"."):MID$(L$,P)=MID$(STR$(D),2) 'pitch range 2230 D=ASC(MID$(D$(VS),55)) 'amplitude range 2240 P=INSTR(P+2,L$,"."):MID$(L$,P)=MID$(STR$(D),2) 2250 D=ASC(MID$(D$(VS),56)) 'pitch bias 2260 P=INSTR(P+2,L$,"."):MID$(L$,P)=MID$(STR$(D),2) 2270 D=ASC(MID$(D$(VS),57)) 'EG bias 2280 P=INSTR(P+2,L$,"."):MID$(L$,P)=MID$(STR$(D),2) 2290 GOSUB 2310 2300 WHILE L$<>"":READ L$:GOSUB 2310:WEND:RETURN 'ALL DONE! 2310 ON S GOSUB 2350,2360,2370 'do I/O 2320 RETURN 2330 ' 2340 'I/O 2350 PRINT#1,L$:RETURN 2360 PRINT L$:RETURN 2370 LPRINT L$:RETURN 2380 ' 2390 'Wait for keypress 2400 WHILE INKEY$<>"":WEND:PRINT:PRINT"( any key to resume )":A=LEN(INPUT$(1)) 2410 RETURN 2420 ' 2430 '* DX-100 VOICE PROGAMMING TEXT TEMPLATE * 2440 DATA "DX-100 Voice/Function Data Voice Name: .......... Number: ......." 2450 DATA "========================== Programmer: ..........................." 2460 DATA "1-Algorithm:. 2-Feedback:." 2470 DATA "--------------------------------------------------------------------" 2480 DATA "LFO 3- 4- 5- 6- 7- 8-" 2490 DATA " Wave:.saw up Speed:. Delay:. PMD:. AMD:. Sync:" 2500 DATA " .square .on" 2510 DATA " .triangle .off" 2520 DATA " .S/Hold " 2530 DATA "--------------------------------------------------------------------" 2540 DATA "Modulation Sensitivity" 2550 DATA "9- 10-Amplitude 11- 12-" 2560 DATA "Pitch:. AMS:. Enable:.op1 EG Bias op1:. Key Velocity op1:." 2570 DATA " .op2 op2:. op2:." 2580 DATA " .op3 op3:. op3:." 2590 DATA " .op4 op4:. op4:." 2600 DATA "--------------------------------------------------------------------" 2610 DATA "Oscillator 13-Freq Ratio op1:..... 14-Detune op1:.." 2620 DATA " op2:..... op2:.." 2630 DATA " op3:..... op3:.." 2640 DATA " op4:..... op4:.." 2650 DATA "--------------------------------------------------------------------" 2660 DATA "Envelope Generator" 2670 DATA " 15-AR 16-D1R 17-D1L 18-D2R 19-RR 20-Out Level" 2680 DATA "op1:. op1:. op1:. op1:. op1:. op1:. " 2690 DATA "op2:. op2:. op2:. op2:. op2:. op2:. " 2700 DATA "op3:. op3:. op3:. op3:. op3:. op3:. " 2710 DATA "op4:. op4:. op4:. op4:. op4:. op4:. " 2720 DATA "--------------------------------------------------------------------" 2730 DATA "Keyboard Scaling 21-Rate 22-Level 23-Transpose:C=..." 2740 DATA " op1:. op1:. " 2750 DATA " op2:. op2:. " 2760 DATA " op3:. op3:. " 2770 DATA " op4:. op4:. " 2780 DATA "--------------------------------------------------------------------" 2790 DATA "Function" 2800 DATA "13-.Poly/.Mono 14-Pitch Bend Range:. " 2810 DATA "--------------------------------------------------------------------" 2820 DATA "Portamento" 2830 DATA "15-Mode:.Full T/.Fingered 16-Time:. 17-Foot Sw Assign:.Sus/.Por" 2840 DATA "--------------------------------------------------------------------" 2850 DATA "Wheel Range 18-Pitch:. 19-Amplitude:. " 2860 DATA "--------------------------------------------------------------------" 2870 DATA "Breath Range" 2880 DATA "20-Pitch:. 21-Amplitude:. 22-Pitch Bias:. 23-EG Bias:. " 2890 DATA "====================================================================" 2900 DATA "" 2910 ' 2920 '* Last line *