Создание AONDEMO

Хотел сделать демку с тех самых пор, как познакомился с этим явлением компьютерной субкультуры на классическом примере польской Lyra II. Также регулярно хотел выставить что-нибудь на Chaos Constructions, но каждый раз не доходили руки. Наконец-то удалось удовлетворить обе потребности сразу, в стиле Ван Дамма (двойной удар, с вертушки) — сделать и выставить AONDEMO. В ZX Spectrum 640K Demo.



Вашему вниманию предлагается подробное руководство, как именно можно докатиться до жизни такой.



История

Телефоны с Автоматическим Определителем Номера (АОН), также известные как 'определитель' или 'электронный секретарь', появились в СССР примерно в 1989 году, и в последующие 15 лет бурно развивались, пройдя путь от средства заработка студентов, безработных инженеров (наряду со сборкой Спектрумов) и целых кооперативов, до основного предмета деятельности довольно крупных компаний. В середине 1990-х годов подобный телефон встречался чуть ли не в каждой квартире, и любой пользователь телефонной сети на раз мог по характеру гудков в трубке понять, определяется ли сейчас его номер (поддельные гудки и характерный звук запроса). К 2004 году популярность подобных аппаратов сошла на нет, сам сервис определения номера на АТС сначала стал платным, а потом и вовсе был упразднён, сменившись на более современный европейский стандарт. Повсеместное распространение мобильной связи быстро загнало проводные телефоны в глубокий андерграунд, где всё ещё выходят непонятно кем востребованные 'элитные' потомки АОН 90-х (Палиха).

Сцена разработчиков и сборщиков ранних АОН — это как бы параллельная отечественному Спектруму реальность. Радиолюбительские корни и романтика, схожее железо, схожие интересы, схожий период и объём популярности. Многие люди поначалу одновременно занимались тем и другим. Юные авторы всесоюзно известного ПО (Павлу Суходольскому, автору Руси, было тогда около 15 лет), невозбранное заимствование кода друг у друга, копирайты и послания в коде, фидошные адреса, статьи в прессе, книжки, мифология, и многое другое. Весьма масштабная, но уже основательно занесённая песками времени история начала цифрового века, ещё ждущая своих исследователей.

АОН и я

Моё знакомство с АОН состоялось в первой половине 90-х, уже после первых увиденных игр на Спектруме и Денди, но незадолго до начала созидательно-программировательной деятельности. Мне нравилось ковыряться с этими телефонами, экспериментировать с последовательностями клавиш в свежих или незнакомых прошивках, слушать популярные мелодии в 'компьютерном' исполнении и удивляться 'компьютерным' голосам, а также вычитывать в инструкциях упоминания неведомых артефактов 'запись на магнитофон', 'шлейф охраны', 'голосовая плата', 'бипер'. Друг детства помогал своему отцу собирать подобные аппараты, а я увлекался электроникой и только-только увлёкся компьютерами, и таким образом урывками приобщался к тайному знанию про Z80, ВВ55 и другие магические обозначения. Одновременно 'определители' стали появляться у всех друзей. Они часто ломались и попадали в мои руки с просьбой попробовать починить, чем я и занимался, иногда успешно, чаще нет. В 2000-х эта деятельность сошла на нет.

В 2013 году при раскопках самых дальних углов квартиры я наткнулся на пару сохранившихся телефонов и вспомнил былые времена. Немного позже тогдашние изыскания в области 1-битной музыки, DIY-синтезаторов и особо старых компьютеров типа KIM-1, навели меня на мысль, что АОН — это же готовый, вполне полноценный одноплатный компьютер, который может быть задействован в нестандартных музыкальных целях (как драм-машина или секвенсор). Исполнившись энтузиазма, я начал писать эмулятор и разбирать старые прошивки, но вскоре обнаружилось, что найденные ранее телефоны были вполне успешно выброшены в процессе уборки. Тема была отложена в долгий ящик.

