TSconf: Gfx layer
Спрайты, тайлы… Возможно, этого нам и хватило-бы…
Но под этими слоями находится базовый слой графики.
Итак, у нас есть экран со своим внутренним скроллом.
Вывод на экран представляет собой запись данных в страницу видеопамяти по нужному адресу.
В зависимости от выбранного режима цветности, запись одного байта позволяет вывести одну (256 цветов) или две (режим 16 цветов) точки за раз. В режиме 16 цветов старшая тетрада отвечает за номер цвета в палитре для левой точки, младшая — для правой.
В режиме 256 цветов — байт точки указывает цвет в палитре.
Каков выбор разрешения?
Задаётся всё это битами порта VConfig (#00af):
Дополнительно этот порт предлагает нам бит включения/отключения отображения графики и бит вкл/выкл спрайтово-тайлового движка.
В первом случае — при отключении графики мы увидим чистый экран заданного бордером цвета. Во втором — спрайтовые и тайловые слои не будут отображаться.
Отключение неиспользуемых слоёв приводит к освобождению ресурсов системы и позволит, например, больше передать данных DMA за строку.
Давайте что-нибудь выведем на экран.
Проще всего, думаю, организовать вывод картинки с помощью DMA — пусть железо работает, процессор в это время думает, а человек отдыхает :)
Итак, выведем изображение в режиме 16 цветов, размером 256х256 точек.
Для этого необходимо подготовить порты, указав желаемое разрешение, цветовой охват, адрес страницы видеопамяти:
Отметим, что палитра для графики имеет номер 0. Напомню, что стандартная начальная палитра zx spectrum у нас расположена в последней, 15-й палитре.
Всё, изображение стоит на экране, начиная с координаты 0х0.
Очень просто можно это изображение подвигать по экрану, задавая отступы путём программирования портов оффсетов для базового графического слоя — GXOffs / GYOffs (#02af-03af / #04af-05af):
В данном случае прописываются смещения для младших 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.
Но под этими слоями находится базовый слой графики.
Дао говорит: Слой графики отображает данные, которые находятся в страницах памяти. Первая страница для отображения (её адрес обязательно кратен 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 комментариев
Буду рад ответить на вопросы по этой теме.
Не найдено. File not found!