--- title: "Music Educator I" id: 51740 type: "computer_media" slug: "music-educator-i" url: "http://localhost/computer_media/music-educator-i/" markdown_url: "http://localhost/computer_media/music-educator-i.md" published_at: "2023-08-13T23:14:29+00:00" modified_at: "2026-04-04T20:18:05+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2022/04/20230809-041332.jpg" excerpt: "A complete music theory lesson covering treble clef notes, note types, and beat values, with three scored quizzes and a letter-grade summary built entirely in BASIC." category: - name: "Archived Media" slug: "archived-media" taxonomy: "category" url: "http://localhost/category/archived-media/" post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "Timex Computer Corporation" slug: "timex-computer-corporation" taxonomy: "post_tag" url: "http://localhost/tag/timex-computer-corporation/" - name: "TS 1000" slug: "ts1000" taxonomy: "post_tag" url: "http://localhost/tag/ts1000/" model: - name: "Timex/Sinclair 1000" slug: "ts-1000" taxonomy: "model" url: "http://localhost/model/ts-1000/" genre: - name: "Education" slug: "education" taxonomy: "genre" url: "http://localhost/type/education/" media_type: "Cassette" download_url: "https://archive.org/download/timex-sinclair-software-archive/Music Educator I (1983)(Timex)(US)(TS1000)(Cassette).zip" mediadate: "1983" producer_company: - id: 11401 title: "Timex Computer Corporation" type: "company" url: "http://localhost/company/timex-computer-corporation/" related_products: - id: 13408 title: "Music Educator I" type: "product" url: "http://localhost/product/music-educator-i/" media_type_tags: "Education" --- Music Educator I is an interactive music theory tutorial that teaches note reading on the treble (G) clef staff, note types (whole, half, quarter, and eighth notes), and beat values in 4/4 meter. The program uses block graphics characters extensively to render a five-line staff, bar lines, time signatures, and individual note shapes (noteheads, stems, flags, and beams) directly on screen. Three scored quizzes test the student on note names (using the mnemonics “Every Good Boy Does Fine” and “FACE”), note type identification, and beat counting, with a final letter grade computed from the average of the three scores. A separate subroutine at line 2000 handles note rendering, branching on the current note type variable `T$` and vertical position variable `K` to draw the correct notehead style and stem. *** ## Program Analysis ### Program Structure The program is organized as a linear instructional sequence controlled by a main thread and a set of subroutines. The major phases are: 1. Title screen and staff introduction (lines 19–41) 2. Lines-notes mnemonic (“Every Good Boy Does Fine”) display (lines 51–98) 3. Space-notes mnemonic (“FACE”) display (lines 101–131) 4. Note name quiz — 9 random notes over 3 rounds, scored out of 100 (lines 189–296) 5. Note type demonstration — cycling through E/Q/H/W shapes (lines 299–472) 6. Note type quiz — 12 questions, scored out of 100 (lines 501–581) 7. Rhythm / beat-value instruction (lines 582–791) 8. Beat-value quiz — 8 questions, scored out of 100 (lines 800–893) 9. Score summary and letter grade (lines 894–999) Key subroutines are collected at high line numbers: | Line(s) | Purpose | | --- | --- | | 1000–1099 | Clear screen to staff background (five ledger lines as solid-block rows) | | 2000–3999 | Draw a single note at row `K`, column `M`, type `T$` | | 5010–5099 | Map position `K` to note-name string `A$` | | 6000–6999 | Draw staff decoration: bar lines, time signature, instructional text | | 8001–8099 | Draw the G-clef symbol using block graphics | | 9000–9010 | SAVE and RUN (utility lines at the end) | ### Staff Rendering Technique The five staff lines are drawn at line 1000 as a single large `PRINT AT 0,0` string containing rows of `▄` (lower-half block) characters at every fourth character row, separated by blank rows. Because the ZX81 display is character-mapped at 32 columns × 24 rows, the program treats each display row as a staff position; the vertical index `K` steps in increments of 4 (one staff space) or 2 (a ledger line). Staff lines fall at rows 2, 6, 10, 14, and 18 when `K` is mapped back to screen coordinates via `PRINT AT K+3,...`. Bar lines are added by subroutines 6100/6110 (left bar, using `▌`/`▙`) and 6120/6130 (right bar, using `▐`/`▟`). The G-clef at subroutine 8001 is built from multiple `PRINT AT` statements each placing a sequence of block-graphic characters that approximate the clef’s curved shape. ### Note Drawing Subroutine (Lines 2000–3999) The note-drawing code branches on two variables: `K` (odd values 1–17 represent the nine valid note positions on and between the five staff lines) and `T$` (one of `"E"`, `"Q"`, `"H"`, `"W"` for eighth, quarter, half, whole). The logic flow is: - Whole notes (`T$="W"`) branch directly to line 2300, bypassing stem/flag drawing. - Notes with `K<=9` (lower half of staff) jump to line 2300 for the lower-staff note shape, while `K>9` uses the upper-staff path starting at line 2050. - Stem direction and flag (for eighth notes) are drawn with additional `PRINT AT` statements using `▙`, `▌`, `▐`, `▛`, and `▞` characters to suggest stems and flags. - Lines 3071–3130 handle the lower-staff note shapes including the flag tail for eighth notes. Several `GOTO` targets within subroutine 2000 reference lines that do not exist in the listing (e.g., lines 2000, 2200, 2206, 2208, 2400, 2500), which means those branches fall through to the next present line or exit. This is an intentional technique for conditional execution without explicit `RETURN` at intermediate points, though it also means some note variants may be rendered incompletely. ### Note-Name Mapping (Subroutine 5000) Subroutine 5010–5099 maps the odd-valued position `K` to a letter name in `A$`. The mapping covers K=1,15→F; K=3,17→E; K=5→D; K=7→C; K=9→B; K=11→A; K=13→G. This places middle C and the surrounding notes of the treble clef across the nine positions. Note that K=17 (top ledger line) maps to E and K=1 (bottom ledger line) maps to F, consistent with the range of the treble staff shown. ### Quiz Mechanics and Scoring The note name quiz (lines 189–290) runs 3 rounds of 3 notes each, for 9 total questions. Each correct answer adds 11.12 points, giving a theoretical maximum of approximately 100. The `DIM Y(17)` array at line 10 is used as a “used” flag to prevent repeating note positions within a round; it is reset implicitly only at the start of each outer loop iteration since `Y` is never explicitly cleared between rounds, which could reduce variety in later rounds. The note type quiz (lines 501–550) asks 12 questions worth 8.34 each (~100 total). The beat-value quiz (lines 800–880) asks 8 questions worth 12.5 each (exactly 100 total). All three scores are accumulated in `S`, `S1`, and `S2` respectively, then averaged at line 902 and converted to a letter grade at lines 919–923 using a standard 60/70/80/90 scale. ### Note Type Demonstration Loop (Lines 299–472) After the note name quiz, the program demonstrates note shapes in a loop that cycles through E→Q→H→W using a chain of `IF T$=... THEN GOTO` tests at lines 470–472. The entry point at line 299 sets `T$="E"`, and after drawing eight random notes, control falls to the type-check chain. Each type redirects to a block that sets the next type and GOTOs line 400 (which is not explicitly listed; line 403 is the actual first line of the note-drawing loop). This effectively creates a four-phase animation of different note shapes. ### Key BASIC Idioms - The double INKEY$ pattern (`IF INKEY$<>"" THEN GOTO n` followed by `IF INKEY$="" THEN GOTO n+1`) at lines 40–41, 97–98, etc., is the standard keypress-wait idiom: the first loop flushes any held key, the second waits for a fresh press. - `SLOW` at line 5 puts the machine in its slower display-refresh mode, ensuring screen output is visible. - Random note positions are generated with `INT(RND*17)+1` and then filtered to odd values only (lines 211, 411, 516), since even values represent spaces between staff lines rather than note positions. - `TAB` is used extensively inside single `PRINT AT` statements to place multiple block graphic characters in one statement, reducing code length and improving speed. ### Bugs and Anomalies - The `DIM Y(17)` array is never reset between the three outer quiz rounds (line 190 `FOR N=1 TO 3`), so by the third round, many positions are already flagged and the inner loop at line 210–213 may spin for a long time seeking an unused slot. - Lines 301–331 set `T$` and print a label, then all `GOTO 400`. Line 400 does not exist; execution continues at line 403. This is harmless but slightly confusing. - Several subroutine 2000 internal `GOTO` targets (2200, 2206, 2208, 2400, 2500) are absent from the listing; control falls through to the next available line in each case, which may cause some note types to render partially or incorrectly. - Lines 3118–3120 contain a conditional `IF K=9 THEN GOTO 3121`, but line 3121 is the very next line, making the branch a no-op. - Lines 2201–2209 and 3086–3130 contain partial eighth-note flag code but some `PRINT` statements reference lines that do not appear (e.g., lines 2206, 2207 are absent; line 2209 appears but the preceding branch at 2203 references 2206 which is missing). This suggests the flag rendering is incomplete for some note positions. ## Source Code ``` 1 REM MUSIC EDUCATOR 1 5 SLOW 10 DIM Y(17) 19 PRINT AT 10,7;"MUSIC EDUCATOR 1" 20 PRINT AT 11,7;"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀" 21 FOR J=1 TO 80 22 NEXT J 28 GOSUB 1000 29 GOSUB 6000 30 PRINT AT 20,1;"THIS PROGRAM TEACHES THE NOTES" 31 PRINT AT 21,1;"ON THE TREBLE OR G CLEF STAFF." 32 GOSUB 8000 33 PRINT AT 11,10;"<--G CLEF" 34 FOR N=1 TO 60 35 NEXT N 36 PRINT AT 19,7;"[P][R][E][S][S]█[A][N][Y]█[K][E][Y]█[T][O]█[C][O][N][T][I][N][U][E]" 40 IF INKEY$ <>"" THEN GOTO 40 41 IF INKEY$ ="" THEN GOTO 41 51 GOSUB 1000 67 LET K=17 68 LET T$="Q" 69 LET M=0 70 FOR I=1 TO 5 75 GOSUB 2000 80 LET M=M+6 81 LET K=K-4 89 NEXT I 90 PRINT AT 15,2;"E" 91 PRINT AT 11,8;"G" 92 PRINT AT 7,14;"B" 93 PRINT AT 3,20;"D" 94 PRINT AT 4,26;"F" 95 PRINT AT 19,6;"E[V][E][R][Y] G[O][O][D] B[O][Y] D[O][E][S] F[I][N][E]" 96 PRINT AT 21,0;"███[P][R][E][S][S]█[A][N][Y]█[K][E][Y]█[T][O]█[C][O][N][T][I][N][U][E]████" 97 IF INKEY$ <>"" THEN GOTO 97 98 IF INKEY$ ="" THEN GOTO 98 101 LET K=15 102 LET M=2 103 GOSUB 1000 105 FOR I=1 TO 4 106 GOSUB 2000 108 LET K=K-4 109 LET M=M+7 110 NEXT I 120 PRINT AT 12,4;"F" 121 PRINT AT 8,11;"A" 122 PRINT AT 4,18;"C" 123 PRINT AT 0,25;"E" 125 PRINT AT 19,0;" NOTES IN SPACES SPELL FACE " 128 PRINT AT 21,0;"███[P][R][E][S][S]█[A][N][Y]█[K][E][Y]█[T][O]█[C][O][N][T][I][N][U][E]████" 130 IF INKEY$ <>"" THEN GOTO 130 131 IF INKEY$ ="" THEN GOTO 131 189 LET S=0 190 FOR N=1 TO 3 192 LET M=11 201 GOSUB 1000 203 PRINT AT 0,11;"NOTE TEST" 204 GOSUB 6000 205 GOSUB 8000 207 FOR I=1 TO 3 210 LET K=INT (RND*17)+1 211 IF K=2 OR K=4 OR K=6 OR K=8 OR K=10 OR K=12 OR K=14 OR K=16 THEN GOTO 210 212 IF Y(K)=1 THEN GOTO 210 213 LET Y(K)=1 220 GOSUB 5000 224 PRINT AT 21,18;" " 225 GOSUB 2000 249 PRINT AT 21,0;"WHAT IS THIS NOTE? (A THRU G)" 250 INPUT N$ 255 IF N$=A$ THEN GOTO 275 256 PRINT AT 21,18;" [I][N][C][O][R][R][E][C][T] " 258 LET M=M+7 274 GOTO 279 275 PRINT AT 21,18;" CORRECT " 276 PRINT AT K+3,M+2;A$ 277 LET S=S+11.12 278 LET M=M+7 279 NEXT I 280 FOR L=1 TO 30 281 NEXT L 290 NEXT N 291 PRINT AT 20,0;" SCORE=";INT S;" " 292 PRINT AT 21,0;"███[P][R][E][S][S]█[A][N][Y]█[K][E][Y]█[T][O]█[C][O][N][T][I][N][U][E]████" 295 IF INKEY$ <>"" THEN GOTO 295 296 IF INKEY$ ="" THEN GOTO 296 299 GOSUB 1000 301 LET T$="E" 302 PRINT AT 21,6;" EIGHTH NOTES (E)" 303 GOTO 400 304 LET T$="Q" 305 GOSUB 1000 309 PRINT AT 21,6;"QUARTER NOTES (Q)" 310 GOTO 400 315 GOSUB 1000 325 LET T$="H" 326 PRINT AT 21,6;" HALF NOTES (H) " 327 GOTO 400 328 GOSUB 1000 330 LET T$="W" 331 PRINT AT 21,6;" WHOLE NOTES (W)" 403 LET M=1 406 FOR I=1 TO 8 408 LET K=INT (RND*17)+1 410 IF T$="E" AND K=11 THEN GOTO 408 411 IF K=2 OR K=4 OR K=6 OR K=8 OR K=10 OR K=12 OR K=14 OR K=16 THEN GOTO 408 412 GOSUB 2000 413 IF I=8 THEN GOTO 430 414 LET M=M+8 415 IF M>25 THEN GOTO 417 416 GOTO 430 417 LET M=1 418 FOR L=1 TO 30 419 NEXT L 421 GOSUB 1000 430 NEXT I 450 FOR N=1 TO 30 451 NEXT N 470 IF T$="E" THEN GOTO 304 471 IF T$="Q" THEN GOTO 315 472 IF T$="H" THEN GOTO 328 501 LET M=1 502 LET S1=0 503 GOSUB 1000 504 FOR I=1 TO 12 515 LET K=INT (RND*17)+1 516 IF K=11 OR K=2 OR K=4 OR K=6 OR K=8 OR K=10 OR K=12 OR K=14 OR K=16 THEN GOTO 515 517 IF T$="E" AND K=11 THEN GOTO 515 519 IF K=17 OR K=13 OR K=3 THEN LET T$="H" 520 IF K=1 OR K=7 THEN LET T$="E" 521 IF K=5 OR K=11 THEN LET T$="Q" 522 IF K=9 OR K=15 THEN LET T$="W" 523 PRINT AT 20,11;" " 524 PRINT AT 0,8;"NOTE TYPE TEST" 525 GOSUB 2000 526 PRINT AT 21,0;"ENTER TYPE OF NOTE;(E,Q,H, OR W)" 527 INPUT A$ 528 IF A$=T$ THEN GOTO 535 530 PRINT AT 20,11;"[I][N][C][O][R][R][E][C][T] " 534 GOTO 540 535 PRINT AT 20,11;" CORRECT " 536 PRINT AT K+3,M+2;T$ 537 LET S1=S1+8.34 540 LET M=M+8 541 IF I=12 THEN GOTO 550 542 IF M>25 THEN GOTO 545 543 GOTO 550 545 LET M=1 546 FOR J=1 TO 30 547 NEXT J 549 GOSUB 1000 550 NEXT I 574 PRINT AT 20,11;" " 575 PRINT AT 20,11;"SCORE=";INT S1 576 PRINT AT 21,0;"███[P][R][E][S][S]█[A][N][Y]█[K][E][Y]█[T][O]█[C][O][N][T][I][N][U][E]████" 580 IF INKEY$ <>"" THEN GOTO 580 581 IF INKEY$ ="" THEN GOTO 581 582 LET K=3 585 GOSUB 1000 586 GOSUB 6000 587 GOSUB 6120 590 GOSUB 6135 601 GOSUB 1000 602 LET M=1 603 LET T$="E" 605 PRINT AT 18,0;" EIGHTH NOTES GET 1/2 BEAT EACH." 607 GOSUB 2000 610 LET M=9 612 LET T$="Q" 615 PRINT AT 19,0;"QUARTER NOTES GET ONE BEAT EACH." 617 GOSUB 2000 620 LET M=17 621 LET T$="H" 625 PRINT AT 20,0;" HALF NOTES GET TWO BEATS EACH. " 627 GOSUB 2000 630 LET M=24 631 LET T$="W" 632 LET K=5 635 PRINT AT 21,0;"WHOLE NOTES GET FOUR BEATS EACH." 637 GOSUB 2000 639 PRINT AT 0,0;"███[P][R][E][S][S]█[A][N][Y]█[K][E][Y]█[T][O]█[C][O][N][T][I][N][U][E]████" 640 IF INKEY$ <>"" THEN GOTO 640 641 IF INKEY$ ="" THEN GOTO 641 642 GOSUB 1000 643 GOSUB 6000 644 FOR J=1 TO 2 647 LET T$="E" 648 LET K=1 649 PRINT AT 21,0;" EIGHTH NOTES GET ONE/HALF BEAT" 650 FOR M=1 TO 25 STEP 8 651 GOSUB 2000 655 PRINT AT 19,M+2;"1/2" 668 LET K=K+2 669 NEXT M 670 FOR I=1 TO 20 671 NEXT I 675 IF J=2 THEN GOTO 680 676 GOSUB 1000 677 GOSUB 6120 678 NEXT J 698 LET K=3 699 LET T$="Q" 700 GOSUB 1000 701 GOSUB 6000 702 GOSUB 6120 703 PRINT AT 21,0;" QUARTER NOTES GET ONE BEAT" 704 FOR M=1 TO 25 STEP 8 710 GOSUB 2000 711 PRINT AT 19,M+2;"1" 715 NEXT M 720 FOR I=1 TO 40 722 NEXT I 725 LET T$="H" 726 LET M=1 727 LET K=7 730 GOSUB 1000 731 GOSUB 6000 732 GOSUB 6120 735 PRINT AT 21,0;" HALF NOTES GET TWO BEATS" 737 GOSUB 2000 738 PRINT AT 19,M+2;"2" 739 LET M=17 740 GOSUB 2000 741 PRINT AT 19,M+2;"2" 742 FOR I=1 TO 40 743 NEXT I 745 GOSUB 1000 746 GOSUB 6000 747 GOSUB 6120 750 LET T$="W" 751 LET M=1 752 LET K=11 753 PRINT AT 21,0;" WHOLE NOTES GET FOUR BEATS" 755 GOSUB 2000 756 PRINT AT 19,M+2;"4" 760 FOR I=1 TO 40 761 NEXT I 762 CLS 765 PRINT AT 2,12;"SUMMARY" 766 PRINT AT 3,12;"▀▀▀▀▀▀▀" 768 PRINT AT 5,2;"4 BEATS PER BAR IN 4/4 METER" 769 PRINT AT 6,2;"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" 770 PRINT AT 8,1;"EIGHTH NOTES GET ONE/HALF BEAT" 772 PRINT AT 10,3;"QUARTER NOTES GET ONE BEAT" 774 PRINT AT 12,4;"HALF NOTES GET TWO BEATS" 776 PRINT AT 14,3;"WHOLE NOTES GET FOUR BEATS" 789 PRINT AT 21,0;"███[P][R][E][S][S]█[A][N][Y]█[K][E][Y]█[T][O]█[C][O][N][T][I][N][U][E]████" 790 IF INKEY$ <>"" THEN GOTO 790 791 IF INKEY$ ="" THEN GOTO 791 800 LET S2=0 802 LET K=5 803 LET M=1 804 GOSUB 1000 805 PRINT AT 0,8;"NOTE BEAT TEST" 806 LET T$="Q" 807 FOR I=1 TO 8 809 IF S2>=50 AND S2<62.5 THEN LET T$="W" 811 IF T$="H" THEN GOTO 816 812 IF T$="W" THEN LET T$="H" 813 IF T$="E" THEN LET T$="W" 814 IF T$="Q" THEN LET T$="E" 815 GOTO 817 816 LET T$="Q" 817 GOSUB 2000 818 PRINT AT 20,0;"ENTER THE NUMBER OF BEATS THIS" 820 PRINT AT 21,0;"NOTE GETS: (1/2, 1, 2 OR 4)" 825 INPUT B$ 828 IF B$="0.5" THEN LET B$="1/2" 829 IF B$=".5" THEN LET B$="1/2" 830 IF T$="E" AND B$="1/2" THEN GOTO 850 831 IF T$="Q" AND B$="1" THEN GOTO 850 832 IF T$="H" AND B$="2" THEN GOTO 850 833 IF T$="W" AND B$="4" THEN GOTO 850 835 PRINT AT 19,10;"[I][N][C][O][R][R][E][C][T] " 849 GOTO 870 850 PRINT AT 19,10;" CORRECT " 852 PRINT AT K+3,M+2;B$ 853 LET S2=S2+12.5 870 LET M=M+8 871 IF I=8 THEN GOTO 880 872 IF M>25 THEN GOTO 875 873 GOTO 880 875 LET M=1 876 FOR J=1 TO 30 877 NEXT J 879 GOSUB 1000 880 NEXT I 887 PRINT AT 19,10;" " 888 PRINT AT 20,0;" " 889 PRINT AT 21,0;" " 890 PRINT AT 20,11;"SCORE=";INT S2 891 PRINT AT 21,0;"███[P][R][E][S][S]█[A][N][Y]█[K][E][Y]█[T][O]█[C][O][N][T][I][N][U][E]████" 892 IF INKEY$ <>"" THEN GOTO 892 893 IF INKEY$ ="" THEN GOTO 893 894 CLS 901 PRINT AT 4,7;"SUMMARY OF SCORES" 902 LET A=(INT S+INT S1+INT S2)/3 903 PRINT AT 5,7;"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀" 905 PRINT AT 7,6;"NOTE NAME TEST...";INT S 906 PRINT AT 9,6;"NOTE TYPE TEST...";INT S1 907 PRINT AT 11,6;"NOTE BEAT TEST...";INT S2 908 PRINT AT 12,6;"▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀" 910 PRINT AT 14,6;"AVERAGE..........";INT A 919 IF A<60 THEN LET G$="F" 920 IF A>=60 THEN LET G$="D" 921 IF A>=70 THEN LET G$="C" 922 IF A>=80 THEN LET G$="B" 923 IF A>=90 THEN LET G$="A" 925 PRINT AT 17,11;"GRADE...";G$ 997 PAUSE 10000 998 PRINT AT 21,8;"█[E][N][D]█[O][F]█[P][R][O][G][R][A][M]█" 999 STOP 1000 PRINT AT 0,0;" ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ " 1099 RETURN 2010 IF T$="W" THEN GOTO 2300 2050 IF K<=9 THEN GOTO 2300 2060 IF K=3 OR K=7 OR K=11 OR K=15 THEN GOTO 2070 2065 PRINT AT K-12,M+5;"▙";TAB M+37;"▌";TAB M+69;"▌";TAB M+101;"▌";TAB M+133;"▙";TAB M+165;"▌";TAB M+197;"▌";TAB M+229;"▌" 2066 PRINT AT K-4,M+5;"▙";TAB M+37;"▌";TAB M+69;"▌";TAB M+101;"▌" 2067 GOTO 2190 2070 IF K=15 THEN GOTO 2074 2071 PRINT AT K-12,M+5;"▙";TAB M+37;"▌";TAB M+69;"▌";TAB M+101;"▌";TAB M+133;"▙";TAB M+165;"▌";TAB M+197;"▌";TAB M+229;"▌" 2072 GOTO 2075 2074 PRINT AT K-12,M+5;"▌";TAB M+37;"▌";TAB M+69;"▙";TAB M+101;"▌";TAB M+133;"▌";TAB M+165;"▌";TAB M+197;"▙";TAB M+229;"▌" 2075 PRINT AT K-4,M+5;"▌";TAB M+37;"▌";TAB M+69;"▙";TAB M+101;"▌" 2190 IF T$="E" THEN GOTO 2200 2199 GOTO 2300 2201 PRINT AT K-12,M+5;"▛▖";TAB M+38;"▐" 2203 IF K=3 OR K=7 OR K=11 OR K=15 THEN GOTO 2206 2204 PRINT AT K-10,M+6;"▐" 2205 GOTO 2208 2207 PRINT AT K-10,M+6;"▟" 2209 PRINT AT K-9,M+6;"▞" 2298 IF T$="Q" THEN GOTO 2400 2310 PRINT AT K-1,M+1;"▞▀▀▚" 2315 IF K=3 OR K=7 OR K=11 OR K=15 THEN GOTO 2325 2320 PRINT AT K,M;"▟▄▄▄▄▙";TAB M+32;"▝▖ ▗▘";TAB M+65;"▝▀▀▘" 2324 GOTO 2341 2325 PRINT AT K,M;"▐ ▌";TAB M+32;"▝▖ ▗▘";TAB M+65;"▟██▙" 2398 IF T$="H" THEN GOTO 3000 2399 IF T$="W" THEN GOTO 3999 2410 PRINT AT K-1,M+1;"▟██▙";TAB M+33;"████";TAB M+65;"████" 2435 IF K=3 OR K=7 OR K=11 OR K=15 THEN GOTO 2445 2440 PRINT AT K+2,M+2;"▀▀" 2441 GOTO 2500 2445 PRINT AT K+2,M+1;"▟██▙" 3010 IF K>9 THEN GOTO 3999 3070 IF K=1 OR K=5 OR K=9 THEN GOTO 3095 3071 PRINT AT K+1,M;"▐";TAB M+32;"▟";TAB M+64;"▐";TAB M+96;"▐";TAB M+128;"▐";TAB M+160;"▟";TAB M+192;"▐";TAB M+224;"▐" 3079 PRINT AT K+9,M;"▐";TAB M+32;"▟";TAB M+64;"▐";TAB M+96;"▐";TAB M+128;"▝" 3084 IF T$="E" THEN GOTO 3086 3085 GOTO 3999 3086 PRINT AT K+13,M;"▀" 3087 PRINT AT K+12,M-1;"▚" 3088 PRINT AT K+11,M-1;"▌" 3089 PRINT AT K+10,M-1;"▙" 3090 PRINT AT K+9,M-1;"▞" 3094 GOTO 3999 3095 PRINT AT K+1,M;"▐";TAB M+32;"▐";TAB M+64;"▐";TAB M+96;"▟";TAB M+128;"▐";TAB M+160;"▐";TAB M+192;"▐";TAB M+224;"▟" 3113 PRINT AT K+9,M;"▐";TAB M+32;"▐";TAB M+64;"▐" 3118 IF K=9 THEN GOTO 3121 3121 IF T$="E" THEN GOTO 3125 3122 GOTO 3999 3126 PRINT AT K+11,M-1;"▝▟" 3127 PRINT AT K+10,M-1;"▌" 3128 PRINT AT K+9,M-1;"▌" 3129 PRINT AT K+8,M-1;"▌" 3130 PRINT AT K+7,M-1;"▞" 3999 RETURN 5010 IF K=1 OR K=15 THEN LET A$="F" 5011 IF K=3 OR K=17 THEN LET A$="E" 5012 IF K=7 THEN LET A$="C" 5013 IF K=5 THEN LET A$="D" 5014 IF K=9 THEN LET A$="B" 5015 IF K=11 THEN LET A$="A" 5016 IF K=13 THEN LET A$="G" 5099 RETURN 6100 PRINT AT 2,0;"▌";TAB 32;"▌";TAB 64;"▌";TAB 96;"▙";TAB 128;"▌";TAB 160;"▌";TAB 192;"▌";TAB 224;"▙" 6110 PRINT AT 10,0;"▌";TAB 32;"▌";TAB 64;"▌";TAB 96;"▙";TAB 128;"▌";TAB 160;"▌";TAB 192;"▌";TAB 224;"▙" 6115 RETURN 6120 PRINT AT 2,31;"▐";TAB 63;"▐";TAB 95;"▐";TAB 127;"▟";TAB 159;"▐";TAB 191;"▐";TAB 223;"▐";TAB 255;"▟" 6130 PRINT AT 10,31;"▐";TAB 63;"▐";TAB 95;"▐";TAB 127;"▟";TAB 159;"▐";TAB 191;"▐";TAB 223;"▐";TAB 255;"▟" 6131 RETURN 6135 PRINT AT 4,1;"<--BAR LINE";TAB 20;"BAR LINE-->" 6140 PRINT AT 11,9;"THIS IS A BAR" 6145 PRINT AT 21,0;"███[P][R][E][S][S]█[A][N][Y]█[K][E][Y]█[T][O]█[C][O][N][T][I][N][U][E]████" 6150 IF INKEY$ <>"" THEN GOTO 6150 6151 IF INKEY$ ="" THEN GOTO 6151 6155 PRINT AT 4,1;" " 6200 PRINT AT 3,5;"<--TIME SIGNATURE" 6250 PRINT AT 19,0;"THE FOLLOWING INSTRUCTION IS FOR" 6260 PRINT AT 20,0;"MUSIC WRITTEN IN 4/4 METER." 6300 PRINT AT 2,4;"▄";TAB 35;"▞▐";TAB 66;"▞ ▐";TAB 97;"▟▄▄▟▄";TAB 129;"▝▀▀▜▀";TAB 164;"▐";TAB 196;"▐" 6400 PRINT AT 10,4;"▄";TAB 35;"▞▐";TAB 66;"▞ ▐";TAB 97;"▟▄▄▟▄";TAB 129;"▝▀▀▜▀";TAB 164;"▐";TAB 196;"▐" 6500 PRINT AT 7,7;"FOUR BEATS PER BAR" 6600 PRINT AT 15,5;"QUARTER NOTE GETS ONE BEAT" 6800 PRINT AT 21,0;"███[P][R][E][S][S]█[A][N][Y]█[K][E][Y]█[T][O]█[C][O][N][T][I][N][U][E]████" 6980 IF INKEY$ <>"" THEN GOTO 6980 6981 IF INKEY$ ="" THEN GOTO 6981 6999 RETURN 8001 PRINT AT 0,6;"▙";TAB 38;"▙▙";TAB 70;"▌ ▚";TAB 102;"▌ ▌";TAB 134;"▌ ▞";TAB 166;"▙▟";TAB 198;"▛";TAB 229;"▞▌" 8002 PRINT AT 8,4;"▞ ▌";TAB 35;"▟▄▄▙";TAB 66;"▞ ▞▀▛▀▚";TAB 97;"▗▘▐ ▌ ▚";TAB 129;"▐ ▐ ▌ ▝▖";TAB 161;"▟▄▄▙▄▙▄▄▄▙";TAB 194;"▌ ▌ ▗▘";TAB 226;"▝▖ ▌ ▞" 8003 PRINT AT 16,3;"▝▖ ▌ ▞";TAB 36;"▟███";TAB 70;"▌";TAB 101;"▝▘" 8099 RETURN 9000 SAVE "MUSI[C]" 9010 RUN ```