Уже десять лет на демосцене существует довольно странная, но интересная традиция. Нет, в баню с друзьями ходят без неё, но очень многие делают конверсии популярного видеоклипа Bad Apple на различные маломощные платформы прошлых лет. Как-то: ZX Spectrum, Game Boy, Sega Genesis, БК-0011М, и чем дальше, тем страньше и страньше. Это одновременно и упражнение в реализации цифрового видео в условиях крайне ограниченных ресурсов, и в адаптации контента под возможности максимально хардкорных ретро-платформ.

Сегодня рассмотрим само явление Bad Apple — откуда оно взялось и какое отношение имеет к компьютерам, а также мою новейшую разработку в этой области, демонстрацию BAD AON. В прошлом я уже делал подход к этому снаряду с версией для 8-битной NES, а в этот раз сделал адаптацию для, смею надеяться, одной из наиболее необычных платформ. Разглядеть клип будет трудновато, но если хорошенько прищуриться (я серьёзно), он всё ещё вполне узнаваем.

▍ Корни


Возможно, когда-нибудь в учебниках древней истории напишут, что Bad Apple — значительное культурное явление эпохи раннего киберпанка, являющееся результатом творческих усилий нескольких независимых создателей. Действительно, для рождения этого феномена понадобилась целая цепочка производных работ людей, увлечённых различными вещами.

Логотип Team Shanghai Alice

Основы были заложены в 1998 году с выходом одной из игр серии Touhou Project. Сама эта серия игр родом из Японии также представляет собой уникальное культурное явление. Фактически это чистейшей воды инди-разработка, и хотя в разработчиках числится компания Team Shanghai Alice (ранее ZUN Soft), состоит она из одного человека под ником Zun. Вероятно, решающим фактором, позволившим случиться последующей истории, является его принадлежность додзин-культуре и вытекающая из этого лояльность к самостоятельному творчеству поклонников, которое они создают на основе его интеллектуальной собственности.

Пример игрового процесса и визуального стиля Touhou

Игры серии выполнены в жанре «маниакального» скролл-шутера, также известного как «bullet hell» — это когда на экране одновременно находятся тысячи медленно летящих снарядов противника, и игрок вынужден маневрировать между ними с ювелирной точностью. Сюжетно и визуально игры выполнены в сказочном сеттинге, а их истории состоят из диалогов довольно многочисленных персонажей, представляющих собой анимешных девочек-ведьмочек, напоминающих Cotton из одноимённой серии игр схожего жанра.

Краткое знакомство с персонажами Touhou

Первая игра серии вышла в 1996 году на компьютере NEC PC-98, местном японском аналоге PC, последующие игры выходили для обычного Windows. С тех пор серия разрослась почти до трёх десятков игр, а также превратилась в медиафранчайз, включающий также фанбуки, мангу, спин-оффы других жанров, музыкальные сборники, видеоклипы и прочий японский поп-культурный беспредел.

Оригинальная версия композиции Bad Apple!!! образца 1998 года

В 1998 году вышла четвёртая игра серии, Lotus Land Story. Помимо прочих музыкальных композиций, её саундтрек включал композицию «Bad Apple!!», звучащую на третьем уровне игры и выполненную в классическом звучании FM-синтезатора 16-битной видеоигровой эпохи. Несмотря на название, в целом эта композиция довольно радикально отличается от той, о которой идёт речь, хотя в начальной части и прослеживается явное сходство.

В 2007 году вышел фанатский музыкальный альбом Lovelight, включающий инструментальные треки, а также один трек с вокалом на японском языке. Музыкальная составляющая модного клубно-танцевального характера была построена вокруг вступительной части оригинального «Bad Apple!!», и можно сказать, что является ремиксом.

Ремикс так глубоко тронул струны японской души, что в 2008 году один из поклонников задумал сделать клип для этой мелодии и нарисовал сториборд. Сделать анимацию было ему не по силам, и предложил поучаствовать в этом другим участникам комьюнити. Таковыми было предпринято несколько неудачных попыток.

Оригинальная версия клипа Bad Apple на YouTube

Наконец, в октябре 2009 года, аккурат на пике популярности игровой серии, группа энтузиастов опубликовала версию клипа, над которой работала около года. Он был выполнен в технике чёрно-белой силуэтной анимации, фактически сделанной в 3D-редакторе. Идея, вероятно, была подсказана обложками изданий игр серии, многие из которых также использовали силуэты персонажей. В достаточно абстрактном по сюжету клипе представлены сценки с различными персонажами, превращающимися друг в друга через довольно креативные визуальные переходы.

Видеоверсия быстро завирусилась и стала сначала локальным интернет-мемом, а позже завоевала мировое признание. Только размещённая на тогда ещё молодом и зелёном YouTube оригинальная авторская версия сейчас имеет 86 миллионов просмотров, а есть ещё первая публикация на местном японском видеохостинге и множество перезаливов.

▍ Плоды


Здесь, однако, история успеха Bad Apple только начинается.

