Page 1 of 3

sXg: Spectrum eXtended Graphics

PostPosted: Tue, 03.03.2015 12:49:34
by LessNick
По просьбе TS-Labs бэкаплю статью.

Давным-давно, кажется в прошлую пятницу,… нет, не медвежонок. Мы общались с Moroz1999 на предмет в каком формате хранить графику для расширенных режимов ZX Spectrum. На сегодняшний день у нас есть несколько ZX Spectrum-совместимых компьютеров, которые могут отображать 16 или более цветов, без клешенга атрибутов, это ATM (Turbo), Profi, Scorpion+GMX, Sprinter, Pentagon SL 2.2 и конечно же любимец публики PentEvo, он же ZX Evolution от команды NedoPC.

Image

Вот о последнем мне бы и хотелось поговорить подробнее.

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

Image

Понятно, что в былые годы, когда создался АТМ, никто из разработчиков не советовался с художниками, как мол лучше реализовать расширенный графический режим. Да и была ли такая возможность, повлиять на архитектуру, мы уже не узнаем. В прочем да не суть. Как художнику такое ограничение было не по душе, это как «видит око да зуб неймёт». Мало того в цветовой палитре АТМ достаточно не просто рисовать, так и ещё ограничение видимой области всего-лишь 320x200 точек.

К счастью в своё время появился такой человек как TS-Labs, и несколько «раздвинул» границы возможностей PentEvo. Добавив нормальную, линейную структуру видеопамяти, расширив отображаемую область до 360x288 точек и самое главное сделав возможным отображение одновременно 64 цветов на экране.

Но и на этом работа не была закончена. Последняя прошивка (TS-Conf) на обычном ZX Evolution (без доработок железа и не смотря на ограничения в 6 bit) позволяет одновременно отображать до 15625 оттенков (по 25 градаций на каждый из основных цветов) за счёт видео-ШИМ.

Image

С помощью ШИМ достигается большее количество оттенков путем создания мелкой текстуры из соседних градаций. (Размер суб-пикселя текстуры равен 1/8 размера спектрумского пикселя.) Это неплохо отображается на CRT-дисплеях (трубках), но на LCD, из-за оцифровки видеосигнала, происходит интерференция между суб-пикселями текстуры и частотой видео-АЦП; суб-пиксели превращаются в жирные линии.

Поэтому прошлым летом (2014) TSL была выпущена отдельная плата VideoDAC, которая вставляется вместо IDE (да пришлось чем-то пожертвовать).

Image

Данная плата позволяет отображать 15625 цветов на любом мониторе без искажений, а также использовать полный диапазон палитрового ОЗУ 5 бит на компоненту - 32768 цветов.

Вот! Вот она рыба графика моей мечты. Но я немного отвлёкся вернёмся к нашим другим ZX Spectrum - совместимым компьютерам.

По причине скудной информации, да и вообще малой активности в данных направлениях (расширенная графика), отсутствия софта использующего данные режимы, Трудно сделать обзор остальных ZX Spectrum-cовместимых компьютеров. Исключение составляет, разве что Sprinter (ну он изначально был PeeCee-ориентирован) поэтому там графика VGA и Pentagon SL 2.2 с расширенным графическим режимом 256x192, где каждая точка может быть своим цветом. Разработке 16с и активному продвижению данного режима, мы обязаны не без известному Alone Coder'у. Хотя надо отдать должное, в своё время DDp доработал Pentagon SL 2.2 и сделал возможным задавать палитру. Жаль что это так и не пошло в массы.

Image

Image

Про Scorpion'овский GMX вообще сложно что-либо сказать вразумительное, ну а по поводу графических режимов Profi тоже оставляет желать лучшего. Да и собственно графических работ для этих платформ я так и не нашел.

Но вернёмся к собственно к теме разговора — «sXg: Spectrum eXtended Graphics». Итак получается, что потенциальными «клиентами» кому мог бы понадобится новый формат, или если хотите стандарт, это ATM и PentEvo. Поскольку в ATM очень хитро устроена структура видеопамяти, да и в добавок он имеет ограничение по цветам. Я решил смотреть в сторону TS-Conf и линейной адресации памяти.

