Page 1 of 8

Хранение бордера

PostPosted: Sat, 10.08.2013 22:53:48
by moroz1999
Дайвер сделал работу, активно задействующую бордер.
Предлагаю оговорить формат хранения, чтобы как-нибудь унифицировать и сделать универсальный просмотрщик на реале и на zxart.
Какие есть вопросы?
1. Сколько точно строк делать по вертикали?
2. Какое максимальное разрешение? А если с техникой алоне кодера в деме с котом? Или оно не применимо для статики?
3. Как хранить в памяти, чтобы просмотрщик с ума не сошел?

Re: Хранение бордера

PostPosted: Sat, 10.08.2013 23:33:48
by TS-Labs
Предлагаю хранить в формате run-length такого типа: цвет бордера, кол-во пикселей. 1 пиксель = 1 такт 7МГц или 0.5 такта 3.5 - этого достаточно. Цвет бордера с брайтом, ибо тиритищски такую картину можно вывести на АТМ. Чтоб потом 2 раза не вставать.
Сначала перевести все тысячи картинок (хе-хе) вручную в такой формат (я это могу автоматизировать в анрыле, это недолго). Далее можно будет сваять конвертер, который позволит из этого формата собирать модуль с "плеером". Еще далее, было б труЪ сделать редактор. Ограничение ессно накладывается на минимальный размер элемента изображения, зависит от реального кол-ва тактов, которое займут соответствующие команды проца. Т.е. заранее в процессе рисования учитывать реальные условия, чтоб не создать файл, который физически нельзя будет отобразить на железе.
Предлагаю сразу учесть 2 варианта: 3.5МГц для классики и 7 - для пентевы и других клонов с новейтовой турбой 7МГц. Хранить все в условном формате 7МГц. Для 3.5 просто устанавливать более жёсткие ограничения на разрешение.

Re: Хранение бордера

PostPosted: Sun, 11.08.2013 02:47:57
by TS-Labs
Уточнение: в run-length хранить только бордерную составляющую. Пиксельная часть - все те же 6912.

Re: Хранение бордера

PostPosted: Sun, 11.08.2013 03:47:04
by introspec
Я сейчас работаю над более-менее универсальным просмотрщиком для статического бордера. Для работы дайвера я написал очень быстрый говнокод для пентагона (что там с релизом я не знаю, но программа существует); скоро будет доделана более человеческая программа, поддерживающая всю классику, пентагон и скорпион. Есть несколько проблем и ограничений, которые стоит обсуждать.

1. Над экраном у 48к и пентагона - 64 строки. У 128к - 63 строки. Я считаю, нужно хранить 64 строки. В самом экране 192 строки. Под экраном у классики 312-64-192-16=40 строк. Под экраном у пентагона 48 строк. Эмуляторы рисуют по-разному; сочетания реалов с мониторами тем более непредсказуемы. С моей точки зрения нужно хранить 64+192+48=304 строки, т.е. случай максимум, и иметь в виду, что просмотрщику придётся обрезать картинку при показе на конкретном компьютере.

2. Есть существенная разница между тем, что можно рисовать на пентагоне и тем, что можно рисовать на всех остальных машинах. Фактически, бордюрный пиксель на пентагоне - 2х1 обычных пикселя. Бордюрный пиксель на классике и других клонах - 8х1 обычных пикселя. Если мы хотим переносимости между моделями, есть смысл остановиться на 8х1, хотя я могу себе представить и другие точки зрения на этот вопрос. Картинка дайвера - в 8х1. Я пишу свой просмотрщик для 8х1. Технически, по реализации, пиксели 2х1 мало чем отличаются, но мне непонятно, вот так, с ходу, что просмотрщику делать с картинкой 2х1 на 8х1 компьютере.