Публикация оригинального видео и его взрывная популярность открыли портал, из которого в медиа-пространство хлынули сотни ремиксов в различных музыкальных жанрах, исполнения на самых разнообразных инструментах и в любых составах музыкантов, и, конечно, перепевки на разных языках — как живыми певцами ртом, так и с помощью вокального синтезатора Vocaloid. Некоторые из этих версий также собрали свои миллионы просмотров.

Распечатка Bad Apple на бумаге

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

В коллективном творческом порыве планетарного масштаба родились версии, реализованные внутри игрового процесса игр-песочниц типа Minecraft, в виде HTML-чекбоксов, на экране осциллографа и в формате механического телевидения, в виде покадровой распечатки на бумаге, традиционной перекладной анимации, лазерной проекции, на экране диспетчера задач Windows 10, на гранях кубика Рубика, на слоях 3D-печати и так далее и тому подобное.

Технологии новейшего времени: Bad Apple на нейроарте

Исследование глубины глубин этого безумия и составление полного списка версий клипа ещё ждёт своего героя, и начать он мог бы, например, с плейлиста на YouTube. Здесь же мы ограничимся исследованием отклика, который популярность клипа нашла в рядах энтузиастов компьютерного творчества.

В силу своего специфического содержания, а именно силуэтной чёрно-белой графики, в ретро-компьютерных кругах Bad Apple стал своего рода бенчмарком, или, если угодно, Ленной (девушка в тестовом JPEG-файле) от мира цифрового видео для маломощных компьютерных платформ. Дело в том, что такая графика сжимается гораздо лучше, чем полноценное видео, что расширяет границы возможных адаптаций.

Концепция ретро-компьютерных адаптаций как нельзя лучше слилась в творческом порыве с духом демосцены. Особенностью этой категории версий клипа является выбор наименее подходящих для воспроизведения видео платформ, в связи с чем эти адаптации иногда служат тестом каких-то аппаратных дополнений, типа ПЗУ сильно расширенного объёма или контроллера жёсткого диска, а также адаптация музыкальной составляющей к местным звуковым возможностям.

Реализации клипа выставлялись в различных категориях на множестве демопати, и многие из них брали призовые места. Сейчас уже довольно трудно проследить историю появления версий, но можно отметить основные вехи.

Bad Apple на оригинальном Game Boy Color

Вероятно, самой первой стала версия Bad Apple для Game Boy Color, созданная в январе 2011 года неустановленным лицом из всё той же Японии. Она использует маппер MBC5 с ПЗУ объёмом 8 мегабайт, и помимо видео с хорошей плавностью анимации содержит сконвертированный под возможности платформы цифровой (не синтезированный) звук вокальной версии из оригинального клипа.

Bad Apple на Sega Genesis

Вскоре последовала версия для Sega Genesis, созданная небезызвестным Stef, автором популярного эмулятора Gens, в 2012 году. От прочих версий она отличается разделением на два отдельных ROM’а объёмом по 4 мегабайта каждой — это сделано в целях обеспечения совместимости с различными конфигурациями дополнений для консоли. Также она обладает высоким разрешением (320 на 224 в 4 градациях серого), хорошей плавностью анимации (30 кадров в секунду) и неплохим качеством оцифрованного саундтрека (13 килогерц). Интересным совпадением является то, что ранее лучшим образом «живого видео» на Genesis было также силуэтное видео в игре Red Zone 1995 года, а интересной технической особенностью — что код этой версии написан на C, а не на ассемблере.

Премьерный показ 8088 Domination

Демо 8088 Domination группы Hornet, вышедшее в июне 2014 года, содержало видеоролики различного типа и качества, воспроизводимые на самом первом классическом IBM PC 5150 образца 1981 года, оснащённого процессором Intel 8088, работающем на частоте 4.77 МГц, видеокартой CGA и звуковой картой Sound Blaster версии 1.5 и выше. Это крайне скромная конфигурация для решения подобной задачи, и практическая реализация вполне может удивить понимающих людей. Вторая половина этой 30-мегабайтной демонстрации содержит полноразмерную версию Bad Apple, воспроизводимую в разрешении 640 на 200 пикселей с оцифрованным саундтреком.

Bad Apple 64 на Commodore 64

Версия Bad Apple 64 для 8-битного компьютера Commodore 64, вышедшая в том же июне 2014 года, совершила достижение иного рода. Вся длительность почти 4-минутной анимации была уложена в объём одной стороны местного гибкого диска — около 170 килобайт. Платой за это стало сильное снижение качества картинки, частоты кадров и переход к синтезированному саундтреку, воспроизводимую силами звукового чипа SID, но тем не менее клип сохранил узнаваемость.

Bad Apple на Atari 2600

В ноябре 2014 появилась и версия для Atari 2600 — платформы, для которой любая подвижная графика в принципе уже является существенным техническим достижением. Для реализации этой версии понадобился маппер с поддержкой ПЗУ объёмом 480 килобайт. Разрешение видео 40 на 32 пикселя особо крупных размеров, условно-узнаваемый саундтрек синтезируется в меру способностей местного звукового чипа TIA, об исключительной сложности работы с которым я уже как-то писал на Хабре.