В результате чего получилась такая структура файла:

Code: Select all
+#0000 #04 #7f+"SXG" - 4 байта сигнатура, что это формат файла SXG
+#0004 #01 1 байт версия формата
+#0005 #01 1 байт цвет фона (используется для очистки)
+#0006 #01 1 байт тип упаковки данных (#00 - данные не пакованы)
+#0007 #01 1 байт формат изображения (1 - 16ц, 2 - 256ц)
+#0008 #02 2 байта ширина изображения
+#000a #02 2 байта высота изображения

(далее указываются смещения, для того, что бы можно было расширить заголовок)
+#000c #02 смещение от текущего адреса до начала данных палитры
+#000e #02 смещение от текущего адреса до начала данных битмап

Собственно начало данных палитры
+#0010 #0200 512 байт палитра

и начало данных битмап
+#0210 #xxxx данные битмап


Как видите ничего сверх естественного нет, но пытливый ум уже точит сомнения, для чего было «изобретать велосипед», когда есть замечательный формат BMP. Ну начнём с того, что это чудо-формат был изобретён дядей Биллом(?) ещё чёрти когда для PeeCee. У это формата есть ряд странностей, таких как, выравнивание отступов кратных четырём (например если у вас картинка шириной 26px, то внутри bmp каждая строка будет дополнена нулями до 32px), так же изображение хранится по умолчанию вверх ногами (конечно можно задать флаг и перевернуть изображение, но это опять же излишние телодвижения), ну и самое главное это формат в котом хранится палитра. Которая так же может быть дополнена нулевыми значениями (по усмотрению создающей программы). Вот и выходит, что для того что бы отобразить BMP на ZX Spectrum машинного времени потребуется гораздо больше, а мы, если вы ещё не забыли, на Z80.

Ну и в дополнение, ещё скажу, что по сути sXg это формат дампа видеопамяти, данные не требуют дополнительной обработки, то существенно сокращает их чтение с диска с последующим размещением в видеопамяти.

И ещё небольшой бонус. Поскольку изображение могут быть гораздо меньшего размера (не на весь экран) логично было бы задать цвет фона (перед очисткой). Для этого служит 5й байт, в котором хранится предпочтительный цвет фона изображения. Конечно программ отображающая картинку может смело игнорировать это и вместо этого сделать чёрный фон, например.

Итак формат готов, осталось как-то получить данные в этом формате. Для этого была написана небольшая консольная утилита для PeeCee — bmp2sxg:

Image

Утилита проста в использовании. На вход задаётся имя файла в формате BMP(да да, никуда нам от него не деться) и на выходе получаем файл в формате SXG. Поддерживаются любые картинки в формате не больше 8бит (256ц) и размером не более 512x512.

При желании картинку можно ограничить палитрой ATM (64 цвета без шим) задав соответствующий ключ --64. По умолчанию цвет фона выставляется, как 0й цвет из палитры (это может быть не обязательно чёрный цвет), но можно задать его принудительно с помощью ключа --bg nn, где nn - соответственно номер из палитры файла.

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

Image

Как видно из скриншота, некоторые программы на PeeCee могут так же «растягивать» палитру дополняя её не используемыми цветами, тем самым увеличивая его размер.

Не смотря на то, у sxg уже вторая версия header'а, это скорее пока прототип, нежели законченная версия, поэтому с радостью выслушаю пожелания предложения по улучшению данного формата.

Ну и осталось самое сладкое. Всё это хорошо и замечательно, но как нам всё это увидеть на реальном железе?

Image

Как вы уже возможно знаете, одним из моих проектов является Command Line Interface (сокращенно CLI), поэтому именно под эту систему и была написана небольшая утилита loadsxg.