3. Картинку 8х1 я буду хранить в виде последовательности чисел - цветов бордерных "пикселей" 8х1 слева направа, сверху вниз. Всего в строке на спектруме 224 или 228 тактов, что соответствует 56 или 57 знакоместам. Я не стал детально разбираться в размерах вертикальных полей для разных моделей; у себя я буду хранить в каждой строке 48 чисел, т.е. 48 знакомест. Это перекрывает поля во всех известных мне эмуляторах и близко к теоретическому максимуму ширины по отрисовке. Итого, один кадр занимает 6912+48*304=6912+14592=21504 байта. Это очень неэффективно, но удобно в работе и отлично жмётся. Конечно, есть смысл думать о более компактном способе хранения. Я пока не вполне для себя определился, как "лучше" и всерьёз думаю выкинуть все пиксели оказывающиеся "под экраном"; в это случае потребуется хранть 6912+48*64+(8+8)*192+48*48=6912+8448=15360 байт. Другой очевидный вариант - хранить по два цвета на байт, т.е. 6912+48*304/2=6912+7296=14208 байт, ну или 11136 байт если ещё и не хранить данные под экраном. Так как пока что я делаю тупой просмотрщик статической графики, я не вижу для себя смысла быть особенно бережливым. Хотя, пока просмотрщик ещё в работе и я для себя не вполне определился, чего я хочу больше всего :)

Если бы я попробовал быть настолько же расточительным для пентагоновских 2х1 пикселов, мне бы не хватило машинной памяти.

4. Хотя картинка и состоит из "пикселей" 8х1, никакой просмотрщик не сможет менять цвет чаще чем один раз за три таких пикселя. За выполнением этого правила должен следить художник. Исключения - пиксели около кромок бордюра и экрана (реализация этого принципа - это одна из причин ограничения визуальной ширины картинки в 48 знакомест). Если скормить картинку, нарушающую этот принцип в просмотрщик, ожидаемый результат не будет получен, картинка будет отображена неверно. В принципе, можно ловить такие моменты в просмотрщике, но, имхо, более полезно бы было ловить это в пиксельном редакторе, на стадии рисования.

5. Бордюрный гигаскрин будет реализуем на этом движке почти тривиально, хотя в 48к могут возникнуть различные затруднения с объёмом памяти, занятым просмотрщиком. Я не вижу совершенно никаких технических трудностей для реализации такого эффекта на 128к машине. Бордюрный гигаскрин мы обсуждали и имеем в виду, но пока больше озабочены реализацией стандартных цветов на стандартных машинах. В моём понимании, бордюрный гигаскрин интереснее для картинок в гигаскрине, так что есть смысл делать специальный, отдельный просмотрщик под это дело, работающий только на 128к машинах.

Кажется, ничего не забыл :)

Re: Хранение бордера

PostPosted: Sun, 11.08.2013 06:54:35
by diver
introspec, про количество цветов на бордере еще не написал. Возможно или нет запилить сразу все 8 цветов?

Re: Хранение бордера

PostPosted: Sun, 11.08.2013 07:01:36
by diver
Кстати, еще смежный вопрос. Если в 6912 будет мультиколор, то любой бордер будет возможно показывать с любым мультиколором?

Re: Хранение бордера

PostPosted: Sun, 11.08.2013 08:06:37
by g0blinish
мне кажется, это все изврат.
некий чиптюнский формат тащит с собой джва файла - трэк и саунд банк, расширения имен файлов разные, имя одинаковое.

с .scr будет путаница, кому 6912 подавай, а кому-то .scr и все тут.

сделайте дополнительный файл .border и дело с концом)

Re: Хранение бордера

PostPosted: Sun, 11.08.2013 10:01:47
by diver
g0blinish wrote:мне кажется, это все изврат.
некий чиптюнский формат тащит с собой джва файла - трэк и саунд банк, расширения имен файлов разные, имя одинаковое.

с .scr будет путаница, кому 6912 подавай, а кому-то .scr и все тут.

сделайте дополнительный файл .border и дело с концом)

Пока так и есть, я сдавал на пати дамп бордера и scr отдельно. Вопрос в том, насколько обобщать формат. Мы пока ограничились возможностями классического спектрума. У пентагона возможности шире (позиционирование 2 пикселя, длина линии - короче), у атм еще шире (брихт на бордере).

Я пока планирую рисовать только под классику.

Re: Хранение бордера

PostPosted: Sun, 11.08.2013 10:04:18
by g0blinish
diver wrote:Пока так и есть, я сдавал на пати дамп бордера и scr отдельно. Вопрос в том, насколько обобщать формат

пресловутый g2f позволяет выгружать картинку в .xex(исполнимый бмнарный файл) и в .asm.
может, introspec это осилит?)

Re: Хранение бордера

PostPosted: Sun, 11.08.2013 15:25:38
by diver
Зачем. Он делает вьювер для дампа, пофикшенный под все машины.

