Уже к моменту написания предыдущей статьи, ко мне шли очередные подопытные экземпляры тетрисов и первым был получен вот такой:

Некий Taksun Brick Game
Некий Taksun Brick Game

Подобные тетрисы ориентировочно стали появляться в продаже в конце нулевых. На нем я опробовал новый способ декапсуляции кристалла, боясь повторения предыдущей неудачи. Суть следующая: капля компаунда нагревается феном до такой степени, чтобы он стал мягким, но при этом не хрупким (градусов 150). Не прекращая нагрев, аккуратно подцепляем скальпелем компаунд и пытаемся его отклеить - сначала от платы, а затем, с особой осторожностью, и от кристалла. Звучит довольно просто, но на деле не очень. И хотя у меня было три удачных попытки из трех, вероятность повредить кристалл неосторожным движением пинцета все еще высока, но зато нет необходимости в использовании какой-либо химии, что в домашних условиях очень удобно.

Итак, кристалл первого тетриса:

В исходном разрешении

Ожидаемо, техпроцесс гораздо плотнее. К сожалению, никаких опознавательных знаков, только число 2008, скорее всего это год создания маски.

Не буду пытаться глубоко анализировать, но если кратко: в правом верхнем углу 7.5КБ ПЗУ (которое прочитать визуально через оптический микроскоп думаю будет крайне сложно), под ней 384Б ОЗУ. В левом верхнем углу, по всей видимости, дешифратор инструкций (по нему можно попробовать идентифицировать микроконтроллер). Боюсь ошибиться, но предположу, что это 8-битный микроконтроллер, который к HT-443 не имеет никакого отношения.

Следующий тетрис попал ко мне в виде кучки внутренностей, поэтому я не знаю, как он выглядел в свои лучшие годы. На плате указана дата 12/8/2002 и судя по расположению кнопок - это типичный 1 in 9999 начала нулевых. Вот фотография его кристалла:

В  разрешении

Абсолютно та же архитектура и почти та же площадь кристалла, только компоновка несколько отличается. 3КБ ПЗУ, 160Б ОЗУ. Опять никакой идентификации, только год(?) - 2003.

А вот и главный виновник торжества, со скромным названием Super Brick Game E-23 PLUS MARK II 99 IN 1 от тайваньской компании E-Star:

Super Brick Game E-23 PLUS MARK II 99 IN 1
Super Brick Game E-23 PLUS MARK II 99 IN 1

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

В исходном разрешении

Старый добрый HT-943 (он же HT443A0), только на год старше экземпляра из предыдущей статьи.

Для сравнения размеров кристаллов сделал групповое фото:

Кристаллы микроконтроллеров используемых в Brick Game, 1993, 2003 и 2008 годов (слева направо)
Кристаллы микроконтроллеров используемых в Brick Game, 1993, 2003 и 2008 годов (слева направо)

По четырем экземплярам, конечно, выводы делать рано, но можно предположить, что основной платформой Brick Game в начале и середине 90-х, когда они еще производились в Тайване были 4-битные микроконтроллеры Holtek, а к концу 90-х - началу 00-х, когда подобные игрушки стали массово выпускаться в Китае, основная платформа поменялась на какую-то, которая была ближе к местным фабрикам.

Чтение ПЗУ

Естественно, меня в первую очередь интересовало ПЗУ, но первый взгляд на него разочаровал - практически нечитаемо:

Фотография участка ПЗУ под прямыми лучами осветителя.
Фотография участка ПЗУ под прямыми лучами осветителя.

К счастью, оказалось, что если освещать кристалл под углом, то результат становится гораздо лучше, хоть и не идеальным:

Фотография участка ПЗУ под косыми лучами вертикального осветителя.
Фотография участка ПЗУ под косыми лучами вертикального осветителя.

Теперь отчетливо видны границы переходов от "нормальных" транзисторов к тем, у которых увеличена толщина слоя оксида под поликремнием, что делается для увеличения порогового напряжения транзистора, при котором он никогда не открывается (можно считать, что его там нет). На следующем изображении красными точками отмечены "нормальные" транзисторы, слой подзатворного окисла которых позволяет им открываться сигналом выборки с дешифратора:

Как же теперь превратить эту кашу битов в последовательность байт или другими словами получить образ ПЗУ с которым уже можно будет работать дальше?

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

Рассмотрим ПЗУ и ближайшие окрестности подробнее:

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