Данная утилита позволяет загружать в видеопамять файл в формате sxg, «центровать» (если изображение меньше), выставлять цвет фона, а так же можно включить режим вьёвера и скроллировать картинку если она больше чем 360x288 и не помещается на экран.

В качестве бонуса я приготовил вам артпак из 36 картинок в формате sxg:

Image

Для просмотра на реальном железе вам понадобится распаковать архив в корень SD-карты. Прописать в wc.ini строчку в разделе [PLUGINS]:

Code: Select all
CLI2    .WMF


или же можете просто переписать поверху файлы. Далее запускаем WildCommander (не ниже версии 0.62) и нажав F10 выбираем пункт CLI2:

Image

Если вы сделали всё правильно, то после запуска вас встретит приглашение «1>».

Image

Далее набираем строчку:

Code: Select all
sh /demo/bramble/run.sh


После enter запустится скрипт, который и проиграет слайдшоу «Bramble». А если у вас есть карта NeoGS (или просто General Sound), то вы ещё и отличную мелодию послушаете.

Ну и на всякий случай я записал ещё видео с слайдшоу:

http://www.youtube.com/watch?v=fQdL0VF52Og

Ну и в заключении ссылка на сам архив «Cli2+Bramble.zip».

И утилиту для PeeCee «bmp2sxg.zip». Внутри архива вы найдёте саму утилиту, а так же бонусом bat-file create. При запуске он сканирует директорию на наличие bmp файлов и автоматически преобразует их все в sxg-формат.

На этом всё. Творите больше хорошего и разного. А я в свою очередь постараюсь и дальше развивать как данный формат, так и постараюсь обеспечить его поддержку на других ZX Spectum-совместимых компьютерах.

UPD: Сделал сборку настроенного Unreal с образом диска. Достаточно нажать F10 в Wild Commander и далее по тексту. Ссылка на архив «unreal.dev.zip»

Re: sXg: Spectrum eXtended Graphics

PostPosted: Wed, 11.03.2015 19:41:06
by jimbo_77
Вечер добрый, почитал тему и очень заинтересовался. Раньше любил рисовать на ZX, ArtStudio была первой программой :vodka: . А тут за столько времени появились новые возможности. Вот сохранил палитру в фотошоповском формате, по палитре ATm от Diver может кому пригодится. Надо попробовать на досуге что-нибудь изобразить...

Re: sXg: Spectrum eXtended Graphics

PostPosted: Wed, 11.03.2015 19:59:40
by LessNick
jimbo_77 wrote:Вот сохранил палитру в фотошоповском формате,…


Ну палитра это конечно хорошо, но так по моему удобнее,… ;)

sxg_plugin_01.png
sxg_plugin_01.png (9.79 KiB) Viewed 43510 times
sxg_plugin_02.png
sxg_plugin_02.png (9.63 KiB) Viewed 43510 times

Re: sXg: Spectrum eXtended Graphics

PostPosted: Wed, 11.03.2015 22:16:06
by evovxn
breeze wrote:Ну палитра это конечно хорошо, но так по моему удобнее,… ;)

А эти палитры из фотошопа экспортируются? Хотелось бы их себе заиметь. :confused: Тем более, что мне кум графический планшетик на попользоваться дал...

Блин, на пикче же написано Import/Export.:) breeze, а можно эти палитры архивом на форум выложить?

Re: sXg: Spectrum eXtended Graphics

PostPosted: Thu, 12.03.2015 17:31:18
by LessNick
EVOVXN wrote: breeze, а можно эти палитры архивом на форум выложить?


Это не просто палитры, это я плагин к фотошопу пишу. Тыкаешь левой кнопкой мыши устанавливается цвет, если тыкнуть правой второй цвет.

EVOVXN wrote:на пикче же написано Import/Export.


Это всё ещё в процессе, надеюсь будет Import/Export в SGX, что бы сразу на PentEvo смотреть.

Re: sXg: Spectrum eXtended Graphics

PostPosted: Thu, 12.03.2015 18:38:55
by evovxn
breeze wrote:Это не просто палитры, это я плагин к фотошопу пишу.

