Недавно я прикупил себе старенький и оригинальный — «тот самый» тетрис, а дальше меня затянуло. Собственно, нормальная ситуация. Однако, мне пришлось столкнуться с одной неприятной проблемой: если во время игры — скорость (ака сложность) повышается выше двух пунктов, то играть становится совершенно невозможно, а скоростей-то много…

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

Мне хотелось сделать фичу, навроде решения, как на стародавних компьютерах, у которых была кнопочка "Turbo", которая, несмотря на своё название, снижала частоту процессора. И таки да! Не буду вас томить — эта затея мне удалась, и на выходе получился весьма забавный и простой — аппаратный тюнинг тетриса.

Суть проблемы


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

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

Вот я, взрослый человек, и не смог пройти игру на третьей скорости, а что уж говорить о детях? Плюс, мне было дико интересно узнать, что будет, если пройти игру на максимальной скорости: покажут ли мультфильм в конце? При достижении определённого количества очков скорость растёт, а что произойдёт при взятии последней скорости?

Ну что же, настало время RTFM на процессор HT443A0.

Приступим!


Из статей «Так какой же процессор использовался в играх Brick Game?» часть 1 и часть 2 мы узнаем, что конкретно в этой модели тетриса установлен четырёхбитный микроконтроллер HT443A0. И если обратиться к документации, то можно выяснить, что частота процессора задаётся резистором.

Ниже привожу схему из документации на этот контроллер, которая попутно является просто принципиальной электрической схемой тетриса:



Но, как обычно бывает, нигде не сказано, какой номинал резистора отвечает за определённую частоту. Единственное, что мы знаем, в каких пределах его можно изменять (от 36 кОм до 620 кОм). Это значит, что настало время весёлых опытов.

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

Если вскрыть корпус этого устройства, то можно увидеть следующую картину:



В моём устройстве вместо пьезо пищалки, стоит магнитный динамик и небольшая схема усиления на одном транзисторе. Резистор снизу на фотографии нужен для схемы усиления. А вот резистор сверху – это явно сопротивление задающей частоты. Измеряем его сопротивление и получаем около 15 кОм.



Внимание вопрос: если мы уменьшим сопротивление – частота вырастет или уменьшится? Да, зная RC-цепочки понятно, что при уменьшении сопротивления частота будет расти, но нужно в этом убедится. Да и сверху напаять резистор проще, чем делать последовательное соединение.

Увеличиваем частоту


Подбираю номинал резистора в 15 кОм и припаиваю его в параллель к основному, тем самым уменьшая сопротивление ровно в половину.



И, вы знаете, факир был пьян, и фокус не удался, это сработало. Конечно, я хотел уменьшить скорость работы тетриса, а в результате ускорил его. Тем не менее это вполне себе рабочее решение.

Интересно теперь уменьшить частоту тетриса.

Уменьшение частоты


Попробую теперь уменьшить частоту в два раза. Для этого я просто подпаял резистор последовательно с основным, тем самым изменив сопротивление до 30 кОм.



И это оказалось тем самым сопротивлением, на котором тетрис играет адекватно, с той скоростью, которой должен.

Круто, теперь можно уже завинчивать и играть, но мне хотелось большего.

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

Добавляем регулятор частоты


Тут никаких высоких материй нету, просто заменяем постоянный резистор на переменный, найденный где-то в хозяйстве. И даже весьма удобно вывести проводочки из корпуса через батарейный отсек.


Крутилка

После сборки можно приступить к натурным испытаниям.

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

Выводы


Да — частоту работы микроконтроллера можно менять прямо на ходу. А вот насчёт мультика — сохраню интригу, пускай кто-то сам пройдёт, и проверит можно ли посмотреть его :)

Честно говоря, мне тоже хотелось приобщиться к этому движу вокруг реверса Brick Game. Даже немного поколдовал с транслятором ассемблера и некоторыми другими вещами. Но то времени, то вдохновения не хватает, то просто экосистемы таких же фанатиков. Поэтому для начала решил для себя сделать что-то простое и понятное.

Из забавного: понял, что можно сделать некий DJ тетрис пульт, видео с которым — успешно завирусилось у меня в шортсах:

Полезные ссылки:

  1. Процессор, который использовался в «Тетрисе»: на каких SoC работала недорогая микроэлектроника в 90-х?
  2. Так какой же процессор использовался в играх Brick Game?
  3. Так какой же процессор использовался в играх Brick Game? Часть 2
  4. Документация на микроконтроллер HT443A0

Если вам интересна металлообработка, старое железо, всякие DIY штуки, погроммирование и linux, то вы можете следить за мной ещё в телеграмме.