Сверху можно выделить 12 повторяющихся групп транзисторов (отмечены цветными прямоугольниками) от каждой из которых на лини дешифратора вокруг ПЗУ уходит пара сигналов - прямой и инвертированный (отмечены цветными линиями соответственно группе). Естественно предположить, что этими линиями задается 12-битный адрес считываемого байта, а группы транзисторов формируют схемы регистров счетчика инструкций, стека (он здесь одноуровневый) и некоторой вспомогательной логики. Для правильного порядка чтения байт опять же необходимо определить, как линии дешифратора соотносятся с последовательностью разрядов адреса. Здесь немного сложнее, чем в случае с разрядностью битов. Все 12 разрядов соединены с 8-битной внутренней шиной, старшинство разрядов которой мы уже выяснили. Получается часть разрядов (левые и правые четыре группы) делят младшие разряды шины между собой. Поэтому дополнительно пришлось проанализировать управляющие линии регистров - они полностью совпадают для правых восьми групп и отличаются для четырех левых. Значит четыре левых бита адреса заносятся в счетчик инструкций отдельно от 8 правых из чего я сделал предположение, что они старшие. Номера разрядов адреса также подписаны на изображении.

Есть два момента, которые мне не удалось выяснить без детального восстановления схемы: какая из пары линий дешифратора несет прямой сигнал, а какая инвертированный и то же самое с битами. Получается есть 2 варианта порядка чтения из ПЗУ и 2 варианта чтения байта - вполне приемлемо.

Но на практике я столкнулся с некоторыми проблемами. Для начала я вручную прочитал по десятку байт каждого из вариантов, дизассемблировал его и не увидел там того, чего ожидал. А ожидал я, исходя из информации в даташите, что встретит меня что-то типа безусловного перехода на нулевом адресе, с которого стартует микроконтроллер после сброса. Те же безусловные переходы я ожидал увидеть по 4 и 8 адресу куда прилетают прерывания, ну или в крайнем случае reti если они не используются. Но нет, один вариант был страннее другого и мне пришлось перепроверять кучу других, менее вероятных порядков чтения ПЗУ, которые не вписывались в описанную выше теорию. Ничего не добившись в итоге, я выбрал один из первых четырех вариантов, который был более-менее нормальный и продолжил читать ПЗУ постепенно убеждаясь, что это действительно верный вариант чтения, просто авторы прошивки полностью проигнорировали прерывания и вообще использовали несколько неожиданные инструкции вроде декремента ячейки памяти сразу на старте и вывода 0xE на порт PA который никуда физически не подключен:

000:    dec [R3R2]                      ;0F
001:    timer on                        ;38
002:    mov A, 0xE                      ;7E
003:    out PA, A                       ;30
004:    mov R1R0, 0xFF                  ;5F0F
006:    in A, PP                        ;34
007:    ja0 04C                         ;804C
009:    mov A, 0xF                      ;7F
00A:    call E67                        ;FE67
00C:    jmp 002                         ;E002

Эмулятор

Итак, убедившись, что на верном пути, я продолжил расшифровывать ПЗУ, параллельно отлаживая на нем эмулятор, который я начал писать немного раньше. После нескольких дней такой работы, прошивка была восстановлена полностью, эмулятор в целом отлажен, явные ошибки в образе ПЗУ исправлены. Наконец, я увидел заветные "01" на дисплее, испытывая примерно такие же чувства, как Виктор Франкенштейн кричащий "Оно живое!".

Эмулятор Brick Game
Эмулятор Brick Game

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

