Info Guide #11
05 июля 2015

Металлолом - Палитра для ZX Spectrum в различных графических режимах.

  Палитра для ZX Spectrum
Alone Coder 

  За  эти годы появилось множество допол─
нительных графических девайсов,которые мо─
жно подключить к Speccy (речь, конечно, не
идёт  об "ускорителях", которые агрессивно 
раскручиваются  в  контексте Спектрума, но 
которые  подключить  реально  нельзя, речь 
только о настоящих устройствах): Eva V9990 
(2009),   IPVC  (2011),  SPECTRA interface 
(2012), METEOR-2013 (2013),  ZXM-VideoCard 
(2014).Возможности  у  этих видеоконтрол─ 
леров  весьма  широкие,  но  на  Спектруме
не  хватает разработчиков, чтобы поддержи─
вать всё это разнообразие в софте.

   Единственными  реально  поддерживаемыми
расширениями  графики  остаются простейшие
растровые -  в основном  режимы ATM Turbo,
под   которые  есть  десятки  игр  и  дем.
Ещё поддержаны мультиколор и hires Timex'а
(или  допаянного  Pentagon/Scorpion; hires
512x192  есть ещё в Байте ).  Появился ещё
ULAplus, он он пока существует только вир─ 
туально (понятно, что он может быть реали─
зован  паяльником, но нет схемы - есть то─
лько  эмуляторы  и прошивки FPGA некоторых
плат-конструкторов).
   А вот палитра - это такая вещь, которая
особо  не влияет на сложность разработки и
совместимость, но является приятным допол─
нением  к  функционалу  компьютера. В этой
статье  описана  реализация палитры на ATM
Turbo, которая  с  успехом  используется в 
ZX Evo и Pentagon 2.666LE, а также  в рас─ 
ширенной  вариации  от  DDp подсоединялась
к  Pentagon 1024 SL2.x. Схема  палитры  от
DDp может быть подключена в принципе к лю─ 
бому Speccy, но пока страдает из-за отсут─
ствия поддержки в эмуляторах.

                  * * *

   При  разработке ATM Turbo в 1991 году и
Turbo 2/2+  в 1993  ставилась цель сделать 
на Спектруме графику "как на IBM", что вы─
ражалось в копировании геометрии одного из
видеорежимов  EGA (а именно320x200, но по
пожеланию  разработчиков  -  с квадратными
пикселями). К  геометрии  EGA  прилагалась
EGAшная же палитра в 64 цвета,которую было
несложно  реализовать  на 155РУ2 (SN7489),
причём без каких-либо лишних ЦАП.
   Как работает палитра?
   Палитра  организована  как внешнее уст─
ройство - номер ячейки и на отрисовку,и на
запись  определяется поступающим с компью─
тера RGBI  сигналом, а  данные записи для
ячейки  берутся  из шины данных процессора
при обращении к порту#FF. Поскольку в па─
литре 6 бит, два бита в байте не использу─
ются. Порядок  цветов  в  байте был выбран
довольно оригинальный -%grbG11RB.
  RGBI  здесь - это  не  цвет  бордера, а
именно  цвет  текущего выдаваемого пикселя
(без гашения). Но писать в палитру рекоме─
ндуется именно выбирая цвет бордера, в на─
чале развёртки  экрана. Поскольку порт#FE
не  поддерживает яркость бордера (доступны
толькоRGB ), был  добавлен  такой же порт
#F6, запись  в который включает на бордере
яркость(I) - так мы можем выбрать на бор─
дере любой из 16 цветов.
   В 2009  году  появилась схема 12-битной
