Pull to refresh

Comments 117

Очень крутое исследование. Хабр снова торт :)

Очень ждал вашей статьи, честно. Очень хабратортно и невероятно круто.

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

Транслятора этого кода не нашлось, чтобы поиграться самому и может какое-то описание архитектуры у вас появилось?

Спасибо за информацию!

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

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

Каким образом удалось сопоставить какой сегмент дисплея приходит на процессор, просто прозвонкой? Особенно интересно всякие дополнительные символы справа.

При снятых поляризационных фильтрах и определенном угле освещения дорожки на стекле неплохо просматриваются:

Конечно не все сегменты получилось так локализовать, что-то выяснял методом тыка.

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

Вот да, написать под тетрис свою игру отдельная интересная задача, меня правда на нее уже не хватит)

Так вы всё дали для того, чтобы попробовать это сделать. Осталось дело за малым, найти время :)

"Разрешения дисплея" должно хватить на клеточный автомат типа "жизнь")

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

Есть исходный код, эмулятор. Осталось написать транслятор и можно будет понять :)

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

Я имел в виду, чтобы писать на ассемблере в удобочитаемом человеку виде, а потом транслировать это в машинный код.

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

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

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

Скорее всего, в моем тетрисе вообще о существовании каких либо фруктов не помню)

а потому что они или вообще не загорались или крайне редко (как тут выше писали)

я их нашел тыкая пальцев в экран и с тех пор всегда было интересно что это и как

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

Адресация неудобная скорей всего из-за проблем с разводкой экрана и уменьшением количества проводников экрана.

Интересно, что у правых двух цифр нет перекладины — там всегда нули? Напомнило, как на поздних электромеханических пинболах вместо одного из разрядов счётчика был просто прибитый гвоздями сектор от оного с нулём %)

Труд монументальный, конечно. Ещё с тех пор как мы пересеклись на МК90 следил за вашим творчеством и тихо охреневал, а тут впечатления уже вообще цензура не пропустит :-)

Да, всегда нули. И старшие единички тоже на одном сегменте.

Спасибо! :)

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

Защита от повреждения и внешней среды. Использование такого монтажа сильно удешевляет производство.

Это просто один из видов самого дешманского корпуса для кристалла.

Точнее, это т.н. бескорпусной монтаж. Для такого монтажа выпускаются также транзисторы и другие п/п детали. Вот, например, микросборка передатчика советской милицейской рации. Мелкие точки, залитые каплей компаунда с тремя отходящими проволочками - бескорпусные транзисторы.

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

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

К тому же такие кристаллы обычно устанавливаются на плату путём разварки тонкими золотыми проволочками, соединяющими контактные площадки кристалла с соответствующими контактными площадками платы. Они очень нежные, без защиты на этапе сборки с платами пришлось бы обращаться с исключительной осторожностью.

Безумно приятно видеть работу действительно увлеченного человека с прямыми руками и головой на плечах. Очень круто!

Неистовая крутота.

Прошивки, кстати, вполне могут быть универсальными между несколькими моделями тетрисов. Когда я был маленьким, глупым, и мне было нечем заняться, я игрался со своими электронными игрушками, но не совсем по назначению. Точно помню, что у меня пару раз случайно получалось сделать так, чтобы тетрис показал не свою обычную заставку, а другую, от другой модели. Сейчас я взрослее и умнее, и понимаю, что то, что я тогда сделал, называется глитчинг по питанию и является вполне валидной техникой для, например, обхода всякой защиты. Даже модчип для Nintendo Switch работает по такому принципу.

Вполне может быть, что модель задаётся какими-нибудь перемычками на самой плате или подключением кристалла к ней. Правда, в дизассемблированной прошивке я вижу чтение только из тех портов, к которым подключены кнопки (PP и PS).

Я сравнивал прошивку из этой статьи с теми кусками ПЗУ, которые фотографировал в предыдущей и они не совпадают. Думаю, что универсальные прошивки появились позже, может как-раз не тех контроллерах, о которых я написал в начале.

Я тоже глитчингом по питанию занимался в детстве, замыкая батарейку отверткой, и тогда ещё(в 1990х) понял что процессор в этих тетрисах 4х битный, потому что сложность и скорость были от 0 до 15. Причем я прошел все скорости от 0 до 14. На 14 скорости фигуру можно было сдвинуть на одну клетку в сторону за один сдвиг вниз, на 15 - на ноль клеток, т.е. управление просто отключалось при достижении 15й скорости. Часы электроника, модели 51-55, были на 6 битных процессорах, там часы/минуты/секунды были от 0 до 63. Потом в 2000х купил тетрис, там процессор 8 битный уже стал.