Векторный, но не гипертекстовый Bad Apple на Vectrex

И наконец, хочется упомянуть версию для игровой консоли Vectrex, вышедшую в апреле 2015 года. Эта уникальная 8-битная платформа вообще не умеет работать с растровой графикой, она использует исключительно векторное изображение на собственной встроенной электронно-лучевой трубке. Поэтому клип предварительно был векторизирован, кадры оптимизированы до малого числа отрезков, и умещён в картридж объёмом около 16 мегабайт. Бонусом прилагается возвращение к оригинальному оцифрованному саундтреку, вместо более типичных для 8-битных версий синтезаторных адаптаций. Данная версия не вполне «спортивная», так как использует мощный микроконтроллер в картридже для стриминга векторных данных. Но тем не менее и она является немалым техническим достижением.

Перечислить все прочие платформы, на которых есть версии Bad Apple, крайне затруднительно — на некоторых, к тому же, есть даже не одна версия, и я наверняка забуду упомянуть не один десяток. Но всё же попытаюсь обрисовать масштаб бедствия, по возможности снабдив ссылками на видео:


Часть этих версий можно найти в запускаемом бинарном виде на сайте-каталоге Pouet, содержащем различные работы демосцены. Впрочем, там представлены далеко не все варианты, и если вам в голову приходит какая-нибудь особенно странная платформа, попробуйте поискать её на YouTube — вполне вероятно, что и такая версия уже есть.

Хотя прошёл уже добрый десяток лет с пика популярности подобных адаптаций клипа, их поток ещё не иссяк. Недавно этот список пополнился и моей работой.

▍ Моё яблоко


Началось всё с моей демонстрации для позднесоветского кнопочного городского телефона формата «электронный секретарь» родом из начала 1990-х годов, также известного в массах как АОН (Автоматический Определитель Номера) — AONDEMO.

Собственно AONDEMO

Я сделал эту работу в 2018 году и в силу обстоятельств выставил на Chaos Constructions 2018 в общую категорию, где она бодалась за первое место с нормальными человеческими демками для ZX Spectrum. Это было странное решение, конечно, выставляться надо было в Wild — специальную категорию для творений подобного нестандартного формата. Но что сделано, то сделано. Так или иначе, работа общественности зашла, и на какое-то время она даже стала мемом местечкового разлива.

Моя версия Bad Apple для NES

Пару лет спустя я принимал участие в проекте You Are Error, опубликованного в 2021 году, в рамках которого мы создавали видео-версию музыкального альбома Серхио Элисондо в формате картриджа для реальной 8-битной игровой консоли NES. Я разрабатывал код проекта и придумывал способ сжатия видео, а в процессе этой работы и тестирования технических средств мы также сделали свою тестовую версию Bad Apple.

В мае 2022 где-то и кем-то на YouTube был оставлен комментарий, который я, к сожалению, уже не могу найти, в шуточном формате упоминающий возможность появления Bad Apple для АОН. В каждой шутке есть доля шутки — решил я, а беспокойный разум сразу же стал искать способ осуществления данной шалости. И конечно же, моментально нашёл.

Идея показалась довольно простой в реализации, и я сразу же начал подготовку к работе над проектом, планируя реализовать его в ближайшем будущем. Однако возникли одни дела, они потянули за собой другие, пришлось на время отложить идею, а потом я решил делать полноценное демо BACK TO THE PET для CAFePARTY 2022 — и, думаю, это было верным решением.

Видео AlexGyver про часы на часах

В конце декабря 2022 года на популярном YouTube-канале AlexGyver вышло видео «Часы из часов», показывающее растровую анимацию на большом количестве семисегментных дисплеев. По сути, это была практическая реализация моей задумки, которая до того существовала только моей в голове и в виде тестовых набросков — я ещё не определился даже с количеством дисплеев, а тут увидел готовое подтверждение осуществимости затеи.

Комментарий

В конце января под видео с AONDEMO появился ещё один комментарий на ту же тему, напомнивший мне что надо бы уже заняться осуществлением задуманного. Но свободное окно всё не появлялось и не появлялось, пока наконец не появилось.

▍ Разработка


Летом 2023 года наконец-то возник просвет между проектами, и я принялся за практическую реализацию. Крайнего срока не было, так как на горизонте не было подходящих крупных демосценовых мероприятий, обладающих категорией Wild — проект изначально не рассматривался как серьёзная демка, а больше как диковина и шутка юмора (рубрика «программисты шутят»). Позже, на августовской Демодуляции, я обдумывал возможность выставиться на грядущем зимнем Undefined DIY 2024, но не сложилось.

Так или иначе, в этот активный период я заложил все необходимые основы и выполнил основную часть работы. Был сделан proof of concept на основе кода моего редактора сегментной графики LED9ED, визуализирующий сконвертированную анимацию. По итогам экспериментов было решено использовать четыре АОНа, с четырьмя дисплеями, а музыку делать четырёхканальной, по одному телефону на каждый канал.

