В а р и а н т 6 Давайте все-таки обсуждать вкус ананаса с теми, кто его не ел! Почти по М.Жванецкому Этот оператор применяется на компьютерах MSX-2, оснащенных видеоинтер- фейсом: COPY SCREEN [ р е ж и м 1] [, р е ж и м 2] Это позволяет преобразовать изображение, полученное с внешнего источни- ка видеосигнала, в цифровые данные, записанные на экранной странице. Параметры р е ж и м 1, р е ж и м 2 могут принимать два значения: 0: (по умолчанию) кадр записывается на отображенной экранной странице; 1: кадр записывается на странице, номер которой равен номеру отображен- ной минус 1. В этом случае номер отображенной страницы должен быть нечет- ным. Предполагается, что экран подготовлен к работе с изображением, приходя- щим от внешнего источника видеосигнала. Для этой цели имеется оператор ┌──────────────────────────────┐ │ SET VIDEO R,Y,C,S,A,V,R │ └──────────────────────────────┘ где: SET, VIDEO - служебные слова; R - числовой параметр, значение которого определяет источник видео- сигнала: 0 - (по умолчанию) изображение от компьютера; 1 - изображение от компьютера; 2 - смешивание изображения от компьютера и ТВ-сигнала; 3 - на дисплей поступает ТВ-сигнал; Y - числовой параметр, который управляет интенсивностью изображения от источника видеосигнала: 0 - (по умолчанию) нормальная интенсивность; 1 - интенсивность ТВ-сигнала уменьшена наполовину; C - числовой параметр, который определяет направление передачи дан- ных о цветности: 0 - (по умолчанию) вывод цветных данных на видеомагнитофон; 1 - ввод цветных данных от внешнего источника; S - числовой параметр, который определяет происхождение сигнала син- хронизации: 0 - (по умолчанию) внутренняя синхронизация; 1 - внешняя синхронизация (невозможна, когда R=0); A - числовой параметр, который позволяет смешивать AUDIO-сигнал ком- пьютера и сигнал от внешнего источника видеосигнала: 0 - (0 по умолчанию) звук только от компьютера; 1 - смешивание с внешним сигналом (правый канал); 2 - смешивание с внешним сигналом (левый канал); 3 - смешивание по обоим каналам; V - числовой параметр, указывающий тип разъема для ввода внешнего видеосигнала: 0 - (по умолчанию) разъем RGB; 1 - разъем RCA; R - числовой параметр, описывающий состояние сигнала управления AV на разъеме RGB: 0 - выхода через разъем RGB нет; 1 - выход через разъем RGB разрешен. ┌───────────────────────────────────────────────────────────┐ │ Отметим, что оператор COPY можно использовать в режимах │ │ SCREEN 5, SCREEN 6, SCREEN 7, SCREEN 8 │ └───────────────────────────────────────────────────────────┘ П р и м е р 19. ────────────── NEW Ok 10 SCREEN 6 20 LINE(20,70)-(30,80),15,BF:LINE(40,20)-(100,90),3,BF 30 FOR I=1 TO 1000:NEXT:COPY(20,70)-(110,90) TO (130,70) 40 GOTO 40 Меняя в 10-й строке номера экранов, Вы можете в этом убедиться! Отметим, что в версии BASIC, называемой Advanced BASIC,для профессиона- льных компьютеров IBM PC/XT (XT -от "eXTended"-"развитый, расширенный") и IBM PC/AT (AT - от"Advanced Technology"-"передовая техника и технология"), используются два оператора, действия которых аналогичны действию операто- ра COPY версии MSX-BASIC: α) GET(X1,Y1)-(X2,Y2),A Данный оператор "считывает" в массив A характеристики точек экрана,рас- положенных в заданной прямоугольной области; β) PUT(X,Y),A, с п о с о б Оператор "накладывает" массив точек на прямоугольную область экрана с управляемым способом формирования цветности (задаваемым параметром с п о- с о б). V.11. Р е ж и м SCREEN 6 (только для компьютера MSX-2) Экран в режиме SCREEN 6 такой же, как и в режиме SCREEN 5 (см.рис.7), но могут использоваться только 4 цвета. 0 511 0┌───────────────────┐──▶X │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│ │▨▨▨▨▨ SCREEN6 ▨▨▨▨▨│ │▨▨▨ 512╳212 точек▨▨│ │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│ Р и с. 8 211│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘ ▼ Y CLS устанавливает цвет ф о н а, имеющий номер 0 (прозрачный). Для установления цветов можно выбирать номер, лежащий в пределах от 0 до 31 (хотя используется только 4 палитры). Именно поэтому оператор COLOR должен быть выполнен после оператора SCREEN 6 ! Цвет задается значением двух младших битов номера палитры, введенного оператором COLOR. (Например, число 23=&b00010111 подразумевает использова- ние цвета 3=&b11). Если номер палитры принадлежит [16,31], то для бордюра принимаются в расчет уже четыре младших бита. (Первые два определяют цвет точек с четными координатами, а два последних - точек с нечетными коорди- натами. В итоге бордюр будет покрыт мелкой сеткой из точек двух цветов.) Все графические операторы работают так же, как и в режиме SCREEN 3. П р и м е р. ─────────── Ok 10 SCREEN 6:COLOR 15,17,1:CIRCLE(255,106),100,3:PAINT STEP(0,0),2,3 20 GOTO 20 Получается окружность! Радиус по вертикали (автоматически) сжимается для соответствия разнице масштаба между абсциссой и ординатой. Работа с экранными страницами и внешним видеосигналом такая же, как в SCREEN 5. Учтите лишь следующий момент: формула,дающая размер массива переменных, копирующего блок экрана, теперь выглядит так: ┌ (2·│X1-X2│+1)·(│Y1-Y2│+1)+7 ┐ │ ─────────────────────────── │ + 4 , где [ ] - символ операции выделе- └ 2 ┘ ния целой части. V.12. Р е ж и м SCREEN 7 (только для компьютера MSX-2 с видеопамятью 128 Кбайтов) ┌─────────────────────────────────────────────────────────────┐ │ Этот режим максимально удобен для многоцветных рисунков! │ └─────────────────────────────────────────────────────────────┘ 0 511 0┌───────────────────┐──▶X │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│ │▨▨▨▨▨ SCREEN7 ▨▨▨▨▨│ │▨▨▨ 512╳212 точек▨▨│ │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│ Р и с. 9 211│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘ ▼ Y Этот режим похож на режим SCREEN 6, но: 1) экранные страницы нумеруются от 0 до 1; 2) допускается одновременное использование 16 цветов. Формула, необходимая для вычисления размера массива, принимающего дан- ные блока экрана, та же, что и в SCREEN 5: ┌ (4·│X1-X2│+1)·(│Y1-Y2│+1)+7 ┐ │ ─────────────────────────── │ + 4 ,где [ ] - символ для операции выде- └ 8 ┘ ления целой части. V.13. Р е ж и м SCREEN 8 (только для компьютера MSX-2 с видеопамятью 128 Кбайтов) Экран содержит 212 строк по 256 точек, как в SCREEN 5. 0 255 0┌───────────────────┐──▶X │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│ │▨▨▨▨▨ SCREEN8 ▨▨▨▨▨│ │▨▨▨ 256╳212 точек▨▨│ │▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨▨│ Р и с. 10 211│─ ─ ─ ─ ─ ─ ─ ─ ─ ─┘ ▼ Y Этот режим характеризуется количеством цветов, которые могут выводить- ся одновременно. Цвет каждой точки кодируется в одном байте, и следова- тельно, имеет значения, лежащие в пределах от 0 до 255. Они кодируются следующим образом: ┌────────────────────────────┐ │ Байт ц в е т а = GGGRRRBB │ └────────────────────────────┘ Первые три бита (G) представляют значения от 0 до 7 и определяют интен- сивность з е л е н о г о цвета ("Green"-"зеленый"). Следующие три бита (R) устанавливают интенсивность к р а с н о г о ("Red"-"красный"),и последние два (B) - интенсивность с и н е г о ("Blue"- "синий") цвета. Например, 10 SCREEN 8 20 PSET(3,0),&B11100000:PSET(5,10),&B00000011 30 GOTO 30 Цвета изображения, фона и бордюра определяются как в режиме SCREEN 2 посредством оператора COLOR (или графических операторов для цвета текста), но значения лежат в пределах от 0 до 255. Введенное значение и пропорции цвета соотносятся следующим образом: ц в е т = 32*G+4*R+B В SCREEN 8 палитры не используются: желаемые оттенки задаются непосред- ственно. П р и м е р. NEW ─────────── Ok 10 SCREEN 8:FOR I=0 TO 255:COLOR,I:CLS 40 FOR J=0 TO 300:NEXT J,I Имеются только д в е экранные страницы, как и в режиме SCREEN 7. Формула, необходимая для вычисления размера массива, принимающего ко- пию блока экрана, имеет следующий вид: ┌ (8·│X1-X2│+1)·(│Y1-Y2│+1)+7 ┐ │ ─────────────────────────── │ ,где [ ] - символ для операции выделе- └ 8 ┘ ния целой части. Разумеется, запись этого выражения на языке MSX-BASIC очевидна: INT( (8* (ABS(X1-X2)+1) * (ABS(Y1-Y2)+1) +7)/8 ) Вспомним, что для выполнения оператора COPY необходимо задать числовой массив достаточно большой для того,чтобы вместить данные о расцветке всех точек рассматриваемой области экрана. Приведем простую программу, подсчитывающую минимальное количество эле- ментов для такого массива числовых значений. В начале работы программа вы- дает запрос на ввод координат, которые будут задаваться в операторе COPY, а также просит указать,какой режим графического вывода будет использовать- ся. П р и м е р. ─────────── NEW Ok 10 INPUT"Введите номер режима экрана (5,6,7 или 8)";I 20 INPUT"Введите координаты первой точки (X1,Y1)";X1,Y1 30 INPUT"Введите координаты второй точки (X2,Y2)";X2,Y2 40 S=4:C=8:IF I=6 THEN S=2:C=2 ELSE IF I=8 THEN 60 50 M=INT((S*(ABS(X1-X2)+1)*(ABS(Y1-Y2)+1)+7)/C)+4:GOTO 70 60 M=INT((8*ABS(X1-X2)+1)*(ABS(Y1-Y2)+1)+7/8) 70 PRINT "SCREEN"I:PRINT "X1-"X1,"Y1-"Y1:PRINT "X2-"X2,"Y2-"Y2 80 PRINT "Размерность массива- "M:END run Введите номер режима экрана (5,6,7 или 8) ? 5 Введите координаты первой точки (X1,Y1) ? 50,50 Введите координаты второй точки (Х2,Y2) ? 71,85 SCREEN 5 X1- 50 Y1- 50 X2- 71 Y2- 85 Размерность массива- 400 Ok V.14. Д о п о л н е н и е 1. П р и м е р простейшего г р а ф и ч е с к о г о редактора [22]. ─────────── Редактор позволяет не только рисовать стрелками, но и включать-отклю- чать цвет пера нажатием на пробел. Вокруг точки,в которой в данный момент находится перо, можно построить окружность или звезду. Для построения ок- ружности нужно нажать на клавишу "О", после чего ввести значение радиуса (окончание ввода - нажатие на клавишу "RETURN"). Нажатие на "Z" и ввод ве- личин R (радиус окружности, проходящей через вершины звезды), N (количест- во вершин) и M=2 позволяет построить звезду. Для ввода чисел использует- ся подпрограмма "ВВОД". NEW Ok 10 DIM PR(2),PD$(2) 20 PD$(0)="R=":PD$(1)="N=":PD$(2)="M=":PI=4*ATN(1) 30 SCREEN 2:OPEN"GRP:"AS#1 40 X=128:Y=96:C=4 50 PSET(X,Y),C 60 S=STICK(0) 70 P$=INKEY$ 80 IF S=1 OR S=2 OR S=8 THEN Y=Y-1 90 IF S=2 OR S=3 OR S=4 THEN X=X+1 100 IF S=4 OR S=5 OR S=6 THEN Y=Y+1 110 IF S=6 OR S=7 OR S=8 THEN X=X-1 120 IF P$=" " AND C=15 THEN C=4:GOTO 160 '──▶ 130 IF P$=" " AND C=4 THEN C=15 140 IF P$="O" OR P$="o" THEN GOSUB 500 '──▶ 150 IF P$="Z" OR P$="z" THEN GOSUB 1000 '──▶ 160 PSET(X,Y) 170 GOTO 50 '──▶ 500 'О к р у ж н о с т ь 510 K=0:GOSUB 1500 520 CIRCLE(X,Y),PR(0) 530 RETURN 1000 ' З в е з д а 1010 K=2:GOSUB 1500 1020 R=PR(0):N=PR(1):M=PR(2) 1030 PSET(X,Y-R) 1040 FOR I=1 TO N 1050 U=I*2*PI*M/N+PI/2 1060 X1=X+R*COS(U):Y1=Y-R*SIN(U) 1070 LINE-(X1,Y1) 1080 NEXTI 1090 RETURN 1500 ' В в о д 1510 FOR J=0 TO K 1520 F$="" 1530 LINE(0,0)-(255,10),4,BF 1540 PSET(0,0),4:PRINT #1,PD$(J); 1550 C$=INPUT$(1):PRINT #1,C$; 1560 IF ASC(C$)=13 THEN 1580 1570 F$=F$+C$:GOTO 1550 1580 PR(J)=VAL(F$) 1590 NEXT J 1600 LINE(0,0)-(255,10),4,BF:RETURN 2. П р и м е р простейшего редактора с п р а й т о в [22]. ─────────── Программа предназначена для создания спрайтов размером 8╳8. По решетке клавишами управления курсором перемещается двухцветный указатель(он виден и на фоне цвета 4, и на фоне цвета 15). При нажатии на клавишу INS в соот- ветствующую клетку вставляется квадратик цвета 15. Такие квадратики обра- зуют изображение спрайта. Для удаления квадратика нужно нажать клавишу "DEL". Справа от решетки отображается вид спрайта, сформированный к данно- му моменту. После нажатия на клавишу "Пробел" производится переключение в режим SCREEN 1, в котором печатаются десятичные коды, необходимые для создания спрайта и сам спрайт.После этого программа завершает свою работу. NEW Ok 10 DIM A(7) 20 SCREEN 2,1 30 SPRITE$(2)=CHR$(192)+CHR$(128)+CHR$(128)+CHR$(192) 35 SPRITE$(3)=CHR$(48)+CHR$(16)+CHR$(16)+CHR$(48) 40 FOR X=0 TO 140 STEP 20 50 FOR Y=0 TO 140 STEP 20 60 LINE(X,Y)-(X+20,Y+20),,B 70 NEXT Y,X 80 X=10:Y=10:I=7:J=0 90 PUT SPRITE 2,(X-4,Y-5),15,2 95 PUT SPRITE 3,(X-4,Y-5),4,3 100 PUT SPRITE 1,(200,50),,1 110 S=STICK(0) 120 IF S<> 0 THEN GOSUB 500:'Перемещение 130 P$=INKEY$ 140 IF P$=" "THEN 200 150 IF P$<>""THEN GOSUB 1000:'Удаление,вставка 160 GOTO 90 200 SCREEN 1 210 PRINT"СПРАЙТ" 220 PRINT:PRINT"DATA":PRINT 230 FOR K=0 TO 7 240 PRINT A(K); 250 IF K<>7 THEN PRINT","; 260 NEXTK 270 PRINT:PRINT 280 PUT SPRITE 0,(120,130),,1 290 END 500 'Управление стрелками 510 IF (S=1 OR S=2 OR S=8) AND Y> 10 THEN Y=Y-20:J=J-1 520 IF (S=2 OR S=3 OR S=4) AND X<150 THEN X=X+20:I=I-1 530 IF (S=4 OR S=5 OR S=6) AND Y<150 THEN Y=Y+20:J=J+1 540 IF (S=6 OR S=7 OR S=8) AND X> 10 THEN X=X-20:I=I+1 550 RETURN 1000 'Удаление и вставка 1010 IF ASC(P$)=18 AND POINT(X,Y)=4 THEN LINE (X-4,Y-4)-(X+4,Y+4),,BF: A(J)=A(J)+2^I 1020 IF ASC(P$)=127 AND POINT(X,Y)=15 THEN LINE (X-4,Y-4)-(X+4,Y+4),4, BF:A(J)=A(J)-2^I 1030 S$="" 1040 FOR K=0 TO 7 1050 S$=S$+CHR$(A(K)) 1060 NEXT K 1070 SPRITE$(1)=S$ 1080 RETURN 3. П р и м е р программы, обеспечиваюшей д в и ж е н и е фона. ─────────── 10 'А в т о р: Высотков Д.М. 20 COLOR 15,1,1:SCREEN 1,3:KEY OFF:WIDTH 32:VDP(1)=VDP(1)XOR64 30 SPRITE$(0)=STRING$(8,255):FC=2 'Этот спрайт будет двигаться! 40 DATA 8142241818244281,4224181824428181,2418182442818142,18182442818 14224,1824428181422418,2442818142241818,4281814224181824,8181422418182 442 'Данные для формирования символов движущегося фона ("вверх-вниз") 50 DATA 0142241010244201,4224101024420101,2410102442010142,10102442010 14224,1024420101422410,2442010142241010,4201014224101024,0101422410102 442 'Данные для формирования символов движущегося фона("вправо-влево") 60 FOR I=33 TO 48:READ A$:FOR T=2 TO 16 STEP 2 'Формирование 70 VPOKE 8*I+T/2-1,VAL("&H"+MID$(A$,T-1,2)):NEXT:NEXT ' символов 80 W$=STRING$(32,CHR$(255)) 90 FOR Y=0 TO 22:PRINT W$; 'Заполнение экрана строками W$ 100 NEXT:LOCATE 0,22:FOR I=33 TO 40 110 J$(1)=J$(1)+CHR$(I):NEXT:FOR I=41 TO 40:J$(2)=J$(2)+CHR$(I):NEXT 120 FOR I=48 TO 41 STEP 1:J$(4)=J$(4)+CHR$(I):NEXT 130 FOR I=40 TO 33 STEP 1:J$(3)=J$(3)+CHR$(I):NEXT 140 LOCATE0,22:PRINT SPACE$(32) 150 LOCATE0,22:PRINTJ$(1) 160 PUT SPRITE 9,(100,63),1,0 170 FOR Q=0 TO 64 STEP 16:M=M+1 ' Стирание "бяки", возникающей 180 PUT SPRITE M,(Q,175),1,0 ' на экране 190 NEXT:VDP(1)=VDP(1) XOR 64 ' Включение экрана 200 FOR I=0 TO 7:LOCATE I,22,1 210 NEXT:YW=YW+1 220 IF YW=20 THEN LOCATE 0,22:PRINT J$(FC):FC=FC+1:YW=0 'Замена "бяки" 230 IF FC=5 THEN FC=1 240 GOTO 200 К а н а - слоговая азбука японского письма (результат графического сокращения иерогли- фов).Существует (с.18 в.) в двух вариантах: катакана (используется для записи заимство- ванных слов) и хирагана (используется для собственно японских слов). Советский Энциклопедический словарь 4. А теперь о "загадочном" операторе ┌────────────┐ │ PUT KANJI │ . └────────────┘ Приведем небольшой пример: 10 SCREEN 5:COLOR 15,0,0 20 M$="National":M=LEN(M$) 30 FOR X=1 TO M 40 CD=&H2300+ASC(MID$(M$,X,1)) 'Видимо, &H2300 - адрес?! 50 PUT KANJI (X*16-5,20),CD,11 55 PUT KANJI (X*16-5,70),CD,11 57 PUT KANJI (X*16-8,90),CD,11 60 NEXT:A$=INPUT$(1):SCREEN 0:LIST Выполнив эту программу на компьютере, Вы получите на экране дисплея ок- рашенные горизонтальные полосы. Видимо (это всего лишь наше предположе- ние!), оператор PUT KANJI позволяет выводить на экран японские иероглифы, изображенные на прямоугольном фоне заданного цвета (в программе код цвета- - 11). Но информации о иероглифах в памяти (а может быть в видеопамяти) компьютера почему-то уже нет?! А полосы (фон) остались! Кстати, оператор PUT KANJI может содержать необязательный параметр ти- па OR,AND,XOR,PSET,PRESET,TOR,TAND,TXOR,TPSET,TPRESET,расположенный после указания цвета через запятую.