палитры  на  4096  цветов от DDp (http://
realddp.narod.ru/zx/pal444/index.htm  )  -
изначально довесок для Pentagon 1024SL2.x,
но  её  можно припаять и к другим спектру─
мам. Сделана она так же,как оригинал. Раз─
ница в том,что дополнительные младшие биты
цветов  берутся  из  старших разрядов шины
адреса.  При   короткой  адресации  портов
(OUT (#FF),A - в существующем  софте  как
раз  короткая  адресация)  старшие разряды
шины адреса соответствуют шине данных.
   DDp  написал несколько демонстрационных
программ  под  свою  схему: PALCLC  (выбор
цвета), RADIAL  (анимация с помощью палит─
ры), SHOWPAL  (показ  нескольких  палитр),
GIRL (мультиколорная картинка) и ART (сбо─ 
рник  картинок  под  цвет на точку на весь
диск).
   По  умолчанию  на  ATM Turbo 2 запись в
порт#FF запрещена (порт спрятан в область
портов TR-DOS, единички в данных - на мес─
те  сигналов FDC reset и FDC halt, но дос─
туп  к палитре отключаемый). В схеме DDp -
разрешена. Но схему DDp можно сделать сов─
местимой,в простейшем  случае инвертировав
сигналDOS (если мы не будем реализовывать
защиту порта). На  Pentagon 2.666LE выбран
совмещённый  вариант  доступа  к палитре -
чтобы  можно было кроме АТМовских программ
запускать  и демонстрационные программы от
DDp без их доработки. 

   Как управлять палитрой?

  Шаг 0.HALT

  Шаг 1. Включить  теневые порты и доступ
к палитре:
     LD A,%10101011;6912 screen, turbo
     ;LD A,%10100011 ;6912 screen, noturbo
     LD BC,#BD77
     LD HL,#2A53 ;out (c),a:ret в TR-DOS
     PUSH HL
     JP #3D2F      ;nop:ret в TR-DOS

  Шаг 2. Выбрать  изменяемый цвет методом
