This program is a medley player that performs four Latin songs — “Granada,” “Perfidia,” “Brazil,” and “Solamente Una Vez” — using the TS2068’s AY-3-8910 sound chip. After loading a title screen image via LOAD SCREEN$, a main menu at line 155 lets the user choose any of the four pieces by number, with each song beginning at a multiple-of-200 line address. The AY chip is driven entirely through SOUND statements, with subroutines at lines 1000–1999 setting up chord registers for keys including C major, D major, E major, F major, G major, D minor, A minor, G minor, and B-flat major. Melody notes are played with BEEP commands, while the chord subroutines configure the AY chip’s three tone channels (registers 0–5) and envelope/noise registers (7–13) to provide harmonic accompaniment. A RESTORE statement before each DATA block ensures correct sequential reading of note duration and pitch pairs across the non-linear flow of the program.
Program Analysis
Program Structure
The program is organized into a set of clearly separated sections:
- Lines 1–150: Startup sequence — loads a title SCREEN$, then plays a full introductory medley passage using BEEP and SOUND, concluding with a pause before the menu.
- Lines 155–170: Main menu. Displays song choices and accepts a number 1–4, then dispatches with
GO TO C*200, routing to line 200, 400, 600, or 800. - Lines 200–385: “Granada” by Agustín Lara.
- Lines 400–500: “Perfidia” by Alberto Dominguez.
- Lines 600–705: “Brazil” (Samba) by Ary Barroso.
- Lines 800–870: “Solamente Una Vez” by Agustín Lara.
- Lines 1000–1999: Subroutine library for AY chip initialization and chord settings.
- Lines 9997–9998: STOP and SAVE utilities.
Each song ends with GO TO MENU, where MENU was set to 155 at line 2, returning the user to the selection screen.
Sound Architecture: Dual-Layer Music
The program achieves two-voice music by alternating between the AY chip’s tone channels for harmony and the BEEP command for melody. BEEP uses the same speaker output as the AY chip’s mixed output, so they effectively layer. The AY chip is configured via SOUND statements in the subroutine library, setting register pairs for tone period (low/high byte) across three channels.
The chord subroutines at lines 1000–1105 correspond to specific musical keys:
| Line | Subroutine | Comment |
|---|---|---|
| 1000 | AY init / ON | Sets mixer, envelope, and volume registers |
| 1015 | C major | Upper register C |
| 1017 | Lower C major | Lower octave C |
| 1020 | D major | |
| 1025 | E major | |
| 1030 | F major | |
| 1035 | G major | |
| 1050 | D minor | |
| 1055 | A minor | |
| 1057 | Low A minor | Defined but apparently unreferenced |
| 1065 | G minor | |
| 1105 | B-flat major | |
| 1999 | AY OFF | Sets register 7 to 63 (silences all channels) |
The SOUND keyword (rendered as } in the TS2068 character set) takes semicolon-separated register/value pairs. Registers 0–5 set the three-channel tone periods, register 7 controls the mixer enable bits, and registers 8–13 control volume and envelope.
Melody Representation via DATA
Melody lines are encoded as pairs of duration (D) and pitch (F) values in DATA statements, read in loops of the form FOR B=1 TO N: READ D,F: BEEP D,F: NEXT B. Because the program’s flow is highly non-linear and revisits some passages (e.g., the intro medley in lines 5–145 reads many DATA blocks in sequence), each song section uses explicit RESTORE NNN statements before reading DATA to ensure the correct starting point.
Pitch values are BEEP semitone offsets from middle C. Negative pitch values (e.g., -1 in line 810) produce a rest-like very low tone, used as a musical rest substitute since BEEP has no silence value.
Navigation and Menu Dispatch
The computed GO TO C*200 at line 170 is an elegant dispatch technique: input value 1 maps to line 200, value 2 to line 400, value 3 to line 600, and value 4 to line 800. The variable MENU holds the literal value 155 and is used at the end of each song section as GO TO MENU, avoiding the need to hard-code the return address multiple times and making any future relocation of the menu straightforward.
Notable Techniques
- RESTORE before DATA reads: Since DATA statements are scattered throughout the listing and the pointer advances globally, every song section uses
RESTOREtargeted to its own DATA line to guarantee correct playback regardless of what was read before. - PAUSE 30/45/90/180 for rests: Musical pauses between phrases are implemented with
PAUSEat varying lengths (in 50ths of a second), giving the programmer fine control over phrasing gaps. - Double colon typo at line 430: The sequence
SOUND 8,15;9,10;10,10::contains a redundant colon, which is harmless in BASIC but suggests a copy-paste artifact from adjacent lines. - Subroutine 1057 (Low A minor) is defined but never called in the visible program, suggesting it was written in anticipation of use or left over from an earlier arrangement.
- BEEP .063 approximation: In the “Granada” section, note durations of
.063are used to approximate 1/16th note values (true 1/16 of a quarter note at the given tempo), showing care for rhythmic accuracy within floating-point constraints. - SOUND 8,15;9,10;10,10 inline: In the “Perfidia” section, chord changes are sometimes inserted inline between BEEP calls rather than via a GO SUB, slightly varying the harmonic texture mid-phrase.
Data Flow in the Intro Medley
Lines 5–145 play an extended medley introduction before presenting the menu. This section relies entirely on sequential DATA pointer advancement without any RESTORE, reading DATA blocks at lines 10, 20, 30, 40, 55, 65, 75, 85, 100, 110, 120, 130, and 140 in order. This is fragile if the program is re-entered mid-flow, but since the program always starts at line 1 and runs straight through, it functions correctly on a clean run.
Content
Source Code
1 BORDER 1: PAPER 5: BRIGHT 1: CLS : PRINT "LOADING;PROP UP KEYBOARD FOR SOUND!": PAUSE 0: LOAD "20090A"SCREEN$
2 LET MENU=155
5 GO SUB 1000: BEEP .4,7: GO SUB 1015: FOR B=1 TO 10: READ D,F: BEEP D,F: NEXT B
10 DATA 1.8,7,.2,4,.2,5,.4,7,.4,9,.2,11,.4,12,.2,9,.4,11,.4,7
15 GO SUB 1035: BEEP 2.2,5: GO SUB 1999: PAUSE 30: GO SUB 1000: GO SUB 1035: FOR B=1 TO 11: READ D,F: BEEP D,F: NEXT B
20 DATA .4,7,1.8,14,.2,16,.2,12,.4,14,.4,11,.2,12,.4,11,.2,9,.4,7,.4,5
25 GO SUB 1015: BEEP 1.8,4: GO SUB 1999: PAUSE 30: GO SUB 1000: GO SUB 1015: FOR B=1 TO 11: READ D,F: BEEP D,F: NEXT B
30 DATA .8,7,.2,12,.4,12,.2,12,.4,12,.4,11,.2,14,.4,14,.2,12,.4,11,.4,9
35 GO SUB 1035: FOR B=1 TO 12: READ D,F: BEEP D,F: NEXT B
40 DATA .4,9,2.6,7,.2,11,.4,11,.2,11,.4,11,.4,9,.2,9,.4,7,.2,7,.4,7,.4,9
45 GO SUB 1015: BEEP .2,7: BEEP .2,5: BEEP 2.8,4
50 BEEP .4,7: GO SUB 1015: FOR B=1 TO 10: READ D,F: BEEP D,F: NEXT B
55 DATA 1.8,7,.2,4,.2,5,.4,7,.4,9,.2,11,.4,12,.2,9,.4,11,.4,7
60 GO SUB 1035: BEEP 2.2,5: GO SUB 1999: PAUSE 30: GO SUB 1000: GO SUB 1035: FOR B=1 TO 11: READ D,F: BEEP D,F: NEXT B
65 DATA .4,7,2,14,.2,16,.2,12,.4,14,.4,11,.2,12,.4,11,.2,9,.4,7,.4,5
70 GO SUB 1015: BEEP 1.8,4: GO SUB 1999: PAUSE 30: GO SUB 1000: GO SUB 1015: FOR B=1 TO 11: READ D,F: BEEP D,F: NEXT B
75 DATA .8,7,.2,12,.4,12,.2,12,.4,12,.4,11,.2,14,.4,14,.2,12,.4,11,.4,9
80 GO SUB 1035: FOR B=1 TO 12: READ D,F: BEEP D,F: NEXT B
85 DATA .4,9,3,7,.2,11,.4,11,.2,11,.4,11,.4,9,.2,9,.4,7,.2,7,.4,7,.4,9
90 GO SUB 1015: BEEP .2,7: BEEP .2,5: BEEP 1.4,4
95 GO SUB 1999: FOR B=1 TO 5: READ D,F: BEEP D,F: NEXT B
100 DATA .2,7,.2,7,.2,7,.4,9,.2,6
105 GO SUB 1000: GO SUB 1015: BEEP 1.4,7: GO SUB 1999: PAUSE 30: GO SUB 1000: GO SUB 1015: FOR B=1 TO 5: READ D,F: BEEP D,F: NEXT B
110 DATA .2,7,.2,7,.2,7,.4,7,.2,9
115 GO SUB 1035: FOR B=1 TO 17: READ D,F: BEEP D,F: NEXT B
120 DATA .8,11,1.2,14,.2,16,.2,12,.2,14,.4,11,.2,12,.2,9,.4,11,.2,12,.4,16,.4,14,.2,2,.4,4,.2,5,.4,9,.4,7
125 GO SUB 1015: BEEP 1.4,4: GO SUB 1999: PAUSE 30: BEEP .2,7: BEEP .2,7: BEEP 2,7: BEEP .4,9: BEEP .2,6: GO SUB 1000: GO SUB 1015: BEEP 1.4,7: GO SUB 1999: PAUSE 30: GO SUB 1000: GO SUB 1015: FOR B=1 TO 5: READ D,F: BEEP D,F: NEXT B
130 DATA .2,7,.2,7,.2,7,.4,7,.2,9
135 GO SUB 1035: FOR B=1 TO 17: READ D,F: BEEP D,F: NEXT B
140 DATA .8,11,1,14,.2,17,.2,16,.2,14,.4,16,.2,12,.2,14,.4,11,.2,12,.4,16,.4,14,.2,2,.4,4,.2,5,.4,9,.4,7
145 GO SUB 1015: BEEP 2.6,12
150 GO SUB 1999: PAUSE 180: CLS
155 INK 1: PRINT AT 3,10;"Y LAS OTRAS";'''"1. ""GRANADA""";''"2. ""PERFIDIA""";''"3. ""BRAZIL""";''"4. ""SOLAMENTE UNA VEZ"" (""YOU BELONG TO MY HEART"")"
160 INPUT "YOUR CHOICE BY NUMBER ";C: IF C<0 OR C>4 THEN GO TO 155
170 CLS : GO TO C*200
200 PRINT AT 11,8;"G R A N A D A";AT 15,2;"de AGUSTIN LARA, Veracruzano"
210 BEEP .25,9: GO SUB 1000: GO SUB 1030: RESTORE 215: FOR B=1 TO 12: READ D,F: BEEP D,F: NEXT B
215 DATA .25,12,.25,12,.25,12,.25,14,.25,14,.25,14,.25,16,.25,16,.25,16,.25,17,.25,19,.25,16
220 GO SUB 1065: BEEP .125,14: BEEP .125,16: BEEP .125,14: GO SUB 1015: FOR B=1 TO 5: READ D,F: BEEP D,F: NEXT B
225 DATA 2.25,12,.25,7,.25,12,.25,12,.25,12
230 GO SUB 1065: BEEP .25,14: BEEP .25,14: BEEP .25,14: GO SUB 1015: FOR B=1 TO 6: READ D,F: BEEP D,F: NEXT B
235 DATA .25,16,.25,16,.25,16,.25,17,.25,19,.25,16
240 GO SUB 1030: FOR B=1 TO 5: READ D,F: BEEP D,F: NEXT B
245 DATA .063,17,.063,19,.063,17,.063,16,2,14
250 GO SUB 1999: PAUSE 30: BEEP .25,9: GO SUB 1000: GO SUB 1030: FOR B=1 TO 12: READ D,F: BEEP D,F: NEXT B
255 DATA .25,12,.25,12,.25,12,.25,14,.25,14,.25,14,.25,16,.25,16,.25,16,.25,17,.25,19,.25,17
260 GO SUB 1055: FOR B=1 TO 5: READ D,F: BEEP D,F: NEXT B
265 DATA .125,21,.125,19,.125,17,2.5,16,.25,16
270 GO SUB 1025: FOR B=1 TO 6: READ D,F: BEEP D,F: NEXT B
275 DATA .25,16,.25,11,.25,12,.25,14,.25,16,.25,19
280 GO SUB 1055: FOR B=1 TO 8: READ D,F: BEEP D,F: NEXT B
285 DATA .125,17,.125,19,.125,17,.25,16,.25,16,.25,16,.25,17,.25,16
290 GO SUB 1025: FOR B=1 TO 6: READ D,F: BEEP D,F: NEXT B
295 DATA .25,16,.25,11,.25,12,.25,14,.25,11,.25,12
300 GO SUB 1055: BEEP .25,9: BEEP .25,8: BEEP .25,9: GO SUB 1015: BEEP .5,12: BEEP .25,9: GO SUB 1030: FOR B=1 TO 12: READ D,F: BEEP D,F: NEXT B
305 DATA .25,12,.25,12,.25,12,.25,14,.25,14,.25,14,.25,16,.25,16,.25,16,.25,17,.25,19,.25,16
310 GO SUB 1065: BEEP .125,14: BEEP .125,16: BEEP .125,14: GO SUB 1015: FOR B=1 TO 5: READ D,F: BEEP D,F: NEXT B
315 DATA 2.25,12,.25,7,.25,12,.25,12,.25,12
320 GO SUB 1065: BEEP .25,14: BEEP .25,14: BEEP .25,14: GO SUB 1015: FOR B=1 TO 6: READ D,F: BEEP D,F: NEXT B
325 DATA .25,16,.25,16,.25,16,.25,17,.25,19,.25,16
330 GO SUB 1030: FOR B=1 TO 5: READ D,F: BEEP D,F: NEXT B
335 DATA .063,17,.063,19,.063,17,.063,16,2,14
340 FOR B=1 TO 7: READ D,F: BEEP D,F: NEXT B
345 DATA .25,12,.25,17,.25,17,.25,17,.25,15,.25,15,.25,15
350 GO SUB 1105: BEEP .25,14: BEEP .25,14: BEEP .25,14: GO SUB 1999: BEEP .25,13: BEEP .25,13: BEEP .25,13: GO SUB 1000: GO SUB 1030: BEEP .25,12: BEEP .25,12: BEEP .25,12: GO SUB 1015: BEEP .25,10: BEEP .25,10: BEEP .25,10
355 GO SUB 1030: BEEP .125,9: BEEP .125,10: BEEP 1,12: BEEP .25,12
360 GO SUB 1065: BEEP .25,17: BEEP .375,17: BEEP .125,17: GO SUB 1015: BEEP .25,19: BEEP .25,17: BEEP .25,19
365 GO SUB 1030: FOR B=1 TO 7: READ D,F: BEEP D,F: NEXT B
370 DATA .125,21,.125,19,.375,17 ,.125,16,.25,19,.25,17,.25,14
375 GO SUB 1015: FOR B=1 TO 7: READ D,F: BEEP D,F: NEXT B
380 DATA .125,16,.125,14,.375,12,.125,12,.25,14,.25,12,.25,14
385 GO SUB 1030: BEEP 1.25,17: GO SUB 1999: PAUSE 90: CLS : GO TO MENU
400 PRINT AT 10,7;"P E R F I D I A";AT 14,5;"de ALBERTO DOMINGUEZ"
405 BEEP .3,7: GO SUB 1000: SOUND 8,15;9,10;10,10: GO SUB 1017: GO SUB 1055: BEEP .9,12: GO SUB 1000: GO SUB 1050: BEEP .15,11: GO SUB 1035: BEEP .15,12: BEEP .15,14: BEEP .15,12: BEEP .15,11
410 GO SUB 1015: BEEP .3,12: BEEP .3,11: SOUND 8,15;9,10;10,10: GO SUB 1055: BEEP 1,9: GO SUB 1000: GO SUB 1050: BEEP .15,11: GO SUB 1035
420 BEEP .15,12: BEEP .15,14: BEEP .15,12: BEEP .15,11: GO SUB 1015: BEEP .15,12: BEEP .15,11: BEEP .15,9: GO SUB 1055: BEEP .45,12: BEEP .15,9
425 GO SUB 1050: BEEP .3,7: BEEP .3,5: BEEP .3,7: BEEP .3,9: BEEP .3,5: GO SUB 1025: BEEP 1.5,4: GO SUB 1999: PAUSE 30: GO SUB 1000: GO SUB 1035: BEEP .3,7: SOUND 8,15;9,10;10,10: GO SUB 1015: GO SUB 1055: BEEP 1,12: GO SUB 1000: GO SUB 1050: BEEP .15,11
430 GO SUB 1035: BEEP .15,12: BEEP .15,14: BEEP .15,12: BEEP .15,11: GO SUB 1015: BEEP .3,12: BEEP .3,11: SOUND 8,15;9,10;10,10:: GO SUB 1055: BEEP 1,9: GO SUB 1000: GO SUB 1050: BEEP .15,11
435 GO SUB 1035: BEEP .15,12: BEEP .15,14: BEEP .15,12: BEEP .15,11: GO SUB 1015: BEEP .3,12: BEEP .3,11: BEEP .3,9: GO SUB 1055: BEEP .45,12: BEEP .15,9
440 GO SUB 1050: RESTORE 445: FOR B=1 TO 5: READ D,F: BEEP D,F: NEXT B
445 DATA .3,7,.3,5,.3,7,.3,9,.3,5
450 GO SUB 1025: BEEP 1,4: GO SUB 1999: PAUSE 30: BEEP .15,2: BEEP .15,4
455 GO SUB 1000: GO SUB 1050: RESTORE 460: FOR B=1 TO 14: READ D,F: BEEP D,F: NEXT B
460 DATA .15,5,.15,5,.15,5,.15,7,.15,9,.15,9,.15,9,.15,8,.45,9,.15,8,.15,9,.15,8,.15,9,.15,11
465 GO SUB 1025: BEEP 1.1,8: GO SUB 1999: PAUSE 40: BEEP .5,11: BEEP .15,12: GO SUB 1000: GO SUB 1050: RESTORE 470: FOR B=1 TO 16: READ D,F: BEEP D,F: NEXT B
470 DATA .15,14,.15,14,.15,14,.15,12,.15,11,.15,11,.15,11,.15,12,.15,11,.15,11,.15,11,.15,9,.15,7,.15,9,.15,7,.15,5
475 GO SUB 1025: BEEP 1.1,4: GO SUB 1999: PAUSE 40: GO SUB 1000: GO SUB 1035: BEEP .3,7: SOUND 8,15;9,10;10,10: GO SUB 1017: GO SUB 1055: BEEP 1.3,12: GO SUB 1000: GO SUB 1050: BEEP .15,11: GO SUB 1035:
480 BEEP .5,12: BEEP .15,14: BEEP .15,12: BEEP .15,11: GO SUB 1015: BEEP .3,12: BEEP .3,11: SOUND 8,10;9,15;10,10: GO SUB 1055: BEEP 1,9: GO SUB 1000: GO SUB 1050: BEEP .15,11
485 GO SUB 1035: BEEP .15,12: BEEP .15,14: BEEP .15,12: BEEP .15,11: GO SUB 1015: BEEP .3,12: BEEP .3,11: BEEP .3,9: GO SUB 1055: BEEP .45,12: BEEP .15,9
490 GO SUB 1050: BEEP .3,7: BEEP .3,5: BEEP .3,7: GO SUB 1035: BEEP .3,9: BEEP .3,14: GO SUB 1017: BEEP 1.3,12
500 GO SUB 1999: PAUSE 180: CLS : GO TO MENU
600 PRINT AT 10,10;"B R A Z I L";AT 14,6;"Samba de ARY BARROSA"
605 BEEP .3,2: GO SUB 1000: GO SUB 1035: RESTORE 610: FOR B=1 TO 8: READ D,F: BEEP D,F: NEXT B
610 DATA 1,11,.15,14,.15,14,.15,11,.15,11,.15,9,.15,9,.15,7
615 GO SUB 1055: BEEP 1,9: GO SUB 1020: RESTORE 620: FOR B=1 TO 7: READ D,F: BEEP D,F: NEXT B
620 DATA .15,14,.15,14,.15,11,.15,11,.15,9,.15,9,.15,7
625 GO SUB 1055: BEEP 1,9: GO SUB 1020: RESTORE 630: FOR B=1 TO 7: READ D,F: BEEP D,F: NEXT B
630 DATA .15,14,.15,14,.15,11,.15,11,.15,9,.15,9,.15,7
635 GO SUB 1035: BEEP .8,11: BEEP .3,6: GO SUB 1055: BEEP .8,4: GO SUB 1020: BEEP .3,6: GO SUB 1035: BEEP .3,11: BEEP .3,11: GO SUB 1999: BEEP .3,10: BEEP .3,9: GO SUB 1000: GO SUB 1025: BEEP 1,14: GO SUB 1050: GO SUB 1025: RESTORE 640: FOR B=1 TO 8: READ D,F: BEEP D,F: NEXT B
640 DATA .15,14,.15,14,.15,13,.15,12,.15,11,.15,10,.15,11,1,14
645 GO SUB 1050: GO SUB 1025: RESTORE 650: FOR B=1 TO 8: READ D,F: BEEP D,F: NEXT B
650 DATA .15,14,.15,14,.15,13,.15,12,.15,11,.15,10,.15,11,1,14
655 GO SUB 1050: GO SUB 1025: RESTORE 660: FOR B=1 TO 7: READ D,F: BEEP D,F: NEXT B
660 DATA .15,14,.15,14,.15,13,.15,12,.15,11,.15,9,.15,11
665 GO SUB 1055: BEEP 1.5,12: GO SUB 1030: PAUSE 30: GO SUB 1055: RESTORE 670: FOR B=1 TO 8: READ D,F: BEEP D,F: NEXT B
670 DATA 1,12,.15,12,.15,12,.15,11,.15,11,.15,9,.15,7,.15,6
675 GO SUB 1035: RESTORE 680: FOR B=1 TO 7: READ D,F: BEEP D,F: NEXT B
680 DATA 1,9,.15,7,.15,9,.15,11,.15,14,.15,11,.15,7
685 GO SUB 1055: BEEP 1.2,7: GO SUB 1020: RESTORE 690: FOR B=1 TO 6: READ D,F: BEEP D,F: NEXT B
690 DATA .3,9,.15,9,.15,9,.3,9,.15,9,.15,7
700 GO SUB 1035: BEEP .9,11: BEEP .3,6: GO SUB 1055: BEEP .8,4: GO SUB 1020: BEEP .3,6: GO SUB 1035: BEEP .9,11: BEEP .3,6: GO SUB 1055: BEEP .9,4: GO SUB 1020: BEEP .3,6: GO SUB 1035: BEEP 1.9,11
705 GO SUB 1999: PAUSE 180: CLS : GO TO MENU
800 PRINT AT 9,7;"S O L A M E N T E";AT 11,9;"U N A V E Z";AT 15,8;"de AGUSTIN LARA"
805 BEEP .2,7: BEEP .2,9: BEEP .4,7: BEEP .2,0: BEEP .2,2: GO SUB 1000: SOUND 9,12;10,14: GO SUB 1017: BEEP 1.8,4: BEEP .2,4: BEEP .6,7: BEEP .2,9: GO SUB 1035: RESTORE 810: FOR B=1 TO 7: READ D,F: BEEP D,F: NEXT B
810 DATA .8,7,1.2,-1,.2,9,.2,11,.4,9,.2,1,.2,2
815 GO SUB 1050: BEEP 1.4,9: BEEP .4,12: GO SUB 1035: BEEP .6,11: BEEP .2,7: GO SUB 1017: BEEP 2,4: GO SUB 1015: RESTORE 820: FOR B=1 TO 14: READ D,F: BEEP D,F: NEXT B
820 DATA .2,12,.2,12,.4,12,.2,11,.2,11,.4,11,.2,9,.2,9,.4,9,.2,7,.2,7,.4,9,.2,4,.2,5
825 GO SUB 1035: BEEP .8,7: BEEP 1.6,-1: GO SUB 1999: PAUSE 45: GO SUB 1000: SOUND 9,12;10,14: GO SUB 1035: RESTORE 830: FOR B=1 TO 14: READ D,F: BEEP D,F: NEXT B
830 DATA .2,7,.2,7,.4,7,.2,5,.2,5,.4,5,.2,4,.2,4,.2,4,.4,2,.2,2,.4,2,.2,0,.2,2
835 GO SUB 1017: BEEP 2,4: GO SUB 1999: BEEP .2,7: BEEP .2,9: BEEP .4,7: BEEP .2,0: BEEP .2,2: GO SUB 1000: SOUND 9,12;10,14
840 GO SUB 1017: BEEP 1.6,4: BEEP .2,4: BEEP .4,7: BEEP .2,9: GO SUB 1035: RESTORE 845: FOR B=1 TO 7: READ D,F: BEEP D,F: NEXT B
845 DATA .8,7,1.2,-1,.2,9,.2,11,.4,9,.2,1,.2,2
850 GO SUB 1050: BEEP 1.4,9: BEEP .4,12: GO SUB 1035: BEEP .6,11: BEEP .2,7: GO SUB 1017: BEEP 1.8,4: GO SUB 1999: PAUSE 45: GO SUB 1000: GO SUB 1015: RESTORE 855: FOR B=1 TO 14: READ D,F: BEEP D,F: NEXT B
855 DATA .2,12,.2,12,.4,12,.2,11,.2,11,.4,11,.2,9,.2,9,.4,9,.2,7,.2,7,.4,9,.2,4,.2,5
860 GO SUB 1035: BEEP .8,7: BEEP 1,-1: GO SUB 1999: PAUSE 45: GO SUB 1000: GO SUB 1035: RESTORE 865: FOR B=1 TO 14: READ D,F: BEEP D,F: NEXT B
865 DATA .2,7,.2,7,.4,7,.2,5,.2,5,.4,5,.2,4,.2,4,.4,4,.2,2,.2,2,.4,9,.2,7,.2,9
870 GO SUB 1017: BEEP 1.4,12: GO SUB 1999: PAUSE 180: CLS : GO TO MENU
1000 SOUND 7,56;8,14;9,15;10,12;11,255;12,255;13,13: RETURN : REM ON
1015 SOUND 0,209;1,0;2,165;3,0;4,139;5,0: RETURN : REM C MAJ
1017 SOUND 0,162;1,1;2,75;3,1;4,23;5,1: RETURN : REM LOWER C MAJ
1020 SOUND 0,186;1,0;2,147;3,0;4,124;5,0: RETURN : REM D MAJ
1025 SOUND 0,165;1,0;2,131;3,0;4,110;5,0: RETURN : REM E MAJ
1030 SOUND 0,156;1,0;2,124;3,0;4,104;5,0: RETURN : REM F MAJ
1035 SOUND 0,23;1,1;2,221;3,0;4,186;5,0: RETURN : REM G MAJ
1050 SOUND 0,186;1,0;2,156;3,0;4,124;5,0: RETURN : REM D MINOR
1055 SOUND 0,248;1,0;2,209;3,0;4,165;5,0: RETURN : REM A MIN
1057 SOUND 0,248;1,0;2,75;3,1;4,209;5,0: RETURN : REM LO A MIN
1065 SOUND 0,23;1,1;2,234;3,0;4,186;5,0: RETURN : REM G MIN
1105 SOUND 0,234;1,0;2,186;3,0;4,156;5,0: RETURN : REM B FLAT MAJ
1999 SOUND 7,63: RETURN : REM OFF
9997 STOP
9998 CLEAR : SAVE "ESPANOLA" LINE 1
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.
