-
Posts
2,968 -
Joined
-
Last visited
-
Days Won
6
Content Type
Profiles
Forums
Blogs
Gallery
Events
Store
Posts posted by Sinphaltimus
-
-
Musick v1.1 final. I may adjust somethings as I go along but this project is completed. I can take the analog out and feed it through all sorts of pedals and effects and that's just about all I ever wanted this for (a live performance on original unmodded hardware).
Next project is going to deal with audio also but this time we mess with speech!
Included in the ZIP is a text file of the code written in ti-99/4a Extended BASIC, the same as a FIAD file for emulation and a wav file for use with actual hardware with tape drive. I will post a demo sometime later this week as I want to run it on the hardware and have run of out time this weekend.
Have fun, I know I will!
If not for anything else, it's useful to see call sound settings displayed in realtime as you play with your keyboard.
Designed to run on less than 13k.On screen instructions and easy to figure out displays.
I will update this in a few weeks with line by line comments if anyone is interested.
Known Bugs: Part of the word SLIDE is missing and the word Tremolo is missing for the Physch-D Tremolo fx.
Musickx1.1.zip-
2
-
-
On 32K upgrades, there are a couple of threads here devoted to just that subject. If you look in the Project of the Quarter thread, there is one to install inside the keyboard, and if you look in the Dev subforum, you will find a WIP thread for a sideport 32K expansion.
I'll have to pay more attention. I'm pretty sure the internal one is dead. I've read through them but the guy to get parts from seems gone. That was last week - maybe I followed the wrong topic I dunno.
-
Yooze guyz are awesome. OK.
I've been keeping a cheesey dev blog on my Fb page - the posting is open to the public if you want to follow along:
https://www.facebook.com/SExmortus/posts/10206543271892515
I'm taking a break to get some other tasks completed that aren't computer related.Next I need to tweak the Psycho_D tremolo effect and some noise effects. THEN I will optimize everything by combining commands in to less lines of code>
I want to save a commented version before removing all comments and rem statements in order to shrink the program down enough to fit on the original non-modified hardware (16k ram). I'm having a hard time finding a 32k upgrade that's affordable or the parts/instructions to make one. The email address of the most popular one no longer works and all links are broken
Anyway, back on track - Here is my code so far.l It is fully functional with all features in and working.
100 NLOOP=1110 PRINT " ************************"120 PRINT "Musick v0.17 SYMM LLC 2016"130 PRINT " ************************"140 PRINT150 PRINT160 PRINT170 PRINT "L key toggles sound Loop"180 PRINT " on/off."190 PRINT200 PRINT "Please wait loading."210 PRINT220 PRINT230 PRINT "len@screamingyeti.org"240 PRINT250 PRINT260 PRINT270 PRINT280 PRINT290 PRINT300 PRINT310 PRINT320 PRINT330 PRINT340 FOR TDELAY=1 TO 1000350 NEXT TDELAY360 DATA 7,2,00C4A4948C848484,38,NoteKeys,8,2,00F98888888888F8,39,NoteKeys,9,2,00F9616161616161,40,NoteKeys370 DATA 10,2,00F00000E00000F0,41,NoteKeys,20,2,0022243838242221,42,NoteKeys380 DATA 21,2,003E20203C20203E,139,NoteKeys,22,2,0022221408080808,43,NoteKeys390 DATA 23,2,003C42403C02423C,44,NoteKeys,3,5,000404F403030000,45,volumetxt,4,5,00BDA5A5253D0000,46,volumetxt400 DATA 5,5,0009090909EF0000,47,volumetxt,6,5,006D6D5545450000,58,volumetxt,7,5,00E01FC01FE00000,59,volumetxt410 DATA 11,4,7878636263627A78,60,freq,12,4,0000DE129C121200,61,freq,13,4,00007B4272427B00,62,freq420 DATA 14,4,0000925252D2DE00,63,freq,15,4,0000F486E584F400,64,freq,16,4,0000BDA5A0A4BC00,72,freq430 DATA 17,4,0F0F2323C3C3CF0F,73,freq,12,7,00000020602E2070,74,noise,13,7,00000097D4B49497,75,noise440 DATA 14,7,000000B9919190B9,76,noise,15,7,000000EF08EE28EF,77,noise,16,7,0000000F09EF090F,78,noise450 DATA 21,4,78FCFC7C1C1C3870,79,duration,22,4,001C1212121C0000,80,duration,23,4,0097949795F40000,81,duration460 DATA 24,4,0019A43C24A40000,82,duration,25,4,00F7424242470000,83,duration,26,4,0079494949790000,84,duration470 DATA 27,4,0021A16121210100,140,duration,28,4,00F8F8F8F8F8F800,85,duration480 DATA 3,10,FFFF181818181818,86,Tremolo,4,10,8080007149715149,87,Tremolo,5,10,000000E80DCA08E8,88,Tremolo490 DATA 6,10,000000BDA5A5A5BD,89,Tremolo,7,10,0000001E121212DE,90,Tremolo,11,9,00007C040810207C,91,SLIDE500 DATA 12,9,7884807804848478,92,SLIDE,13,9,404040404040407E,93,SLIDE,14,9,3E0808080808083E,94,SLIDE510 DATA 15,9,3F1010101010103F,95,SLIDE,16,9,1F90909E9090901F,96,SLIDE520 DATA 17,9,0000183C5A991818,97,SLIDE,11,10,0000183C5A991818,97,SLIDE530 DATA 17,10,C324181824C30000,98,SLIDE,23,10,78FCCCFCF8C0C0C0,99,PTremolo,24,10,000000F282F311F1,100,PTremolo540 DATA 25,10,0000009E9090101E,101,PTremolo,26,10,0000009090F79090,102,PTremolo,27,10,0000003824A42438,103,PTremolo550 DATA 4,16,00456D5545454400,104,ZeroMute,5,16,001711111111E100,105,ZeroMute,6,16,00DE101C10101E00,106,ZeroMute560 DATA 5,17,1C2222222222221C,107,ZeroMute,13,14,0000000078FCC6C6,108,rtg,14,14,0000000000000072,109,rtg570 DATA 15,14,0000000000000059,110,rtg,16,14,00000000000000E8,111,rtg,17,14,0000000000000080,112,rtg580 DATA 13,15,FCD8CCC600EF4949,113,rtg,14,15,8BFA8A8A004B6A5B,114,rtg,15,15,55D5555900C00080,115,rtg590 DATA 16,15,2D2A28E800000000,116,rtg,17,15,8080808000000000,117,rtg,13,16,494F003B425B4A33,118,rtg600 DATA 14,16,4A4B00D21A9612D2,119,rtg,15,16,00C000F784E785F4,120,rtg,16,16,00000019A43C24A4,121,rtg610 DATA 17,16,000000DE9292929E,122,rtg,18,16,000000E090E0A090,123,rtg,9,21,00000F080F010F00,124,spacebar620 DATA 10,21,0000714A73424200,125,spacebar,11,21,00009E50D0505E00,126,spacebar,12,21,0000F784E784F700,127,spacebar630 DATA 13,21,000019A53DA52500,128,spacebar,14,21,0000C020C0402000,129,spacebar,15,21,00003C2121213D00,130,spacebar640 DATA 16,21,0000C92DEB292900,131,spacebar,17,21,00007B4243427B00,132,spacebar,18,21,0000D0109010DE00,133,spacebar650 DATA 19,21,0000F080F010F000,134,spacebar,24,16,324A4A4A5A390400,135,Quit,25,16,2F26262626CF0000,136,Quit660 DATA 26,16,7C10101010100000,137,Quit,25,17,7884848484947804,138,Quit670 CALL CLEAR :: RESTORE 680680 DATA 33,07060C0C1818187F,34,33316163666CC8D8,35,8000000000001030,36,60C08080C0E00000,37,FFDBA5DBDBA5DBFF690 FOR DRW=1 TO 5700 READ CHR,PAT$710 CALL CHAR(CHR,PAT$)720 NEXT DRW730 CALL SCREEN(15)740 CLR=13 :: IY=1 :: IX=11750 CALL SPRITE(#1,37,CLR,IY*8,IX*
760 CALL DELSPRITE(#1)770 DISPLAY AT(2,10):"CDEFGAB"780 RESTORE 360790 FOR DRW=1 TO 87800 READ COL,ROW,PAT$,CHR,GRP$810 CALL CHAR(CHR,PAT$)820 CALL VCHAR(ROW,COL,CHR)830 NEXT DRW840 TCHR=9850 CALL SPRITE(#10,33,2,20*8,19*
860 CALL SPRITE(#11,34,2,21*8,19*
870 CALL SPRITE(#12,35,2,20*8,20*
880 CALL SPRITE(#13,36,2,21*8,20*
890 RESTORE 920900 REM DISPLAY AT(23,1):"Musick v0.16 SYMM LLC 2016"910 READ VOL,DUR,C,D,E,F,G,A,B,KEY,NOTE,MUTE !load default settings on all variables920 DATA 15,200,262,294,330,349,392,440,494,262,262,0930 CALL KEY(0,KEY,STATUS)!Check for keyboard input940 IF STATUS=-1 THEN 1140 !SAME KEY PRESSED950 IF STATUS=0 THEN 960 ELSE 980 !NO KEY PRESSED CHECK FOR LOOP ELSE CONTINUE960 IF NLOOP=1 THEN 1500 ELSE 930 !IF NO KEY PRESSED AND NLOOENABLED - PLAY SOUND AGAIN ELSE GO BACK TO KEY PRESS970 REM IF DIFFERENT KEY PRESSED (STATUS=1)980 CALL DELSPRITE(#1)990 IF KEY<>49 THEN 1000 :: NOTE=-1 :: GOTO 1500 !one (1) for NOISE = -11000 IF KEY<>50 THEN 1010 :: NOTE=-2 :: GOTO 1500 !two (2) for NOISE = -21010 IF KEY<>51 THEN 1020 :: NOTE=-3 :: GOTO 1500 !three (3) for NOISE = -31020 IF KEY<>52 THEN 1030 :: NOTE=-4 :: GOTO 1500 !four (4) for NOISE = -41030 IF KEY<>53 THEN 1040 :: NOTE=-5 :: GOTO 1500 !five (5) for NOISE = -51040 IF KEY<>54 THEN 1050 :: NOTE=-6 :: GOTO 1500 !six (6) for NOISE = -61050 IF KEY<>55 THEN 1060 :: NOTE=-7 :: GOTO 1500 !seven (7) for NOISE = -71060 IF KEY<>56 THEN 1070 :: NOTE=-8 :: GOTO 1500 !eight (
for NOISE = 81070 IF KEY<>67 THEN 1080 :: NOTE=C :: GOTO 1500 !Note C © for Frequency = 2621080 IF KEY<>68 THEN 1090 :: NOTE=D :: GOTO 1500 !Note D (d) for Frequency = 2941090 IF KEY<>69 THEN 1100 :: NOTE=E :: GOTO 1500 !Note E (e) for Frequency = 3301100 IF KEY<>70 THEN 1110 :: NOTE=F :: GOTO 1500 !Note F (f) for Frequency = 3491110 IF KEY<>71 THEN 1120 :: NOTE=G :: GOTO 1500 !Note G (g) for Frequency = 3921120 IF KEY<>65 THEN 1130 :: NOTE=A :: GOTO 1500 !Note A (a) for Frequency = 4401130 IF KEY<>66 THEN 1140 :: NOTE=B :: GOTO 1500 !Note B (b) for Frequency = 4941140 IF KEY<>91 THEN 1150 :: NOTE=NOTE-1 :: GOTO 1400 !Open Bracket ([) for NOTE -1 hz Down1150 IF KEY<>93 THEN 1190 !close Bracket (]) for NOTE +1 hz Up1160 IF NOTE<=110 THEN 1170 ELSE 1180 !***CHECK TO ENSURE NOISE DOES NOT GET NOTE ADJUSTMENT***1170 NOTE=1101180 NOTE=NOTE+1 :: GOTO 13801190 IF KEY<>46 THEN 1200 :: DUR=DUR+1 :: GOTO 1430 !PERIOD (.) FOR DUR Up1200 IF KEY<>44 THEN 1210 :: DUR=DUR-1 :: GOTO 1400 !COMMA (,) FOR DUR Down1210 IF KEY<>61 THEN 1220 :: VOL=VOL-1 :: GOTO 1470 !MINUS (-) FOR VOL DOWN1220 IF KEY<>45 THEN 1230 :: VOL=VOL+1 :: GOTO 1450 !EQUALS (=) FOR VOL UP1230 IF KEY=90 THEN 1710 !Z KEY (z) FOR SLIDE Down1240 IF KEY=88 THEN 1800 !X KEY (x) FOR SLIDEUp1250 IF KEY=84 THEN 1900 !T KEY (t) FOR TREMOLO1260 IF KEY=80 THEN 2180 !P KEY (p) FOR PSYCHODELICK TREMOLO1270 IF KEY=82 THEN 2480 !R KEY ® FOR RANDOM NOTE GENERATOR1280 IF KEY=81 THEN 2640 !Q KEY (q) TO QUIT THE PROGRAM1290 IF KEY=48 THEN 2570 !ZERO KEY (0) TO MUTE/UNMUTE AUDIO1300 IF KEY=76 THEN 1310 ELSE 1330 ! toggle loop1310 IF NLOOP=0 THEN NLOOP=1 :: GOTO 13301320 IF NLOOP=1 THEN NLOOP=01330 IF KEY<=159 THEN 1340 ELSE 930 !**********ERROR CHECKING ON KEY PRESSED***********1340 CALL SOUND(DUR,NOTE,VOL):: DISPLAY AT(6,2):VOL :: DISPLAY AT(5,9):NOTE :: DISPLAY AT(5,20):DUR :: GOTO 9301350 REM ********cALL***sOUND***rOUTINE***cHECKS********1360 IF NOTE<=110 THEN 1370 ELSE 1380 !*check NOTE range lower limit and correct if out of range*1370 NOTE=110 :: GOTO 14901380 IF NOTE>=40000 THEN 1390 ELSE 1490 !*check NOTE range higherlimit and correct if out of range*1390 NOTE=40000 :: GOTO 14901400 IF DUR<=1 THEN 1410 ELSE 1430 !*check DURation range lower limit and correct if out of range*1410 DUR=1 :: GOTO 14901420 REM1430 IF DUR>=4250 THEN 1440 ELSE 1450 !*check DURation range upper limit and correct if out of range*1440 DUR=42501450 IF VOL>=30 THEN 1460 ELSE 1470 !*check VOLume range upper limit and correct if out of range*1460 VOL=30 :: GOTO 14901470 IF VOL<=0 THEN 1480 ELSE 1500 !*check VOLume range lower limit and correct if out of range*1480 VOL=01490 REM ***CALL SOUND***ROUTINE***1500 IF NOTE<>262 THEN 15201510 IY=1 :: IX=11 :: GOTO 16501520 IF NOTE<>294 THEN 15401530 IY=1 :: IX=12 :: GOTO 16501540 IF NOTE<>330 THEN 15601550 IY=1 :: IX=13 :: GOTO 16501560 IF NOTE<>349 THEN 15801570 IY=1 :: IX=14 :: GOTO 16501580 IF NOTE<>392 THEN 16001590 IY=1 :: IX=15 :: GOTO 16501600 IF NOTE<>440 THEN 16201610 IY=1 :: IX=16 :: GOTO 16501620 IF NOTE<>494 THEN 16401630 IY=1 :: IX=17 :: GOTO 16501640 CLR=1 :: GOTO 16601650 CLR=41660 CALL SPRITE(#1,37,CLR,IY*8,IX*
1670 FR=20 :: FC=191680 GOSUB 26701690 CALL SOUND(DUR,NOTE,VOL):: DISPLAY AT(6,2):VOL :: DISPLAY AT(5,9):NOTE :: DISPLAY AT(5,20):DUR :: GOTO 9301700 REM *********sLIDE dOWN rOUTINE*********************1710 FR=10 :: FC=131720 GOSUB 26701730 IF NOTE<=210 THEN 1740 ELSE 1750 !check if slide down has valid end range and correct if not.1740 NOTE=2101750 FOR SD=1 TO 100 :: NOTE=NOTE-1 :: CALL SOUND(1,NOTE,VOL):: DISPLAY AT(6,2):VOL1760 DISPLAY AT(5,9):NOTE :: DISPLAY AT(5,20):DUR :: CALL KEY(0,KEY,STATUS):: IF STATUS<>0 THEN 1770 ELSE 17801770 CALL DELSPRITE(#6,#7,#8,#9):: GOTO 9301780 NEXT SD :: CALL DELSPRITE(#6,#7,#8,#9):: GOTO 9301790 REM ***********sLIDE uP rOUTINE*****************1800 FR=10 :: FC=131810 GOSUB 26701820 IF NOTE>=39900 THEN 1830 ELSE 1840 !check if slide up has valid end range and correct if not.1830 NOTE=399001840 FOR SU=1 TO 100 :: NOTE=NOTE+11850 CALL SOUND(1,NOTE,VOL):: DISPLAY AT(6,2):VOL :: DISPLAY AT(5,9):NOTE :: DISPLAY AT(5,20):DUR1860 CALL KEY(0,KEY,STATUS):: IF STATUS<>0 THEN 1870 ELSE 18801870 CALL DELSPRITE(#6,#7,#8,#9):: GOTO 9301880 NEXT SU :: CALL DELSPRITE(#6,#7,#8,#9):: GOTO 9301890 REM ***************tREMOLO rOUTINE*****************1900 FR=7 :: FC=41910 GOSUB 26701920 IF NOTE<=220 THEN 1930 ELSE 19401930 NOTE=221 :: GOTO 19601940 IF NOTE>=40000 THEN 1950 ELSE 19601950 NOTE=398991960 FOR WD=1 TO 10 :: CALL KEY(0,KEY,STATUS):: IF STATUS<>0 THEN 1970 ELSE 19801970 GOSUB 20501980 NOTE=NOTE-10 :: CALL SOUND(1,NOTE,VOL):: DISPLAY AT(6,2):VOL :: DISPLAY AT(5,9):NOTE1990 DISPLAY AT(5,20):DUR :: NEXT WD2000 FOR WU=1 TO 10 :: CALL KEY(0,KEY,STATUS):: IF STATUS<>0 THEN 2030 ELSE 20102010 NOTE=NOTE+10 :: CALL SOUND(1,NOTE,VOL):: DISPLAY AT(6,2):VOL :: DISPLAY AT(5,9):NOTE2020 DISPLAY AT(5,20):DUR :: NEXT WU :: GOTO 21702030 GOSUB 20502040 REM ********tREMOLO sLIDE rOUTINE***********2050 IF KEY<>91 THEN 2060 :: NOTE=NOTE-10 :: GOTO 2100 !Open Bracket ([) for NOTE -1 hz Down2060 IF KEY<>93 THEN 2070 :: NOTE=NOTE+10 :: GOTO 2120 !close Bracket (]) for NOTE +1 hz Up2070 IF STATUS<>0 THEN 2080 ELSE 20902080 CALL DELSPRITE(#6,#7,#8,#9):: GOTO 9302090 GOTO 19602100 IF NOTE<=220 THEN 2110 ELSE 2120 !t-sLIDE D check NOTE range lower limit and correct if out of range2110 NOTE=221 :: GOTO 21602120 IF NOTE>=40000 THEN 2130 ELSE 2160 !t-sLIDE U check NOTE range higherlimit and correct if out of range2130 NOTE=398992140 REM ***TREMOLO***CALL***SOUND***ROUTINE***2150 CALL SOUND(1,NOTE,VOL):: DISPLAY AT(6,2):VOL :: DISPLAY AT(5,9):NOTE :: DISPLAY AT(5,20):DUR :: RETURN2160 REM ***TREMOLO***CALL***SOUND***ROUTINE***2170 CALL SOUND(1,NOTE,VOL):: DISPLAY AT(6,2):VOL :: DISPLAY AT(5,9):NOTE :: DISPLAY AT(5,20):DUR :: GOTO 19202180 REM ***************pSYCHODELIC tREMOLO**************2190 FR=7 :: FC=242200 GOSUB 26702210 SNOTE=13013 :: TNOTE=310312220 IF SNOTE>=40000 THEN 2230 ELSE 22402230 SNOTE=40000 :: TNOTE=300002240 IF NOTE<=220 THEN 2250 ELSE 22602250 NOTE=221 :: GOTO 22802260 IF NOTE>=40000 THEN 2270 ELSE 22802270 NOTE=398992280 FOR WD=1 TO 10 :: CALL KEY(0,KEY,STATUS):: IF STATUS<>0 THEN 2290 ELSE 23002290 GOSUB 23802300 NOTE=NOTE-10 :: SNOTE=SNOTE-110 :: TNOTE=TNOTE-1002310 CALL SOUND(1,NOTE,VOL,SNOTE,VOL,TNOTE,VOL):: DISPLAY AT(6,2):VOL :: DISPLAY AT(5,9):NOTE :: DISPLAY AT(5,20):DUR :: NEXT WD2320 FOR WU=1 TO 10 :: CALL KEY(0,KEY,STATUS):: IF STATUS<>0 THEN 2330 ELSE 23402330 GOSUB 23802340 NOTE=NOTE+10 :: SNOTE=SNOTE+110 :: TNOTE=TNOTE+1002350 CALL SOUND(1,NOTE,VOL,SNOTE,VOL,TNOTE,VOL):: DISPLAY AT(6,2):VOL :: DISPLAY AT(5,9):NOTE :: DISPLAY AT(5,20):DUR :: NEXT WU2360 GOTO 24702370 REM ********pSYCh***tREMOLO sLIDE rOUTINE***********2380 IF KEY<>91 THEN 2390 :: NOTE=NOTE-10 :: SNOTE=SNOTE-110 :: TNOTE=TNOTE-100 :: GOTO 2420 !open Bracket ([) for NOTE -1 hz Down2390 IF KEY<>93 THEN 2400 :: NOTE=NOTE+10 :: SNOTE=SNOTE+110 :: TNOTE=TNOTE+100 :: GOTO 2440 !close Bracket (]) for NOTE +1 hz Up2400 IF STATUS<>0 THEN 2410 ELSE 22802410 CALL DELSPRITE(#6,#7,#8,#9):: GOTO 9302420 IF NOTE<=220 THEN 2430 ELSE 2440 !pSYCh t-sLIDE Dcheck NOTE range lower limit and correct if out of range2430 NOTE=221 :: SNOTE=13013 :: TNOTE=31031 :: GOTO 24702440 IF NOTE>=40000 THEN 2450 ELSE 2460 !pSYCh t-sLIDE Ucheck NOTE range higherlimit and correct if out of range2450 NOTE=39899 :: SNOTE=13013 :: TNOTE=310312460 CALL SOUND(1,NOTE,VOL,SNOTE,VOL,TNOTE,VOL):: DISPLAY AT(6,2):VOL :: DISPLAY AT(5,9):NOTE :: DISPLAY AT(5,20):DUR :: RETURN2470 CALL SOUND(1,NOTE,VOL,SNOTE,VOL,TNOTE,VOL):: DISPLAY AT(6,2):VOL :: DISPLAY AT(5,9):NOTE :: DISPLAY AT(5,20):DUR :: GOTO 22102480 REM *************rANDOME nOTE gENERATOR******************2490 RANDOMIZE2500 FR=13 :: FC=162510 GOSUB 26702520 RS1=INT(38000*RND)+111 :: RS2=INT(38000*RND)+111 :: RS3=INT(38000*RND)+111 :: RV1=INT(15*RND):: RV2=INT(15*RND):: RV3=INT(15*RND)2530 CALL SOUND(DUR,RS1,RV1,RS2,RV2,RS3,RV3):: DISPLAY AT(6,2):RV1 :: DISPLAY AT(5,9):RS1 :: DISPLAY AT(5,20):DUR2540 CALL KEY(0,KEY,STATUS):: IF STATUS<>0 THEN 2550 ELSE 25202550 CALL DELSPRITE(#6,#7,#8,#9):: GOTO 9302560 REM ********************mute/unmute function*********2570 FR=13 :: FC=42580 GOSUB 26702590 IF MUTE<>0 THEN 2630 :: MUTE=12600 FOR DELAY=1 TO 10 :: NEXT DELAY :: CALL KEY(0,KEY,STATUS):: IF KEY<>48 THEN 2610 :: GOTO 25702610 IF STATUS<>0 THEN 2620 ELSE 26002620 CALL DELSPRITE(#6,#7,#8,#9):: GOTO 9302630 MUTE=0 :: GOTO 26002640 CALL CLEAR2650 END2660 REM ************************FLOATERFX*********************2670 CALL SPRITE(#6,33,13,FR*8,FC*
2680 CALL SPRITE(#7,34,13,(FR+1)*8,FC*
2690 CALL SPRITE(#8,35,13,FR*8,(FC+1)*
2700 CALL SPRITE(#9,36,13,(FR+1)*8,(FC+1)*
2710 RETURN-
1
-
-
As Ksarul says in the post above, you must have quotes around strings. One exception is when using DATA statements. For example:
10 READ A$
20 PRINT A$ !shows that A$ is ABCD
100 DATA ABCD
You really don't need the TMP$ here, plus XB lets you define up to 4 characters with one CALL CHAR. So by combining the first 4 strings you can make a single line:
80 CALL CHAR(33,"0001010303030F06C08080000000E46C060C0C0C0D191B1B383070D89C000000")
which does the same thing as your lines 10 - 90 and uses 86 bytes instead of 212.
With tricks like this you should be able to shrink your program to fit the unexpanded console. Of course, once you shrink it you will think of more features to add which will make it too large again!
Thank much. Yeah the code example was just me simplifying it to try and see the obvious I missed (no "") and yet I still missed it. I'm using data statements in the rest of the code, what I think happened was that I had a typo originally in the data statement so when I broke out those codes above i totally missed " " and was pretty confused. Thank so much for you help.
-
Try doing this to it:
10 TMP$="0001010303030F06"80 CALL CHAR(33,TMP$)85 TMP$="C08080000000E46C"86 CALL CHAR(34,TMP$)87 TMP$="060C0C0C0D191B1B"88 CALL CHAR(35,TMP$)89 TMP$="383070D89C000000"90 CALL CHAR(36,TMP$)91 TMP$="AA01800180018055"93 CALL CHAR(37,TMP$)
*FACEPALM* - Thank you. I should probably "sleep on it" before asking in forums. I feel so silly now.
-
2
-
-
Not much but I like it.
Already better than the one I had as a kid because I made a video cable for it - no more rf.
-
4
-
-
I have a basic understanding of B.A.S.I.C. and even less so for Extended Basic. Just having fun with the first ever computer I've touched and played with back in '81. Writing a musick/sound program that I wish to share once completed and I'm almost there.
I'm having a very odd issue and I can't seem to figure it out at all.
I'm copying and pasting the following code in to classic99. I know its not efficient but I'm trouble shooting. I've had the character patterns included in the call char statements and I've used data, read. I keep getting the same weird behavior that results in an error.
10 tmp$=0001010303030F0680 CALL CHAR(33,tmp$)85 tmp$=C08080000000E46C86 CALL CHAR(34,tmp$)87 tmp$=060C0C0C0D191B1B88 CALL CHAR(35,tmp$)89 tmp$=383070D89C00000090 CALL CHAR(36,tmp$)91 tmp$=AA0180018001805593 CALL CHAR(37,tmp$)
While pasting I get
*NAME TOO LONGafter line 85 and again after line 91. I've even tried manually typing it in.
I don't know what is wrong.
In the attached
screen shot you'll see the errors and the lines don't get added.
I am going to try entering this by hand on the actual hardware to see what happens. But I can't load my entire program on it because it's only got 13k free and the program is already larger than that.
Just for the heck of it I'll post the entire program here. Once I get my GUI working I'll tweak some effects and be done.10 tmp$=0001010303030F0680 CALL CHAR(33,tmp$)85 tmp$=C08080000000E46C86 CALL CHAR(34,tmp$)87 tmp$=060C0C0C0D191B1B88 CALL CHAR(35,tmp$)89 tmp$=383070D89C00000090 CALL CHAR(36,tmp$)91 tmp$=AA0180018001805593 CALL CHAR(37,tmp$)100 CALL CLEAR110 CALL SCREEN(15)120 DATA 7,2,00C4A4948C848484,38,NoteKeys,8,2,00F98888888888F8,39,NoteKeys,9,2,00F9616161616161,40,NoteKeys130 DATA 10,2,00F00000E00000F0,41,NoteKeys,20,2,0022243838242221,42,NoteKeys140 DATA 21,2,003E20203C20203E,139,NoteKeys,22,2,0022221408080808,43,NoteKeys150 DATA 23,2,003C42403C02423C,44,NoteKeys,3,5,000404F403030000,45,volumetxt,4,5,00BDA5A5253D0000,46,volumetxt160 DATA 5,5,0009090909EF0000,47,volumetxt,6,5,006D6D5545450000,58,volumetxt,7,5,00E01FC01FE00000,59,volumetxt170 DATA 11,4,7878636263627A78,60,freq,12,4,0000DE129C121200,61,freq,13,4,00007B4272427B00,62,freq180 DATA 14,4,0000925252D2DE00,63,freq,15,4,0000F486E584F400,64,freq,16,4,0000BDA5A0A4BC00,72,freq190 DATA 17,4,0F0F2323C3C3CF0F,73,freq,12,7,00000020602E2070,74,noise,13,7,00000097D4B49497,75,noise200 DATA 14,7,000000B9919190B9,76,noise,15,7,000000EF08EE28EF,77,noise,16,7,0000000F09EF090F,78,noise210 DATA 21,4,78FCFC7C1C1C3870,79,duration,22,4,001C1212121C0000,80,duration,23,4,0097949795F40000,81,duration220 DATA 24,4,0019A43C24A40000,82,duration,25,4,00F7424242470000,83,duration,26,4,0079494949790000,84,duration230 DATA 27,4,0021A16121210100,140,duration,28,4,00F8F8F8F8F8F800,85,duration240 DATA 3,10,FFFF181818181818,86,Tremolo,4,10,8080007149715149,87,Tremolo,5,10,000000E80DCA08E8,88,Tremolo250 DATA 6,10,000000BDA5A5A5BD,89,Tremolo,7,10,0000001E121212DE,90,Tremolo,11,9,00007C040810207C,91,SLIDE260 DATA 12,9,7884807804848478,92,SLIDE,13,9,404040404040407E,93,SLIDE,14,9,3E0808080808083E,94,SLIDE270 DATA 15,9,3F1010101010103F,95,SLIDE,16,9,1F90909E9090901F,96,SLIDE280 DATA 17,9,0000183C5A991818,97,SLIDE,11,10,0000183C5A991818,97,SLIDE290 DATA 17,10,C324181824C30000,98,SLIDE,23,10,78FCCCFCF8C0C0C0,99,PTremolo,24,10,000000F282F311F1,100,PTremolo300 DATA 25,10,0000009E9090101E,101,PTremolo,26,10,0000009090F79090,102,PTremolo,27,10,0000003824A42438,103,PTremolo310 DATA 4,16,00456D5545454400,104,ZeroMute,5,16,001711111111E100,105,ZeroMute,6,16,00DE101C10101E00,106,ZeroMute320 DATA 5,17,1C2222222222221C,107,ZeroMute,13,14,0000000078FCC6C6,108,rtg,14,14,0000000000000072,109,rtg330 DATA 15,14,0000000000000059,110,rtg,16,14,00000000000000E8,111,rtg,17,14,0000000000000080,112,rtg340 DATA 13,15,FCD8CCC600EF4949,113,rtg,14,15,8BFA8A8A004B6A5B,114,rtg,15,15,55D5555900C00080,115,rtg350 DATA 16,15,2D2A28E800000000,116,rtg,17,15,8080808000000000,117,rtg,13,16,494F003B425B4A33,118,rtg360 DATA 14,16,4A4B00D21A9612D2,119,rtg,15,16,00C000F784E785F4,120,rtg,16,16,00000019A43C24A4,121,rtg370 DATA 17,16,000000DE9292929E,122,rtg,18,16,000000E090E0A090,123,rtg,9,21,00000F080F010F00,124,spacebar380 DATA 10,21,0000714A73424200,125,spacebar,11,21,00009E50D0505E00,126,spacebar,12,21,0000F784E784F700,127,spacebar390 DATA 13,21,000019A53DA52500,128,spacebar,14,21,0000C020C0402000,129,spacebar,15,21,00003C2121213D00,130,spacebar400 DATA 16,21,0000C92DEB292900,131,spacebar,17,21,00007B4243427B00,132,spacebar,18,21,0000D0109010DE00,133,spacebar410 DATA 19,21,0000F080F010F000,134,spacebar,24,16,324A4A4A5A390400,135,Quit,25,16,2F26262626CF0000,136,Quit420 DATA 26,16,7C10101010100000,137,Quit,25,17,7884848484947804,138,Quit430 FOR DRW=1 TO 87440 READ COL,ROW,PAT$,CHR,GRP$450 CALL CHAR(CHR,PAT$)460 CALL VCHAR(ROW,COL,CHR)470 NEXT DRW530 rem CALL KEY(0,KY,STT)540 rem IF STT=0 THEN 530550 rem END560 REM *******************************************************************************************************580 rem CALL COLOR(3,4,2)590 rem CALL COLOR(4,4,2)820 rem DISPLAY AT(23,1):"Musick v0.14 SYMM LLC 2016"830 READ VOL,DUR,C,D,E,F,G,A,B,KEY,NOTE,MUTE !load default settings on all variables840 DATA 15,200,262,294,330,349,392,440,494,262,262,0850 REM PRINT"V";VOL;"D";DUR;"C";C;"D";D;"E";E;"F";F;"G";G;"A";A;"B";B;"K";KEY;"N";NOTE860 CALL KEY(0,KEY,STATUS)!Check for keyboard input870 IF STATUS=-1 THEN 1050 !SAME KEY PRESSED880 IF STATUS=0 THEN 1380 !NO KEY PRESSED890 REM IF DIFFERENT KEY PRESSED (STATUS=1)900 IF KEY<>49 THEN 910 :: NOTE=-1 :: GOTO 1380 !one (1) for NOISE = -1910 IF KEY<>50 THEN 920 :: NOTE=-2 :: GOTO 1380 !two (2) for NOISE = -2920 IF KEY<>51 THEN 930 :: NOTE=-3 :: GOTO 1380 !three (3) for NOISE = -3930 IF KEY<>52 THEN 940 :: NOTE=-4 :: GOTO 1380 !four (4) for NOISE = -4940 IF KEY<>53 THEN 950 :: NOTE=-5 :: GOTO 1380 !five (5) for NOISE = -5950 IF KEY<>54 THEN 960 :: NOTE=-6 :: GOTO 1380 !six (6) for NOISE = -6960 IF KEY<>55 THEN 970 :: NOTE=-7 :: GOTO 1380 !seven (7) for NOISE = -7970 IF KEY<>56 THEN 980 :: NOTE=-8 :: GOTO 1380 !eight (
for NOISE = 8980 IF KEY<>67 THEN 990 :: NOTE=C :: GOTO 1380 !Note C © for Frequency = 262990 IF KEY<>68 THEN 1000 :: NOTE=D :: GOTO 1380 !Note D (d) for Frequency = 2941000 IF KEY<>69 THEN 1010 :: NOTE=E :: GOTO 1380 !Note E (e) for Frequency = 3301010 IF KEY<>70 THEN 1020 :: NOTE=F :: GOTO 1380 !Note F (f) for Frequency = 3491020 IF KEY<>71 THEN 1030 :: NOTE=G :: GOTO 1380 !Note G (g) for Frequency = 3921030 IF KEY<>65 THEN 1040 :: NOTE=A :: GOTO 1380 !Note A (a) for Frequency = 4401040 IF KEY<>66 THEN 1050 :: NOTE=B :: GOTO 1380 !Note B (b) for Frequency = 4941050 IF KEY<>91 THEN 1060 :: NOTE=NOTE-1 :: GOTO 1280 !Open Bracket ([) for NOTE -1 hz Down1060 IF KEY<>93 THEN 1100 !close Bracket (]) for NOTE +1 hz Up1070 IF NOTE<=110 THEN 1080 ELSE 1090 !***CHECK TO ENSURE NOISE DOES NOT GET NOTE ADJUSTMENT***1080 NOTE=1101090 NOTE=NOTE+1 :: GOTO 12601100 IF KEY<>46 THEN 1110 :: DUR=DUR+1 :: GOTO 1310 !PERIOD (.) FOR DUR Up1110 IF KEY<>44 THEN 1120 :: DUR=DUR-1 :: GOTO 1280 !COMMA (,) FOR DUR Down1120 IF KEY<>61 THEN 1130 :: VOL=VOL-1 :: GOTO 1350 !MINUS (-) FOR VOL DOWN1130 IF KEY<>45 THEN 1140 :: VOL=VOL+1 :: GOTO 1330 !EQUALS (=) FOR VOL UP1140 IF KEY=90 THEN 1400 !Z KEY (z) FOR SLIDE Down1150 IF KEY=88 THEN 1460 !X KEY (x) FOR SLIDEUp1160 IF KEY=84 THEN 1530 !T KEY (t) FOR TREMOLO1170 IF KEY=80 THEN 1770 !P KEY (p) FOR PSYCHODELICK TREMOLO1180 IF KEY=82 THEN 2040 !R KEY (p) FOR RANDOM NOTE GENERATOR1190 IF KEY=81 THEN 2140 !Q KEY (q) TO QUIT THE PROGRAM1200 IF KEY=48 THEN 2100 !ZERO KEY (0) TO MUTE/UNMUTE AUDIO1210 IF KEY<=159 THEN 1220 ELSE 860 !**********ERROR CHECKING ON KEY PRESSED***********1220 CALL SOUND(DUR,NOTE,VOL):: DISPLAY AT(6,2):VOL :: DISPLAY AT(5,9):NOTE :: DISPLAY AT(5,20):DUR :: GOTO 8601230 REM ********cALL***sOUND***rOUTINE***cHECKS********1240 IF NOTE<=110 THEN 1250 ELSE 1260 !*check NOTE range lower limit and correct if out of range*1250 NOTE=110 :: GOTO 13701260 IF NOTE>=40000 THEN 1270 ELSE 1370 !*check NOTE range higherlimit and correct if out of range*1270 NOTE=40000 :: GOTO 13701280 IF DUR<=1 THEN 1290 ELSE 1310 !*check DURation range lower limit and correct if out of range*1290 DUR=1 :: GOTO 13701300 REM1310 IF DUR>=4250 THEN 1320 ELSE 1330 !*check DURation range upper limit and correct if out of range*1320 DUR=42501330 IF VOL>=30 THEN 1340 ELSE 1350 !*check VOLume range upper limit and correct if out of range*1340 VOL=30 :: GOTO 13701350 IF VOL<=0 THEN 1360 ELSE 1380 !*check VOLume range lower limit and correct if out of range*1360 VOL=01370 REM ***CALL SOUND***ROUTINE***1380 CALL SOUND(DUR,NOTE,VOL):: DISPLAY AT(6,2):VOL :: DISPLAY AT(5,9):NOTE :: DISPLAY AT(5,20):DUR :: GOTO 8601390 REM *********sLIDE dOWN rOUTINE*********************1400 IF NOTE<=210 THEN 1410 ELSE 1420 !check if slide down has valid end range and correct if not.1410 NOTE=2101420 FOR SD=1 TO 100 :: NOTE=NOTE-1 :: CALL SOUND(1,NOTE,VOL):: DISPLAY AT(6,2):VOL1430 DISPLAY AT(5,9):NOTE :: DISPLAY AT(5,20):DUR :: CALL KEY(0,KEY,STATUS):: IF STATUS<>0 THEN 8601440 NEXT SD :: GOTO 8601450 REM ***********sLIDE uP rOUTINE*****************1460 IF NOTE>=39900 THEN 1470 ELSE 1480 !check if slide up has valid end range and correct if not.1470 NOTE=399001480 FOR SU=1 TO 100 :: NOTE=NOTE+11490 CALL SOUND(1,NOTE,VOL):: DISPLAY AT(6,2):VOL :: DISPLAY AT(5,9):NOTE :: DISPLAY AT(5,20):DUR1500 CALL KEY(0,KEY,STATUS):: IF STATUS<>0 THEN 8601510 NEXT SU :: GOTO 8601520 REM ***************tREMOLO rOUTINE*****************1530 IF NOTE<=220 THEN 1540 ELSE 15501540 NOTE=221 :: GOTO 15701550 IF NOTE>=40000 THEN 1560 ELSE 15701560 NOTE=398991570 FOR WD=1 TO 10 :: CALL KEY(0,KEY,STATUS):: IF STATUS<>0 THEN 1580 ELSE 15901580 GOSUB 16601590 NOTE=NOTE-10 :: CALL SOUND(1,NOTE,VOL):: DISPLAY AT(6,2):VOL :: DISPLAY AT(5,9):NOTE1600 DISPLAY AT(5,20):DUR :: NEXT WD1610 FOR WU=1 TO 10 :: CALL KEY(0,KEY,STATUS):: IF STATUS<>0 THEN 1640 ELSE 16201620 NOTE=NOTE+10 :: CALL SOUND(1,NOTE,VOL):: DISPLAY AT(6,2):VOL :: DISPLAY AT(5,9):NOTE1630 DISPLAY AT(5,20):DUR :: NEXT WU :: GOTO 17601640 GOSUB 16601650 REM ********tREMOLO sLIDE rOUTINE***********1660 IF KEY<>91 THEN 1670 :: NOTE=NOTE-10 :: GOTO 1690 !Open Bracket ([) for NOTE -1 hz Down1670 IF KEY<>93 THEN 1680 :: NOTE=NOTE+10 :: GOTO 1710 !close Bracket (]) for NOTE +1 hz Up1680 IF STATUS<>0 THEN 860 :: GOTO 15701690 IF NOTE<=220 THEN 1700 ELSE 1710 !t-sLIDE D check NOTE range lower limit and correct if out of range1700 NOTE=221 :: GOTO 17501710 IF NOTE>=40000 THEN 1720 ELSE 1750 !t-sLIDE U check NOTE range higherlimit and correct if out of range1720 NOTE=398991730 REM ***TREMOLO***CALL***SOUND***ROUTINE***1740 CALL SOUND(1,NOTE,VOL):: DISPLAY AT(6,2):VOL :: DISPLAY AT(5,9):NOTE :: DISPLAY AT(5,20):DUR :: RETURN1750 REM ***TREMOLO***CALL***SOUND***ROUTINE***1760 CALL SOUND(1,NOTE,VOL):: DISPLAY AT(6,2):VOL :: DISPLAY AT(5,9):NOTE :: DISPLAY AT(5,20):DUR :: GOTO 15301770 REM ***************pSYCHODELIC tREMOLO**************1780 SNOTE=13013 :: TNOTE=310311790 IF SNOTE>=40000 THEN 1800 ELSE 18101800 SNOTE=40000 :: TNOTE=300001810 IF NOTE<=220 THEN 1820 ELSE 18301820 NOTE=221 :: GOTO 18501830 IF NOTE>=40000 THEN 1840 ELSE 18501840 NOTE=398991850 FOR WD=1 TO 10 :: CALL KEY(0,KEY,STATUS):: IF STATUS<>0 THEN 1860 ELSE 18701860 GOSUB 19501870 NOTE=NOTE-10 :: SNOTE=SNOTE-110 :: TNOTE=TNOTE-1001880 CALL SOUND(1,NOTE,VOL,SNOTE,VOL,TNOTE,VOL):: DISPLAY AT(6,2):VOL :: DISPLAY AT(5,9):NOTE :: DISPLAY AT(5,20):DUR :: NEXT WD1890 FOR WU=1 TO 10 :: CALL KEY(0,KEY,STATUS):: IF STATUS<>0 THEN 1900 ELSE 19101900 GOSUB 19501910 NOTE=NOTE+10 :: SNOTE=SNOTE+110 :: TNOTE=TNOTE+1001920 CALL SOUND(1,NOTE,VOL,SNOTE,VOL,TNOTE,VOL):: DISPLAY AT(6,2):VOL :: DISPLAY AT(5,9):NOTE :: DISPLAY AT(5,20):DUR :: NEXT WU1930 GOTO 20301940 REM ********pSYCh***tREMOLO sLIDE rOUTINE***********1950 IF KEY<>91 THEN 1960 :: NOTE=NOTE-10 :: SNOTE=SNOTE-110 :: TNOTE=TNOTE-100 :: GOTO 1980 !open Bracket ([) for NOTE -1 hz Down1960 IF KEY<>93 THEN 1970 :: NOTE=NOTE+10 :: SNOTE=SNOTE+110 :: TNOTE=TNOTE+100 :: GOTO 2000 !close Bracket (]) for NOTE +1 hz Up1970 IF STATUS<>0 THEN 860 :: GOTO 18501980 IF NOTE<=220 THEN 1990 ELSE 2000 !pSYCh t-sLIDE Dcheck NOTE range lower limit and correct if out of range1990 NOTE=221 :: SNOTE=13013 :: TNOTE=31031 :: GOTO 20302000 IF NOTE>=40000 THEN 2010 ELSE 2020 !pSYCh t-sLIDE Ucheck NOTE range higherlimit and correct if out of range2010 NOTE=39899 :: SNOTE=13013 :: TNOTE=310312020 CALL SOUND(1,NOTE,VOL,SNOTE,VOL,TNOTE,VOL):: DISPLAY AT(6,2):VOL :: DISPLAY AT(5,9):NOTE :: DISPLAY AT(5,20):DUR :: RETURN2030 CALL SOUND(1,NOTE,VOL,SNOTE,VOL,TNOTE,VOL):: DISPLAY AT(6,2):VOL :: DISPLAY AT(5,9):NOTE :: DISPLAY AT(5,20):DUR :: GOTO 17802040 REM *************rANDOME nOTE gENERATOR******************2050 RANDOMIZE2060 RS1=INT(38000*RND)+111 :: RS2=INT(38000*RND)+111 :: RS3=INT(38000*RND)+111 :: RV1=INT(15*RND):: RV2=INT(15*RND):: RV3=INT(15*RND)2070 CALL SOUND(DUR,RS1,RV1,RS2,RV2,RS3,RV3):: DISPLAY AT(6,2):RV1 :: DISPLAY AT(5,9):RS1 :: DISPLAY AT(5,20):DUR2080 CALL KEY(0,KEY,STATUS):: IF STATUS<>0 THEN 860 :: GOTO 20602090 REM ********************mute/unmute function*********2100 IF MUTE<>0 THEN 2130 :: MUTE=12110 FOR DELAY=1 TO 10 :: NEXT DELAY :: CALL KEY(0,KEY,STATUS):: IF KEY<>48 THEN 2120 :: GOTO 21002120 IF STATUS<>0 THEN 860 ELSE 21102130 MUTE=0 :: GOTO 21102140 CALL CLEAR2150 END

help with extended basic error.
in TI-99/4A Computers
Posted
Here's a link to the forum post containg the finished program. Thanks all for helping me get over this minor issue (me).
In a few weeks I want to start another audio program dealing with the speech synth on unmodded hardware. I'll start a new topic for that one.
http://atariage.com/forums/topic/255396-new-musick-program/