Re: Хранение бордера

PostPosted: Sun, 11.08.2013 15:45:59
by g0blinish
diver wrote:Он делает вьювер для дампа, пофикшенный под все машины.

Жаль. БордерТрон гонит картинку под разные тайминги, хотя и кривовато имхо. или руки мои кривоватые :smoke:

Re: Хранение бордера

PostPosted: Sun, 11.08.2013 18:54:55
by introspec
Чё за дурацкий форум, даже цитирование в хроме не пашет... :(

diver, вопрос 1: там есть небольшая заминка, из-за которой сделать все 8 бордюрных цветов "в лоб" и одновременно не выходит. Если писать код вручную, можно импровизировать, научить этому универсальный просмотрщик сложнее. На данный момент я вожусь с одним грязным хаком, который, если мне сойдёт это с рук, решит эту проблему. В противном случае, возможно, нам придётся пока ограничить художников 6-ю цветами из 8 возможных. Точнее, 5-ю цветами + чёрным.

diver, вопрос 2: мультиколор+бордюр, вообще, сложен, т.к. хотя бордерный просмотрщик и делает немного, он "простаивает" очень нерегулярно, и этими простоями сложно воспользоваться. В самом общем случае, с достаточно пёстрым бордером, времени реально останется очень мало. При этом, не все потеряно: если ограничиться 128к машинами, можно совершенно тривиально прикрутить к бордюру мультиколор 8х4. Т.е., в моём представлении, самыми толковыми режимами для статики на ZX кажутся мне либо мультиколор 8х2 без бордюра, либо мультиколор 8х4 с бордюром. Плюс вариации гигаскринов: либо простой гигаскрин (с гигаскриновым же бордюром), либо мультигига 8х4 с гигаскриновым бордером (самый сложный тут вариант, но вполне реализуем).

g0blinish, можно будет сделать конвертор из бордертрона в мой формат, если есть желание/необходимость, хотя мне это не очень интересно. Мой просмотрщик уже сейчас может показать любую графику из бордертрона (пока пентагон only, но это чисто техническая заминка). Обратное неверно.

Re: Хранение бордера

PostPosted: Sun, 11.08.2013 18:59:17
by g0blinish
introspec wrote:g0blinish, можно будет сделать конвертор из бордертрона в мой формат, если есть желание/необходимость, хотя мне это не очень интересно.

нет, речь шла о фиче - выгрузке результата в .ASM. А с бордертроном сколько ни ебись, по краям не получишь ничего - только картинку сверху и снизу.
и в довершение всем несчастьям - кратный 4 тактам код впихивать просто задолбаешься.

Re: Хранение бордера

PostPosted: Sun, 11.08.2013 19:01:29
by introspec
Забыл про asm. Сделать можно всё что угодно, но не очень понятно, насколько это полезно. Итоговый ассемблер довольно хрупкий, зависит от времянок машин и прочих суеверий, с реально анальным типом кода, особенно чтобы добавить левор и правое поле под классикой. Музыку просто так на это на наложишь (т.е. можно, но нужно *реально* знать что делаешь), добавить эффект, не понимая происходящего, тоже почти без шансов. Не то чтобы мне жалко, но я реально не вижу, кому такой ассемблер может пригодиться.

MGDMA - мой лучший код на спектруме, и даже он никому нафиг не сдался. Не верю, что бордерный говнокод может заинтересовать кого-то даже теоретически.

Re: Хранение бордера

PostPosted: Sun, 11.08.2013 19:05:17
by introspec
Ещё одно соображение: мой просмотрщик будет смотреть на текущую машину, и генерировать код бордера на лету.
Т.е., наверное, нужно думать о релизе кода самого просмотрщика, чтобы вставлять в чужие программы.

Re: Хранение бордера

PostPosted: Sun, 11.08.2013 20:05:49
by LessNick
introspec wrote:Чё за дурацкий форум, даже цитирование в хроме не пашет...


Не надо гнать на форум! :) Для того, что бы сделать цитирование, нужно сначала выделить то, что ты хочешь цитировать ;) в отличии от…

Re: Хранение бордера

PostPosted: Sun, 11.08.2013 20:17:36
by introspec
breeze wrote:Не надо гнать на форум! Для того, что бы сделать цитирование, нужно сначала выделить то, что ты хочешь цитировать в отличии от…