выдачи  его номера на бордер (цвета 0..7 -
OUT (#FE), цвета 8..15 -OUT (#F6) ). 

  Шаг 3. Записать данные цвета через порт
#FF:
  D0  B (Blue)(инверсный)
  D1  R (Red)(инверсный)
  D2  не используется, должен быть 1
  D3  не используется, должен быть 1
  D4  G (Green)(инверсный)
  D5  b (младший бит Blue)(инверсный)
  D6  r (младший бит Red)(инверсный)
  D7  g (младший бит Green)(инверсный)

   A8-A15  управляют дополнительными млад─
шими  битами цветовых составляющих для 12-
битной  палитры  (если она есть), в том же
порядке.

   Повторять шаги 2-3 для всех цветов.

  Шаг 4. Закрыть теневые порты:
     LD A,%10101011;6912 screen, turbo
     ;LD A,%10100011 ;6912 screen, noturbo
     LD BC,#FF77
     OUT (C),A

   Пример процедуры установки 6-битной па─
литры:

SETPAL
     HALT
     LD HL,TZXPAL+15
     LD DE,#AB0F;6912,turbo
                ;(D=%1010t000 for EGA,
                ;%1010t010 for multicolor)
     LD BC,#BD77;open ports and palette
     CALL OUTDOS
SETPAL0
     LD A,E
     BIT 3,E
     RES 3,A
     OUT (#FE),A
     JR Z,$+4
     OUT (#F6),A
     LD A,(HL);most significant bits
     DEC HL
     OUT (#FF),A
     DEC E
     JP P,SETPAL0
     LD BC,#FF77;close ports and palette
     OUT (C),D
     RET
TZXPAL
;%grbG11RB 
     DB #FF,#FE,#FD,#FC,#EF,#EE,#ED,#EC
     DB #FF,#DE,#BD,#9C,#6F,#4E,#2D,#0C

   Пример  процедуры  установки  12-битной
палитры (для теневых портов):

SETPAL12
     HALT
     LD HL,TZXPAL+31
     LD DE,#AB0F;6912,turbo
                ;(D=%1010t000 for EGA,
                ;%1010t010 for multicolor)
     LD BC,#BD77;open ports and palette
     CALL OUTDOS
     LD C,#FF
SETPAL120
     LD A,E
     BIT 3,E
     RES 3,A
     OUT (#FE),A
     JR Z,$+4
     OUT (#F6),A
     LD B,(HL);least significant bits
     DEC HL
     LD A,(HL);most significant bits
     DEC HL
     OUT (C),A
     DEC E
     JP P,SETPAL120
     LD BC,#FF77;close ports and palette
     OUT (C),D
     RET
TZXPAL
;%grbG11RB 
     DW #FFFF,#FEFE,#FDFD,#FCFC
     DW #EFEF,#EEEE,#EDED,#ECEC
     DW #FFFF,#DEDE,#BDBD,#9C9C
     DW #6F6F,#4E4E,#2D2D,#0C0C

OUTDOS
     PUSH HL
     LD HL,#2A53
     EX (SP),HL
     JP #3D2F

                  * * *

   Долгое время не было утилиты для редак─
тирования  палитры, поэтому  палитра редко
использовалась  в режиме 6912. Я набросал
такую утилиту в начале 2014 года и с небо─
льшими именениями представляю здесь.
   Итак, Palchanger (и Palchanger12, о ко─
тором  ниже) - программа настройки палитры
и  запуска  BGE (или  другой  программы) с
этой палитрой.
   Состоит, как водится, из бейсик-загруз─
чика и кодового блока. Бейсик-блок занима─
ется  дисковыми операциями - его можно от─
редактировать, чтобы  приклеить настройщик
палитры к нужной вам программе.
   У кодового блока две точки входа:32768
- редактировать   палитру, 32771 - просто
установить  палитру. То есть вы можете за─
менить редактор просто на установку палит─
ры, если исправите бейсик.
   Пример  использования  Palchanger'а как
установщика   палитры - раскрашенная  игра
AMC1:http://alonecoder.nedopc.com/zx/ 
AMC1pal.zip. Для  раскрашивания старых игр
совершенно не нужно их ломать :)
   Кроме  программы под стандартную 6-бит─
ную палитру "PALCHG" прилагается программа
под полную 12-битную палитру "PALCHG12". У
PALCHG  кодовый  блок называетсяpalchg, а 
палитра pal  (палитра в 16 байт в формате
%grbG11RB ). У PALCHG12 кодовый блок назы─
вается palchg12, а палитра pal12 (палитра
в 32 байта, каждый цвет хранится в порядке
старший-младший). На  самом  деле  это две
разных  программы,  они  компилируются  из
разных исходников, которые  вы тоже можете
найти на диске.
   Палитра  грузится  бейсиком  при старте
программы.

   Управление:
  -стрелки- выбор цвета.
  -r- изменить красную составляющую.
  -CS+R- изменить  младшую часть красной
составляющей (только в PALCHG12). 
  -g- изменить зелёную составляющую.
  -CS+G- изменить  младшую часть зелёной
составляющей (только в PALCHG12). 
  -b- изменить синюю составляющую.
  -CS+B- изменить  младшую  часть  синей
составляющей (только в PALCHG12). 
  -0- обнулить цвет.
  -Enter- выход  в  бейсик-блок  (грузит
BGE или другую программу,которую вы впише─ 
те в последней строчке бейсик-блока). 
  -s- выход  в бейсик-блок с сохранением
палитры в файл. 

   Для примера прилагается сконвертирован─
ная  картинка"lisa". Чтобы загрузить кар─
тинку  при  старте  Palchanger'а,  держите
Space во время загрузки, потом введите имя
картинки. Так вы сможете редактировать па─
литру на фоне картинки.
   Чем  сконвертирована  картинка? Всё тем
же конвертором con18:http://
alonecoder.nedopc.com/zx/con18pal.rar
   К  сожалению, конвертор  пока  не умеет
находить лучшую палитру сам. Для конверсии
с  палитрой  создайте 16-цветную палитру в
формате.act (Photoshop) и загрузите  её с
помощью кнопки "Pal".

  В   старых   версиях  эмулятора  Unreal
Speccyимеется баг - 8-й цвет выглядит как 
0-й. Будьте бдительны :)




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Дебют - подробно рассматривается одна из самых увлекательных адвентюр - "Robin of Sherwood".
Железо - Из-за чего происходят помехи в модемной связи.
Итоги года - чем же ознаменовался прошедший год? Обзор Спектрумовских событий каждого месяца 2002 года.

В этот день...   23 сентября