Pull to refresh

Comments 32

Наконец-то реально интересная статья по МК, а не очередное элементарное поделие на Андуинке
На самом деле, в хабе «Программирование микроконтроллеров» в последнее время не так уж и много статей про Ардуины.
Превосходно! Прямо луч света в тусклом царстве ардуин :)
Было бы неплохо, если бы вы выделили свою tinySM в отдельную библиотеку с простыми примерами использования на типовых задачах и написали статью с подробным разбором того что и как там работает внутри tinySM (именно внутри, с таймингами и прочим).

Понятно, что всю эту информацию можно получить проанализировав исходники игры, но так было бы проще и понятнее для большинства интересующихся вопросами многозадачности на микроконтроллерах.
Предложение отличное, но действительно ли это нужно? Да, это могло быть неплохим дополнением к статье про профилирование, но этих билиотек с десяток и более, даже Вы делали нечто идентичное и писали статью. Более того, у меня нет никакого желания вести монолог с сами знаете кем (хотя статьи у него отличные).
Пара придирок. Консоли первого поколения — это как раз упомянутый Pong из начала 70-х, где не было даже процессора. А у AVR на 16 МГц вычислительной мощности на порядок больше, чем у консолей даже четвёртого поколения (SNES, Genesis), ближе к GBA. Памяти, конечно, очень мало, и с экраном на SPI тяжело. Но в целом на тех же ресурсах, как давно известно на примере UzeBox/FuzeBox, можно генерировать и RGB видеосигнал чисто в софте, и многоканальный звук, и ещё остаётся время для логики схожих по сложности игр.

Ну а так круто, дело хорошее. Нужно больше подобного творчества.
Благодарю, вполне обоснованные замечания, но осмелюсь заметить, что сравнение я приводил на аппаратном уровне, так как у первых консолей как раз ничего не было. Здесь же да, перегнул, будет ближе к 3 поколению, обязательно исправлю этот казус, но грубую вычислительную мощь без аппратных блоков трудно отнести к какому либо поколению.
Мне известно что можно выводить RGB сигнал, но зачастую там используют уже ассемблер, как например в этих играх:

Кто знает, может еще через года два будет будет от меня статья с очередной игрой, но уже с ассемблером. Уже сейчас я недалёко от этого. Например, когда игрался с SPI удавалось сделать много интересных эффектов изменяя время передачи данных и накладывая байты друг на друга.
Благодаря доступу к железу можно точно указывать паузу между байтами:
inline void sendData8Dirt_SPI1(uint8_t bData, uint8_t len)
{
  // +2 mov cycles
  asm volatile(
    "out %[spdr], %[bData] \n"  //  1 - transmit byte
    "dec %[len]            \n"  //  1 - decrease count
    "brne .-4              \n"  //  1 -false 2-true; is it 0?

    :
    [bData] "=r" (bData),
    [len]   "=r" (len)

    :
    "[bData]" (bData),
    "[len]" (len),
    [spdr]  "I" (_SFR_IO_ADDR(SPDR))   // SPI data register

    : "cc"  // indicates what flags may be clobbered
  );
}
UFO just landed and posted this here

Интересно, сколько fps выдает игра?

Нисколько — это просто нельзя подстчитать, читайте внимательнее пожалуйста:
Поэтому я пошел дальше — полностью отказался от кадровой привязки.

Извиняюсь, конечно, за мой прокол, но дисплей, дисплей-то spi. А это накладывает некоторые ограничения на передачу большого фреймбуффера. Но поскольку отрисовывается только изменяемая область — я не в понятках. Хоть скажите, играется динамично, как на nes или медленнее?

На Famicom/NES есть как динамичные игры так и медленные, так что сложно сказать. В целом по ощущениям и времени отклика можно сказать что игра работатет около 20-25 кадров/с.
О ценить частоту кадров тут куда сложнее чем на Sega Saturn с ее двумя видеопроцессорами для 2D и 3D графики.
Вы просили критики, их есть у меня! )
На самом деле, я просто поражён. Во-первых, настолько детальная проработка мелочей (это как о проекте, так и о статье). Во-вторых, даже не представлял, что возможно столько вытянуть из ATmega32. Материала в статье хватило бы на десяток статей, многие вопросы можно рассматривать совершенно обособленно. Хотя видеть всё в составе одного проекта намного интереснее. Для меня это одна из лучших статей за всё время чтения Хабра и ГТ.
Жаль, не смогу попробовать, для меня дороговаты комплектующие. Мне б попроще ардуинку и дисплейчик от Нокиа. Или даже ТВ-выход (монохромный), что уже никому не интересно, как показывает практика.
Ещё на что обратил внимание, нет ни одной ошибки в тексте, очень часто этим страдают даже очень хорошие специалисты. Вроде и стараешься не обращать внимание (мы ведь не за это статьи оцениваем), но раздражает порой очень.
Ещё возник такой вопрос: сколько раз перезаливали прошивку? У меня на некоторые проекты (на несколько порядков проще вашего) уходит по несколько десятков перезаписей, ресурс некоторых подопытных уже должен подходить к концу.
Как заметили выше — это не максимум на что способен этот контроллер.
Ошибок много, позже подкорректирую, также заметил, что не все поместил из запланированого.
Буду добавлять еще, так что: «stay tuned».
Практика показывает, что когда разработчику не хватает ресурсов он берёт камень посильнее, а делать нечто большее чем вывод монохромного текста по RCA и умещать невмещаемое уже совершенно другой уровень.
Сложно сказать сколько раз переливал за год с лишним разработки, но около 30 раз в неделю точно.
когда разработчику не хватает ресурсов он берёт камень посильнее