Крестный поклон, добрый человек, век помнить буду, и детям накажу! :)))

А что нужно выделить, чтобы армия смайлов из редактора сгинула?

Re: Хранение бордера

PostPosted: Sun, 11.08.2013 23:31:14
by LessNick
Тест :)

introspec wrote:А что нужно выделить, чтобы армия смайлов из редактора сгинула?


Совсем сбоку их не убрать, но в профиле можно отключить:

enelnelk.png
enelnelk.png (33.82 KiB) Viewed 26149 times

Re: Хранение бордера

PostPosted: Sun, 11.08.2013 23:43:41
by TS-Labs
introspec wrote:Итоговый ассемблер довольно хрупкий, зависит от времянок машин и прочих суеверий

Есть такие ключевые слова: fully deterministic operation. Спектрум работает примерно так же. Так что претензии про суеверие не принимаются. А вот неумение рассчитать такты, да еще при наличии эмуляторов, это уже ваще.

Re: Хранение бордера

PostPosted: Mon, 12.08.2013 00:14:48
by introspec
breeze wrote:Совсем сбоку их не убрать, но в профиле можно отключить

Да нет, в постах мне по барабану, мне бы в редакторе их убрать. Они мне на лэптопе просто всё окно выносят, что бесит.

Re: Хранение бордера

PostPosted: Mon, 12.08.2013 00:28:29
by introspec
TS-Labs wrote:Есть такие ключевые слова: fully deterministic operation. Спектрум работает примерно так же.

LOL, что-то толсто очень :)

Я же только придуриваюсь скромным, а цену себе знаю.

Отвечу вопросом на вопрос: сколько ты знаешь реальных программ на спектруме, которые бы овладели детерминизмом платформы до такой степени, чтобы без стонов, визгов и подкручивания поддерживали бы реалтайм выравнивание до пикселя (т.е. не строки, а именно с вертикальными кромками) и работали бы, скажем, на всех вариациях классики, пентагоне и скорпионе? Т.е. не пять фиксов под пять компов, а именно поддерживали, из коробки. Если что, интерес у меня неподдельный, т.к. таких программ реально немного. Я лично знаю только одну.

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

Re: Хранение бордера

PostPosted: Mon, 12.08.2013 02:05:42
by LessNick
introspec wrote:мне бы в редакторе их убрать.


Без проблем. Если не нравится тот или иной элемент на сайте можно с помощью дополнения Stylish (есть под FF/Chrome) написать своё правило и вуаля :) Например для этого форума, что бы скрыть блок смайликов достаточно прописать:

Code: Select all
div #smiley-box {
  display: none;
}


klemflwkenfwlekfnw.png
klemflwkenfwlekfnw.png (20.08 KiB) Viewed 26131 times

Re: Хранение бордера

PostPosted: Mon, 12.08.2013 02:17:20
by TS-Labs
introspec wrote:сколько ты знаешь реальных программ на спектруме, которые бы овладели детерминизмом платформы

Не знаю сколько. Но не вижу проблем такие программы создавать. А то, что ручки кривые, и демки пишут наощупь - знаю.
Кодебастерсам например не составило труда написать 100500 эффектов, да еще портировать под пентагон тот же Shock Megademo.
Касательно портабильности - глупость ящитаю. Сделать универсальный код нельзя. Как ты портируешь пентагон под резинку - тупо не хватит тактов. А привязываться к резинке - бред.

Re: Хранение бордера

PostPosted: Mon, 12.08.2013 02:32:46
by introspec
TS-Labs wrote:Но не вижу проблем такие программы создавать. А то, что ручки кривые, и демки пишут наощупь - знаю.

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

TS-Labs wrote:Сделать универсальный код нельзя. Как ты портируешь пентагон под резинку - тупо не хватит тактов.

Именно поэтому мы привязаны к резинке. Картинку дайвера показать на резинке - можно. Даже на 48к.

И не нужно называть мои религиозные предпочтения бредом! :)

Re: Хранение бордера

PostPosted: Mon, 12.08.2013 02:33:42
by introspec
breeze wrote:Например для этого форума, что бы скрыть блок смайликов достаточно прописать

Wow. Вот это я понимаю жизнь! Спасибо большое, сорри что отнял так много времени.