TSconf: Gfx layer

Спрайты, тайлы… Возможно, этого нам и хватило-бы…
Но под этими слоями находится базовый слой графики.

Дао говорит: Слой графики отображает данные, которые находятся в страницах памяти. Первая страница для отображения (её адрес обязательно кратен 8 для 16цветов, 16 — для 256 цветного режима, общая длина — 8/16 страниц) указана портом VPage (#01af). Способ отображения данной памяти задаётся битами порта VConfig, который задаёт разрешение и цветовую глубину.
Окно отображения памяти представляет собою блок размерами заданного разрешения и отображается по позициям X (0-511) и Y (0-511), которые указаны парами портов GXOffs и GYOffs. Окно зациклено по краям в отображении.
Цвета отображения заданы палитрой, номер выбирается первой тетрадой регистра PalSel (#06af).

Итак, у нас есть экран со своим внутренним скроллом.

Вывод на экран представляет собой запись данных в страницу видеопамяти по нужному адресу.
В зависимости от выбранного режима цветности, запись одного байта позволяет вывести одну (256 цветов) или две (режим 16 цветов) точки за раз. В режиме 16 цветов старшая тетрада отвечает за номер цвета в палитре для левой точки, младшая — для правой.
В режиме 256 цветов — байт точки указывает цвет в палитре.

Каков выбор разрешения?
RRES[1:0]	Pixels
00	256x192
01	320x200
10	320x240
11	360x288

VM[2:0]	Mode
00	ZX
01	16c
10	256c
11	Text


Задаётся всё это битами порта VConfig (#00af):

VConfig	RRES[1:0]		NOGFX	NOTSU	-	-	VM[1:0]	
RRES - 7,6 биты - разрешение
VM[1:0]	1, 0 биты - цветовой режим

Дополнительно этот порт предлагает нам бит включения/отключения отображения графики и бит вкл/выкл спрайтово-тайлового движка.
В первом случае — при отключении графики мы увидим чистый экран заданного бордером цвета. Во втором — спрайтовые и тайловые слои не будут отображаться.
Отключение неиспользуемых слоёв приводит к освобождению ресурсов системы и позволит, например, больше передать данных DMA за строку.

Давайте что-нибудь выведем на экран.
Проще всего, думаю, организовать вывод картинки с помощью DMA — пусть железо работает, процессор в это время думает, а человек отдыхает :)

Итак, выведем изображение в режиме 16 цветов, размером 256х256 точек.
Для этого необходимо подготовить порты, указав желаемое разрешение, цветовой охват, адрес страницы видеопамяти:


		ld hl,init_ts
		jp set_ports

Vid_page	equ #40

init_ts		db high VCONFIG,VID_16C+VID_320X240
		db high VPAGE,Vid_page
		db high PALSEL,0

	include "tsconfig.asm"

Отметим, что палитра для графики имеет номер 0. Напомню, что стандартная начальная палитра zx spectrum у нас расположена в последней, 15-й палитре.


		ld hl,pic_copy
		call set_ports
                jr $
screen_page	equ #80 ; номер страницы, в котором хранится изображение для вывода
pic_copy
		db #1a,0
	        db #1b,0
		db #1c,screen_page
	        db #1d,0
	        db #1e,0
	        db #1f,Vid_page
	        db #26,256/4-1
	        db #28,256-1
		db #27,DMA_RAM + DMA_DALGN
		db #ff


Всё, изображение стоит на экране, начиная с координаты 0х0.
Очень просто можно это изображение подвигать по экрану, задавая отступы путём программирования портов оффсетов для базового графического слоя — GXOffs / GYOffs (#02af-03af / #04af-05af):

offs1		ld a,0
		inc a
		and #7f
		ld (offs1+1),a
		ld bc,GXOFFSL
		out (c),a
		ld bc,GYOFFSL
		out (c),a
		halt
		jr offs1

В данном случае прописываются смещения для младших 8 бит, а смещение производится в пределах 0-127.

Вопросы и ответы:
? Почему на экране после включения режима и выбора страницы видео цветной ШУМ?
! Начальное содержимое памяти имеет рандомный характер, что и отображается на экране. Очищайте!

? Какой адрес точки y=1?
! В зависимости от выбранного режима цветности:
При 16 цветах: y=0: #c000; y=1: #c100
При 256 цветах: y=0: #c000; y=1: #c200

? Я не пойму что отображается!
! Начальная страница экрана должна быть кратна 8. Палитра должна быть загружена и выбрана портом PalSel

? Отображается только узкая полоска!
! В зависимости от выбранного режима используется до 262 144 байт памяти, что совсем не умещается в 16к.
Переключайте страницу видео и рисуйте дальше!

Литература:
Графические режимы TS-Config
F.A.Q.

6 комментариев

avatar
Продолжаем расширять сознание.
Буду рад ответить на вопросы по этой теме.
  • VBI
  • +2
avatar
Не будешь против, если я по следам сделаю какой-то однофайловый док?
avatar
не буду. Бриз тоже предлагает.
avatar
Литература:
Графические режимы TS-Config
F.A.Q.

Не найдено. File not found!
  • idxi
  • 0
avatar
готово, сээр
avatar
О! Новые адепты конфы? Что будем кодить?)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.