Процессор там скорее однобитный, а выход на шестиразрядном счётчике.

Да, ещё вспомнил. Это не глитчинг, но близко к этому. Это я придумал когда уже программировать сам начал. Во всех тетрисах, что попадались мне в руки можно было убрать самую верхнюю линию поля. Только в одном тетрисе, который 8 битный, был предусмотрен этот момент, остальные вытаскивали память на экран.

Я таким же образом умудрился найти пару скрытых игр на каком-то картридже от Sega...

Я таким образом в тамагочи обнаружил пару новых скрытых зверей в дополнение к двум штатным.

У меня не только заставка, но и новые игры появились. Представьте шок мелкого пацана. Если бы я это не показал другим, то всегда думал бы, что сам себе придумал или приснилось, потому что больше повторить это не удалось.

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

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

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

Блин, четырёхбитники меня прямо очаровывают своим минимализмом. Хочется что-нибудь даже поизобретать такое, с 16 командами, без регистров (всё на стеке, но с произвольным доступом на 16 ячеек вглубь), с общей памятью (сначала масочное ПЗУ с библиотеками сложения-умножения, потом NAND, потом DRAM), заточенное изначально архитектурой команд под построчную работу с DRAM, в общем, чтобы плотность кода и данных была как в нейтронной звезде :) Эдакий даже не микро-, а наноконтроллер :-D Можно SRAM для простоты, но DRAM соблазняет дополнительным паззлом по рефрешам :)

К сожалению вы не в тренде. Недавно мне отдали на разборку не работающую электро сигарету. Так там китайцы умудрились впихнуть 32 битный ARM (bat32g137) плюс ещё две специализированных микросхемы - зарядник usb-c и драйвер светодиодов на 16 выходов/256 уровней (aw9523b). У меня блин первый комп имел процессор попроще, а тут ...

Зачем там вообще микроконтроллер?

У меня где-то валяется электросигарета, так там даже rtc запихали (соотв, в ней есть часы). Еще видел в магазине аппарат с fm приемником. Извращались кто как умеет, я не удивлюсь если кто-то андроид туда вкорячивал.

андроид вряд ли, но моды с сенсорным экраном и наворотами вплоть до пароля на включение - имеют место быть.

Сходу не нашлось :( Но не вижу причин почему бы и нет. Железо там достаточное, экран есть. Как минимум демку можно запустить.

Потому что заказчик пришел с "нужно вчера прототип и термоклея и отладочной платы из под стола", а потом "О, норм, в продакшн!". Если девайс мелкосерийный - сейчас никто не морочится... Потом если продается - соптимизируют, нет - ну нет, так нет...

Заказчик приходит к разработчику, озвучивает свои хотелки.

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

Ковырял одну электросижку (бокс-мод), так там вообще стоял внешний 16-битный АЦП.

Не, в моей АЦП встроенный, всего 12 бит, зато на 1 Msps. Плакал когда увидел ...

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

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

Снимаю шляпу!

От простого любопытства, до готового симулятора. Это круто!

Теперь можно браться за "Ну погоди" и искать в дампе кода мультик)

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

Теперь отчетливо видны границы переходов от "нормальных" транзисторов …

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

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

Аппаратное воплощение фразеологизма "читать между строк" )

Впечатляющая работа! В детстве мне родители было купили один из первых, видимо, Brick Game. Потому что в нем было всего 8 или 9 игр. И вот среди них были классные гонки. В которых нужно было не просто уворачиваться вправо-влево от препятствий. А еще и можно было собирать разные бонусы. Которые в процессе игры давали возможность машинке стрелять и пробивать себе дорогу сквозь препятствия. А может и не только это, не помню уже.

К сожалению, тот тетрис я было вывел из строя. Как и еще потом один в процессе сборки, разборки и всяческих опытов...

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

Может быть это была E-S88

Да, именно такая модель.

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

Очень тяжело было во втором разобраться без туториалов.