breeze wrote:надеюсь будет Import/Export в SGX, что бы сразу на PentEvo смотреть.

Офигеть! А релиз плагина скоро планируется? А альфа-версию для тестов пока получить низя? :confused:
TS-Conf - она ж просто-таки идеально подходит для демо-мейкинга вообще и для рисования в частности. Хочешь - стандартный 6912, хочешь - классический амижный восьмибитный пиксель-арт!

Re: sXg: Spectrum eXtended Graphics

PostPosted: Thu, 12.03.2015 21:25:02
by LessNick
EVOVXN wrote:Офигеть! А релиз плагина скоро планируется?


Нууу, думаю скоро :)

EVOVXN wrote: А альфа-версию для тестов пока получить низя? :confused:


Ну по правде кроме «тыкалки» там ничего пока нет.

EVOVXN wrote:TS-Conf - она ж просто-таки идеально подходит для демо-мейкинга


хе хе, осталось это ещё другим рассказать понять… ;)

EVOVXN wrote:вообще и для рисования в частности.


Ну при наличии vDAC да. С ограниченной палитрой ATM это делать сложнее.

EVOVXN wrote:Хочешь - стандартный 6912, хочешь - классический амижный восьмибитный пиксель-арт!


Да, было бы желание ;)

Re: sXg: Spectrum eXtended Graphics

PostPosted: Thu, 12.03.2015 22:36:33
by evovxn
breeze wrote:Нууу, думаю скоро :)

Буду с нетерпением ждать. А ещё плагин просмотра SGX под Wild Commander. ;) Но под cli2 пак картинок под мод музыку засмотрел с удовольствием! Мегазачёт! :beer:
breeze wrote:хе хе, осталось это ещё другим рассказать понять… ;)

Количество и качество софта под TS-Conf говорят сами за себя. До появления двойной прошивки я сидел на бейзе и, честно говоря, всё реже и реже запускал Эву - довольствовался эмулями под Win. Потом начал тестить новую конфу и, мало того, что она легко освоилась и принесла дофига удобства в работу с файлами на скоростных носителях, так ещё благодаря просмотру новых демок, пикчей и игрушек захотелось снова начать активно пользоваться Эвой. И уже не только как пользователь, но и попробовать заняться на платформе TS-Conf творчеством. HYPE, кстати, тоже внёс свою лепту. До его появления, я с утра на работе первым делом заходил по нажатию клавиши "h" в адресной строке браузера на ХАБР, а теперь сначала на HYPE. :) Уверен, этим путём пройдут и другие пользователи. Тем более, что TS-Conf уже портирована на другие платформы.
breeze wrote:Ну при наличии vDAC да. С ограниченной палитрой ATM это делать сложнее.

IDE Video-DAC - это must have для каждого пользователя TS-Conf. Учитывая, что у многих LCD мониторы, максимально красивой картинки без него не получить. Да куда далеко ходить, у меня к Эве подключён 9'' элт монитор, так и то я был поражён тем, насколько лучше стала графика в демках и играх под TS-Conf. Да и в бейзе стало всё поярче. А винт - что винт? Один минус от его потери - в TS-Conf он работал с офигительной скоростью благодаря DMA. Но я пока даже не смог как следует забить файлами SD-карту на 16Gb. Так что IDE Video-DAC рулит!
breeze wrote:Да, было бы желание ;)

Желание уже появилось. Я пока что сильно нуб, позабыл и те крохи, какие пробовал кодить в 93-94 на Profi, но буду разбираться и вникать. Тем более, что благодаря факин крысису свободного времени стало больше. :)

Re: sXg: Spectrum eXtended Graphics

PostPosted: Wed, 18.03.2015 11:34:22
by jimbo_77
Тоже с удовольствием использовал бы плагин к фотошопу. Его можно будет скачать где-нибудь?

Попробовал с 64 цветами побаловаться, пока на работе часок свободный выдался.

Re: sXg: Spectrum eXtended Graphics

