\/d Г Л А В А XI. РАБОТА С ВИДЕОПАМЯТЬЮ И ВИДЕОПРОЦЕССОРОМ \/d- Надо понять тот минимум, на котором покоится мир, и все избыточное безжалостно отсекать (бритва Оккама). У.Оккам XI.1. В и д е о п а м я т ь П р о ц е с с о р (англ. "processor", от "process" - "обрабатывать") - совокупность устройств ЭВМ, выполняющих функции по преобразованию информа- ции. В зависимости от назначения различают центральные, функционально-ори- ентированные и проблемно-ориентированные процессоры. Графические возможности ПЭВМ "YAMAHA" поддерживаются функционально-ори- ентированным процессором- в и д е о п р о ц е с с о р о м .Видеопроцессор (VDP) постоянно "общается" с в и д е о п а м я т ь ю (VRAM), которая до- ступна центральному процессору через порты ввода-вывода, отвечает за изо- бражение на экране и интерпретирует находящиеся в ней данные в соответст- вии с заданным режимом SCREEN. Видеопроцессор обеспечивает отображение ин- формации, хранящейся в видеопамяти, на экран дисплея. В и д е о п а м я т ь ("Video RAM") - доступная устройству сопряжения дисплея и компьютера область оперативной памяти ЭВМ, в которой расположе- ны данные, соответствующие изображению на экране.В текстовом режиме видео- память содержит коды и атрибуты символов,в графических режимах каждой точ- ке экрана соответствует одна или несколько ячеек видеопамяти, указывающие ее цвет и яркость. Видеопамять разделена на несколько областей, называе- мых Т а б л и ц а м и , имена которых, размеры и назначение зависят от установленного режима SCREEN . XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Это деление памяти автоматически выполняется оператором SCREEN, V V который инициализирует Таблицы видеопамяти. V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Прежде чем Вы попытаетесь непосредственно воздействовать на "содержи- мое" экрана дисплея, хорошо разберитесь в назначении Таблиц VRAM! Далее в тексте Вам часто будут встречаться следующие аббревиатуры: XWWWWWWWWWWWWRWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY VАббревиатураV Что Вам необходимо з а п о м н и т ь! V TWWWWWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V PNT V "Pattern Name Table" - "Таблица имен образов" V V PGT V "Pattern Generation Table"- "Таблица шаблонов образов" V V V ("Таблица изображений") V V CT V "Color Table" - "Таблица цветов" V V SGT V "Sprite Generation Table" - "Таблица шаблонов спрайтов" V V SAT V "Sprite Attribute Table" - "Таблица атрибутов спрайтов" V V SCT V "Sprite Color Table" - "Таблица цветов спрайтов" V V PT V "Palette Table" - "Таблица палитры" V ZWWWWWWWWWWWWQWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ XI.1.1. П с е в д о п е р е м е н н а я BASE Псевдопеременная BASE используется для чтения начальных адресов Таблиц VRAM, а также для их "перемещения" в видеопамяти. ═) Вначале о синтаксисе псевдопеременной BASE,используемой как функция BASE(N) , где: BASE ("base" - "база", "значение или адрес, относительно которого представляются другие значения и адреса") - служебное слово; N - арифметическое выражение, целая часть значения которого долж- на принадлежать отрезку [0,19] для компьютеров MSX-1 и отрезку [0,44] для компьютеров MSX-2. По значению N можно определить номер Таблицы видеопамя- ти (VRAM). Функция BASE(N), где N=M*5+T, возвращает н а ч а л ь н ы й а д р е с Таблицы с номером Т в режиме SCREEN M . Ясно, что M=N\5 и T=N MOD 5 . Номер Таблицы T принадлежит интервалу [0,4];режим экрана M может прини- мать значения 0,1,2,3,4,5,6,7,8 для компьютеров MSX-2 (0,1,2,3 для компью- теров MSX-1). Таким образом, с помощью функции BASE() можно иметь доступ не более чем к п я т и Таблицам для каждого из режимов экрана. Ниже приведены имена Таблиц, соответствующих различным значениям T: XWWWRWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V T V И м я Таблицы V TWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V 0 V PNT V V 1 V CT (кроме режимов SCREEN 3,5,6,7,8 иV V V 40-символьного режима SCREEN 0) V V 2 V PGT (кроме режимов SCREEN 5,6,7,8) V V 3 V SAT (кроме режима SCREEN 0) V V 4 V SGT (кроме режима SCREEN 0) V ZWWWQWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Например, найдем начальный адрес Таблицы CT в режиме SCREEN 2. Для это- го выполним команду: PRINT HEX$(BASE(5*2+1)) 2000 ▌ ▌ Ok Режим экранаWW[ ZWW Номер Таблицы Следующая табличка позволяет найти начальный адрес Таблицы VRAM с номе- ром T для режима SCREEN M: XWWWWWWWRWWWWWWRWWWWWWRWWWWWWRWWWWWWRWWWWWWY V М \ Т V0(PNT)V 1(CT)V2(PGT)V3(SAT)V4(SGT)V TWWWWWWWUWWWWWWUWWWWWWUWWWWWWUWWWWWWUWWWWWWS V 0 (40)V 0 V WW V &H800V WW V WW V V 0 (80)V 0 V &H800V&H1000V WW V WW V V 1 V&H1800V&H2000V 0 V&H1B00V&H3800V V 2 V&H1800V&H2000V 0 V&H1B00V&H3800V V 3 V &H800V WW V 0 V&H1B00V&H3800V V 4 V&H1800V&H2000V 0 V&H1E00V&H3800V V 5 V 0 V WW V WW V&H7600V&H7800V V 6 V 0 V WW V WW V&H7600V&H7800V V 7 V 0 V WW V WW V&HFA00V&HF000V V 8 V 0 V WW V WW V&HFA00V&HF000V ZWWWWWWWQWWWWWWQWWWWWWQWWWWWWQWWWWWWQWWWWWW[ Прочерками здесь помечены адреса Таблиц, отсутствующих в видеопамяти для данных M и T. Числа 40 и 80, стоящие в круглых скобках, указывают на ширину экрана в режиме SCREEN 0. А в этой табличке показано количество байтов в каждой из Таблиц VRAM. XWWWWWWWRWWWWWWRWWWWWWRWWWWWWRWWWWWWRWWWWWWY V М \ Т V0(PNT)V 1(CT)V2(PGT)V3(SAT)V4(SGT)V TWWWWWWWUWWWWWWUWWWWWWUWWWWWWUWWWWWWUWWWWWWS V 0 (40)V 960 V WW V 2048 V WW V WW V V 0 (80)V 1920 V 270 V 2048 V WW V WW V V 1 V 768 V 32 V 2048 V 128 V 2048 V V 2 V 768 V 6144 V 6144 V 128 V 2048 V V 3 V 768 V WW V 1536 V 128 V 2048 V V 4 V 768 V 6144 V 6144 V 128 V 2048 V V 5 V27136 V WW V WW V 128 V 2048 V V 6 V27136 V WW V WW V 128 V 2048 V V 7 V54272 V WW V WW V 128 V 2048 V V 8 V54272 V WW V WW V 128 V 2048 V ZWWWWWWWQWWWWWWQWWWWWWQWWWWWWQWWWWWWQWWWWWW[ XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Внимание! Функция BASE не позволяет найти начальные адреса V V Таблиц PT и SCT V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Но Вы не волнуйтесь: в следующей табличке мы приводим начальные адреса и этих Таблиц: XWWWWWWWRWWWWWWWWRWWWWWWWWY V Режим V PT V SCT V TWWWWWWWUWWWWWWWWUWWWWWWWWS Таблица PT для всех режимов V 0 (40)V &H0400 V WW V SCREEN занимает в видеопамяти V 0 (80)V &H0800 V WW V 32 байта. V 1 V &H2020 V WW V Таблица SCT для всех режимов V 2 V &H1B80 V WW V SCREEN занимает в видеопамяти V 3 V &H2020 V WW V 512 байтов. V 4 V &H1E80 V &H1C00 V V 5 V &H7680 V &H7400 V V 6 V &H7680 V &H7400 V V 7 V &HFA80 V &HF800 V V 8 V &HFA80 V &HF800 V ZWWWWWWWQWWWWWWWWQWWWWWWWW[ ║) А теперь - синтаксис псевдопеременной BASE, используемой в левой части оператора присваивания: BASE(N)= 1024*A или BASE(N)=&H400*A , где: N - арифметическое выражение, целая часть значения которого долж- на принадлежать отрезку [0,19]. Значение N - это номер Таблицы VRAM; A - арифметическое выражение,целая часть значения которого, умно- женная на число 1024, определяет новый начальный адрес Таблицы VRAM с но- мером N (1Кбайт = 1024 байтам). Значение A должно принадлежать отрезку [0,15] для компьютеров серий MSX-1 и MSX-2. XWWWWWWWWWWRWWWRWWWWWRWWWWWWRWWWWWWRWWWWWWRWWWWWWRWWWWWWRWWWWWWRWWWWWWY VЗначение AV 0 V 1 V 2 V 3 V 4 V 5 V 6 V 7 V 8 V TWWWWWWWWWWUWWWUWWWWWUWWWWWWUWWWWWWUWWWWWWUWWWWWWUWWWWWWUWWWWWWUWWWWWWS V &H400GA V 0 V&H400V&H0800V&H0C00V&H1000V&H1400V&H1800V&H1C00V&H2000V ZWWWWWWWWWWQWWWQWWWWWQWWWWWWQWWWWWWQWWWWWWQWWWWWWQWWWWWWQWWWWWWQWWWWWW[ XWWWWWWWWWWRWWWWWWRWWWWWWRWWWWWWRWWWWWWRWWWWWWRWWWWWWRWWWWWWY VЗначение AV 9 V 10 V 11 V 12 V 13 V 14 V 15 V TWWWWWWWWWWUWWWWWWUWWWWWWUWWWWWWUWWWWWWUWWWWWWUWWWWWWUWWWWWWS V &H400GA V&H2400V&H2800V&H2C00V&H3000V&H3400V&H3800V&H3C00V ZWWWWWWWWWWQWWWWWWQWWWWWWQWWWWWWQWWWWWWQWWWWWWQWWWWWWQWWWWWW[ Если значения N или A не будут принадлежать указанным отрезкам, то ком- пьютер выдаст сообщение об ошибке: "Illegal function call". Псевдопеременная BASE, расположенная в правой части оператора присваи- вания, позволяет "перемещать" Таблицы. Она используется только в режимах SCREEN 0 ╤ SCREEN 3, и поэтому значение N должно принадлежать отрезку [0,19]. Вспомним, что в режимах SCREEN 5╤8 можно переключаться с одной экран- ной с т р а н и ц ы на другую при помощи оператора SET PAGE. Этот опера- тор, однако, не применим в режимах SCREEN 0╤4. Используя же псевдоперемен- ную BASE, можно "работать" с экранными страницами в режимах SCREEN 0╤3. В режиме SCREEN 4 работа с экранными страницами запрещена. Приведем следую- щую табличку: XWWWWWWWWWWWWWWWWWWRWWWWWWRWWWWWWRWWWRWWWRWWWRWWWRWWWWRWWWWWRWWWWWRWWWWWY V Р е ж и м экранаV 0(40)V 0(80)V 1 V 2 V 3 V 4 V 5 V 6 V 7 V 8 V TWWWWWWWWWWWWWWWWWWUWWWWWWUWWWWWWUWWWUWWWUWWWUWWWUWWWWUWWWWWUWWWWWUWWWWWS V Число разрешенныхV 4 V 2 V 1 V 1 V 1 V 1 V 4 V 4 V 2 V 2 V V экранных страниц V Используется BASE TWWWSИспользуется SET PAGE V ZWWWWWWWWWWWWWWWWWWQWWWWWWWWWWWWWWWWWWWWWWWWW[ ZWWWWWWWWWWWWWWWWWWWWWW[ П р и м е р. Запись нескольких экранных с т р а н и ц в режиме WWWWWWWWWWW SCREEN 0 и их переключение. Стандартный начальный адрес для Таблицы PNT в режиме SCREEN 0 равен 0. "Передвинем" эту Таблицу вначале к адресу &H2000, а затем к адресу &H2400. Идентифицируем экранные страницы ("что-нибудь" на них напишем!), а затем будем переключаться с одной страницы на другую путем переопределения нача- ла Таблицы PNT в строках 100 и 110. XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Заметим, что начальные адреса Таблиц PNT, PGT, SGT и SAT для текущего V V режима SCREEN хранятся в рабочей области, начиная с адресов &HF922, V V &HF924, &HF926 и &HF928 соответственно,и занимают по два байта каждый.V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Эти значения не могут быть изменены оператором BASE: Вы должны сделать это с а м и (строка 110). В противном случае выход в непосредственный ре- жим работы будет возможен только из н у л е в о й страницы, а выйти на нее из другой страницы можно осуществить, если набрать "вслепую" команду SCREEN М , где М - номер режима. 10 SCREEN 0:WIDTH 40 20 FOR I=0 TO 2 30 GOSUB 100:GOSUB 200 'WW▐ 40 NEXT I 50 IF INKEY$="" THEN 50 60 I=(I+1)MOD3:GOSUB 100 'WW▐ 70 GOTO 50 90 'OOOOO Подпрограмма 1 OOOOO 100 IF I=0 THEN BASE(0)=0 ELSE BASE(0)=&H2000+(I-1)*&H400 110 IF I=0 THEN POKE &HF922,&H00:POKE &HF923,&H00 ELSE POKE &HF922,0:POKE &HF923,&H20+(I-1)*4'Запись в слово WW▌WWW WWW▌WW ' NAMBAS Адрес младшего байтаW[ ZW Адрес старшего байта 120 RETURN 'WW▐ 190 'OOOOO Подпрограмма 2 OOOOO 200 CLS:FOR J=0 TO 50:PRINT "PAGE";I;:NEXT:RETURN 'WW▐ XI.1.2. Ф у н к ц и я VPEEK . О п е р а т о р VPOKE Вы всегда можете посмотреть, какое число находится в той или иной ячей- ке видеопамяти. Для этого используется функция VPEEK, общий вид которой: XWWWWWWWWWWWWWWWWWWWWWY V VPEEK(а д р е с) V , ZWWWWWWWWWWWWWWWWWWWWW[ где: VPEEK ("Video RAM PEEK") - служебное слово; а д р е с - арифметическое выражение, целая часть значения которо- го принадлежит отрезку [0,16383] для компьютеров MSX-1 и [0,65535] для компьютеров MSX-2. Нарушение этого условия приводит к сообщению об ошибке "Illegal function call" . Функция VPEEK возвращает содержимое ячейки VRAM с номером "а д р е с". Действия функций VPEEK и PEEK аналогичны. Для з а п и с и данных в конкретную ячейку видеопамяти предназначен оператор VPOKE, синтаксис которого: XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V VPOKE а д р е с , д а н н о е V , ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ где: VPOKE ("Video RAM POKE") - служебное слово; а д р е с - арифметическое выражение, целая часть значения которо- го должна принадлежать отрезку [0,16383] для компьютеров MSX-1 и отрезку [0,65535] для компьютеров MSX-2; д а н н о е - арифметическое выражение, целая часть значения кото- рого должна принадлежать отрезку [0,255]. Если хотя бы одно из значений параметров а д р е с или д а н н о е не удовлетворяет требуемым условиям, то компьютер сообщает об ошибке: "Illegal function call" . Приведем простейший пример: вначале запишем в ячейку VRAM с номером 16383 число 10 командой VPOKE 16383,10 , а затем "прочтем"содержимое этой ячейки: print VPEEK(16383) 10 Ok Думаем, Вам ясна аналогия в действиях операторов VPOKE и POKE. Если Вы посмотрите на структуру видеопамяти в различных экранных режи- мах, то заметите, что некоторые области видеопамяти не используются. Эти области могут служить в качестве дополнительного пространства для сохране- ния данных при помощи оператора VPOKE, когда RAM почти полностью исполь- зована! Однако при таком методе необходимо постоянно пользоваться нулевым текстовым режимом экрана - при смене режима Ваши данные будут уничтожены. П р и м е р 1. "Спрячем" числовой массив (кстати,а где оператор DIM ?!) WWWWWWWWWWWWW в видеопамяти, а затем "извлечем его" оттуда. 10 SCREEN 0:WIDTH 40:ADR=4096 'Начальный адрес хранения данных в VRAM 20 INPUT"Число элементов массива";N 30 FOR T=1 TO N 40 INPUT"Очередной элемент";Z 50 FOR I=0 TO 7 60 VPOKE ADR+8*T+I,PEEK(VARPTR(Z)+I) 70 NEXT I,T 80 'Выведем элементы массива на экран 90 FOR T=1 TO N 100 IF VPEEK(ADR+8*T)\128=1 THEN Z$="-." ELSE Z$="+." 'Знак числа 110 FOR I=1 TO 7 120 Z$=Z$+RIGHT$("00"+HEX$(VPEEK(ADR+8*T+I)),2) 'Мантисса числа 130 NEXT I 140 IF(VPEEK(ADR+8*T) MOD 128)\64=1 THEN Z$=Z$+"E+" ELSE Z$=Z$+"E-" 150 Z$=Z$+MID$(STR$((VPEEK(ADR+8*T)MOD 128)-64),2) 'Порядок числа 160 U=VAL(Z$):PRINT U;:NEXT T П р и м е р 2. WWWWWWWWWWWWW 10 TP=4096:SCREEN 0:WIDTH 38 30 INPUT"Имя (символ '*' - для окончания)";N$ 40 IF LEFT$(N$,1)="*"THEN 120 50 IF TP+LEN(N$)+1>16383 THEN PRINT"Память заполнена":GOTO 120 60 FOR I=1 TO LEN(N$) 70 VPOKE TP,ASC(MID$(N$,I,1)):TP=TP+1 90 NEXT 100 VPOKE TP,0:TP=TP+1 110 GOTO 30 120 CLS:I=4096 140 X=VPEEK(I) 150 IF X=0 THEN PRINT:GOTO 170 160 PRINT CHR$(X) 170 I=I+1 180 IF I6 GOTO 120 130 PRINT:PRINT:POKE &HF418,1:DEFUSR=&H156 140 LPRINT CHR$(27);"c1";CHR$(27);"p0";CHR$(27);"T15";CHR$(27);">";CHR $(27);"Q"; 150 IF MP=1 THEN I=0:LPRINT CHR$(27);"E (c) LHsoft ver.2":LPRINT C HR$(27);"Q" ELSE I=43*MP-45 160 P=MP 170 GOSUB 460 180 IF P=1 THEN K=41 ELSE K=43 190 FOR N=1 TO K 200 GOSUB 260 210 I=I+1 220 NEXT N 230 LPRINT"ZWWWWQWWWWWQWWWWQWWWWWWQWWWWWWQWWWWWWQWWWWWWQWWWWWWQWWWWWWQ WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWQWWWWWWWWWWWWWWWWWWWWWWWWW[ 240 LPRINT CHR$(12);:IF P<6 THEN PRINT CHR$(27);"MPut in a new sheet " ;:QQ=USR(0):Q$=INPUT$(1):P=P+1:GOTO 170 250 CLS:KEYON:END 260 LPRINT"V V V V V V V V V V V V 270 LPRINT"V V "; 280 LPRINTUSING("###");I; 290 A1=I*8:A0=A1+2048:LPRINT" V ";RIGHT$("0"+HEX$(I),2);" V";A0;"V 0"; HEX$(A0);" V "; 300 LPRINTUSING("####");A1; 310 LPRINT" V ";RIGHT$("000"+HEX$(A1),4);" V"; 320 IF IMOD8=0 THEN LPRINT 8192+I/8;"V ";HEX$(&H2000+I/8);" V";ELSE LP RINT" V V"; 330 FOR T=0 TO 7:LPRINTUSING(" ###");PEEK(&H1BBF+I*8+T);:NEXT 340 LPRINT" V "; 350 FOR T=0 TO 7:LPRINT RIGHT$("0"+HEX$(PEEK(&H1BBF+I*8+T)),2);" ";:NE XT 360 LPRINT"V";CHR$(13);" ";CHR$(27);"N";CHR$(27);"S0008"; 370 M=128 380 FOR K1=0 TO 7 390 D=0 400 FOR K2=7 TO 0 STEP-1 410 D=D*2 420 IF PEEK(&H1BBF+I*8+K2)ANDM THEN D=D+1 430 NEXT K2:LPRINT CHR$(D);:M=M/2:NEXT K1 440 LPRINT CHR$(27);"Q" 450 RETURN 460 PRINT CHR$(27);"MCurrent page is";P; 470 LPRINT"XWWWWRWWWWWWWWWWRWWWWWWWWWWWWWWWWWWWWWWWWWWWRWWWWWWWWWWWWWR WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY 480 LPRINT"V V Код V Адрес в PGT V Адрес в CT V V 490 LPRINT"VСим-V TWWWWWWWWWWWWWRWWWWWWWWWWWWWUWWWWWWWWWWWWWS Стандартное значение V 500 LPRINT"Vвол V ASCII V SCREEN 0 V SCREEN 1 V SCREEN 1 V V 510 LPRINT"V TWWWWWRWWWWUWWWWWWRWWWWWWUWWWWWWRWWWWWWUWWWWWWRWWWWWWU WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWRWWWWWWWWWWWWWWWWWWWWWWWWWS 520 LPRINT"V V дес.VшестV дес. V шест.V дес. V шест.V дес. V шест.V десятичное V шестнадцатеричное V 530 LPRINT"TWWWWUWWWWWUWWWWUWWWWWWUWWWWWWUWWWWWWUWWWWWWUWWWWWWUWWWWWWU WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWS 540 RETURN  XI.1.4. Р е ж и м ы SCREEN 2 и SCREEN 4 Есть медленно и умеренно, не пить во время еды, тщательно разжевывать пищу и с легко- стью вставать из-за стола с чувством, что мог бы съесть еще. Ж.Фрумузак Разделим экран (размером 256\192 точек) на к в а д р а т ы размером по 8\8 точек. Легко подсчитать, что мы получим 768 таких квадратов.Каждый из них имеет свой номер, который хранится в Таблице PNT. А так как макси- мальное целое число, которое можно "разместить" в одном байте памяти (в данном случае VRAM), равно 255, поэтому Таблицу PNT необходимо разбить на т р и области, каждая из которых будет отвечать за нумерацию только 256 квадратов. При установке режимов SCREEN 2 или SCREEN 4 (при инициализации) в каж- дую треть Таблицы PNT последовательно заносятся целые числа от 0 до 255. XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Адрес байта PNT, отвечающего за к в а д р а т с номером n2, V V вычисляется при помощи арифметического выражения: V V BASE(5GN) + 256Gn1 + n2 , V V где: N - номер режима SCREEN (2 или 4); V V n1 - номер трети таблицы PNT, в которой находится квадрат; V V n2 - номер квадрата. V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Соответственно Таблице PNT, весь экран также разбивается на три области (каждая размером 256\64 точек), которые мы будем называть о к н а м и. XWWWRWWWRWWWWWWWWWWWWWWWWWWWWWRWWWY V 0 V 1 VGGG GGGV 31V TWWWQWWW[ ZWWWS V GGG О к н о 0 GGGV TWWWRWWWY XWWWS V224V225VGGG GGGV255V TWWWUWWWUWWWWWWWWWWWWWWWWWWWWWUWWWS V 0 V 1 VGGG GGGV 31V TWWWQWWW[ ZWWWS V GGG О к н о 1 GGGV TWWWRWWWY XWWWS V224V225VGGG GGGV255V TWWWUWWWUWWWWWWWWWWWWWWWWWWWWWUWWWS V 0 V 1 VGGG GGGV 31V TWWWQWWW[ ZWWWS V GGG О к н о 2 GGGV TWWWRWWWY XWWWS V224V225VGGG GGGV255V ZWWWQWWWQWWWWWWWWWWWWWWWWWWWWWQWWW[ Если мы захотим что-то изменить в Таблице PNT, то это немедленно ска- жется на изображении в соответствующем окне. Таблица PNT редко используется при составлении программ. Более того, можно рассматривать структуру экрана, "забыв" о делении экрана на окна. Достаточно при этом мысленно пронумеровать квадраты экрана от 0 до 767. Покажем, как можно использовать Таблицу PNT для копирования изображения в пределах о д н о г о экранного окна. Пусть, например, Вам нужно скопи- ровать изображение из квадрата с номером A в квадрат с номером B.Для этого в байт Таблицы PNT, отвечающий за квадрат с номером B, поместите номер ква- драта A. Этого достаточно для того, чтобы произошел процесс копирования! П р и м е р 1. WWWWWWWWWWWWW 10 COLOR 1,15:SCREEN 2 20 LINE(8,8)-(15,15),,BF 'Сформировано изображение в квадрате 33 30 A$=INPUT$(1) 40 VPOKE &H1800+40,33 'Скопировали его в квадрат 40 50 GOTO 50 Более того, Вы можете заранее (до того, как будете что-то рисовать на экране) "размножить" по нужным адресам номер определенного блока. Далее Вам достаточно лишь заполнить изображением тот квадрат,номер которого был "размножен",и, к Вашей радости,это изображение появится и в других местах! П р и м е р 2. WWWWWWWWWWWWW 10 COLOR 1,15:SCREEN 2 20 VPOKE &H1800+40,33 'Квадрат 40 подготовлен для приема 30 A$=INPUT$(1) 'копии из квадрата 33 40 LINE(8,8)-(15,15),,BF 'Сформировано изображение в 33-м и 50 GOTO 50 'в 40-м квадратах Если же Вы захотите скопировать какой-либо элемент в другое о к н о экрана, то Вам поможет работа с Таблицами PGT и CT,к рассмотрению которых мы и переходим. Каждый квадрат 8\8 точек разобьем на 8 горизонтальных участков,которые будем называть л и н и я м и . Информация о каждой линии (1 байт) содержится в Таблице PGT. Следовательно, объем этой Таблицы равен 768\8 = 6144 байтам. XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Адрес байта Таблицы PGT, отвечающего за расположение V V л и н и и вычисляется при помощи арифметического V V выражения BASE(5GN+2) + (256Gn1+n2)G8 + k , V V где: N - номер режима SCREEN; V V n1 - номер окна; V V n2 - номер квадрата в этом окне; V V k - номер линии в этом квадрате. V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Отметим, что если в Таблице PNT были изменения, то могут возникнуть за- труднения при попытке "нарисовать" что-либо в квадрате с измененным номе- ром. П р и м е р 3. WWWWWWWWWWWWW 10 COLOR 1,15:SCREEN 2 20 VPOKE 6144+40,VPEEK(6144+33)'Произошло изменение в Таблице PNT 30 A$=INPUT$(1) 'Ждем нажатия клавиши! 40 LINE(64,8)-(71,15),,BF 'Попытка вывести изображение в квадрате 50 GOTO 50 '40 не привела к ожидаемому результату! Так как информация о линии хранится в одном байте, то каждой точке ли- нии соответствует определенный бит этого байта. Оказывается, что "высве- тить точку на экране" - это значит установить нужный бит в 1,"стереть точ- ку с экрана" - это значит установить бит в 0 ! Если некоторый бит равен 0,то соответствующую ему точку на экране бу- дем называть точкой ф о н а, в противном случае будем называть ее точкой и з о б р а ж е н и я. Каждому байту Таблицы PGT однозначно соответствует один байт в Таблице цветов (CT), причем четыре младших бита этого байта кодируют локальный цвет ф о н а для каждой линии, а четыре старших - локальный цвет и з о- б р а ж е н и я. Например: Т о ч к и ф о н а V V V V V XWWWWRWW█WRWW█WRWW█WRWWWWRWWWWRWW█WRWW█WY V 1 V 0 V 0 V 0 V 1 V 1 V 0 V 0 V Байт PGT ZWW▌WQWWWWQWWWWQWWWWQWW▌WQWW▌WQWWWWQWWWW[ V V V Т о ч к и и з о б р а ж е н и я XWWWWRWWWWRWWWWRWWWWRWWWWRWWWWRWWWWRWWWWY V 0 V 1 V 0 V 1 V 1 V 1 V 0 V 1 V Байт CT ZWWWWQWWWWQWWWWQWWWWQWWWWQWWWWQWWWWQWWWW[ ZWWWWWWWW▌WWWWWWWW[ ZWWWWWWWW▌WWWWWWWWW[ V V Цвет и з о б р а ж е н и я Цвет ф о н а Таким образом,точки изображения будут иметь цвет 5, а точки фона будут иметь цвет 13. Так как из четырех двоичных цифр можно составить только 16 комбинаций, то ясно, что XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V одновременно на экране может быть не б о л е е 16 цветов V. ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Вследствие этого изменение цвета одной точки приводит к V V переопределению цвета и з о б р а ж е н и я в с е й линии! V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Адрес байта Таблицы CT, отвечающего за ц в е т линии, V V вычисляется при помощи арифметического выражения: V V BASE(5GN+1) + (256Gn1+n2)G8 + k , V V где: N - номер режима SCREEN; V V n1 - номер окна; V V n2 - номер квадрата в этом окне; V V k - номер линии в этом квадрате. V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ П р и м е р 4. Предположим, что Вам захотелось в 5-й линии 58-го квад- WWWWWWWWWWWWW рата 2-го окна в режиме SCREEN 2 точки 0╤3 изобразить цветом 3, а точки 4╤7 - цветом 15. 10 SCREEN 2 20 A=BASE(5*2+1)+(256*2+58)*8+5 30 B=BASE(5*2+2)+(256*2+58)*8+5 40 VPOKE B,&B11110000 50 VPOKE A,&H3F 60 GOTO 60 А теперь - давно обещанный Вам пример... П р и м е р 5. Копирование содержимого 0-го квадрата из 0-го окна в WWWWWWWWWWWWWW содержимое 0-го квадрата 2-го окна 10 COLOR 15,1,1:SCREEN2 20 LINE(0,0)-(7,7),,BF 25 FOR I=0 TO 7 30 VPOKE BASE(5*2+2)+(256*2+0)*8+I,VPEEK(BASE(5*2+2)+(256*0+0)*8+I): 'Копирование изображения 35 VPOKE BASE(5*2+1)+(256*2+0)*8+I,VPEEK(BASE(5*2+1)+(256*0+0)*8+I): 'Копирование цвета 40 NEXT 50 GOTO 50 П р и м е р 6. Изобразим квадрат, стороны которого имеют разные цвета, WWWWWWWWWWWWW не используя оператор PSET. 10 SCREEN 2 14 DATA 0,5,1,37,2,37,4,37,8,165,4,165,2,165,1,21,0,5,0,5,128,133,64, 133,32,133,64,21,128,21,0,5 'Фон синего цвета 15 FOR I=0 TO 1 G 16 FOR J=0 TO 7 Точки G G Точки 20 A=BASE(5*2+2)+(256*0+I)*8+J зеленого WW▐G G░WW красного 30 B=BASE(5*2+1)+(256*0+I)*8+J цвета G G цвета 40 READ Z,U:VPOKE A,Z:VPOKE B,U Точки WW▐G G░WW Точки 60 NEXT J желтого G G черного 70 NEXT I цвета G цвета 80 GOTO 80 XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Важно заметить, что Таблица CT инициализируется V V цветом ф о н а, задаваемым в операторе COLOR. V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Опишем алгоритм установки точки в режимах SCREEN 2 и SCREEN 4. 1. Первый шаг состоит в нахождении адреса байта Таблицы PGT в зависи- мости от координат (X,Y) ("г р у б а я настройка"). XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V А д р е с = ((Y\8)*32+Х\8)*8+Y MOD 8 V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ 2. После этого нужно точно определить номер бита найденного байта, от- вечающего за данную точку ("т о ч н а я настройка"). Трудность состоит в несоответствии номеров битов в байте и значений Х-координат тех точек, за которые этот байт отвечает: XWWWWWWWWWWWWRWWWRWWWRWWWRWWWRWWWRWWWRWWWRWWWY V Х MOD 8 V 0 V 1 V 2 V 3 V 4 V 5 V 6 V 7 V TWWWWWWWWWWWWUWWWUWWWUWWWUWWWUWWWUWWWUWWWUWWWS V Номер бита V 7 V 6 V 5 V 4 V 3 V 2 V 1 V 0 V. ZWWWWWWWWWWWWQWWWQWWWQWWWQWWWQWWWQWWWQWWWQWWW[ Формула, при помощи которой можно найти номер бита по Х - к о о р д и- н а т е, выглядит следующим образом: XWWWWWWWWWWWWWWWWWWWWWWWWWWY V NB = 2^(8+NOT(X MOD 8)) V. ZWWWWWWWWWWWWWWWWWWWWWWWWWW[ 3. Теперь остается записать "1" в найденный бит. XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V VPOKE А д р е с, VPEEK (А д р е с) OR NB V. ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ И...точка появится в требуемом месте экрана. 4. Наконец, изменим цвет изображения выведенной точки: XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V А д р е с = А д р е с + &h2000 V V V V VPOKE А д р е с, VPEEK(А д р е с) MOD 16 + COL*16 V , ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ где COL - номер цвета. Опишем алгоритм работы видеопроцессора при выводе содержимого квадрата 8\8 на графические экраны SCREEN 2 или SCREEN 4. Предположим, что нам известно местоположение данного квадрата на экра- не. Пусть N - номер квадрата с координатами (X,Y) (0ЁXЁ31,0ЁYЁ23)(номер N пока нам неизвестен!). Взгляните на рисунок: XWWWRWWWRWWWWWWWWWWWWWWWWWWWWWRWWWY Y=0 V 0 V 1 VGGG GGGV 31V G TWWWQWWW[ ZWWWS G V GGG GGG V Окно 0 G TWWWRWWWY XWWWS Y=7 V224V225VGGG GGGV255V TWWWUWWWUWWWWWWWWWWWWWWWWWWWWWUWWWS Y=8 V 0 V 1 VGGG XWWWY GGGV 31V G TWWWQWWW[ U█U X ZWWWS G V GGG YWWW▐NV GGG V Окно 1 G TWWWRWWWY UWU XWWWS Y=15 V224V225V GGGV255V TWWWUWWWUWWWWWWWWWWWWWWWWWWWWWUWWWS Y=16 V 0 V 1 V GGGV 31V G TWWWQWWW[ ZWWWS G V GGG GGG V Окно 2 G TWWWRWWWY XWWWS Y=23 V224V225V GGGV255V ZWWWQWWWQWWWWWWWWWWWWWWWWWWWWWQWWW[ XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V "Посмотрев" Таблицу PNT по адресу (Y\8)*256+(YMOD8)*32+X, найдем N. V V "Запишем" информацию о квадрате в Таблицу PGT по адресам: V V (Y\8)*2048+N*8 , (Y\8)*2048+N*8+1,(Y\8)*2048+N*8+2,(Y\8)*2048+N*8+3,V V (Y\8)*2048+N*8+4,(Y\8)*2048+N*8+5,(Y\8)*2048+N*8+6,(Y\8)*2048+N*8+7,V V в результате на экране в квадрате (X,Y) Вы увидите то, что хотели! V V А теперь "раскрасим" изображение. V V "Запишем" информацию о цвете в Таблицу CT по адресам: V V (Y\8)*2048+N*8 , (Y\8)*2048+N*8+1,(Y\8)*2048+N*8+2,(Y\8)*2048+N*8+3,V V (Y\8)*2048+N*8+4,(Y\8)*2048+N*8+5,(Y\8)*2048+N*8+6,(Y\8)*2048+N*8+7,V V в результате квадрат (X,Y) будет раскрашен в нужные Вам цвета. V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ П р и м е р 7. WWWWWWWWWWWWW 10 COLOR 1,15,8:SCREEN 2:X=5:Y=10 20 N=VPEEK(BASE(5*2+0)+(Y\8)*256+(YMOD8)*32+X) 'Видеопроцессор "опраши- вает" байт номер 69 в окне 1 Таблицы PNT и находит значение N (N=69, если Таблица PNT не изменялась) 30 FOR I=0 TO 7 40 VPOKE(&H800+N*8+I),&B11100011'Таблица PGT разделена на три окна,каж дое из которых содержит по 2048 байтов. Следовательно, окно 1 этой Таб лицы начинается по адресу 2048=&H800. Первый из 8 байтов квадрата, на который указывает N в окне 1, размещается в ячейке &Н800+N*8 50 NEXT 'Содержимое этих 8 байтов и будет выведено в квадрате (X,Y) 60 GOTO 60 П р и м е р 8. WWWWWWWWWWWWW 10 SCREEN 2:X=15:Y=12 20 A=VPEEK(BASE(5*2+0)+(Y\8)*256+(YMOD8)*32+X) '"Смотрим" PNT 30 FOR I=0 TO 7 40 VPOKE(BASE(5*2+2)+(Y\8)*2048+A*8+I),&b11100011 'Формируем "содержимое" квадрата 50 NEXT 60 GOTO 60 П р и м е р 9. Раскрасим выводимый квадрат 8-м и 10-м цветами. WWWWWWWWWWWWW 10 SCREEN 2:X=15:Y=12 20 A=VPEEK(BASE(5*2+0)+(Y\8)*256+(YMOD8)*32+X) '"Смотрим" Таблицу PNT 30 FOR I=0 TO 7 40 VPOKE(BASE(5*2+2)+(Y\8)*2048+A*8+I),&B11100011 'Формируем "содержимое" квадрата 50 NEXT 60 FOR I=0 TO 7 70 VPOKE(BASE(5*2+1)+(Y\8)*2048+A*8+I),&H8A ' "Раскрасим" квадрат 80 NEXT 90 GOTO 90 Однако в режимах SCREEN 2 и SCREEN 4 используется система координат (X,Y), в которой Х изменяется от 0 до 255, а Y от 0 до 191. Следующий при- мер иллюстрирует, как эта система координат соотносится с делением экрана на квадраты. П р и м е р 10. WWWWWWWWWWWWWW 10 SCREEN 2:X=100:Y=75 30 N=(Y\8)*32+(X\8) 'Номер квадрата, в котором будет выведена точка 40 M=Y MOD 8 'Номер линии в квадрате 50 AP=N*8+M 'Адрес соответствующего байта в Tаблице PGT 60 VA=&b00001000 65 AC=AP+&H2000 'Для определения соответствующего адреса в Таблице 'CT прибавим &H2000 к адресу Таблицы PGT 70 VPOKE AP,VA 'Значение VA=&B00001000 загрузим в PGT 80 VPOKE AC,&HF1 'Вводим значение &HF1 в Таблицу цветов для изображ 'ения точки белого цвета на черном фоне 90 IF INKEY$="" THEN 90 100 PSET(X,Y),6 110 GOTO 110 Сначала будет нарисована белая точка на черном фоне. Когда Вы нажмете любую клавишу, эта точка приобретет красный цвет. При программировании на MSX-BASIC этот способ формирования изображения применяется редко. Однако, если Вы хотите нарисовать что-либо с помощью программы на м а ш и н н о м я з ы к е, то приведенный выше алгоритм несомненно поможет Вам! Ясно,что обладая определенным набором графических элементов, можно син- тезировать различные графические изображения. Приведем без комментариев ряд примеров: 11) Одинаковые шаблоны 20 COLOR 15,1,1:CLS:SCREEN 2:COLOR 15,1:CLS 60 FOR I=0 TO 7 70 READ A:VPOKE I,A:VPOKE I+2048,A:VPOKE I+4096,A 80 NEXT 90 FOR I=6144 TO 6144+767:VPOKE I,0:NEXT 120 FOR I=8192 TO 14435:VPOKE I,241:NEXT 150 GOTO 150 160 DATA &b11111111 170 DATA &b10011001 180 DATA &b10111101 190 DATA &b11100111 200 DATA &b11100111 210 DATA &b10111101 220 DATA &b10011001 230 DATA &b11111111 12) 10 COLOR 1,15,6:SCREEN 2 20 FOR T=8 TO 15:LINE(8,T)-(15,T),T:NEXT:A$=INPUT$(1) 30 FOR T=0 T0 7:VPOKE 2048+33*8+T,VPEEK(33*8+T):NEXT 40 A$=INPUT$(1) 50 FOR T=0 TO 7:VPOKE 10240+33*8+T,VPEEK(8192+33*8+T):NEXT 60 A$=INPUT$(1) 13) 10 'Шахматная доска! 20 INPUT "Координаты X,Y";X,Y:X=X-XMOD8:Y=Y-YMOD8 21 IF X=0 THEN X=8 22 U=Y/8*32+X/8 25 COLOR 1,15,1:SCREEN 2 30 FOR T=0 TO 3:FOR I1=0 TO 1:FOR I2=0 TO 1:FOR F=U TO U+12 STEP 4: FOR K=0 TO 1 40 VPOKE BASE(10)+(F+(64+2)*K)+I2+32*I1+128*T,VPEEK (BASE(10)):NEXT K,F,I2,I1,T 50 LINE(0,0)-(8,192),1,BF:LINE(X,Y)-STEP(128,128),1,B:A$=INPUT$(1) 14) 10 COLOR 1,15,8:SCREEN 2:LINE(0,64)-(255,127),,BF 'Фон! 20 LINE(0,64)-(7,71),8,BF 'Перемещаемый объект! 30 FOR T=1 TO 31 40 F=VPEEK(6400+T):VPOKE 6400+T,VPEEK(6400+T-1):VPOKE 6400+T-1,F'Об мен значений между ячейками видеопамяти! 50 IF T=31 THEN VPOKE 6400+T,T:VPOKE 6400,0 60 NEXT T:GOTO 30 15) 10 CLEAR 200,&HC300:SCREEN 2 20 CIRCLE(90,70),56:PAINT STEP(0,0) 'Сформировано изображение 25 'Сохраняем изображения в памяти (RAM) 30 FOR I=BASE(5*2+1) TO BASE(5*2+1)+6143:POKE &HC300-BASE(5*2+1)+I, VPEEK(I):NEXT 40 FOR I=BASE(5*2+2) TO BASE(5*2+2)+6143:POKE &HC300+6144-BASE(5*2+ 2)+I,VPEEK(I):NEXT 50 SCREEN 0 60 SCREEN 2 'Вывод изображения на экран 70 FOR I=BASE(5*2+1) TO BASE(5*2+1)+6143:VPOKE I,PEEK(&HC300-BASE(5 *2+1)+I):NEXT 80 FOR I=BASE(5*2+2) TO BASE(5*2+2)+6143:VPOKE I,PEEK(&HC300-BASE(5 *2+2)+6144+I):NEXT 90 A$=INPUT$(1) 'Программа работает ╥ 5 минут  XI.1.5. Р е ж и м SCREEN 3 Как и в режиме SCREEN 2, экран в режиме SCREEN 3 разбит на к в а д р а- т ы размером 8\8 точек (32\24 квадрата). Каждый квадрат разобъем на две л и н и и толщиной четыре точки (на экране расположено 32\48 "толстых" линий). Каждая из этих "толстых" линий разбита на две "большие" точки (4\4 "маленьких" точек). WW▌WWXWWWWRWWWWRWWWWRWWWWY XWWWWRWWWWRWWWWRWWWWY V V V V V V V V V V⌡⌡⌡⌡V░WW "Маленькая" V VWWWWVWWWWVWWWWVWWWWV VWWWWVWWWWVWWWWVWWWWV точка "Толщина"V V V V V V V V V V V V VWWWWVWWWWVWWWWVWWWWV VWWWWVWWWWVWWWWVWWWWV линии V V V V V V V V V V V V VWWWWVWWWWVWWWWVWWWWV VWWWWVWWWWVWWWWVWWWWV V V V V V V V WW█WWZWWWWQWWWWQWWW К В А Д Р А Т WWWWQWWWWQWWWW[ XWWWWRWWWWRWWW WWWWRWWWWRWWWWY V V V V V V⌡⌡⌡⌡V⌡⌡⌡⌡V⌡⌡⌡⌡V⌡⌡⌡⌡V VWWWWVWWWWVWWWWVWWWWV VWWWWVWWWWVWWWWVWWWWV "Толстая" V V V V V V⌡⌡⌡⌡V⌡⌡⌡⌡V⌡⌡⌡⌡V⌡⌡⌡⌡V WWW▐ VWWWWVWWWWVWWWWVWWWWV VWWWWVWWWWVWWWWVWWWWV ░WW "Большая" линия V V V V V V⌡⌡⌡⌡V⌡⌡⌡⌡V⌡⌡⌡⌡V⌡⌡⌡⌡V точка VWWWWVWWWWVWWWWVWWWWV VWWWWVWWWWVWWWWVWWWWV V V V V V V⌡⌡⌡⌡V⌡⌡⌡⌡V⌡⌡⌡⌡V⌡⌡⌡⌡V TWWWWQWWWWQWWWWQWWWW[ ZWWWWQWWWWQWWWWQWWWWS V░WWWWWWWWWWWWW"Длина" линии WWWWWWWWWWWWW▐V Каждая из "больших" точек может быть раскрашена только в о д и н цвет. Попытка расположить в "большой" точке "маленькую" точку другого цвета при- ведет к и з м е н е н и ю цвета в с е й "большой" точки. Информация о цвете "толстой" линии находится в Таблице PGT, причем ле- вый полубайт байта PGT кодирует цвет левой "большой" точки "толстой" ли- нии, а правый полубайт отвечает за цвет правой "большой" точки. Б а й т PGT XWWWRWWWRWWWRWWWRWWWRWWWRWWWRWWWY V 1 V 0 V 0 V 0 V 1 V 0 V 1 V 0 V ZWWWQWWWQWWWQWWWQWWWQWWWQWWWQWWW[ ZWWWWWW▌WWWWWW[ ZWWWWWW▌WWWWWW[ V V Цвет левой "большой" точки Цвет правой "большой" точки XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Поскольку один байт Таблицы PGT кодирует цвета "толстой" V V линии,то эта Таблица требует 32 \ 48 = 1536 байтов VRAM V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ П р и м е р 1. 10 SCREEN 3:OPEN"GRP:" AS#1 WWWWWWWWWWWWW 20 PSET(8,0),3:PSET(12,0),1 'Рисуем "толстую" линию 30 PSET(30,80):PRINT #1,HEX$(VPEEK(8)) 40 A$=INPUT$(1) XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY VОператор COLOR с последующим оператором CLS инициализируют Таблицу PGTV, ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ причем все байты Таблицы PGT инициализируются цветом фона, закодированным как в левом, так и в правом полубайтах. А в следующей табличке показаны номера позиций "толстых" линий на экра- не: XWWWWRWWWWRWWWWRWWWWWRWWWWY V 0 V 8 V 16 V GGG V 248V П р и м е р 2. TWWWWUWWWWUWWWWUWWWWWUWWWWS WWWWWWWWWWWWW V 1 V 9 V 17 V GGG V 249V NEW TWWWWUWWWWUWWWWUWWWWWUWWWWS Ok V 2 V 10 V 18 V ... V 250V 10 SCREEN 3 TWWWWUWWWWUWWWWUWWWWWUWWWWS 20 VPOKE BASE(5*3+2)+6,&H56 V 3 V 11 V 19 V ... V 251V 30 VPOKE BASE(5*3+2)+7,&H34 TWWWWUWWWWUWWWWUWWWWWUWWWWS 40 VPOKE BASE(5*3+2)+8,&H78 V 4 V 12 V 20 V ... V 252V 50 VPOKE BASE(5*3+2)+9,&H9A TWWWWUWWWWUWWWWUWWWWWUWWWWS 60 A$=INPUT$(1) V 5 V 13 V 21 V ... V 253V Выполнив эту программу, Вы сможете TWWWWUWWWWUWWWWUWWWWWUWWWWS убедиться в правильности заполнения дан- V 6 V 14 V 22 V GGG V 254V ной таблички. TWWWWUWWWWUWWWWUWWWWWUWWWWS V 7 V 15 V 23 V GGG V 255V TWWWWUWWWWUWWWWUWWWWWUWWWWS V 256V 264V 272V GGG V 504V TWWWWUWWWWUWWWWUWWWWWUWWWWS V 257V 265V 273V GGG V 505V TWWWWUWWWWUWWWWUWWWWWUWWWWS V GGGV GGGV GGGV GGG V GGGV TWWWWUWWWWUWWWWUWWWWWUWWWWS V 263V 271V 279V GGG V 511V TWWWWUWWWWUWWWWUWWWWWUWWWWS V GGGV GGGV GGGV GGG V GGGV TWWWWUWWWWUWWWWUWWWWWUWWWWS V1285V1293V1301V GGG V1534V TWWWWUWWWWUWWWWUWWWWWUWWWWS V1286V1294V1302V GGG V1535V ZWWWWQWWWWQWWVWQWWWWWQWWWW[ XWWRWWRWWRW█RWWRWWRWWRWWY V 1V 0V 0V 0V 0V 0V 1V 0V ZWWQWWQWWQWWQWWQWWQWWQWW[ Байт из Таблицы PGT (в нем хранится цвет "толстой" линии с номером 1302) Приведем таблицу, по которой можно определить адрес байта Таблицы PGT, отвечающего за точку (X,Y), в режимах 2╤4 : XWWWWWWWWWWWWWWRWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Режим экрана V А д р е с б а й т а в PGT V TWWWWWWWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V 2 и 4 V ((Y\8)*32+(Х\8))*8+Y MOD 8 V TWWWWWWWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V 3 V BASE(5*3+2)+(Х\8)*8+(Y\32)*256+(Y\4) MOD 8 V ZWWWWWWWWWWWWWWQWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ П р и м е р 1. Заполнение экрана черными и белыми клетками в шахматном WWWWWWWWWWWWW порядке. 20 COLOR 15,1,1:CLS:SCREEN 3 50 FOR I=0 TO 7 STEP 2 60 VPOKE I,&HF1:VPOKE I+1,&H1F 70 NEXT 80 FOR I=BASE(5*3+0) TO I+767 90 VPOKE I,0 100 NEXT 110 GOTO 110 Таблица PGT разбита на 192 "кусочка" размером по 8 байтов. Каждый "ку- сочек" отвечает за 4 квадрата размером 2\2 "больших" точки (такой квад- рат называется и м е н е м).Упомянутые 4 имени имеют один и тот же номер, который записывается в Таблицу PNT. Но п е р в ы й квадрат - это имя с данным номером для строк (строка имеет высоту 2 "большие" точки) с номерами 0, 4, 8, 12, 16, 20; в т о р о й - для строк с номерами 1, 5, 9, 13, 17, 21; т р е т и й - для строк с номерами 2, 6, 10, 14, 18, 22; ч е т в е р т ы й - для строк с номерами 3, 7, 11, 15, 19, 23. XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Следовательно, весь экран разбит на ч е т ы р е о к н а V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ (понятие экранного окна см. в описании режима SCREEN 2). XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V За имя с номером N в окне с номером M отвечают байты PGT V V NG8+MG2 и NG8+MG2+1, V V где N╝[0,191], a M╝[0,3] V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Приведем структуру PGT с учетом разбивки экрана на имена и окна. XWWWWRWWWWRWWWWRWWWWWRWWWWY Номер имени V 0 V 1 V 2 V GGG V 15 V N V V V V V V TWWWWUWWWWUWWWWUWWWWWUWWWWS WY V 0 V 8 V 16 V GGG V 248V V TWWWWUWWWWUWWWWUWWWWWUWWWWS TW Имя с номером N для окна 0 V 1 V 9 V 17 V GGG V 249V V TWWWWUWWWWUWWWWUWWWWWUWWWWS WS V 2 V 10 V 18 V GGG V 250V V TWWWWUWWWWUWWWWUWWWWWUWWWWS TW Имя с номером N для окна 1 V 3 V 11 V 19 V GGG V 251V V TWWWWUWWWWUWWWWUWWWWWUWWWWS WS V 4 V 12 V 20 V GGG V 252V V TWWWWUWWWWUWWWWUWWWWWUWWWWS TW Имя с номером N для окна 2 V 5 V 13 V 31 V GGG V 253V V TWWWWUWWWWUWWWWUWWWWWUWWWWS WS V 6 V 14 V 22 V GGG V 254V V TWWWWUWWWWUWWWWUWWWWWUWWWWS TW Имя с номером N для окна 3 V V 7 V 15 V 23 V GGG V 255V V W█W TWWWWUWWWWUWWWWUWWWWWUWWWWS W[ V GGGV GGGV GGGV GGG V GGGV TWWWWUWWWWUWWWWUWWWWWUWWWWS V 263V 271V 279V GGG V 511V TWWWWUWWWWUWWWWUWWWWWUWWWWS V GGGV GGGV GGGV GGG V GGGV TWWWWUWWWWUWWWWUWWWWWUWWWWS WY V1285V1293V1301V GGG V1534V V TWWWWUWWWWUWWWWUWWWWWUWWWWS TW Имя с номером N для окна 3 V1286V1294V1302V GGG V1535V V ZWWWWQWWWWQWWWWQWWWWWQWW▌W[ W[ ZW Имя с номером 191 Приведем структуру PNT с номерами имен и их расположением на экране: 0 1 2 3 . . . 31 ░W Номер столбца XWWWRWWWRWWWRWWWRWWWRWWWRWWWRWWWWY 0 V 0 V 1 V 2 V 3 V...V...V...V 31 V Окно 0: строки 0,4, 8,12,16,20 TWWWUWWWUWWWUWWWUWWWUWWWUWWWUWWWWS 1 V 0 V 1 V 2 V...V...V...V 30V 31 V Окно 1: строки 1,5, 9,13,17,21 TWWWUWWWUWWWUWWWUWWWUWWWUWWWUWWWWS 2 V 0 V 1 V...V...V...V 29V 30V 31 V Окно 2: строки 2,6,10,14,18,22 TWWWUWWWUWWWUWWWUWWWUWWWUWWWUWWWWS 3 V 0 V...V...V...V 28V 29V 30V 31 V Окно 3: строки 3,7,11,15,19,23 TWWWUWWWUWWWUWWWUWWWUWWWUWWWUWWWWS 4 V 32V 33V 34V 35V...V 61V 62V 63 V TWWWUWWWUWWWUWWWUWWWUWWWUWWWUWWWWS . V...V...V...V...V...V...V...V ...V TWWWUWWWUWWWUWWWUWWWUWWWUWWWUWWWWS 7 V 32V33 V...V...V...V...V 62V 63 V TWWWUWWWUWWWUWWWUWWWUWWWUWWWUWWWWS . V...V...V...V...V...V...V...V ...V TWWWUWWWUWWWUWWWUWWWUWWWUWWWUWWWWS 23V160V161V...V...V...V189V190V 191V ▌ ZWWWQWWWQWWWQWWWQWWWQWWWQWWWQWWWW[ ZW Номер строки XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Номер имени в квадрате с координатами X,Y (X╝[0,31],Y╝[0,23]) V V хранится в ячейке VRAM с адресом: V V BASE(5*3+0)+(Y^4)*32+X . V V Это имя находится в окне с номером Y MOD 4 . V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ П р и м е р 2. WWWWWWWWWWWWW 10 COLOR 15,1,1:CLS:SCREEN 3 20 FOR I=0 TO 1 STEP 2 30 VPOKE I,&HF1:VPOKE I+1,&H1F 'Имя 0 для окна 0 (черно-белое) 40 VPOKE I+2,&HF8:VPOKE I+3,&H8F 'Имя 0 для окна 1 (красно-белое) 45 'Имя с номером 0 для окон 2 и 3 - пустое 60 NEXT 70 FOR I=BASE(5*3+0) TO I+767 ' Заполним PNT нулями 80 VPOKE I,0 90 NEXT 95 'На экране появятся 6 (24/4) черно-белых и красно-белых полос 100 GOTO 100 XI.1.6. Р е ж и м ы SCREEN 5, SCREEN 6, SCREEN 7 и SCREEN 8 (д л я к о м п ь ю т е р о в MSX-2) XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V В режимах SCREEN 5 ╤ SCREEN 8 Таблицы PGT и CT о т с у т с т в у ю т!V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Поэтому вся информация об изображении точек находится в Таблице PNT. В отличие от рассмотренных ранее режимов, эти режимы не имеют деления экрана на к в а д р а т ы . Вначале приведем важную табличку, которая поможет Вам определить адрес байта Таблицы PNT, отвечающего за точку с координатами (X,Y), в различных режимах SCREEN: XWWWWWWWWWWWWRWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY VРежим экранаV А д р е с б а й т а в PNT V TWWWWWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V SCREEN 5 V BASE(5*5)+(256/2)*Y+(X\2) V V SCREEN 6 V BASE(5*6)+(512/4)*Y+(X\4) V V SCREEN 7 V BASE(5*7)+(512/2)*Y+(X\2) V V SCREEN 8 V BASE(5*8)+(256/1)*Y+(X\1) V ZWWWWWWWWWWWWQWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ 1. В режиме SCREEN 5 экран разделен на 212 строк (или на 192 строки), состоящих из 256 точек каждая. Совокупность двух точек по горизонтали будем называть л и н и е й (точ- ки 0 и 1 образуют 1-ю линию , точки 2 и 3 - 2-ю линию ,..., точки 254 и 255 - 128-ю линию). Каждая линия кодируется в о д н о м байте, причем четыре старших би- та этого байта определяют цвет первой точки, а четыре младших - цвет вто- рой точки. Ясно, что требуется 212\256/2=27136 байтов для хранения све- дений о цветах линий (как раз объем Таблицы PNT в режиме SCREEN 5 !). Первый байт Таблицы PNT "хранит" информацию о цвете первой линии пер- вой строки экрана, второй байт - о цвете второй линии той же строки,и так далее: 1-й байт Таблицы PNT 2-й байт Таблицы PNT XWWWWWWWWWWWWWWWWWRWWWWWWWWWWWWWWWWWYXWWWWWWWWWWWWWWWWWRWWWWWWWWWWWWWWWWWY V Цвет 1-й точки V Цвет 2-й точки VV Цвет 1-й точки V Цвет 2-й точки V V первой линии V первой линии VV второй линии V второй линии V ZWWWWWWWWWWWWWWWWWQWWWWWWWWWWWWWWWWW[ZWWWWWWWWWWWWWWWWWQWWWWWWWWWWWWWWWWW[ XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Таблица PNT инициализируется цветом фона, который V V устанавливается оператором COLOR V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ П р и м е р 1. Изобразим в режиме SCREEN 5 точку с координатами (X,Y) WWWWWWWWWWWWWW белым цветом. 10 COLOR 15,4,7:INPUT"X,Y";X,Y 20 SCREEN 5 XWWWWWWWWW Код цвета фона 30 AD=BASE(5*5)+Y*128+(X\2) VXWWWWWWWW Код цвета изображения ██ 40 IF XMOD2=0 THEN C=&HF4 ELSE C=&H4F'Если не будет этого условия, то изобразятся д в е соседние точки 50 VPOKE AD,C ' Этот оператор эквивалентен оператору PSET(X,Y),15. 60 GOTO 60 Приведем схематическое изображение PNT для режима SCREEN 5. XWWWWWWWWWWWWWWY V 0-й байт V- отвечает за точки с координатами (0,0) и (1,0) TWWWWWWWWWWWWWWS V 1-й байт V- отвечает за точки с координатами (2,0) и (3,0) TWWWWWWWWWWWWWWS V GGG V GGG TWWWWWWWWWWWWWWS V 127-й байт V- отвечает за точки с координатами (254,0) и (255,0) TWWWWWWWWWWWWWWS V 128-й байт V- отвечает за точки с координатами (0,1) и (1,1) TWWWWWWWWWWWWWWS V GGG V GGG TWWWWWWWWWWWWWWS V 27134-й байт V- отвечает за точки с координатами (252,211) и (253,211) TWWWWWWWWWWWWWWS V 27135-й байт V- отвечает за точки с координатами (254,211) и (255,211) ZWWWWWWWWWWWWWW[ 2. В режиме SCREEN 6 экран имеет 212 строк (или 192 строки) по 512 то- чек в каждой строке. Количество байтов в Таблице PNT точно такое же,как и в Таблице PNT режима SCREEN 5: информация об одной строке экрана кодирует- ся в 128 байтах. Л и н и я в режиме SCREEN 6 состоит из четырех точек и кодируется в о д н о м байте. А тогда п а л и т р а каждой точки кодируется в двух битах, а так как из двух двоичных цифр можно составить только четыре ком- бинации (00,01,10,11), то каждую точку экрана можно раскрасить не более чем ч е т ы р ь м я различными способами. Так, например, оператор VPOKE 0,&B11100100 присваивает палитру 3 первой точке первой линии, палитру 2 - второй точке первой линии, палитру 1 - третьей точке первой линии и палитру 0 - четвер- той точке первой линии. Б а й т Т а б л и ц ы PNT XWWWRWWWRWWWRWWWRWWWRWWWRWWWRWWWY V 1 V 1 V 1 V 0 V 0 V 1 V 0 V 0 V ZWWWQWWWQWWWQWWWQWWWQWWWQWWWQWWW[ ZWWW▌WWW[ZWW▌WW[ZWWW▌WWW[ZWW▌WWW[ V V V V Палитра Палитра Палитра Палитра первой второй третьей четвертой точки точки точки точки XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Таблица PNT инициализируется последними двумя V V битами цвета фона, задаваемого в операторе COLOR. V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Поясним сказанное примером. Если цвет фона имеет номер 13=&B1101, то в каждый байт Таблицы PNT будет занесено число &B01010101 (четыре раза пов- торяются последние два бита кода цвета фона). Приведем схематическое изображение PNT для режима SCREEN 6. XWWWWWWWWWRWWWWWWWWWRWWWWWWWWWRWWWWWWWWWY 0-й байт V (0,0) V (1,0) V (2,0) V (3,0) V TWWWWWWWWWUWWWWWWWWWUWWWWWWWWWUWWWWWWWWWS 1-й байт V (4,0) V (5,0) V (6,0) V (7,0) V TWWWWWWWWWUWWWWWWWWWUWWWWWWWWWUWWWWWWWWWS GGG V GGG V GGG V GGG V GGG V TWWWWWWWWWUWWWWWWWWWUWWWWWWWWWUWWWWWWWWWS 127-й байт V (508,0) V (509,0) V (510,0) V (511,0) V TWWWWWWWWWUWWWWWWWWWUWWWWWWWWWUWWWWWWWWWS 128-й байт V (0,1) V (1,1) V (2,1) V (3,1) V TWWWWWWWWWUWWWWWWWWWUWWWWWWWWWUWWWWWWWWWS GGG V GGG V GGG V GGG V GGG V TWWWWWWWWWUWWWWWWWWWUWWWWWWWWWUWWWWWWWWWS 27135-й байт V(508,211)V(509,211)V(510,211)V(511,211)V ZWWWWWWWWWQWWWWWWWWWQWWWWWWWWWQWWWWWWWWW[ 3. Как и в режиме SCREEN 6, в режиме SCREEN 7 на экране расположено 212 строк (или 192 строки), состоящих из 512 точек каждая. Однако один байт Таблицы PNT кодирует л и н и ю, состоящую из д в у х точек: стар- шие четыре бита определяют палитру левой точки, младшие четыре - палитру правой точки. 1-й байт Таблицы PNT 2-й байт Таблицы PNT XWWWWWWWWWWWWWWWWRWWWWWWWWWWWWWWWWY XWWWWWWWWWWWWWWWWRWWWWWWWWWWWWWWWWY V Палитра первой V Палитра второй V V Палитра первой V Палитра второй V V точки 1-й линииV точки 1-й линииV V точки 2-й линииV точки 2-й линииV ZWWWWWWWWWWWWWWWWQWWWWWWWWWWWWWWWW[ ZWWWWWWWWWWWWWWWWQWWWWWWWWWWWWWWWW[ Следовательно, каждой точке может быть присвоена любая из 16 палитр. Поскольку для кодирования номера палитры необходимо четыре бита, то Таб- лица PNT занимает объем 212\512/2 = 54272 байта. Уже отсюда становится понятно, что для использования этого режима VRAM должна иметь объем не менее 128 Кбайтов! Режим SCREEN 7 аналогичен режиму SCREEN 5, за исключением того, что в режиме SCREEN 7 в строке экрана в два раза б о л ь ш е точек. XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Таблица PNT инициализируется цветом фона, который V V устанавливает оператор COLOR . V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Приведем схематическое изображение PNT для режима SCREEN 7. XWWWWWWWWWWWWWWY V 0-й байт V- отвечает за точки с координатами (0,0) и (1,0) TWWWWWWWWWWWWWWS V 1-й байт V- отвечает за точки с координатами (2,0) и (3,0) TWWWWWWWWWWWWWWS V GGG V GGG TWWWWWWWWWWWWWWS V 255-й байт V- отвечает за точки с координатами (510,0) и (511,0) TWWWWWWWWWWWWWWS V 256-й байт V- отвечает за точки с координатами (0,1) и (1,1) TWWWWWWWWWWWWWWS V GGG V GGG TWWWWWWWWWWWWWWS V 54270-й байт V- отвечает за точки с координатами (508,211) и (509,211) TWWWWWWWWWWWWWWS V 54271-й байт V- отвечает за точки с координатами (510,211) и (511,211) ZWWWWWWWWWWWWWW[ 4. В режиме SCREEN 8 экран состоит из 212 строк по 256 точек в каждой или из 212 строк по 192 точки в каждой. Л и н и я состоит из одной-единственной точки. Цвет линии здесь уже определяется не кодом палитры, а непосредственным заданием "смеси" основ- ных цветов. Этот оригинальный способ кодирования цвета требует по одному б а й т у (!) на линию, а значит, на точку! Поэтому Таблица PNT имеет объем 212G256=54272 байта. Уже отсюда становится понятно, что для использования этого режима VRAM должна иметь объем не менее 128 Кбайтов! Информация о линии с координатами (X,Y) находится по адресу X+256GY в Таблице PNT. Для высвечивания этой линии достаточно занести по этому ад- ресу значение цвета из отрезка [0,255], которое можно найти по формуле: XWWWWWWWWWWWWWWWWY V C = 32GG+4GR+B V , ZWWWWWWWWWWWWWWWW[ где G, R, B - значения в диапазоне от 0 до 7, определяющие интенсивность зеленого ("Green"), красного ("Red") и синего ("Blue") цветов соответст- венно. Например, цвету с номером 187=&b10111011 соответствует следующее "содержимое" байта Таблицы PNT: Б а й т Т а б л и ц ы PNT XWWWRWWWRWWWRWWWRWWWRWWWRWWWRWWWY V 1 V 0 V 1 V 1 V 1 V 0 V 1 V 1 V ZWWWQWWWQWWWQWWWQWWWQWWWQWWWQWWW[ ZWWWWWWWWWW[ ZWWWWWWWWWW[ZWWWWWW[ Интенсивность Интенсивность Интенсивность зеленого красного синего цвета цвета цвета XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V При инициализации байты Таблицы PNT получают номер V V цвета фона (который изменяется в пределах от 0 до 255).V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Приведем схематическое изображение PNT для режима SCREEN 8. XWWWWWWWWWWWWWWY Базовый адресV 0-й байт V- отвечает за точку с координатами (0,0) PNT TWWWWWWWWWWWWWWS V 1-й байт V- отвечает за точку с координатами (1,0) TWWWWWWWWWWWWWWS V GGG V GGG TWWWWWWWWWWWWWWS V 255-й байт V- отвечает за точку с координатами (255,0) TWWWWWWWWWWWWWWS V 256-й байт V- отвечает за точку с координатами (0,1) TWWWWWWWWWWWWWWS V GGG V TWWWWWWWWWWWWWWS V 54270-й байт V- отвечает за точку с координатами (256,210) TWWWWWWWWWWWWWWS V 54271-й байт V- отвечает за точку с координатами (256,211) ZWWWWWWWWWWWWWW[ XI.1.7. Т а б л и ц а п а л и т р (д л я к о м п ь ю т е р о в MSX-2) Независимо от режима SCREEN Таблица PT занимает в видеопамяти объем 32 байта. "Местоположение" этой Таблицы зависит от режима SCREEN. XWWWWWWWWWWWWWWWWWWWWWWWWRWWWWWWWWWWRWWWWWWWWWWWWWWWWWWWWWWWWWY V Р е ж и м V А д р е сV К о м м е н т а р и й V VWWWWWWWWWWWWWWWWWWWWWWWWUWWWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWS V SCREEN 0 (40 символов) V &H0400 V Не используется в MSX-1 V V SCREEN 0 (80 символов) V &H0800 V V V SCREEN 1 V &H2020 V Не используется в MSX-1 V V SCREEN 2 V &H1B80 V Не используется в MSX-1 V V SCREEN 3 V &H2020 V Не используется в MSX-1 V V SCREEN 4 V &H1E80 V V V SCREEN 5 V &H7680 V V V SCREEN 6 V &H7680 V Используются палитры 0╤3V V SCREEN 7 V &HFA80 V V V SCREEN 8 V &HFA80 V Не используется V ZWWWWWWWWWWWWWWWWWWWWWWWWQWWWWWWWWWWQWWWWWWWWWWWWWWWWWWWWWWWWW[ Каждая из палитр закодирована в д в у х байтах. XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Адрес AD первого байта палитры N в Таблице PT вычисляется по формуле:V V AD=A0+2GN , V V где А0-адрес начала Таблицы PT (например,в режиме SCREEN 1 Таблица PTV V начинается по адресу &h2020). V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ По адресу AD в Таблице PT находится байт, который мы назовем "красный- синий". Биты 4╤6 этого байта определяют пропорцию к р а с н о г о,а биты 0╤2 - пропорцию с и н е г о цвета. Байт Таблицы PT с адресом AD+1 опре- деляет пропорцию зеленого цвета, закодированную в битах 0╤2 : 7 6 5 4 3 2 1 0 ░WW Номера битов XWWWRWWWRWWWRWWWRWWWRWWWRWWWRWWWY AD V V O V O V O V V O V O V O V░WWWWWWY ZWWWQWWWQWWWQWWWQWWWQWWWQWWWQWWW[ V ZWWWWW▌WWWWW[ ZWWWWW▌WWWWW[ V Два V V ░WW последовательных Красный цвет ("Red") Синий цвет ("Blue") V байта XWWWRWWWRWWWRWWWRWWWRWWWRWWWRWWWY V Таблицы PT AD+1 V V V V V V O V O V O V░WWWWWW[ ZWWWQWWWQWWWQWWWQWWWQWWWQWWWQWWW[ ZWWWWW▌WWWWW[ ZWW Зеленый цвет ("Green") П р и м е р 2. "Чтение" Таблицы палитр в режиме SCREEN 1. Выполнив WWWWWWWWWWWWWW программу, Вы узнаете, каким образом оператор SCREEN инициализирует Таблицу PT. 10 COLOR 1,15,7:SCREEN 1 20 ' ::::::::::::::: 30 FOR N=0 TO 15 40 AD=&H2020+2*N 50 RB=VPEEK(AD):G=VPEEK(AD+1)'Обратите внимание на мнемонику имен: 'RB и G! 60 PRINT N;TAB(4);HEX$(RB);HEX$(G) 70 NEXT Отметим, что оператор COLOR=(GGG) переопределяет байты Таблицы PT в со- ответствии с указанной палитрой. П р и м е р 3. Изменим Таблицу PT и вновь "прочитаем" ее. WWWWWWWWWWWWW 10 COLOR 1,15,7:SCREEN 1 20 GOSUB 30:COLOR=(7,7,2,7):GOSUB 30:COLOR=(7,7,7,4):GOSUB 30:END 30 FOR N=0 TO 15 40 AD=&H2020+2*N 50 RB=VPEEK(AD):G=VPEEK(AD+1) 60 PRINT N;TAB(4);HEX$(RB);HEX$(G) 70 NEXT 80 A$=INPUT$(1):CLS:RETURN Как видите, байты, соответствующие палитре 7,изменяются; немедленно из- меняется и цвет бордюра! Разумеется, палитры в Таблице PT могут быть изменены и операторами VPOKE. Однако следует отметить, что изменение Таблицы PT операторами VPOKE само по себе не приводит к изменению цветов. Для считывания содержи- мого Таблицы PT и присвоения цвета новой палитре существует специальный оператор. Его синтаксис предельно прост: XWWWWWWWWWWWWWWWWWY V COLOR = RESTORE V . ZWWWWWWWWWWWWWWWWW[ П р и м е р 4. WWWWWWWWWWWWW 10 COLOR 1,15,7:SCREEN 1 20 GOSUB 30:VPOKE &H2020+14,&H77:VPOKE &H2020+15,2 25 COLOR=RESTORE:GOSUB 30:END 30 FOR N=0 TO 15 40 AD=&H2020+2*N 50 RB=VPEEK(AD):G=VPEEK(AD+1) 60 PRINT N;TAB(4);HEX$(RB);HEX$(G) 70 NEXT 80 A$=INPUT$(1):CLS:RETURN XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Для инициализации Таблицы PT используются: V V ═) оператор SCREEN ; V V ║) оператор COLOR=NEW ; V V ╖) оператор COLOR (без параметров!) . V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[  Вопрос в том, кто за это отвечает? Шалтай-Болтай XI.1.8. С п р а й т ы Видеопроцессор имеет д в а режима отображения спрайтов. Режим отобра- жения спрайтов выбирается автоматически в соответствии с выбранным Вами режимом SCREEN. Если в Вашей программе присутствует один из операторов: SCREEN 1,SCREEN 2,SCREEN 3, то Вы находитесь в р е ж и м е с п р а й т о в 1. Если же в Вашей программе присутствует один из операторов: SCREEN 4,SCREEN 5,SCREEN 6,SCREEN 7,SCREEN 8, то Вы находитесь в р е ж и м е с п р а й т о в 2. Вкратце напомним уже известные Вам результаты. В р е ж и м е с п р а й т о в 1 на экран одновременно можно вывес- ти 32 спрайта с номерами от 0 до 31. Спрайты с м е н ь ш и м и номерами имеют более высокий приоритет. На одной горизонтальной линии экрана разме- щается до ч е т ы р е х спрайтов с высшим приоритетом, а в пересекающей- ся части спрайты с более низким приоритетом становятся невидимыми. Когда два спрайта с т а л к и в а ю т с я , т.е.пересекаются запол- ненные части их образов (если сталкиваются два спрайта, шаблоны которых занулены,или спрайты сталкиваются зануленными участками шаблонов,то столк- новение не обнаруживается), тогда бит 5 регистра состояния с номером 0 ус- танaвливается в 1. Кроме того, если на одной горизонтальной линии находятся п я т ь или более спрайтов, то 6-й бит регистра состояния будет установлен в 1,а пять младших битов зафиксируют номер пятого спрайта. В р е ж и м е с п р а й т o в 2 на экран одновременно можно вывес- ти 32 спрайта, пронумерованных от 0 до 31. Спрайты с м е н ь ш и м и но- мерами имеют более высокий приоритет.На одной горизонтальной линии экрана изображается до в о с ь м и спрайтoв с высшим приоритетoм, а в перекры- вающейся части спрайты с меньшим приоритетом не видны. Столкновение д в у х спрайтов обнаруживается по состоянию 5-го бита регистра состояния с номером 0 (он устанавливается в 1). Интересно отме- тить, что в этом случае координаты столкновения фиксируются в регистрах состояния с номерами от 3 до 5. Вдобавок, если на одной горизонтальной линии экрана появляются девять или более спрайтов, то 6-й бит регистра состояния с номером 0 будет уста- новлен в 1, а 5 младших битов этого регистра зафиксируют номер девятого спрайта. В режимах SCREEN 1 ╤ SCREEN 3 спрайты задаются при помощи двух Таблиц: 1) Таблицы ш а б л о н о в спрайтов (SGT); 2) Таблицы а т р и б у т о в спрайтов (SAT); В режимах SCREEN 4 ╤ SCREEN 8 дополнительно используется еще и 3) Таблица ц в е т о в спрайтов (SCT). В этом разделе мы расскажем Вам о каждой Таблице. Ш а б л о н (от нем. Schablone-образец, модель)- пластина с вырезами, очертания которых соответ- ствуют контуру чертежа, изделия и т.п. Советский Энциклопедический Словарь 1. Таблица SGT содержит образы спрайтов (которые ниже мы будем назы- вать ш а б л о н а м и), установленные оператором SPRITE$(N)= с т р о к о в о е в ы р а ж е н и е Эта Таблица инициализируется нулями оператором SCREEN, причем оператор SCREEN ,T приводит к исчезновению спрайтов с экрана, сохраняя при этом на экране остальную информацию, а операторы SCREEN M,T и SCREEN M инициализи- руют всю видеопамять. 2048 байтов Таблицы SGT позволяют хранить информацию о 256 шаблонах спрайтов, если в т о р ы м параметром в операторе SCREEN является 0 или 1, и информацию о 64 шаблонах, если этот параметр равен 2 или 3. Адрес шаблона спрайта в Таблице SGT, созданного при помощи оператора SPRITE$(N)=GGG, вычисляется по формуле: XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V A0 +8GN или V V A0+32GN , V V где А0 - адрес начала Таблицы SGTV . ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Напомним Вам,что начальный адрес Таблицы SGT для разных режимов SCREEN возвращает функция BASE(): BASE(M*5+4) , где M - номер режима SCREEN. XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Байты шаблона записаны в Таблице SGT в том же порядке, что V V и байты (символы!) значения строкового выражения, стоящего V V в правой части оператора SPRITE$(N)=GGG V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Теперь, надеемся, Вам понятно, что действие, например, операторов: SCREEN 1:SPRITE$(0)=STRING(8,255) эквивалентно действию цикла: FOR I=0 TO 7:VPOKE &H3800+I,255:NEXT WWW▌WW П р и м е р 1. ZW BASE(1*5+4) WWWWWWWWWWWWWW 10 SCREEN 1,0 20 A$="Microsoft" 8 байтов 8 байтов 8 байтов 30 FORI=1TOLEN(A$):XWWWWWWWWWWWWWWWWRWWWWWWWWWWWWWWWWRWWWWWWWWWWWWWWWWY B$=MID$(A$,I,1) V "Место" в SGT V "Место" в SGT V "Место в SGT V 50 VPOKEBASE(1*5+4)Vдля 0-го спрайтаVдля 1-го спрайтаVдля 2-го спрайтаV +8*2+(I-1),ASC(B$) ZWWWWWWWWWWWWWWWWQWWWWWWWWWWWWWWWWQ▌WWWWWWWWWWWWWWW[ 60 NEXT V 70 PRINT SPRITE$(2) BASE(1*5+4)+8*2 Атрибут (от лат. Attribuo - придаю, наделяю) - необходимое, существенное, неотъемлемое свойст- во объекта. Советский Энциклопедический Словарь 2. В 128 байтах Таблицы атрибутов спрайтов (Таблицы SAT) кодируется ин- формация о с п о с о б е вывода образов (шаблонов) спрайтов на экран.По- скольку одновременно на экране может отображаться не более 32 спрайтов,то атрибуты одного спрайта кодируются в 128/32 = 4 байтах. Вероятно, Вас заинтересует их содержимое? Поспешим удовлетворить Ваше любопытство: Б а й т ы Таблицы SAT XWWWWWWWWWWWWWWRWWWWWWWWWWWWWWRWWWWWWWWWWWWWWRWWWWWWWWWWWWWWWY V Первый байт V Второй байт V Третий байт V Четвертый байтV ZWWWWWW▌WWWWWWWQWWWWWWW▌WWWWWWQWWWWWWW▌WWWWWWQWWWWWWWW▌WWWWWW[ V V V V Координата Y Координата X Номер шаблона Номер палитры (для режимов (0╤255) (0╤255) в SGT (0╤255) SCREEN 1 ╤ SCREEN 3) Цвет изображения (для режи- мов SCREEN 4 ╤ SCREEN 8) Отметим, что если величина Y-координаты спрайта равна 216,то все спрай- ты с меньшим приоритетом не будут отображаться. Например, если Y-координа- та спрайта с номером 10 равна 216,то спрайты с номерами от 10 до 31 не бу- дут отображаться. Если размер спрайта - 16\16, то,как известно, одному спрайту соответст- вуют ч е т ы р е номера шаблонов спрайта. В этом случае можно задать лю- бой из четырех номеров шаблонов спрайта! Таким образом, если мы обозначим A0 - начальный адрес Таблицы SAT, то оператор PUT SPRITE SN,(X,Y),C,NP эквивалентен следующим операторам: AD=A0+4*SN:VPOKE AD,Y:VPOKE AD+1,X:VPOKE AD+2,NP:VPOKE AD+3,C ▌ ▌ ▌ ▌ ▌ ZW!!! ZW!!! ZW!!! ZW!!! ZW!!! П р и м е р 2. 10 COLOR 1,15,8:SCREEN 1,1:SPRITE$(20)="СПРАЙТ!" WWWWWWWWWWWWW 20 PUT SPRITE 2,(165,38),7,20 30 ? "X=";VPEEK(6921):? "Y="VPEEK(6920):?"Цвет номер"; VPEEK(6923):?"Шаблон";VPEEK(6922) 40 FOR T=0 TO 8:? CHR$(VPEEK(14336+VPEEK(6922)*8+T));: NEXT Рассмотрим подробнее содержимое ч е т в е р т о г о байта Таблицы SAT для какого-нибудь выбранного спрайта. XWWWRWWWRWWWRWWWRWWWRWWWRWWWRWWWY Старший битV V 0 V 0 V 0 V Цвет спрайта V Младший бит ZW▌WQWWWQWWWQWWWQWWWQWWWQWWWQWWW[ ZWW Синхронизирующий бит (его имя EC) Его м л а д ш и е четыре бита определяют текущий ц в е т спрайта (для высвечиваемых точек шаблона). Невысвечиваемые точки шаблона "окраше- ны" в прозрачный цвет. Старший бит этого байта называется с и н х р о н и з и р у ю щ и м. Если его значение равно 1 , то положение спрайта смещается в л е в о на 32 точки. П р и м е р 3. "Работа" синхронизирующего бита. WWWWWWWWWWWWW 20 COLOR 1,15,15 30 SCREEN 1,3:WIDTH 30 40 SPRITE$(0)=STRING$(32,255) 50 PUT SPRITE 0,(80,80),8,0 60 VPOKE 6915,&B10001000 61 ' ▌ 63 ' VWWWWWWWWWWWW 1 - координаты спрайта (X-32,Y) 65 ' ZWWWWWWWWWWWW 0 - координаты спрайта (X,Y) 70 LOCATE 2,8,0:PRINT"Нажмите клавишу" 80 A$=INPUT$(1) 90 VPOKE 6915,&B00001000 100 END Разумеется, при программировании на языке MSX-BASIC лучше использовать оператор PUT SPRITE, а не последовательность операторов VPOKE. XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Однако последовательность операторов VPOKE гораздо проще V V моделировать на м а ш и н н о м я з ы к е, чем оператор V V PUT SPRITE V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Более того,знание структуры Таблицы SAT позволяет "прочитать" атрибуты спрайта непосредственно из п а м я т и ! П р и м е р 4. Превращение белого спрайта в черный и наоборот. WWWWWWWWWWWWW 10 COLOR 1,4,8:SCREEN 1,1:SPRITE$(0)=STRING$(8,255) 30 PUT SPRITE 0,(115,80),15,0 40 IF INKEY$="" THEN 40 50 GOSUB 100:GOTO 40 100 VPOKE &H1B03,VPEEK(&H1B03) XOR 14 'BASE(1*5+3) WW▐ &H1B00 110 RETURN WWWWWWWWWW▌WWWWWWWWW V &b00001111 XOR &b00001110 = &b00000001 WW▐ цвет 1 Оператор SCREEN инициализирует четыре байта Таблицы SAT, кодирующих ат- рибуты одного спрайта, следующим образом: XWWWWWWWWWWWWWWRWWWWWWWWWWWWWWRWWWWWWWWWWWWWWRWWWWWWWWWWWWWWWY V Первый байт V Второй байт V Третий байт V Четвертый байтV ZWWWWWW▌WWWWWWWQWWWWWWW▌WWWWWWQWWWWWWW▌WWWWWWQWWWWWWWW▌WWWWWW[ V V V V Координата Y Координата X Номер шаблона Текущий цвет в Таблице SGT изображения К о о р д и н а т а Y отображения спрайта по умолчанию приведена в следующей табличке (из нее видно, что при таких Y неважно, каково Х): XWWWWWWWWWWWWWWWWWWRWWWWWRWWWWWY V Серия компьютера VMSX-1VMSX-2V VWWWWWWWWWWWWWWWWWWUWWWWWUWWWWWS V Р е ж и м экранаV Y V Y V VWWWWWWWWWWWWWWWWWWUWWWWWUWWWWWS V SCREEN 1 V 209 V 209 V V SCREEN 2 V 209 V 209 V V SCREEN 3 V 209 V 209 V V SCREEN 4 V V 217 V V SCREEN 5 V V 217 V V SCREEN 6 V V 217 V V SCREEN 7 V V 217 V V SCREEN 8 V V 217 V ZWWWWWWWWWWWWWWWWWWQWWWWWQWWWWW[ С учетом значения координаты Y спрайт является н е в и д и м ы м. Ко- ордината Y обладает интересной особенностью. Если Y-координата спрайта с номером N равна 209 (в режимах SCREEN 1,SCREEN 2,SCREEN 3) или 217 (в ре- жимах SCREEN 4,SCREEN 5,SCREEN 6,SCREEN 7,SCREEN 8),то этот спрайт не ото- бражается на экране. Самое интересное заключается в том, что не отобража- ются и все остальные спрайты с номерами, большими чем N. П р и м е р 5. WWWWWWWWWWWWW 10 DIM X(3):SCREEN 2,0:A$="ЧЧЧЧЧЧЧЧ":Y=0 30 FOR I=1 TO 3:SPRITE$(I)=A$:X(I)=10*I:NEXT I 40 PUT SPRITE 1,(X(1),Y),1,1: PUT SPRITE 3,(X(3),Y),15,3: 60 PUT SPRITE 2,(X(2),Y),8,2 70 Y=Y+1:IF Y>208 THEN BEEP:A$=INPUT$(1):END 'Исчезли два спрайта! 80 GOTO 60 "Э к р а н н ы й" н о м е р спрайта по умолчанию равен номеру шабло- на спрайта. Ц в е т о м спрайта по умолчанию является текущий цвет изображения. XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY 3. V Таблица SCT используется только в режимах SCREEN 4 ╤ SCREEN 8 V. ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Базовый адрес Таблицы цветов спрайтов (SCT) будет всегда автоматически вычисляться вычитанием числа 512 из базового адреса Таблицы атрибутов спрайтов (SAT). С помощью SCT можно моделировать оператор COLOR SPRITE$(), который,как Вы, конечно, помните, позволяет определить цвет для высвечиваемых точек шаблона спрайта для к а ж д о й спрайтовой линии (цвет невысвечиваемых точек шаблона спрайта всегда п р о з р а ч н ы й). Так как для каждого из 32 спрайтов необходимо хранить информацию макси- мум о 16 спрайтовых линиях различного цвета, эта Таблица занимает 32G16 = 512 байтов VRAM . XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Адрес байта, начиная с которого располагается информация о V V ц в е т е спрайта в Таблице SCT, вычисляется по формуле: V V AD = A0 + 16GSN , V V где: A0 - адрес начала Таблицы SCT; V V SN - номер шаблона спрайта . V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ П р и м е р 6. Вторая спрайтовая линия изображения девятого спрайта WWWWWWWWWWWWW раскрашена восьмым цветом. 10 COLOR 15,1,8:SCREEN 4,0 20 SPRITE$(3)="пример":PUT SPRITE 9,(40,80),15,3 40 VPOKE &H1C00+16*9+2,8 50 GOTO 50 Заметим, что для информации о цвете шаблона спрайта размером 8\8 точек отводятся т о л ь к о 16 младших полубайтов 16 байтов SCT,отводимых для одного шаблона. Опишем содержимое оставшихся 16 с т а р ш и х полубайтов... Оказывается с их помощью можно разрешить или запретить приоритеты спрай- тов, обработать определенным образом столкновения и задать или отменить так называемое "опережение" для спрайта. Изобразим схематически Таблицу SCT... XWWWRWWWRWWWRWWWRWWWRWWWRWWWRWWWY V 7 V 6 V 5 V 4 V 3 V 2 V 1 V 0 V Н о м е р а б и т о в TWWWUWWWPWWWPWWWUWWWQWWWQWWWQWWWS 0-й байтV V V V 0 V Код цвета V Спр.линия 1 для спрайта 0 TWWWUWWWUWWWUWWWUWWWWWWWWWWWWWWWS 1-й байтV V V V 0 V Код цвета V Спр.линия 2 для спрайта 0 TWWWQWWWQWWWQWWWQWWWWWWWWWWWWWWWS GGG V GGG GGG V GGG TWWWRWWWRWWWRWWWRWWWWWWWWWWWWWWWS 15-й байтV V V V 0 V Код цвета V Спр.линия 16 для спрайта 0 TWWWQWWWQWWWQWWWUWWWWWWWWWWWWWWWS V GGG V GGG V TWWWRWWWRWWWRWWWUWWWWWWWWWWWWWWWS 496-й байтV V V V 0 V Код цвета V Спр.линия 1 для спрайта 31 TWWWUWWWUWWWUWWWUWWWWWWWWWWWWWWWS 497-й байтV V V V 0 V Код цвета V Спр.линия 2 для спрайта 31 TWWWQWWWQWWWQWWWUWWWWWWWWWWWWWWWS GGG V GGG V GGG V TWWWRWWWRWWWRWWWUWWWWWWWWWWWWWWWS 511-й байтV V V V 0 V Код цвета V Спр.линия 16 для спрайта 31 ZW▌WQW▌WQW▌WQWWWQWWWWWWWWWWWWWWW[ V V ZW Бит IC (определитель столкновений):1-нет, 0-да; V ZWWWWW Бит CC (разрешение приоритета) :0-нет, 1-да; ZWWWWWWWWW Бит EC ("опережение") :1- да, 0-нет. В режиме спрайтов 2, если СС-бит Таблицы SCT установлен в 1, порядок приоритетности спрайтов для данной спрайтовой линии о т м е н я е т с я . Спрайтовая линия, для которой бит СС установлен в 1 , будет отображаться только на горизонтальных линиях,где существуют спрайты с низшими номерами. Отметим, что и в этом случае, если на одной линии экрана более 8 спрай- тов, то д е в я т ы й спрайт и все последующие не будут изображаться на экране дисплея. Более того,не фиксируется столкновение спрайта, для которого с SCT бит СС установлен в 1, с другим спрайтом (даже если у этого спрайта в SCT бит СС установлен в 0). В этом случае для пересекающихся спрайтов над их цве- товыми кодами производится логическая операция OR. Говорят, что в режиме SCREEN 6 цвет фона и цвета спрайтов подвергаются а п п а р а т н о м у т и л и н г у. Эти цвета кодируются четырьмя би- тами: два с т а р ш и х бита определяют код цвета нечетных точек, а два м л а д ш и х бита определяют код цвета четных точек по X-координате (от 0 до 511). В режиме SCREEN 6 размер одной точки спрайта в 2 раза больше,чем у гра- фической точки (пикселя), однако за счет наличия аппаратного тилинга, од- на точка спрайта может обладать двумя цветами одновременно (четные и не- четные точки фонового цвета могут быть определены таким же образом). XWWWWWWWWWWWWWWWWWWW Четные точки (0,2,...,510) V XWWWWWWWWWWWWWW Нечетные точки (1,3,...,511) XWW█WRWW█WY V V V Д в е графические точки ZWWWWQWWWW[ XWWWWRWWWWY V V V О д н а точка спрайта ZWW▌WQW▌WW[ V V XWWWRWWWY XWWWRWWWY V ⌡ V ⌡ V V ⌡ V ⌡ V Биты, определяющие цвета спрайта ZWWWQWWW[ ZWWWQWWW[ Приведем табличку начальных адресов Таблиц SCT для различных режимов: XWWWWWWWWWWWWRWWWWWWWWWWWWWY V Р е ж и м V А д р е с V TWWWWWWWWWWWWUWWWWWWWWWWWWWS V SCREEN 4 V &H1C00 V V SCREEN 5 V &H7400 V V SCREEN 6 V &H7400 V V SCREEN 7 V &HF800 V V SCREEN 8 V &HF800 V ZWWWWWWWWWWWWQWWWWWWWWWWWWW[ Отметим, что 16 байтов Таблицы SCT, отвечающих за цвет спрайта,первона- чально инициализируются текущим цветом изображения или цветом, заданным в операторе PUT SPRITE. "Содержимое" этих байтов может быть переопределено непосредственно операторами VPOKE или оператором COLOR SPRITE() (COLOR SPRITE$()). В режиме SCREEN 8 цвета спрайта фиксированы и не зависят от регистра палитры. Цвета спрайта в режиме SCREEN 8 показаны на следующей таблице. XWWWWWWWWWWWWWWWWWRWWWWWWWWWWWWWRWWWWWWWWWWWWWRWWWWWWWWWWWWY V Код цвета V Зеленый V Красный V Синий V V С3 С2 С1 С0 V G2 G1 G0 V R2 R1 R0 V B2 B1 B0 V TWWWWWWWWWWWWWWWWWUWWWWWWWWWWWWWUWWWWWWWWWWWWWUWWWWWWWWWWWWS V 0 0 0 0 V 0 0 0 V 0 0 0 V 0 0 0 V V 0 0 0 1 V 0 0 0 V 0 0 0 V 0 1 0 V V 0 0 1 0 V 0 0 0 V 0 1 1 V 0 0 0 V V 0 0 1 1 V 0 0 0 V 0 1 1 V 0 1 0 V V V V V V V 0 1 0 0 V 0 1 1 V 0 0 0 V 0 0 0 V V 0 1 0 1 V 0 1 1 V 0 0 0 V 0 1 0 V V 0 1 1 0 V 0 1 1 V 0 1 1 V 0 0 0 V V 0 1 1 1 V 0 1 1 V 0 1 1 V 0 1 0 V V V V V V V 1 0 0 0 V 1 0 0 V 1 1 1 V 0 1 0 V V 1 0 0 1 V 0 0 0 V 0 0 0 V 1 1 1 V V 1 0 1 0 V 0 0 0 V 1 1 1 V 0 0 0 V V 1 0 1 1 V 0 0 0 V 1 1 1 V 1 1 1 V V V V V V V 1 1 0 0 V 1 1 1 V 0 0 0 V 0 0 0 V V 1 1 0 1 V 1 1 1 V 0 0 0 V 1 1 1 V V 1 1 1 0 V 1 1 1 V 1 1 1 V 0 0 0 V V 1 1 1 1 V 1 1 1 V 1 1 1 V 1 1 1 V ZWWWWWWWWWWWWWWWWWQWWWWWWWWWWWWWQWWWWWWWWWWWWWQWWWWWWWWWWWW[ XI.1.9. С л о т ы в и д е о п а м я т и Вся видеопамять на компьютерах серии MSX-2 разбита на два больших учас- тка объемом по 64 Кбайта каждый. Эти участки будем называть с л о т а м и видеопамяти (по аналогии с участками RAM и ROM объемом по 64 Кбайта, назы- ваемыми с л о т а м и памяти). На компьютерах серии MSX-1 имеется толь- ко один слот VRAM объемом в 16 Кбайтов. Для того чтобы переключиться с работы со слотом 0 на работу со слотом 1, достаточно выполнить оператор: ═) SET PAGE 2 или SET PAGE 3 в режимах SCREEN 5 и SCREEN 6; ║) SET PAGE 1 в режимах SCREEN 7 и SCREEN 8. После этого оператором VPOKE и функцией VPEEK можно работать с логически- ми адресами видеопамяти. В помощь Вам предлагаем следующие таблички: XWWWWWWWWWWWWRWWWWWWWWWWWWRWWWWWWWWRWWWWWWWWWWWWWY V Физические V Логические V Номера V Способ вклю-V Для V адреса V адреса V слотов V чения слота V режимов TWWWWWWWWWWWWUWWWWWWWWWWWWUWWWWWWWWUWWWWWWWWWWWWWS SCREEN 5 V от &H00000 V от &H0000 V V V и V до &H07FFF V до &H7FFF V V SET PAGE 0 V SCREEN 6 TWWWWWWWWWWWWUWWWWWWWWWWWWS Слот 0 TWWWWWWWWWWWWWS V от &H08000 V от &H8000 V V V V до &H0FFFF V до &HFFFF V V SET PAGE 1 V TWWWWWWWWWWWWUWWWWWWWWWWWWUWWWWWWWWUWWWWWWWWWWWWWS V от &H10000 V от &H0000 V V V V до &H17FFF V до &H7FFF V V SET PAGE 2 V TWWWWWWWWWWWWUWWWWWWWWWWWWS Слот 1 TWWWWWWWWWWWWWS V от &H18000 V от &H8000 V V V V до &H1FFFF V до &HFFFF V V SET PAGE 3 V ZWWWWWWWWWWWWQWWWWWWWWWWWWQWWWWWWWWQWWWWWWWWWWWWW[ XWWWWWWWWWWWWRWWWWWWWWWWWWRWWWWWWWWRWWWWWWWWWWWWWY V Физические V Логические V Номера V Способ вклю-V Для V адреса V адреса V слотов V чения слота V режимов TWWWWWWWWWWWWUWWWWWWWWWWWWUWWWWWWWWUWWWWWWWWWWWWWS SCREEN 7 V от &H00000 V от &H0000 V V V и V до &H0FFFF V до &HFFFF V Слот 0 V SET PAGE 0 V SCREEN 8 TWWWWWWWWWWWWUWWWWWWWWWWWWUWWWWWWWWUWWWWWWWWWWWWWS V от &H10000 V от &H0000 V V V V до &H1FFFF V до &HFFFF V Слот 1 V SET PAGE 1 V ZWWWWWWWWWWWWQWWWWWWWWWWWWQWWWWWWWWQWWWWWWWWWWWWW[ XI.1.10. П о р т ы, о т в е ч а ю щ и е за р а б о т у с в и д е о п а м я т ь ю Другой способ доступа к видеопамяти заключается в работе с п о р т а - м и ввода-вывода. Этот способ очень часто используется при написании про- грамм в машинных кодах. XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Напомним, что перед использованием команды (оператора) OUT на ком- V V пьютерах серии MSX-2 необходимо выполнить команду CALL NETEND V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ ═) Для з а п и с и числа в ячейку видеопамяти примените серию команд: XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V OUT &H99, М л а д ш и й байт номера ячейки V V OUT &H99, С т а р ш и й байт номера ячейки OR &H40 V V OUT &H98, Ч и с л о V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ П р и м е р. WWWWWWWWWWW 10 SCREEN 0:CLS:KEYOFF 20 OUT &H99,0:OUT &H99,0 OR &H40 30 FOR I=1 TO 20 40 READ R$:R=ASC(R$):OUT &H98,R 50 NEXT I:PRINT 'Попробуйте убрать в этой строке оператор PRINT 60 DATA Г,р,у,п,п,о,в,а,я," ",п,е,р,е,с,ы,л,к,а,! ║) Для ч т е н и я числа из ячейки видеопамяти, примените следующие команды: XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V OUT &H99, М л а д ш и й байт номера ячейки V V OUT &H99, С т а р ш и й байт номера ячейки V V A=INP(&H98) V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Важно отметить следующее. Изменение содержимого видеопамяти или видео- процессора приводит к немедленной корректировке содержимого экрана. Одна- ко отсюда вовсе не следует истинность обратного утверждения. XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Изменение "содержимого" экрана не всегда приводит к изменению VRAM.V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Если Вы не будете в программе "работать" с портами ввода-вывода,то мож- но утверждать, что VRAM и VDP "управляют" "содержимым" экрана.На самом же деле состояние экрана изменяют п о р т ы ввода-вывода с адресами &H98, &H99, &H9A и &H9B. На эти порты можно "воздействовать" оператором VPOKE. В этом случае сигнал из VRAM сразу же поступает в порт, а тот,в свою оче- редь, изменяет "рисунок" на экране. XWWWWWWWWWWWY V Э к р а н V ZWWW▌W▌W▌WWW[ V V V XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY ░WW V П о р т ы ввода-вывода V ░WW Оператор OUT ZWWWW▌W▌W▌WWWWWWWWWWWW▌W▌W▌WWW[ ░WW V V V V V V XWWWWWWWWWWWWWWY XWWWWWWWWWWWY ░WW VВидеопроцессорVW▐VВидеопамятьV ░WW Оператор VPOKE ZWWWWWWWWWWWWWW[ ZWWWWWWWWWWW[ ░WW Если же воздействовать непосредственно на порт оператором OUT,минуя ви- деопамять, то могут возникнуть следующие ситуации: 1) если адрес VRAM принадлежит отрезку [0,&H3FFE], то после записи опе- ратором OUT в ячейку с этим адресом ее содержимое можно прочесть как функ- цией INP, так и функцией VPEEK; 2) если адрес VRAM принадлежит отрезку [&H3FFF,&HFFFF], то после запи- си оператором OUT в ячейку с этим адресом ее содержимое можно прочесть только функцией INP. П р и м е р. Сравните результаты работы этой программы на компьютерах WWWWWWWWWWW серий MSX-1 и MSX-2 ! 10 CALL NETEND 20 INPUT"Младший байт";N1:INPUT"Старший байт";N2:INPUT"Значение";D 30 PRINT"Старое значение:"; 40 OUT&H99,N1:OUT&H99,N2:PRINT INP(&H98) 50 OUT&H99,N1:OUT&H99,N2 OR&H40:OUT&H98,D 60 PRINT"Новое значение:"; 70 OUT&H99,N1:OUT&H99,N2:PRINT INP(&H98) 80 CALL NETINI:'Отмена действия команды CALL NETEND  XI.2. РАБОТА С ВИДЕОПРОЦЕССОРОМ Четыре величайших изобретения в истории человечества: 1) колесо; 2) электрическая лампочка; 3) микрокомпьютер; 4) руководства по микрокомпьютерам вместе с их авторами. М.Уэйт, С.Прата, Д.Мартин Работа с псевдопеременными BASE и VDP - весьма эффективное средство уп- равления видеопамятью. Однако при использовании этих средств нужно быть крайне осторожным, ибо малейшая ошибка в программировании может сделать экран "неуправляемым", что вынудит Вас нажать кнопку "RESET"! Мы познакомим Вас с несколькими сравнительно "безопасными" примерами. Более детальная информация о способах работы с видеопамятью содержится в книгах [65,89] (если Вы, конечно, сможете их раздобыть!). Работой видеопамяти управляет специальный процессор,который называется в и д е о п р о ц е с с о р о м. Видеопроцессор "работает" с двумя груп- пами восьмибитовых р е г и с т р о в: 47 регистров MSX-VDP и 16 регистров статуса. Р е г и с т р - электронное устройство для временного хранения информа- ции во время ее обработки. Регистры называют часто сверхоперативной па- мятью, т.к. для регистров используются специальные электронные схемы, поз- воляющие значительно быстрее записывать информацию в регистры и читать ин- формацию из регистров. Регистры MSX-VDP можно разделить на несколько категорий: А) по назначению: 1) регистры у с т а н о в к и р е ж и м а (0, 1, 8, 9); 2) регистры б а з о в ы х а д р е с о в (2╤6, 10, 11); 3) регистры ц в е т о в (7, 12, 13, 20╤22); 4) регистры у п р а в л е н и я э к р а н о м (18, 19, 23); 5) регистры д о с т у п а (14╤17); 6) регистры к о м а н д (32╤46); Б) по способу доступа: 1) разрешены чтение и запись на компьютерах и серии MSX-1 и серии MSX-2 (регистры 0╤7); 2) разрешены чтение и запись на компьютерах MSX-2 и только запись на компьютерах MSX-1 (регистры 8╤23); 3) разрешена только з а п и с ь (регистры 32╤46). Для ч т е н и я "содержимого" регистров VDP предназначена одноимен- ная псевдопеременная, используемая в правой части оператора присваивания. Ее синтаксис: XWWWWWWWWWWWWWY V VDP(N) V , ZWWWWWWWWWWWWW[ где: VDP("ViDeo Processor") - служебное слово; N - арифметическое выражение, целая часть значения которого ука- зывает на номер регистра MSX-VDP, причем: ═) если используется регистр с номером из диапазона [0,7], то значе- ние параметра N должно быть равно номеру регистра; ║) если используется регистр с номером из диапазона [8,23] (для ком- пьютера MSX-2), то N=RG+1, где RG - номер регистра. Теперь мы расскажем Вам о способах з а п и с и в регистры MSX-VDP: 1) запись с использованием псевдопеременной VDP. Этот способ является самым простым: оператор XWWWWWWWWWWWWWY V VDP(N) = M V , ZWWWWWWWWWWWWW[ где: VDP("ViDeo Processor") - служебное слово; N - арифметическое выражение, целая часть значения которого ука- зывает на номер регистра MSX-VDP, причем: ═) если используется регистр с номером из диапазона [0,7], то значе- ние параметра N должно быть равно номеру регистра; ║) если используется регистр с номером из диапазона [8,23] либо из диапазона [32,46] (для компьютера MSX-2), то N=RG+1, где RG - номер регис- тра; M - арифметическое выражение, целая часть значения которого при- надлежит отрезку [0,255], позволяет поместить значение выражения M в регистр VDP; 2) запись через п о р т ы ввода-вывода (для всех регистров). Этот способ заключается в использовании порта с номером &H99, связываю- щего видеопроцессор с центральным процессором MSX-компьютера (Z80). Что- бы записать число A в регистр MSX-VDP с номером N, примените следующие операторы: XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V OUT &H99,A:OUT &H99,RG OR &H80 V . ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Они последовательно выводят данные и номер регистра в порт 99h. Номер бита 7 6 5 4 3 2 1 0 XWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWY Первый байт V Д а н н ы е V TWWWWWUWWWWWUWWWWWUWWWWWUWWWWWUWWWWWUWWWWWUWWWWWS Второй байт V 1 V 0 V Н о м е р р е г и с т р а V ZWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWW[ З а м е ч а н и е. Будьте особенно внимательными при обращении к видео- процессору из подпрограммы обработки прерываний; 3) к о с в е н н а я запись в регистры MSX-VDP. Про нее будет расска- зано в разделе XI.2.6 . Напомним, если Вы работаете с компьютером серии MSX-2,то перед набором программы, использующей порты ввода-вывода, нужно выполнить команду XWWWWWWWWWWWWWY V CALL NETEND V . ZWWWWWWWWWWWWW[ XI.2.1. Р е г и с т р ы у с т а н о в к и р е ж и м а Нехватка информации восполняется избытком интуиции. М.Мишин Перейдем теперь к описанию "содержимого" некоторых регистров VDP. Вначале напомним Вам принятую нумерацию битов в байте: XWWWWWWWWRWWWWWWWWRWWWWWWWWRWWWWWWWWRWWWWWWWWRWWWWWWWWRWWWWWWWWRWWWWWWWWY V 7-й битV 6-й битV 5-й битV 4-й битV 3-й битV 2-й битV 1-й битV 0-й битV ZWWWWWWWWQWWWWWWWWQWWWWWWWWQWWWWWWWWQWWWWWWWWQWWWWWWWWQWWWWWWWWQWWWWWWWW[ Р е г и с т р 0. WWWWWWWWWWWWWWW XWWWWWRWWWWWWWWRWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY VНомерVЗначениеV V Vбита V бита V К о м м е н т а р и й V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V 7 V 0 V Не используется V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V 6 V 1 V Устанавливает цветовую шину в режиме ввода и вводит V V V V данные в видеопамять V VWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V 5 V 1 V Бит "IE2": Запретить прерывания от светового пера V V V 0 V Разрешить прерывания от светового пера V VWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V 4 V 1 V Бит "IE1": Запретить прерывание от горизонтального V V V V сканирования линии по "IE1" и отключить V V V V сигналы с клавиатуры V V V 0 V Разрешить прерывания по "IE1" V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V 3 V V Бит "M5" установки графических режимов V V 2 V V Бит "M4" установки графических режимов V V 1 V V Бит "M3" установки графических режимов V V 0 V V Внешний видеосигнал (бит "IV") V ZWWWWWQWWWWWWWWQWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ П р и м е р. 10 OUT &H99,VDP(0) OR 16:OUT &H99,0 OR &H80 'Отключение WWWWWWWWWWW клавиатуры! \page Р е г и с т р 1. WWWWWWWWWWWWWWW XWWWWWRWWWWWWWWRWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY VНомерVЗначениеV V Vбита V бита V К о м м е н т а р и й V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V 7 V 0 V Не используется V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V 6 V V Применение аналогично нажатию кнопки POWER дисплея: V V V 0 V изображение отключено V V V 1 V изображение включено V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V 5 V 0 V Бит "IE0": Запретить прерывание от горизонтального V V V V сканирования линии по "IE0" и отключить V V V V сигналы с клавиатуры V V V 1 V Разрешить прерывания по "IE0" V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V 4 V V Бит "M1" установки графических режимов V V 3 V V Бит "M2" установки графических режимов V V 2 V 0 V Не используется V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWRWWWWWWWWWWWWWWWWWWS V 1 V 0 V Размер спрайтов 8\8 VИспользование этихV V V 1 V Размер спрайтов 16\16 V битов позволяет V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS моделировать опе-V V 0 V 0 V Нормальный размер спрайтов V ратор SCREEN ,n V V V 1 V "Увеличение" размера спрайтов V V ZWWWWWQWWWWWWWWQWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWQWWWWWWWWWWWWWWWWWW[ Назначение 6-го бита регистра 1 иллюстрируется примерами 1 и 2: П р и м е р 1. XW OFF WWWWWWWWWWWWW ═) 10 SCREEN 2 ║) 10 SCREEN 2 █ 15 ::::::::::::::::: 15 VDP(1)=&B10100000 20 CIRCLE(125,95),90 20 CIRCLE(125,95),90 30 PAINT STEP(0,0) 30 PAINT STEP(0,0) 35 ::::::::::::::::: 35 VDP(1)=&B11100000 40 GOTO 40 40 GOTO 40 ▌ ╖) 10 SCREEN 2 ZW ON 15 OUT &H99,&B10100000:OUT &H99,1 OR &H80 20 CIRCLE(125,95),90:PAINT STEP (0,0) 35 VDP(1)=&B11100000 40 GOTO 40 Перед записью в регистр лучше всего сначала прочитать его текущее со- держимое, а лишь затем с помощью логических операций AND, OR и XOR устано- вить или "сбросить" нужные биты. П р и м е р 2. Включение и выключение экрана дисплея: WWWWWWWWWWWWW VDP(1)=VDP(1) XOR 64 . Эта команда включает экран, если он был выключен, и наоборот. А теперь разберемся с н у л е в ы м битом регистра 1 ... П р и м е р 3. Изменение размера спрайта без очистки шаблонов. WWWWWWWWWWWWW 10 SCREEN 2,1 20 SPRITE$(0)="0123456789ABCDEF" 30 PUT SPRITE 0,(50,50),,0 40 FOR I=1 TO 1000:NEXT 50 VDP(1)=VDP(1) XOR 1 'Эта команда переключает масштаб спрайтов без 60 GOTO 60 'очистки шаблонов А теперь замените строку 50 на строку 50 OUT &H99,VDP(1) XOR 1:OUT &H99,1 OR &H80 и выполните программу. Биты "M1","M2","M3","M4","M5" "отвечают" за выбор режима экрана: XWWWWWWWWWWWWWWWWWWWWWWWWRWWWWWWWWWWWWWWWWWWWWWWWY V Биты и их значение V Р е ж и м V TWWWWRWWWWRWWWWRWWWWRWWWWS V V M1 V M2 V M3 V M4 V M5 V видеопроцессора V TWWWWUWWWWUWWWWUWWWWUWWWWUWWWWWWWWWWWWWWWWWWWWWWWS V 1 V 0 V 0 V 0 V 0 V SCREEN 0 (40 символов)V V 1 V 0 V 0 V 1 V 0 V SCREEN 0 (80 символов)V V 0 V 0 V 0 V 0 V 0 V SCREEN 1 V V 0 V 0 V 1 V 0 V 0 V SCREEN 2 V V 0 V 1 V 0 V 0 V 0 V SCREEN 3 V V 0 V 0 V 0 V 1 V 0 V SCREEN 4 V V 0 V 0 V 1 V 1 V 0 V SCREEN 5 V V 0 V 0 V 0 V 1 V 1 V SCREEN 6 V V 0 V 0 V 1 V 0 V 1 V SCREEN 7 V V 0 V 0 V 1 V 1 V 1 V SCREEN 8 V ZWWWWQWWWWQWWWWQWWWWQWWWWQWWWWWWWWWWWWWWWWWWWWWWW[ Изменять содержимое битов "M1","M2","M3","M4" и "M5" не рекомендуется! Эти биты используются видеопроцессором при инициализации режима SCREEN, однако следует помнить, что для полной инициализации этого надостаточно! Легко, например, проверить, что команда VDP(0)=4 не устанавливает пол- ностью 80-символьный режим SCREEN 0. Зато чтение этих битов поможет Вам "вспомнить", в каком режиме SCREEN Вы работаете в данный момент. XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Для полной инициализации экрана нужно выполнить следующие действия: V V 1) установить биты M1,M2,M3,M4,M5; V V 2) установить начальные адреса Таблиц VRAM в регистрах базовых V V адресов; V V 3) заполнить Таблицы видеопамяти необходимыми данными; V V 4) занести в ячейку памяти с адресом &HFCAF номер режима SCREEN. V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Р е г и с т р 8. WWWWWWWWWWWWWWW XWWWWWRWWWWWWWWRWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY VНомерVЗначениеV V Vбита V бита V К о м м е н т а р и й V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V 7 V 1 V Цветовая шина устанавливается на режим в в о д а V V V V и разрешается использование манипулятора MSX-MOUSE V V V 0 V Цветовая шина устанавливается на режим в ы в о д а V V V V и запрещается использование манипулятора MSX-MOUSE V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V 6 V 1 V Разрешается обработка светового пера V V V 0 V Запрещается обработка светового пера V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V V V Бит с именем TP V V V V Устанавливается цвет кода 0 в цветовой палитре: V V 5 V 1 V ═) изображение 0-го цвета имеет цвет 0 из Таблицы PTV V V 0 V ║) изображение 0-го цвета имеет цвет бордюра V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V 4 V V Моделирует оператор SET VIDEO ,,n : V V V 1 V происходит вывод данных на видеомагнитофон V V V 0 V происходит ввод данных от внешнего TV-источника или V V V V от компьютера; V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V 3 V V Содержимое бита изменять не рекомендуется! V V V 1 V Размер видеопамяти ╡64 Кб (для компьютеров MSX-2) V V V 0 V Размер видеопамяти Ё64 Кб (для компьютеров MSX-1) V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V 2 V 0 V Не используется V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V 1 V 1 V Запрещается отображение спрайтов V V V 0 V Разрешается отображение спрайтов V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V 0 V 1 V Установить черно-белый режим с 32 градациями тона V V V 0 V Установить цветовой режим V ZWWWWWQWWWWWWWWQWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ По умолчанию 5-й бит регистра с номером 8 равен 0. В этом случае объ- ект нулевого цвета будет окрашиваться цветом бордюра (т.е. будет п р о - з р а ч н ы м). Участки спрайтов с нулевым цветом на экране не отображают- ся. Но если спрайты пересекаются "невидимыми" частями, то столкновение спрайтов не будет установлено. Для получения на экране одновременно 16 цветов необходимо, чтобы бордюр был окрашен в н у л е в о й цвет. Если 5-й бит 8-го регистра равен 1, то объект нулевого цвета не будет окрашиваться цветом бордюра (если, конечно, бордюр сам не окрашен в нуле- вой цвет). Код цвета 0 будет кодом, который определяется в регистре палит- ры (только в режиме SCREEN 8 R=0, G=0, B=0). На экране одновременно могут отображаться 16 цветов, причем в области, отличной от бордюра; более того, отображаются спрайты всех цветов. Участки спрайтов с нулевым цветом на эк- ране по-прежнему не отображаются. Но если спрайты пересекаются "невидимы- ми" частями, то столкновение спрайтов б у д е т у с т а н о в л е н о . П р и м е р 4. WWWWWWWWWWWWW 10 COLOR =(0,2,4,7) 'Изменим палитру нулевого цвета 20 COLOR 1,15,8:SCREEN 2 30 VDP(8+1)=8 'Инициализация 8-го регистра 40 CIRCLE (90,90),45,0 'Изображение имеет цвет бордюра 50 A$=INPUT$(1) 60 VDP(8+1)=&B00101000 'Бордюр окрашен в 8-й цвет, 70 GOTO 70 'а изображение - в нулевой Р е г и с т р 9. WWWWWWWWWWWWWWW XWWWWWRWWWWWWWWRWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY VНомерVЗначениеV V Vбита V бита V К о м м е н т а р и й V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V V V Бит "LN" V V 7 V V Отвечает за о б щ у ю высоту экрана (за доступнуюV V V V высоту отвечает ячейка &hF3B1 в рабочей области RAM)V V V 1 V На экране 212 графических или 26.5 текстовых строк V V V 0 V На экране 192 графических или 24 текстовых строк V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V 6 V 0 V Не используется V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWRWWWWWWWWWWWWWS V 5 V 1 V Поступает сигнал только V V V V V от внешнего TV-источника V Эти биты V V V 0 V Разрешено изображение от компьютера V моделируют V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS оператор V V 4 V 1 V Происходит смешивание изображения отV SET VIDEO n V V V V компьютера и от TV-источника V V V V 0 V Смешивания сигналов не происходит V V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWUWWWWWWWWWWWWWS V 3 V 1 V Происходит "дрожание" экрана V V V V 0 V "Дрожания" не происходит V Эти биты V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS моделируют V V 2 V 1 V Происходит поочередный показ страниц V оператор V V V V на страницах с нечетными номерами VSCREEN ,,,,,nV V V V в режимах SCREEN 5 ╤ SCREEN 8 V (5 запятых!)V V V 0 V Отображается одна и та же страница V V V V V на четное/нечетное поле V V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWQWWWWWWWWWWWWWS V 1 V V Выбор системы телевидения: V V V 1 V PAL (313 линий, американский стандарт) V V V 0 V NTSC (262 линии, японский стандарт) - V V V V - только для RGB-выхода V TWWWWWUWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V 0 V 1 V Установка на режим в в о д а V V V 0 V Установка на режим в ы в о д а V ZWWWWWQWWWWWWWWQWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ П р и м е р 5. Установим высоту экрана равной 26.5 строкам. WWWWWWWWWWWWW 10 SCREEN 0:WIDTH 80 20 VDP(9+1)=VDP(9+1) OR 128 30 POKE &hF3B1,27 40 FOR T=BASE(0)+(1920-80) TO BASE(0)+(1920-80)+240 50 VPOKE T,32:NEXT XI.2.2. Р е г и с т р ы б а з о в ы х а д р е с о в Мы находимся в положении, несколько аналогич- ном положению человека, держащего в руках связку ключей и пытающегося открыть одну за другой несколько дверей. Рано или поздно ему всегда удается подобрать ключ к очередной двери, но сомнения относительно взаимноодно- значного соответствия между ключами и дверя- ми у него остаются. Ю.Вигнер Адрес байта видеопамяти кодируется 17 двоичными цифрами, которые мы бу- дем обозначать Ai, где i=0,1,2,...,16, причем через A16 будем обозначать с т а р ш и й бит, через A0 - м л а д ш и й бит. СтаршийXWWWRWWWRWWWRWWWRWWWRWWWRWWWRWWRWWRWWRWWRWWRWWRWWRWWRWWRWWYМладший бит VA16VA15VA14VA13VA12VA11VA10VA9VA8VA7VA6VA5VA4VA3VA2VA1VA0V бит ZWWWQWWWQWWWQWWWQWWWQWWWQWWWQWWQWWQWWQWWQWWQWWQWWQWWQWWQWW[ В регистрах базовых адресов хранятся старшие биты начальных адресов Та- блиц VRAM для текущего режима SCREEN. XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Эти регистры инициализируются псевдопеременной BASE V . ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Отметим,что при использовании этих регистров рекомендуется маскировать н е н у ж н ы е в текущем режиме отображения биты. Регистр с номером 2 MSX-VDP содержит семь старших битов начального ад- реса Таблицы PNT: XWRWWWRWWWRWWWRWWWRWWWRWWWRWWWY V0VA16VA15VA14VA13VA12VA11VA10V ZWQWWWQWWWQWWWQWWWQWWWQWWWQWWW[ П р и м е р 1. 10 SCREEN 1 WWWWWWWWWWWWW 20 A$=RIGHT$("0000000000000000"+BIN$(BASE(5*1+0)),16) 30 ?A$:B$=RIGHT$("00000000"+BIN$(VDP(2)),8):?B$ 'Читаем текущий адрес PNT run XWWWWWWY V000110V0000000000░WW Начальный адрес Таблицы PNT ZWWWWWW[ в SCREEN1 XWWWWWWY 00V000110V ░WW Содержимое регистра с номером 2 OkZWWWWWW[ Регистры с номерами 10 и 3 содержат одиннадцать старших битов начально- го адреса Таблицы CT: Регистр 10 Регистр 3 XWRWRWRWRWRWWWRWWWRWWWY XWWWRWWWRWWWRWWWRWWRWWRWWRWWY V0V0V0V0V0VA16VA15VA14V VA13VA12VA11VA10VA9VA8VA7VA6V ZWQWQWQWQWQWWWQWWWQWWW[ ZWWWQWWWQWWWQWWWQWWQWWQWWQWW[ П р и м е р 2. 10 SCREEN 1 WWWWWWWWWWWWW 20 A$=RIGHT$("0000000000000000"+BIN$(BASE(5*1+1)),16) 30 ?A:$A$=RIGHT$("0000000000000000"+BIN$(VDP(10+1))+BIN $(VDP(3)),16):?A$ run XWWWWWWWWWWY V0010000000V000000 ░WW Начальный адрес Таблицы CT ZWWWWWWWWWW[ в SCREEN1 XWWWWWWWWWWY 000000V0010000000V░WW Содержимое регистров с номерами Ok ZWWWWWWWWWW[ 10 и 3 Регистр с номером 4 содержит шесть старших битов начального адреса Таб- лицы PGT: XWRWRWWWRWWWRWWWRWWWRWWWRWWWY V0V0VA16VA15VA14VA13VA12VA11V ZWQWQWWWQWWWQWWWQWWWQWWWQWWW[ П р и м е р 3. 10 SCREEN 0:WIDTH 80 WWWWWWWWWWWWW 20 A$=RIGHT$("0000000000000000"+BIN$(BASE(5*0+2)),16) 30 ?A$:B$=RIGHT$("00000000"+BIN$(VDP(4)),8):?B$ run XWWWWWY V00010V00000000000░WW Начальный адрес Таблицы PGT ZWWWWW[ в SCREEN0 XWWWWWY 000V00010V ░WW Содержимое регистра с номером 4 Ok ZWWWWW[ Регистры с номерами 11 и 5 содержат десять старших битов начального ад- реса Таблицы SAT: Регистр 11 Регистр 5 XWRWRWRWRWRWRWWWRWWWY XWWWRWWWRWWWRWWWRWWWRWWRWWRWWY V0V0V0V0V0V0VA16VА15V VА14VA13VA12VA11VA10VA9VA8VА7V ZWQWQWQWQWQWQWWWQWWW[ ZWWWQWWWQWWWQWWWQWWWQWWQWWQWW[ П р и м е р 4. 10 SCREEN 1 WWWWWWWWWWWWW 20 A$=RIGHT$("0000000000000000"+BIN$(BASE(5*1+3)),16) 30 ?A$:A$=RIGHT$("0000000000000000"+BIN$(VDP(1+11))+BIN $(VDP(5)),16):?A$ run XWWWWWWWWWY V000110110V0000000░WW Начальный адрес Таблицы SAT ZWWWWWWWWW[ в SCREEN1 XWWWWWWWWWY 0000000V000110110V░WW Содержимое регистров с номерами Ok ZWWWWWWWWW[ 11 и 5 XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V З а м е ч а н и е. С Таблицей SAT связана Таблица SCT, адрес которойV V получается вычитанием 512 байтов из начального адреса Таблицы SAT. V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Регистр с номером 6 содержит шесть старших битов начального адреса Таб- лицы SGT: XWRWRWWWRWWWRWWWRWWWRWWWRWWWY V0V0VA16VA15VA14VA13VA12VA11V ZWQWQWWWQWWWQWWWQWWWQWWWQWWW[ П р и м е р 5. 10 SCREEN 1 WWWWWWWWWWWWW 20 A$=RIGHT$("0000000000000000"+BIN$(BASE(5*1+4)),16) 30 ?A$:B$=RIGHT$("00000000"+BIN$(VDP(6)),8):?B$ 'Читаем текущий адрес SGT run XWWWWWY V00111V00000000000░WW Начальный адрес Таблицы SGT ZWWWWW[ в SCREEN1 XWWWWWY 000V00111V ░WW Содержимое регистра с номером 6 Ok ZWWWWW[ XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Отметим, что при использовании этих регистров рекомендуется V V м а с к и р о в а т ь ненужные в текущем режиме отображения биты. V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ XI.2.3. Р е г и с т р ы ц в е т о в - Вы знаете отличительные способности животного, называемого раком? - Да, конечно. Рак - это рыба к р а с н о г о ц в е т а, которая ходит боком. - Ну, что ж. Я вижу,что Вы кое-что з н а е т е о раке ... Студенческий фольклор ═) Регистр с номером 7 видеопроцессора в режиме SCREEN 0 определяет цвет изображения и фона. Четыре старших бита этого регистра "хранят" цвет и з о б р а ж е н и я, а четыре младших W цвет ф о н а. Например, команда VDP(7)=&H4B в режиме SCREEN 0 эквивалентна команде COLOR 4,11 . ▌▌ Цвет изображения WW[ZWW Цвет фона А команда VDP(7)=&H1F приводит к тому же результату, что и оператор COLOR 1,15 . Р е г и с т р с номером 7 (регистр цвета текста/фона) XWWWWWWWWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWY V Номер бита V 7 V 6 V 5 V 4 V 3 V 2 V 1 V 0 V V Имя бита V TC3 V TC2 V TC1 V TC0 V BD3 V BD2 V BD1 V BD0 V ZWWWWWWWWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWW[ TC3 - ТC0 определяет цвет текста в режимах SCREEN 0 и SCREEN 1; BD3 - BD0 определяет цвет фона во всех режимах отображения В других режимах SCREEN этот регистр "хранит" цвет б о р д ю р а. П р и м е р 1. 10 COLOR 1,15,4:SCREEN 2:Z=VDP(7) WWWWWWWWWWWWW 20 SCREEN 0:PRINT Z run 4 Ok XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Содержимое седьмого регистра инициализируется оператором COLOR .V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ ║) В 80-символьном режиме SCREEN 0 существует явление, которое мы назо- вем м и г а н и е м . Информация о символах, которые должны мигать, нахо- дится в Таблице цветов (CT), которая занимает 270 байтов с адреса, возвра- щаемого псевдопеременной BASE(0*5+1). Рассмотрим, как она располагается. Каждая строка экрана разбивается на 10 участков по 8 квадратов (знако- мест) в каждом. За каждый из этих участков отвечает один байт, а за квад- рат, естественно, один бит. Если значение бита равно 1, то символ на соот- ветствующем знакоместе (в соответствующем квадрате) м и г а е т. В проти- вном случае мигания не происходит. Запись в Таблицу CT еще не означает, что какое-то знакоместо на экране сразу замигает. Для начала мигания необходимо обратиться к регистрам VDP, отвечающим за этот процесс. Вначале договоримся о терминологии. О с н о в н ы м цветом текста (фона) будем называть цвет, задаваемый оператором COLOR и хранящийся в 7-м регистре MSX-VDP. Ц в е т о м м и г а н и я текста (фона) будем называть цвет,который приобретает текст (фон) при мигании. Ч а с т о т о й в к л ю ч е н и я м и г а н и я назовем промежуток времени, в течение которого текст и фон приобретают цвет мигания. Ч а с т о т о й в ы к л ю ч е н и я м и г а н и я будем называть промежуток времени, в течение которого текст и фон приобретают основной цвет. Единица измерения частоты мигания равна 1/6 секунды.Максимально возмож- ный период мигания составляет 5 секунд (15/6 секунд на включение мигания и столько же на выключение мигания). Регистр с номером д в е н а д ц а т ь MSX-VDP содержит информацию о цвете мигания текста и фона. Старший полубайт этого регистра отвечает за цвет мигания текста, а младший полубайт отвечает за цвет мигания фона. Р е г и с т р с номером 12 (регистр цвета текста/фона) XWWWWWWWWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWY V Номер бита V 7 V 6 V 5 V 4 V 3 V 2 V 1 V 0 V V Имя бита V TC3 V TC2 V TC1 V TC0 V BC3 V BC2 V BC1 V BC0 V ZWWWWWWWWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWW[ биты TC3,TC2,TC1,TC0 определяют цвет части 1 шаблона; биты BC3,BC2,BC1,BC0 определяют цвет части 0 шаблона. Если в режиме SCREEN 1 установлен признак мерцания, то цвета из этого регистра и из регистра с номером 7 поочередно отображаются. За частоту мигания "отвечает" регистр с номером т р и н а д ц а т ь, причем в его старшем полубайте хранится информация о частоте включения ми- гания, а в младшем - информация о частоте выключения мигания. Р е г и с т р с номером 13 (регистр периода мерцания) XWWWWWWWWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWY V Номер бита V 7 V 6 V 5 V 4 V 3 V 2 V 1 V 0 V V Имя бита V ON3 V ON2 V ON1 V ON0 V OF3 V OF2 V OF1 V OF0 V ZWWWWWWWWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWW[ биты ON3,ON2,ON1,ON0 определяют период отображения для четной страницы; биты ОF3,OF2,OF1,OF0 определяют период отображения для нечетной страницы. В режимах растровой графики (SCREEN 5╤SCREEN 8) попеременно сменяются две страницы памяти. Данные помещаются в этот регистр для установления отображаемой страницы как нечетной страницы для начала мерцания. Этот ре- гистр используется также в режиме SCREEN 1. Приведем табличку... XWWWWWWWWWWWWWWWWWWWWWWRWWWWWWWWWWWWRWWWWWWWWWWWWWWWWWWWWWWRWWWWWWWWWWWWY V Содержимое полубайта V Время (мс) V Содержимое полубайта V Время (мс) V V регистра 13 V V регистра 13 V V TWWWWWWWWWWWWWWWWWWWWWWUWWWWWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWUWWWWWWWWWWWWS V 0 0 0 0 V 0 V 1 0 0 0 V 1335,1 V V 0 0 0 1 V 166,9 V 1 0 0 1 V 1501,9 V V 0 0 1 0 V 333,8 V 1 0 1 0 V 1668,8 V V 0 0 1 1 V 500,6 V 1 0 1 1 V 1835,7 V V 0 1 0 0 V 667,5 V 1 1 0 0 V 2002,6 V V 0 1 0 1 V 834,4 V 1 1 0 1 V 2169,5 V V 0 1 1 0 V 1001,3 V 1 1 1 0 V 2336,3 V V 0 1 1 1 V 1168,2 V 1 1 1 1 V 2503,2 V ZWWWWWWWWWWWWWWWWWWWWWWQWWWWWWWWWWWWQWWWWWWWWWWWWWWWWWWWWWWQWWWWWWWWWWWW[ А теперь взгляните на следующий пример. П р и м е р 2. WWWWWWWWWWWWW 10 SCREEN 0:WIDTH 80 'Установка режима для мигания 20 FOR T=2048 TO 2048+269:VPOKE T,0:NEXT 'Очистка Таблицы мигания 30 LINEINPUT "Введите слово:";B$ 40 INPUT "Где ему мигать (X,Y)";X,Y 50 INPUT "Цвет слова для мигания";MI 60 INPUT "Цвет фона для мигания";MF 70 INPUT "Частота включения мигания (от 0 до 15)";TN 80 INPUT "Частота выключения мигания (от 0 до 15)";TK 90 VPOKE 2048+10*Y+X/8,&B11111111 'Будут мигать 8 символов 100 CLS:LOCATE X,Y:PRINT B$ 110 COL=16*MI+MF:TIM=16*TN+TK 120 VDP(12+1)=COL:VDP(13+1)=TIM Для прекращения мигания поместите в старший полубайт 13-го регистра число 0. ╖) Две графические страницы экрана могут отображаться п о п е р е - м е н н о (в режимах SCREEN 5 ╤ SCREEN 8). Страницы, которые будут попере- менно отображаться, расположены следующим образом: Режим SCREEN 5 и SCREEN 6 Режим SCREEN 7 и SCREEN 8 XWWWWWWWWWWWWWY XWWWWWWWWWWWWY V Страница 0 VWY V VWY TWWWWWWWWWWWWWS V V Страница 0 V V V Страница 1 VW[ V V V TWWWWWWWWWWWWWS TWWWWWWWWWWWWS V V Страница 2 VWY V V V TWWWWWWWWWWWWWS V V Страница 1 VW[ V Страница 3 VW[ V V ZWWWWWWWWWWWWW[ ZWWWWWWWWWWWW[ Период отображения, находящийся в промежутке между 166 мс и 2053 мс, может быть определен для каждой страницы. Для этого необходимо: 1) задать базовый адрес Таблицы имен шаблонов н е ч е т н о й стра- ницы (регистр с номером 2); 2) задать время включения (интервал, в течение которого отображается ч е т н а я страница) и время выключения (интервал, в течение которого отображается н е ч е т н а я страница) в регистре с номером 13. Р е г и с т р с номером 13 (регистр периода мерцания) XWWWWWWWWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWY V Номер бита V 7 V 6 V 5 V 4 V 3 V 2 V 1 V 0 V V Имя бита V ON3 V ON2 V ON1 V ON0 V OF3 V OF2 V OF1 V OF0 V ZWWWWWWWWWWWWQWW▌WWQWWWWWQWWWWWQWW▌WWQWW▌WWQWWWWWQWWWWWQWW▌WW[ ZWWWWWWWWWWWWWWWWW[ ZWWWWWWWWWWWWWWWWW[ Время включения Время выключения 3) после этого начнется процесс мигания. П р и м е р 3. WWWWWWWWWWWWWW 10 SCREEN 7 :' Режим растровой графики (SCREEN 5╤8) 20 SET PAGE 0,0: CLS :' На странице 0 30 CIRCLE (254,106),30,15 :' рисуем окружность 40 SET PAGE 1,1: CLS :' А на странице 1 50 CIRCLE (254,106),60,15 :' рисуем окружность большего радиуса 60 VDP(13+1)=&H11 :' Включим смену страниц 70 :' Окружность п у л ь с и р у е т ! 80 A$=INPUT$(1) :' Ждем нажатия любой клавиши... 90 VDP(13+1)=0 :' Выключим смену страниц Опишем еще один способ осуществления смены двух графических страниц на экране. Бит ЕО (второй бит регистра с номером 9) используется для попере- менной демонстрации д в у х графических страниц экрана с частотой 60 Гц. Для этого необходимо: 1) задать базовый адрес Таблицы имен шаблонов н е ч е т н о й страни- цы (регистр с номером 2); 2) установить в т о р о й бит регистра с номером 9 в 1. П р и м е р 4. WWWWWWWWWWWWW 10 SCREEN 7:VDP(10)=0 :' Режим растровой графики (SCREEN 5╤8) 20 SET PAGE 0,0: CLS :' Рисуем на странице 0 30 CIRCLE (256,106),30,15 :' окружность радиусом 30 31 FOR I=1 TO 100:NEXT :' З а д е р ж к а... 40 SET PAGE 1,1: CLS :' А на странице 1 - 50 CIRCLE (256,106),60,15 :' окружность радиусом 60 51 FOR I=1 TO 100:NEXT :' З а д е р ж к а... 59 :' :' А теперь - п о м и г а е м ... 60 VDP(9+1)=&B00000100:' Включаем попеременное отображение страниц. 70 :' Окружности с двух страниц одновременно отображаются на экране ! 80 :' Недостаток: заметное мигание изображения 81 :' Эта возможность используется в программе PAINTER 82 :' (меню Tool.Show Canvas) 90 A$=INPUT$(1) :' З а д е р ж к а Кроме того,видеопроцессор поддерживает функцию черезстрочного отображе- ния. Отображение первого и второго п о л е й на одной и той же странице можно получить, установив бит IL (третий бит регистра с номером 9) в 1. Отображение четной страницы в первом поле и нечетной страницы во вто- ром поле можно получить, выполнив следующее: 1) установить бит IL (третий бит регистра с номером 9) в 1; 2) установить бит ЕО (второй бит регистра с номером 9) в 1; 3) задать базовый адрес Таблицы имен шаблонов нечетной страницы (ре- гистр с номером 2). П р и м е р 5. WWWWWWWWWWWWW 10 COLOR 15,1,1: SCREEN 7 ' Режим растровой графики 15 ' Обратите внимание на координаты линий ! 20 SET PAGE 0,0:CLS:LINE (0,100)-(511,100),15 'На странице 0 рисуем линию 30 SET PAGE 1,1:CLS:LINE (0,100)-(511,100),8 ' На 1-й странице тоже рисуем линию 31 VDP(9+1)=&B00001100 32 ' VZWWWWWWW Отображаем четную страницу в первом поле 33 ' ZWWWWWWWW и нечетную страницу во втором поле 34 'Линии накладываются друг на друга на 1/2 (!) точки 40 A$=INPUT$(1) ' Задержка 41 VDP(9+1)=0 ' Выключим мигание ╚) Регистр с номером 20 называется регистром цветовой вспышки 1. Регистр с номером 21 называется регистром цветовой вспышки 2. Регистр с номером 22 называется регистром цветовой вспышки 3. Данные регистры инициализируются при включении компьютера следующим об- разом: XWWWWWWWWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWY V Номер бита V 7 V 6 V 5 V 4 V 3 V 2 V 1 V 0 V TWWWWWWWWWWWWUWWWWWUWWWWWUWWWWWUWWWWWUWWWWWUWWWWWUWWWWWUWWWWWS V Регистр 20 V 0 V 0 V 0 V 0 V 0 V 0 V 0 V 0 V TWWWWWWWWWWWWUWWWWWUWWWWWUWWWWWUWWWWWUWWWWWUWWWWWUWWWWWUWWWWWS V Регистр 21 V 0 V 0 V 1 V 1 V 1 V 0 V 1 V 1 V TWWWWWWWWWWWWUWWWWWUWWWWWUWWWWWUWWWWWUWWWWWUWWWWWUWWWWWUWWWWWS V Регистр 22 V 0 V 0 V 0 V 1 V 0 V 1 V 0 V 1 V ZWWWWWWWWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWW[ Если все величины в трех вышеуказанных регистрах равны нулю, то сигнал "цветовой вспышки" на NTSC-видеовыходе будет отсутствовать. Если же выше- указанные величины затем возвращаются в исходное состояние, то будет полу- чен обычный сигнал "цветовой вспышки" на NTSC-видеовыходе.  XI.2.4. Р е г и с т р ы у п р а в л е н и я э к р а н о м Регистрами у п р а в л е н и я э к р а н о м будем называть регист- ры с номерами 18, 19, 23. Эти регистры используются для управления отобра- жением на дисплее. ═) Использование регистра с номером в о с е м н а д ц а т ь дает возможность центрирования изображения относительно электронно-лучевой трубки дисплея: Р е г и с т р с н о м е р о м 18 XWWWWWWRWWWWWWRWWWWWWRWWWWWWRWWWWWWRWWWWWWRWWWWWWRWWWWWWY V V Параметр смещения V V Параметр смещения V V V вверх-вниз V V вправо-влево V ZWW▌WWWQWWWWWWQWWWWWWQWWWWWWQWW▌WWWQWWWWWWQWWWWWWQWWWWWW[ V V Флаг смещения вверх-вниз: Флаг смещения вправо-влево: 1 означает смещение экрана вниз; 1 означает смещение экрана вправо; 0 означает смещение экрана вверх 0 означает смещение экрана влево А теперь посмотрите на фрагмент алгоритма нахождения величины смещения экрана, который записан на школьном алгоритмическом языке: если Флаг смещения = 1 WWWW V то Величина смещения = 8 - параметр смещения V WW V иначе Величина смещения = параметр смещения V WWWWW V все WWW П р и м е р 1. Сдвинем экран влево на 2 точки и вниз на 5 точек. WWWWWWWWWWWWW 10 VDP(18+1)=&B10110010 ▌Z▌[▌Z▌[ Смещение экрана вниз W[ V V ZW 2 точки 5=8-3 WWW[ ZWWW Смещение экрана влево На компьютерах MSX-2 по умолчанию "содержимое" регистра с номером 18 по умолчанию задается оператором SET ADJUST (X,Y) . Значения выражений X и Y принадлежат отрезку [-7,8]. ║) Можно установить прерывание в момент, когда видeопроцессор начинает сканировать определенную линию. Для получения прерывания используется ре- гистр с номером д е в я т н а д ц а т ь, в котором хранится номер линии. ╖) Р е г и с т р 23. WWWWWWWWWWWWWWWW Взгляните на рисунок и Вы увидите, как изменяется изображение симво- лов на т е к с т о в о м экране в зависимости от содержимого 23-го ре- гистра (значимыми при этом являются только три младших бита): VDP(23+1)=0 VDP(23+1)=1 VDP(23+1)=2 VDP(23+1)=3 XWRWRWRWRWRWRWRWY XWRWRWRWRWRWRWRWY XWRWRWRWRWRWRWRWY XWRWRWRWRWRWRWRWY V⌡V V V V⌡V V V V V⌡V V V V⌡V V V V V⌡V V V V⌡V V V V V⌡V V⌡V V⌡V V V V V⌡V V V V⌡V V V V V⌡V V V V⌡V V V V V⌡V V⌡V V⌡V V V V V⌡V V⌡V V⌡V V V V V⌡V V V V⌡V V V V V⌡V V⌡V V⌡V V V V V⌡V V⌡V V⌡V V V V V⌡V⌡V V⌡V⌡V V V V V⌡V V⌡V V⌡V V V V V⌡V V⌡V V⌡V V V V V⌡V⌡V V⌡V⌡V V V V V⌡V V V V⌡V V V V V⌡V V⌡V V⌡V V V V V⌡V⌡V V⌡V⌡V V V V V⌡V V V V⌡V V V V V V V V V V V V V V⌡V⌡V V⌡V⌡V V V V V⌡V V V V⌡V V V V V V V V V V V V V V⌡V V V V⌡V V V V V⌡V V V V⌡V V V V V V V V V V V V V V⌡V V V V⌡V V V V V⌡V V V V⌡V V V V V V V V V V V V V V⌡V V V V⌡V V V V V⌡V V V V⌡V V V V V⌡V V V V⌡V V V V ZWQWQWQWQWQWQWQW[ ZWQWQWQWQWQWQWQW[ ZWQWQWQWQWQWQWQW[ ZWQWQWQWQWQWQWQW[ VDP(23+1)=4 VDP(23+1)=5 VDP(23+1)=6 VDP(23+1)=7 XWRWRWRWRWRWRWRWY XWRWRWRWRWRWRWRWY XWRWRWRWRWRWRWRWY XWRWRWRWRWRWRWRWY V⌡V V⌡V V⌡V V V V V⌡V⌡V V⌡V⌡V V V V V⌡V V V V⌡V V V V V V V V V V V V V V⌡V⌡V V⌡V⌡V V V V V⌡V V V V⌡V V V V V V V V V V V V V V⌡V V V V⌡V V V V V⌡V V V V⌡V V V V V V V V V V V V V V⌡V V V V⌡V V V V V⌡V V V V⌡V V V V V V V V V V V V V V⌡V V V V⌡V V V V V⌡V V V V⌡V V V V V⌡V V V V⌡V V V V V⌡V V V V⌡V V V V V⌡V V V V⌡V V V V V⌡V V V V⌡V V V V V⌡V V⌡V V⌡V V V V V⌡V V V V⌡V V V V V⌡V V V V⌡V V V V V⌡V V⌡V V⌡V V V V V⌡V V⌡V V⌡V V V V V⌡V V V V⌡V V V V V⌡V V⌡V V⌡V V V V V⌡V V⌡V V⌡V V V V V⌡V⌡V V⌡V⌡V V V V V⌡V V⌡V V⌡V V V V V⌡V V⌡V V⌡V V V V V⌡V⌡V V⌡V⌡V V V V V⌡V V V V⌡V V V V ZWQWQWQWQWQWQWQW[ ZWQWQWQWQWQWQWQW[ ZWQWQWQWQWQWQWQW[ ZWQWQWQWQWQWQWQW[ П р и м е р. WWWWWWWWWWW 5 SCREEN 0:CLS:KEYOFF 20 FOR I=0 TO 5:PRINT "▄▀▄▀▄":NEXT 30 FOR J=0 TO 7 40 FOR K=0 TO 10:NEXT K 50 VDP(23+1)=J 60 NEXT J 70 IF INKEY$="" THEN 30 80 VDP(23+1)=0:END В г р а ф и ч е с к и х режимах регистр с номером 23 предоставляет другую интересную возможность. Вначале следует вспомнить, что доступная высота графического экрана равна 192 или 212 линиям (в зависимости от де- вятого регистра MSX-VDP). Однако Вы можете, воздействуя на VRAM (исполь- зуя, например, оператор VPOKE), сформировать шаблоны 256 линий, просмот- рев которые Вы можете, использовав регистр с номером 23. Понять, как это происходит, Вы можете из следующих рисунков: VDP(23+1)=0: XWWWWWWWWWWWWWWWWWY Y=0 V Видимые линии V TWWWWWWWWWWWWWWWWWS Y=192 или 212 V Невидимые линии V ZWWWWWWWWWWWWWWWWW[ Y=255 VDP(23+1)=200: XWWWWWWWWWWWWWWWWWY Y=0 V Видимые линии V TWWWWWWWWWWWWWWWWWS Y=136 или 156 V Невидимые линии V TWWWWWWWWWWWWWWWWWS Y=200 V Видимые линии V ZWWWWWWWWWWWWWWWWW[ Y=255 XI.2.5. Н е к о т о р ы е р е г и с т р ы д о с т у п а Имеется возможность изменить палитру некоторого цвета. Для установки данных в д е в я т и б и т о в ы е регистры палитры видеопроцессора (с номерами от 0 до 15) следует вначале установить номер регистра палитры в регистре с номером ш е с т н а д ц а т ь , а затем по- следовательно вывести д в а байта данных (по порядку) через порт &H9A. Номера битов 7 6 5 4 3 2 1 0 XWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWWY Р е г и с т р 16V 0 V 0 V 0 V 0 VН о м е р п а л и т р ыV ZWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWW[ XWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWWY П о р т &H9A V 0 V К р а с н ы й V 0 V С и н и й V ZWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWW[ XWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWWY П о р т &H9A V 0 V 0 V 0 V 0 V 0 V З е л е н ы й V ZWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWW[ XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Для изменения цвета надо набрать последовательно команды (операторы):V V VDP(16+1)=C:OUT &H9A,16*R+B:OUT &H9A,G , V V где: C - номер цветовой палитры, которую Вы хотите изменить; V V R,B,G - числа, определяющие соотношение красного, синего и V V зеленого цветов в палитре. V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ П р и м е р 2. WWWWWWWWWWWWW COLOR 15,3 Ok VDP(16+1)=3:OUT &H9A,64:OUT &H9A,3 Ok Отметим, что для компьютеров MSX-1 этот способ изменения цветов являет- ся единственно возможным! П р и м е р 3. WWWWWWWWWWWWW 10 COLOR 8,15,0:KEY OFF:SCREEN 1 20 FOR R=0 TO 7:FOR G=0 TO 7:FOR B=0 TO 7 30 OUT &H99,0:OUT &H99,16 OR &H80:OUT &H9A,16*R+B:OUT &H9A,G 40 LOCATE 10,10:?"R="R:LOCATE 10,11:?"G="G:LOCATE 10,12:?"B="B 50 FOR T=1 TO 500:NEXT T:NEXT B,G,R Регистр с номером с е м н а д ц а т ь хранит информацию о к о с в е н- н о м доступе в регистры MSX-VDP. Взгляните на его содержимое: 7 6 5 4 3 2 1 0 XWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWY V O V 0 V Н о м е р р е г и с т р а V ZWW▌WWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWW[ TWWWW 0 : автоинкрементирование з а п р е щ е н о; ZWWWW 1 : автоинкрементирование р а з р е ш е н о. В соответствии со значением 7-го бита регистра 17 содержимое этого регистра может автоматически увеличиваться. Если автoинкрементирование за- прещено, то содержимое 17-го регистра останется прежним. Приведем два способа к о с в е н н о й з а п и с и в видеопроцессор с использованием регистра с номером 17: XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY ═)V 10 VDP(17+1)=N OR &H80'или OUT &H99,N OR &H80:OUT &H99,17 OR &H80 V V 20 OUT &h9B, Число для регистра с номером N V V 30 OUT &h9B, Число для регистра с номером N+1 V V 40 OUT &H9B, Число для регистра с номером N+2 V V 50 ' GGG V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ П р и м е р 4. WWWWWWWWWWWWW 5 SCREEN 1:COLOR 15,0,8 10 VDP(17+1)=8 OR &H40 'Установка регистра с номером 17 на косвенный 'доступ 20 OUT &H9B,VDP(8+1) OR &H20 'Цвет 0 из Таблицы палитр 30 OUT &H9B,VDP(9+1) OR &H80 'На экране - 26.5 строк XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY ║)V 10 VDP(17+1)=N 'или OUT &H99,N:OUT &H99,17 OR &H80 V V 20 OUT &H9B, Число для регистра N V V 30 OUT &H9B, Число для регистра N V V 40 OUT &H9B, Число для регистра N V V 50 ' GGG V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Косвенный доступ к регистрам видеопроцессора применяется тогда, когда необходимо записать информацию в несколько регистров, адреса которых идут п о д р я д. При этом запись через порт с адресом &H9B будет происходить до тех пор, пока не будет сделана новая установка на косвенный доступ. XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Данные в 17-м регистре не могут быть изменены косвенной адресацией!V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ XI.2.6. Д о с т у п к в и д е о п а м я т и Р е г и с т р 14 (регистр базового адреса доступа к VRAM). WWWWWWWWWWWWWWWWW Этот регистр видеопроцессора используется при доступе к видеопамяти. Если Вы располагаете видеопамятью объемом до 16 Кбайтов, то использование этого регистра не имеет смысла, так как в нем хранятся с т а р ш и е би- ты текущего адреса видеопамяти. Р е г и с т р с н о м е р о м 14 Номера битов 7 6 5 4 3 2 1 0 XWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWY V 0 V 0 V 0 V 0 V 0 V A16 V A15 V A14 V ZWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWW[ В регистре с номером 14 устанавливаются три старших бита адреса ячейки видеопамяти (A16, A15, A14). Сейчас мы расскажем, как обратиться к л ю б о й ячейке видеопамяти. На компьютерах серии MSX-2 существует 2 типа видеопамяти: VRAM и ERAM. VRAM ("Video RAM") имеет объем в 128 Кбайтов, а ERAM ("Expanded RAM") - 64 Кбайта. Информация о том, какая видеопамять используется в настоящий момент, хранится в регистре с номером 45. Доступ к видеопамяти осуществляется в следующей последовательности: 1) выберите т и п видеопамяти: VDP(45+1)=&B0OOOOOOO ▌ZWW▌W[ V ZWW эти биты используются для других целей TWWWWWW 1 - если используется ERAM ZWWWWWW 0 - если используется VRAM Отметим, что содержимое регистра с номером 45 не меняется при очеред- ном обращении к памяти. 2) установите биты A14╤A16 адреса видеопамяти: VDP(14+1)=&B00000OOO ▌▌▌ A16 WWW[VZWWW A14 ZWWWW A15 3) установите биты A0╤A7 счетчика адреса посредством вывода данных в порт &H99: OUT &H99,&BOOOOOOOO ▌▌▌▌▌▌▌▌ VVVVVVVZWWWW A0 VVVVVVZWWWWW A1 VVVVVZWWWWWW A2 VVVVZWWWWWWW A3 VVVZWWWWWWWW A4 VVZWWWWWWWWW A5 VZWWWWWWWWWW A6 ZWWWWWWWWWWW A7 4) установите биты A8╤A13 счетчика адреса и признак чтения или записи посредством вывода данных в порт &H99: OUT &H99,&BOOOOOOOO ▌▌▌▌▌▌▌▌ VVVVVVVZWWWW A8 VVVVVVZWWWWW A9 VVVVVZWWWWWW A10 VVVVZWWWWWWW A11 VVVZWWWWWWWW A12 VVZWWWWWWWWW A13 TUWWWWWWWWWW 00 - признак чтения ZQWWWWWWWWWW 01 - признак записи 5) а теперь остается прочитать или записать данные в нужный байт: A=INP(&H98) - ч т е н и е OUT &H98,A - з а п и с ь 6) после чтения или записи данных содержимое адресного счетчика автома- тически увеличивается на единицу. При этом, если есть перенос из бита A13, то в режимах SCREEN 4╤8 происходит увеличение содержимого регистра с номе- ром 14. В режимах SCREEN 1╤3 и в 40-символьном режиме SCREEN 0 увеличения содержимого 14-го регистра не происходит. Из сказанного следует, что если нужно записать информацию в несколько подряд расположенных ячеек видеопамяти, достаточно установить лишь началь- ный адрес этой группы ячеек. XI.2.7. Р е г и с т р ы с т а т у с а Кроме регистров MSX-VDP видеопроцессор работает с группой регистров, называемых регистрами с т а т у с а. Эти регистры содержат информацию о состоянии видеопроцессора. Из них информацию можно только ч и т а т ь. Текущий номер регистра статуса записывается в регистр VDP с номером п я т н а д ц а т ь (регистр-указатель регистра состояния). Номера битов 7 6 5 4 3 2 1 0 XWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWRWWWWWY V 0 V 0 V 0 V 0 V Номер регистра статусаV ZWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWWQWWWWW[ Для доступа к регистрам с о с т о я н и я видеопроцессора (с номера- ми 0,1,2,3,...,9) вначале нужно установить номер регистра статуса в реги- стре с номером 15, а затем прочесть данные через порт &H99. XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Для записи в переменную W числа из регистра статуса с номером S V V выполните следующие действия: V V VDP(15+1)=S:W=INP(&H99):VDP(15+1)=0 V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Р е г и с т р с т а т у с а н о м е р 0. WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW 7 6 5 4 3 2 1 0 XWWWWWWRWWWWWWRWWWWWWRWWWWWWRWWWWWWRWWWWWWRWWWWWWRWWWWWWY V V V V O V O V O V O V O V ZWWW▌WWQWWW▌WWQWW▌WWWQWWWWWWQWWWWWWQWWWWWWQWWWWWWQWWWWWW[ V V V ZWWW▌WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ V V V Z Экранный номер пятого или девятого V V V (в зависимости от режима SCREEN) спрайта в строке V V ZWWW Флаг, указывающий на столкновение 2 спрайтов V ZWWWWWWWWW Флаг обнаружения пятого (или девятого) спрайта V в с т р о к е ZWWWWWWWWWWWWWWWW Флаг прерывания от вертикального сканирования (после чтения регистра состояния 0 данный флаг сбрасывается) Если бит СС=0 и высвечиваемые части шаблонов спрайтов перекрываются,то устанавливается столкновение спрайтов. Если столкновение спрайтов обнару- жено, то бит 5 регистра статуса с номером 0 устанавливается в 1. Этот бит устанавливается в 0 после чтения регистра статуса с номером 0. Использование регистра статуса с номером 0 рассмотрим на примерах. П р и м е р 1. WWWWWWWWWWWWW 10 SCREEN 1,2 20 SPRITE$(2)="Проверка":SPRITE$(3)="на столкновение" 30 FOR T=1 TO 130 40 PUT SPRITE 2,(T,80):PUT SPRITE 3,(240-T,80) 50 VDP(15+1)=0:Z=INP(&H99) AND 32 60 IF Z<>0 THEN PRINT "Столкновение состоялось!" 70 NEXT П р и м е р 2. WWWWWWWWWWWWW 10 SCREEN 1:KEYOFF 20 FOR I=0 TO 7:READ E:VPOKE &H3800+I,E:NEXT 30 A0=BASE(1*5+3):AD=A0+4*1:AP=A0+4*2 40 VPOKE AP,50:VPOKE AP+1,100:VPOKE AP+2,0:VPOKE AP+3,15 50 FOR X=0 TO 255 60 VPOKE AD,50:VPOKE AD+1,X:VPOKE AD+2,0:VPOKE AD+3,15 70 VDP(15+1)=0:Z=INP(&H99) AND 32 80 IF Z<>0 THEN LOCATE 1,1:PRINT"столкновение":FOR L=0 TO 100:NEXT:LOC ATE1,1:PRINT" " 90 NEXT 100 GOTO 50 110 DATA 255,255,195,195,195,195,255,255 П р и м е р 3. WWWWWWWWWWWWW 10 SCREEN 1,2 20 SPRITE$(1)="Проверка":SPRITE$(2)="появления":SPRITE$(3)="пятого":SP RITE$(4)="спрайта":SPRITE$(5)="в строке" 30 PUT SPRITE0,(10,80),,5:PUT SPRITE1,(20,80),,4:PUT SPRITE2,(30,80),, 3:PUT SPRITE3,(40,80),,2 40 VDP(15+1)=0:Z=INP(&H99) 50 PRINT RIGHT$("00000000"+BIN$(Z),8) 55 A$=INPUT$(1) 60 PUT SPRITE4,(50,80),,1 70 VDP(15+1)=0:Z=INP(&H99) 80 ? RIGHT$("00000000"+BIN$(Z),8);"░W Появился 5-й спрайт в строке!" Отметим, что содержимое регистра статуса с номером 0 можно прочесть не только функцией INP, но и при помощи псевдопеременной VDP: XWWWWWWWWWWWWY V A = VDP(8) V . ZWWWWWWWWWWWW[ П р и м е р 4. Управление столкновениями спрайтов. WWWWWWWWWWWWWW 20 SCREEN 2,2 30 SPRITE$(0)=STRING$(32,255) 40 PUT SPRITE 0,(112,80),1,0 50 PUT SPRITE 1,(10,80),8,0 60 IF (VDP(8)AND32)=32 THEN GOTO 90 70 PUT SPRITE 1,STEP(1,0),8,0 80 GOTO 60 90 BEEP:GOTO 90 З а м е ч а н и е. Назначения битов регистров статуса с номерами 1,2,3, 4,5,6,7,8,9 рассмотрены в Приложении 2. Там же рассмотрены назначения би- тов командных регистров с номерами 32,33,...,45,46.  XI.3. НЕСТАНДАРТНЫЕ РЕЖИМЫ ВИДЕОПРОЦЕССОРА Боги открыли людям не все. В поиск пустившись,люди сами открыли немало. Ксенофан XI.3.1. Р е ж и м SCREEN 4 н а к о м п ь ю т е р а х MSX-1 Для Вас, наверное, окажется неожиданностью, что на компьютерах MSX-1 можно использовать режимы SCREEN 4 ╤ SCREEN 8. Доступ к этим режимам осу- ществляется путем непосредственной записи в регистры видеопроцессора. Режим SCREEN 4 вызывается из режима SCREEN 2 путем обращения к видео- процессору: XWWWWWWWWWWWWWWY V VDP(0)=4 V . ZWWWWWWWWWWWWWW[ При этом изображение, нарисованное в режиме SCREEN 2,останется на экра- не. Этот режим выгодно отличается возможностями работы со спрайтами. Приведем начальные адреса Таблиц VRAM, отвечающих за спрайты, в этом режиме: XWWWWWWWWWWWWWWWWWWRWWWWWWWWWWWWWWWWWWWWWWWWWY V И м я Таблицы V Начальный адрес Таблицы V TWWWWWWWWWWWWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWS V SGT V &H3800 V V SAT V &H1A00 V V SCT V &H1800 V ZWWWWWWWWWWWWWWWWWWQWWWWWWWWWWWWWWWWWWWWWWWWW[ Чтобы вернуться в режим SCREEN 2, достаточно снова обратиться к видео- процессору: XWWWWWWWWWWWWWWY V VDP(0)=2 V . ZWWWWWWWWWWWWWW[ Учтите, что режим SCREEN 4 на компьютерах серии MSX-1 имеет некоторые о с о б е н н о с т и: 1) происходит частичное "наложение" Таблиц SAT и SCT на Таблицу PNT, что приводит к искажению неподвижного изображения.Поэтому необходимо "спа- сти" Таблицу PNT, т.е. передвинуть ее на свободное место в видеопамяти; 2) при переходе в этот режим возникает несоответствие между начальным адресом Таблицы SAT, возвращаемым псевдопеременной BASE(13),и тем же адре- сом,хранящимся в рабочей области RAM. Поместите поэтому в рабочую область RAM по адресам &HF928 и &HF929 число, записанное в псевдопеременной BASE(13); 3) образы спрайтов выводятся на экран уже на стадии формирования спрай- товых переменных.Единственный способ избавиться от этого - временно отклю- чить изображение (без очистки экрана) и включить его непосредственно пе- ред обращением к Таблице атрибутов спрайтов (SAT). А теперь взгляните на П р и м е р 1. Вы, конечно, помните, что текущий адрес Таблицы PNT хра- WWWWWWWWWWWWW нится в рабочей области по адресам &HF922 и &HF923 . 10 SCREEN 2,2 20 'Инициализация режима SCREEN 4 50 VDP(2)=7:POKE &HF923,&H1C 'Передвинем Таблицу PNT 60 VDP(5)=52:POKE &HF929,&H1A 'Приведем в порядок SAT 65 VDP(0)=4 'Установим режим SCREEN 4 70 'Основная программа 75 VDP(1)=VDP(1) XOR 64 'Отключим изображение 80 CIRCLE(100,100),50,15 90 FOR X=0 TO 8 100 SPRITE$(X)=STRING$(32,255):NEXT 'Сформируем спрайты 110 FOR Y=0 TO 15:V=INT(RND(1)*16) 120 FOR X=0 TO 8 130 VPOKE &H1800+X*16+Y,V 'Раскрасим спрайты, используя Таблицу SCT 140 NEXT X,Y 150 VDP(1)=VDP(1) XOR64 'Включим изображение 160 PUT SPRITE 8,(70,30),,0 170 X=128:Y=96 180 A=STICK(0) 190 IF A=1 OR A=2 OR A=8 THEN Y=Y-2 200 IF A=2 OR A=3 OR A=4 THEN X=X+2 210 IF A=4 OR A=5 OR A=6 THEN Y=Y+2 220 IF A=6 OR A=7 OR A=8 THEN X=X-2 230 FOR Z=0 TO 7 240 PUT SPRITE Z,(X-Z*17,Y),,0 'В о с е м ь спрайтов в строке! 250 NEXT Z 260 GOTO 180 Вас, конечно, не удивляет тот факт, что на экране - в о с е м ь спрай- тов в с т р о к е , так как Вам, наверное, известно,что режимы SCREEN 4 ╤ SCREEN 8 предоставляют такую возможность! XI.3.2. Т е к с т о в о - г р а ф и ч е с к и е р е ж и м ы Мы опишем здесь два текстово-графических режима: ═) режим SCREEN 1-2 ("совмещенный" режим SCREEN 1 и SCREEN 2); ║) режим SCREEN 1-4 ("совмещенный" режим SCREEN 1 и SCREEN 4). "Совмещенный" режим SCREEN 1-2 устанавливается операторами: XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V SCREEN 1:DEFUSR=&H7E:A=USR(0) V . ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Однако,прежде чем начать "работать" в этом режиме, его надо инициализи- ровать следующим образом: XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V 10 SCREEN 1:WIDTH 32 V V 20 DEFUSR=&H7E:A=USR(0) 'Установили совмещенный режим V V 30 'Считываем шаблоны символов из ROM в Таблицу PGT V V 40 FOR T=0 TO 2 V V 50 FOR K=0 TO 2047 V V 60 VPOKE BASE(7)+2048*T+K,PEEK(&H1BBF+K) V V 70 NEXT K,T V V 80 'Инициализируем цвета символов в Таблице CT V V 90 FOR I=0 TO 6143:VPOKE BASE(6)+I,&HF4:NEXT I V V 100 'Установим форму курсора во 2-м и 3-м окне экрана V V 110 FOR Y=1 TO 2:FOR X=0 TO 7:VPOKE &H800*Y+255*8+X,255:NEXT X,Y V V 120 NEW V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Не беда, что для инициализации требуется более двух минут. При соответ- ствующей подготовке Вы сможете написать программу в машинных кодах, кото- рая будет работать в несколько десятков раз быстрее: П р и м е р 1. Смотрите и завидуйте! WWWWWWWWWWWWW 100 CLEAR 100,&HD000 110 SCREEN 1:WIDTH 32:DEFUSR=&H7E:A=USR(0) 120 A$="21000011BF1B1ACD1CD03EF0CBECCD1CD0CBAC13237CD608C206D0C9 47CD4D00CBDC78CD4D00CB9CCBE478CD4D00CBA4C9" 130 FOR X=0 TO 48:POKE &HD000+X,VAL("&h"+MID$(A$,X*2+1,2)):NEXT 140 DEFUSR=&HD000:A=USR(0) 150 FOR Y=1 TO 2:FOR X=0 TO 7:VPOKE &H800*Y+255*8+X,255:NEXT X,Y Поговорим об о с о б е н н о с т я х режима SCREEN 1-2 : 1. Данный режим позволяет формировать многоцветные символы, причем ин- формация о цветах каждого из них хранится в в о с ь м и байтах Таблицы CT: 1-й б а й т GGG 8-й б а й т XWWWWWWWWWWWWWRWWWWWWWWWWWWWRWWWWWRWWWWWWWWWWWWWRWWWWWWWWWWWWWY V Код цвета Код цвета V V Код цвета Код цвета V V изображения V ф о н а V V изображения V ф о н а V V для первой для первой V GGG V для восьмой для восьмой V V строки V строки V V строки V строки V V символа символа V V символа символа V ZWWWWWWWWWWWWWQWWWWWWWWWWWWWQWWWWWQWWWWWWWWWWWWWQWWWWWWWWWWWWW[ Проведем аналогию с режимом SCREEN 1: 1-й б а й т CT XWWWWWWWWWWWWWRWWWWWWWWWWWWWY V Код цвета Код цвета V V изображения V ф о н а V V для первых для первых V V в о с ь м и V в о с ь м и V V символов символов V ZWWWWWWWWWWWWWQWWWWWWWWWWWWW[ 2. Режим SCREEN 1-2 имеет трехоконную структуру(как и режим SCREEN 2): Внимательно изучите следующую табличку: XWWWWWWWRWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Адрес V К о м м е н т а р и й V TWWWWWWWUWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWS V &H0000V Таблица шаблонов образов, расположенных в верхней части V V V экрана, т.е. с 0-й по 7-ю строку. На каждый символ отводит- V V V ся 8 байтов V V &H0800V Таблица шаблонов символов, расположенных в средней части V V V экрана, т.е. с 8-й по 15-ю строку V V &H1000V Таблица шаблонов символов, расположенных в нижней части V V V экрана, т.е. с 16-й по 23-ю строку V V &H1800V Таблица имен образов (строки 0╤7) V V &H1900V Таблица имен образов (строки 8╤15) V V &H1A00V Таблица имен образов (строки 16╤23) V V &H1B00V Таблица атрибутов спрайтов V V &H2000V Таблица цветов символов, расположенных с 0-й по 7-ю строку.V V V На каждый символ отводится 8 байтов. На каждую строку симво-V V V ла отводится 1 байт, старший полубайт которого отвечает за V V V цвет установленных битов в Таблице шаблонов символов V V &H2800V Таблица цветов символов, расположенных с 8-й по 15-ю строку V V &H3000V Таблица цветов символов, расположенных с 16-й по 23-ю строкуV V &H3800V Таблица шаблонов спрайтов V ZWWWWWWWQWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ 3. В режиме SCREEN 1-2 разрешено использование как текстовых,так и гра- фических операторов, т.о. "совмещенный" режим SCREEN 1-2 может находиться в двух "состояниях". В о - п е р в ы х, это - т е к с т о в ы й режим.В нем "работают" все операторы текстового экрана. Однако он отличается от текстового режима SCREEN 1 в следующих моментах: 1) весь экран разбит на т р и горизонтальных окна; 2) символ, вообще говоря, раскрашен о д н о в р е м е н н о в 16 цве- тов (по два цвета на линию); 3) один и тот же символ (определяемый кодом АSCII), может быть различ- ным по начертанию и цвету в трех различных окнах экрана. XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Для изменения цвета какой-либо строки любого символа в любой V V трети экрана, примените оператор: V V VPOKE BASE(5+1)+2048*N+8*K+S,&HIF , V V где: N - номер окна экрана; V V K - код ASCII символа; V V S - номер строки символа; V V I - цвет изображения; V V F - цвет фона. V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V Для изменения шаблона одной строки символа используйте оператор V V VPOKE BASE(5+2)+2048*N+8*K+S,&BOOOOOOOO , V V где: N - номер окна экрана; V V K - код ASCII символа; V V S - номер строки символа; V V OOOOOOOO - двоичное представление шаблона строки символа. V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Приведем несколько примеров: П р и м е р 2. Полюбуйтесь на ц в е т н о й курсор! WWWWWWWWWWWWW 10 FOR X=0 TO 2 20 A=&H2000+&H800*X+255*8 30 FOR Y=0 TO 7 40 VPOKE A+Y,Y*16 50 NEXT Y 60 NEXT X П р и м е р 3. А вот "переливание" латинских букв "А" в верхней тре- WWWWWWWWWWWWWW ти экрана! 10 FOR A=0 TO 8 20 FOR X=0 TO 7: VPOKE &H2000+65*8+X,(X+A)*16: NEXT X 50 NEXT A 60 GOTO 10 Чтобы прекратить процесс "переливания", нажмите клавиши "CTRL"+"STOP". П р и м е р 4. Вместо буквы "W" в верхнем углу экрана Вы увидете... WWWWWWWWWWWWW "яблоко"! 10 OUT&H99,6:OUT&H99,144:OUT&H98,16*4:OUT&H98,2 'Изменим 6-й цвет 20 A$="3C7E307830787E3C8484B8B8B8866414" 30 FOR X=0 TO 7 40 VPOKE 87*8+X,VAL("&H"+MID$(A$,X*2+1,2)) 50 VPOKE &H2000+87*8+X,VAL("&H"+MID$(A$,2*X+17,2)) 60 NEXT X П р и м е р 5. "Т о л с т ы е" символы - только в верхней трети экрана! WWWWWWWWWWWWW 10 FOR X=&HFFTO &H7F7 20 A=VPEEK(X):VPOKE X,A OR A/2 30 NEXT X П р и м е р 6. Теперь повращаем "трубу" вокруг своей оси! WWWWWWWWWWWWW 10 FOR I=0 TO 7:VPOKE 8*43+I,255:NEXT 20 CLS:PRINT"++++++++++++++++++++++++++++++" 30 FOR F=7 TO 0 STEP -1 40 VPOKE &H2000+&H800*0+8*43+F,&H71 50 IF F=7 THEN W=0 ELSE W=F+1 60 VPOKE &H2000+&H800*0+8*43+W,&H51 70 IF W=7 THEN WC=0 ELSE WC=W+1 80 VPOKE &H2000+&H800*0+8*43+WC,&H41 90 IF WC=7 THEN JC=0 ELSE JC=WC+1 100 VPOKE &H2000+&H800*0+8*43+JC,&H51 110 IF JC=7 THEN JJ=0 ELSE JJ=JC+1 120 VPOKE &H2000+&H800*0+8*43+JJ,&H71 130 IF JJ=7 THEN YJ=0 ELSE YJ=JJ+1 140 VPOKE &H2000+&H800*0+8*43+YJ,&HF1 150 NEXT:GOTO 30 В о - в т о р ы х , режим SCREEN 1-2 - это графический режим,в котором можно одновременно и рисовать, и выводить текст. Для этого предварительно решите, в какой части экрана (одной или нескольких) Вы будете рисовать, а в какой - писать. Для того чтобы рисовать в какой-либо части экрана,ее надо предваритель- но подготовить следующим образом: XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V FOR T=0 TO 255 :VPOKE BASE(5)+256*N+T,T :NEXT V V FOR T=0 TO 2047:VPOKE BASE(5+1)+2048*N+T,&HF4:NEXT V V FOR T=0 TO 2047:VPOKE BASE(5+2)+2048*N+T,0 :NEXT V , ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ где N - номер части экрана, в которой Вы хотите применить графические опе- раторы. Таким образом, Вы инициализируете участки Таблиц PNT, CT и PGT,отвечаю- щие за изображение в нужном окне экрана. Теперь в приготовленной части экрана можно применять графические опера- торы. Однако их можно применять только после выполнения оператора: XWWWWWWWWWWWWWWWY V POKE &HFCAF,2 V . ZWWWWWWWWWWWWWWW[ Для выхода в т е к с т о в ы й режим "пригодится" оператор: XWWWWWWWWWWWWWWWY V POKE &HFCAF,1 V . ZWWWWWWWWWWWWWWW[ Если Вы его не выполните, то произойдет переход в режим SCREEN 1 ! Нужно постоянно помнить о том, что Ваши рисунки могут "портиться", так как любой символ, напечатанный в графической части экрана, портит рисунок. Однако рисунок можно восстановить, применив операторы: XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V FOR T=0 TO 255:VPOKE BASE(5)+256*N+T,T:NEXT V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ П р и м е р 7. В верхней части экрана - г р а ф и ч е с к и й режим! WWWWWWWWWWWWW 10 CLS 20 FOR X=0 TO 255:VPOKE &H1800+X,X:NEXT 30 FOR X=0 TO &H7FF:VPOKE X,0:NEXT 40 LOCATE 5,10:PRINT"Вверху графика!" 50 POKE &HFCAF,2 60 LINE (20,10)-(100,40),15,BF 70 CIRCLE (80,30),40,8 80 POKE &HFCAF,1 Рассмотрим теперь "совмещенный" режим SCREEN 1-4. Единственное отличие режима SCREEN 1-4 от режима SCREEN 1-2 состоит в том, что в нем разрешена работа с м н о г о ц в е т н ы м и спрайтами (как и в режиме SCREEN 4). Инициализируется режим SCREEN 1-4 следующим образом: XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWY V 10 SCREEN 1:WIDTH 32 V V 15 'Установим режим SCREEN 1-2 V V 20 DEFUSR=&H7E:A=USR(0) V V 30 'Считываем шаблоны символов из ROM в Таблицу PGT V V 40 FOR T=0 TO 2 V V 50 FOR K=0 TO 2047 V V 60 VPOKE BASE(7)+2048*T+K,PEEK(&H1BBF+K) V V 70 NEXT K,T V V 80 'Инициализируем цвета символов в Таблице CT V V 90 FOR I=0 TO 6143:VPOKE BASE(6)+I,&HF4:NEXT I V V 100 'Установим форму курсора во 2-м и 3-м окнах экрана V V 110 FOR Y=1 TO 2:FOR X=0 TO 7:VPOKE &H800*Y+255*8+X,255:NEXT X,Y V V 115 'Теперь установим режим SCREEN 1-4 V V 120 VDP(2)= 7:POKE &HF923,&H1C 'Передвинем Таблицу PNT V V 140 VDP(5)=52:POKE &HF929,&H1A 'Приведем в порядок SAT V V 150 VDP(0)=4:CLS:NEW V ZWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[ Все сказанное о режиме SCREEN 1-2 распространяется и на режим SCREEN 1-4. Остается только добавить, что структура видеопамяти в "совмещенном" режиме SCREEN 1-4 полностью совпадает со структурой VRAM в режиме SCREEN4 для компьютеров серии MSX-1.