Я одну глупую вещь спрошу, пытался тщетно запустить ваш эмулятор на разных платформах (Centos, Mint(читай Ubuntu), но потерпел фиаско. На убунте ставил:

sudo apt install python3-pyqt6.sip
pip3 install pyqt6

Но получаю всё равно:

python3 main.py
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: xcb, minimalegl, vkkhrdisplay, linuxfb, wayland-egl, offscreen, wayland, eglfs, minimal, vnc.

Аварийный останов (образ памяти сброшен на диск)

Даже психанул и поставил qtcreator (будь он не ладен):

sudo apt install qtcreator

Те же проблемы. Библиотека xcb на которую ругается, у меня стоит:

sudo  apt install libxcb-xinerama0
....
Уже установлен пакет libxcb-xinerama0 самой новой версии (1.14-3ubuntu3).

Что я делаю не так?

Сам спросил, сам ответил.

sudo apt install libxcb-cursor0

И всё заработало:

Отлично, рад, что все заработало! Я сам только на Win и MacOS тестировал.

а для совсем чайников, как установить?) Вот скачал пайтон, поставил. Открываю cmd от админа, пишу pip install libxcb-cursor0, выскакивает ошибка Could not find a version that satisfies the requirement libxcb-cursor0 (from versions: none)

 выскакивает ошибка Could not find a version that satisfies the requirement libxcb-cursor0 (from versions: none)

Гуглить пробовали?

Спасибо за статью, всегда интересно такое почитать!

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

Большое спасибо!

Это вам спасибо! Если не секрет, то что следующее на очереди? Есть какие-то планы?

Чего-то конкретного пока нет. Хотел еще у нескольких классических тетрисов считать прошивки, но пока не попадаются подходящие экземпляры.

Что-то экземпляры из 90-х дороговаты. Опять же, прошивка и эмулятор оригинального Тамагочи уже есть.

Отличная статья, пример реверсиженеринга

Статья супер! Чисто теоретически можно под эту платформу написать сокобан, обозначая игрока и точки разной частотой мигания

Для экрана 20 на 10: можно сапёра ещё, шашки (и игры на их основе, уголки, например), нарды, блэкджек, морской бой.

на счет шашек и.т.п наврятли, но сокобан вполне хватает 10х20

Только градаций серого нет.

ну я предположил что можно это реализовать частотой мигания как в некоторых играх ТЕТРИСА

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

Но если реализовать его в ПЛИС...

Да, это был бы отличный вариант

В первой половине девяностых существовала достаточно редкая модификация тетриса. Корпус выглядел как обычный Brick Game, но экран был сильно другим.

Вместо кубиков "квадрат в квадрате" были кубики "квадрат, внутри круг, внутри точка", которые могли включаться независимо. Таким образом кубики могли иметь аналог цвета (например, квадрат+круг+точка, квадрат+точка, только круг), игры вроде как это использовали, было что-то типа аналога игры Columns.

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

Видел эту модель всего несколько раз, поиграть не удавалось.

Вполне возможно

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

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

Как говорили на одном несуществующем сайте: в карму не заходя в пост [x]

Правда, очень очень круто. Вот такие посты тут нужны.

Всегда удивляла распайка бескорпусного чипа на плату с кривой сверловкой переходных отверстий

А меандр для экрана софтово генерируют?

Не совсем понял вопрос

Наверно имеет в виду, что рисунок проводников экрана рисуют вручную или генерирует программа.

лет 10 назад гуглил эмуляторы брик гейма и был огорчен, что ничего подобного даже не намечалось. Рад, что наконец-то это возможно)

Кхм, я может быть что-то делаю, не так, можете подробно описать процесс запуска эмулятора?

Python и PyQt6 установили?

Как заставить HT443A0 или аналоги выполнять произвольную команду? Кажется, что это невозможно, ведь эти микроконтроллеры имеют масочное ПЗУ, которое может быть задано только один раз на заводе при производстве. Но у нас есть дамп этого ПЗУ. Возможно ли заставить HT443A0 пропускать, проскакивать определенное количество команд? Например, управляя частотой тактирования (завышая ее выше разрешённого предела на необходимое количество тактов) или устраивая просадку напряжения питания во время выборки нежелательных инструкций? Если это возможно, тогда можно выполнять не совсем любую инструкцию, но любую инструкцию из содержимого ПЗУ, верно?

Так делают при прошивке Xbox, чтобы обойти защиту. А в этой игре что такого ценного, чтобы так заморачиваться? Цель должна оправдывать средства. Поэкспериментировать можно на эмуляторе.

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

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

https://docs.google.com/spreadsheets/d/1pztt0Y6h62IAo6vEm7VCVCsu2gySOYglRZk4XugqYFQ/edit#gid=1532921950

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

Sign up to leave a comment.

Articles