Возможно, захочется почитать и это:


Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале

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


  1. urvanov
    12.04.2024 08:23
    +2

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

    Вот я, взрослый человек, и не смог пройти игру на третьей скорости, а что уж говорить о детях? Плюс, мне было дико интересно узнать, что будет, если пройти игру на максимальной скорости: покажут ли мультфильм в конце? При достижении определённого количества очков скорость растёт, а что произойдёт при взятии последней скорости?

    13-летний школьник из США первым в мире прошел «Тетрис» до конца

    Гибсон опубликовал на своем YouTube-канале момент, где он переходит на
    157 уровень игры, набирая счет 999 999. После чего игра выдает ошибку и
    зависает.

    Boy, 13, Is Believed to Be the First to ‘Beat’ Tetris

    Theoretically, the game can go on forever if a player is good enough.
    For years, though, the limit was thought to be Level 29, when the blocks
    start falling so quickly that it seems as if it would be impossible for
    a human to keep up. But in the last decade, a new generation of Tetris
    players has tested those boundaries.


    1. dlinyj Автор
      12.04.2024 08:23
      +2

      Да, видел это. Но это было на NES. Тут другое устройство, но, благодаря @Azya у нас есть исходники, и мы можем даже предположить что будет.


    1. novoselov
      12.04.2024 08:23
      +2

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

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


      1. dlinyj Автор
        12.04.2024 08:23
        +2

        Хотел бы я поглядеть как вы на рефлексах играете на 12 уровне сложности со штатным резистором.


        1. kasiopei
          12.04.2024 08:23
          +1

          Проходил все уровни. Потом снова первый.


          1. dlinyj Автор
            12.04.2024 08:23
            +1

            Даже мультик не показывают?


            1. vlad_bo
              12.04.2024 08:23
              +20


              1. prishelec
                12.04.2024 08:23
                +1

                Ностальгирую. В детстве набрал свыше 1000. Мультика не было.


        1. novoselov
          12.04.2024 08:23
          +1

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


          1. dlinyj Автор
            12.04.2024 08:23

            Именно на этой модели тетриса?


        1. Iv38
          12.04.2024 08:23
          +1

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


          1. dlinyj Автор
            12.04.2024 08:23

            Именно на этой модели?


            1. Iv38
              12.04.2024 08:23
              +2

              Не могу сказать точно, но выглядит очень похоже. Там был только тетрис с возможностью выбрать начальную скорость и уровень заполнения, такая же музыка. Я помню, что когда эта игрушка только появилась у меня, я даже не успевал особо понять, что происходит на экране на 9-й скорости и считал это совершенно непроходимым. Потом я что-то попросил у родителей и папа сказал мне, что я это получу только если наберу сколько-то дохрена очков в тетрисе. Зря он так сказал, но он думал, что это невыполнимо, потому что это требовало пройти через все скорости. Я ТЗ принял и сел тренироваться. Мне кажется, это заняло где-то пару недель плотных тренировок. Потом я уже мог играть практически бесконечно и стало скучно. Челенджа не осталось.


              1. Iv38
                12.04.2024 08:23
                +1

                Кстати, мне роднее показалась исходная скорость звучания мелодии до вмешательства. А вот после удвоения сопротивления мелодия мне кажется медленной.


  1. urvanov
    12.04.2024 08:23
    +1

    А вообще на самом деле, какая должна быть скорость реально для каждого уровня, если без шуток по задумке?


    1. dlinyj Автор
      12.04.2024 08:23
      +1

      К сожалению документацией разработчика не располагаю. Но можно определить частоту процессора по частоте звучания мелодии.


  1. MaFrance351
    12.04.2024 08:23
    +2

    Неплохо! Мне эти опыты напомнили змейку на пальме (найденную на каком-то сайте). То ли она предназначалась только для Palm III, то ли так и было задумано, но работала она раза в два быстрее типичных таких игр. Но был и плюс, после нескольких дней игры, когда научился не врезаться сразу после старта, в другие змейки играть стало даже как-то не спортивно.


    1. dlinyj Автор
      12.04.2024 08:23

      Змейки вообще дикие игры были :)


  1. varelavalera
    12.04.2024 08:23

    На видео с демонстрацией ошибки никакой ошибки нет. Игра всегда ускорялась при переходе на следующий уровень.


    1. dlinyj Автор
      12.04.2024 08:23
      +3

      А я где-то говорил об ошибке? Я лишь указал что скорости неадекватные.


    1. gerod
      12.04.2024 08:23
      +1

      Я взял свой старый девайс, благо батарейки есть, Проверил - у меня такая же скорость, и я спокойно до 7 дохожу. Дальше уже текущей реакции видимо не хватает...


      1. dlinyj Автор
        12.04.2024 08:23

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


  1. Kilmez
    12.04.2024 08:23
    +1

    Единственное, если тетрис вдруг зависнет при таких операциях, перегрузить его получится, только отключив питающие батареи

    Взять переменный резистор с возможностью вкл/выкл (как в старых компьютерных колонках) и провода питания припаять. Тогда можно уже не дёргать батарейки в отсеке.


    1. dlinyj Автор
      12.04.2024 08:23

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


      1. vesowoma
        12.04.2024 08:23
        +2

        значит, последовательно с переменным резистором на 15...47 кОм включить постоянный, как вариант - штатный 15 кОм


      1. vyatkh1
        12.04.2024 08:23

        Дак там же кнопку сброс можно, параллельно керамическому кондеру.



  1. tirus
    12.04.2024 08:23
    +2

    Единственное, если тетрис вдруг зависнет при таких операциях...

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


    1. dlinyj Автор
      12.04.2024 08:23
      +1

      О, да! Мест для доработки тут очень много.


      1. Kilmez
        12.04.2024 08:23
        +7

        Там же есть гонки в этом тетрисе? Тогда можно подключить это ;)
        Переменный резистор скорости (частоты) можно повесить на педаль газа
        Переменный резистор скорости (частоты) можно повесить на педаль газа


        1. dlinyj Автор
          12.04.2024 08:23
          +1

          Это прекрасно, смеялся вголос!


          1. MaFrance351
            12.04.2024 08:23
            +1

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


  1. master_Nemo
    12.04.2024 08:23
    +1

    у моего было реально до 9 дойти (подозреваю что конкретный предел зависит от модели), потом скорости движения фигур (в основном поворота) не хватало для достаточной управляемости. Думаю что в этом случае понижение частоты просто не поможет- скорость манёвра тоже на неё завязана.


    1. dlinyj Автор
      12.04.2024 08:23
      +1

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


  1. Kewbey
    12.04.2024 08:23

    Видели бы вы, на каких скоростях играют люди в соревновательном тетрисе...

    Это быстро

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


    1. dlinyj Автор
      12.04.2024 08:23
      +1

      Не, ну это читерский тетрис. Тут скорость опроса клавиатуры большая, удобные клавиши, подсвечивается куда упадёт фигурка. Вообще это не интересно ни разу. (sarcasm off)


      1. VADemon
        12.04.2024 08:23
        +1

        Ещё как я вижу на видео, фигурки можно туннелировать в пустоты, а не только сверху накидывать.


  1. butsan
    12.04.2024 08:23
    +1

    Забавно. Я бы не менял полностью постоянный на переменный, а оставил постоянный как ограничитель и последовательно к нему подключил переменный резистор :) А то вдруг так ещё контроллер спалить получится, ну и удобнее же будет. Спасибо!


  1. alexwm
    12.04.2024 08:23
    +1

    Микросхема капелька, щепотка выводных элементов, экран и пара батареек - казалось бы совершенно нехитрая начинка, а сколько за этим проведено увлекательных часов!

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

    В детстве на подобном кирпичике до 4 скорости доходил, а сейчас уже реакция не та.


    1. dlinyj Автор
      12.04.2024 08:23

      Добавьте резистор и даже старец с деменцией сможет пройти дальше :)


      1. alexwm
        12.04.2024 08:23
        +1

        Вы не понимаете - это другое! Добавить резистор можно, но это будет уже не тот самый тетрис :)


        1. dlinyj Автор
          12.04.2024 08:23

          Всегда можно потом отпаять :)


  1. dmlogv
    12.04.2024 08:23
    +3

    Так, игры — это неинтересно.

    А вот если придумать, как заставить тетрис зависнуть на одной ноте, вместо одиночного резистора впаять клавиатуру с подстроечными резисторами и немножко пошуршать отверткой и тюнером, то получится недурной lo-fi-инструмент!

    Утрем нос этим выскочками из Teenage Engineering!


  1. kkuznetzov
    12.04.2024 08:23
    +1

    А можно было сделать кнопку Turbo


  1. ovn83
    12.04.2024 08:23
    +1

    Проходил все уровни, потом заново с первого игра начинается.


  1. menz1
    12.04.2024 08:23
    +1

    У меня был такой тетрис, максимальная скорость была 9, можно было задавать начальную скорость. Когда привык, обычно начинал игру на 8 скорости, чтобы время зря на маленьких скоростях не терять, самая длинная рекордная сессия была два часа, около 90000 очков. Третья скорость - ни о чем )


  1. electrodummy
    12.04.2024 08:23
    +1

    Можно ли подобным образом добавить кнопку "Пауза" в игру "Ну, погоди" ? Её там явно не хватает


    1. bodyawm
      12.04.2024 08:23

      Если сорвать генерацию тактов, то скорее всего консоль зависнет. Да и насколько я понимаю, в волке и яйцах полностью самодостаточный кристалл


  1. bodyawm
    12.04.2024 08:23

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