4 ноября 2010 в 15:18

Oldschool 1-bit ZX-Spectrum chiptune на отечественном RISC-микроконтроллере

KP1878BE1

Вдохновившись топиком 1-битная симфония Тристана Перича откопал в старом хламе пожелтевшую картонку 8-летней давности. Оказалось довольно непросто отыскать файл с прошивкой, залить её в контроллер (LPT-порт? а что такое LPT порт?) и оцифровать звучание, но полученная в результате доза ностальгии стоила того! Слушать результат > (зеркало).


Удовольствие назвать автора композиции и игрушку где она звучала предоставлю комментаторам (и чтоб было видео или картинки!), а сам немного расскажу о технической стороне вопроса.

8-битный RISC микроконтроллер КР1878ВЕ1 выпускался (и до сих пор выпускается) российской компанией Ангстрем. Данный экземпляр имеет на борту 1024 слова памяти команд, 128 байт ОЗУ и 64 байта энергонезависимой памяти. В отличие от контроллеров компании Microchip, набор команд побогаче и выполняются они за 2 такта вместо 4. Сейчас в плане периферии ему далековато до ассортимента тех же Microchip или Atmel, но ядро довольно неплохое. И если я правильно помню, по цене он тоже немного выигрывал у конкурентов.

Процесс портирования аудио-движка, ручной потактовой синхронизации и упихивания его в ограниченные ресурсы микроконтроллера суммарно занял несколько дней, но растянулся на 3 месяца. Почти всё делалось на Спектруме и только компиляция/дебаг выполнялись на работе где был доступ к PC. Видимо действительно есть смысл в выражении «Ограничения стимулируют творчество»?

Монтаж явно не претендует на изящество и эстетическую ценность, но в кругу спектрумистов данная штука неизменно вызывала восторг, потому что они ЗНАЛИ какой это изврат с точки зрения кода:
Demo board

Схема устройства (в классическом ASCII исполнении):
Schematics

Стоит заметить, что оцифрованное звучание несколько отличается от оригинала из-за неточного подбора номинала кварца. В идеале (при 7 МГц) 2 такта работы контроллера должны быть равны 1 такту Z80.

Исходник и бинарный вариант прошивки можно взять здесь.

Отвечаю на вопрос чем всё это прошивалось. Для заливки кода микроконтроллер помимо 5-вольтового питания требует напряжение 12 вольт и трёх линий для передачи данных. Рекомендованная схема программатора кажется была в документации на кристалл, плюс где-то в интернетах была нарыта более простая схема (а может и самостоятельно сделана, не помню). Выглядит в сборе она так (вроде всю пыль стёр :)
Programmator

Подключался он либо к PC через переходник на LPT, либо к Спектруму через самостоятельно выведенный на корпус и ни с чем не совместимый разъём. Управлялся соответственно фирменным ПО под DOS, либо самописной приблудой которая кажется была чем-то лучше и даже содержала простой декомпилятор:
Software



Если я не ошибаюсь, orangefox первым назвал игрушку в которой звучала эта композиция. Это конечно же Savage 3:

Screenshot 1 Screenshot 2

Насчёт автора есть разночтения. В некоторых местах я встречал упоминание Jason C. Brooke, однако как минимум во второй части трилогии упоминается David Whittaker.
+104
1900
32
cbx 26,0

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

+8
unbeliever #
Спасибо, очень сурово!
+3
Marshet15 #
Можно было бы каналы развести. Вообще сурово было бы. Я имею ввиду партии по каналам.
+3
demoded #
кучеряво однако распечатанные исходники, я вона помнится когда Tape Loader оригинальный разбирал так ручкой в тетрадку все писал :)
+5
cbx #
Это уже из позднего, пост-спектрумовского и пред-писишного периода :) А так да, тетрадка в клеточку и карандашик рулили со страшной силой. Собственно так же и кодить на спектруме начинал — на бумаге писал, потом шёл туда где есть спектрум и набирал (пока свой не купил).
+6
demis #
Отличная мелодия, куда лучше симфонии Тристана Перича — хоть по ушам не бьет.
+3
Disasm #
Вероятно, из-за конденсаторов в цепи.
+5
ivlad #
теплый конденсаторный звук?! вот он какой!
+2
questor #
Это из какой-то игрушки под спектрум кажется.
+4
orangefox #
Музыка из меню Savage 3. Автор — Jason C. Brooke
+2
leoperetz #
тепло… )
но видимо мало кто помнит.
только олдскульные гики, как автор.

действительно, эта игра со спектрума — Savage 3

как воспроизвести ее в современных условиях? ;)

1) берем снепшот игры здесь: zalil.ru/29918019
2) открываем онлайн эмулятор спектрума: wizard.ae.krakow.pl/~jb/qaop/
3) жмем ссылку «Try it online»
4) жмем «load»
5) подаем на загрузку скачанный снепшот

спасибо топик стартеру, авторам игры, автору спекртума, автору эмулятора.
0
TiGR #
Это из Savage 3, хотя ИМХО в Savage 1 была самая крутая мелодия в серии, и одна из самых крутых из написанных для бипера на спектруме. Послушать: vpleer.ru/?q=ZX+Spectrum+savage+part+1