В процессе я также утвердился в мысли о необходимости использования четырёх градаций яркости, чтобы хоть немного улучшить передачу изображения в столь низком разрешении. Это было реализовано программным ШИМ: в коде мультиплексирования дисплея полный цикл обновления происходит не 60 раз в секунду, а в четыре раза чаще, и выключением сегментов в повторных проходах регулируется яркость каждого из сегментов. Частота генерации прерывания INT, в обработчике которого реализован мультиплексор дисплея, таким образом составила 2160 герц.

Я выполнил конверсию всех кадров по уже готовому методу Алекса Гайвера. Никакие мои придумки улучшения качества не дали.

Таким образом, была выполнена оценка требуемого объёма данных, и определена необходимость сжатия. Мне требовалось уместить в одному ПЗУ полную длительность оригинальной анимации с частотой 30 кадров в секунду, а также музыку, играющую на частоте 60 кадров в секунду. Эта задача упрощалась тем, что на каждый из четырёх АОНов приходилось только по четверти данных анимации.

Хотя графические данные в виду исключительно низкого разрешения при кодировании частичных обновлений кадра (только то, что изменилось) получались компактными, оказалось, что ПЗУ объёмом 32К немного не хватает. Чтобы не изобретать более сложный алгоритм сжатия, я решил перейти на ПЗУ объёмом 64 килобайта. Это вполне стандартная конфигурация для АОНов, поздние версии прошивки Русь имели именно такой объём. Но как оказалось, это очевидное и проверенное временем решение обеспечило немало проблем в будущем.

Пока же, на момент написания кода, переход к 64 килобайтам ПЗУ добавил головной боли в сборке кода и конверсии данных.

Дело в том, что схема АОНов на процессоре Z80 исторически спроектирована под объём ПЗУ 8 килобайт — тогда этого было достаточно всем. За счёт упрощённой дешифрации адресное пространство делится на восемь частей по 8 килобайт, в четырёх из которых дублируется 8 килобайт ПЗУ, а в остальных четырёх располагается ОЗУ.

При появлении новых прошивок с более продвинутым функционалом ПЗУ постепенно расширялось — 16, 32 и 64 килобайта, при этом разводка оригинальных плат не изменялась, только добавлялись соединения адресных линий. Для ПЗУ объёмом 16 килобайт дополнительные килобайты появляются во втором и четвёртом дублях в адресном пространстве, а при 32 килобайтах карта памяти начинает выглядеть следующим образом:

  • 0000..1FFF первые 8 килобайт ПЗУ
  • 2000..3FFF 2 килобайта ОЗУ
  • 4000..5FFF вторые 8 килобайт ПЗУ
  • 6000..7FFF повтор ОЗУ
  • 8000..9FFF третьи 8 килобайт ПЗУ
  • A000..BFFF повтор ОЗУ
  • C000..DFFF четвёртые 8 килобайт ПЗУ
  • E000..FFFF повтор ОЗУ

Расширение же до 64 килобайт подразумевает одновременную замену этих четырёх фрагментов ПЗУ другими четырьмя, то есть переключаются все окна разом. Управляет этим одна из линий порта ввода-вывода КР580ВВ55.

Проблема доступа к данным продолжительной анимации при столь запутанной организации памяти была решена дублированием всего выполняемого кода в пространстве 0000..1FFF — тогда переключение банка ПЗУ никак не влияет на работу кода, и фигурным разбрасыванием данных по остальным блокам ПЗУ. Для линейного доступа к данным была реализована процедура, которая на входе получает линейный 16-битный адрес, а на выходе формирует нужные смещения в блоках с выбором нужной половины ПЗУ.

На отладку кода с использованием сконвертированной анимации и временного музыкального трека из AONDEMO, который постепенно заменялся вновь создаваемой кавер-версией саундтрека Bad Apple под четыре одноканальных пищалки, ушло несколько дней.

В процессе пришлось написать ещё один превизуализатор, на этот раз для упакованных бинарных данных, чтобы визуально убедиться в их корректности, а также сделать несколько других вспомогательных утилит.

▍ Аппараты


Ещё одной частью проекта был поиск аппаратов. Я изначально задумывал, чтобы на итоговом видео эта демонстрация работала на нескольких разных экземплярах телефонов, и желательно это должны были быть однотипные АОНы в наиболее узнаваемом тёплом и ламповом корпусе советско-латвийских кнопочных телефонов производства VEF.

С целью приобретения таковых приборов было обшарено всё Авито и приобретено несколько штук как в Москве, так и через доставку из более отдалённых мест: из Питера и Екатеринбурга. Брал не только VEF, но и близлежащие недорогие варианты на случай, если не наберётся четыре рабочих VEF’а. Боюсь, в итоге я скупил их все. Простите.

Четыре аппарата, прошедшие в финал кастинга

Были понесены следующие расходы, и приобретены аппараты:

  • Красная мыльница за 600
  • Чёрный VEF за 1120
  • Жёлтый VEF за 1390
  • Голубой VEF за 1000
  • Красный VEF за 951