Постепенно различные интересы, затеи и предметы — разработка PCSPE для PC Speaker, воспоминания и интерес к старым телефонам с АОН и их истории, чтение сайта 155la3 про редкие советские радиодетали (изумительные сегментные индикаторы!), старые идеи про музыкальное применение этого железа, приобретение множества АОНов на Avito, а также электронных запчастей и инструментов для разных проектов, продолжение работы над эмулятором, и так далее — сложились в нужную схему. Незадолго до Мультиматографа 2018 наконец-то оформилась логическая связь между сущностями 'демо' и 'телефон' (насколько я могу вспомнить, это было вызвано увиденным словосочетанием 'демка для калькулятора'), и началась целенаправленная работа. Конечно, ничего существенного за неделю с небольшим сделать не удалось, дело замедлилось, но возобновилось с приближением CC2018. В лучших традициях, ударным трудом и неимоверными усилиями за два дня и ночь перед пати удалось допридумать, донаписать и отладить большую часть задуманного, снять и смонтировать видео, и рано поутру отправить работу на конкурс.

Уже после релиза я узнал, что семисегментные дисплеи не редкий гость в работах для Wild compo. Но я таковых не видел и про них ранее не слышал.

Железо



По сути АОН представляет собой простейший одноплатный компьютер с семисегментным дисплеем, телефонной клавиатурой и интерфейсом сопряжения с телефонной линией. На протяжении полутора десятка лет железо менялось, начиная от конструкции на КР580ВМ80 (i8080) 1989 года и заканчивая заказным чипом R100-XP компании Русь-Телеком 2003 года (8051, периферия и аналог AY-3-8910 на одном кристалле), со множеством промежуточных остановок и ответвлений.

Я выбрал самую классическую и популярную версию разработки 1990 года, исторически и технически наиболее близкую духу Спектрума: Z80 на частоте 4 МГц ровно, 2 килобайта статического ОЗУ, 8-64 килобайт ПЗУ, порт 8255 и таймер 8253 со входной частотой 1 МГц. Один из каналов таймера генерирует прерывания, другой звук, третий не задействован. Эта схема была представлена в виде 'большой' и 'маленькой' плат, первая предназначалась специально для установки в корпус латвийского кнопочного телефона VEF-TA-12, вторая ставилась в самые разнообразные импортные телефоны, в основном клоны офисных Panasonic. Для этих плат существовали разнообразные прошивки, в частности, Арктур-36, Селена, Лира, Алло. И, конечно, самая знаменитая — Русь, до 23 версии включительно.

Перепрограммировать телефон очень просто — достаточно любого 5-вольтового ПЗУ нужного объёма и программатора. Я использовал различные EEPROM со старых материнских плат и свежие Winbond W27C512, закупленные в Китае, а также самый простой и доступный программатор WizardProg-87.

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

Эффекты



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

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

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



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

Первые имена в блоке приветствий — дань уважения энтузиастам прошлого. Это имена авторов прошивок АОН, найденные в заставках и коде.

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

Разбор программной реализации эффектов не имеет особого смысла, всё достаточно прозрачно. Главной особенностью платформы, о которой стоит упомянуть, является необходимость программной динамической индикации, то есть надо постоянно перебирать разряды дисплея и включать нужные сегменты. Это сделано посредством прерываний. Частота прерываний выбрана довольно высокой, 960 герц (~4166 тактов на прерывание), а индикация сделана посредством списка произвольной длины, описывающего порядок включения разрядов. Помимо стабильной индикации с приличной яркостью это позволило легко сделать два эффекта — 'зависание' с характерной яркой восьмёркой (перестаёт работать перебор разрядов) и эффект изменения яркости (в одном цикле некоторые разряды включаются несколько раз). В нормальном режиме индикации частота обновления дисплея составляет около 106 герц, что устранило заметное глазу мерцание и упростило последующую съёмку на видео.