Да и игрушка сама по меркам спектрума чумовая в плане графики и спецэффектов. На одном уровне с R-Type.
+4
Levsha100 #
Как АВРщик я завидую вам =)
Респект.
+2
Gordeev #
Искренний респект вам, это действительно круто!
+2
Lockdog #
А зачем диод VD1 в схеме?
+2
Hemul #
чтобы при нажатии на reset не происходило КЗ?
+2
Lockdog #
Нет, цепь RESET и без диода будет отлично справляться. Но это мелочи, тут главное код! =)
+2
cbx #
Через него в теории должен быстро разряжаться C1 когда пропадает питание (у этого контроллера нет цепи brown-out reset для принудительного сброса при недостаточном напряжении питания).
+2
Lockdog #
Ясно, спасибо
+2
Nico_izo #
Отлично сделано!
+3
Artima #
Мне уже хочется вернуть мой старенький спектрум… Пусть он у меня уже и не совсем ТРУ был — с флоппиком, но я всегда воспринимал его как чудо.
+2
unbeliever #
Так верни его — теперь это не проблема! Можно купить или собрать самому. Вся периферия (блок питания, клавиатура, монитор) от PC. Или оригинальную машину на E-Bay, но надо будет повозиться с подключением.
+2
Artima #
Я родственникам свой старый отдал… Вот про него и говорю. Современный конструктор (или же покупка нового девайса) лишен такого глубокого ностальгического налета :-)
+1
Artima #
Но за ссылку спасибо! Вдруг в будущем захочется.
+2
vitmeat #
Да в комментах на много более интересная история чем тут! )
+4
vitmeat #
В смысле в комментариях к коду, блин =/
0
Gordeev #
Уже четыре раза прослушал, что-то вот рядом крутится, а вспомнить никак не могу. Не мучайте, откуда мелодия? :)
–3
FB3 #
Наверняка тетрис какой-нибудь :)
0
deniamnet #
выше уже ответили
+1
sevmax #
Супер мелодия!!! Спасибо и респект! :)
+1
Grox #
Одна из лучших музыкальных композиций на Спекки, да и сама игра Savage хороша.
+1
dmtrlbdv #
Мне из Chronos больше нравилась. В Agent-X 2 тоже ничего была…
+1
leoperetz #
+2
cbx #
Да, Tim Follin заруливает всех. Самое лучшее из 1-битной музыки что я слышал — Raw Recruit, Chronos и Agent-X 2.
0
liveor #
Эй, а как же Rob Hubbard? Commando, Delta, Monty on the Run Theme, Thundercats, Lightforce
+1
orangefox #
cbx говорит явно о Спектруме. И, о да, Тим Фоллин на спектруме не превзойден.
0
TiGR #
В Chronos просто чумовой звук, я и не думал, что бипером можно выдать такое. Хотя в Dark Fusion тоже была хитрая мелодия.
+1
plandem #
David Whittaker тогда к доброй половине игр писал музыку :)
0
AndreyDmitriev #
Круто и спасибо за схему!
Коллега cbx, а расскажите, пожалуйста, в нескольких словах: каким образом и в чём создаётся прошивка и каким образом она загружается в микроконтроллер? Я в курсе, что можно доки почитать, просто любопытно, как это практически выглядит. Спасибо.
+1
cbx #
Очень хорошо о микроконтроллерах написано у DI HALT'а, например в курсе по AVR. Если же кратко и своими словами, то:

  • Изучается документация (без этого никак), выбирается микроконтроллер исходя из задачи/опыта/финансов
  • Собирается/покупается подключаемый к компьютеру программатор который умеет прошивать данный чип. Он может быть как с разъёмом в который помещается микросхема контроллера для программирования, так и внутрисхемный (умеет шить чип расположенный прямо в устройстве без необходимости его вытаскивать)
  • Выбирается язык программирования (как правило это ассемблер или Си), на котором собственно и пишется прошивка. В принципе знания Си и микроконтроллерной специфики достаточно, но на мой взгляд лучше этап изучения набора команд и ассемблера не пропускать — в ряде случаев без этого никак. Для многих контроллеров доступно огромное количество готовых библиотек упрощающих решение типовых задач.
  • Писать код можно как в обычном текстовом редакторе, так и в специализированной среде разработки если таковая имеется
  • Исходный текст компилируется в машинный код с помощью компилятора поставляемого производителем контроллера
  • При помощи программатора и его ПО полученный код зашивается в микроконтроллер, как правило при этом так же выполняется конфигурирование некоторых возможностей кристалла (например типа осциллятора, цепей сброса питания и т.п.)
  • При необходимости всё это отлаживается либо в эмуляторе, либо прямо на кристалле при помощи отладочных возможностей и специального ПО
0
Levsha100 #
А чем собственно шьется этот чип?
0
cbx #
Добавил ещё пару картинок в пост.
НЛО прилетело и опубликовало эту надпись здесь
0
Levsha100 #
на самом деле такой стиль был очень популярен до появления ЛУТа, большинство пятиминуток делалось именно так, если не на скрутке xD
0
cbx #
Вообще ЛУТ в 2000/2001 году я уже немного использовал, однако рисовать дома на спектруме разводку было проблематично, а на работе времени особо не было.

