Недавно я прикупил себе старенький и оригинальный — «тот самый» тетрис, а дальше меня затянуло. Собственно, нормальная ситуация. Однако, мне пришлось столкнуться с одной неприятной проблемой: если во время игры — скорость (ака сложность) повышается выше двух пунктов, то играть становится совершенно невозможно, а скоростей-то много…
Понятно, что идёт какая-то ошибка в подборе частоты задающего генератора в контроллере тетриса, и это даже слышно на слух, так как мелодия играет уж больно быстро. Потому, мне пришла в голову мысль, а возможно ли как-то внести аппаратные изменения в устройство, так чтобы понизить частоту контроллера для корректной игры? Сам спросил — сам ответил.
Мне хотелось сделать фичу, навроде решения, как на стародавних компьютерах, у которых была кнопочка "Turbo", которая, несмотря на своё название, снижала частоту процессора. И таки да! Не буду вас томить — эта затея мне удалась, и на выходе получился весьма забавный и простой — аппаратный тюнинг тетриса.
❯ Суть проблемы
Вдохновлённый статьями Azya о реверсе тетриса, я прикупил себе точно такой же аппарат, фигурировавший в его публикациях. И обнаружил, что частота работы встроенного микроконтроллера сильно завышена.
В играх типа Brick Game, в народе известных как тетрис, не всегда корректно выставлен задающий генератор, в результате, при увеличении скорости выше второй, играть становится просто невозможно.И это явно бага, которую проще всего проиллюстрировать на видео:
Вот я, взрослый человек, и не смог пройти игру на третьей скорости, а что уж говорить о детях? Плюс, мне было дико интересно узнать, что будет, если пройти игру на максимальной скорости: покажут ли мультфильм в конце? При достижении определённого количества очков скорость растёт, а что произойдёт при взятии последней скорости?
Ну что же, настало время RTFM на процессор HT443A0.
❯ Приступим!
Из статей «Так какой же процессор использовался в играх Brick Game?» часть 1 и часть 2 мы узнаем, что конкретно в этой модели тетриса установлен четырёхбитный микроконтроллер HT443A0. И если обратиться к документации, то можно выяснить, что частота процессора задаётся резистором.
Ниже привожу схему из документации на этот контроллер, которая попутно является просто принципиальной электрической схемой тетриса:
Но, как обычно бывает, нигде не сказано, какой номинал резистора отвечает за определённую частоту. Единственное, что мы знаем, в каких пределах его можно изменять (от 36 кОм до 620 кОм). Это значит, что настало время весёлых опытов.
Напомню, что микросхема представляет собой каплю смолы на печатной плате. Таким образом, распиновка чипа нам недоступна, но логика подсказывает, что резисторов на плате будет не так уж и много.
Если вскрыть корпус этого устройства, то можно увидеть следующую картину:
В моём устройстве вместо пьезо пищалки, стоит магнитный динамик и небольшая схема усиления на одном транзисторе. Резистор снизу на фотографии нужен для схемы усиления. А вот резистор сверху – это явно сопротивление задающей частоты. Измеряем его сопротивление и получаем около 15 кОм.
Внимание вопрос: если мы уменьшим сопротивление – частота вырастет или уменьшится? Да, зная RC-цепочки понятно, что при уменьшении сопротивления частота будет расти, но нужно в этом убедится. Да и сверху напаять резистор проще, чем делать последовательное соединение.
Увеличиваем частоту
Подбираю номинал резистора в 15 кОм и припаиваю его в параллель к основному, тем самым уменьшая сопротивление ровно в половину.
И, вы знаете,
Интересно теперь уменьшить частоту тетриса.
Уменьшение частоты
Попробую теперь уменьшить частоту в два раза. Для этого я просто подпаял резистор последовательно с основным, тем самым изменив сопротивление до 30 кОм.
И это оказалось тем самым сопротивлением, на котором тетрис играет адекватно, с той скоростью, которой должен.
Круто, теперь можно уже завинчивать и играть, но мне хотелось большего.
Во-первых, мне хотелось проверить: возможно ли менять частоту на ходу.
Во-вторых, как я уже говорил, хочу попробовать пройти тетрис на самом высоком уровне сложности.
❯ Добавляем регулятор частоты
Тут никаких высоких материй нету, просто заменяем постоянный резистор на переменный, найденный где-то в хозяйстве. И даже весьма удобно вывести проводочки из корпуса через батарейный отсек.
Крутилка
После сборки можно приступить к натурным испытаниям.
Как видно, всё отлично работает и можно в любой момент выставить комфортную частоту работы. Единственное, если тетрис вдруг зависнет при таких операциях, перегрузить его получится, только отключив питающие батареи.
❯ Выводы
Да — частоту работы микроконтроллера можно менять прямо на ходу. А вот насчёт мультика — сохраню интригу, пускай кто-то сам пройдёт, и проверит можно ли посмотреть его :)
Честно говоря, мне тоже хотелось приобщиться к этому движу вокруг реверса Brick Game. Даже немного поколдовал с транслятором ассемблера и некоторыми другими вещами. Но то времени, то вдохновения не хватает, то просто экосистемы таких же фанатиков. Поэтому для начала решил для себя сделать что-то простое и понятное.
Из забавного: понял, что можно сделать некий DJ тетрис пульт, видео с которым — успешно завирусилось у меня в шортсах:
❯ Полезные ссылки:
- Процессор, который использовался в «Тетрисе»: на каких SoC работала недорогая микроэлектроника в 90-х?
- Так какой же процессор использовался в играх Brick Game?
- Так какой же процессор использовался в играх Brick Game? Часть 2
- Документация на микроконтроллер HT443A0
Если вам интересна металлообработка, старое железо, всякие DIY штуки, погроммирование и linux, то вы можете следить за мной ещё в телеграмме.
Возможно, захочется почитать и это:
- ➤ Калькуляторы с обратной польской нотацией
- ➤ Тетрис: история одной игры
- ➤ Процессор, который использовался в «Тетрисе»: на каких SoC работала недорогая микроэлектроника в 90-х?
- ➤ Числа и байты: как работает память в Linux?
- ➤ Различные виды тетрисов и где они обитают
Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале ↩
Комментарии (49)
MaFrance351
12.04.2024 08:23+2Неплохо! Мне эти опыты напомнили змейку на пальме (найденную на каком-то сайте). То ли она предназначалась только для Palm III, то ли так и было задумано, но работала она раза в два быстрее типичных таких игр. Но был и плюс, после нескольких дней игры, когда научился не врезаться сразу после старта, в другие змейки играть стало даже как-то не спортивно.
varelavalera
12.04.2024 08:23На видео с демонстрацией ошибки никакой ошибки нет. Игра всегда ускорялась при переходе на следующий уровень.
dlinyj Автор
12.04.2024 08:23+3А я где-то говорил об ошибке? Я лишь указал что скорости неадекватные.
gerod
12.04.2024 08:23+1Я взял свой старый девайс, благо батарейки есть, Проверил - у меня такая же скорость, и я спокойно до 7 дохожу. Дальше уже текущей реакции видимо не хватает...
dlinyj Автор
12.04.2024 08:23Там с резистором я определил, что даже снижая частоту работы процессора, частота опроса кнопок тоже снижается. И банально просто можно в опрос не попасть при попытке сдвинуть.
Kilmez
12.04.2024 08:23+1Единственное, если тетрис вдруг зависнет при таких операциях, перегрузить его получится, только отключив питающие батареи
Взять переменный резистор с возможностью вкл/выкл (как в старых компьютерных колонках) и провода питания припаять. Тогда можно уже не дёргать батарейки в отсеке.
dlinyj Автор
12.04.2024 08:23Не будет работать, так как после включения у вас будет слишком малое сопротивление и тетрис будет висеть. Но отдельный выключатель сделать можно.
vesowoma
12.04.2024 08:23+2значит, последовательно с переменным резистором на 15...47 кОм включить постоянный, как вариант - штатный 15 кОм
deafcafe
12.04.2024 08:23+2
tirus
12.04.2024 08:23+2Единственное, если тетрис вдруг зависнет при таких операциях...
Мне кажется, надо было сохранить постоянный резистор небольшого номинала, который был бы включен последовательно с переменным (крутилкой)
dlinyj Автор
12.04.2024 08:23+1О, да! Мест для доработки тут очень много.
Kilmez
12.04.2024 08:23+7Там же есть гонки в этом тетрисе? Тогда можно подключить это ;)
dlinyj Автор
12.04.2024 08:23+1Это прекрасно, смеялся вголос!
MaFrance351
12.04.2024 08:23+1Кстати, на некоторых поздних тетрисах можно было разблокировать подобные скрытые игры перемычками. Уже на совсем поздних, где была унифицированная плата под разные пресс-формы корпусов.
master_Nemo
12.04.2024 08:23+1у моего было реально до 9 дойти (подозреваю что конкретный предел зависит от модели), потом скорости движения фигур (в основном поворота) не хватало для достаточной управляемости. Думаю что в этом случае понижение частоты просто не поможет- скорость манёвра тоже на неё завязана.
dlinyj Автор
12.04.2024 08:23+1На видео с крутилкой видно, что я пытался играть на большой скорости. Проблема в том, что частота опроса кнопок тоже ограничена, то есть даже на самой низкой частоте нет права на ошибку и просто невозможно двигать фигуру.
Kewbey
12.04.2024 08:23Видели бы вы, на каких скоростях играют люди в соревновательном тетрисе...
Это быстро
Но да, там и интерфейсы явно более отзывчивые, и дополнительные механики есть, да и люди занимаются этим годами.
dlinyj Автор
12.04.2024 08:23+1Не, ну это читерский тетрис. Тут скорость опроса клавиатуры большая, удобные клавиши, подсвечивается куда упадёт фигурка. Вообще это не интересно ни разу. (sarcasm off)
VADemon
12.04.2024 08:23+1Ещё как я вижу на видео, фигурки можно туннелировать в пустоты, а не только сверху накидывать.
butsan
12.04.2024 08:23+1Забавно. Я бы не менял полностью постоянный на переменный, а оставил постоянный как ограничитель и последовательно к нему подключил переменный резистор :) А то вдруг так ещё контроллер спалить получится, ну и удобнее же будет. Спасибо!
alexwm
12.04.2024 08:23+1Микросхема капелька, щепотка выводных элементов, экран и пара батареек - казалось бы совершенно нехитрая начинка, а сколько за этим проведено увлекательных часов!
Вот я, взрослый человек, и не смог пройти игру на третьей скорости, а что уж говорить о детях?
В детстве на подобном кирпичике до 4 скорости доходил, а сейчас уже реакция не та.
dmlogv
12.04.2024 08:23+3Так, игры — это неинтересно.
А вот если придумать, как заставить тетрис зависнуть на одной ноте, вместо одиночного резистора впаять клавиатуру с подстроечными резисторами и немножко пошуршать отверткой и тюнером, то получится недурной lo-fi-инструмент!
Утрем нос этим выскочками из Teenage Engineering!
menz1
12.04.2024 08:23+1У меня был такой тетрис, максимальная скорость была 9, можно было задавать начальную скорость. Когда привык, обычно начинал игру на 8 скорости, чтобы время зря на маленьких скоростях не терять, самая длинная рекордная сессия была два часа, около 90000 очков. Третья скорость - ни о чем )
electrodummy
12.04.2024 08:23+1Можно ли подобным образом добавить кнопку "Пауза" в игру "Ну, погоди" ? Её там явно не хватает
bodyawm
12.04.2024 08:23Если сорвать генерацию тактов, то скорее всего консоль зависнет. Да и насколько я понимаю, в волке и яйцах полностью самодостаточный кристалл
bodyawm
12.04.2024 08:23Рад, что Сергей вернулся к достаточно регулярному написанию статей. Надеюсь, один из топовых авторов Хабра и мой наставник будет публиковаться чаще :)
urvanov
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.
dlinyj Автор
Да, видел это. Но это было на NES. Тут другое устройство, но, благодаря @Azya у нас есть исходники, и мы можем даже предположить что будет.
novoselov
Пример некорректный, но это явно НЕ баг, а фича. Посмотрите справа на экране шкала фруктов, которые заполняются по мере роста уровней. С определенного момента скорости становятся "невозможными" для обдумывания, но после пары недель тренировок переходишь в режим рефлексов, когда можно играть на последнем уровне на автомате.
dlinyj Автор
Хотел бы я поглядеть как вы на рефлексах играете на 12 уровне сложности со штатным резистором.
kasiopei
Проходил все уровни. Потом снова первый.
dlinyj Автор
Даже мультик не показывают?
vlad_bo
prishelec
Ностальгирую. В детстве набрал свыше 1000. Мультика не было.
novoselov
Сейчас вряд ли, но в детстве я проходил все уровни до максимального на максимальной скорости со штатным резистором и продолжал играть дальше, когда шкала фруктов была полностью заполнена.
dlinyj Автор
Именно на этой модели тетриса?
Iv38
Присоединяюсь к тем, кто проходил все. А потом начинается первый, и так я даже делал несколько кругов за одну сессию. Рекорд уже не помню.
dlinyj Автор
Именно на этой модели?
Iv38
Не могу сказать точно, но выглядит очень похоже. Там был только тетрис с возможностью выбрать начальную скорость и уровень заполнения, такая же музыка. Я помню, что когда эта игрушка только появилась у меня, я даже не успевал особо понять, что происходит на экране на 9-й скорости и считал это совершенно непроходимым. Потом я что-то попросил у родителей и папа сказал мне, что я это получу только если наберу сколько-то дохрена очков в тетрисе. Зря он так сказал, но он думал, что это невыполнимо, потому что это требовало пройти через все скорости. Я ТЗ принял и сел тренироваться. Мне кажется, это заняло где-то пару недель плотных тренировок. Потом я уже мог играть практически бесконечно и стало скучно. Челенджа не осталось.
Iv38
Кстати, мне роднее показалась исходная скорость звучания мелодии до вмешательства. А вот после удвоения сопротивления мелодия мне кажется медленной.