Зря вы этот блог скрывали. Прочитал и все статьи и комментарии. Немного переосмыслил свое отношение к рисованию. Но возник один ворос. Дайвер, если не против, задам его тебе на мыло. Не хочу выносить на всеобщее обозрение, а то скажут что-то случайно и вообще на все забью =)
Интересно рассказываешь! Видимо, я просто пока ещё недостаточно насчитался :)
Вообще, вот такие клёвые детали показывают одну вещь. Я думаю, было бы очень полезно, не только мне, послушать про твою работу над OSCOSS, послушать о принципах сборки, о подходе к эффектам, о подходе к дизайну кода и дизайну вообще. Не факт что люди сделают так же (я всё ещё не хочу писать свой ассемблер!), но вот такие рассказы о способах решения проблем — они очень полезны. Просто мозги прочищаются, волей-неволей начинаешь думать по-другому.
Бесспорно взялся бы писать свой асм. sjasmplus не даёт главной вещи, это симулятора внутри асма, на котором у меня построены все проекты. Для того что бы мне перевести под классический асм хотя бы несколько эффектов, я уже молчу про проекты, нужно написать вспомогательных тулзов около сотни. И в итоге исходный код превратится в мега-монстра. А на данный момент все эти тулзы в львиной своей доле написаны на этом же компиляторе, и для того что бы откомпилировать любой пакер, конвертер, кранчер, мне нужен только один компилятор. И в итоге у меня получается вот так:
Include «FONT\crunch.az8»
LD HL,TEXT
CALL PRINT
DI:HALT
TEXT DB "Hello Speccy",0
Что видишь ты? Для тебя это текст «Hello Speccy», но в реальности кодировка символов стала максимально приближенная к нарисованному шрифту, где автор шрифта не рисовал знака вопроса, и поэтому он был автоматически выкинут. Всё это оптимизировалось в ветке предкомпиляции «FONT\crunch.az8», где анализировалась графика из картинки BMP, которая там же превратилась в бинарные данные, на них создалась табличка(виртуальная для компилятора) неиспользуемых символов, оптимизировались повторения в графике русской буквы «Р» и латинской «P», всё это превратилось в максимально ужатый бинарный кусок который лёг в память. И после исполнения «crunch.az8» любая информация заключённая в кавычки кодируется по таблице. И LD A,«P» в итоге в аккумулятор запишет некий символ после перекодировки. Это я привёл тебе простой пример, самый элементарный. Я молчу о том, что ты можешь откомпилировать свой код и тут же его в эмуляторе подсчитать по тактам, или часть своего кода подсчитать. Или сделать высвечивание пакованных данных, например в OSCOSS есть лица которые высвечиваются. Все они состоят из каких-то простых залитых полигонов, которые у меня высвечиваются какой-то процедурой, которая на каждую часть высвечивания лица стратит некое количество тактов. И тут мне приходит идея, хочу к лицам сделать снизу зеркальное отображение, и продлить границу разделение на бордюре. Вот всё это пропускается через одну команду компилятора, которая при компиляции эффекта подсчитывает сколько тактов занимает высвечивание каждой части лица, делает мне таблицу с конкретными числами в тактах, под каждую картинку-лицо, и я только из фиксированного числа отнимаю сумму тактов из таблички и жду оставшееся время до места продолжения линии на экране и бордюре. Всё, это конец моего кодинга в данном эффекте, график меняет себе пикселы в картинке, музыкант меняет нотки, а у меня жёсткий эффект сделанный из набора простых команд моего асма. И я не знаю как это сделать на sjasmplus? Я честно, клянусь, много раз пытался использовать разные компиляторы. но как правило компиляторы почему-то заботятся о том, что бы LDAB превращалось в LD A,B, но мне это не надо, это не проблема исправить опечатку, а вот когда я не могу дать волю своей фантазии, это для меня очень критично. Так что, Лёша, да, мне пришлось бы заново писать «asam», без него у меня весь пар уходит на гудок. Для меня возможности моего асма это как в 90-ые года писать на TASM 4.0, и потом кропотливо считать-считать-считать-считать-считать-считать…
Прочитал и осознал с некоторым недоумением что я как раз в процессе подготовки написания некоего автономного нарезателя графики :)
Похоже так в итоге и напишу я своего «Масона»! (бьюсь лбом об стену)
Но вот если бы ты начал, как я, всерьёз пару лет назад и у тебя был бы sjasmplus — ты бы всё равно взялся писать свой ассемблер? Потому что я понимаю про сборку на реале, «как раньше», и, конечно, в этом смысле, совершенно с тобой согласен что это несерьёзно. Но сейчас есть альтернативы, в чём-то не такие мощные как у тебя сейчас, но всё же и не настолько неадекватные как раньше. Это всё же меняет приоритеты, понимаешь?
Так нет альтернативы. Я же их написал не от того, что просто пришло в голову, а от того, что не мог Dreamer писать музыку на PT3, только ASM. Сколько не турбируй плеер, ничего не получится. Вот и пришлось сделать свой формат mason'а, который изначально был простым компилятором на ПиЦи, на входе были любые модули PTх или ASM, а на выходе уже мой формат. Это он уже потом перерос в редактор. потому, что появились запросы о специфической музыке и универсальности типа 2хАУ. Ну а про ассемблер я вообще молчу, тут без него у меня стопор начался ещё в 2000 году. Никогда не забуду этот «ад» со сборкой демок. Теперь один ассемблер всё собирает и выдаёт конечный пакованный файл.
Тут то же есть куча этапов. У меня очень жестокий подход к написанию проекта. Я ставлю в рамки только тогда, когда понимаю, что без определённого инструмента не обойтись, например мой Mason, от которого я беру незаменимые возможности. Но если нет ограничений, я стараюсь идти по пути максимального удобства для творчества. Например ты график, и рисуешь в фотошопе, мы договариваемся что результат твоей работы это PSD, а метод передачи графики в конечный результат это BMP. Далее только моя проблема как это попадёт в код. И вот тут начинается разветвление, например путь который я вообще не признаю, где на промежутке между тобой и мной запускается утилита, в которой нажимается какая-то кнопочка(предварительно нужно 20 бегунков накрутить), потом получается какой-то файл, который в итоге загружается мной и с ним что-то делается, как правило не удобный формат и не оптимальный результат. Мне же всегда нужен под каждый случай свой формат. Поэтому я практически никогда не пользуюсь стандартной утилитой, просто на выходе будет то, что мне не подойдёт. Например у меня палитра из 128 значений, где нужно каждый 0ой и 15ый цвет оставить свободным, так устроена графика на гранях куба в SYNCHRе. Где эта утилита которая мне такое сделает? Её просто нет. Поэтому путь только писать свою, и эту утилита будет брать твой файл BMP, и запускаться каждый раз при компиляции демки, где нет участия человека, только жёсткий автомат с идеальным результатом для данного эффекта.
1. График нарисовал в удобном редакторе, или поправил один секретный пиксель.
2. Музыкант написал музыку не задаваясь вопросом сколько это будет занимать.
3. Клацнул на ентер.
4. Смотришь уже конечный запакованный результат, готовый к отправке, с лоадером, пакером, шмакером, кодером и другими супер-пупер вещами.
Главное нет вот этого промежуточного вызова утилиты и настроек. Так, что утилиты то же бывают разные.
Ооо… Досбокс вообще не рассматривается как что-то для ловли багов. Вот тут собственно и проблема. Если писать под дос, то нужно выбирать между массой, которые будут смотреть результат на реале и теми, кто будет всё это пускать под эмулятором. Я бы сказал так, что если ориентироваться под эмулем, то это путь серьёзных ограничений. Из моей практики на пентиуме с частотой 466mHz, делается практически всё фреймово.
А разве можно как-то по-другому написать демо?
Альтернатива только запилятор. Если не запилятор, то все вот эти бесконечные конверторы и генераторы данных.
Небольшое дополнение (последние три строчки). Позволяет «перепрыгивать» из XnView в ZX Paintbrush по клавише F4.
Вообще, вот такие клёвые детали показывают одну вещь. Я думаю, было бы очень полезно, не только мне, послушать про твою работу над OSCOSS, послушать о принципах сборки, о подходе к эффектам, о подходе к дизайну кода и дизайну вообще. Не факт что люди сделают так же (я всё ещё не хочу писать свой ассемблер!), но вот такие рассказы о способах решения проблем — они очень полезны. Просто мозги прочищаются, волей-неволей начинаешь думать по-другому.
Include «FONT\crunch.az8»
Что видишь ты? Для тебя это текст «Hello Speccy», но в реальности кодировка символов стала максимально приближенная к нарисованному шрифту, где автор шрифта не рисовал знака вопроса, и поэтому он был автоматически выкинут. Всё это оптимизировалось в ветке предкомпиляции «FONT\crunch.az8», где анализировалась графика из картинки BMP, которая там же превратилась в бинарные данные, на них создалась табличка(виртуальная для компилятора) неиспользуемых символов, оптимизировались повторения в графике русской буквы «Р» и латинской «P», всё это превратилось в максимально ужатый бинарный кусок который лёг в память. И после исполнения «crunch.az8» любая информация заключённая в кавычки кодируется по таблице. И LD A,«P» в итоге в аккумулятор запишет некий символ после перекодировки. Это я привёл тебе простой пример, самый элементарный. Я молчу о том, что ты можешь откомпилировать свой код и тут же его в эмуляторе подсчитать по тактам, или часть своего кода подсчитать. Или сделать высвечивание пакованных данных, например в OSCOSS есть лица которые высвечиваются. Все они состоят из каких-то простых залитых полигонов, которые у меня высвечиваются какой-то процедурой, которая на каждую часть высвечивания лица стратит некое количество тактов. И тут мне приходит идея, хочу к лицам сделать снизу зеркальное отображение, и продлить границу разделение на бордюре. Вот всё это пропускается через одну команду компилятора, которая при компиляции эффекта подсчитывает сколько тактов занимает высвечивание каждой части лица, делает мне таблицу с конкретными числами в тактах, под каждую картинку-лицо, и я только из фиксированного числа отнимаю сумму тактов из таблички и жду оставшееся время до места продолжения линии на экране и бордюре. Всё, это конец моего кодинга в данном эффекте, график меняет себе пикселы в картинке, музыкант меняет нотки, а у меня жёсткий эффект сделанный из набора простых команд моего асма. И я не знаю как это сделать на sjasmplus? Я честно, клянусь, много раз пытался использовать разные компиляторы. но как правило компиляторы почему-то заботятся о том, что бы LDAB превращалось в LD A,B, но мне это не надо, это не проблема исправить опечатку, а вот когда я не могу дать волю своей фантазии, это для меня очень критично. Так что, Лёша, да, мне пришлось бы заново писать «asam», без него у меня весь пар уходит на гудок. Для меня возможности моего асма это как в 90-ые года писать на TASM 4.0, и потом кропотливо считать-считать-считать-считать-считать-считать…
Похоже так в итоге и напишу я своего «Масона»! (бьюсь лбом об стену)
1. График нарисовал в удобном редакторе, или поправил один секретный пиксель.
2. Музыкант написал музыку не задаваясь вопросом сколько это будет занимать.
3. Клацнул на ентер.
4. Смотришь уже конечный запакованный результат, готовый к отправке, с лоадером, пакером, шмакером, кодером и другими супер-пупер вещами.
Главное нет вот этого промежуточного вызова утилиты и настроек. Так, что утилиты то же бывают разные.
Альтернатива только запилятор. Если не запилятор, то все вот эти бесконечные конверторы и генераторы данных.
Супер!