Да и родилась эта картонка во время отладки кода, поэтому основное желание было услышать звук а не сделать красиво :)
0
DIHALT #
А почему именно ВЕшка? Чисто ради экзотики?
0
cbx #
Какой-то особой логики в выборе не было. Когда начинал изучать микроконтроллеры, ковырял параллельно PIC'и и ВЕ1. Кажется её проще и дешевле достать было. Ещё в PIC'ах после Z80 бесила обрезанная до минимума система команд.
0
Halt #
Да ладно вам, это все таки RISC. Вообще MCS51 вполне себе нормальная система команд, бывало и хуже. По мне так их вообще сравнивать нельзя. гг, 35 инструкций хватит всем %)

Другое дело что некоторые моменты могут раздражать :)
+1
luckyredhot #
Всегда восхищался как самим спектрумом, так и озвучкой игр, особенно последних. Потом кейгенами :)
+1
xkspy #
Выше всех похвал!!! Эх, детство. куда ты убежало…
0
NikoM #
«Тяжелое детство, килобайтные игрушки»
0
cbx #
Счастливое детство, килобайтные игрушки для которых выпускались сборники команд POKE :)
0
TiGR #
Исходник радует.

Интересно было бы познакомиться с Дэвидом, спросить, как он до такой жизни докатился :) Ну то есть, как он такое придумал. Еще интереснее пообщаться с авторами музыки для хроноса и прочих нестандартных вещей.
+2
tushev #
Эх… Романтика 90-х! Тогда мы знали назначения каждого байта в программе, и каждого соединения на плате.

А сейчас, практически все делается только так: Берется обычный или специализированный компьютер, ставиться операционка на сотню-другую мегабайт. А потом пишем как-то так:
p = new Player("music.mp3");
p.play();

А современные программисты даже паяльник в руках не держали ))
0
burjui #
А современные потребители пищи не держали в руках копьё и дубину, так что теперь, горевать по этому поводу? Я сам недавно начал заниматься электроникой, но не думаю, что это нужно всем программистам. Думаю, при современной сложности ПО лучше уделять больше внимания принципам построения его архитектуры (:
0
Halt #
Сложность и раздутость — имхо разные вещи. Тот же системный загрузчик может быть много сложнее какой либо офисной проги, которая тем не менее может быть в десятки раз больше.
0
cbx #
Действительно что-то особенное есть в той эпохе которую мы к счастью успели захватить. Безусловно, современные технологии на порядки превосходят всё что было раньше. Но тот эффект «чистого листа» когда между человеком и компьютером не было огромнейшей прослойки сложнейшего ПО и архитектурных решений уже не вернуть.
0
tushev #
Если углубиться в философию, то полного эффекта «чистого листа» не было и тогда. Да, мы знали каждый байт и каждое соединение. Но знали ли мы назначение каждого логического вентиля или тригера в тех примитивных микросхемах. Вряд ли. А как работают отдельные транзисторы в вентилях? И т.д… Сейчас просто появилось еще больше слоев. Ну и как правило, слои настолько сложные, что один человек в состоянии хорошо понимать только один из этих слоев.
0
fleshy #
а поясните пожалуйста вкратце идею 1-битного аудиодвижка? как оно устроено? исходник скачал, сейчас гляну, но если он на асме да под незнакомую архитектуру, то не уверен, что быстро его раскурю
+1
cbx #
Если кратко и в теории, то используется изменение периода и скважности импульсов. На практике же я уже не вспомню как и что там работало. Если всё же интересно, рекомендую заглянуть в оригинал — код Z80 читается гораздо приятнее. Ещё может помочь работа Barmaley_m по дизассемблированию и комментированию движка zx.pk.ru/showthread.php?t=11881 с использованием которой был написан трекер биперной музыки Beepola.

Ещё вспомнил, что в старых сборниках ZX-Ревю была публикация на эту тему. Ищите 9-10 номера журнала за 1993 год (например здесь) и читайте статью В.А. Збитнева «Компьютер и звук».
0
fleshy #
ого, спасибо. спектрумский код видел ровно один раз, но думаю рано или поздно разберусь
0
rubyrabbit #
Помню, что была игрушка какая-то с черепахой, музыку из которой я даже записал себе на кассету и слушал потом. Кассета утеряна, название игры забыто. Наверняка, если услышу вновь, то впечатление будет уже не таким как тогда, но всё равно любопытно. Может помнит кто бродилку с черепахой? )))
0
ShouldNotSeeMe #
На мой взгляд, Savage — одна из игр с лучшей музыкой через бипер, да и вообще, многие игрушки от Probe были с неплохой музыкой.
0
ShouldNotSeeMe #
P.S. А музыка у Savage на Commodore 64 была совсем другая, ее писал Jeroen Tel.
0
wilelf #
Как насчет Target Renegade на моей волынке? zx-art.ru/target_r.mp3
0
Theo_from_Sed #
Нутром чую, David Whittaker автор — такую качественную музу пожалуй только он на Спеке писал.

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