PostPosted: Wed, 18.03.2015 12:49:24
by VBI
jimbo_77, клёво!

Re: sXg: Spectrum eXtended Graphics

PostPosted: Wed, 18.03.2015 14:11:46
by jimbo_77
Интересно насколько шустро железо будет все это выводить на экран, к примеру в игре со скроллингом при наличии некоторого количества движущихся спрайтов в разрешении 360х288 и 64 четырех цветовой палитре или более.

Re: sXg: Spectrum eXtended Graphics

PostPosted: Wed, 18.03.2015 14:55:26
by VBI
отлично будет выводить. 2 тайловый слоя, графика, 84 спрайта.

Re: sXg: Spectrum eXtended Graphics

PostPosted: Wed, 18.03.2015 16:37:33
by jimbo_77
Звучит неплохо и очень заманчиво. Есть ли на сегодняшний день примеры работ (я так понял их пока немного), чтобы порадовать глаз и пролить бальзам на измученную современными технологиями душу))).

Re: sXg: Spectrum eXtended Graphics

PostPosted: Wed, 18.03.2015 16:46:30
by VBI
Games
Шуторы и платформеры

Re: sXg: Spectrum eXtended Graphics

PostPosted: Wed, 18.03.2015 20:00:49
by jimbo_77
Хорошие проекты. Думаю zx заслужил право на новую жизнь. Очень приятно видеть что народ не забывает свои корни. Если кому понадобится помошь с графикой обращайтесь буду рад поработать.
Свои старые рисунки поконвертил в фотошопе под разрешение и палитру 64 color
https://yadi.sk/i/5FvQHv8SfLuTD
https://yadi.sk/i/hAg0HvuwfLuRu
https://yadi.sk/i/xjUVTQgTfLuSN
https://yadi.sk/i/Nc9cZp55fLuSn

Re: sXg: Spectrum eXtended Graphics

PostPosted: Wed, 18.03.2015 21:46:43
by evovxn
jimbo_77 wrote:Свои старые рисунки поконвертил в фотошопе под разрешение и палитру 64 color

Суперские рисунки! Завидую белой завистью. Кабан - шикарен!
А мне, увы, до такого далеко. Сегодня помучал взятый на попользоваться графический планшет и маленько порисовал. Правда тут больше фотошопа, чем пиксель-арта. Парнягу, разве что, планшетом рисовал, да и то с готового рисунка.
Image

Re: sXg: Spectrum eXtended Graphics

PostPosted: Thu, 19.03.2015 01:28:47
by TS-Labs
jimbo_77 wrote:Интересно насколько шустро железо будет все это выводить на экран

Одна из концепций для игр под сабж заключается в использовании фоном графики 256с (с палитрой менее 256, например 128-192 цвета), а поверх - спрайты. Детали комнаты, которые должны быть поверх героев можно выводить тайлами (15 цветов). Достроение частей комнаты происходит в "закадровой" области экранки с ДМА и блиттером, на лету. Скроллинг такого фона может быть весьма шустрым и абсолютно укладываться в 50фпс.
То есть как.
Подготовка:
- чОрный экран, рисуем всю комнату (ДМА, блиттер) с запасом по всем краям на ширину максимального скролла за фрейм
- включаем свет.
Фрейм:
- двигаем куда хотим
- дорисовываем новый кусок в том направлении, куда двигались.

Кстати, я неинтенсивно минусую 360х288 исходя из того, что многие аппараты его не показывают. Предлагаю склоняться к 320х240.

jimbo_77 wrote:Думаю zx заслужил право на новую жизнь.

:ura:
Мечтал услышать эту фразу! Для этого тсконфа и создавалась.

Re: sXg: Spectrum eXtended Graphics

PostPosted: Thu, 19.03.2015 09:09:37
by jimbo_77
EVOVXN wrote:
jimbo_77 wrote:Свои старые рисунки поконвертил в фотошопе под разрешение и палитру 64 color

