ON ERROR IF ERR=17 CHAIN @lib$+"../examples/tools/touchide" ELSE MODE 3 : PRINT REPORT$ : END REM The Entertainer by Scott Joplin REM Encoded by Phil Wheeler and Tina Parkhouse, 4th August 1982 REM BB4W version by Richard Russell, 27th February 2010 REM Version with animated keyboard, Richard Russell, 04-Mar-2018 IF INKEY$(-256)="W" INSTALL @lib$+"d3dliba" ELSE INSTALL @lib$+"ogllib" DIM L%(0), B%(62), N%(62), F%(62), S%(62), M%(62), T%(62), P(62), T(62), R(62) DIM X(62), Y(62), Z(62), Q1&(3), Q2&(3), Q3&(3), Q4&(3) REM. Create white key: F% = OPENOUT(@tmp$+"white.fvf") BPUT #F%,36 : BPUT#F%,0 : BPUT #F%,0 : BPUT#F%,0 : REM 12 triangles BPUT #F%,&42 : BPUT #F%,0 : BPUT#F%,16 : BPUT#F%,0 : REM Vertex format and size FOR triangle% = 0 TO 11 READ x1, y1, z1, x2, y2, z2, x3, y3, z3, r&, g&, b& PROC4(F%,x1) : PROC4(F%,y1) : PROC4(F%,z1) : REM xyz coordinates BPUT #F%,b& : BPUT #F%,g& : BPUT#F%,r& : BPUT#F%,&FF : REM argb diffuse colour PROC4(F%,x2) : PROC4(F%,y2) : PROC4(F%,z2) : REM xyz coordinates BPUT #F%,b& : BPUT #F%,g& : BPUT#F%,r& : BPUT#F%,&FF : REM argb diffuse colour PROC4(F%,x3) : PROC4(F%,y3) : PROC4(F%,z3) : REM xyz coordinates BPUT #F%,b& : BPUT #F%,g& : BPUT#F%,r& : BPUT#F%,&FF : REM argb diffuse colour NEXT CLOSE #F% REM. Create black key: F% = OPENOUT(@tmp$+"black.fvf") BPUT #F%,48 : BPUT#F%,0 : BPUT #F%,0 : BPUT#F%,0 : REM 16 triangles BPUT #F%,&42 : BPUT #F%,0 : BPUT#F%,16 : BPUT#F%,0 : REM Vertex format and size FOR triangle% = 0 TO 15 READ x1, y1, z1, x2, y2, z2, x3, y3, z3, r&, g&, b& PROC4(F%,x1) : PROC4(F%,y1) : PROC4(F%,z1) : REM xyz coordinates BPUT #F%,b& : BPUT #F%,g& : BPUT#F%,r& : BPUT#F%,&FF : REM argb diffuse colour PROC4(F%,x2) : PROC4(F%,y2) : PROC4(F%,z2) : REM xyz coordinates BPUT #F%,b& : BPUT #F%,g& : BPUT#F%,r& : BPUT#F%,&FF : REM argb diffuse colour PROC4(F%,x3) : PROC4(F%,y3) : PROC4(F%,z3) : REM xyz coordinates BPUT #F%,b& : BPUT #F%,g& : BPUT#F%,r& : BPUT#F%,&FF : REM argb diffuse colour NEXT CLOSE #F% PROCinitrender ON CLOSE PROCcleanup : QUIT ON ERROR PROCcleanup : IF ERR=17 CHAIN @lib$+"../examples/tools/touchide" ELSE MODE 3 : PRINT REPORT$ : END ON MOVE IF @msg% <> 5 RETURN ELSE PROCcleanup : PROCinitrender : RETURN *TEMPO 133 *STEREO 1,127 *STEREO 2,42 *STEREO 3,-42 *STEREO 0,-127 SOUND 1,0,0,10 DIM snd{(3,50)a&,p&,d&}, p%(3), q%(3), vol%(3) DIM cmajor&(7), scale%(7), acc%(7), flat&(7), sharp&(7) cmajor&() = 88,96,52,60,68,72,80 flat&() = 0, &02, &12, &13, &1B, &5B, &5F, &7F sharp&() = 0, &A0, &A4, &E4, &EC, &ED, &FD, &FF vol%() = 1, 1, 1, 1 dur% = 24 : tempo% = 4 ENVELOPE 1,1,0,0,0,0,0,0,40,-8,-1,-1,119,89 REPEAT T$ = "" REPEAT READ R$ : IF R$="" REPEAT PROCpoll : UNTIL FALSE T$ += R$ : IF RIGHT$(T$) = "\" T$ = LEFT$(T$) + " " UNTIL RIGHT$(R$) <> "\" acc%() = scale%() clef% = 48 : voice% = 1 p%() = 0 : q%() = 0 WHILE T$<>"" I% = 1 : WHILE INSTR("0123456789",MID$(T$,I%,1)) I% += 1 : ENDWHILE IF I% > 1 dur% = VALLEFT$(T$,I%-1) : T$ = MID$(T$,I%) C$ = LEFT$(T$,1) : T$=MID$(T$,2) CASE C$ OF WHEN " ": WHEN "[": T$ = "" WHEN "T": acc%() = scale%() : clef% = 48 WHEN "S": acc%() = scale%() : clef% = 0 WHEN "V": acc%() = scale%() : voice% = ASC(T$) - &30 : T$=MID$(T$,2) voice% AND= 3 WHEN "K": key% = ASC(T$) - &30 : T$=MID$(T$,2) scale%() = 0 IF key% THEN key$ = LEFT$(T$,1) : T$=MID$(T$,2) CASE key$ OF WHEN "#": key& = sharp&(key%) WHEN "b","&": key& = flat&(key%) ENDCASE FOR I% = 0 TO 6 IF key& AND (2^I%) scale%(I%) = -4 : IF key& AND &80 scale%(I%) = +4 NEXT ENDIF acc%() = scale%() OTHERWISE Note% = INSTR("ABCDEFG$",C$)-1 IF Note% < 0 ERROR 100, "Unrecognised command "+C$ octave% = 0 REPEAT ok% = FALSE CASE LEFT$(T$,1) OF WHEN "#": acc%(Note%) = 4 : T$=MID$(T$,2) : ok% = TRUE WHEN "%": acc%(Note%) = 0 : T$=MID$(T$,2) : ok% = TRUE WHEN "&","b": acc%(Note%) =-4 : T$=MID$(T$,2) : ok% = TRUE WHEN "+": octave% += 48 : T$=MID$(T$,2) : ok% = TRUE WHEN "-": octave% -= 48 : T$=MID$(T$,2) : ok% = TRUE ENDCASE UNTIL NOT ok% ticks% = dur% / tempo% IF LEFT$(T$,1)="." ticks% = dur% / tempo% * 3/2 : T$=MID$(T$,2) IF LEFT$(T$,1)=":" ticks% = dur% / tempo% * 2/3 : T$=MID$(T$,2) pitch% = cmajor&(Note%) + acc%(Note%) + clef% + octave% IF Note% = 7 pitch% = 0 IF pitch% < 0 OR pitch% > 255 ERROR 100, "Pitch out of range: "+STR$pitch% IF ticks% < 0 OR ticks% > 254 ERROR 100, "Duration out of range: "+STR$ticks% snd{(voice%,p%(voice%))}.a& = vol%(voice%) snd{(voice%,p%(voice%))}.p& = pitch% snd{(voice%,p%(voice%))}.d& = ticks% p%(voice%) += 1 ENDCASE ENDWHILE WHILE ADVAL(-5)=0 OR ADVAL(-6)=0 OR ADVAL(-7)=0 OR ADVAL(-8)=0 PROCpoll : ENDWHILE IF p%(0)<>q%(0) OR p%(1)<>q%(1) OR p%(2)<>q%(2) OR p%(3)<>q%(3) THEN SOUND &300,0,0,0 : SOUND &301,0,0,0 : SOUND &302,0,0,0 : SOUND &303,0,0,0 PROCevent(0,0) : PROCevent(1,0) : PROCevent(2,0) : PROCevent(3,0) REPEAT stall% = TRUE FOR v% = 0 TO 3 IF q%(v%) < p%(v%) IF ADVAL(-5-v%) THEN stall% = FALSE IF snd{(v%,q%(v%))}.p& = 0 THEN SOUND v%+&1000,0,0,snd{(v%,q%(v%))}.d& ELSE SOUND v%,snd{(v%,q%(v%))}.a&,snd{(v%,q%(v%))}.p&,snd{(v%,q%(v%))}.d& ENDIF PROCevent(v%, snd{(v%,q%(v%))}.p&) q%(v%) += 1 ENDIF NEXT v% IF stall% PROCpoll UNTIL p%(0)=q%(0) AND p%(1)=q%(1) AND p%(2)=q%(2) AND p%(3)=q%(3) ENDIF UNTIL FALSE END REM Poll the current sound queue status; if the queue is not empty REM a sound is currently playing, in which case we can update the REM visible keyboard state: DEF PROCpoll LOCAL A%, I%, P% PRIVATE T%, p&() : DIM p&(3) FOR I% = 0 TO 3 A% = ADVAL(-5-I%) DIV 4 : REM Free slots IF A% = 4 THEN IF p&(I%) T(p&(I%)-1) = 0 p&(I%) = 0 ELSE CASE I% OF WHEN 0: P% = Q1&(3-A%) DIV 4 WHEN 1: P% = Q2&(3-A%) DIV 4 WHEN 2: P% = Q3&(3-A%) DIV 4 WHEN 3: P% = Q4&(3-A%) DIV 4 ENDCASE IF p&(I%) T(p&(I%)-1) = 0 IF P% T(P%-1) = RAD(3) p&(I%) = P% ENDIF NEXT IF T% = 0 T% = TIME IF TIME < T% WAIT 0 ELSE T% += 2 : PROCanimate ENDPROC REM Keep a copy of all SOUND events in our own private queues: DEF PROCevent(K%, P%) CASE K% OF WHEN 0: Q1&() = P%,Q1&(0),Q1&(1),Q1&(2) WHEN 1: Q2&() = P%,Q2&(0),Q2&(1),Q2&(2) WHEN 2: Q3&() = P%,Q3&(0),Q3&(1),Q3&(2) WHEN 3: Q4&() = P%,Q4&(0),Q4&(1),Q4&(2) ENDCASE ENDPROC DEF PROCanimate LOCAL e(), a() DIM e(2), a(2) a() = 0, 0, 1.0 e() = 4*SIN(TIME/1000), 5, 7+3*SIN(TIME/2000) PROC_render(D3D%, &FF7F7FFF, 0, L%(), 63, M%(), T%(), B%(), N%(), F%(), S%(), \ \ P(), T(), R(), X(), Y(), Z(), e(), a(), PI/4, @vdu%!208/@vdu%!212, 1, 1000, 0) ENDPROC DEF PROCinitrender LOCAL whiteb%, whitef%, whiten%, whites%, blackb%, blackf%, blackn%, blacks% LOCAL I%, x IF POS REM SDL thread sync VDU 26 IF INKEY$(-256)="W" D3D% = FN_initd3d(@hwnd%, 1, 0) ELSE D3D% = FN_initgl(@hwnd%, 1, 0) IF D3D% = 0 ERROR 100, "Can't initialise 3D library" REM. Load 3D objects: whiteb% = FN_load3d(D3D%, @tmp$+"white.fvf", whiten%, whitef%, whites%) IF whiteb% = 0 ERROR 100, "Can't load white.fvf" blackb% = FN_load3d(D3D%, @tmp$+"black.fvf", blackn%, blackf%, blacks%) IF blackb% = 0 ERROR 100, "Can't load black.fvf" REM Create keyboard: x = 18 * 0.254 FOR I% = 0 TO 62 CASE I% MOD 12 OF WHEN 1,3,6,8,10: REM Black key: B%(I%) = blackb% N%(I%) = blackn% F%(I%) = blackf% S%(I%) = blacks% X(I%) = x + 0.127 OTHERWISE: REM White key: B%(I%) = whiteb% N%(I%) = whiten% F%(I%) = whitef% S%(I%) = whites% X(I%) = x x -= 0.254 ENDCASE NEXT ENDPROC DEF PROCcleanup B%(0) += 0 : IF B%(0) PROC_release(B%(0)) : B%(0) = 0 B%(1) += 0 : IF B%(1) PROC_release(B%(1)) : B%(1) = 0 D3D% += 0 : IF D3D% PROC_release(D3D%) : D3D% = 0 ENDPROC DEF PROC4(F%,a) : LOCAL A% : A%=FN_f4(a) BPUT #F%,A% : BPUT #F%,A%>>8 : BPUT#F%,A%>>16 : BPUT#F%,A%>>24 ENDPROC REM. White key (6 faces, 12 triangles) REM. x1, y1, z1, x2, y2, z2, x3, y3, z3, r, g, b: REM Left face: DATA -0.12, +0.10, 1.95, -0.12, -0.10, 1.95, -0.12, -0.10, 0.50, &80, &80, &80 DATA -0.12, -0.10, 0.50, -0.12, +0.10, 0.50, -0.12, +0.10, 1.95, &80, &80, &80 REM Right face: DATA +0.12, -0.10, 1.95, +0.12, +0.10, 1.95, +0.12, -0.10, 0.50, &80, &80, &80 DATA +0.12, +0.10, 0.50, +0.12, -0.10, 0.50, +0.12, +0.10, 1.95, &80, &80, &80 REM Top face: DATA +0.12, +0.10, 1.95, -0.12, +0.10, 1.95, -0.12, +0.10, 0.50, &FF, &FF, &F0 DATA -0.12, +0.10, 0.50, +0.12, +0.10, 0.50, +0.12, +0.10, 1.95, &FF, &FF, &F0 REM Bottom face: DATA -0.12, -0.10, 1.95, +0.12, -0.10, 1.95, -0.12, -0.10, 0.50, &FF, &FF, &F0 DATA +0.12, -0.10, 0.50, -0.12, -0.10, 0.50, +0.12, -0.10, 1.95, &FF, &FF, &F0 REM Front face: DATA +0.12, +0.10, 1.95, +0.12, -0.10, 1.95, -0.12, -0.10, 1.95, &CF, &CF, &C0 DATA -0.12, -0.10, 1.95, -0.12, +0.10, 1.95, +0.12, +0.10, 1.95, &CF, &CF, &C0 REM Back face: DATA +0.12, -0.10, 0.50, +0.12, +0.10, 0.50, -0.12, -0.10, 0.50, &FF, &FF, &F0 DATA -0.12, +0.10, 0.50, -0.12, -0.10, 0.50, +0.12, +0.10, 0.50, &FF, &FF, &F0 REM. Black key (7 faces, 16 triangles) REM. x1, y1, z1, x2, y2, z2, x3, y3, z3, r, g, b: REM Left face: DATA -0.06, +0.20, 1.37, -0.06, +0.10, 1.45, -0.06, +0.20, 0.49, &00, &00, &00 DATA -0.06, +0.20, 0.49, -0.06, +0.10, 1.45, -0.06, 0.00, 0.49, &00, &00, &00 DATA -0.06, 0.00, 0.49, -0.06, +0.10, 1.45, -0.06, 0.00, 1.45, &00, &00, &00 REM Right face: DATA +0.06, +0.10, 1.45, +0.06, +0.20, 1.37, +0.06, +0.20, 0.49, &00, &00, &00 DATA +0.06, +0.10, 1.45, +0.06, +0.20, 0.49, +0.06, 0.00, 0.49, &00, &00, &00 DATA +0.06, +0.10, 1.45, +0.06, 0.00, 0.49, +0.06, 0.00, 1.45, &00, &00, &00 REM Top face: DATA +0.06, +0.20, 1.37, -0.06, +0.20, 1.37, -0.06, +0.20, 0.49, &00, &00, &00 DATA -0.06, +0.20, 0.49, +0.06, +0.20, 0.49, +0.06, +0.20, 1.37, &00, &00, &00 REM Bottom face: DATA -0.06, 0.00, 1.45, +0.06, 0.00, 1.45, -0.06, 0.00, 0.49, &00, &00, &00 DATA +0.06, 0.00, 0.49, -0.06, 0.00, 0.49, +0.06, 0.00, 1.45, &00, &00, &00 REM Front face: DATA +0.06, +0.10, 1.45, +0.06, 0.00, 1.45, -0.06, 0.00, 1.45, &00, &00, &00 DATA -0.06, 0.00, 1.45, -0.06, +0.10, 1.45, +0.06, +0.10, 1.45, &00, &00, &00 REM Slant face: DATA +0.06, +0.20, 1.37, +0.06, +0.10, 1.45, -0.06, +0.10, 1.45, &00, &00, &00 DATA -0.06, +0.10, 1.45, -0.06, +0.20, 1.37, +0.06, +0.20, 1.37, &00, &00, &00 REM Back face: DATA +0.06, 0.00, 0.49, +0.06, +0.20, 0.49, -0.06, 0.00, 0.49, &00, &00, &00 DATA -0.06, +0.20, 0.49, -0.06, 0.00, 0.49, +0.06, +0.20, 0.49, &00, &00, &00 DATA [ Note: Do not play this piece fast. DATA [ It is never right to play Ragtime fast..........Composer. DATA K0 REM DATA V1W4 V2W7 V3W2 V4W4 REM DATA =140 DATA TV1 16D++E++C++32A+16B+32G+ TV2 16D+E+C+32A16B32G DATA TV1 16D+E+C+32A16B32G SV3 16D+E+C+32A16B32G DATA TV1 16DEC32A-16B-A-A-b SV3 16DEC32A-16B-A-A-b DATA TV1 32$$G+16DD# TV2 32$$B$ SV3 32G$D-B SV4 32G-$G-G REM DATA V1W4 V2W5 V3W5 V4W5 REM DATA PB DATA TV1 16E32C+16E32C+16EC+ SV2 32CC+GC+ SV3 32$GG-Bb SV4 32$E$G \ DATA TV1 80$16E+F+F#+ TV2 80$16C+D+D#+ SV3 32FC+EC+ SV4 32F-AE-G DATA TV1 16G+E+F+32G+16D+32F+ TV2 16E+C+D+32E+16B32D+ SV3G-C+G-B SV4$E$F DATA TV1 96E+16DD# TV2 96C+ SV3 32CC+C+B SV4 $EEG DATA TV1 16E32C+16E32C+16EC+ SV2 32CC+GC+ SV3 32$GG-Bb SV4 32$E$G \ DATA TV1 96$16A+G+ TV2 96$16C+C+ SV3 32FC+EEb SV4 32F-AE-Eb- DATA TV1 16F#+A+C++32E++16D++C++A+ TV2 16C+AC+32E+16D+C+A \ DATA SV3 32DC+DC+ SV4 32D-F#$F DATA TV1 96D++16DD# TV2 96F%+ SV3 32BGAB SV4 32GG-A-B- REM DATA PC DATA TV1 16E32C+16E32C+16E SV3 32CC+G16C+ SV4 32$EG-16G DATA TV1 96C+16E+F+F#+ TV2 96$16C+D+D#+ SV3 16C+32FC+EC+ SV4 16G32F-AE-G DATA TV1 16G+E+F+32G+16D+32F+ TV2 16E+C+D+32E+16B32D+ SV3 32G-GG-B SV4$E$G DATA TV1 96E+16C++D++ TV2 96C+16C+D+ SV3 32CGC+ SV4 32$EG REM DATA ;PAGE 5 DATA TV1 16E++C++D++32E++16C++D++C++ TV2 16E+C+D+32E+16C+D+C+ \ DATA SV3 32C+E+BbE+ SV4 32CGBb-G DATA TV1 16E++C++D++32E++16C++D++C++ TV2 16E+C+D+32E+16C+D+C+ \ DATA SV3 32AF+AbF+ SV4 32A-AAb-A DATA TV1 16E++C++D++32E++16B+32D++ TV2 16E+C+D+32E+16B32D+ \ DATA SV3 32GE+G-B SV4 32G-GG-G REM DATA PD DATA TV1 96C++16DD# TV2 96C+ SV3 32C+GAB SV4 32CG-A-B- REM DATA PE RB RC REM DATA PB DATA TV1 16E32C+16E32C+16EC+ SV2 32CC+GC+ SV3 32$GG-Bb SV4 32$E$G \ DATA TV1 80$16E+F+F#+ TV2 80$16C+D+D#+ SV3 32FC+EC+ SV4 32F-AE-G DATA TV1 16G+E+F+32G+16D+32F+ TV2 16E+C+D+32E+16B32D+ SV3G-C+G-B SV4$E$F DATA TV1 96E+16DD# TV2 96C+ SV3 32CC+C+B SV4 $EEG DATA TV1 16E32C+16E32C+16EC+ SV2 32CC+GC+ SV3 32$GG-Bb SV4 32$E$G \ DATA TV1 96$16A+G+ TV2 96$16C+C+ SV3 32FC+EEb SV4 32F-AE-Eb- DATA TV1 16F#+A+C++32E++16D++C++A+ TV2 16C+AC+32E+16D+C+A \ DATA SV3 32DC+DC+ SV4 32D-F#$F DATA TV1 96D++16DD# TV2 96F%+ SV3 32BGAB SV4 32GG-A-B- REM DATA PC DATA TV1 16E32C+16E32C+16E SV3 32CC+G16C+ SV4 32$EG-16G DATA TV1 96C+16E+F+F#+ TV2 96$16C+D+D#+ SV3 16C+32FC+EC+ SV4 16G32F-AE-G DATA TV1 16G+E+F+32G+16D+32F+ TV2 16E+C+D+32E+16B32D+ SV3 32G-GG-B SV4$E$G DATA TV1 96E+16C++D++ TV2 96C+16C+D+ SV3 32CGC+ SV4 32$EG REM DATA ;PAGE 5 DATA TV1 16E++C++D++32E++16C++D++C++ TV2 16E+C+D+32E+16C+D+C+ \ DATA SV3 32C+E+BbE+ SV4 32CGBb-G DATA TV1 16E++C++D++32E++16C++D++C++ TV2 16E+C+D+32E+16C+D+C+ \ DATA SV3 32AF+AbF+ SV4 32A-AAb-A DATA TV1 16E++C++D++32E++16B+32D++ TV2 16E+C+D+32E+16B32D+ \ DATA SV3 32GE+G-B SV4 32G-GG-G REM DATA PF DATA TV1 80C++16E+F+F#+ TV2 80C+16EFF# SV3 32C+G+C SV4 32CG-C- REM DATA PG DATA TV1 32G+16A+32G+16E+F+F#+ TV2 32G16A32G16EFF# SV3 32CC+G-C+ SV4 32C-GG-G DATA TV1 32G+16A+32G+16E+C+G TV2 32G16A32G16E+C+G SV3 32CGFG SV4 32E+GE+G DATA TV1 16ABC+D+E+D+C+D+ TV2 16ABC+D+E+D+C+D+ SV3 32FC+FC+ SV4 32F-AFAb DATA TV1 16GE+F+G+A+G+E+F+ TV2 16GE+F+G+A+G+E+F+ SV3 32EC+G-C+ SV4 32EGG-G DATA TV1 32G+16A+32G+16E+F+F#+ TV2 32G16A32G16EFF# SV3 32CC+G-C+ SV4 32CGG-G DATA TV1 32G+16A+32G+16G+A+A#+ TV2 32G16A32G16G+A+A#+ SV3 32CC+EEb SV4 CGEEb DATA TV1 16B+16B+$B+$A+F#+D+ TV2 16D+32D+C+16A+C+D+ SV3 32DBDC+ SV4 32DGDA DATA TV1 80G+16E+F+F#+ TV2 80G+16EFF# SV3 32BF%ED SV4 32GF%-E-D- REM DATA PH DATA TV1 32G+16A+32G+16E+F+F#+ TV2 32G16A32G16EFF# SV3 32CC+G-C+ SV4 C-GG-G DATA TV1 32G+16A+32G+16E+C+G TV2 32G16A32G16E+C+G SV3 32CGFG SV4 32E+GE+G DATA TV1 16ABC+D+E+D+C+D+ TV2 16ABC+D+E+D+C+D+ SV3 32F-C+FC+ SV4 32F-AFAb DATA TV1 80C+16GF#G TV2 80C+16GF#G SV3 32EC+CC+ SV4 32EGCBb DATA TV1 32C+16A32C+16AC+A TV2 32C+16A32C+16AC+A SV3 32F+F+D+D+ SV4C+C+AA DATA TV1 16GC+E+32G+16E+C+G TV2 16GC+E+32G+16E+C+G SV3 32C+C+C+C+ SV4GGGG DATA TV1 32AC+16E+32D+16C+ TV2 32F#F16F%32F16E SV3 32C+ABB SV4 32DDGG \ REM DATA PI DATA TV1 80$16E+F+F#+ TV2 80$16EFF# SV3 32C+GED SV4 32CG-E-D- REM DATA PJ RG RH REM DATA PG DATA TV1 32G+16A+32G+16E+F+F#+ TV2 32G16A32G16EFF# SV3 32CC+G-C+ SV4 32C-GG-G DATA TV1 32G+16A+32G+16E+C+G TV2 32G16A32G16E+C+G SV3 32CGFG SV4 32E+GE+G DATA TV1 16ABC+D+E+D+C+D+ TV2 16ABC+D+E+D+C+D+ SV3 32FC+FC+ SV4 32F-AFAb DATA TV1 16GE+F+G+A+G+E+F+ TV2 16GE+F+G+A+G+E+F+ SV3 32EC+G-C+ SV4 32EGG-G DATA TV1 32G+16A+32G+16E+F+F#+ TV2 32G16A32G16EFF# SV3 32CC+G-C+ SV4 32CGG-G DATA TV1 32G+16A+32G+16G+A+A#+ TV2 32G16A32G16G+A+A#+ SV3 32CC+EEb SV4 CGEEb DATA TV1 16B+16B+$B+$A+F#+D+ TV2 16D+32D+C+16A+C+D+ SV3 32DBDC+ SV4 32DGDA DATA TV1 80G+16E+F+F#+ TV2 80G+16EFF# SV3 32BF%ED SV4 32GF%-E-D- REM DATA PH DATA TV1 32G+16A+32G+16E+F+F#+ TV2 32G16A32G16EFF# SV3 32CC+G-C+ SV4 C-GG-G DATA TV1 32G+16A+32G+16E+C+G TV2 32G16A32G16E+C+G SV3 32CGFG SV4 32E+GE+G DATA TV1 16ABC+D+E+D+C+D+ TV2 16ABC+D+E+D+C+D+ SV3 32F-C+FC+ SV4 32F-AFAb DATA TV1 80C+16GF#G TV2 80C+16GF#G SV3 32EC+CC+ SV4 32EGCBb DATA TV1 32C+16A32C+16AC+A TV2 32C+16A32C+16AC+A SV3 32F+F+D+D+ SV4C+C+AA DATA TV1 16GC+E+32G+16E+C+G TV2 16GC+E+32G+16E+C+G SV3 32C+C+C+C+ SV4GGGG DATA TV1 32AC+16E+32D+16C+ TV2 32F#F16F%32F16E SV3 32C+ABB SV4 32DDGG \ REM DATA PK DATA TV1 96$16DD# TV2 96$16DD# SV3 32C+GC SV4 32CG-C- REM DATA ;PAGE 6 DATA TV1 16E32C+16E32C+16EC+ TV2 16E32C+16E32C+16EC+ SV3 32CGGBb SV4 CEG-G \ DATA TV1 80$16E+F+F#+ TV2 80$16C+D+D#+ SV3 32FC+EC+ SV4 32F-AE-G DATA TV1 16G+E+F+32G+16D+32F+ TV2 16E+C+D+32E+16B32D+ \ DATA SV3 32G-GG-G SV4 32G-EG-F DATA TV1 96E+16DD# TV2 96C+16DD# SV3 32CGGB SV4 32CEEG DATA TV1 16E32C+16E32C+16EC+ TV2 16E32C+16E32C+16EC+ SV3 32CGGBb SV4 CEG-G \ DATA TV1 96$16A+G+ TV2 96$16AG SV3 32FC+EEb SV4 32F-AE-Eb- DATA TV1 16F#+A+C++32E++16D++C++A+ TV2 16F#AC+32E+16D+C+A SV3 32DADASV4D-F#DF DATA TV1 96D++16DD# TV2 96D+16DD# SV3 32BGAB SV4 32GG-A-B- REM DATA PL DATA TV1 16E32C+16E32C+16EC+ TV2 16E32C+16E32C+16EC+ SV3 32CGGBb SV4 CEG-G \ DATA TV1 80$16E+F+F#+ TV2 96$16D+D#+ SV3 32FC+EC+ SV4 F-AE-G DATA TV1 16G+E+F+32G+16D+32F+ TV2 16E+C+D+32E+16B32D+ SV3 32G-GG-G SV4 G-EG-F DATA TV1 96E+16C+D+ TV2 96C+16C+D+ SV3 32CGC+ SV4 32CEG DATA TV1 16E+C+D+32E+16C+D+C+ TV2 16E+C+D+32E+16C+D+C+ SV3 32C+E+BbC+V4CGBb-G DATA TV1 16E+C+D+32E+16C+D+C+ TV2 16E+C+D+32E+16C+D+C+ SV3 32AC+AbC+V4A-AAb-A DATA TV1 16G+E+F+32G+16D+32F+ TV2 16E+C+D+32E+16B32D SV3 32GC+G-BV4G-GG-G DATA TV1 32E+$E+$ TV2 32C+$C+ SV3 32C+GC SV4 32CG-C- DATA K1b REM DATA PM DATA TV1 16A+G#+64A+32C++ TV2 16F+G#+64F+32F+ SV3 32F-F+CF+ SV4 32F-ACA DATA TV1 128D++ TV2 16$$BABC+32D+ SV3 B-F+FF+ SV4 B-BFB DATA TV1 16F+E+64F+32A+ TV2 16D+E+64D+32D+ SV3 32D-F+A-F+ SV4 32D-AA-A DATA TV1 112B+16G+ TV2 32$16GF#GA32B SV3 32G-D+DD+ SV4 32G-BDB DATA TV1 32D+16G+32D+16G+32D+ TV2 32D+16G+32D+16G+32D+ SV3 32BD+GG#V4B-BG-G#- DATA TV1 64C+F+ TV2 64C+F+ SV3 32AF+DF+ SV4 32A-ADA DATA TV1 16E+G#+B%+32E++16D++B%+C++ TV2 16E+G#+B%+32E++16D++B%+C++ \ DATA SV3 32EE+G#E+ SV4 32EB%G#B REM DATA PN DATA TV1 64A+Bb+ TV2 64A+Bb+ SV3 64E+32E+C SV4 64A32G%C DATA TV1 16A+G#+64A+32C++ TV2 16F+G#+64F+32F+ SV3 32F-F+CF+ SV4 32F-ACA DATA TV1 128D++ TV2 16$$BABC+32D+ SV3 32B-F+FF+ SV4 32B-BFB DATA TV1 16F+E+64F+32A+ TV2 16D+E+64D+16D+ SV3 32D-F+A-F+ SV4 32D-AA-A DATA TV1 112B+16G+ TV2 16$$GF#GA32B SV3 32G-D+DD+ SV4 32GBDB REM DATA ;PAGE 7 DATA TV1 32D+16G+32D+16G+32D+ TV2 32D+16G+32D+16G+32D+ SV3 32BD+GG#V4B-BG-G#- DATA TV1 64C+48F+16F+ TV2 64C+48G#16F+ SV3 16AFED%64Db SV4 16A-F-E-D%-64Db- DATA TV1 16A+32C++G+16C+D+E+ TV2 16A48C+32C+ SV3 32CF+C+C SV4 32C-ACC- REM DATA PO DATA TV1 32F+16B%C+D+E+F+G+ TV2 32A16B%C+D+E+F+G+ SV3 32F SV4 32F- REM DATA PP RM RN REM DATA PM DATA TV1 16A+G#+64A+32C++ TV2 16F+G#+64F+32F+ SV3 32F-F+CF+ SV4 32F-ACA DATA TV1 128D++ TV2 16$$BABC+32D+ SV3 B-F+FF+ SV4 B-BFB DATA TV1 16F+E+64F+32A+ TV2 16D+E+64D+32D+ SV3 32D-F+A-F+ SV4 32D-AA-A DATA TV1 112B+16G+ TV2 32$16GF#GA32B SV3 32G-D+DD+ SV4 32G-BDB DATA TV1 32D+16G+32D+16G+32D+ TV2 32D+16G+32D+16G+32D+ SV3 32BD+GG#V4B-BG-G#- DATA TV1 64C+F+ TV2 64C+F+ SV3 32AF+DF+ SV4 32A-ADA DATA TV1 16E+G#+B%+32E++16D++B%+C++ TV2 16E+G#+B%+32E++16D++B%+C++ \ DATA SV3 32EE+G#E+ SV4 32EB%G#B REM DATA PN DATA TV1 64A+Bb+ TV2 64A+Bb+ SV3 64E+32E+C SV4 64A32G%C DATA TV1 16A+G#+64A+32C++ TV2 16F+G#+64F+32F+ SV3 32F-F+CF+ SV4 32F-ACA DATA TV1 128D++ TV2 16$$BABC+32D+ SV3 32B-F+FF+ SV4 32B-BFB DATA TV1 16F+E+64F+32A+ TV2 16D+E+64D+16D+ SV3 32D-F+A-F+ SV4 32D-AA-A DATA TV1 112B+16G+ TV2 16$$GF#GA32B SV3 32G-D+DD+ SV4 32GBDB REM DATA ;PAGE 7 DATA TV1 32D+16G+32D+16G+32D+ TV2 32D+16G+32D+16G+32D+ SV3 32BD+GG#V4B-BG-G#- DATA TV1 64C+48F+16F+ TV2 64C+48G#16F+ SV3 16AFED%64Db SV4 16A-F-E-D%-64Db- DATA TV1 16A+32C++G+16C+D+E+ TV2 16A48C+32C+ SV3 32CF+C+C SV4 32C-ACC- REM DATA PQ DATA TV1 32F+$F++$ TV2 32A$F+ SV3 32F$F- SV4 32F-$F- DATA K0 REM DATA PR DATA TV1 32C+16A32C+16AC+A TV2 32C+16A32C+16AC+A SV3 32C+C+C#+C#+ V4FFF#F# DATA TV1 16GC+E+32G+16E+C+G TV2 16GC+E+32G+16E+C+G SV3 32C+C+C+C+ V4GGGG DATA TV1 32AC+16E+32D+16C+ TV2 32F#F16F%32F16E SV3 32C+ABB SV4 32DDGG \ DATA TV1 64$32C++$ TV2 64$32E+ SV3 64C+32C SV4 64C32C- REM DATA PS DATA TV1 32F16E32F16E32F TV2 32D16C#32D16C#32D SV3 32F-AA-A SV4 32F-FA-F DATA TV1 16$AD+AC+D+C+A TV2 16$AFAC+D+C+A SV3 32F-AA-A SV4 32F-FA-F DATA TV1 32G16F#32G16F32G TV2 32E16D#32E16D32E SV3 32CC+G-C+ V4 CEG-E DATA TV1 16$C+E+C+D+E+D+C+ TV2 16$C+GC+D+E+D+C+ SV3 32CC+G-C+ SV4 32CEG-E REM DATA PT DATA TV1 32D+16C#+32D+16C+32D+ TV2 32B16A#32B16A32B SV3 32G-BB-B V4 G-FB-F DATA TV1 16$F+A+F+G+A+G+F+ TV2 $F+BF+G+A+G+F+ SV3 32G-BB-B SV4 32G-FDF DATA TV1 16C++C++64C++32A+ V2 16C+C+32C+$16C+$ SV3 32F#64F32F V4 32D#64D32D DATA TV1 32G+16GG16G$G$ TV2 32C+16EE16E$E$ SV3 32C+ SV4 32E REM DATA PU RS REM DATA PS DATA TV1 32F16E32F16E32F TV2 32D16C#32D16C#32D SV3 32F-AA-A SV4 32F-FA-F DATA TV1 16$AD+AC+D+C+A TV2 16$AFAC+D+C+A SV3 32F-AA-A SV4 32F-FA-F DATA TV1 32G16F#32G16F32G TV2 32E16D#32E16D32E SV3 32CC+G-C+ V4 CEG-E DATA TV1 16$C+E+C+D+E+D+C+ TV2 16$C+GC+D+E+D+C+ SV3 32CC+G-C+ SV4 32CEG-E REM DATA PV DATA TV1 16AG#A32G%+F+16C+ TV2 16AG#16A16A$A$A SV3 32FDEF SV4 32F-D-E-F- DATA TV1 16E+D#+E+32A+16C++G+E+ SV2 16GD#+E+32A+16C++G+E+ SV3 32GE+D+E+ \ DATA SV4 32G-GF#G DATA TV1 16C+$C+$16E+32D+16E+ TV2 32F#F16F%32F16E SV3 32ADGB V4 A-D-G-B- REM DATA PW DATA TV1 32E+16GG16G$G$ TV2 32E16EE16E$E$ SV3 32C+ SV4 32C REM DATA PX RS RT RS RV REM DATA PS DATA TV1 32F16E32F16E32F TV2 32D16C#32D16C#32D SV3 32F-AA-A SV4 32F-FA-F DATA TV1 16$AD+AC+D+C+A TV2 16$AFAC+D+C+A SV3 32F-AA-A SV4 32F-FA-F DATA TV1 32G16F#32G16F32G TV2 32E16D#32E16D32E SV3 32CC+G-C+ V4 CEG-E DATA TV1 16$C+E+C+D+E+D+C+ TV2 16$C+GC+D+E+D+C+ SV3 32CC+G-C+ SV4 32CEG-E REM DATA PT DATA TV1 32D+16C#+32D+16C+32D+ TV2 32B16A#32B16A32B SV3 32G-BB-B V4 G-FB-F DATA TV1 16$F+A+F+G+A+G+F+ TV2 $F+BF+G+A+G+F+ SV3 32G-BB-B SV4 32G-FDF DATA TV1 16C++C++32C++$32A+ V2 16C+C+32C+$16C+$ SV3 32F#64F32F V4 32D#64D32D DATA TV1 32G+16GG16G$G$ TV2 32C+16EE16E$E$ SV3 32C+ SV4 32E REM DATA PS DATA TV1 32F16E32F16E32F TV2 32D16C#32D16C#32D SV3 32F-AA-A SV4 32F-FA-F DATA TV1 16$AD+AC+D+C+A TV2 16$AFAC+D+C+A SV3 32F-AA-A SV4 32F-FA-F DATA TV1 32G16F#32G16F32G TV2 32E16D#32E16D32E SV3 32CC+G-C+ V4 CEG-E DATA TV1 16$C+E+C+D+E+D+C+ TV2 16$C+GC+D+E+D+C+ SV3 32CC+G-C+ SV4 32CEG-E REM DATA PV DATA TV1 16AG#A32G%+F+16C+ TV2 16AG#16A16A$A$A SV3 32FDEF SV4 32F-D-E-F- DATA TV1 16E+D#+E+32A+16C++G+E+ SV2 16GD#+E+32A+16C++G+E+ SV3 32GE+D+E+ \ DATA SV4 32G-GF#G DATA TV1 16C+$C+$16E+32D+16E+ TV2 32F#F16F%32F16E SV3 32ADGB V4 A-D-G-B- REM DATA PY DATA TV1 32C+$C++$ TV2 64E32C+ SV3 32C+GC SV4 32CG-C- DATA