Classic Computer Magazine Archive COMPUTE! ISSUE 58 / MARCH 1985 / PAGE 93

PROGRAMMING THE TI

C.Regena

Drum Practice
My five children and I recently started to learn how to play the drums (yes, it gets noisy, but it's rhythmic noise). Probably the most important phase of learning to play the drums is learning rhythms-and very often other members of a band depend heavily on the drum. When we first began lessons, the younger children, who had no previous music training, started with quarter notes in 4/4 time. They soon learned to count and knew when the notes indicated a beat and when there was a rest. However, I noticed the counting was not always even.
    The CALL SOUND command in TI BASIC specifies a duration, or how long a sound plays. Therefore, we could use the computer to play a drum rhythm and keep the timing exact (to the millisecond, in fact).
    The program this month shows a drum rhythm or pattern consisting of four measures on the screen. The computer then plays the rhythm while showing the counting. The student can play the drum (or practice pad) with the computer. If you don't have a drum, you can clap along with the computer-or play another instrument with the computer beating the rhythm. Ten different patterns are shown.

How The Program Works
Line 180 sets a duration for a quarter note or quarter rest to be 300 milliseconds. You can change the tempo by changing this line. You may prefer to add some lines to let the student input a tempo or to choose among several tempos. For my youngest child, however, it was best to have no INPUTs or choices to make.
    Lines 190-220 define graphics shapes using characters numbered from 97 to 117. The character definitions are in the DATA statements in lines 230-340. When you are typing these DATA statements, be sure not to add any extra commas. Each DATA statement except the one in line 340 has four definitions. These characters will draw the staff lines, the bass clef, the time signature, bar lines, and the notes and rests.
    The program uses ten different patterns, and lines 360-380 READ the patterns from the DATA in lines 1020-1120. Feel free to change these or add your own rhythm patterns. Each DATA statement contains one pattern for the four measures. T represents a quarter note, and R represents a rest. On the screen the patterns end with a repeat bar, so the computer actually plays the pattern twice.
    After the program prints the title screen and instructions, it prompts the student to press any key to start. The ten patterns are shown in random order without repetitions. Lines 500-620 draw the basic bass staff. Lines 630-810 draw the rhythm from the pattern chosen, R$. The program examines the string R$ one character at a time in order. If the character is a T, the program draws a quarter note. If the character is an R, the program draws a rest. After four rotes or rests, the program draws a bar line to separate measures. At the end of the four measures, it draws a repeat bar.
    Line 830 plays a prompting tone, then lines 840-1000 play the rhythm (twice). Again the string R$ is examined one character at a time. If the SEGment is T, a tone plays. I chose the frequency of the noise - 7. You may want to choose a different noise or frequency instead. If so, change line 900.
    If the SEGment is R, the program uses a frequency of 9999 with a sound level of 30 to create a rest. When the note or rest starts, line 930 prints the count. Line 940 ends the sound.
    The variable J is used to print the counting and is incremented with each note or rest. Line 960 determines if J needs to be reset to count 1-2-3-4 for each measure.

Changing The Program
As listed, the program uses ten different patterns for the rhythms. If you want to change any of the patterns, simply alter the DATA statements of lines 1030-1120. Remember that T stands for a quarter note and R stands for a rest. Make sure you have 16 characters in the string. If you want more than ten patterns, you will need to DIMension P$ at the beginning of the program, then change line 360 to READ the right number of patterns, and add more DATA statements at line 1120. To play all the patterns, you will also need to change the number 10 in lines 430 and 470.
    Characters 109, 110, and 111 are the graphics characters that draw the 4/4 time signature. If you wish to change the signature, for example to 2/4, you can alter those characters or define your own graphics beyond character 117. Lines 600-620 draw the time signature.
    If you change the time signature, you will also need to adjust the DATA for the rhythms, the positions where the bar lines are drawn, and the counting.
    Another enhancement to this program would be to start adding eighth notes to the rhythms-then sixteenth notes. You would have to define some more graphics characters for the different kinds of notes, then perhaps add E and S to the DATA strings that define the patterns. You would also have to adjust the section to draw notes (lines 630-780) and the section to play the notes (lines 830-1000).
    Another idea is to use this program as a start, but instead of just playing a rhythm, have the computer choose random notes for the four measures and thus a tune. Then a student could practice reading music by playing the tune along with the computer. Each note would be drawn depending on the tone chosen-so you would need to define characters to draw the notes in all possible positions. You could use an ON-GOSUB to draw the proper note where the subroutines contain the appropriate CALL HCHAR statements. These projects should keep you busy until next month.
    If you prefer not to spend the time typing this program, you can get a copy by sending a blank cassette or disk, a stamped, self-addressed mailer, and $3 to:

C. Regena
P.O. Box 1502
Cedar City, UT 84720
Please be sure to specify the title and that you need the TI version.

A Few Answers
I appreciate your comments and ideas for columns and programs. I'll try to answer just a few questions here this month.
    First, many of you have written about the future availability of TI software. Texas Instruments announced it was dropping its home computer in October 1983. If you have sent in the registration form that came with your computer, you are on a mailing list and should receive advertisements from time to time from various companies who sell TI peripherals and software. TRITON was designated as the company to sell TI products for Texas Instruments.
    There are several third-party companies that are still producing peripherals and software for the TI. At this writing, there is still an abundance of software available and new titles coming out all the time. Many user groups are still going strong and are a good source of continuing support. Most of the groups publish newsletters. Personally, I will probably continue to write programs for the TI forever because I like the computer.
    COMPUTE! Books has published numerous books specifically for the TI-99/4A. If you don't see them in your computer store or bookstore, remember you can order directly from COMPUTE!. Several readers have written about using Forth on the TI. Texas Instruments made Forth available through the user groups. In other words, the program is considered public domain. It is available on disk. There is also a manual that was distributed to user groups. Several clubs have formed Forth special interest groups and are publishing software written in Forth and articles about Forth. I am not going to cover Forth in this column because Forth requires the disk drive system, memory expansion, and the Editor/Assembler cartridge. Most TI owners have only the basic console and a cassette recorder. I prefer to print programs that are written in Console BASIC (and maybe a few in Extended BASIC) so that any TI owner can use them.

Translating Other Programs
Some readers have asked about translating programs for other computers to work on the TI. When I first got my computer I also wondered how to translate programs, because back in 1980 very little was ever published for the TI. Now, however, there is a lot available-so you really do not need to translate. Some bookstores have a whole shelf full of TI books. I subscribe to several magazines that publish TI versions of their programs.
    If you absolutely need to translate a certain program, though, here are a few hints. The main thing is that TI BASIC allows only one command per line-so where other computers use a colon or backslash to separate commands, you need to use another line number and a separate line. An exception is the PRINT statement. By the way, Extended BASIC allows much easier translation because of its enhanced capabilities.
    Most of the commands are the same in all BASICs and work the same way-such as PRINT, INPUT, FOR-NEXT, IF-THEN, GOTO, GOSUB, ON-GOTO, ON-GOSUB, READ, DATA, and END. Therefore, you can usually figure out the basic logic of a program. You may need to make slight changes. For example, the TI INPUT statement uses a colon while many others use a semicolon. Also, our IF-THEN in Console BASIC includes an ELSE, and you must specify line numbers rather than additional commands. Simply go to a line number, then at the line number use the command.
    The biggest problems result from machinespecific coding, largely graphics and sound. Any TI statements that start with CALL are not found on other computers. For example, CALL CLEAR is equivalent to CLS in some other BASICs. All those POKEs can be confusing, too. On other machines, POKEs are often used as substitutes for missing graphics and sound commands.
    Your best bet is not to attempt to translate a program line by line, but rather design your own graphics and sounds. To translate the POKE commands on another computer, you'd really need its manual and a very good memory map to find out what the various locations do. For example, the Commodore 64 and VIC-2.0 require several POKE commands to make sounds, where TI BASIC lets you use CALL SOUND. For character graphics, a program for a Commodore computer may POKE a screen location with a symbol number, then POKE a color location with a color number. Our equivalent would be CALL COLOR and CALL HCHAR or CALL VCHAR. Some DATA statements in a Commodore program may be defining a character, but we would use CALL CHAR.
    My recommendation is that instead of trying to translate graphics directly, you should study Chapter 5 of the Beginning BASIC book that came with your TI-99/4A and learn the TI graphics. The in-house programmers at COMPUTE! rarely translate a program line by line. The translations you've seen are usually programs written completely from scratch to take advantage of each computer's strong points. Only the basic concept is carried over from the original program. Often the new version even gains something during the translation.
    Until next month-enjoy your TI.

Rhythm Player

Please refer to "COMPUTE!'s Guide To Typing In Programs" before entering this listing.

100 REM DRUM PRACTICE
110 CALL CLEAR
120 PRINT TAB(8);"DRUM PRACTICE"
130 PRINT :::"A RHYTHM PATTERN WILL
     BE"
140 PRINT :"SHOWN ON THE SCREEN."
150 PRINT :"PLAY YOUR DRUM ALONG WI
    TH"
160 PRINT :"THE COMPUTER."
170 PRINT ::"THERE ARE TEN RHYTHMS.
    ":::::
180 D=300
190 FOR C=97 TO 117
200 READ C$
210 CALL CHAR(C,C$)
220 NEXT C
230 REM DATA FOR CHARACTERS
240 DATA 000000000000FF,00000000020
    2FF02,0000FF000000FF,0202FF023A
    7E7C38
250 REM
260 DATA 10080C1830300804,1C2020100
    800FF,000000000000FF0F,00000000
    0000FFE
270 REM
280 DATA 1038FF38000OFF,311OFF08090
    8FF1,0000FF000100FF,1020FF80000
    0FF
290 REM
300 DATA 000000000000FF10,2424447E0
    404001,102424447E04FF.000000000
    000FC2C
310 REM
320 DATA 2C2CFC2CAC2CFC2C,AC2CFC2C2
    C2CFC,000000000000FF08,0808FF08
    0808FF08
330 REM
340 DATA 0808FF080808FF
350 REM
360 FOR I=0 TO 9
370 READ P$(I)
380 NEXT I
390 PRINT "PRESS ANY KEY TO START."
400 CALL KEY(0,K,S)
410 IF S<1 THEN 400
420 REM TRY TEN PATTERNS
430 FOR C=1 TO 10
440 CALL CLEAR
450 REM CHOOSE PATTERN
460 RANDOMIZE
470 R=INT(10*RND)
480 IF P$(R)="" THEN 470
490 R$=P$(R)
500 REM DRAW STAFF
510 CALL HCHAR(10,3,97,26)
520 CALL HCHAR(11,3,99,26)
530 CALL HCHAR(12,3,99,26)
540 CALL HCHAR(10,4,103)
550 CALL HCHAR(10,5,104)
560 CALL HCHAR(11,4,105)
570 CALL HCHAR(11,5,106)
580 CALL HCHAR(12,4,107)
590 CALL HCHAR(12,5,108)
600 CALL HCHAR(10,7,109)
610 CALL HCHAR(11,7,110)
620 CALL HCHAR(12,7,111)
630 REM DRAW NOTES
640 X=8
658 FOR 1=1 TO 16
660 IF SEG$(R$,I,1)="R" THEN 700
670 CALL HCHAR(10,X+1,98)
680 CALL HCHAR(11,X+1,100)
690 GOTO 730
700 CALL HCHAR(11,X+1,101)
710 CALL HCHAR(12,X+1,102)
720 IF I=16 THEN 780
730 IF I/4<>INT(I/4)THEN 780
740 X=X+1
750 CALL HCHAR(10,X+1,115)
760 CALL HCHAR(11,X+I,116)
770 CALL HCHAR(12,X+2,117)
780 NEXT I
790 CALL HCHAR(10,29,112)
800 CALL HCHAR(11,29,113)
810 CALL HCHAR(12,29,114)
820 REM PLAY RHYTHM
830 CALL SOUND(100,1497,2)
840 FOR K=1 TO 2
850 CALL HCHAR(13,8,32,20)
860 X=8
870 J=1
880 FOR I=1 TO 16
890 IF SEG$(R$,I,1)="R" THEN 920
900 CALL SOUND(D,-7,2)
910 GOTO 930
920 CALL SOUND(D,9999,30)
930 CALL HCHAR(13,X+I,J+48)
940 CALL SOUND(1,9999,30)
950 J=J+1
960 IF I/4<>INT(1/4)THEN 990
970 J=1
980 X=X+1
990 NEXT I
1000 NEXT Y,
1010 NEXT C
1020 REM DATA FOR RHYTHMS
1030 DATA TTTTTTTTTTTTTTTR
1040 DATA RTTTRTTTRTTTTTTR
1050 DATA RTRTRTRTRTRTTTTR
1060 DATA TRTRTRTRTRTRTTTR
1070 DATA TTRTTTRTTTRTTTTR
1080 DATA TRTTTRTTTRTTTTTR
1090 DATA TTTTRTTTTTTTRTTR
1100 DATA RTTTRTRTRTTTRTTR
1110 DATA TRTRRTTTRTRTRTTR
1120 DATA TTRTRTRTTTRTRTTR
1130 CALL CLEAR
1140 PRINT "CHANGE LINE 180 FOR TEM
     PO. ...
1150 END