В процессе я узнал немало нового для себя. Например, что бывает несколько версий корпусов, с вырезами под отдельные кнопки или под целый блок кнопок «калькуляторного» типа, со съёмной передней панелью и с целиковой, а также несколько минимально отличающихся между собой переразводок одной и той же «большой» (под корпус VEF) платы АОН.

ТА-ВиД и его внутреннее устройство

Больше всего удивил жёлтый VEF под названием «ТА-ВиД». Из журналов я знал о существовании ранних АОНов на КР580ВМ80, тогда как в жизни встречались только версии на Z80 и 8051. А это оказался представитель потерянной ветви в генеалогическом древе. Родом из 1992 года, на редком процессоре ИМ1821ВМ85А, с дисплеем из отдельных АЛ304 и одним пропущенным знакоместом, с нестандартной расширенной клавиатурой и даже с отпечатанной в типографии инструкцией. Для проекта он не годился никаким образом — в него даже нельзя было переставить (для кадра) плату одного из АОНов на Z80, так как вырез под кнопки для них совершенно не подходил. Но зато это оказался крутейший экземпляр для коллекции, которую, видимо, я теперь собираю.

ФантАОН как историческое свидетельство: дата выпуска и даже дата продажи

Также немного удивил красный VEF. Он оказался наиболее «брендовым» из всех вариантов на Z80, с наклейкой ФантАОН на днище и прошивкой Арктур-36, в которой заставка также переделана на FantAON. Эту и другие прошивки я позже считал из ПЗУ для сохранения в истории.

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

Некоторые источники питания: пластмасса, оргалит, воронёная сталь

Хотя во всех аппаратах использовался штатный разъём DIN5, распиновка не совпадала, а сами блоки питания отличались удивительным разнообразием конструкций при невысокой остаточной надёжности. Для решения проблемы были закуплены четыре современных импульсных блока питания на 5 вольт и 2 ампера, а также разъёмы DIN5, что добавило к сумме расходов ещё 1010 денежных единиц.

На этом этапе, как водился, снова возникли другие дела, и всё опять отложилось в долгий ящик. Анимация и код были готовы целиком, а кавер-версия музыки написана наполовину.

▍ Доработка


Повод продолжить начатое возник аккурат 8 марта, когда коллеги напомнили о том, что довольно скоро случится демопати Revision в Германии. Так как работа уже давно была почти готова, я решил попытаться взять себя в руки, доделать и выставить её там, благо конкурс Wild программой этого фестиваля предусматривался.

Первой неожиданной проблемой, на которую пришлось потратить некоторое время, был поиск нужных телефонов в кладовке. В результате предыдущих действий их у меня скопилась огромная куча, штук 15 (не только на Z80). Коробки для хранения одинаковые и не подписаны, а искомые телефоны, разумеется, оказались в самых нижних ярусах. К тому же я успел забыть, что именно и с какими из них делал.

Исходные дорожки саундтрека в Reaper

Дальше была дописана музыка до полной продолжительности. По старой доброй традиции делалось она в Reaper, с применением моего VSTi-плагина PCSPE. В рамках этого проекта он был доработан — добавлен более удобный экспорт синхронного мультитрека. Я не особо налегал на аранжировку, но принципиальным художественным решением было использование четырёх разных аппаратов, чтобы каждый канал имел своё уникальное звучание.

Были сделаны некоторые изменения в коде конвертора, позволившие включить нарисованные вручную с помощью LED9ED начальную и конечную анимации в основной поток данных, и таким образом исключить реализацию этих анимаций из кода демки.

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

Процесс подготовки железа больше напоминал роман Агаты Кристи «Десять негритят»: один за другим АОНы выбывали из строя, пока не остался один — тот самый красный, что и был у меня изначально, и на котором когда-то происходила съёмка AONDEMO.

Этот увлекательный процесс я довольно подробным образом освещал в своём блоге на Boosty (да, это божественная интеграция), где пишу краткие рабочие заметки по подобным безумным проектам. Здесь же кратко обрисую основные проблемы: дисплей, звук и некорректная работа ПЗУ объёмом 64 килобайта.

Больше всего проблем доставил новый красный VEF. Начиналось всё неплохо, изначально он вполне себе работал. Младший разряд дисплея светился тускловато, и подумав, что он выгорел — обычное дело для этих аппаратов — я решил заменить его свежим, некоторое количество которых имеется у меня в запасах. После замены всё сломалось. Телефон перестал включаться совсем, потом всё же стал включаться, но его дико глючило, и я долго и упорно искал причину, которой оказалось случайное КЗ полоской припоя на торце платы нового дисплея. Когда же всё было исправлено, оказалось, что замена не помогла: разряд продолжал светиться тускло.

Дисплей АОН и короткое замыкание выводов

Далее я также долго возился с проблемой звука. Именно этот аппарат звучал исключительно тихо, на грани слышимости, и совершенно недостаточно громко для съёмок. Никакие манипуляции не помогали — всё было исправно, соответствовало схеме и другим аппаратам. Я так и не решил эту проблему, но позже, уже после съёмок видеоматериалов, обратил внимание, что динамические головки ВП-1, установленные в разных аппаратах, могут иметь радикально разное номинальное сопротивление, как-то 600 и 3000 ом. Возможно проблема была связана именно с этим.