Суперские рисунки! Завидую белой завистью. Кабан - шикарен!
А мне, увы, до такого далеко. Сегодня помучал взятый на попользоваться графический планшет и маленько порисовал. Правда тут больше фотошопа, чем пиксель-арта. Парнягу, разве что, планшетом рисовал, да и то с готового рисунка.
Image


Получилось оригинально, главное больше рисовать, набивать руку и со временем качество будет прогрессировать.

По поводу палитры в 256, цвета могут быть совершенно любыми или если это определенные цвета то где эту палитру раздобыть?
320х240 конечно более стандартно, только не совсем понял что значит "неинтенсивно минусую 360х288" сорри за неподкованность в вопросе.

Re: sXg: Spectrum eXtended Graphics

PostPosted: Thu, 19.03.2015 09:31:25
by evovxn
jimbo_77 wrote:Получилось оригинально, главное больше рисовать, набивать руку и со временем качество будет прогрессировать.

Спасибо.) Буду тренироваться. Планшет дали хоть и не навсегда, но с формулировкой "вернёшь, как надоест".
TS-Labs wrote:Кстати, я неинтенсивно минусую 360х288 исходя из того, что многие аппараты его не показывают.

А в чём выражается несовместимость с мониторами? LCD не понимают режим, да?

Re: sXg: Spectrum eXtended Graphics

PostPosted: Thu, 19.03.2015 10:41:48
by TS-Labs
Режим везде один и тот же. Телевизоры новые фулл-хд обрезают кусок растра. А на старых ЭЛТ не все влазит в экран.

Re: sXg: Spectrum eXtended Graphics

PostPosted: Sat, 21.03.2015 20:49:04
by Buyan
EVOVXN wrote:Желание уже появилось. Я пока что сильно нуб, позабыл и те крохи, какие пробовал кодить в 93-94 на Profi, но буду разбираться и вникать.

Если есть желание - все получится. Сам не так давно практически с нуля начинал.
З.Ы. немного допилил картинку, рисуй еще! :)

Re: sXg: Spectrum eXtended Graphics

PostPosted: Sat, 21.03.2015 21:00:53
by VBI
Buyan, хаха XD прикол! :agree:

Re: sXg: Spectrum eXtended Graphics

PostPosted: Sun, 22.03.2015 08:49:48
by evovxn
Buyan wrote:Если есть желание - все получится. Сам не так давно практически с нуля начинал.

Ага, сейчас вечерами , вместо просмотра разно-всяких сериалов под стаканчик-другой медовухи, изучаю статьи по ассемблеру z80, смотрю видеоролики по пиксель-арту, читаю про программирование авр-ок. А всё TS-конфа виновата, уж очень у неё графические фишки замечательные!
Медовуха, правда, никуда не делась... :beer:
Buyan wrote:З.Ы. немного допилил картинку, рисуй еще! :)

Buyan, супер, из достаточно корявенького рисунка сделал прикольное интро! Я сам, когда эту пикчу рисовал, подумал, что неплохо будет смотреться, если машинные коды в надписи TS CONF будут бежать, но попросить об этом программеров постеснялся. :confused:
А рисовать ещё буду, сейчас просматриваю пиксель-арт с разных тематичных сайтов и просто в восторге. Да и графический планшет (пусть и простенький) сильно повышает скилл попадания точками нужного цвета в экран. :)

Re: sXg: Spectrum eXtended Graphics

PostPosted: Mon, 23.03.2015 12:34:48
by jimbo_77
Планшет здорово упрощает задачу. Гораздо удобнее работать с привычным инструментом чем с мышкой. Мой к сожалению недавно умер, придется брать новый.

Re: sXg: Spectrum eXtended Graphics

PostPosted: Mon, 23.03.2015 13:04:41
by jimbo_77
На днях решил попиксельартить на тему как это может выглядеть в варианте с палитрой менее 256 для фона, например 128-192 цвета, а поверх - спрайты 64 цвета. Спрайты брал 20х20 из расчета 320х240/20 =16 х 12 спайтов.