1 REM +++++++++++++++++++++++++++++++ 2 REM ! Program .... MUSINT1.BAS 3 REM ! Utg}va 85-08-06 4 REM ! av David Andersson <5201> 5 REM ! Minne 16 Kbytes 6 REM ! Screening TES 7 REM +++++++++++++++++++++++++++++++ 170 REM 180 REM PROGRAMMET SPELAR MUSIK I 190 REM H\GTALAREN, [VEN N[R MAN 200 REM INTE K\R PROGRAMMET. 210 REM ST[NG AV MED CALL(62258). 220 REM 230 REM DATASATSERNA INNEH]LLER NOTERNA 240 REM F\R "THE ENTERTAINER". 250 REM 260 REM MASKINKOD LADDAS P] ADRESSERNA 270 REM 60000..62500 (FLYTTAR STACKEN). 280 REM 290 REM =============================== 300 REM 310 REM 320 REM 500 REM BESKRIVNING AV DATASATSER 510 REM ------------------------------- 520 REM Tonh|jder i fyra oktaver; 530 REM (1 l{gst, 4 h|gst) 540 REM 1. c >d >e >f >g >a >h 580 REM 590 REM "+" h|jer en halvton, ex. D+,4 600 REM "-" s{nker en halvton,ex. a-,8 610 REM "_" g|r att tonen flyter ihop 620 REM med n{sta, ex. e_,2,f,2 630 REM "!" g|r tonen distinkt dvs den 640 REM blir kortare, ex. C!,2 650 REM 660 REM ------------------------------- 670 REM Paus; 680 REM enbart "-" anger paus,ex. -,8 690 REM 700 REM ------------------------------- 710 REM Tidv{rden; 720 REM siffran efter kommat (efter 730 REM tonh|jd eller paus) anger 740 REM tidv{rde. 750 REM 760 REM helton=1,halvton=2,kvartston=4 770 REM }ttondelston=8 osv., ex. C,8 780 REM 790 REM ------------------------------- 800 REM Speciella data; 810 REM _ s{tt p}/av hopflytning 820 REM _,0 toner ska flyta ihop. 830 REM _,1 distinkta toner. 840 REM REPEAT slut markering, 850 REM REPEAT,0 sluta spela. 860 REM REPEAT,1 play it again. 870 REM U s{tter OUT 6,X koden, 880 REM ex. U,121 890 REM T s{tt takter/minut 900 REM ex. L,40 910 REM ------------------------------- 920 REM 1000 REM DATASATSER 1010 DATA T,40,_,0,U,121 1030 DATA >d,8,>e,8,>c,8,a,4,h,8,g,4 1040 DATA d,8,e,8,c,8,A,4,H,8,G,4 1050 DATA d,8,e,8,c,8,A,4,H,8,A,8,A-,8 1060 DATA G,2,H,4,_,1,U,121,d,8,d+,8 1070 DATA e,8,>c,4,e,8,>c,4,e,8,>c_,8 1080 DATA >c_,2,-,8,>c,8,>d,8,>d+,8 1090 DATA >e,8,>c,8,>d,8,>e,4,h,8,>d,4 1100 DATA >c!,1.333,d,8,d+,8 1110 DATA e,8,>c,4,e,8,>c,4,e,8,>c_,8 1120 DATA >c!,1.333,a,8,g,8 1130 DATA f+,8,a,8,>c,8,>e,4,>d,8,>c,8,a,8 1140 DATA >d_,2,-,4,d,8,d+,8 1150 DATA e,8,>c,4,e,8,>c,4,e,8,>c_,8 1160 DATA >c_,2,-,8,>c,8,>d,8,>d+,8 1170 DATA >e,8,>c,8,>d,8,>e,4,h,8,>d,4 1180 DATA >c!,1.333,>c,8,>d,8 1190 DATA >e,8,>c,8,>d,8,>e,4,>c,8,>d,8,>c,8 1200 DATA >e,8,>c,8,>d,8,>e,4,>c,8,>d,8,>c,8 1210 DATA >e,8,>c,8,>d,8,>e,4,>H,8,>d,4 1220 DATA >c_,2,-,8,_,0,e,8,f,8,f+,8 1230 DATA g,4,a,8,g,4,e,8,f,8,f+,8 1240 DATA g,4,a,8,g,4,>e,8,>c,8,g,8 1250 DATA a,8,h,8,>c,8,>d,8,>e,8,>d,8,>c,8,>d,8 1260 DATA g,8,e,8,f,8,g,8,a,8,g,8,e,8,f,8 1270 DATA g,4,a,8,g,4,e,8,f,8,f+,8 1280 DATA g,4,a,8,g,4,g,8,a,8,a+,8 1290 DATA h,8,h,4,h,4,a,8,f+,8,d,8 1300 DATA g_,2,-,8,e,8,f,8,f+,8 1310 DATA g,4,a,8,g,4,e,8,f,8,f+,8 1320 DATA g,4,a,8,g,4,>e,8,>c,8,g,8 1330 DATA a,8,h,8,>c,8,>d,8,>e,8,>d,8,>c,8,>d,8 1340 DATA >c_,2,-,8,_,1,g,8,f+,8,g,8 1350 DATA >c,4,a,8,>c,4,a,8,>c,8,a,8 1360 DATA g,8,>c,8,>e,8,>g,4,>e,8,>c,8,g,8 1370 DATA a,4,>c,4,>e,8,>d,4,>c_,8 1380 DATA >c!,1 1390 DATA -,1,-,1,-,1 1400 DATA REPEAT,1 2000 REM INITIERINGAR 2010 DIM F%(48%) : REM TONSKALA 2020 ; CHR$(12%)'**************** MUSIK ****************' 2030 ; 2040 M0%=62258% : REM MASKINKODSADRESS 2050 A0%=60000% : REM F\RSTA ADRESS F\R MUSIK LISTA I MINNET 2060 A9%=62258% : REM MAX ADRESS MUSIK LISTA 2070 S%=PEEK(65063%)+SWAP%(PEEK(65064%)) : REM STACK 2080 IF PEEK(65056%)+SWAP%(PEEK(65057%))+100%>S% ; 'MINNET FULLT ([NDRA BOFA ELLER RESET)' : STOP 2090 IF S%<>A0% OR PEEK(A9%)<>24% IF S%0% AND B1%<40% ; CHR$(23%)STRING$(39%-B1%,B1%+33%)TAB(39%)CHR$(13%); 3150 GOTO 3100 3160 END 4000 REM DEFINIERA TONSKALAN 4010 RESTORE 4050 4020 FOR F%=1% TO 48% 4030 READ F%(F%) 4040 NEXT F% 4050 REM TONSKALAN 4060 DATA 238,226,212,200,190,180,168,159,150,142,134,126 4070 DATA 119,113,106,100,095,090,084,080,075,071,067,063 4080 DATA 060,056,053,050,047,045,042,040,038,036,034,032 4090 DATA 030,028,027,025,024,022,021,020,019,018,017,016 4100 RETURN 5000 REM KONVERTERA DATASATSER TILL MUSIKLISTA 5010 U1%=121% : REM DEFAULT OUT-KOD 5020 D0=7812*60/40 : REM DEFAULT TAKT 5030 P0%=0% : REM DEFAULT DISTINKTA TONER 5100 REM LOOP 5110 IF A%+15%>A9% ; 'F\R L]NG MUSIKLISTA (TA BORT DATASATSER ELLER [NDRA A0%)' : GOTO 5600 5120 READ F$,D 5130 ; F$' '; 5140 REM KOLLA SPECIALKOMMANDON 5150 IF F$='REPEAT' OR F$='repeat' GOTO 5600 5160 IF F$='_' P0%=D : GOTO 5100 5170 IF F$='T' OR F$='t' D0=7812.5*60/D : GOTO 5100 5180 IF F$='U' OR F$='u' U1%=D : POKE A%,0%,U1% : A%=A%+3% : GOTO 5100 5190 REM BER[KNA TIDV[RDE 5200 D1%=D0/D 5210 REM KOLLA PAUS 5220 IF F$='-' C%=255% : GOSUB 6000 : GOTO 5100 : REM PAUS 5230 REM KOLLA TONH\JD 5240 F%=12% 5250 IF LEFT$(F$,1%)='<' F%=0% : F$=RIGHT$(F$,2%) 5260 IF LEFT$(F$,1%)='>' F%=24% : F$=RIGHT$(F$,2%) 5270 F1%=INSTR(1%,'CCDDEFFGGAAHccddeffggaah',LEFT$(F$,1%)) 5280 IF F1%=0% ; 'FEL I DATASATSERNA ([NDRA I DATASATERNA)' 5290 F%=F%+F1% 5300 IF INSTR(2%,F$,'+') THEN F%=F%+1% 5310 IF INSTR(2%,F$,'-') THEN F%=F%-1% 5320 REM KOLLA DISTINKT ELLER HOPFLYTANDE 5330 REM DISTINKT; 90% LJUDANDE OCH 10% TYST 5340 IF P0% P1%=0% ELSE P1%=D1%/10% 5350 IF INSTR(2%,F$,'_') P1%=0% 5360 IF INSTR(2%,F$,'!') P1%=P1%+(D1%-P1%)/10% 5370 D1%=D1%-P1% 5380 REM STOPPA IN I MUSIKLISTAN 5390 C%=F%(F%) : GOSUB 6000 : REM TON 5400 IF P1% C%=255% : D1%=P1% : GOSUB 6000 : REM EV. PAUS 5410 GOTO 5100 5600 REM END LOOP 5610 IF D D1%=A0% ELSE D1%=0% : REM REPEAT ELLER SLUTA 5620 C%=1% : GOSUB 6000 : REM SISTA POST I MUSIKLISTAN 5630 RETURN 6000 REM L[GG POST I MUSIKLISTAN 6010 POKE A%,C%,D1%,SWAP%(D1%) 6020 A%=A%+3% 6030 RETURN 7000 REM LADDA MASKINKOD 7010 REM STARTA MUSIK MED CALL(62258,A) D[R A [R ADRESS TILL MUSIKLISTA 7020 REM STOPPA MUSIK MED CALL(62258) 7030 REM MUSIKLISTA BEST]R AV MUSIKPOSTER, EN MUSIKPOST [R 3 BYTES L]NG 7040 REM 1;A BYTEN [R EN KOD ELLER ANGER EN TONH\JD 7050 REM 2;A OCH 3;E BYTEN [R DATA ELLER ANGER TIDV[RDE 7060 REM OM KOD=0 [R 2;A BYTEN OUTV[RDET VID OUT 6,X SOM SKA ANV[NDAS 7070 REM OM KOD=1 [R 2;A OCH 3;E BYTEN ADRESS D[R LISTAN FORTS[TTER (HOPP) 7080 REM OM KOD=2..254 [R DET EN TONH\JD OCH 2;A OCH 3;E BYTEN [R TIDV[RDE 7090 REM OM KOD=255 BETYDER DET TYST OCH 2;A OCH 3;E BYTEN ANGER HUR L[NGE 7100 REM TONH\JDEN BLIR 7812/KOD (HERTZ) 7110 REM VARAKTIGHET BLIR 7812/TIDV[RDE (SEKUNDER) 7120 POKE 62258%,24%,14%,111%,243%,148%,5%,79%,135%,135%,135%,243%,207%,255%,183%,127%,0% 7130 POKE 62274%,122%,179%,33%,61%,243%,40%,16%,235%,164%,40%,9%,34%,170%,243%,33%,1% 7140 POKE 62290%,0%,34%,149%,243%,33%,56%,243%,237%,87%,254%,243%,40%,3%,50%,65%,243% 7150 POKE 62306%,197%,1%,57%,4%,243%,237%,179%,126%,237%,71%,251%,193%,201%,245%,229%,219% 7160 POKE 62322%,56%,254%,111%,202%,126%,243%,50%,116%,243%,7%,56%,84%,62%,111%,61%,194% 7170 POKE 62338%,141%,243%,62%,111%,50%,127%,243%,175%,195%,146%,243%,50%,127%,243%,62%,121% 7180 POKE 62354%,211%,6%,33%,111%,0%,43%,124%,181%,40%,13%,34%,149%,243%,33%,246%,253% 7190 POKE 62370%,203%,150%,225%,241%,251%,237%,77%,33% 7200 POKE 62380%,126%,35%,254%,1%,40%,43% 7210 POKE 62386%,56%,34%,50%,133%,243%,60%,62%,194%,32%,1%,60%,50%,129%,243%,126%,50% 7220 POKE 62402%,149%,243%,35%,126%,50%,150%,243%,35%,34%,170%,243%,225%,241%,251%,237%,77% 7230 POKE 62418%,225%,195%,31%,3%,126%,35%,50%,145%,243%,24%,236%,126%,50%,170%,243%,35% 7240 POKE 62434%,126%,50%,171%,243%,167%,204%,68%,243%,24%,225% 7250 RETURN