Музыка

Единственный звуковой канал АОН построен на одном из каналов таймера 8253 и по сути копирует устройство PC Speaker, только с другой входной частотой — то есть он может гудеть звуком заданной высоты, пока процессор занимается своими делами. Возможности изменять форму и громкость сигнала при этом нет. Так как я уже некоторое время плотно занимался темой музыки на классическом PC Speaker'е — написал VST-инструмент PCSPE для удобного создания таковой музыки в современных DAW и накопил опыт аранжировки строго монофонических мелодий (в один момент времени всегда звучит только одна нота) — решение было очевидно: не писать очередной 1-битный движок, а просто сделать музыку в PCSPE и адаптировать под АОН. Это и менее трудозатратно, и аутентично по звучанию, и идеологически верно — выжать необычное из привычного.



Музыка писалась в Reaper. Так как художественной задумкой для начала демо была имитация стандартного запуска прошивки Русь, я точно повторил эту мелодию, имитировал некоторые типичные звуки (нажатие кнопок, стандартный звонок), и построил из них ритмическую композицию. Далее трек постепенно развивался, исходя из начальной идеи, по пути постепенного усложнения — всё больше и больше партий, создающих иллюзию одновременного звучания нескольких каналов. Так как идеей самого сложного в демо эффекта был бегающий влево-вправо символ с разными уровнями яркости, напоминающий светотехнику машины Kitt, я также сделал вставку с мелодией из Knight Rider и нашёл ей подходящее место.

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

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

Помимо звуков, прошивки для АОНов были примечательны голосовыми сэмплами. В процессе работы я разобрал в общих чертах их формат хранения и прослушал сэмплы, в которых нашлось немало любопытного (3-4 разных голоса, ненавязчивое заимствование их из прошивки в прошивку, фразы отсылания абонента в различные места). Была идея сделать в демо речевую вставку, составленную из этих сэмплов, говорящую что-то неожиданное узнаваемым голосом. Но на придумывание хорошей идеи и её реализацию не хватило времени. Как интересный факт, голос в старых прошивках хранится в виде 4-битных сэмплов с частотой дискретизации 4500-5000 Гц, и играется через ШИМ на таймере.

Видео

Чтобы показать демо для необычного железа, не имея возможности присутствовать с этим железом на пати, понадобилось записать и смонтировать видео.



В процессе разработки использовалось два аппарата, один совершенно непрезентабельный с маленькой платой и один хорошо сохранившийся классический VEF-TA-12 с большой платой. Тестирование проводилось в основном на первом, а последние отладочные штрихи и запись видео — на втором. Он также отличается в выгодную сторону визуально более крупными цифрами на дисплее, хотя тип индикатора в нём такой же. Наверное сыграло роль меньшее расстояние от дисплея до светофильтра.

Интересной особенностью этого дисплея, калькуляторного АЛС318, оказалось то, что у всех экземпляров АОНов с ним, которые есть у меня в наличии, часть разрядов заметно утратила яркость. Скорее всего дело в том, что АОНы любили зависать, а при зависании динамическая индикация перестаёт работать и надолго зажигается полной яркостью один из разрядов. Хотя можно было бы выбрать и поставить наиболее живой дисплей, я не стал ничего предпринимать по этому поводу, решив, что это добавит аутентичности в видео.

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

Релиз и результаты

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

В связи с недавним обсуждением поправки к правилам и горячими спорами о них я подумал, что надо выставляться в категорию ZX Spectrum 640K Demo, которая, несмотря на вполне конкретное название, теперь подразумевает Combined 8-bit. Тем более, что была анонсирована работа для RCA Studio II, и я ожидал, что она также пойдёт в ZX Demo, значит моя работа не окажется там единственной. На пати же по причине недостаточного количества работ в разных конкурсах большую часть демо для редких платформ и Wild объединили в Combined Demo, а в ZX Demo помимо моей работы попала только одна не-ZX работа. В сложившейся ситуации я считаю, что уместнее было бы выделить эти две работы в Combined, оставив на этот раз конкурс с ZX Spectrum в названии только для ZX Spectrum. Если бы я знал о таком положении вещей на момент отправки работы, то сам выбрал бы категорию Combined Demo.

