Радио-86РК/Радио 08-89/Музыкальный редактор/Таблица 1
Данный материал защищён авторскими правами!
Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей. Автор: А. СОРОКИН |
ТАБЛИЦА 1 5 REM ********************************************* 10 REM **** МУЗЫКАЛЬНЫЙ РЕДАКТОР ДЛЯ РАДИО-86РК **** 20 REM ******** НА ОСНОВЕ ТАЙМЕРА К580ИВ53 ********* 30 REM * ПРИСВОЕНИЕ ЗНАЧЕНИЙ ПЕРЕМЕННЫМ 40 REM * BS - НАЧАЛЬНЫЙ АДРЕС РАСПОЛОЖЕНИЯ НОТ В ОЗУ 50 REM * А0,A1,А2,A3 -АДРЕСА ПОРТОВ ТАЙМЕРА К580ИВ53 60 A0=&A000:A1=&A001:A2=&A002:A3=&A003:BS=&4200 70 V=30:R$="<-":Z°=" ":GOTO 640 80 REM * ПОДПРОГРАММА ВВОДА НОВОЙ КОМАНДЫ 90 В=А 100 A=USR(-2021):IF А=В OR А=255 THEN 100 110 RETURN 120 REM * ИНИЦИАЛИЗАЦИЯ РЕДАКТОРА 130 PRINTAT36,17;"NEW ?";:Y$=CHR$(USR(-2045)) 140 PRINTAT36,17;SPC(12):IF YD="Y" THEN 200 150 REM * ПОИСК КОНЦА НОТНОЙ ЗАПИСИ 160 B1=BS+&2000:FOR 1=BS TO B1 170 IP PEEK(I)=255 THEN KX=I-BS:GOTO 410 180 NEXTI:CUR36,17:INPUT"ДЛИHA";X:X=X*4 190 PRINTAT36,17;SPC(20)$:POKEBS+X+1,255:GOTO 410 200 X=0:Y=11:PRINTATV,11;R$;:KX=0 210 PRINTAT36,24;"HOTA - 1" 220 REM * ЦИКЛ ВВОДА И ЗАПИСИ НОТ 240 A=USR(-2021):IF А=255 THEN 240 250 IF (Y=24 AND A=25) OR (Y=0 AND A=26) THEN 240 260 IF A=8 THEN 1100 270 IF A=0 THEN KX=X:A=2 280 IF A=24 THEN 1150 290 IF A>57 OR A=1 OR A=46 THEN GOSUB 1060 300 IF A=25 THEN PRINTATV,Y;Z$;:Y=Y+1:PRINTATV,Y;R$; 310 IF A=26 THEN PRINTATV,Y;Z$;:Y=Y-1:PRINTATV,Y;R$; 320 IF A=2 THEN PRINTATV,Y;Z$;:POKEBS+X,255:GOTO 410 330 IF A<>27 THEN TS=S(Y):TM=M(Y) 340 IF A=27 THEN TS=S(Y):TM=DM(Y):GOSUB 90 350 IF A=32 THEN GOSUB 1280 360 POKE A0,TM:POKE A0,TS:POKE А2,20 370 IF A>48 AND A<58 THEN GOSUB 1330 380 GOTO 240 400 REM * ВВОД ПАРАМЕТРОВ ВОСПРОИЗВЕДЕНИЯ 410 CUR36,22:INPUT"TEMП",Z:R=28/Z:X1=KX-4 420 PRINTAT36,20;"STAC. NORM. LEG.": K$=CHR$(USR(-2045)) 430 PRINTAT36,22;SPC(20):PRINTAT36,20;SPC(20) 440 PPINTAT36,17;"TEMП - ";Z;" ";K$".":PRINTAT36,24; "НОТА -" 450 K=0.0015:IF K$="S" THEN K=R*0.5 460 IF K$="N" THEN K=R*0.1 470 REM * ЦИКЛ ВОСПРОИЗВЕДЕНИЯ 490 FOR X=0 TO X1 STEP4:K2=PEEK(BS+X+1): Y=PEEK(BS+X+3) 500 IF K2=0 THEN POKE A3,54 510 IF K2<>0 THEN POKE A0,PEEK(BS+X):POKE A0,K2: POKE A2,100:PRINTATV,Y;R$; 520 PRINTAT 42,24;X/4+1:PAUSE R*PEEK(BS+X+2): POKE A3,54:PAUSE К 530 PRINTAT V,Y;Z$;:NEXTX 550 REW * ВЫВОД ДИРЕКТИВ РЕДАКТОРА 560 PRINTAT36,24;"1 - ПОВTOPИTb":PRINTTAB(36) "2 - ДОПИСАТЬ" 570 PRINTTAB(36)"3 - ИCПPABИTb":PRINTTAB(36) "4 - РАСПЕЧАТАТЬ" 580 PRINTTAB(36)"5 - ОТТРАНСЛИРОВАТЬ": PRINTTAB(36)"6 - NEW" 590 A=USR(-2045):FORI=0TO5:PRINTAT36,24-1;SPC(20); NEXTI 600 IF PA<49 OR A>54 THEN 1810 610 REM * АДРЕСАЦИЯ ПО ДИРЕКТИВАМ 620 A=A-8:ON A GOTO 410, 1380, 1410, 1470, 1530, 200 630 REM * НАСТРОЙКА ПАРАМЕТРОВ ТАЙМЕРА К580ИВ53 640 НОМЕ:РОКЕ АЗ,54:РОКЕ АЗ,102:РОКЕ A3,144: POKE A1,110 650 REM * ОПИСАНИЕ ФУНКЦИЙ РАЗБИЕНИЯ ДЕСЯТИЧНОГО ЧИСЛА НА БАЙТЫ 660 REM * FNS(X) - СТАРШИЙ БАЙТ,FNM(X) - МЛАДШИЙ БАЙТ 670 DEFFNS(X)=INT(X/256) 680 DEFFNM(X)=X-INT(X/256)*256 690 REM * ОПИСАНИЕ МАССИВОВ 700 REM * SO,WO - МАССИВЫ КОЭФФИЦИЕНТОВ ДЕЛЕНИЯ ДЛЯ ТОНОВ 710 REM * DM0,DSO - МАССИВЫ КОЭФФИЦ. ДЕЛЕНИЯ ДЛЯ ПОЛУТОНОВ 720 DIM S(24),M(24),DM(25),DS(25),K(24) 730 REM * РИСУНОК НОТНОГО СТАНА 740 PRINT"СОЛЬ #";SPC(21);"-0" 750 PRINT"ФA #";SPC(21);"-0" 760 РRINТ"МИ";5РС(24);"-0-" 770 PRINT"PE #";SPC(19);"-0-" 780 РRINТ"ДО #";SPC(18);"-0---" 790 PRINT"CИ";SPC(21);"-0----" 800 PRINT"ЛЯ";SPC(16);"-0-----" 810 PRINT"COЛЬ #"SPC(16);"0" 820 PRINT"ФA #----------0---- " 830 PRINT"MИ";SPC(18);"0";SPC(15);"CИ$ = ЛЯ#" 840 PRINT"PE #-------0-----";SPC (7) ; "ЛЯ$ = СОЛЬ#" 850 PRINT"ДO #";SPC(12);"0";SPC(17);"COЛЬ$ = ФА#" 860 PRINT"CИ -------0-------";SPC(7); "МИ$ = РЕ#" 870 РРINТ"ЛЯ #";SPC(10);"0";SPC(19);"PE$ = ЛЯ#" 880 PRINT"COЛЬ #------0----------";SPC(7); "ДО$ = СИ" 890 PRINT"ФA #";SPC(8);"0";SPC(21);"$ - БЕМОЛЬ, # - ДИЕЗ" 900 PRINT"MИ ----О---------" 910 PRINT"PE #";SPC(6);"0";SPC(23); "<-- НА 1 НОТУ НАЗАД" 920 PRINT"ДO #-------0-";SPC(23); "--> HA 1 НОТУ ВПЕРЕД" 930 PRINT"CИ --о-" 940 РРINТ"ЛЯ #------0-";SРС(25);"ДИЕЗ - АР2" 950 PRINT"COЛЬ #--0-";SPC(26);"BЫXOД - F3" 960 PRINT"ФA #-0-";SРС(27);"УСТАНОВКА КОНЦА НОТНОЙ" 970 РРINТ"МИ -0-";SРС(28);"ЗАПИСИ - F1" 980 PRINT"PE #O-"; 990 REM * ЗАПОЛНЕНИЕ МАССИВОВ КОЭФИЦИЕНТАМИ ДЕЛЕНИЯ 1000 FORI=0T024:READH:S(I)=FNS(H):M(I)=FNM(H):NEXTI 1010 FORI=1T018:READH,J:DS(J)=FNS(H):DM(J)=FNM(H): NEXTI 1020 REM * ЗАПОЛНЕНИЕ МАССИВА КОДАМИ КЛАВИШ СООТВЕТСТВ. НОТАМ 1030 FORI=0T024:READH:K(I)=H:PRINTAT33,I;CHR$(H); : NEXTI 1040 GOTO 130 1050 REM * ПОДПРОГРАММА ВЫБОРА ПОЛОШЕНИЯ УКАЗАТЕЛЯ ПО КЛАВИШАМ 1060 FORI=0T024 1070 IFA=K(I)THEN PRINTATV,Y;Z$;:Y=1:PRINTATV,Y;R$; : RETURN 1080 NEXTI:RETURN 1090 REM * ПОДПРОГРАММА ВОЗВРАТА К ПРЕДЫДУЩЕЙ НОТЕ 1100 IF X=0 THEN 240 1110 IF KX=0 THEN KX=X 1120 X=X-4:PRINTATV,Y;Z$;: K1=PEEK(BS+X) :K2==PEEK(BS+1+X) 1130 IF K1=0 AND K2=0 THEN 1220 1140 GOTO 1240 1150 REM ПОДПРОГРАММА ПЕРЕХОДА К СЛЕДУЮЩЕЙ НОТЕ 1160 IF КХ=0 OR Х=КХ THEN 240 1170 IF KX=X+4 THEN X=X+4:PRINTAT42,24;X/4+1:GOTO 240 1180 X=X+4:PRINTATV,Y;Z$;: K1=PEEK(BS+X) :K2=PEEK(BS+1+X) 1190 IF K1=0 AND K2=0 THEN 1220 1200 GOTO 1240 1210 REM * ПОДПРОГРАММА ОТОБРАЖЕНИЯ ПАУЗЫ 1220 PRINTAT36,22;"ПАУ3A":PRINTAT42,24;X/4+1:GOTO 240 1230 REM * ПООДПРОГРАММА ОТОБРАЖЕНИЯ НОТЫ 1240 POKE A0,K1:POKE A0,K2 1250 POKE A2,PEEK(BS+2+X)+20:Y=PEEK(BS+3+X): PRINTATV,Y;R$; 1260 PRINTAT42,24;X/4+1:PRINTAT36,22;" ":GOTO 240 1270 REM * ПОДПРОГРАММА ЗАПИСИ ПАУЗЫ 1280 POKEBS+X+1,0:POKEBS+X,0:POKEBS+X+3,1: PRINTATV,Y;Z$; 1290 GOSUB 90:POKE BS+X+2,A-48:POKE BS+X+3,Y:X=X+4: PRINTAT42,24;X/4+1 1300 IF KX<XTHEN KX=X 1310 PAUSE0.3:GOTO 240 1320 REM * ПОДПРОГРАММА ЗАПИСИ НОТЫ 1330 POKEBS+X,TM:POKEBS+X+1,TS:POKEBS+X+2,A-48 1340 POKEBS+X+3,Y:X=X+4:PRINTAT42,24;X=/4+1: PRINTAT36,22;" " 1350 IF KX<XTHEN KX=X 1360 PAUSE0.3:RETURN 1370 REM * НАСТРОЙКА НА ДОПИСЫВАНИЕ НОТНОЙ ЗАПИСИ 1380 Y=PEEK(BS+X-1):PRINTATV,Y;R$;:KX=0 1390 PRINTAT36,24;"HOTA-":PRINTAT42,24;X/4+1: GOTO 240 1400 REM * ИСПРАВЛЕНИЕ НОТНОЙ ЗАПИСИ 1410 PRINTAT36,24;"C НОТЫ (BCEГО";KX/4;")";:INPUT N 1420 IF N>KX THEN 1410 1430 X=(N-1)*4:POKE A0,PEEK(BS+X): POKE A0,PEEK(BS+X+1) 1440 POKE A2,20:Y=PEEK(BS+X+3):PRINTATV,Y;R$; 1450 PRINTAT36,24;"HOTA -";SPC(15):PRINTAT42,24;N: GOTO 240 1460 REM * ПЕЧАТЬ НОТНОЙ ЗАПИСИ ДЛЯ DATA 1470 HOME:PRINT"PACПEЧATKA НОТНОЙ ЗАПИСИ ДЛЯ DATA " 1480 PRINT"MЛ. БАЙТ";SРС(5);**СТ. БАЙТ";SРС(5); "ДЛИТЕЛЬН." " 1490 KX=KX-4:FOR X=0 TO KX STEP 4 1500 PRINTPEEK(BS+X),PEEK(BS+X+1),PEEK(BS+X+2) 1510 NEXT X 1515 STOP 1520 REM * ТРАНСЛЯЦИЯ НОТНОЙ ЗАПИСИ 1530 HOME 1540 РRINT"СВОБОЛНАЯ ОБЛАСТЬ-С";@(КХ+4+ВS); "Н ПО 75FFH" 1550 INPUT"HAЧAЛЬHЫй АДРЕС ДЛЯ ТРАНСЛЯЦИИ (ЧЕРЕЗ &)";NA 1560 REM * ЗАПИСЬ УПРАВЛЯЮЩЕЙ ПРОГРАММЫ В ПАМЯТЬ И 1570 REM * ЕЕ КОРРЕКТИРОВКА ПО АДРЕСАМ ПЕРЕХОДА 1580 RESTORE 1940: FOR I=NA TO NA+65:READ R:POKE 1,R: NEXTI 1590 KA=1:TT=INT(600/2):POKE NA+36,TT 1600 M1=FNS(65536+A0):M2=FNM(65536+A0):POKE NA+8,M2 1610 POKE NA+9,M1:POKE NA+17,M2:POKE NA+18,M1 1620 POKE NA+22,FNM(A2*65536): POKE NA+23,FNS(A2+65536) 1630 POKE NA+30,FNM(A3+65536): POKE NA+31,FNS(A3*65536) 1640 POKE NA+52,FNM(A3+65536): POKE NA+53,FNS(A3+65536) 1650 POKE NA+1,FNM(KA):POKE NA+2,FNS(KA) 1660 IF K$="S" THEN POKE NA+56,TT*.8 1670 IF K$="L" THEN POKE NA+51,0:POKE NA+52,0: POKE NA+53,0 1680 IF K$="N" THEN POKE NA+56,TT*.6 1690 POKE NA+14,FNM(NA+27):POKENA+15,FNS(NA+27) 1700 POKE NA+25,FNM(NA+32):POKE NA+26,FNS(NA+32) 1710 POKE NA+47,FNM(NA+43):POKENA+48,FNS(NA+43) 1720 POKE NA+61,FNM(NA+57):POKE NA+62,FNS(NA+57) 1750 POKE NA+64,FNM(NA+3):POKE NA+65,FNS(NA+3) 1740 REM ТРАНСЛЯЦИЙ САМОЙ НОТНОЙ ЗАПИСИ 1750 FOR X=0 TO KX STEP 4 1760 POKEKA,PEEK(BS+X):KA=KA+1:POKE KA,PEEK(BS+X+1) 1770 KA=KA+1:POKE KA,PEEK(BS+X+2):KA=KA+1:NEXTX: POKE KA,255 1780 РРINТ:РRINТ"МУЗЫКАЛЬНЫй МОДУЛЬ РАСПОЛОЖЕН :" 1790 PRINT"HAЧДЛЬHЫй AAPEC";@NA: РRINТ"КОНЕЧНЫй АДРЕС";@КА 1800 Y=USR(&F86C) 1810 НОМЕ:РRINТ"НЕТРАНСЛИРОВАННAЯ НОТНАЯ ЗАПИСЬ НАХОДИТСЯ :" 1820 PRINT"C АДРЕСА ";@BS 1830 PRINT"ПO АДРЕС ";@(BS+KX+4) 1840 U=USR(&F86C) 1850 REM ******************************************* 1860 DATA12108,10787,10181,9070,8081,7199,6795,6054 1870 DATA 5393,5091,4535,4040,3600,3398,3027,2697 1880 DATA 2545,2268,2020,1800,1699,1513,1348,1273 1890 DATA 1134,11428,0,9610,2,8561,3,7627,4,6670,6 1900 DATA 5714,7,4805,9,4281,10,3814,11,3207,13,2857 1910 DATA 14,2402,16,2140,17,1907,18,1603,20,1428,21 1920 DATA 1201,23,1070,24,74,67,85,75,69,78,71,91,93 1930 DATA 90,72,58,1,70,89,87,65,80,82,79,76,68,86,92,46 1940 DATA &21,0,0,&7E,&FE,&FF,&C8,&32,0,0,&23 1950 DATA &7E,&B7,&CA,0,0,&32,0,0,&3E,&C8,&32,0,0 1960 DATA &C3,0,0,&3E,&36,&32,0,0,&23,&7E,&23,&C6 1970 DATA 0,&87,&87,&87,&87,&57,&5F,&1B,&7A,&B3,&C2 1980 DATA 0,0,&3Е, &36,&32,0,0,&01,2,О,&0В,&79,&В0 1990 DATA &С2,0,0,&СЗ,0,0 2000 REM ********************************************