Третья же проблема, наличие которой выявил этот красный аппарат, поставила весь проект под угрозу срыва. По непонятным и не выясненным до сих пор причинам демка доходила до определённого момента и падала. Это происходило немногим позже пересечения границ данных в 32 килобайта, то есть после переключения банка ПЗУ, но не сразу же на нём, что было бы объяснимо с технической точки зрения, а некоторое время спустя. Вероятно, это не была ошибка в коде, так как в эмуляторе, а главное — на двух из четырёх аппаратов — этот же самый код в том же самом ПЗУ, просто переставленном из одной платы АОНа в другую, прекрасно выполнялся до конца.

Побороть проблему падения никак не удавалось, и в отдельно написанной тестовой программе она не проявлялась. По-быстрому достать ещё два таких же телефона было уже негде: в пределах города подходящие предложения на Авито закончились. Я решил использовать только два телефона, отказавшись от сеанса одновременной игры и сняв каждый по два раза.

Особенности полукустарной сборки АОНов из ранних 90-х

Сопутствующим ущербом стала потеря красной мыльницы. В попытках найти ещё один функционирующий аппарат, способный выполнить демку без падения, я попытался привести в чувство и это изделие эпохи оголтелых самоделкиных, собранное без единого гвоздя и даже без термоклея (плата просто брошена в корпус и лежит там как попало). К сожалению, на плате этой версии АОНа не предусмотрено штатного места подключения питания, а я в чаде кутежа совершенно нелепо обконфузился, сориентировавшись не по той 14-ногой микросхеме и перепутав полярность питания. Что-то успело сгореть без огня и дыма, и за отсутствием времени, оценкой нанесённого ущерба и ремонтом платы я пока не занимался.

▍ Магия кино


Таким образом, к моменту записи видеоматериалов я подошёл с четырьмя рабочими аппаратами, из которых только два были способны выполнить демку целиком, от начала до конца.

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

Видеосъёмка и звукозапись

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

Сведение звуковых дорожек в Reaper

Звуковое сопровождение ролика было записано отдельно от анимации, на всё том же красном телефоне, но с подключением к нему разных динамиков для разной окраски звучания разных каналов мелодии. После записи было проведено сведение дорожек в Reaper’е с эквализацией — дело в том, что без таковой обработки получилось откровенно неприятное уху глухое и неразборчивое бубнение.

Проблема, которая беспокоила меня с самого начала проекта — монтаж видео — решилась довольно легко. Дело в том, что у меня довольно слабый компьютер почти 10-летней свежести, и я определённо не мастер во всём, что касается съёмки и монтажа видео. Демо же требовало параллельного совмещения фрагментов четырёх клипов, снятых в HD, а именно, размещения четырёх дисплеев в нужных местах экрана.

Монтаж видео в Blender

Я монтирую видео в Blender. Этот вполне могучий бесплатный редактор, предназначенный для работы с 3D-графикой, помимо множества других интересных возможностей, скрывает в недрах своих закладок и довольно развитый нелинейный видеоредактор. И в очередной раз его базовых возможностей с лихвой хватило для покрытия моих не самых традиционных потребностей. Нашлось и перемещение кадра, и обрезка полей, и все прочие необходимые мелочи.

Проблему производительности помог безболезненно решить встроенный в Blender функционал прокси, кэширующий исходные видеофайлы в виде серии JPG-файлов низкого разрешения и качества, благодаря чему даже старого i5-4690 и 8 гигабайт ОЗУ хватило для контроля монтажа в реальном времени, притом что материал был отснят и рендерился под 50 кадров в секунду.

▍ Урожай


Работа была закончена вовремя, в кои-то веки даже с небольшим запасом по времени, и, как и планировалась, была отправлена на демопати Revision 2024.

В отличие от наших местных демо-фестивалей, на Revision, как и на многих других зарубежных, для участия требуется купить билет за деньги. Как понимаете, сейчас это не самая простая задача. В этом мне посодействовал Роман Соколов. Однако, так как я планировал посетить трансляцию Revision Satellite в Музее Яндекса, и для этого записался на сайте музея, случилась накладка: музей также посодействовал моему участию, о чём я, однако, узнал слишком поздно. Так или иначе, выражаю благодарность всем причастным!

Это он — мой BAD AON

Показ состоялся в назначенное время. Я присутствовал в Музее Яндекса, смотрел живую трансляцию вместе с местными зрителями, а заодно записал экран трансляции и реакцию в зале.

Наблюдая результат со стороны, я пришёл к выводу, что поделие всё-таки получилось малопонятное. Разобрать изображение в нём можно только при хорошем знакомстве с оригиналом и сильном прищуре глаз, а фактор удивительности заключается скорее в демонстрации того, что так можно было. Доведение до абсурда — тоже художественный акт, в конце концов.