Эмулятор пока сыроват (например, совсем нет звука) и не факт, что я доведу его до ума, но уже сейчас может вполне помочь в исследовании прошивки, если кому-то будет интересно написать свой эмулятор или поискать возможные пасхалки. Можно и просто поиграть, поностальгировать :) Приложение поддерживает базовые средства отладки, содержимое всех регистров и ОЗУ можно менять на лету. Написано на Python с использованием PyQt6, так что может запускаться на всех поддерживаемых этой библиотекой ОС (Linux, Windows и macOS). Исходники доступны на github, там же можно найти образ прошивки.

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

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


  1. impwx
    13.11.2023 08:30
    +44

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


    1. Azya Автор
      13.11.2023 08:30
      +28

      Спасибо!


  1. dlinyj
    13.11.2023 08:30
    +18

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

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

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


    1. Azya Автор
      13.11.2023 08:30
      +13

      1. dlinyj
        13.11.2023 08:30
        +1

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


      1. dlinyj
        13.11.2023 08:30
        +4

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

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

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


        1. Azya Автор
          13.11.2023 08:30
          +41

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

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


          1. dlinyj
            13.11.2023 08:30
            +6

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


            1. Azya Автор
              13.11.2023 08:30
              +2

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


              1. dlinyj
                13.11.2023 08:30
                +2

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


              1. iamkisly
                13.11.2023 08:30

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


          1. DMGarikk
            13.11.2023 08:30
            +5

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


            1. dlinyj
              13.11.2023 08:30
              +1

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


              1. Azya Автор
                13.11.2023 08:30
                +2

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


                1. dlinyj
                  13.11.2023 08:30
                  +1

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


                  1. dlinyj
                    13.11.2023 08:30
                    +2

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


                    1. Azya Автор
                      13.11.2023 08:30
                      +1

                      Как вариант


            1. lx13s
              13.11.2023 08:30
              +3

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


            1. Azya Автор
              13.11.2023 08:30
              +2

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


              1. Rubilnik
                13.11.2023 08:30
                +1

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


                1. DMGarikk
                  13.11.2023 08:30

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

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


          1. Daimos
            13.11.2023 08:30
            +1

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


            1. Azya Автор
              13.11.2023 08:30

              Да, так и есть.


          1. vladkorotnev
            13.11.2023 08:30
            +2

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

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


            1. Azya Автор
              13.11.2023 08:30

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

              Спасибо! :)


  1. NemoVors
    13.11.2023 08:30
    +5

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


    1. DanilinS
      13.11.2023 08:30
      +17

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


    1. Yak52
      13.11.2023 08:30
      +10

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


      1. zatim
        13.11.2023 08:30
        +6

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


    1. Azya Автор
      13.11.2023 08:30
      +5

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


  1. Radisto
    13.11.2023 08:30
    +5

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


    1. Azya Автор
      13.11.2023 08:30
      +3

      Спасибо!


  1. grishkaa
    13.11.2023 08:30
    +7

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

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

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


    1. Azya Автор
      13.11.2023 08:30
      +2

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


    1. Alohahwi
      13.11.2023 08:30
      +1

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


      1. dragonnur
        13.11.2023 08:30
        +1

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


    1. MaFrance351
      13.11.2023 08:30
      +2

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


  1. gxcreator
    13.11.2023 08:30
    +4

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

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


    1. Azya Автор
      13.11.2023 08:30
      +1

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


  1. NickDoom
    13.11.2023 08:30
    +2

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


    1. ciuafm
      13.11.2023 08:30
      +10

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


      1. SergeyNovak
        13.11.2023 08:30
        +2

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


        1. isden
          13.11.2023 08:30

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


          1. vorphalack
            13.11.2023 08:30

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


            1. isden
              13.11.2023 08:30
              +2

              1. vorphalack
                13.11.2023 08:30

                [гифка с дуркой]


        1. N1X
          13.11.2023 08:30

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


      1. iiiytn1k
        13.11.2023 08:30

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


        1. ciuafm
          13.11.2023 08:30

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


        1. vorphalack
          13.11.2023 08:30

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


  1. D00mguy
    13.11.2023 08:30
    +7

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


    1. Azya Автор
      13.11.2023 08:30
      +1

      Спасибо!


  1. grigr
    13.11.2023 08:30
    +3

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

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


    1. Azya Автор
      13.11.2023 08:30

      Спасибо!


  1. Kroligoff
    13.11.2023 08:30
    +4

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


    1. Azya Автор
      13.11.2023 08:30
      +3

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


  1. ElectricPigeon
    13.11.2023 08:30
    +2

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

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


    1. Azya Автор
      13.11.2023 08:30
      +1

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


  1. Gadabio
    13.11.2023 08:30
    +2

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

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

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


    1. Azya Автор
      13.11.2023 08:30
      +1

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


      1. Gadabio
        13.11.2023 08:30
        +1

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


    1. LoadRunner
      13.11.2023 08:30
      +1

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

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


  1. Azya Автор
    13.11.2023 08:30

    del


  1. dlinyj
    13.11.2023 08:30
    +1

    Я одну глупую вещь спрошу, пытался тщетно запустить ваш эмулятор на разных платформах (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).

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


    1. dlinyj
      13.11.2023 08:30
      +3

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

      sudo apt install libxcb-cursor0

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


      1. Azya Автор
        13.11.2023 08:30
        +1

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


  1. VBKesha
    13.11.2023 08:30
    +2

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


    1. Azya Автор
      13.11.2023 08:30

      Пожалуйста!


  1. axe_chita
    13.11.2023 08:30
    +2

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


    1. Azya Автор
      13.11.2023 08:30
      +1

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


      1. axe_chita
        13.11.2023 08:30
        +1

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


        1. Azya Автор
          13.11.2023 08:30
          +1

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


  1. ovn83
    13.11.2023 08:30
    +2

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


    1. Azya Автор
      13.11.2023 08:30

      Спасибо!


  1. LTS-Pettrov
    13.11.2023 08:30
    +2

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


    1. Sau
      13.11.2023 08:30
      +1

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


      1. LTS-Pettrov
        13.11.2023 08:30
        +1

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


        1. dlinyj
          13.11.2023 08:30

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


          1. LTS-Pettrov
            13.11.2023 08:30

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


          1. Azya Автор
            13.11.2023 08:30
            +2

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


            1. dlinyj
              13.11.2023 08:30
              +1

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


              1. Azya Автор
                13.11.2023 08:30

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


    1. Azya Автор
      13.11.2023 08:30

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


  1. Kotorkovsciy
    13.11.2023 08:30
    +1

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


    1. Azya Автор
      13.11.2023 08:30

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


  1. DrGluck07
    13.11.2023 08:30
    +2

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

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


    1. Azya Автор
      13.11.2023 08:30
      +2

      Спасибо!