Видеопроцессор (VDP), используемый в большинстве компьютеров MSX 2 и MSX 1.5.
Разрешения прогрессивной развертки:
Размер экрана | Число цветов | Объём видеопамяти на страницу (кбайт) |
---|---|---|
512×212 | 4 из 512 | 32 |
512×212 | 16 из 512 | 64 |
256×212 | 16 из 512 | 32 |
256×212 | 256 | 64 |
Разрешение чересстрочной развертки:
Размер экрана | Число цветов | Объём видеопамяти на страницу (кбайт) |
---|---|---|
512×424 | 4 из 512 | 64 |
512×424 | 16 из 512 | 128 |
256×424 | 16 из 512 | 64 |
256×424 | 256 | 128 |
Аппаратно–реализованные функции:
На основе V9938 MSX-VIDEO Technical Data Book Programmer’s Guide (переписано и отредактировано Евгением Бричковым):
Выражаем огромную благодарность Dolphin_Soft за помощь в переводе, исправлении и дополнении этих материалов.
Атрибут | Свойство объекта, которое определяет как объект выглядит на экране. Атрибутом может быть цвет, положение объекта или значение определённого цвета пикселя. |
Задний план | Объект или свойство, которое воспринимается как фоновое по отношению к другому свойству или объекту. Например, для символа, отображаемого на экране, говорят, что пиксели его изображения имеют цвет переднего плана, а другие пиксели — цвет фона. В случае спрайтов можно сказать, что они появляются на переднем плане по отношению к шаблонам шрифтов, поскольку спрайты перекрывают изображения шрифта. |
Столкновение | Говорят, что спрайты сталкиваются, когда их точки с цветовым кодом 1 (проще говоря — точки, обозначенные двоичной единицей в их таблице генератора спрайтов) перекрываются. В некоторых случаях такое поведение может быть изменено в пользу или смешивания цветов спрайтов для получения псевдо-цветных спрайтов. |
Цвет | Свойство пикселя на экране. Цвет пикселя может поступать из различных источников: из глобального регистра цветов, из таблицы цветов шаблона или из таблицы цветов спрайта. Цвета также могут быть закодированы в регистрах палитры путем настройки красного, зеленого и синего компонентов — в этом случае, если таблица цветов шаблонов и спрайтов остается неизменной, фактические цвета, связанные с ними, могут отличаться |
Команда | Функция, выполняемая средствами VDP совместно с ЦП, или независимо от ЦП и параллельно с ним для достижения большей производительности. |
Расширение VRAM | Часть ОЗУ может быть использована для хранения данных регистров ввода/вывода и не является необходимой для правильной работы VDP. Максимальный размер ОЗУ расширения — 64 кбайт. Из–за особого назначения этой оперативной памяти она редко используется в программах. |
Макет (layout) | Карта шаблонов или спрайтов, которые определяют, где отображать конкретный объект или какой объект должен отображаться в определенной позиции. В случае шаблонов (шрифта) Таблица знакогенератора определяет внешний вид шрифта, но для отображения этих шаблонов в определенном месте программист должен поместить его номер в Таблицу макетов шаблонов (Pattern Layout Table) в соответствующем месте. |
Знакогенератор | Это генератор символов. Специализированное аппаратное устройство, предназначенное для преобразования кода символа в его графическое представление, высвечивающееся на экране монитора в соответствии таблице шаблонов. В V9938 также используется для отображения тайлов. |
Таблица знакогенератора (Pattern generator Table) | Место в VRAM, где хранятся шаблоны (шрифт). Каждый шаблон имеет номер от PN0 до PN255. Адрес таблицы знакогенератора хранится в регистре R4. |
Символ | Элемент текстового экрана, имеющий уникальный код (0…255), связанный с графическим представлением, заданном в таблице знакогенератора в соответствии его коду |
Объект | Шаблон шрифта или спрайт. |
Шаблон (pattern) | Набор свойств объекта, определяющий его внешний вид. Объектом может быть шаблон шрифта или шаблон спрайта. |
Порт | Это схемотехническое решение с определенным системным адресом по которому ЦП обменивается данными с VDP. VDP имеет четыре порта, порт 0 — это порт чтения/записи данных, порт 1 — порт настройки регистра записи и доступа к статусным регистрам, порт 2 — регистры палитры, а порт 3 — порт косвенной адресации регистров управления VDP. |
Регистр | Это область памяти в VDP для управления им. К регистрам можно получить прямой или косвенный доступ. Есть регистры управления, цвета, состояния. |
RGB | Эта аббревиатура образована названиями базовых цветов красный, зелёный и синий. Этот термин можно использовать для описания аппаратного решения, которое использует три аналоговых сигнала; или описать цветовой состав для пикселя. Обратите внимание, что при кодировании RGB в регистрах палитры VDP используются 3 бита для каждого основного цвета, а при кодировании RGB в режиме Graphic7 красный и зеленый занимают по 3 бита, а синий — только 2 бита. |
Тайл (tile) | То же, что и шаблон шрифта+цветовые атрибуты |
VRAM | Видеопамять с произвольным доступом — это набор ячеек памяти, используемых VDP для хранения информации об изображении, отображаемом на экране. Доступ к VRAM осуществляется для отображения изображения, а также для его изменения. Изображение отображается постоянно, когда включен VDP. V9938 может иметь от 16 до 128 Кбайт видеопамяти и в зависимости от организации и размера памяти может не работать должным образом в определенных режимах. См. Описание бита VR регистра R8 для получения дополнительной информации. |
V9938 имеет 4 порта: порт 0 – порт 3; номер порта выбирается адресными строками VDP A0 и A1. В таблице ниже также показано распределение адресов портов для MSX–совместимого компьютера.
№ порта | A1 | A0 | Операция | Режим | Основной порт MSX |
---|---|---|---|---|---|
0 | 0 | 0 | Данные VRAM | запись и чтение | 0×98 |
1 | 0 | 1 | Регистр состояния | чтение | 0×99 |
Адрес VRAM | запись | ||||
Регистр управления | |||||
2 | 1 | 0 | Регистры палитры | 0x9A | |
3 | 1 | 1 | Регистр косвенной адресации | 0x9B |
Есть два способа передачи данных в регистры управления (с R0 по R46).
Последовательно выведите данные и номер регистра в порт 1. Порядок чтения и записи при работе с портами VDP очень важен, поэтому вы должны иметь в виду, что этот порядок может быть потенциально прерван процедурой прерывания ЦП, которая может писать или читать данные портов VDP и таким образом, нарушать правильную последовательность. Поэтому используйте режим DI (запретить прерывания) в начале и EI (разрешить прерывания) в конце цикла работы с VDP (подробнее об этом здесь).
Байт данных записывается первым (биты D0–D7), а номер регистра записывается после байта данных (биты R0–R5). Если между этими двумя операциями произойдет прерывание, связанное с операциями VDP, это может привести к непредсказуемым результатам.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит | |
---|---|---|---|---|---|---|---|---|---|---|
Порт 1 | первый байт | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | данные |
второй байт | 1 | 0 | R5 | R4 | R3 | R2 | R1 | R0 | № регистра |
Установите номер регистра в регистр R17, используя прямую адресацию, а затем отправьте данные в порт 3. Старший бит значения, записанного в регистр R17 (AII), управляет автоинкрементом номера регистра. Если этот бит установлен, после каждой записи данных, номер регистра управления инкрементируется; в противном случае, значение номера регистра управления, указанного в регистре R17 остаётся неизменным. Режим автоинкремента полезен для последовательного заполнения регистров управления VDP.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
R17 | AII | 0 | R5 | R4 | R3 | R2 | R1 | R0 | № регистра | ||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||
Порт 3 | первый байт | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | данные | |||||||||||||||||||||||||||
второй байт | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |||||||||||||||||||||||||||||
… | |||||||||||||||||||||||||||||||||||||
nый байт | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
Примечание: данные в R17 не могут быть изменены косвенной адресацией.
Чтобы установить данные в регистры палитры (от P1 до P15), вы должны сначала установить номер регистра палитры в регистре R16 (указатель адреса цветовой палитры), а затем записать два байта данных (в определенном порядке) в порт 2. Каждый цвет состоит из 3—х наборов по 3 бита для красного, зелёного и синего составляющих цвета (значение 0…7).
Примечание: После записи двух байт данных в порт 2 номер регистра палитры (указатель) в R16 автоматически увеличивается.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит | |
---|---|---|---|---|---|---|---|---|---|---|
R16 | 0 | 0 | 0 | 0 | C3 | C2 | C1 | C0 | № палитры | |
Порт 2 | первый байт | 0 | R2 | R1 | R0 | 0 | B2 | B2 | B0 | данные 1 |
Красный | Cиний | |||||||||
второй байт | 0 | 0 | 0 | 0 | 0 | G2 | G1 | G0 | данные 2 | |
Зелёный |
Чтобы прочитать регистры состояния (от S0 до S9), вы должны сначала установить номер регистра в R15 (указатель регистра состояния), а затем прочитать данные из порта №1.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R15 (запись) | 0 | 0 | 0 | 0 | S3 | S2 | S1 | S0 | № регистра состояния |
Порт 1 (чтение) | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | чтение данных |
К VDP можно подключить видеопамять размером 128 Кбайт плюс расширение VRAM объемом 64 Кбайта. карта памяти показана ниже.
Адрес | ||
Видео ОЗУ (используется для отображения) 128 Кбайт | 0x1FFFF ↑ ↑ ↑ ↑ 0x10000 | |
---|---|---|
0x0FFFF ↑ ↑ ↑ ↑ 0x00000 | Расширение VRAM (Дополнительные 64кб, подключаемые к VDP по линии CASX, без возможности отображения на экране) |
Для доступа к памяти используйте следующий порядок действий:
1. Выберите нужную область памяти (видео память (VRAM) или расширение VRAM).
2. Установите счетчик адреса (биты A16…A14).
3. Установите счетчик адреса (биты A7…A0).
4. Установите счетчик адреса (биты A13…A8) и укажите, какой будет следующая команда чтение или запись данных.
5. Выполните чтение/запись данных в память.
Шаг 1: Выбор нужной области памяти (видео память (VRAM) или расширение VRAM)
Программы обычно пользуются видеопамятью, поэтому повторный выбор области памяти требуется редко. Это бывает нужно, если вашей программе потребуется доступ к расширению ОЗУ. После выполнения необходимых операций с расширением ОЗУ убедитесь, что вы снова выбрали видеопамять (VRAM).
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит | |||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
R45 (запись) | 0 | MXC | MXD | MXS | DIY | DIX | EQ | MAJ | Регистр аргументов | |||||||||||||||||||||||||||
|
Шаг 2: Установка счетчика адреса (биты A16…A14)
VDP может логически адресовать 128 Кбайт в диапазоне адресов 0x00000–0x1FFFF через 17 бит адреса, задаваемые через A16…A0. На этом шаге мы устанавливаем биты A16…A14, записывая их в R14 (регистр базового адреса доступа к VRAM).
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R14 | 0 | 0 | 0 | 0 | 0 | A16 | A15 | A14 | Базовый регистр |
Шаг 3: Установка счетчика адреса (биты A7…A0)
Установите младшие восемь бит A7…A0 счетчика адресов, записав данные в порт 1.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
Порт 1 | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 | A7…A0 |
Шаг 4: Установка счетчика адресов (биты A13…A8) и режима работы порта 1
Установите оставшиеся шесть бит A13…A8 счетчика адресов, записав данные в порт. Также следует указать, какая операция с памятью будет выполняться — чтение или запись. Это очень важно, так как если вы укажете, что следующей операцией будет «чтение», VDP предварительно выберет значение из памяти (заданное ранее заданным адресом) и будет готов к чтению данных от ЦП. Если вы этого не сделаете и не выдадите команду чтения, VDP может не получить достаточно времени для чтения данных из VRAM, а ЦП может получить недопустимые данные.
Если вы укажете, что следующей командой будет «запись», тогда VDP не будет выполнять предварительную выборку я вместо этого будет ожидает запись.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит | |||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Порт 1 | 0 | W | A13 | A12 | A11 | A10 | A9 | A8 | A13…A8 | |||||||||||||||||||||||||||
|
Шаг 5: Чтение или запись данных в память
Важно знать, что после каждой операции чтения или записи данных порта 0 счетчик адресов увеличивается. Это очень полезно, когда вам нужно последовательно читать или записывать в память. Однако вы должны следить за временем, чтобы у VDP было достаточно времени для записи кэшированных данных или чтения запрошенных данных. Пожалуйста, обратите внимание на временные задержки.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
Порт 0 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Байт данных |
Эти регистры только для чтения и используются для получения данных о текущих статусах VDP.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
S0 | F | 5S | C | 5SN | Регистр состояния 0 |
7 | F | Статус прерывания вертикальной развертки При чтении S0 он сбрасывается. |
6 | SS | Статус переполнения количества спрайтов в строке 5 (или 9 в режиме SM2) спрайтов находятся на одной горизонтальной линии |
5 | C | Признак столкновения Столкнулись два спрайта |
4…0 | 5SN | Номер спрайта, вызвавшего переполнение в строке |
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
S1 | FL | LPS | ID # | FH | Регистр состояния 1 |
7 | FL | Световое перо. Индикатор того, что световое перо обнаруживает свет. Если установлен бит IE2, возникает прерывание. Сброс при чтении S1. Кнопка мыши 2. Признак, нажатия на 2–ю кнопку мыши. Сброс при чтении S1 не происходит. |
6 | LPS | Кнопка светового пера. Признак, нажатия на кнопку светового пера Кнопка мыши 1. Признак, нажатия на 1–ю кнопку мыши Сброс при чтении S1 не происходит. |
5…1 | ID # | Номер модели видеоконтроллера 1 — 9938 2 — 9958 |
0 | FH | Прерывание строчной развертки. Происходит при достижении лучом номера строки, указанной в R19. Состояние сбрасывается при чтении S1 Этот механизм называется — Программируемое строчное прерывание. |
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
S2 | TR | VR | HR | BD | 1 | 1 | EO | CE | Регистр состояния 2 |
7 | TR | Признак готовности к передаче данных. Указание для ЦП от готовности к следующей передаче. 0 — VDP не готов 1 — VDP готов |
6 | VR | Признак начала вертикальной перетрассировки луча. Устанавливается при сканировании VBLANK области экрана, т.е. при вертикальной перетрассировке луча, пока прорисовывается нижняя и верхняя границы экрана. |
5 | HR | Признак начала горизонтальной перетрассировки луча. Устанавливается при сканировании HBLANK области экрана, т.е. когда прорисовываются правая и левая границы экрана. |
4 | BD | Статус обнаружения цвета. При выполнении команды поиска этот бит устанавливается в 1, если был обнаружен указанный цвет. |
1 | EO | Статус отображения поля. 0 — чётное поле 1 — нечётное поле |
0 | CE | Признак загруженности. 0 — VDP в режиме ожидания команд 1 — VDP выполняет текущую команду |
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
S3 | X7 | X6 | X5 | X4 | X3 | X2 | X1 | X0 | Младшие разряды регистра колонок |
S4 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | X8 | Старшие разряды регистра колонок |
S5 | Y7 | Y6 | Y5 | Y4 | Y3 | Y2 | Y1 | Y0 | Младшие разряды регистра строк |
S6 | 1 | 1 | 1 | 1 | 1 | 1 | Y9 | Y8 | Старшие разряды регистра строк |
Вышеупомянутые регистры S3…S6 содержат информацию о координатах положения столкновения спрайтов, положения светового пера или относительного движения мыши.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
S7 | C7 | C6 | C5 | C4 | C3 | C2 | C1 | C0 | Статус цвета |
Регистр используется при выполнении команд «POINT» и «VRAM to CPU» и содержит данные VRAM.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
S8 | BX7 | BX6 | BX5 | BX4 | BX3 | BX2 | BX1 | BX0 | Младшие разряды закодированного цвета по X |
S9 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | BX8 | Старшие разряды закодированного цвета по X |
Когда команда поиска выполняется и кодированный цвет был обнаружен (см. S2), этот регистр содержит его координату X.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R0 | 0 | DG | IE2 | IE1 | M5 | M4 | M3 | 0 |
DG | Режим графического планшета: устанавливает шину цвета в режим ввода или вывода |
IE2 | Разрешить прерывания от светового пера |
IE1 | Разрешить прерывание начала горизонтальной перетрассировки луча |
M5 | Биты управления режимом экрана (см. главу "Режимы экрана") |
M4 | |
M3 |
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R1 | 0 | BL | IE0 | M1 | M2 | 0 | SI | MAG |
BL | Управление отображением: 0 — изображение выключено 1 — изображение включено |
IE0 | Разрешить прерывание начала вертикальной перетрассировки луча |
M1 | Биты управления режимом экрана (см. главу "Режимы экрана") |
M2 | |
SI | Размер спрайтов: 0 — 8×8 1 — 16×16 |
MAG | Увеличение спрайта: 1 — спрайты увеличены (в два раза) |
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R8 | MS | LP | TP | CB | VR | 0 | SPD | BW |
MS | Мышь: 0 — устанавливает шину цвета в режим вывода и отключает мышь 1 — устанавливает шину цвета в режим ввода и включает мышь |
LP | Световое перо: 0 — выключить 1 — включить |
TP | Переключает режим палитры для цвета с кодом 0 |
CB | Шина цвета: 0 — режим вывода 1 — режим ввода |
VR | Выбор типа и организации VRAM: 0 — 16Кб×1бит или 16Кб×4бит 1 — 64Кб×1бит или 64Кб×4бит |
SPD | Отключение спрайтов: 1 — спрайты не отображаются и связанные c ними функции обработки спрайтовых таблиц не выполняются |
BW | Черно–белый режим: 0 — отключён 1 — вывод изображения в 32 оттенках серого |
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R9 | LN | 0 | S1 | S0 | IL | E0 | *NT | DC |
LN | Строка (количество точек по вертикали): 0 — 192 1 — 212 |
S1 | Режим совмещённого вывода: 00 — Передний план (по умолчанию) 01 — Digitizer или Superimposition 10 — Внешний видеосигнал |
S0 | |
IL | Чересстрочная развёртка: 0 — выключена 1 — включена |
EO | Режим чередования видеостраниц чётная/нечётная: 0 — отображение одной видеостраницы 1 — чередование двух видеостраниц |
*NT | Режим выхода RGB: 0 — NTSC (262 линий, 60 Гц) 1 — PAL (313 линий, 50 Гц) |
DC | *DLCLK (источник тактирования VDP): 0 — внешний 1 — внутренний |
При отображении информации на экране VDP использует цвет, спрайты и другую информацию из видеопамяти. Важно установить правильные начальные адреса таких структур в VRAM путем записи в указанные регистры базовых адресов таблиц.
Примечание: Важно, чтобы неиспользуемые биты были установлены в 0.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R2 (ТNT) | 0 | A16 | A15 | A14 | A13 | A12 | A11 | A10 | Таблица имён |
R3 (ТCT) | A13 | A12 | A11 | A10 | A9 | A8 | A7 | A6 | Таблица цветов тайлов (тайловая окраска) |
R10 (ТCT) | 0 | 0 | 0 | 0 | 0 | A16 | A15 | A14 | Старшие разряды TCT |
R4 (TPT) | 0 | 0 | A16 | A15 | A14 | A13 | A12 | A11 | Таблица знакогенератора |
R5 (SAT) | A14 | A13 | A12 | A12 | A10 | A9 | A8 | A7 | Таблица атрибутов спрайтов ∗ |
R11 (SAT) | 0 | 0 | 0 | 0 | 0 | 0 | A16 | A15 | Старшие разряды SAT |
R6 (SPT) | 0 | 0 | A16 | A15 | A14 | A13 | A12 | A11 | Таблица шаблонов спрайтов |
∗ В режиме SM2 спрайтового движка, SAT так же указывает на SCT — Таблицу цветов спрайтов (спрайтовая окраска). Адрес SCT равен полному адресу SAT, минус 512 байт.
Регистры цвета используются для управления цветом текста и фона экрана, миганием и другими функциями.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R7 | TC3 | TC2 | TC1 | TC0 | BD3 | BD2 | BD1 | BD0 | Цвет текста и полей экрана |
Цвет текста в режимах Text1 и Text2 | Цвет бордюра/фона экрана |
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R12 | T23 | T22 | T21 | T20 | BD3 | BD2 | BD1 | BD0 | Цвет текста и фона в области мигания |
Цвет текста в области мигания | Цвет фона области мигания |
В режиме Text2, если атрибуты для мигания установлены, цвет, установленный в этом регистре R12 и в регистре R7, то текст отображается попеременно (мигает).
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R13 | ON3 | ON2 | ON1 | ON0 | OF3 | OF2 | OF1 | OF0 | Регистр периода мигания |
Время отображения чётной страницы | Время отображения нечётной страницы |
В режиме Text2 и в режимах от Graphic4 до Graphic7 две страницы могут попеременно отображаться (мигать). Для управления используете регистр R13.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Регистр синхронизации цвета 1 |
R21 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | Регистр синхронизации цвета 2 |
R22 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | Регистр синхронизации цвета 3 |
Вышеуказанные значения регистров цветовой синхронизации устанавливаются при включении питания. Если все биты во всех трех регистрах установлены в 0, то цветной сигнал на выходе композитного видео будет отсутствовать. Если значения возвращаются к вышеуказанным значениям, VDP начнет генерировать нормальный сигнал цветовой синхронизации.
Регистры дисплея используются для управления положением изображения на экране.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R18 | V3 | V2 | V1 | V0 | H3 | H2 | H1 | H0 | Регистр настройки дисплея |
Через R18 устанавливается горизонтальное и вертикальное смещения изображения на экране. Смотри таблицу ниже:
Значение | |||||||
7 | … | 1 | 0 | 15 | … | 8 | |
Горизонталь | Лево | … | … | Центр | … | … | Право |
Вертикаль | Верх | … | … | … | … | Низ |
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R23 | DO7 | DO6 | DO5 | DO4 | DO3 | DO2 | DO1 | DO0 | Регистр управления вертикальной прокруткой |
R23 устанавливает значение первой строки для отображения на экране. Размер виртуального экрана составляет 256 строк, размер видимого вертикального экрана может составлять 192 или 212 в зависимости от бита LN регистра R9. Установка в R23 значение, отличное от 0, может отображать не инициализированные части памяти, которые могут выглядеть как мусор. Отображение виртуального экрана выполняется циклически, это означает, что при увеличении значения в R23 верх виртуального экрана появляется внизу видимого экрана.
Примечание: В текстовых режимах Text1 и Text2, вертикальная прокрутка вместо видеобуфера прокручивает шаблоны внутри знакомест.
Пример использования регистра прокрутки:
При разрешённых прерываниях вертикальной развертки, когда луч достигнет строки с номером, записанном в R19, произойдет вызов обработчика прерывания.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R19 | IL7 | IL6 | IL5 | IL4 | IL3 | IL2 | IL1 | IL0 | Регистр линии развёртки |
VDP создаёт прерывание, когда начинает отображать соответствующую строку развертки, если бит 4 (IE1) регистра R0 установлен в 1. Запишите значение в этот регистр R19, и когда VDP начнёт отображать указанную строку, он установит бит 0 (FH) регистра состояния S1 в 1.
Регистры доступа это регистры, которые используются для доступа к другим регистрам VDP или VRAM. Это регистры R14, R15, R16 и R17.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R14 | 0 | 0 | 0 | 0 | 0 | A16 | A15 | A14 | Базовый регистр доступа к VRAM |
R14 содержит три старших бита адреса доступа к VRAM. Во всех режимах, кроме Graphic1, Graphic2, MultiColor и Text1, если из–за автоинкримента адреса в битах A13…A0, есть флаг переноса из бита адреса A13, значение в этом регистре R14 автоматически инкрементируется.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R15 | 0 | 0 | 0 | 0 | S3 | S2 | S1 | S0 | Селектор регистра состояния |
R15 указывает на соответствующий регистр состояния (S0…S9).
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R16 | 0 | 0 | 0 | 0 | C3 | C2 | C1 | C0 | Селектор выбора номера цвета для изменения палитры |
R16 указывает на соответствующий регистр палитры цветов (P0…P15), к которому необходимо получить доступ.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R17 | AII | 0 | RS5 | RS4 | RS3 | RS2 | RS1 | RS0 | Селектор регистра управления |
R17 это регистр, используемый для косвенного доступа к другим регистрам VDP. Он также имеет флаг автоинкремента (AII), который используется для автоинкремента номера регистра при обращении.
Такой механизм очень удобен для автоматического последовательного заполнения регистров данными. Например при использовании функций (см. ниже).
Регистры аргументов функции используются при вызове функции VDP. Подробности использования этих регистров будут рассмотрены ниже.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R32 | SX7 | SX6 | SX5 | SX4 | SX3 | SX2 | SX1 | SX0 | Младшие разряды исходного X |
R33 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | SX8 | Старшие разряды исходного X |
R34 | SY7 | SY6 | SY5 | SY4 | SY3 | SY2 | SY1 | SY0 | Младшие разряды исходного Y |
R35 | 0 | 0 | 0 | 0 | 0 | 0 | SY9 | SY8 | Старшие разряды исходного Y |
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R36 | DX7 | DX6 | DX5 | DX4 | DX3 | DX2 | DX1 | DX0 | Младшие разряды целевого X |
R37 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | DX8 | Старшие разряды целевого X |
R38 | DY7 | DY6 | DY5 | DY4 | DY3 | DY2 | DY1 | DY0 | Младшие разряды целевого Y |
R39 | 0 | 0 | 0 | 0 | 0 | 0 | DY9 | DY8 | Старшие разряды целевого Y |
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R40 | NX7 | NX6 | NX5 | NX4 | NX3 | NX2 | NX1 | NX0 | Младшие разряды числа точек X |
R41 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NX8 | Старшие разряды числа точек X |
R42 | NY7 | NY6 | NY5 | NY4 | NY3 | NY2 | NY1 | NY0 | Младшие разряды числа точек Y |
R43 | 0 | 0 | 0 | 0 | 0 | 0 | NY9 | NY8 | Старшие разряды числа точек Y |
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R44 | CH3 | CH2 | CH1 | CH0 | CL3 | CL2 | CL1 | CL0 | Регистр цвета |
R45 | 0 | MXC | MXD | MXS | DIY | DIX | EQ | MAJ | Регистр расширенных свойств вызываемой функции |
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R46 | CM3 | CM2 | CM1 | CM0 | LO3 | LO2 | LO1 | LO0 | Регистр вызова функции |
При обращении к этому регистру, происходит запуск указанной в нем функции с заданными аргументами в регистрах 32…45 или остановки выполнения текущей функции.
Характеристики | |
---|---|
Размер шаблона с точках (Ш×В) | 6×8 |
Число шаблонов | 256 |
Размер экрана, в шаблонах (Ш×В) | Значение бита LN регистра R9 определяет размер: 0 — 40×24 1 — 40×26.5 |
Цвета шаблона | Два цвета из 512 (на экран) |
Размер VRAM на экран | 4 Кбайта |
Управление | |
---|---|
Адрес шаблонов шрифта | Таблица знакогенератора R4 |
Адрес макета экрана | Таблица имён R2 |
Цвет текста (ненулевые биты шаблона = 1) | Четыре старшие бита R7 |
Цвета фона (нулевые биты шаблона = 0) | Четыре младшие бита R7 |
Значения по умолчанию в MSX BASIC | |
---|---|
Номер экрана | 0 |
Ширина | 1…40 |
Таблица знакогенератора | 0x00800…0x00FFF |
Макет экранной страницы | 0x00000…0x003BF |
Примечание: При установке в режиме Text1 размера экрана 26.5 строк таблица макетов шаблонов (Pattern Layout Table) после адреса 0x003FF переходит снова к адресу 0, поэтому в нижней части экрана будет отображаться небольшой кусок верхней части экрана.
VDP(10)=130
Адрес таблицы знакогенератора задается регистром R4.
Шрифт, отображаемый на экране для каждого шаблона таблицы знакогенератора, состоит из 8 байт, при этом отображается 6 старших бит, а 2 младших бита не отображаются.
Байты шаблонов шрифта идут в таблице последовательно по 8 на символ. Таким образом, адрес нужного символа вычисляется как:
ADR=TPT_Addr+C*8
(адрес таблицы знакогенератора+код символа*8)
Пример таблицы знакогенератора приведен ниже:
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
Адрес | Описание | ||||||||
0 | ██ | ╳ | ╳ | Шаблон 0 (PN0) | |||||
1 | ██ | ██ | ╳ | ╳ | |||||
2 | ██ | ██ | ╳ | ╳ | |||||
3 | ██ | ██ | ╳ | ╳ | |||||
4 | ██ | ██ | ██ | ██ | ██ | ╳ | ╳ | ||
5 | ██ | ██ | ╳ | ╳ | |||||
6 | ██ | ██ | ╳ | ╳ | |||||
7 | ╳ | ╳ | |||||||
8 | ██ | ██ | ██ | ██ | ╳ | ╳ | Шаблон 1 (PN1) | ||
9 | ██ | ██ | ╳ | ╳ | |||||
10 | ██ | ██ | ╳ | ╳ | |||||
11 | ██ | ██ | ██ | ██ | ╳ | ╳ | |||
12 | ██ | ██ | ╳ | ╳ | |||||
13 | ██ | ██ | ╳ | ╳ | |||||
14 | ██ | ██ | ██ | ██ | ╳ | ╳ | |||
15 | ╳ | ╳ | |||||||
… | … | … | |||||||
2040 | ██ | ██ | ██ | ╳ | ╳ | Шаблон 255 (PN255) | |||
2041 | ██ | ██ | ██ | ╳ | ╳ | ||||
2042 | ██ | ██ | ██ | ╳ | ╳ | ||||
2043 | ██ | ██ | ██ | ╳ | ╳ | ||||
2044 | ██ | ██ | ██ | ╳ | ╳ | ||||
2045 | ██ | ██ | ██ | ╳ | ╳ | ||||
2046 | ██ | ██ | ██ | ╳ | ╳ | ||||
2047 | ██ | ██ | ██ | ╳ | ╳ |
Начальный адрес макета экранной страницы хранится в регистре R2.
Макет экранной страницы представляет собой текстовую страницу 40×24 (или 40×27 если бит LN регистра R9 установлен), которая является картой кодов символов, которые VDP во время отображения, аппаратно подставляет из таблицы знакогенератора.
Каждое место на экране содержит код (номер) шаблона из таблицы знакогенератора, отображаемого в соответствующем месте.
Адрес для изменения или считывания кода в нужной позиции макета экранной страницы, получается простым вычислением:
Addr=TNT_Addr+Y*40+X
Схема распределения относительных адресов в макете экранной страницы приведена ниже:
Колонки (X) | |||||||
---|---|---|---|---|---|---|---|
Строки (Y) | 0 | 1 | 2 | 3 | … | … | 39 |
0 | 0 | 1 | 2 | 3 | … | … | 39 |
1 | 40 | 41 | 42 | 43 | … | … | 79 |
… | … | … | … | … | … | … | … |
22 | 880 | 881 | 882 | 883 | … | … | 919 |
23 | 920 | 921 | 922 | 923 | … | … | 959 |
Настройки цвета находятся в регистре R7. Биты TC3…TC0 определяют цвет ненулевых пикселей символа, заданных в таблице генератора шаблонов, биты BD3…BD0 определяют цвет прозрачных (или фоновых) пикселей.
Примечание: Цвет бордюров экрана в режиме Text1, всегда совпадает с цветом фона.
Каждая страница содержит своё определение шаблонов символов, и свой макет экрана:
0x00000 0x003BF | Макет экранной страницы 0 (40*24=960 байт) (LN: 40*27=1080 байт) |
|
||||||||||||||||||||||||||||
… | … | … | ||||||||||||||||||||||||||||
0x00800 0x00FFF | Таблица знакогенератора 0 (256*8=2048 байт) |
|
||||||||||||||||||||||||||||
0x01000 0x013BF | Макет экранной страницы 1 (40*24=960 байт) (LN: смотри примечание) |
|
||||||||||||||||||||||||||||
… | … | … | ||||||||||||||||||||||||||||
0x01800 0x01FFF | Таблица знакогенератора 1 (256*8=2048 байт) |
|
||||||||||||||||||||||||||||
… | … | … | ||||||||||||||||||||||||||||
0x1FFFF | Таким же образом можно выделить максимум 32 страницы, если к VDP подключено 128 Кбайт. |
Характеристики | |
---|---|
Размер шаблона с точках (Ш×В) | 6×8 |
Число шаблонов | 256 |
Размер экрана, в шаблонах (Ш×В) | Значение бита LN регистра R9 определяет размер: 0 — 80×24 1 — 80×26.5 |
Цвета шаблона | Два цвета из 512 (на экран) или четыре при использовании мигания |
Размер VRAM на экран | 8 Кбайт |
Управление | |
---|---|
Адрес шаблонов шрифта | Таблица знакогенератора |
Адрес макета экрана | Таблица имен R2 |
Цвет текста (ненулевые биты шаблона = 1) | Четыре старшие бита R7 |
Цвета фона (нулевые биты шаблона = 0) | Четыре младшие бита R7 |
Цвет текста в области мигания | Четыре старшие бита R12 |
Цвет фона области мигания | Четыре младшие бита R12 |
Число строк задаётся битом LN регистра R9:
Значение | Число строк |
---|---|
0 | 24 |
1 | 26.5 |
Значения по умолчанию в MSX BASIC | |
---|---|
Номер видеорежима | 0 |
Адрес таблицы знакогенератора | 0x01000…0x017FF |
Адрес макета экранной страницы | 0x00000…0x0077F 0x00000…0x0086F |
Адрес таблицы атрибутов мигания | 0x00800…0x008EF 0x00800…0x0090D |
Макет экранной страницы представляет собой карту экрана (для каждого изображения на экране). Каждая ячейка таблицы содержит код шаблона, отображаемого в соответствующем месте экрана. Эта таблица состоит из 80×24 байт, которые являются кодами (номерами) шаблонов из таблицы знакогенератора.
Важно, что если бит LN R9 установлен в 1, то отображается 26 с половиной строк. Этот бит отвечает за отображение 212 строк на экране, а значит высота экрана в строках текста равна 212/8=26.5, что составляет 2160 байт экранной области.
Адрес макета экранной страницы хранится в регистре R2, два младших бита регистра, всегда равны 1.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R2 (ТNT) | 0 | A16 | A15 | A14 | A13 | A12 | 1 | 1 | Таблица имён |
Схема распределения относительных адресов в макете экранной страницы приведена ниже:
Колонки (X) | |||||||
---|---|---|---|---|---|---|---|
Строки (Y) | 0 | 1 | 2 | 3 | … | … | 79 |
0 | 0 | 1 | 2 | 3 | … | … | 79 |
1 | 80 | 81 | 82 | 83 | … | … | 159 |
… | … | … | … | … | … | … | … |
25 | 2000 | 2001 | 2002 | 2003 | … | … | 2079 |
26 | 2080 | 2081 | 2082 | 2083 | … | … | 2159 |
27 | 2160 | 2061 | 2062 | 2063 | … | … | 2239 |
Настройки цвета находятся в регистре R7. Биты TC3…TC0 определяют цвет ненулевых пикселей символа, заданных в таблице генератора шаблонов, биты BD3…BD0 определяют цвет прозрачных (или фоновых) пикселей.
Примечание: В режиме Text2, цвет бордюра всегда равен цвету фона.
Цвета текста и фона в области мигания определяются в R12.
Каждая позиция на экране имеет отдельный бит для атрибута мигания, и если этот бит установлен на 1, мигание будет применено к рисунку, помещенному в эту область в таблице макетов шаблонов. Начальный адрес таблицы задаётся в регистрах R3 и R10.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R3 (ТCT) | A13 | A12 | A11 | A10 | A9 | 1 | 1 | 1 | Таблица цветов тайлов (тайловая окраска) |
R10 (ТCT) | 0 | 0 | 0 | 0 | 0 | A16 | A15 | A14 | Старшие разряды TCT |
Структура таблицы цветов приведена ниже.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
0 | (0,0) | (1,0) | (2,0) | (3,0) | (4,0) | (5,0) | (6,0) | (7,0) | |
1 | (8,0) | (9,0) | (10,0) | (11,0) | (12,0) | (13,0) | (14,0) | (15,0) | |
… | … | … | … | … | … | … | … | … | |
… | … | … | … | … | … | … | … | … | |
… | … | … | … | … | … | … | … | … | |
269 | (72,26) | (73,26) | (74,26) | (75,26) | (76,26) | (77,26) | (78,26) | (79,26) |
Поочередно будут отображаться цветовые коды, заданные в регистрах R7 и R12; Частоту мигания (время включения и выключения) можно задать через регистр R13.
R7 | R12 | R7 | R12 | |||||||||||||||||||||||||||||||||||
Чётнная страница | Нечётнная страница | |||||||||||||||||||||||||||||||||||||
Значения времени для NTSC рассчитываются по формуле:
T=(166.9*X)/1000
(время в секундах),
где X
, это длительность включения/отключения, определенная в R13
Если длительность включения равна 15, а длительность отключения равна 0, атрибуты области мигания включены постоянно.
Пример распределения видеопамяти для режима Text2:
0x00000 0x00870 | Макет экранной страницы 0 (80*24=1920 байт) (LN: 80*27=2160 байт) |
|
|||||||||||||||||||||||||||||
… | … | … | |||||||||||||||||||||||||||||
0x00A00 0x00B0E | Таблица цветов 0 (80*24/8=240 байт) (LN: 80*27/8=270 байт) |
|
|||||||||||||||||||||||||||||
… | … | … | |||||||||||||||||||||||||||||
0x01000 0x01800 | Таблица знакогенератора 0 (256*8=2048 байт) |
|
|||||||||||||||||||||||||||||
… | … |
|
|||||||||||||||||||||||||||||
0x02000 0x02870 | Макет экранной страницы 1 | ||||||||||||||||||||||||||||||
… | … | … | |||||||||||||||||||||||||||||
0x02A00 0x02B0E | Таблица цветов 1 | ||||||||||||||||||||||||||||||
… | … | … | |||||||||||||||||||||||||||||
0x03000 0x037FF | Таблица знакогенератора 1 | ||||||||||||||||||||||||||||||
… | … | … | |||||||||||||||||||||||||||||
0x04000 0x1FFFF | Таким же образом можно выделить максимум 16 страниц, если к VDP подключено 128 Кбайт. |
Характеристики | |
---|---|
Размер экрана, в цветных блоках (Ш×В) | Значение бита LN регистра R9 определяет размер: 0 — 64×48 1 — 64×53 |
Цвета блоков | 16 из 512 цветов |
Режим спрайтов | Sprite mode 1 |
Размер VRAM на экран | 4 Кбайт |
Управление | |
---|---|
Шаблон шрифта | Таблица знакогенератора |
Расположение шаблона экрана | Имя таблицы шаблона |
Цвет фона | Четыре младшие бита R7 |
Спрайты | VRAM sprite attribute table VRAM sprite pattern table |
Значения по умолчанию в MSX BASIC | |
---|---|
Номер видеорежима | 3 |
Таблица знакогенератора | 0x00000…0x007FF |
Макет экранной страницы | 0x00800…0x00AFF 0x00800…0x00B5F |
Шаблоны спрайтов | 0x03800…0x03FFF |
Атрибуты спрайтов | 0x01B00…0x01B7F |
Каждый шаблон таблицы знакогенератора состоит из четырех цветовых блоков. Эти шаблоны имеют размер 8×8 для экрана размером 256×192 точек.
| |||||||||||||||||||||||||||||||||||||||||||||||||
Блок A | Блок B |
|
|||||||||||||||||||||||||||||||||||||||||||||||
Блок C | Блок D |
Для каждого блока A, B, C и D можно указать шестнадцать цветов. Для каждого шаблона используются два байта.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
Код цвета A | Код цвета B | ||||||||
Код цвета C | Код цвета D |
Для каждого шаблона предусмотрено четыре цветовых блока (8 байтов). Определенный цветовой блок используется для отображения в зависимости от координаты Y.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Имя шаблона | A | B | Код цвета A | Код цвета B | Цвет шаблона, если Y=0, 4, 8, 12, 16 или 20 | |||||||
C | D | Код цвета C | Код цвета D | |||||||||
E | F | Код цвета E | Код цвета F | Цвет шаблона, если Y==1, 5, 9, 13, 17 или 21 | ||||||||
G | H | Код цвета G | Код цвета H | |||||||||
I | J | Код цвета I | Код цвета J | Цвет шаблона, если Y=2, 6, 10, 14, 18 или 22 | ||||||||
K | L | Код цвета K | Код цвета L | |||||||||
M | N | Код цвета M | Код цвета N | Цвет шаблона, если Y=3, 7, 11, 15, 19 или 23 | ||||||||
O | P | Код цвета O | Код цвета P |
Адрес начала таблицы генератора шаблонов задаётся в регистре R4.
Макет экранной страницы представляет собой карту экрана (для каждого экрана), содержащую один байт для каждого местоположения экрана. Каждый байт определяет уникальный номер шаблона. Адрес макета экранной страницы храниться в регистре R2.
Колонки (X) | |||||||
---|---|---|---|---|---|---|---|
Строки (Y) | 0 | 1 | 2 | 3 | … | … | 31 |
0 | 0 | 1 | 2 | 3 | … | … | 31 |
1 | 32 | 33 | 34 | 35 | … | … | 63 |
… | … | … | … | … | … | … | … |
22 | 704 | 705 | 706 | 707 | … | … | 735 |
23 | 736 | 737 | 738 | 739 | … | … | 767 |
Цвет фона экрана, можно задать, указав значение в битах BD3…BD0 в регистре R7. Обратите внимание, что значения бит TC3…TC0 регистра R7 игнорируются.
Адрес начала таблицы атрибутов спрайта в задаётся в регистрах R5 и R11; адрес начала таблицы генератора спрайтов в регистре R6. Подробную информацию о спрайтах см. В разделе Sprite mode 1.
Пример распределения видеопамяти для режима MultiColor
0x00000 0x003FF | Sprite generator table 0 (128*8=1024 байт) | В этом режиме доступна только половина от максимально возможного количества спрайтов — от 0 до 127. Спрайты с номерами 128-255 перекрывают таблицу макетов шаблонов (Pattern Layout Table). |
0x00400 0x006FF | Макет экранной страницы 0 (32*24=768 байт) (LN: 32*27=864 байт) | Хотя доступен режим 26.5 строк, пространство над 24 строками в этом макете перекрывает таблицу атрибутов спрайта. |
0x00700 0x0077F | Sprite attribute table 0 (32*4=128 байт) | |
… | … | |
0x08000 0x00FFF | Таблица знакогенератора 0 (256*8=2048 байт) |
|
… | … | Таким же образом можно выделить максимум 32 страницы, если к VDP подключено 128 Кбайт. |
0x1FFFF |
Характеристики | |
---|---|
Размер шаблона с точках (Ш×В) | 8×8 |
Число шаблонов | 256 |
Размер экрана, в шаблонах (Ш×В) | Значение бита LN регистра R9 определяет размер: 0 — 32×24 (256×192 точки) 1 — 32×26.5 (256×212 точек) |
Цвета шаблона | 16 цветов из 512 (на экран) |
Режим спрайтов | Sprite mode 1 |
Размер VRAM на экран | 4 Кбайта |
Управление | |
---|---|
Шаблоны тайлов | Таблица знакогенератора |
Расположение шаблона экрана | Макет экрана |
Pattern color codes 1 & 0 | Specified as a group for each 8-bit pattern in color table |
Цвета фона | Четыре младшие бита R7 |
Спрайты | VRAM sprite attribute table VRAM sprite pattern table |
Значения по умолчанию в MSX BASIC | |
---|---|
Номер видеорежима | 1 |
Таблица знакогенератора | 0x00000…0x007FF |
Макет экранной страницы | 0x01800…0x01AFF 0x01800…0x01B5F |
Pattern colors | 0x02000…0x0201F |
Sprite patterns | 0x03800…0x03FFF |
Sprite attributes | 0x01B00…0x01B7F |
Шрифт, отображаемый на экране для каждого шаблона таблицы знакогенератора, состоит из 8 байтов, при этом отображаются все 8 бит каждого байта.
Пример таблицы знакогенератора приведен ниже.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
Адрес | Описание | ||||||||
0 | ██ | ██ | ██ | Шаблон 0 (PN0) | |||||
1 | ██ | ██ | |||||||
2 | ██ | ██ | |||||||
3 | ██ | ██ | |||||||
4 | ██ | ██ | ██ | ██ | ██ | ██ | ██ | ||
5 | ██ | ██ | |||||||
6 | ██ | ██ | |||||||
7 | |||||||||
8 | ██ | ██ | ██ | ██ | ██ | ██ | Шаблон 1 (PN1) | ||
9 | ██ | ██ | |||||||
10 | ██ | ██ | |||||||
11 | ██ | ██ | ██ | ██ | ██ | ██ | |||
12 | ██ | ██ | |||||||
13 | ██ | ██ | |||||||
14 | ██ | ██ | ██ | ██ | ██ | ██ | |||
15 | |||||||||
… | … | … | |||||||
2040 | ██ | ██ | ██ | ██ | Шаблон 255 (PN255) | ||||
2041 | ██ | ██ | ██ | ██ | |||||
2042 | ██ | ██ | ██ | ██ | |||||
2043 | ██ | ██ | ██ | ██ | |||||
2044 | ██ | ██ | ██ | ██ | |||||
2045 | ██ | ██ | ██ | ██ | |||||
2046 | ██ | ██ | ██ | ██ | |||||
2047 | ██ | ██ | ██ | ██ |
Макет экранной страницы представляет собой карту экрана (для каждого экрана), содержащую один байт для каждого местоположения экрана. В этой таблице есть 32×24 (767) ячеек, в которых могут отображаться определенные шаблоны. Каждый байт определяет уникальный номер шаблона. Адрес макета экранной страницы храниться в регистре R2 и соответствует ячейке (0, 0) с адресом 0, см. ниже.
Колонки (X) | |||||||
---|---|---|---|---|---|---|---|
Строки (Y) | 0 | 1 | 2 | 3 | … | … | 31 |
0 | 0 | 1 | 2 | 3 | … | … | 31 |
1 | 32 | 33 | 34 | 35 | … | … | 63 |
… | … | … | … | … | … | … | … |
22 | 704 | 705 | 706 | 707 | … | … | 735 |
23 | 736 | 737 | 738 | 739 | … | … | 767 |
Цвет фона экрана можно задать, указав значение в битах BD3…BD0 биты в регистре R7. Обратите внимание, что биты TC3…TC0 регистра R7 игнорируются.
Адрес начала таблицы цвета задаётся в регистрах R3 и R10.
— GreyWolf 2021-06-05 22:45 Эта таблица повторяет части таблицы по ссылкам
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R3 (ТCT) | A13 | A12 | A11 | A10 | A9 | A8 | A7 | A6 | Таблица цветов тайлов (тайловая окраска) |
R10 (ТCT) | 0 | 0 | 0 | 0 | 0 | A16 | A15 | A14 | Старшие разряды TCT |
Размер таблицы цветов составляет 32 байта, каждый байт организован так же, как регистр R # 7 (FC - цвет переднего плана, BC - цвет фона). Шаблонам 0…7 присваивается первый цвет. из таблицы цветов шаблонам 8…15 назначается второй цвет из таблицы цветов и т.д., а шаблонам 0xF8…0xFF назначается 31-й цвет из таблицы цветов. Структура таблицы цветов представлены в таблице ниже.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
0 | FC3 | FC2 | FC1 | FC0 | BC3 | BC2 | BC1 | BC0 | Цвет для шаблонов 0…7 |
1 | FC3 | FC2 | FC1 | FC0 | BC3 | BC2 | BC1 | BC0 | Цвет для шаблонов 8…15 |
… | … | … | … | … | … | … | … | … | |
… | … | … | … | … | … | … | … | … | |
… | … | … | … | … | … | … | … | … | |
31 | FC3 | FC2 | FC1 | FC0 | BC3 | BC2 | BC1 | BC0 | Цвет для шаблонов 0xF8…0xFF |
Адрес начала таблицы атрибутов спрайта в задаётся в регистрах R5 и R11; адрес начала аблицы генератора спрайтов в регистре R6. Подробную информацию о спрайтах см. в разделе Sprite mode 1.
Пример распределения видеопамяти для режима Graphic1
0x00000 0x003FF | Sprite generator table 0 (128*8=1024 байт) | В этом режиме доступна только половина от максимально возможного количества спрайтов — от 0 до 127. Спрайты с номерами 128-255 перекрывают таблицу макетов шаблонов (Pattern Layout Table). |
0x00400 0x006FF | Макет экранной страницы 0 (32*24=768 байт) (32*27=864 байт) | Хотя доступен режим 26.5 строк, пространство над 24 строками в этом макете перекрывает таблицу атрибутов спрайта. |
0x00700 0x0077F | Sprite attribute table 0 (32*4=128 байт) | |
0x00780 0x0079F | Color table 0 (256/8=32 байт) | |
… | … | |
0x08000 0x00FFF | Таблица знакогенератора 0 (256*8=2048 байт) |
|
… | … | Таким же образом можно выделить максимум 32 страницы, если к VDP подключено 128 Кбайт. |
0x1FFFF |
Характеристики | |
---|---|
Размер шаблона с точках (Ш×В) | 8×8 |
Число шаблонов | 768 (по 256 на 1⁄3 экрана) |
Размер экрана, в шаблонах (Ш×В) | 32×24 (256×192 точки) ∗ |
Цвета шаблона | 16 цветов из 512 (на экран) |
Режим спрайтов | Graphic2 — Sprite mode 1 Graphic3 — Sprite mode 2 |
Размер VRAM на экран | 16 Кбайт |
∗ Режимы Graphic2 и Graphic3 идентичны, за исключением режима спрайтов.
Управление | |
---|---|
Шаблон шрифта | Таблица знакогенератора |
Расположение шаблона экрана | Имя таблицы шаблона |
Pattern color codes 1 & 0 | Specified as a group for each 8-bit pattern in color table |
Цвета фона | Четыре младшие бита R7 |
Спрайты | VRAM sprite attribute table VRAM sprite pattern table |
Значения по умолчанию в MSX BASIC | Graphic2 | Graphic3 |
---|---|---|
Номер видеорежима | 2 | 4 |
Таблица знакогенератора | 0x00000…0x017FF | |
Макет экранной страницы | 0x01800…0x01AFF | |
Pattern colors | 0x02000…0x037FF | |
Sprite patterns | 0x03800…0x03FFF | |
Sprite attributes | 0x01B00…0x01B7F | 0x01E00…0x01E7F |
Sprite colors | — | 0x01C00…0x01DFF |
∗ В режиме 212 строки (бит LN регистра R9 равен 1) дополнительные 20 строк используют продолжение соответствующих таблиц, которые могут перекрываться с другими функциональными таблицами.
В отличие от других режимов, в этом режиме экран разделен по вертикали на три части. Каждая часть имеет свою таблицу знакогенератора и таблицы цветов, но все они, одна за другой, используют одну и ту же таблицу макетов шаблонов. Структура экрана представлена ниже.
Колонки (X) | ||||||||
---|---|---|---|---|---|---|---|---|
Строки (Y) | 0 | 1 | 2 | 3 | … | … | 31 | |
0 | 0, 0 | 1, 0 | 2, 0 | 3, 0 | … | … | 31, 0 | Верхняя 1/3 экрана |
1 | 0, 1 | 1, 1 | 2, 1 | 3, 1 | … | … | 31, 1 | |
… | … | … | … | … | … | … | … | |
7 | 0, 7 | 1, 7 | 2, 7 | 3, 7 | … | … | 31, 7 | |
8 | 0, 8 | 1, 8 | 2, 8 | 3, 8 | … | … | 31, 8 | Средняя 1/3 экрана |
… | … | … | … | … | … | … | … | |
15 | 0, 15 | 1, 15 | 2, 15 | 3, 15 | … | … | 31, 15 | |
16 | 0, 16 | 1, 16 | 2, 16 | 3, 16 | … | … | 31, 16 | Нижняя 1/3 экрана |
… | … | … | … | … | … | … | … | |
22 | 0, 22 | 1, 22 | 2, 22 | 3, 22 | … | … | 31, 22 | |
23 | 0, 23 | 1, 23 | 2, 23 | 3, 23 | … | … | 31, 23 |
Таблица знакогенератора | Pattern color table | |
---|---|---|
0x00000 0x007FF | Верхняя 1/3 | |
Pattern images of the screen (256) | Pattern colors of the screen (256) | |
0x00800 0x00FFF | Средняя 1/3 | |
Pattern images of the screen (256) | Pattern colors of the screen (256) | |
0x01000h 0x017FF | Нижняя 1/3 | |
Pattern images of the screen (256) | Pattern colors of the screen (256) |
Шрифт, отображаемый на экране для каждого шаблона таблицы знакогенератора для каждой 1/3 экрана, состоит из 8 байтов, при этом отображаются все 8 бит каждого байта.
Адрес таблицы знакогенератора:
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R4 | 0 | 0 | A16 | A15 | A14 | A13 | 1 | 1 |
The pattern layout table is a map of the screen (per screen image). Every byte location of the screen contains code of the pattern displayed at respective location. This table has three 32*8 locations (upper, middle and lower) arranged consecutively where defined patterns can be displayed. Pattern layout table base address is stored in register R#2, and corresponds to the cell (0, 0) with address 0 in the picture below. Example of pattern generator table is provided below. Color table identifies color 1 (upper four bits) and color 0 (lower four bits) for every row of the pattern.
Пример таблицы знакогенератора приведен ниже.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит | старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Адрес | Описание | Адрес | |||||||||||||||||
0 | ██ | ██ | ██ | Шаблон 0 (PN0) | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | ||||||
1 | ██ | ██ | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | ||||||||
2 | ██ | ██ | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 2 | ||||||||
3 | ██ | ██ | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 3 | ||||||||
4 | ██ | ██ | ██ | ██ | ██ | ██ | ██ | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 4 | |||
5 | ██ | ██ | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 5 | ||||||||
6 | ██ | ██ | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 6 | ||||||||
7 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 7 | ||||||||||
8 | ██ | ██ | ██ | ██ | ██ | ██ | Шаблон 1 (PN1) | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 8 | |||
9 | ██ | ██ | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 9 | ||||||||
10 | ██ | ██ | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 10 | ||||||||
11 | ██ | ██ | ██ | ██ | ██ | ██ | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 11 | ||||
12 | ██ | ██ | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 12 | ||||||||
13 | ██ | ██ | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 13 | ||||||||
14 | ██ | ██ | ██ | ██ | ██ | ██ | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 14 | ||||
15 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 15 | ||||||||||
… | … | … | … | … | |||||||||||||||
2040 | ██ | ██ | ██ | ██ | Шаблон 255 (PN255) | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 2040 | |||||
2041 | ██ | ██ | ██ | ██ | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 2041 | ||||||
2042 | ██ | ██ | ██ | ██ | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 2042 | ||||||
2043 | ██ | ██ | ██ | ██ | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 2043 | ||||||
2044 | ██ | ██ | ██ | ██ | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 2044 | ||||||
2045 | ██ | ██ | ██ | ██ | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 2045 | ||||||
2046 | ██ | ██ | ██ | ██ | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 2046 | ||||||
2047 | ██ | ██ | ██ | ██ | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 2047 | ||||||
Цвет (часть 1) | Цвет (часть 0) |
Адрес начала таблицы цвета задаётся в регистрах R3 и R10.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R3 (ТCT) | A13 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | Таблица цветов тайлов (тайловая окраска) |
R10 (ТCT) | 0 | 0 | 0 | 0 | 0 | A16 | A15 | A14 | Старшие разряды TCT |
You can set color of the margin of the screen (backdrop color) specifying BD3…BD0 bits in register R#7. Note that bits TC3…TC0 of R#7 are ignored.
Set the start address of the sprite attribute table in registers R5 and R11; set start address of the sprite pattern generator table in register R6. For details about sprites in Graphic2 mode, please refer to section Sprite mode 1; for details about sprites in Graphic3 mode, please refer to section Sprite mode 2
When VDP is set into 212 scan lines mode (LN bit is set to 1) it displays first 20 vertical lines from another, additional third (fourth third) of the pattern generator, color and pattern layout tables. These additional, fourth third parts tables, follow third parts tables, and may overlap other tables like sprite pattern and sprite attribute tables, causing the sprite artifacts on the screen in G2 mode. However, if table locations are set up properly using VDP base address registers, it is possible to use this additional space of 20*256 vertical pixels to full extent to display the image.
Таблица знакогенератора | ||
---|---|---|
0x00000 0x007FF | Верхняя 1/3 (256*8=2048 байт) |
|
0x00800 0x00FFF | Средняя 1/3 (256*8=2048 байт) |
|
0x01000 0x017FF | Нижняя 1/3 (256*8=2048 байт)∗ |
|
Graphic2 | Graphic3 | |
0x01800 0x01BFF | Sprite pattern table (128*8=1024 байт)∗∗ | Sprite pattern table (128*8=1024 байт)** |
0x01C00 0x01C7F | Sprite attribute table (32*4=128 байт) | Sprite color table (32*16=512 байт) |
0x01C80 0x01DFF | — | |
0x01E00 0x01E7F | Sprite attribute table (32*4=128 байт) |
|
0x01FFF | — | |
… | … | |
Pattern color table | ||
0x02000 0x027FF | Верхняя 1/3 (256*8=2048 байт) |
|
0x02800 0x02FFF | Средняя 1/3 (256*8=2048 байт) |
|
0x03000 0x037FF | Нижняя 1/3 (256*8=2048 байт)∗ |
|
0x03800 0x03AFF | Pattern layout table (256*8=2048 байт)∗ |
|
… | … | |
0x04000 0x1FFFF | Таким же образом можно выделить максимум 8 страниц, если к VDP подключено 128 Кбайт. |
∗ В режиме 212 строки (бит LN регистра R9 равен 1) дополнительные 20 строк отображаются как пустые с цветной рамкой, невозможно отобразить что-либо в этом пространстве.
∗∗ В этом режиме доступна только половина от максимально возможного количества спрайтов — от 0 до 127. Спрайты с номерами 128-255 перекрывают таблицу макетов шаблонов (Pattern Layout Table).
In 212-line mode, if layout is left default as displayed, fourth thirds of these tables
(pattern generator and pattern color) slip onto the tables following them causing incorrect
image and/or artifacts.
Характеристики | |
---|---|
Размер экрана, в точках (Ш×В) | Значение бита LN регистра R9 определяет размер: 0 — 256×192 1 — 256×212 |
Управление | |
---|---|
Расположение шаблона экрана | Имя таблицы шаблона |
Цвета фона | Четыре младшие бита R7 |
Спрайты | VRAM sprite attribute table VRAM sprite pattern table |
Значения по умолчанию в MSX BASIC | |
---|---|
Номер видеорежима | 5 |
Макет экранной страницы | 0x00000…0x069FF |
Sprite patterns | 0x07800…0x07FFF |
Sprite attributes | 0x07600…0x0767F |
Sprite colors | 0x07400…0x075FF |
The pattern layout table is a map of the screen (per screen image). Every byte location of the screen contains color codes for two dots. This is bitmap graphics mode, and there’s no pattern generator table.
Колонки (X) | ||||||||
---|---|---|---|---|---|---|---|---|
Строки (Y) | 0 | 1 | 2 | 3 | … | … | 255 | |
0 | 0,0 | 1,0 | 2,0 | 3,0 | … | … | 255,0 | |
1 | 0,1 | 1,1 | 2,1 | 3,1 | … | … | 255,1 | |
… | … | … | … | … | X, Y | … | … | |
191 | 0,191 | 1,191 | 2,191 | … | … | … | 255,191 | LN=0 |
… | … | … | … | … | … | … | … | |
211 | 0,211 | 1,211 | 2,211 | … | … | … | 255,211 | LN=1 |
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
0 | Код цвета для (0,0) | Код цвета для (1,0) | Адрес начала | ||||||
1 | Код цвета для (2,0) | Код цвета для (3,0) | |||||||
… | … | … | |||||||
127 | Код цвета для (254,0) | Код цвета для (255,0) | |||||||
128 | Код цвета для (0,1) | Код цвета для (1,1) | |||||||
… | … | … | |||||||
27134 | Код цвета для (252,211) | Код цвета для (253,211) | |||||||
27135 | Код цвета для (254,211) | Код цвета для (255,211) |
Pattern layout table base address is stored in register R#2, and corresponds to the cell (0, 0) in the picture above.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R2 (ТNT) | 0 | A16 | A15 | 1 | 1 | 1 | 1 | 1 | Таблица имён |
You can set color of the margin of the screen (backdrop color) specifying BD3…BD0 bits in register R#7. Note that bits TC3…TC0 of R#7 are ignored.
Set the start address of the sprite attribute table in registers R5 and R11; set start address of the sprite pattern generator table in register R6. For details about sprites please refer to section Sprite mode 2
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R5 (SAT) | A14 | A13 | A12 | A12 | A10 | A9 | A8 | A7 | Таблица атрибутов спрайтов |
R11 (SAT) | 0 | 0 | 0 | 0 | 0 | 0 | A16 | A15 | Старшие разряды SAT |
R6 (SPT) | 0 | 0 | A16 | A15 | A14 | A13 | A12 | A11 | Таблица шаблонов спрайтов |
Пример распределения видеопамяти для режима Graphic4
0x00000 | Pattern name table (256*192/2=24576 байт) (256*212/2=27136 байт) | |
0x02000 | ||
0x04000 0x05FFF | 192 lines | |
0x06000 0x069FF | 212 lines | |
0x06A00 0x06FFF | — | |
0x07000 0x077FF | Sprite pattern table (256*8=2048 байт) |
|
0x00780 0x079FF | Sprite color table (32*16=512 байт) |
|
0x07A00 0x07A7F | Sprite attribute table (32*4=128 байт) |
|
0x07A80 0x07FFF | — | |
… | … | Таким же образом можно выделить максимум 4 страницы, если к VDP подключено 128 Кбайт. |
0x08000 0x1FFFF |
Характеристики | |
---|---|
Размер экрана, в точках (Ш×В) | Значение бита LN регистра R9 определяет размер: 0 — 512×192 1 — 512×212 |
Pattern colors | 4 colors out of 512 (per screen) |
Режим спрайтов | Sprite mode 2 |
Размер VRAM на экран | 32 Кбайта |
Управление | |
---|---|
Расположение шаблона экрана | Имя таблицы шаблона |
Цвета фона | Четыре младшие бита R7 |
Спрайты | VRAM sprite attribute table VRAM sprite pattern table |
Значения по умолчанию в MSX BASIC | |
---|---|
Номер видеорежима | 6 |
Макет экранной страницы | 0x00000…0x069FF |
Sprite patterns | 0x07800…0x07FFF |
Sprite attributes | 0x07600…0x0767F |
Sprite colors | 0x07400…0x075FF |
The pattern layout table is a map of the screen (per screen image). Every byte location of the screen contains color codes for four dots. This is bitmap graphics mode, and there’s no pattern generator table.
Колонки (X) | ||||||||
---|---|---|---|---|---|---|---|---|
Строки (Y) | 0 | 1 | 2 | 3 | … | … | 511 | |
0 | 0,0 | 1,0 | 2,0 | 3,0 | … | … | 511,0 | |
1 | 0,1 | 1,1 | 2,1 | 3,1 | … | … | 511,1 | |
… | … | … | … | … | X, Y | … | … | |
191 | 0,191 | 1,191 | 2,191 | … | … | … | 511,191 | LN=0 |
… | … | … | … | … | … | … | … | |
211 | 0,211 | 1,211 | 2,211 | … | … | … | 511,211 | LN=1 |
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
0 | Код цвета для (0,0) | Код цвета для (1,0) | Код цвета для (2,0) | Код цвета для (3,0) | Адрес начала | ||||
1 | Код цвета для (4,0) | Код цвета для (5,0) | Код цвета для (6,0) | Код цвета для (7,0) | |||||
… | … | … | … | … | |||||
127 | Код цвета для (508,0) | Код цвета для (509,0) | Код цвета для (510,0) | Код цвета для (511,0) | |||||
128 | Код цвета для (0,1) | Код цвета для (1,1) | Код цвета для (2,1) | Код цвета для (3,1) | |||||
… | … | … | … | … | |||||
27135 | Код цвета для (508,211) | Код цвета для (509,211) | Код цвета для (510,211) | Код цвета для (511,211) |
Pattern layout table base address is stored in register R#2, and corresponds to the cell (0, 0) in the picture above.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R2 (ТNT) | 0 | A16 | A15 | 1 | 1 | 1 | 1 | 1 | Таблица имён |
You can set color of the margin of the screen (backdrop color) specifying BD3…BD0 bits in register R#7. Note that bits TC3…TC0 of R#7 are ignored.
Set the start address of the sprite attribute table in registers R#5 and R#11; set start address of the sprite pattern generator table in register R#6. For details about sprites please refer to section Sprite mode 2.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R5 (SAT) | A14 | A13 | A12 | A12 | A10 | 1 | 1 | 1 | Таблица атрибутов спрайтов |
R11 (SAT) | 0 | 0 | 0 | 0 | 0 | 0 | A16 | A15 | Старшие разряды SAT |
R6 (SPT) | 0 | 0 | A16 | A15 | A14 | A13 | A12 | A11 | Таблица шаблонов спрайтов |
VDP can only display 4 solid colors in G5 mode however pixels are so small that combination of two pixels from the set of those 4 solid colors possible produces another visible color, a mixture of the applied two.
This feature is only available in G5 mode, and is applied to the sprites and to the screen border color. G5 has 512 pixels in its X-axis, but sprites’ X-coordinate is between 0 and 255. This means that for single sprite dot there’re two font pattern dots, and from forn pattern point of view sprite of 8*8 has size of 16*8.
SM2 sprite color table uses 4 bits for each line of sprite. For every dot in sprite pattern table defined as “1” in sprite image bitmap, lower two bits from this 4-bit set define color of odd pixels of the sprite, and higher two bits from this set define color of even pixels of the sprite.
In the example above imagine that palette color 1 is set to red (7, 0, 0) and color 3 set to blue (0, 0, 7).
VDP может отображать только 4 сплошных цвета в режиме G5, однако пиксели настолько малы, что комбинация двух пикселей из набора этих 4 возможных сплошных цветов дает другой видимый цвет, смесь примененных двух.
Такое поведение характерно только в режиме G5 и применяется к спрайтам и цвету бордюра экрана, т.к. в этом режиме ширина экрана (ось X) 512 пикселей, но ширина таблицы спрайтов 256 пикселей (0…255). Это означает, что для одного пикселя спрайта есть два пикселя в таблице знакогенератора, а с точки зрения шаблона сивола, спрайт размером 8×8 имеет размер 16×8 пикселов. Таблица цветов спрайта в режиме спрайтов 2 использует 4 бита для каждой строки спрайта. Для каждого пиксела в таблице шаблонов спрайтов, определенной как 1 в битовой карте изображения спрайта, два младших бита из этого 4-битного набора определяют цвет нечетных пикселей спрайта, а два старших бита из этого набора определяют цвет четных пикселей спрайта.
В приведенном выше примере представьте, что цвет 1 палитры установлен на красный (7, 0, 0), а цвет 3 установлен на синий (0, 0, 7).
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит | старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Адрес | Описание | Адрес | |||||||||||||||||
0 | ██ | ██ | Шаблон спрайта (8×8) | Цвета спрайта | ╳ | ╳ | ╳ | 0 | 0 | 1 | 1 | 1 | 0 | ||||||
1 | ██ | ██ | ██ | ██ | ██ | ██ | ╳ | ╳ | ╳ | 0 | 0 | 1 | 1 | 1 | 1 | ||||
2 | ██ | ██ | ██ | ██ | ██ | ██ | ╳ | ╳ | ╳ | 0 | 0 | 1 | 1 | 1 | 2 | ||||
3 | ██ | ██ | ██ | ██ | ██ | ██ | ╳ | ╳ | ╳ | 0 | 0 | 1 | 1 | 1 | 3 | ||||
4 | ██ | ██ | ██ | ██ | ██ | ██ | ╳ | ╳ | ╳ | 0 | 0 | 1 | 1 | 1 | 4 | ||||
5 | ██ | ██ | ██ | ██ | ██ | ██ | ╳ | ╳ | ╳ | 0 | 0 | 1 | 1 | 1 | 5 | ||||
6 | ██ | ██ | ██ | ██ | ██ | ██ | ╳ | ╳ | ╳ | 0 | 0 | 1 | 1 | 1 | 6 | ||||
7 | ██ | ██ | ╳ | ╳ | ╳ | 0 | 0 | 1 | 1 | 1 | 7 |
Фактическое представление спрайта на экране в режиме G5
| Восприятие изображения спрайта в режиме G51)
|
Пример распределения видеопамяти для режима Graphic5:
0x00000 | Pattern name table (512*192/4=24576 байт) (512*212/4=27136 байт) | |
0x02000 |
||
0x04000 0x05FFF | 192 lines | |
0x06000 0x069FF | 212 lines | |
0x06A00 0x06FFF | — | |
0x07000 0x077FF | Sprite pattern table (256*8=2048 байт) |
|
0x00780 0x079FF | Sprite color table (32*16=512 байт) |
|
0x07A00 0x07A7F | Sprite attribute table (32*4=128 байт) |
|
0x07A80 0x07FFF | — | |
… | … | Таким же образом можно выделить максимум 4 страницы, если к VDP подключено 128 Кбайт. |
0x08000 0x1FFFF |
Характеристики | |
---|---|
Размер экрана, в точках (Ш×В) | Значение бита LN регистра R9 определяет размер: 0 — 512×192 1 — 512×212 |
Pattern colors | 16 colors out of 512 (per screen) |
Режим спрайтов | Sprite mode 2 |
Размер VRAM на экран | 64 Кбайта |
Управление | |
---|---|
Расположение шаблона экрана | Имя таблицы шаблона |
Цвета фона | Четыре младшие бита R7 |
Спрайты | VRAM sprite attribute table VRAM sprite pattern table |
Значения по умолчанию в MSX BASIC | |
---|---|
Номер видеорежима | 7 |
Макет экранной страницы | 0x00000…0x0D3FF |
Sprite patterns | 0x0F000…0x07FFF |
Sprite attributes | 0x0FA00…0x0FA7F |
Sprite colors | 0x0F800…0x0F9FF |
The pattern layout table is a map of the screen (per screen image). Every byte location of the screen contains color codes for two dots. This is bitmap graphics mode, and there’s no pattern generator table.
Колонки (X) | ||||||||
---|---|---|---|---|---|---|---|---|
Строки (Y) | 0 | 1 | 2 | 3 | … | … | 511 | |
0 | 0,0 | 1,0 | 2,0 | 3,0 | … | … | 511,0 | |
1 | 0,1 | 1,1 | 2,1 | 3,1 | … | … | 511,1 | |
… | … | … | … | … | X, Y | … | … | |
191 | 0,191 | 1,191 | 2,191 | … | … | … | 511,191 | LN=0 |
… | … | … | … | … | … | … | … | |
211 | 0,211 | 1,211 | 2,211 | … | … | … | 511,211 | LN=1 |
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
0 | Код цвета для (0,0) | Код цвета для (1,0) | Адрес начала | ||||||
1 | Код цвета для (2,0) | Код цвета для (3,0) | |||||||
… | … | … | |||||||
255 | Код цвета для (510,0) | Код цвета для (511,0) | |||||||
256 | Код цвета для (0,1) | Код цвета для (1,1) | |||||||
… | … | … | |||||||
54270 | Код цвета для (508,211) | Код цвета для (509,211) | |||||||
54271 | Код цвета для (510,211) | Код цвета для (511,211) |
Pattern layout table base address is stored in register R#2, and corresponds to the cell (0, 0) in the picture above. This only one bit A16 controls the video page being displayed.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R2 (ТNT) | 0 | 0 | A16 2) | 1 | 1 | 1 | 1 | 1 | Таблица имён |
You can set color of the margin of the screen (backdrop color) specifying BD3…BD0 bits in register R#7. Note that bits TC3…TC0 of R#7 are ignored.
Set the start address of the sprite attribute table in registers R#5 and R#11; set start address of the sprite pattern generator table in register R#6. For details about sprites please refer to section Sprite mode 2.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R5 (SAT) | A14 | A13 | A12 | A12 | A10 | 1 | 1 | 1 | Таблица атрибутов спрайтов |
R11 (SAT) | 0 | 0 | 0 | 0 | 0 | 0 | A16 | A15 | Старшие разряды SAT |
R6 (SPT) | 0 | 0 | A16 | A15 | A14 | A13 | A12 | A11 | Таблица шаблонов спрайтов |
Пример распределения видеопамяти для режима Graphic6:
0x00000 | Pattern name table (512*192/2=49152 байт) (512*212/2=54272 байт) | |
0x04000 |
||
0x08000 | 192 lines | |
0x0C000 | 212 lines | |
0x0D400 0x0F000 | — | |
0x0F000 0x0F7FF | Sprite pattern table (256*8=2048 байт) |
|
0x0F800 0x0F9FF | Sprite color table (32*16=512 байт) |
|
0x0FA00 0x00FA7F | Sprite attribute table (32*4=128 байт) |
|
0x07A80 0x0FFFF | — | |
… | … | Таким же образом можно выделить максимум 4 страницы, если к VDP подключено 128 Кбайт. |
0x10000 0x1FFFF |
Характеристики | |
---|---|
Размер экрана, в точках (Ш×В) | Значение бита LN регистра R9 определяет размер: 0 — 256×192 1 — 256×212 |
Pattern colors | 256 colors (per screen) |
Режим спрайтов | Sprite mode 2 |
Размер VRAM на экран | 64 Кбайта |
Управление | |
---|---|
Расположение шаблона экрана | Имя таблицы шаблона |
Цвета фона | Четыре младшие бита R7 |
Спрайты | VRAM sprite attribute table VRAM sprite pattern table |
Значения по умолчанию в MSX BASIC | |
---|---|
Номер видеорежима | 8 |
Макет экранной страницы | 0x00000…0x0D3FF |
Sprite patterns | 0x0F000…0x0F7FF |
Sprite attributes | 0x0FA00…0x0FA7F |
Sprite colors | 0x0F800…0x0F9FF |
The pattern layout table is a map of the screen (per screen image). Every byte location of the screen contains color code for one single dot. This is bitmap graphics mode, and there’s no pattern generator table.
Колонки (X) | ||||||||
---|---|---|---|---|---|---|---|---|
Строки (Y) | 0 | 1 | 2 | 3 | … | … | 255 | |
0 | 0,0 | 1,0 | 2,0 | 3,0 | … | … | 255,0 | |
1 | 0,1 | 1,1 | 2,1 | 3,1 | … | … | 255,1 | |
… | … | … | … | … | X, Y | … | … | |
191 | 0,191 | 1,191 | 2,191 | … | … | … | 255,191 | LN=0 |
… | … | … | … | … | … | … | … | |
211 | 0,211 | 1,211 | 2,211 | … | … | … | 255,211 | LN=1 |
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
0 | Зелёный (0,0) | Красный (0,0) | Синий (0,0) | Адрес начала | |||||
1 | Зелёный (1,0) | Красный (1,0) | Синий (1,0) | ||||||
… | … | … | … | ||||||
255 | Зелёный (255,0) | Красный (255,0) | Синий (255,0) | ||||||
256 | Зелёный (0,1) | Красный (0,1) | Синий (0,1) | ||||||
… | … | … | … | ||||||
54270 | Зелёный (254,211) | Красный (254,211) | Синий (254,211) | ||||||
54271 | Зелёный (254,211) | Красный (254,211) | Синий (254,211) |
Pattern layout table base address is stored in register R#2, and corresponds to the cell (0, 0) in the picture above. This only one bit A16 controls the video page being displayed.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R2 (ТNT) | 0 | 0 | A16 3) | 1 | 1 | 1 | 1 | 1 | Таблица имён |
You can set color of the margin of the screen (backdrop color) specifying all the 8 bits in register R#7 (256 possible colors in total).
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R7 | DB7 | DB6 | DB5 | DB4 | BD3 | BD2 | BD1 | BD0 | Цвет текста и полей экрана |
Цвет бордюра | Цвет фона экрана |
Set the start address of the sprite attribute table in registers R#5 and R#11; set start address of the sprite pattern generator table in register R#6. For details about sprites please refer to section Sprite mode 2.
старший бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | младший бит |
---|---|---|---|---|---|---|---|---|---|
R5 (SAT) | A14 | A13 | A12 | A12 | A10 | 1 | 1 | 1 | Таблица атрибутов спрайтов |
R11 (SAT) | 0 | 0 | 0 | 0 | 0 | 0 | A16 | A15 | Старшие разряды SAT |
R6 (SPT) | 0 | 0 | A16 | A15 | A14 | A13 | A12 | A11 | Таблица шаблонов спрайтов |
Пример распределения видеопамяти для режима Graphic7:
0x00000 | Pattern name table (512*192/2=49152 байт) (512*212/2=54272 байт) | |
0x04000 |
||
0x08000 | 192 lines | |
0x0C000 | 212 lines | |
0x0D400 | ||
0x0F000 0x0F7FF | Sprite pattern table (256*8=2048 байт) |
|
0x0F800 0x0F9FF | Sprite color table (32*16=512 байт) |
|
0x0FA00 0x0FA7F | Sprite attribute table (32*4=128 байт) |
|
0x0FA80 0x0FFFF | — | |
… | … | Таким же образом можно выделить максимум 2 страницы, если к VDP подключено 128 Кбайт. |
0x10000 0x1FFFF |
Commands are used to perform specific complex operations on the video memory, and thus on the image displayed on the screen. See the list of available commands in the table below.
Command name | Destination | Source | Unit | Mnemonic | CM3 | CM2 | CM1 | CM0 |
---|---|---|---|---|---|---|---|---|
High-speed move | VRAM | CPU | Byte | HMMC* | 1 | 1 | 1 | 1 |
VRAM | VRAM | YMMM* | 1 | 1 | 1 | 0 | ||
VRAM | VRAM | HMMM | 1 | 1 | 0 | 1 | ||
VRAM | VDP | HMMV | 1 | 1 | 0 | 0 | ||
Logical move | VRAM | CPU | Dot | LMMC | 1 | 0 | 1 | 1 |
CPU | VRAM | LMCM | 1 | 0 | 1 | 0 | ||
VRAM | VRAM | LMMM | 1 | 0 | 0 | 1 | ||
VRAM | VRAM | LMMV | 1 | 0 | 0 | 0 | ||
Line | VRAM | VDP | LINE | 0 | 1 | 1 | 1 | |
Search | VRAM | VDP | SRCH | 0 | 1 | 1 | 0 | |
Pset | VRAM | VDP | PSET | 0 | 1 | 0 | 1 | |
Point | VDP | VRAM | POINT | 0 | 1 | 0 | 0 | |
Invalid | 0 | 0 | 1 | 1 | ||||
0 | 0 | 1 | 0 | |||||
0 | 0 | 0 | 1 | |||||
Stop | STOP | 0 | 0 | 0 | 0 |
*In G4 and G6 modes, the lower one bit, and in G5 mode, the lower two bits are lost in registers related to X-coordinate (DX, NX)
The process of execution of VDP commands consists of several steps:
As we have already seen, programmer can have several options to place tables in the video memory by altering base address registers. In some modes there’re more options (like in Text 1 there’re 32 options and in GRAPHICS7 there’re only 2 options). This introduces a concept of the page defined by where VDP currently operates and where it takes information for picture display from.
Page concept is stricter in relation to VDP commands. VRAM access is defined by X and Y coordinates, and not by physical address within VRAM. Coordinate X is specified by 9 bits, and can be in range of 0…511, coordinate Y is specified by 10 bits, and can be in range of 0…1023. See the table below for VRAM paging in various video modes.
Режим Graphic4 | Адрес | Режим Graphic5 |
||||
---|---|---|---|---|---|---|
(0, 0) | (255, 0) | 0x0000 | (0, 0) | (511, 0) | ||
Страница 0 | Страница 0 | |||||
(0, 255) | (255, 255) | (0, 255) | (511, 255) | |||
(0, 256) | (255, 256) | 0x08000 | (0, 256) | (511, 256) | ||
Страница 1 | Страница 1 | |||||
(0, 511) | (255, 511) | (0, 511) | (511, 511) | |||
(0, 512) | (255, 512) | 0x10000 | (0, 512) | (511, 512) | ||
Страница 2 | Страница 2 | |||||
(0, 767) | (255, 767) | (0, 767) | (511, 767) | |||
(0, 768) | (255, 768) | 0x18000 | (0, 768)) | (511, 768) | ||
Страница 3 | Страница 3 | |||||
(0, 1023) | (255, 1023) | 0x1FFFF | (0, 1023) | (511, 1023) |
Режим Graphic7 | Адрес | Режим Graphic6 |
||||
---|---|---|---|---|---|---|
(0, 0) | (255, 0) | 0x0000 | (0, 0) | (511, 0) | ||
Страница 0 | Страница 0 | |||||
(0, 255) | (255, 255) | (0, 255) | (511, 255) | |||
(0, 256) | (255, 256) | 0x10000 | (0, 256) | (511, 256) | ||
Страница 1 | Страница 1 | |||||
(0, 511) | (255, 511) | 0x1FFFF | (0, 511) | (511, 511) |
In G4 and G5 modes there’re four pages; in G6 and G7 modes there’re only two pages. For example, setting Y coordinate in G5 mode to 658 will automatically choose page #2 with specific translated initial VRAM address.
Note that VDP is capable of displaying maximum of 212 lines, and programmer has an option to use register R#23 to set visible screen window position within active page.
When executing logical commands LINE, PSET and LOGICAL MOVE, it is possible to define logical operation to be done on the color of the pixels. The four bits identifying the logical operation should be written in lower four bits of R#46 (command register) together with the command code.
Name | Operation | LO3 | LO2 | LO1 | LO0 |
---|---|---|---|---|---|
IMP | DC=SC | 0 | 0 | 0 | 0 |
AND | DC=SC&DC | 0 | 0 | 0 | 1 |
OR | DC=SC|DC | 0 | 0 | 1 | 0 |
XOR | DC=SC^DC | 0 | 0 | 1 | 1 |
NOT | DC=!SC | 0 | 1 | 0 | 0 |
Invalid | 0 | 1 | 0 | 1 | |
0 | 1 | 1 | 0 | ||
0 | 1 | 1 | 1 | ||
TIMP | If SC=0 then DC=DC else DC=SC | 1 | 0 | 0 | 0 |
TAND | If SC=0 then DC=DC else DC=SC&DC | 1 | 0 | 0 | 1 |
TOR | If SC=0 then DC=DC else DC=SC|DC | 1 | 0 | 1 | 0 |
TXOR | If SC=0 then DC=DC else DC=SC^DC | 1 | 0 | 1 | 1 |
TNOT | If SC=0 then DC=DC else DC=!SC | 1 | 1 | 0 | 0 |
Invalid | 1 | 1 | 0 | 1 | |
1 | 1 | 1 | 0 | ||
1 | 1 | 1 | 1 |
*SC = source color code
*DC = destination color code
Setting up VDP registers for command execution is a significant task for programmer and CPU, and it will be wise to use already existing values in the registers for the next command execution or for further work with video memory. For this purpose programmer should know the resulting states of most important VDP registers. Please see the table below. Note that if program is going to use sequence of the VDP commands which use resulting values of registers from previous commands, it is important to disable interrupts so that interrupt handler routing would not accidentally change values in VDP registers and thus break the whole command sequence. CMR H is a higher nibble of the command register R46; CMR L is a lower nibble of the command register R46. ARG is an argument register R45.
The resulting values of SY*, DY* and NY* are in dots and can be calculated using equations below:
LINE command = → if MAJ=0 then N=N-1 ????
SX | SY | DX | DY | NX | NY | CLR | CMR H | CMR L | ARG | |
---|---|---|---|---|---|---|---|---|---|---|
HMMC | – | – | – | ∗ | – | # | – | 0 | – | – |
YMMM | – | ∗ | – | ∗ | – | # | – | 0 | – | – |
HMMM | – | ∗ | – | ∗ | – | # | – | 0 | – | – |
HMMV | – | – | – | ∗ | – | # | – | 0 | – | – |
LMMC | – | – | – | ∗ | – | # | – | 0 | – | – |
LMCM | – | ∗ | – | – | – | # | – | 0 | – | – |
LMMM | – | ∗ | – | ∗ | – | # | – | 0 | – | – |
LMMV | – | – | – | ∗ | – | # | – | 0 | – | – |
LINE | – | – | – | ∗ | – | – | – | 0 | – | – |
SRCH | – | – | – | – | – | – | – | 0 | – | – |
PSET | ∗ | – | – | – | – | – | – | 0 | – | – |
POINT | – | – | – | – | – | – | ∗ | 0 | – | – |
Легенда:
– | Unchanged |
∗ | Coordinate at the command end (SY*, DY*) or color code |
# | Count (NY*) when the end of the screen was detected |