По каким соображениям я решил не выставляться в Wild. Не спорю, что по сути работа очень близка к этому направлению. Но всё же это реальное демо, с реальным TRD бинарником и исходниками, для реальной и весьма популярной в прошлом платформы, родственной нашим домашним компьютерам. Его можно легко запустить и посмотреть на реальном железе — нужен только программатор, как и в случае с приставками. Само железо тоже вполне доступно, определённо доступнее, чем, например, ZX-81. Также есть какой-никакой эмулятор. Иными словами, это не разовая уникальная сложно повторяемая акция в виде видеоролика (типа демки для банкомата или редкой модели фотоаппарата), посмотреть мою работу и сделать нечто подобное теперь достаточно легко сможет любой желающий.

Рассуждать про 'если бы да кабы' уже мало смысла. Ясно, что название компо или правила CC, как и общая политика относительно нестандартных платформ (а в этот раз были работы для Sega Mega Drive, БК-0011, Радио-86РК и RCA Studio II) на всех отечественных демопати, требуют уточнения. Пока же — что сделано, то сделано, получилось как получилось. Но 'если бы да кабы', и великолепная Size Matters не была дисквалифицирована, уверен, она заняла бы первое место. Для меня это победитель вне категорий, виртуозно сыгравший над рамками конкурсов.

Скачать

AONDEMO с исходниками
AONZ80Emu для Windows
LED9ED для Windows
PCSPE для DAW с поддержкой VSTi

26 комментариев

avatar
Очень интересно про всю эту АОНщину! Есть какие толковые материалы про историю движения почитать?
avatar
К сожалению, с тех пор зафиксированного в буквах сохранилось немного, в основном в памяти людей, да и те не особо вспоминают. Старые сайты были не очень информативны, и они постепенно исчезают. Есть книжка 'АОН в телефонных аппаратах' 2003 года (http://padaread.com/?book=16563), там в основном про железо, но есть немного и про историю. Были статьи в разных радиолюбительских журналах, с забавными завязками типа 'купили на радиорынке бумажную схему за 20 рублей' (Радиолюбитель 8-91). Что-то сохранилось в архивах фидо. Есть инструкции от прошивок в текстовом виде (могу сделать подборку) и обзорные статьи на старых сайтах, типа teleconica.ru/articles/3.html

Но самое прекрасное, что нашлось недавно — www.liveinternet.ru/users/genuinelera/post242143508/ (вторая фотка поразительно напоминает типажи из сериала Компьютерщики)
avatar
Это ровно тот случай когда срочно нужно делать академического уровня рисерч по теме, пока она еще в сознании…
avatar
А пзушка с демой защищена от копирования?
  • tsl
  • 0
avatar
Было бы забавно, но нет. Но похоже, те самые плавающие байты от ZX-Next вращались и в этих кругах: 'SELENA-2 защищена от копиpования «плавающей» контpольной суммой.'
avatar
Я ее сломал в 90-х, когда знакомые барыжили этими аонами на львовском рынке.
avatar
Очень круто!

надо выставляться в категорию ZX Spectrum 640K Demo
Самое правильное решение, при условии что ещё и победил — это максимально должно обострить проблему совмещения :) Наверное
avatar
великолепное демо! спасибо, Shiru! Tы крут, как всегда
  • bfox
  • 0
avatar
Звучит как: «Ребята, TRD у нас нет, но вот вам бинарник перепрошьете свою трдосную пзушку и увидите наше демо».

