EdigE
← ЛЕНТА

Безымянный чип из игрушки за €6 заставил искать DAC вслепую

У дешёвой карманной консоли обычно есть ровно одна работа: включиться от трёх AAA и показать очередную вариацию тетриса. В модели Action «104 Games» за €5.95 под экраном сидит совершенно иной персонаж — немаркированный QFN48, рядом с которым стоит отдельная SPI-flash. Энтузиаст Aaron Christophel подключился к штатным SWD-площадкам, заменил прошивку и запустил на устройстве DOOM. Самый интересный результат вырос уже после запуска игры: этот чип приходится изучать как найденный артефакт, восстанавливая его возможности по сбоям, адресам регистров и сигналам на выводах.

По CPUID автор отнёс ядро к STAR-MC1 от Arm China: это ARMv8-M Mainline, совместимое с Cortex-M33 на уровне архитектуры. Называть сам SoC «Cortex-M33» было бы неточно: изготовитель микросхемы неизвестен, datasheet отсутствует. Зато уже удалось измерить 280 КБ SRAM. Граница получена не догадкой по адресу: доступ ядра к 0x20046000 вызывает reset, тогда как чтение действительно отсутствующей памяти через SWD возвращает характерное 0xAA.

Программа и графика живут во внешней 4-МБ Zbit ZB25VQ32, совместимой с W25Q и отображённой для XIP по адресу 0x08000000. Штатная прошивка, по реконструкции, тактует ядро примерно на 194.06 МГц. Порт DOOM пока удержан около 62 МГц. Попытка поднять PLL ломает следующий fetch из flash: ядро меняет частоту, а SPI-интерфейс остаётся с прежними таймингами. Решение требует перенести код переключения частоты в SRAM и одновременно настроить делитель интерфейса flash. В этом месте игрушка за шесть евро внезапно превращается в знакомую embedded-задачу про XIP, PLL и порядок инициализации шин.

Ещё выразительнее история со звуком. Автор нашёл PCM/DAC по адресу 0x40012C00, назначил ему DMA-канал 0 через регистр 0x40012C34 и получил слышимый тон. По числу завершённых блоков за 12 секунд он оценил частоту аудиовывода примерно в 14 кГц. Но DMA передаёт один блок из 741 сэмпла и затем не перезагружает счётчик. Значит, регистры блока уже видны, а формат descriptor или механизм reload ещё скрыт. В опубликованной сборке звук поэтому выключен.

DOOM ограничен первым уровнем shareware-версии E1M1: весь образ должен поместиться в 4 МБ flash. Есть артефакты очистки экрана из-за общего буфера. Эти шероховатости здесь ценнее гладкой демонстрации: безымянный массовый MCU оказался достаточно быстрым и вместительным для серьёзного порта, но его периферия всё ещё отвечает на вопросы лишь через осциллограф, отладчик и аккуратные эксперименты. Дешёвые игрушки начинают приносить в лабораторию целый класс непрозрачных ARM-совместимых SoC, которые нельзя открыть datasheet’ом — их приходится буквально разговаривать с железом.

Первоисточники

atc1441 / Aaron Christophel

Проект, прошивки, дампы, SWD-инструкции и фотографии плат: atc1441, «DOOM on two Action mini game consoles» — https://github.com/atc1441/Action_104_Games_and_Pacman_DOOM

Карта памяти, методика измерения SRAM, наблюдения PLL/XIP и PCM/DAC: atc1441, «Hardware notes» — https://github.com/atc1441/Action_104_Games_and_Pacman_DOOM/blob/main/docs/HARDWARE.md

Карточка консоли 104 Games у продавца Action: https://www.action.com/de-de/p/3217060/mini-spielkonsole/

Независимая публикация о проекте: Hackaday, «Running DOOM On A Cheap 104-in-One Handheld» — https://hackaday.com/2026/08/11/running-doom-on-a-cheap-104-in-one-handheld/