Более читаемое изображение можно было бы получить при кратно большем количестве дисплеев, например, 16-ти (2 в ширину, 4 в высоту), и такая возможность рассматривалась на начальном этапе. Но, как вы можете догадаться, съёмка и синхронизация стольких видеопотоков была бы кратно сложнее. Думаю, что в конечном итоге осуществимо и это, но не думаю, что художественная ценность работы возросла бы пропорционально сложности её осуществления.

Пара абзацев рефлексии на наиболее заметную поступившую критику.

Сразу перед показом ведущий сказал — «ну сколько можно делать Bad Apple, нарисуйте уже новое видео». Эту же мысль он повторил и при награждении. Я могу понять усталость от мема, но и замечание не вполне резонное, учитывая изложенную выше историю вопроса, конкурс Wild, а также то, что я, как и многие, прошедшие этот путь до меня, программист, а не мультипликатор. Если, чисто гипотетически, я был бы способен сделать свой собственный крутой четырёхминутный музыкальный видеоклип, пожалуй, я выбрал бы и другой формат презентации, не на сегментном дисплее, и другую аудиторию — фестиваль анимации или видеоклипов, например.
Другое замечание — демо очень затянуто. Согласен. Но всё же это техническая демонстрация, а воспроизведение одной минуты видео или четырёх минут в рамках подобных технических ограничений — это очень большая разница, и нужно было показать, что действительно, видео влезло целиком, без обмана. Осознание того, что можно было бы сделать две версии разной продолжительности, наступило только постфактум.

▍ Вместо заключения


Несмотря на все проблемы и весьма сильную конкуренцию среди конкурсных работ BAD AON всё же взял первое место в категории Wild.

Казалось бы, на этом тема АОНа наконец-то исчерпана до дна, можно закапывать эту стюардессу. Однако, среди первых комментариев под видео BAD AON обнаружилась новая шутка юмора:

Комментарий

Продолжение следует?

Telegram-канал со скидками, розыгрышами призов и новостями IT ?

