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.6ббLE, а также в рас─ ширенной вариации от DDp подсоединялась к Pentagon 1024 SL2.x. Схема палитры от DDp может быть подключена в принципе к лю─ бому Speccy, но пока страдает из-за отсут─ ствия поддержки в эмуляторах. * * * При разработке ATM Turbo в 1991 году и Turbo 2/2+ в 1993 ставилась цель сделать на Спектруме графику "как на IBM", что вы─ ражалось в копировании геометрии одного из видеорежимов EGA (а именно320x200, но по пожеланию разработчиков - с квадратными пикселями). К геометрии EGA прилагалась EGAшная же палитра в 64 цвета,которую было несложно реализовать на 1SSPY2 (SN7489), причём без каких-либо лишних ЦАП. Как работает палитра? Палитра организована как внешнее уст─ ройство - номер ячейки и на отрисовку,и на запись определяется поступающим с компью─ тера RGBI сигналом, а данные записи для ячейки берутся из шины данных процессора при обращении к порту#FF. Поскольку в па─ литре 6 бит, два бита в байте не использу─ ются. Порядок цветов в байте был выбран довольно оригинальный -%grbG11RB. RGBI здесь - это не цвет бордера, а именно цвет текущего выдаваемого пикселя (без гашения). Но писать в палитру рекоме─ ндуется именно выбирая цвет бордера, в на─ чале развёртки экрана. Поскольку порт#FE не поддерживает яркость бордера (доступны толькоRGB ), был добавлен такой же порт #F6, запись в который включает на бордере яркость(I) - так мы можем выбрать на бор─ дере любой из 16 цветов. В 2009 году появилась схема 12-битной палитры на 4096 цветов от DDp (http:// realddp.narod.ru/zx/palЧЧ4/index.htm ) - изначально довесок для Pentagon 102ЧSL2.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.6ббLE выбран совмещённый вариант доступа к палитре - чтобы можно было кроме АТМовских программ запускать и демонстрационные программы от 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,#ABOF;6912,turbo ;(D=%1010t000 for EGA, ;%1010t010 for multicolor) LD BC,#BD77;open ports and palette CALL OUTDOS SETPALO 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,SETPALO 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,#ABOF;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 #бFбF,#ЧEЧE,#2D2D,#OCOC 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-й. Будьте бдительны :)
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября