Краткое описание видеорежимов ZX Spectrum Next

Давно уже занесло меня на сайт ZX Spectrum Next и там заинтересовали количество и состав видеорежимов этой машины. Сам ZX Spectrum в этом плане был скуп и имел только один видеорежим — 256*192 монохрома раскрашенного по два цвета в знакоместах 8x8 которые начинаются по адресу $4000 (16384) и занимают 6144 байта на монохромный битмап и 32*24=768 байт на атрибуты знакомест сразу после битмапа.

Можно сказать что этот видеорежим составляет изначальный «слой ULA». Небольшой ликбез: Uncommited Logic Array (ULA) вообще означает особый процесс создания микросхем, но в спектруме в такую «кастомную» микросхему было заложена вся его особенность, включая видеоконтроллер и поэтому аббревиатура ULA плотно ассоциируется в мире спектрума со всеми такими вещами.

И раз на Hype появилась статья про программирование слоя спрайтов, то я решил эту свою статью вкратце описывающую видеорежимы Next на русском перевыложить и тут (ранее считал что она слабовата технически, но в общем то почему нет?). Сразу дисклеймер: так как я вчитывался в первый и единственный раз, то возможно что-то пропустил или даже исказил — буду рад любым поправкам, если заметите ошибки.

Вообще изображение может состоять из следующих слоёв:
1. Слой ULA
2. Тайловая карта
3. Спрайты
4. Слой 2 (Layer 2)
Всех их можно комбинировать (прятать и выводить в разных комбинациях управляя порядком).

Слой ULA
Слой ULA, однако, не остался неизменным, хотя все модификации продолжают гнездится во второй странице в 16Кб памяти компьютера. Его можно переключить в следующие дополнительные видеорежимы:
  1. Timex Sinclair Double Buffering — стартовый адрес видеопамяти можно переключить на адрес $6000 вместо $4000 (т.е. во вторые 8Кб страницы) и таким образом реализовать две страницы (тут следует заметить, что Next поддерживает и двойную буферизацию видеопамяти из ZX Spectrum 128 где видеобуфер мог располагаться совсем в другой странице (16Кб) памяти)
  2. Timex Sinclair Hi–Res Mode — удваивает горизонтальное разрешение до 512x192 при этом с адреса $6000 хранится второй битмап с добавленными колонками, но при этом вообще отваливаются атрибуты и изображение становится тру монохромным!
  3. Timex Sinclair Hi–Color Mode — в этом режиме уже область атрибутов начинается с адреса $6000 и при этом на каждый байт полоски монохромного изображения 8x1 идёт байт атрибутов с тем же смыслом что раньше и с той же раскладкой в памяти что и у битмапа — собственно атрибутов. Т.е. это такой узаконенный мультиколор 8x1 без проблем.
  4. LoRes Layer/Radasjimian Mode — аналог одноимённого режима из ZX Uno — 128x96 256–цветных пикселей. Первые 48 строк лежат по адресам $4000–5800, а последние — по $6000–$7800. Каждый байт — индекс в палитре, управление через порт спрайтов.
  5. Enhanced ULA — позволяет заиметь до 256 цветов на экране, но довольно странным методом. Через специальный порт программируется сколько бит в атрибуте описывает цвет единичных бит в знакоместе, а сколько — нулевых (через палитру). Т.е. опять в пределах одного знакоместа 8x8 возможно только 2 разных цвета, но их цветовые диапазоны значительно расширены по сравнению с оригинальным режимом ULA.
У меня сложилось впечатление, что все эти дополнительные расширения ULA достались Next из-за того что история его происхождения тесно связана с ZX Uno — еще одной FPGA-реализации клонов спектрума.

Тайловая карта
Тайловая карта отображает сетку тайлов 8x8 и в пикселях может иметь размер 320x256 или 640x480 (40x32 или 80x32 тайла).
Очевидно это никак не совпадает и не кратно разрешению ULA 256x192, поэтому было принято забавное решение — слой тайловой карты выступает на 32 пикселя во все стороны за слой ULA, т.е. просто покрывают большую площадь на экране.
Как обычно тайловая карта состоит из двух вещей — массив изображений тайлов (каждый тайл 16–цветный, 4 бита на пиксель, 32 байта размером) и собственно самой тайловой карты.
Тайловая карта может иметь 1 байт на тайл (тогда это просто индекс тайла) или 2 байта на тайл — тогда во втором байте можно зеркалировать каждый тайл по отдельности, выбирать ему палитры и порядок заслонения со слоем ULA если тот включен. Последний бит правда еще можно отдать под старший бит номера тайла и тогда можно вывести больше чем 256 тайлов.
Забавно, однако, что все эти данные должны лежать там же где и данные ULA — во второй странице памяти ПК, поэтому если одновременно включить и тайловую карту и ULA, то придётся сокращать число выводимых тайлов. К счастью местонахождение всех данных управляется с гранулярностью в 256 байт.

Конечно главная фича тайловой карты — регистры скроллинга которые позволяют делать плавный скроллинг заднего фона абсолютно в консольном стиле.
Однако даже официальная документация подчёркивает, что тайловая карта — самый естественный способ выводить текст.

Спрайты
Все данные по аппаратным спрайтам (и их изображения и атрибуты) хранятся в собственной памяти FPGA и процессор может общаться с ней только через порты ввода–вывода.
Так же как и слой тайловой карты размер слоя спрайтов — 320x256 пикселей и точно так же он выступает за слой ULA на 32 пикселя во все стороны.
максимально 128 спрайтов 16x16 пикселей с возможностью масштабирования в 2,4,8 раз отдельно по каждой оси.
100 спрайтов может выводится в одной строке.
16Кб памяти спрайтов может хранить 64 256–цветных спрайта или 128 16–цветных (и любые их промежуточные комбинации).

Слой 2 (Layer 2)
256–цветный битмап 256*192 палетризированных пикселя.
Слой должен занимать ровно 3 страницы по 16Кб, поэтому лежит или в логических страницах 8,9,10 или (для буферизации) в 11,12,13. Эти страницы как раз следующие после 8 стандартных страниц ZX Spectrum 128, т.е. само их использование уже предполагает что у нас ПК с 256Кб на борту и выше.
Интересно, что можно перевести первые 16Кб памяти ПК (ПЗУ) в такой режим, что при записи туда будет происходить запись в выбранную в специальном регистре текущую страницу Layer 2 — т.к. в норме запись в ПЗУ не нужна, то это позволяет экономить на переключениях страниц. Но если понадобится считывать данные, то обязательно работать через переключение страниц.
Необычно так же то, что у этого слоя тоже есть порты ввода–вывода для скроллинга.
Имхо у ZX Spectrum Next получился даже какой то «перебор» с видеорежимами и интересно будет сравнить их с нашим «ответом Чемберлену» — TS–Config.

4 комментария

avatar
Любые слои могут накладываться, хоть все сразу.
В Layer 2 можно сразу подгрузить 48кб, и вроде как недавно появился на 96кб при 512 цветах. Существует еще теневой экран Layer 2, как понял типа второго спектрумовского экрана, но опять же зачем не понял, так как мерцания в Layer 2 все равно не возможны (на эмуляторе :), железа я не имею).

Любой слой может быть обрезан до нужных размеров Clip регистрами. Это регистры с #18 по #1B. Регистр #1C отвечает за сброс определенного или всех ранее заданых размеров окон.
avatar
А какой эмулятор используете? Тоже хочу это дело пощупать так сказать…
avatar
CSpect
Тут небольшие дополнения что бы OS эмулировать.
avatar
Ну и вот это вот всё тоже пригодится :)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.