К автору претензий нет, даже замечательно что он своей работой поднял проблему уточнения правил. Есть жесткий список платформ, что-то другое уходит в wild. До 91года самого разного железа, с похожей архитектурой и электроникой было много. И вот вроде железо, более слабое, но в живую оно намного интереснее выглядит, потому что не приелось так сильно.

P.S. Ждем дему на станке с ЧПУ! Если мне память не изменяет, то часть их на z80 работало.
avatar
ЧПУУУУУУ на порядок патриотичнее будет утомивших всех ААААМИГА
avatar
снос крыши у меня произошел на фразе «Музыка писалась в Reaper»…

а чего не так с Size Matters?
avatar
а компот с ней. идея неплоха, но куча разностилевых интр в одной кастрюле…
avatar
Ширу, поздравляю с дебютом!
Очень хотелось бы увидеть что-нибудь от тебя под обычный спектрум!
  • sq
  • +3
avatar
Спасибо за прекрасное demo и подробный рассказ!
p.s.справедливости ради — я не анонсировал именно demo для RCA. Я сказал, что пишу интру. Так что она бы никак не попала в эту же номинацию :) Конечно, я бы мог выставить её в ZX Spectrum intro, но не стал, чтобы лишить противников новых правил аргументов вида «он продавил изменения правил ради своей интры».
Как уже было замечено выше — ситуация сложилась крайне удачно — работа очевидно выиграла у других НЕ в силу навороченности железа. Это должно положительно сказаться в будущем на совмещении демо для разных старых платформ в одном конкурсе.
  • frog
  • +1
avatar
Ты уж прости, Пётр, но и тут я не могу не вмешаться и не оставить ремарочку о том, что техническая навороченность железа практически никогда не играет на руку деме — в большинстве своём, в лучшем случае, это не имеет, а часто бывает даже совсем наоборот.
  • sq
  • +2
avatar
* не имеет значения

Нюк, сделай уже редактирование комментариев-то!
  • sq
  • +2
avatar
Конечно, я бы мог выставить её в ZX Spectrum intro, но не стал, чтобы лишить противников новых правил аргументов вида «он продавил изменения правил ради своей интры».

А может потому что сказали что там почти куча крутых интрух по этот, как его, фу-фу-фу, богомерзкий спектрум, свят свят свят
avatar
Отличное демо!
Порвало шаблон многим на патиплейсе :)

«По каким соображениям я решил не выставляться в Wild. Не спорю, что по сути работа очень близка к этому направлению. Но всё же это реальное демо, с реальным TRD бинарником и исходниками, для реальной и весьма популярной в прошлом платформы, родственной нашим домашним компьютерам. Его можно легко запустить и посмотреть на реальном железе — нужен только программатор, как и в случае с приставками. Само железо тоже вполне доступно, определённо доступнее, чем, например, ZX-81. Также есть какой-никакой эмулятор. Иными словами, это не разовая уникальная сложно повторяемая акция в виде видеоролика (типа демки для банкомата или редкой модели фотоаппарата), посмотреть мою работу и сделать нечто подобное теперь достаточно легко сможет любой желающий.»
Полностью согласен, демо не место в конкурсе где есть видеоролики.
avatar
Конкурс называется wild demo, анимация в другом конкурсе же
avatar
В этом году, я про прошлые года когда в wild были и демо и ролики.
avatar
Например www.pouet.net/party.php?which=12&when=2016 — анимация в конкурсе wild demo.
Возможно стоит выделять wild demo отдельно, когда набирается минимум 3 работы, и это должны быть именно демо, а не видео. Крутится в последнем «крутом» блоке конкурсов, который смотрят максимальное количество зрителей. Призы должны быть наравне с «большими» конкурсами, тогда wild станет не ущербным.
avatar
Не видел раньше. Однако:

avatar
Крутая проделана работа и очень интересно описан процесс.
avatar
habr.com/post/421961/
коменты доставляют
avatar
А трек из Reaper можешь выложить?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.