Р е г и с т р 9. ─────────────── ┌─────┬────────┬─────────────────────────────────────────────────────┐ │Номер│Значение│ │ │бита │ бита │ К о м м е н т а р и й │ ├─────┼────────┼─────────────────────────────────────────────────────┤ │ │ │ Бит "LN" │ │ 7 │ │ Отвечает за о б щ у ю высоту экрана (за доступную│ │ │ │ высоту отвечает ячейка &hF3B1 в рабочей области RAM)│ │ │ 1 │ На экране 212 графических или 26.5 текстовых строк │ │ │ 0 │ На экране 192 графических или 24 текстовых строк │ ├─────┼────────┼─────────────────────────────────────────────────────┤ │ 6 │ 0 │ Не используется │ ├─────┼────────┼───────────────────────────────────────┬─────────────┤ │ 5 │ 1 │ Поступает сигнал только │ │ │ │ │ от внешнего TV-источника │ Эти биты │ │ │ 0 │ Разрешено изображение от компьютера │ моделируют │ ├─────┼────────┼───────────────────────────────────────┤ оператор │ │ 4 │ 1 │ Происходит смешивание изображения от│ SET VIDEO n │ │ │ │ компьютера и от TV-источника │ │ │ │ 0 │ Смешивания сигналов не происходит │ │ ├─────┼────────┼───────────────────────────────────────┼─────────────┤ │ 3 │ 1 │ Происходит "дрожание" экрана │ │ │ │ 0 │ "Дрожания" не происходит │ Эти биты │ ├─────┼────────┼───────────────────────────────────────┤ моделируют │ │ 2 │ 1 │ Происходит поочередный показ страниц │ оператор │ │ │ │ на страницах с нечетными номерами │SCREEN ,,,,,n│ │ │ │ в режимах SCREEN 5 ÷ SCREEN 8 │ (5 запятых!)│ │ │ 0 │ Отображается одна и та же страница │ │ │ │ │ на четное/нечетное поле │ │ ├─────┼────────┼───────────────────────────────────────┴─────────────┤ │ 1 │ │ Выбор системы телевидения: │ │ │ 1 │ PAL (313 линий, американский стандарт) │ │ │ 0 │ NTSC (262 линии, японский стандарт) - │ │ │ │ - только для RGB-выхода │ ├─────┼────────┼─────────────────────────────────────────────────────┤ │ 0 │ 1 │ Установка на режим в в о д а │ │ │ 0 │ Установка на режим в ы в о д а │ └─────┴────────┴─────────────────────────────────────────────────────┘ П р и м е р 5. Установим высоту экрана равной 26.5 строкам. ───────────── 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 - м л а д ш и й бит. Старший┌───┬───┬───┬───┬───┬───┬───┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐Младший бит │A16│A15│A14│A13│A12│A11│A10│A9│A8│A7│A6│A5│A4│A3│A2│A1│A0│ бит └───┴───┴───┴───┴───┴───┴───┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┘ В регистрах базовых адресов хранятся старшие биты начальных адресов Та- блиц VRAM для текущего режима SCREEN. ┌───────────────────────────────────────────────────────┐ │ Эти регистры инициализируются псевдопеременной BASE │ . └───────────────────────────────────────────────────────┘ Отметим,что при использовании этих регистров рекомендуется маскировать н е н у ж н ы е в текущем режиме отображения биты. Регистр с номером 2 MSX-VDP содержит семь старших битов начального ад- реса Таблицы PNT: ┌─┬───┬───┬───┬───┬───┬───┬───┐ │0│A16│A15│A14│A13│A12│A11│A10│ └─┴───┴───┴───┴───┴───┴───┴───┘ П р и м е р 1. 10 SCREEN 1 ───────────── 20 A$=RIGHT$("0000000000000000"+BIN$(BASE(5*1+0)),16) 30 ?A$:B$=RIGHT$("00000000"+BIN$(VDP(2)),8):?B$ 'Читаем текущий адрес PNT run ┌──────┐ │000110│0000000000◀── Начальный адрес Таблицы PNT └──────┘ в SCREEN1 ┌──────┐ 00│000110│ ◀── Содержимое регистра с номером 2 Ok└──────┘ Регистры с номерами 10 и 3 содержат одиннадцать старших битов начально- го адреса Таблицы CT: Регистр 10 Регистр 3 ┌─┬─┬─┬─┬─┬───┬───┬───┐ ┌───┬───┬───┬───┬──┬──┬──┬──┐ │0│0│0│0│0│A16│A15│A14│ │A13│A12│A11│A10│A9│A8│A7│A6│ └─┴─┴─┴─┴─┴───┴───┴───┘ └───┴───┴───┴───┴──┴──┴──┴──┘ П р и м е р 2. 10 SCREEN 1 ───────────── 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 ┌──────────┐ │0010000000│000000 ◀── Начальный адрес Таблицы CT └──────────┘ в SCREEN1 ┌──────────┐ 000000│0010000000│◀── Содержимое регистров с номерами Ok └──────────┘ 10 и 3 Регистр с номером 4 содержит шесть старших битов начального адреса Таб- лицы PGT: ┌─┬─┬───┬───┬───┬───┬───┬───┐ │0│0│A16│A15│A14│A13│A12│A11│ └─┴─┴───┴───┴───┴───┴───┴───┘ П р и м е р 3. 10 SCREEN 0:WIDTH 80 ───────────── 20 A$=RIGHT$("0000000000000000"+BIN$(BASE(5*0+2)),16) 30 ?A$:B$=RIGHT$("00000000"+BIN$(VDP(4)),8):?B$ run ┌─────┐ │00010│00000000000◀── Начальный адрес Таблицы PGT └─────┘ в SCREEN0 ┌─────┐ 000│00010│ ◀── Содержимое регистра с номером 4 Ok └─────┘ Регистры с номерами 11 и 5 содержат десять старших битов начального ад- реса Таблицы SAT: Регистр 11 Регистр 5 ┌─┬─┬─┬─┬─┬─┬───┬───┐ ┌───┬───┬───┬───┬───┬──┬──┬──┐ │0│0│0│0│0│0│A16│А15│ │А14│A13│A12│A11│A10│A9│A8│А7│ └─┴─┴─┴─┴─┴─┴───┴───┘ └───┴───┴───┴───┴───┴──┴──┴──┘ П р и м е р 4. 10 SCREEN 1 ───────────── 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 ┌─────────┐ │000110110│0000000◀── Начальный адрес Таблицы SAT └─────────┘ в SCREEN1 ┌─────────┐ 0000000│000110110│◀── Содержимое регистров с номерами Ok └─────────┘ 11 и 5 ┌───────────────────────────────────────────────────────────────────────┐ │ З а м е ч а н и е. С Таблицей SAT связана Таблица SCT, адрес которой│ │ получается вычитанием 512 байт из начального адреса Таблицы SAT. │ └───────────────────────────────────────────────────────────────────────┘ Регистр с номером 6 содержит шесть старших битов начального адреса Таб- лицы SGT: ┌─┬─┬───┬───┬───┬───┬───┬───┐ │0│0│A16│A15│A14│A13│A12│A11│ └─┴─┴───┴───┴───┴───┴───┴───┘ П р и м е р 5. 10 SCREEN 1 ───────────── 20 A$=RIGHT$("0000000000000000"+BIN$(BASE(5*1+4)),16) 30 ?A$:B$=RIGHT$("00000000"+BIN$(VDP(6)),8):?B$ 'Читаем текущий адрес SGT run ┌─────┐ │00111│00000000000◀── Начальный адрес Таблицы SGT └─────┘ в SCREEN1 ┌─────┐ 000│00111│ ◀── Содержимое регистра с номером 6 Ok └─────┘ ┌────────────────────────────────────────────────────────────────────┐ │ Отметим, что при использовании этих регистров рекомендуется │ │ м а с к и р о в а т ь ненужные в текущем режиме отображения биты │ └────────────────────────────────────────────────────────────────────┘ XI.2.3. Р е г и с т р ы ц в е т о в - Вы знаете отличительные способности животного, называемого раком? - Да, конечно. Рак - это рыба к р а с н о г о ц в е т а, которая ходит боком. - Ну, что ж. Я вижу,что Вы кое-что з н а е т е о раке ... Студенческий фольклор α) Регистр с номером 7 видеопроцессора в режиме SCREEN 0 определяет цвет изображения и фона. Четыре старших бита этого регистра "хранят" цвет и з о б р а ж е н и я, а четыре младших ─ цвет ф о н а. Например, команда VDP(7)=&H4B в режиме SCREEN 0 эквивалентна команде COLOR 4,11 . ▲▲ Цвет изображения ──┘└── Цвет фона А команда VDP(7)=&H1F приводит к тому же результату, что и оператор COLOR 1,15 . Р е г и с т р с номером 7 (регистр цвета текста/фона) ┌────────────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ │ Номер бита │ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │ │ Имя бита │ TC3 │ TC2 │ TC1 │ TC0 │ BD3 │ BD2 │ BD1 │ BD0 │ └────────────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ TC3 - ТC0 определяет цвет текста в режимах SCREEN 0 и SCREEN 1; BD3 - BD0 определяет цвет фона во всех режимах отображения В других режимах SCREEN этот регистр "хранит" цвет б о р д ю р а. П р и м е р 1. 10 COLOR 1,15,4:SCREEN 2:Z=VDP(7) ───────────── 20 SCREEN 0:PRINT Z run 4 Ok ┌───────────────────────────────────────────────────────────────────┐ │ Содержимое седьмого регистра инициализируется оператором COLOR │ └───────────────────────────────────────────────────────────────────┘ β) В 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 (регистр цвета текста/фона) ┌────────────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ │ Номер бита │ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │ │ Имя бита │ TC3 │ TC2 │ TC1 │ TC0 │ BC3 │ BC2 │ BC1 │ BC0 │ └────────────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ биты TC3,TC2,TC1,TC0 определяют цвет части 1 шаблона; биты BC3,BC2,BC1,BC0 определяют цвет части 0 шаблона. Если в режиме SCREEN 1 установлен признак мерцания, то цвета из этого регистра и из регистра с номером 7 поочередно отбражаются. За частоту мигания "отвечает" регистр с номером т р и н а д ц а т ь, причем в его старшем полубайте хранится информация о частоте включения ми- гания, а в младшем - информация о частоте выключения мигания. Р е г и с т р с номером 13 (регистр периода мерцания) ┌────────────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ │ Номер бита │ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │ │ Имя бита │ ON3 │ ON2 │ ON1 │ ON0 │ OF3 │ OF2 │ OF1 │ OF0 │ └────────────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ биты ON3,ON2,ON1,ON0 определяют период отборажения для четной страницы; биты ОF3,OF2,OF1,OF0 определяют период отображения для нечетной страницы. В режимах растровой графики (SCREEN 5÷SCREEN 8) попеременно сменяются две страницы памяти. Данные помещаются в этот регистр для установления отображаемой страницы как нечетной страницы для начала мерцания. Этот ре- гистр используется также в режиме SCREEN 1. Приведем табличку... ┌──────────────────────┬────────────┬──────────────────────┬────────────┐ │ Содержимое полубайта │ Время (мс) │ Содержимое полубайта │ Время (мс) │ │ регистра 13 │ │ регистра 13 │ │ ├──────────────────────┼────────────┼──────────────────────┼────────────┤ │ 0 0 0 0 │ 0 │ 1 0 0 0 │ 1335,1 │ │ 0 0 0 1 │ 166,9 │ 1 0 0 1 │ 1501,9 │ │ 0 0 1 0 │ 333,8 │ 1 0 1 0 │ 1668,8 │ │ 0 0 1 1 │ 500,6 │ 1 0 1 1 │ 1835,7 │ │ 0 1 0 0 │ 667,5 │ 1 1 0 0 │ 2002,6 │ │ 0 1 0 1 │ 834,4 │ 1 1 0 1 │ 2169,5 │ │ 0 1 1 0 │ 1001,3 │ 1 1 1 0 │ 2336,3 │ │ 0 1 1 1 │ 1168,2 │ 1 1 1 1 │ 2503,2 │ └──────────────────────┴────────────┴──────────────────────┴────────────┘ А теперь взгляните на следующий пример. П р и м е р 2. ───────────── NEW Ok 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 ┌─────────────┐ ┌────────────┐ │ Страница 0 │─┐ │ │─┐ ├─────────────┤ │ │ Страница 0 │ │ │ Страница 1 │─┘ │ │ │ ├─────────────┤ ├────────────┤ │ │ Страница 2 │─┐ │ │ │ ├─────────────┤ │ │ Страница 1 │─┘ │ Страница 3 │─┘ │ │ └─────────────┘ └────────────┘ Период отображения,находящийся в промежутке между 166 мсек и 2053 мсек, может быть определен для каждой страницы. Для этого необходимо: 1) задать базовый адрес Таблицы имен шаблонов н е ч е т н о й стра- ницы (регистр с номером 2); 2) задать время включения (интервал, в течение которого отображается ч е т н а я страница) и время выключения (интервал, в течение которого отображается н е ч е т н а я страница) в регистре с номером 13. Р е г и с т р с номером 13 (регистр периода мерцания) ┌────────────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ │ Номер бита │ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │ │ Имя бита │ ON3 │ ON2 │ ON1 │ ON0 │ OF3 │ OF2 │ OF1 │ OF0 │ └────────────┴──▲──┴─────┴─────┴──▲──┴──▲──┴─────┴─────┴──▲──┘ └─────────────────┘ └─────────────────┘ Время включения Время выключения 3) После этого начнется процесс мигания. П р и м е р 3. ────────────── 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. ───────────── 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. ───────────── 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 ' │└─────── Отображаем четную страницу в первом поле 33 ' └──────── и нечетную страницу во втором поле 34 'Линии накладываются друг на друга на 1/2 (!) точки 40 A$=INPUT$(1) ' Задержка 41 VDP(9+1)=0 ' Выключим мигание δ) Регистр с номером 20 называется регистром цветовой вспышки 1. Регистр с номером 21 называется регистром цветовой вспышки 2. Регистр с номером 22 называется регистром цветовой вспышки 3. Данные регистры инициализируются при включении компьютера следующим об- разом: ┌────────────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ │ Номер бита │ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │ ├────────────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ │ Регистр 20 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ 0 │ ├────────────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ │ Регистр 21 │ 0 │ 0 │ 1 │ 1 │ 1 │ 0 │ 1 │ 1 │ ├────────────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ │ Регистр 22 │ 0 │ 0 │ 0 │ 1 │ 0 │ 1 │ 0 │ 1 │ └────────────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ Если все величины в трех вышеуказанных регистрах равны нулю, то сигнал "цветовой вспышки" на NTSC-видеовыходе будет отсутствовать. Если же выше- указанные величины затем возвращаются в исходное состояние, то будет полу- чен обычный сигнал "цветовой вспышки" на NTSC-видеовыходе.