У вектора номер изменяемого цвета в палитре - это еще и номер цвета бордюра.
Вид для печати
У вектора номер изменяемого цвета в палитре - это еще и номер цвета бордюра.
Т.е. при формировании картинки со сменой палитры каждую строку при смене цвета индекса, который соотнесен с бордюром, также поменяется и цвет бордюра?
В самом простом случае, да. Может быть можно успеть поменять индекс бордюра, сменить цвет палитры и поменять индекс бордюра обратно.
В конце концов с грехом пополам все Векторы показывают картинку начального загрузчика на синем фоне с синим бордюром. Если загонять себя в рамки немодифицированного Вектора, то вообще непонятно где проводить черту. С моей точки зрения Вектор как с завода вообще картинку показывать не умеет.
Рекомендации для фиксации черного работают в 256x256x4, но не в 256x256x4 Scanline - в этом режиме не вижу средств для кастомизации палитры.
06Ц с завода должен был показывать в цвете на каком-то из мониторов того времени. Для работы со старыми цветными ТВ достаточно было добавить инверсию. В .02 как раз добавили инверсию и (в какой-то мере) уровень черного, т.е. .02 уже был практически нормальный (для своего времени).
Насчет синего бордюра:
1. Он сравнительно темный
2. Он не меняется от строки к строке
Синий бордюр в нескольких ранних программах (например в бейсике и тесте устройств) и игрушках с драйверами устройств.
В тесте техпрогона бордюр в основном красный, кроме моментов, когда он разноцветный.
В pairs (игрушка портирована в 1989) зеленый бордюр.
Возможно все это не так уж важно и критично.
Если плюнуть на теоретические проблемы с уровнем черного и на эстетику (пусть будет полосатый бордюр), то проблем совсем нет.
Есть простой, но не очень изящный вариант - ограничить число цветов в каждой строке до 15, а 16й (лучше 0й) цвет оставить только для бордюра.
Пробный подход к процедурам просмотра spr+pals с изменением одного (kitten50) и двух (bab51) цветов в строке.
Вложение 78346Вложение 78348
Скриншоты из VV, при включении эмуляции зон непрограммируемости работоспособность сохраняется. В эмуляторах отличаются не только палитры (при конверсии использовал палитру Linear), но и смещение цвета при программировании палитры. В vv и v06x примерно одинаково, в emu80 чуть отличается (или это особенности масштабирования, которые я не победил), в emu сильно отличается.
Обалденно смотрится! Мандрил вообще как живой. По моим подсчетам получается 54 цвета. Dec и ivagor, респект!
Decу несомненно респект.
В картинках должно быть (и ирфан говорит что есть) 50 цветов в котенке и 51 в мандриле. 51 в vv, в других эмуляторах может быть 54. А 50 везде должно быть 50.
Что касается просмотрщиков. Если вдруг "одноцветный" не заработает на реале, то его точно можно подстроить, исходник в помощь. С "двухцветным" сложнее, но я сделал все что мог, за счет xor там достигается максимальная скорость изменения цветов, эмуляторам хватает и есть небольшой запас для подстройки.
Ты сам писал, что надо искать подходящие картинки, могу только согласиться. Вероятно должны подходить пейзажи (сверху небо, внизу что-то не синее), восходы, закаты. Возможно Dec еще заборет полосатость, которая проявляется в некоторых конверсиях.
К сожалению нет. Можно ограничить полезную ширину картинки и использовать часть активной области для третьего цвета.
Использование xor (при желании можно заменить на add или sub) позволяет обеспечить минимальное возможное время между первым и вторым out 0Ch. Нужно ли это для реалов - пока не могу сказать с полной уверенностью, но это максимально гибкий вариант, обеспечивающий наибольшие возможности настройки.
Третий съест минимум 8 точек, каждый следующий - еще минимум по 32 точки (по 16 тактов). Речь о точках в режиме 256. И скорее всего получится медленнее, т.к. регистров не хватает.
Наверное можно попробовать прогнать первую палитру через что-либо такое, сравнивая получившиеся от 0 до 17 уровни.
Скрытый текст
Код:ClrLum:
push b
mov b,a
ani 111B
mov c,a
mov a,b
rrc
rrc
rrc
ani 111B
add c
mov c,a
mov a,b
rlc
rlc
ani 11B
add c
pop b
ret
[свернуть]
Найти индекс с самым минимальным и использовать его как индекс цвета бордюра, надеясь что он не станет сильно ярче (или вообще не поменяется) в следующих далее палитрах.
Скрытый текст
Код:
;DrkBrd Set border to darkest color in palette
;INPUT <HL> = 16-byte palette address
;OUTPUT [Border] becomes index of darkest color in palette
DrkBrd: lxi b,10FFh
DrkB01: mov a,m
call ClrLum ; <A> is guaranteed to be [0..11h]
cmp c
jnc DrkB02
mov c,a
mov e,b ; 16 - index
DrkB02:inx h
dcr b
jnz DrkB01
mvi a,10h
sub e
jmp SetBrd
[свернуть]
Если в картинке отсутствует чёрный, то бордюр будет каким-то из тёмных цветов (в Robotz в меню опций бордюр вышел тёмно-синим). По нормальному, надо ещё разную яркость компонент с одним уровнем учесть.
В пределе можно пробежать по всем палитрам, найти minimum minorum, замутить его с частотой изменений и выбрать индекс самого тёмного цвета с наименьшей частотой изменений.
Можно ещё "нормализовать" биты изображения так чтобы нулёвой индекс палитры всегда получался наиболее тёмным. Но это наверное при конверсии удобнее делать.
Восемью точками можно было бы пожертвовать ради многоцветия. Даже 40 точками во многих случаях, если котенок все еще влезает в кадр на фоне заката.
PPC, если посмотреть например MultiColor1, то исходно в spr 0й цвет - черный. Теперь смотрим pals - и там 0й цвет активно меняется на нечерный.
Что касается обмена ширины картинки на цвета можно посмотреть сюда. Каждый столбец - смена цвета или 32 точки. Скорее всего можно поменять еще один цвет сбоку.
Или справа в предыдущей строке или слева в текущей. Или можно поделить.
То что он будет меняться-это понятно, я об этом писал. Если в общем случае меняется "активно", то надо пробежать по всем палитрам, построить таблицу из индексов наиболее тёмных и использовать её. Ясно, что могут встретиться палитры, где чёрного не будет вообще. Но артефактов цветовых на бордюре станет меньше. Хотя мне лично нравится как сейчас, с полосами. Просто не уверен что каждый телек такое потянет.
Я пока немного занят, но примерно недели через 2 я вернуть к DaDither. Будут добавлены три варианта использования палитры:
1) 16 цветов. Для формирования изображения используются 16 цветов на выбор программы.
2) Черный + 15 цветов. Для формирования изображения используется фиксированный черный и 15 цветов на выбор программы.
3) 15 цветов. Для формирования изображения используются 15 цветов на выбор программы, самым первым цветом палитры будет фиксированный черный.
В общем на любой вкус и цвет. Также я бы хотел реализовать 3 и 4 изменяемых цвета, но мне нужно понимать, где в изображении будут съеденные столбцы. В идеале симметрично по краям.
Фиксированный черный было бы хорошо.
Что касается регулировки числа изменяемых цветов, то лучше просто увеличить диапазон изменения до 8 (больше точно не получится). А ширину картинки можно оставить на откуп тому, кто делает конверсию, он должен сделать картинку меньше 256 точек в ширину и DaDither дополнит ее черным бордюром, как сейчас реализовано.
А нельзя режим "без столбца сбоку" эмулировать, добавив черный столбец сбоку в исходной картинке?
Вопрос ко всем активно участвующим, но больше наверное к ivagor-у, потому что это больше затрагивает отображение на Векторе. Зачем делать какую-то специальную поддержку альтернативных размеров, если можно просто оставить черный столбец в исходной картинке 256х256? В чем будет приницпиальное отличие такой конверсии от конверсии с доп функциональностью в виде отдельных режимов вида 248х256 итд.. ? Если ни в чем, то эксперимент можно начать, не дожидаясь новых фич в DaDither.
Если итогом будет картинка 256x256, то это даст тот же результат, что и дополнение черным бордюром в DaDither. Тоже собирался написать про этот вариант, но отвлекся.
Не понимаю, зачем жесткие ограничения, если можно сделать гибко. И spr - это только 256x256, там задание размеров не предусмотрено.
- - - Добавлено - - -
Дополню про формирование картинки в DaDither. Для повышения удобства можно было бы предусмотреть генерацию полос нужного цвета сбоку и тогда жесткая связка ширины и числа изменяемых цветов приобретала бы смысл. Но тогда кто-то должен заранее написать векторовский просмотрщик и сказать, где генерировать служебные полоски в изображении. В любом случае лучше чтобы это было опционально.
Эффект огня для вектора есть в SKYNET, правда там довольно неспешно. Сделал крупноблочно, зато большая площадь и пободрее (13-15 FPS).
Upd: Добавил версию с потрескиванием.
Upd 2: Уменьшил интенсивность потрескиваний.
Ну приделай же какой-нибудь текст и картиночку, стань демосценером =)
Если была бы картинка и текст, возник бы следующий вопрос - а где музыка? Я не против всех этих вещей, превращающих демонстрацию технологии в нечто более художественное, но сам не рисую (никогда не рисовал) и не пишу музыку (очень давно), а заимствовать не очень хочется без крайней необходимости. Элементом (извините) искусства выступают особенности реализации - "самая компактная и быстрая программа в нашей деревне". Но может со временем сделаю что-то менее сухое.
Можно звуковой эффект потрескивающих дров, или протекающего газопровода.
svofski, хорошая идея с потрескиванием, добавил пробный вариант.
PPC, и size coding!
Слишком сильно трещало, сделал поменьше, вроде так лучше.