Комментарии (24)


  1. 19Zb84
    26.05.2024 15:55
    +4

    очень крутая игра ) Мне китайцы её в свое время показали. Потом играли месяцами в неё. Когда увидел bad apple прямо прослезился )


  1. Javian
    26.05.2024 15:55
    +1

    Когда увидел в телеграмме примерно месяц назад, то был неспособен прокоментировать увиденное - мысленно не мог поверить что кто-то это сделал: этого не может быть потому, что не может быть :)


  1. ImagineTables
    26.05.2024 15:55
    +7

    «Крут, а мы перед ним сынки!» ©


  1. tronix286
    26.05.2024 15:55
    +4

    Да не, дум на таком экране мне кажется не вариант, и на классическом z80 со стандартной скоростью. Да, можно собрать N аонов в дисплейное поле как у Гайвера, и дум все-таки будет узнаваем на таком дисплее (привет порту FastDoom с его текстовыми режимами), но вот что делать с CPU не ясно - в кластер их (АОНы) не особо объединишь, ибо z80 по-момему не заточен под мультипроцессорность по умолчанию (в отличии, кстати от 8080). Хотя конечно можно попробовать изобрести свой арбитр шины и попробовать построить мультипроцессорную z80 систему, но она уже не будет классическим АОНом. Ну и не потянет Z80 оригинальный дум на приемлемой скорости даже в этом случае, ибо там мало что параллелится. Вон, недавно все-таки собрали Doom для 8088 с помощью опенваткома и какой-то матери, но естественно столкнулись с проблемой 640Кб памяти и медленным маппером немножко дополнительной (EMS), и как итог - один кадр в пять минут примерно и только первый уровень, ибо остальные падают из-за нехватки памяти и прочего. Даже на 286 ситуация не лучше. Убрали текстурирование вообще - стало получше, но все равно далеко от идеала. Поэтому мне кажется АОН себя уже полностью раскрыл -) Могу посоветовать другую платформу, для которой нет демок - это УКНЦ МС 0511. Ну ладно, есть одна демка, но и она порт с БК, и на этом всё. А УКНЦ это два (sic!) 16-битных проца, 8 цветов в довольно приличном разрешении экрана 640 × 288, 96Кб памяти. А с хитрыми трюками и все 128 цветов (правда с очень большими ограничениями). Ну и плюс много много фана с попыткой хотя-бы просто вывести точку на экран в заданных координатах. Рекомендую -)


    1. shiru8bit Автор
      26.05.2024 15:55
      +5

      Я согласен, настоящий Дум на АОНах не взлетит никак, хоть их сто штук в стопку поставь и в вычислительный кластер объедини. Но может взлететь типичный вариант, когда что-то просто называют Doom, и придают ему пару узнаваемых черт. Как-нибудь напишу про это занимательное техно-культурное явление (новости типа «Doom запустили на этом и на том»).

      С УКНЦ я знаком, но не близко: она была у меня в школе в кабинете информатики, и я там успел потыкать в Бейсик Вильнюс-88. В 2000-х неоднократно пытался делать подходы к этому снаряду, находил и читал документацию, и так далее. Но сначала остро стояла проблема отсутствия эмуляторов, а потом отсутствия средств разработки. Кросс-средств ещё пару лет назад не было совсем, и предлагалось пользоваться нативными внутри эмулятора. Сейчас кросс-компиляторы вроде появились, так что приоритет УКНЦ в списке потенциальных платформ для моих будущих демок конечно же растёт.


      1. DrMefistO
        26.05.2024 15:55
        +4

        Меня вот расстраивал всегда запуск дум на чём-то, куда всобачили: новый soc, больше оперативки, ввод пользователя - это я про тесты на беременность и иже с ними.


      1. Javian
        26.05.2024 15:55

        Наблюдаю за чатом в телеграмме и не заметил использования кросс-компиляторы - в чате делают магию в MACRO-11


        1. shiru8bit Автор
          26.05.2024 15:55

          Ничего, если никто не, побуду первым. Главное, чтобы сами кросс-компиляторы были в принципе, это критически важный момент. И как минимум один есть: БК Турбо8. По описанию выглядит достаточно рабочим, но это ещё предстоит проверить.


          1. Javian
            26.05.2024 15:55

            Я так понимаю ,что главная проблема раскрыть потенциал двухпроцессорного монстра, что надо понимать как работают два процессора - кто какую память видит и насколько быстро с ней работают.


            1. shiru8bit Автор
              26.05.2024 15:55

              Два процессора - стандартная ситуация на 16-битных игровых машинах, но там высокая специализация. В УКНЦ более универсальная система. Учитывая, что со звуком на УКНЦ всё плохо, самая очевидная идея - попробовать загрузить один процессор синтезом звука. Но пока непонятно, сработает ли это, как там со стабильностью таймингов в том числе.


              1. Javian
                26.05.2024 15:55

                В чате видел использование AY и аппаратного MIDI синтезатора на плате расширения - думаю они не сильно нагружают процессор. А вот по музыкальным способностям встроенного бипера там много претензий - и плохая пьезопищалка и нет таймера.


                1. shiru8bit Автор
                  26.05.2024 15:55

                  И AY, и MIDI можно послушать на чём угодно. Зачем делать это на уникальной машине? Гораздо интереснее заставить её звучать своим голосом. Вместо (или вместе) пищалки можно выводить звук на любой порт, даже на тот же магнитофонный выход. Таймер - не проблема, главное, чтобы тайминги выполнения операций не плыли.


    1. kmeaw
      26.05.2024 15:55
      +1

      А чем именно 8080 лучше Z80 подходит для многопроцессорных систем?


  1. grishkaa
    26.05.2024 15:55
    +2

    Хы. Я тоже делал Bad Apple на телефоне, но есть нюанс)


    1. DrMefistO
      26.05.2024 15:55
      +1

      Помню. И помню, что прокоментировал, мол, без основной инфы чего и как, т.е. самого интересного: https://habr.com/ru/articles/645085/#comment_23995273


  1. playermet
    26.05.2024 15:55
    +2

    Вот еще примечательные экземпляры:


  1. alextradex
    26.05.2024 15:55
    +1

    Первый абзац так и задумывался текст? "в условиях крайне ограниченных ограниченных ресурсов"


    1. shiru8bit Автор
      26.05.2024 15:55

      Издержки быстрого редактирования. Спасибо, поправил.


  1. qbertych
    26.05.2024 15:55
    +3

    Самую мякотку забыли: в отличие от Doom, Bad Apple черно-белый и контрастный, а значит его контур можно запускать и на векторных экранах, не поддерживающих растр. Вон посмотрите что с ними @pyhesty вытворяет.

    P.S. Ну и сам себя не похвалишь - никто не похвалит ;)


    1. shiru8bit Автор
      26.05.2024 15:55
      +1

      Возможно, я не акцентировал на этом достаточно внимания, но векторную версию для Vectrex-то упомянул.

      Да, такое нужно хвалить, очень прикольная идея! Похоже, что яблоко — оно как атом, практически неисчерпаемо.


  1. axe_chita
    26.05.2024 15:55
    +2

    Добавлю версию для MSX, не требующую никаких дополнительных устройств для выполнения (не считая контроллера дисковода с приводом и дискеты). Про неё даже была статья @Pyhesty на Хабре "Bad Apple для MSX на CC'21" с описанием "внутренней кухни".


    1. shiru8bit Автор
      26.05.2024 15:55
      +2

      Больше яблок, хороших и разных! Радует, что и на Хабре уже есть материалы на эту тему. Традиция живёт.


  1. Manwe_SandS
    26.05.2024 15:55
    +2

    Небольшая пометка о БК 0011М – приведённая версия работает только на разогнанной до 6 МГц БК. Но есть и другая версия, для стандартной БК. При этом она выглядит интересней: https://www.youtube.com/watch?v=8Q1vN51o-Dg


    1. voldemar_d
      26.05.2024 15:55

      А почему при быстрых перемещениях картинки влево-вправо видны артефакты в виде горизонтальных полос, похожие на "интерлейс"? Какие-то особенности, связанные с малым количеством памяти или быстродействием?