Вот этим мне и не нравится современная электроника. Я, наоборот, люблю использовать по-максимуму, это ведь намного интересней. Хотя экономически может быть и нецелесообразно, учитывая затраченное время.
30 раз в неделю за год- это уже 1500 раз, живучий, в интернете пишут про ресурс в 1000 записей.
В даташите на Mega 10000 перезаписей для Flash.
Сейчас почитал- действительно для флеш 10000 и для еепром 100000, а у меня в памяти отложилось 1000 и 10000 соответственно. Так что можно расслабиться и шить, шить…
Вы меня извините (не хочу, чтобы меня заминусовали), но ошибки есть: «также» только один раз написано правильно, во всех остальных местах — неправильно. И деепричастный оборот употреблён с ошибкой. Давно заметил, что авторам технических текстов необходим корректор. Очень мало кто способен соблюсти все нормы русского литературного языка. А ведь такие статьи — литература, хочется получать эстетическое удовольствие от из чтения.

По содержанию статья отличная, автору большое уважение за подсчёт тактов и прочие демосценерские трюки. Сейчас тоже пишу игру на очень слабом железе, прекрасно понимаю героизм автора :)
Да, если всматриваться, ошибки можно заметить, но они не «режут глаз». Многим действительно нужен хороший корректор. Вы про свою игру напишите. Маловато игр на Хабре.
Благодарю за замечания, нашел машину с вордом (у меня стоит LibreOffice) и прогнал через него. Что нашел — исправил.
UFO just landed and posted this here
Хм, вроде не ошибся в подсчете или Вас смутило, что выглядит как ничтожная доля наносекунды, а не секунды?
UFO just landed and posted this here
UFO just landed and posted this here
У вас и с мс (миллисекундами), кажется, не корректно. Наверное мкс должно быть.
Супер! Только:
SPI на AVR помимо того что работает на скорости F_CPU/2, так и регистр данных всего на 1 байт (нет возможности загружать 2 байта сразу).

XMega тоже AVR и подобное реализуемо. :)
На сколько я понимаю, в отличие от NES тут всё несколько сложнее в реализации. Да, процессор NES на порядок медленнее, но у него есть аппаратный скроллинг экрана, отдельный звуковой процессор, да и вообще он больше заточен под игры.

А почему именно AVR? Это был, как сейчас говорят, challenge? По мне так можно было бы взять STM32F030F4 — там ножек как раз впритык, но периферия сделана более грамотно и удобно, а частота в 3 раза выше, что позволило бы сделать гораздо более плавные и красивые эффекты, рассчитываемые в реальном времени.
NES разрабатывалась ориентировочно в 1981, чтобы запускать игры типа первого аркадного Donkey Kong. Железо соответствует, крайне примитивное. Никто и отдалённо не представлял, что на ней будет возможно сделать какую-нибудь Contra 1988 года. Нам кажется это нормальным в ретроспективе, кажется, что NES сделана для подобных игр, но по факту та же Contra, да и почти любая игра после 1987 года — это технологическое чудо относительно возможностей платформы. 'Аппаратный скроллинг' на NES сейчас не пожелаешь и врагу, 'звуковой процессор' к процессорам никакого отношения не имеет, всё равно всё проигрывание музыки делает основной, и так далее. Так что нет, 'тут', на AVR с 16 MIPS, всё определённо проще. Хотя тоже challenge, и тоже интересный.
Почему в PS1,PS2 и PS3 нельзя воткнуть core-i7 и пару GTX 1080?

Ну как же Вы так?
У меня ведь в начале указано, что как и почему, как раз на возможные вопросы как Ваш. Более того, в конце статьи в опросе есть как раз половина Вашего вопроса.

Возможно, дело в том, что на плате Arduino Esplora стоит именно AVR, так что это не challange, а просто разработка под конкретное железо.
Будет у меня Gamebuino META буду писать под нее и про нее.
Да, там стоит не STM32, а ATSAMD21, но это тот же ARM Cortex M0+, только памяти RAM и ROM немерено если сравнивать с AVR.
Поиск пересечения прямоугольников можно сделать еще компактнее и эффективнее: https://gamedev.ru/terms/AABB

Для кривых Безье для максимальной плавности вам надо искать аргумент, который даст следующий прирост по x/y, для этого вы можете взять первую производную — она проще для вычисления.
Sign up to leave a comment.

Articles