Начну с конца и покажу результат:

За что этот телефон так наказан...

Минутка анти-рекламы, это F+ F256. Каждый месяц отправляет платное СМС на номер 4446. Судя по прошивке текст сообщения "ccor 75#nonet". Также появлялись странные подписки с ежедневным списанием. СMC не сохраняется на телефоне и видно только на детализации расходов. Хотелось бы услышать от F+ объяснений, как же так получилось, и что это больше не повторится (и не происходит с другими моделями, а F256 уже нет в продаже).

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

Что за зверь внутри?

В данном телефоне используется чип SC6531E китайской компании Spreadtrum Communications, которая после объединения с компанией RDA Microelectronics сменила название на Unisoc.

Это процессор ARM926EJ-S частотой 208 МГц, архитектура процессора armv5tej. Младшая ARM архитектура, отличается отсутствием возможности чтения невыровненных данных, нет деления, нет SIMD операций, нет операций с плавающей точкой.

Установлено 4 мегабайта флэш памяти, большая часть занята прошивкой, остальное используется для сохранения настроек, номеров и СМС. Также осталось место на раздел FAT12 размером... 78.8 килобайт (влезает ровно один снимок с камеры, качество которой ужасное).

Также есть 4 мегабайта оперативной памяти.

мб Мб МБ...

Может быть найдутся те, кто мне возразит, но я воспринимаю сокращение из букв М и Б только как мегабайт, большинство же брендов таких телефонов (как и продавцов), пишет объёмы памяти в мегабитах, подписывая это МБ/Мб. Считаю это введением в заблуждение, если пишете про мегабиты, то будьте добры подписывать "Мбит". За что нередко получают негативные отзывы от покупателей, что ожидали там больше памяти.

Как дошло до Doom

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

Так как в процессе я узнал как работать с USB на этом устройстве, то решил приспособить его в качестве игрушки для запуска своего кода, в отличие от простых плат разработки - тут сразу есть корпус, много кнопок, экран, батарейка, динамик, Bluetooth, карта памяти, радио. И много дешевле выходит. Единственный очень серьёзный минус - нет никакой открытой информации о том, как этим пользоваться. Это можно узнать только анализом прошивки и опытным путём.

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

А еще железо может потянуть эмулятор NES (про SNES не уверен).

Что получилось

Нашел управление:

  1. USB - правда лишь медленный 1.1.

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

  3. LCDC - контроллер LCD, выполняет функцию акселератора 2D графики, без него изображение придётся передавать попиксельно, тратя на это время процессора.

  4. Системный таймер - на SC6531E точность таймера 1мс.

  5. Клавиши - кроме клавиши питания (она же повесить трубку), видимо имеет свой интерфейс.

  6. Подсветка экрана - могу включать и изменять яркость.

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

Что не нашел (и не пытался): звук, MicroSD карта, Bluetooth, микрофон, радио, SIM карты.

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

Первую стадию запуска, где есть код для управления USB - уже выложил на GitHub. Остальное планирую переписать более чисто и выкладывать частями. Но сначала проверить еще на нескольких телефонах на том же чипсете.

Размер необходимого бинарного кода ~250кб (ARM thumb с опциями -Os/-Oz), четыре 8-бит и один 16-бит фреймбуферы размером 320x200. Для игровых данных осталось лишь 3 мегабайта. Вместо шести в оригинальном коде, на удивление всё работает, но возможно для каких-то больших уровней этого не хватит.

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

Скорость работы игры ~19 FPS (из максимальных 35).

Обновление: Исправил ошибку в заполнении MMU таблиц, из-за которой кэшировался только 1-й мегабайт памяти из 4-х. После исправления стало 35 FPS (могло быть 38, если бы не ограничения игры, квант игрового времени занимает 1/35 секунды).

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

Можно ли запустить на телефоне другой модели?

У этого чипа переопределяются контакты, то есть одно и то же устройство на плате (например дисплей или кнопки) может быть подключено по разному. Также разводка клавиш на печатной плате может быть разной. Поэтому нужны таблицы из прошивки как правильно инициализировать конкретное устройство. Эти таблицы называются pinmap и keymap.

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

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

Известные бренды кнопочных телефонов (Nokia, Panasonic) могут иметь защиту запускаемого через USB кода проверкой подписи.

Другие чипы дешевых кнопочных телефонов

По моему исследованию выходит, что половина рынка занята Spreadtrum (Unisoc) с чипом SC6531, на которые есть модификации SC6531E и SC6531DA (мне показалось что DA - более новый чип и начинает замещать E). Другая половина это MediaTek MT6261 (можно найти предшественника MT6260, но сейчас это редкость).

SC6531DA похож на SC6531E, но адреса некоторых контрольных регистров изменились и надо всё перепроверять по прошивкам.

Для MT6260 уже есть готовая работа по контролю над чипом.

Напоследок

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

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

  1. Сделайте API для разработчиков и возможность запускать свои приложения с карты памяти. Первые кто это грамотно сделает - получат преимущество на рынке, где очевидных различий между брендами нет, всё одинаковое и делается на одних и тех же китайских фабриках. (В идеале хотелось бы открытую ОС, но с этим возникнут проблемы из-за нежелания китайской компании открывать документацию.)

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

  3. Что относится к половине брендов - пишите модель чипа на сайте и в инструкции. У многих не указано даже в инструкции. Некоторые пишут SC6531 без указания модификации.

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

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


  1. inferrna
    24.11.2022 12:20
    +9

    Есть же KaiOs. Девайсы, вроде бы, от 11$, через emscripten можно хоть дум, хоть квейк собрать.
    https://www.kaiostech.com/explore/devices/


    1. StanKondrat
      24.11.2022 13:13

      Вот еще:

      Mobile operating system based on FreeRTOS™ optimized for E Ink displays - developed for Mudita Pure minimalist phone

      https://github.com/mudita/MuditaOS - в активной разработке
      https://mudita.com/products/ - только цена кусается €369.99


    1. Viacheslav01
      25.11.2022 02:21

      КаиОс уже больше напоминает андройд на минималках )


  1. Drayden
    24.11.2022 12:35
    +2

    Круть!

    Смешно, но я на HTC Touch (Win Mobile) с похожим управлением игрался в эмулятор СНЕС. На 200мгц чипе... Там, конечно, не Дум - но и такое управление позволяет игрушки проходить :))


    1. snuk182
      25.11.2022 00:08
      +3

      Я на MPX200 соника так прошел.


      1. Botvinkin
        25.11.2022 01:07
        +3

        А я проходил Соника на Nokia 7710 c 168MHz-процессором. Вообще, было сложно найти нативные игры под Symbian S90, эмулятор Сеги только-то и спасал.


      1. kilobait3
        26.11.2022 18:43

        Это полноценный ПК.


    1. Dimsml
      25.11.2022 11:13
      +2

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

      Тот же Yoshi's Island подтормаживает на дешёвых эмуляционных железках типа Powkiddy q90 / v90, Starfox скорее всего тоже. Обе игры используют дополнительные чипы в картридже, все эти чипы надо тоже эмулировать. Правда проблема может быть ещё и в устаревшей версии эмулятора.

      Процессор в этих железках вроде бы такой: Allwinner F1C100S CPU:533-798 MHz Single-Core ARM926-EJS


      1. Drayden
        25.11.2022 14:20

        Да, насчёт чипов и возможностей там было всё неоднозначно. На той же СНЕС, например, прозрачная лава в СуперМетроиде тормозила. Приходилось отключать или непрозрачить...

        Забавно, ведь был Doom для SNES! Жаль, не попробовал...


  1. Nyashkoshkko
    24.11.2022 13:26
    +7

    С подключением на хабр ;)


  1. balamutang
    24.11.2022 13:54

    Визуально похож на inoi 101, который не ворует деньги


  1. Vladusik2
    24.11.2022 14:35
    +2

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


    1. jpegqs Автор
      24.11.2022 15:15
      +2

      Чтобы у вас был Linux и телефон на чипе SC6531E (без защиты FDL подписью, как у дорогих брендов). Можете попробовать портировать мой код для Linux на другую систему, но тут я вам не помогу.
      Я выложил исходники что позволяют запускать свой код на SC6531E, SC6531DA (директория custom_fdl), MT6260, MT6261 (директория payload). Но с этим вы пока только Hello World сможете напечатать с телефона в терминал на компьютере (и дампнуть прошивку с бутлоадером). Можете начать с этого. А чтобы портировать на другие телефоны с чипсетом SC6531E, нужно вытащить таблицы пинов и клавиш из прошивки вашего телефона.

      И пока у меня поддерживается только LCD с id=0x9306, вертикальной ориентации, разрешения 240x320.

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


  1. 0xdead926e
    24.11.2022 14:43
    +3

    926ej-s... 208 мгц... не думала, что опять увижу это в 2022.

    *косится на siemens s75 с таким же 926ej-s на 208 мгц в стоке. вроде там в думе было побольше 19-ти фпс.*

    на snes и прочие сеги этого проца хватит. даже немножечко должно хватить на первую кваку, если памяти добавить. по крайней мере эта самая квака относительно неплохо бегала на нокии 3230, в которой 926 на 124 мгц.


    1. jpegqs Автор
      24.11.2022 15:38

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


      1. 0xdead926e
        24.11.2022 15:50
        +1

        вот не помню, как на s75 было, вот тайминги с s65 (926e на 104 мгц, память sdram)

        SDRAM timings: tRAS: 0, tRFC: 7, tRSC: 0, tRP: 0, tRCD: 0, tRC: 5, CL: 2, opmode: 0, burst: OFF, burst length: 3, tREF: 25, tRFC: 0, autorefresh: ON

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

        и да, на старых телефонах тоже экономили на всем, что только можно было.


    1. PuerteMuerte
      24.11.2022 17:04
      +2

      926ej-s... 208 мгц... не думала, что опять увижу это в 2022.

      Во времена дума в компьютерах было 33 МГц, так что тут агрегат с хорошим таким запасом мощности, даже пусть и ARM, а не х86


      1. CrashLogger
        24.11.2022 19:31
        +2

        На 33 МГц DOOM еле шевелился.


        1. PuerteMuerte
          24.11.2022 21:06
          +1

          Нормально она там шевелится:

          https://www.youtube.com/watch?v=KQDEKoRcXZc

          Не 60 фпс, но по меркам 1993 года что такое "плавный фпс", никто вообще и не знал. Играбельно - и слава богу.


          1. beeruser
            25.11.2022 03:37

            по меркам 1993 года 

            В 1993 уже был Pentium 66, где Doom работал очень быстро, а не 5-10fps как у вас на видео.

            Даже между 486dx-25 и 386dx-50 разница по плавности работы Doom была кардинальная.


            1. PuerteMuerte
              25.11.2022 16:57
              +4

              В 1993 уже был Pentium 66, где Doom работал очень быстро

              Ну как был... вы просто привыкли к современному миру, где Интел/АМД анонсировали новую линейку процессоров (пара лоу-енд, пара мейнстрим, пара мощных, пара топовых), через пару месяцев запустили продажи, и все побежали в магазины их покупать. В 1993 году было чутка иначе. Новые модели выходили не линейкой, а одной-двум штукам. Попадали они после выхода в топовый сегмент по уберцене, подвигая остальные на ступеньку ниже. Pentium 60 и 66 в 1993-м году, это был топ среди топов, они были в серверном сегменте и в сегменте дорогущих рабочих станций. Чуть ниже их в топе сидели 486 DХ2, в сегменте мощных были старшие 486DX, а как раз 386 и младшие 486 были мейнстримом.

              Что касается кардинальной разницы между 486dx-25 и 386dx-50, могу сказать, что даже 386DX-40 был по производительности примерно равен или даже немного лучше, чем 486DX-25, а 386DX-50 вообще не существовало :)

              Но на производительность дума влиял ряд других факторов, в частности, FPS мог очень сильно отличаться в зависимости от видеокарты. Это сейчас мы забыли, что у видеокарты есть ещё и такая характеристика, как производительность 2D-части, предполагается, что какая бы она ни была, её достаточно. А тогда банальная скорость записи данных в видеопамять существенно влияла на общую производительность всех приложений компьютера, которые что-то выводили на экран. И очень-очень сильно влияла на те приложения, которые много чего выводили на экран, такие, как игры. Даже заменой такого, казалось бы, утилитарного девайса, как ISA-видеокарта, на более новую, можно было удвоить ФПС в думе.


              1. beeruser
                26.11.2022 04:56

                В 1993 году было чутка иначе.

                Дяденька, а мне 40 лет(с)

                 они были в серверном сегменте и в сегменте дорогущих рабочих станций

                И что? Сейчас никто не мешает купить тредриппер и на нём запустить игру.

                Что касается кардинальной разницы между 486dx-25 и 386dx-50, могу сказать, что даже 386DX-40 был по производительности примерно равен или даже немного лучше,

                Давайте придерживаться фактов. Я прекрасно помню (в 1993г) что сабж на 486dx25 работал быстрее и интернет подтверждает это. (486sx тоже самое, но без FPU).

                https://youtu.be/3fcPxAO1FeU?t=122

                В тесте используется одинаковая видеокарта.

                386DX-50 вообще не существовало

                Ой, ну всё, очень страшная опечатка :)

                Я, знаете ли, ещё охотился на мамонтов на 286 в PCAD платы разводил.


                1. axe_chita
                  26.11.2022 06:59

                  На самом деле все сильно зависело от материнской платы, и WS по памяти и шине. К примеру, материнская плата Octec Jaguar 386DX40, с MR-BIOS, за счет нулевых WS показывала производительность на уровне 486 на 20-22МГц. Ну и конечно видеокарты Cirrus Logic тут рулил.


                1. PuerteMuerte
                  26.11.2022 22:56

                  И что? Сейчас никто не мешает купить тредриппер и на нём запустить игру.

                  Мешает тётя Зарплата. Пентиум-66 в 1993-м стоил несколько средних зарплат американца. Конечно же, Билл Гейтс с Мелиндой наверняка рубились в десматч именно на таких компьютерах, но они тогда стримов не оставили, поэтому давайте исходить из того, что подавляющее большинство геймеров тогда играли на чём-то вроде 386, это была совершенно типовая конфигурация, и именно под неё дум и писался.

                  Давайте придерживаться фактов

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

                  Вот пусть не дум, но тоже вполне себе трехмерный тест.

                  Вполне себе видно, что старшие 386 пересекаются по производительности с младшими 486, даже с одинаковым видео

                  Я, знаете ли, ещё охотился на мамонтов на 286 в PCAD платы разводил

                  Подумаешь, я в оркаде на "Поиске" схемы рисовал :Р


            1. MW_dem1305
              26.11.2022 06:04
              +1

              В 95-м -97 пентиумы пошли, я тогда в БГУИР учился.У нас ещё 486/586 вовсю в сетке рубились.В дум.


      1. vitalyvitaly
        24.11.2022 23:47
        +1

        По памяти использования DosBox на Нокии 5500 с подобным ARM-процессором - под эмулятором x86 он примерно соответствовал 12-мегагерцевому 80286, то есть весьма и весьма медленно. Но можно было играть в Supaplex.


        1. PuerteMuerte
          25.11.2022 00:40
          +1

          Здесь автор же запускает не под эмулятором, а нативный порт под ARM


    1. jpegqs Автор
      25.11.2022 09:34
      +2

      Дополнил текст, 19 FPS было из-за ошибки в заполнении MMU таблиц. После исправления упёрлось в 35 FPS лимит.


  1. aPiks
    24.11.2022 16:16

    У сяоми есть кнопочный телефон на Андроид...


    1. jpegqs Автор
      24.11.2022 16:46

      У меня есть Nobby 230, та же система (Android 4.4, но модифицированный и называется Mocor5 OS).


  1. tormozedison
    24.11.2022 16:35
    +3

    Возвращение эльфов?


  1. Doublesharp
    24.11.2022 16:35
    +1

    Немного повышу ставки и оставлю это тут. GTA: San Andreas на смарт-часах.


  1. jpegqs Автор
    24.11.2022 17:01
    +5

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


    1. khaleb1102
      24.11.2022 17:23
      +5

      Было бы неплохо.

      При попытке изучения ассемблера, обсмотревшись роликов про устройство древних ПК на Z80 решил попробовать написать хоть что-то для какого-нибудь нестандартного (в моём случае - не являющегося ардуиной) процессора.

      Нашёл трубку на 6531Е, родную прошивку. А ещё со времён когда у меня были android-телефоны на Spreadtrum, я помню, что для телефонов на таких процессорах есть 2 прошивальшика - UpgradeDownload и ResearchDownload. Второй позволяет распаковывать файлы родной прошивки (*.pac) и заменять в них разделы - идеальный способ рутования трубок для которых нет даже темы на 4pda - просто правка initrd с последующей прошивкой. (Телефоны с подписью загрузчика мне не попадались).

      Соответственно, подсмотрев в ResearchDownload, по какому смещению в оперативке грузится FDL2 начал писать свой helloworld на смеси ассемблера и сей arm-none-eabi-gcc. При этом, прошивальшик под wine хоть и запускается, но тело не видит, так что переехал на форточки и WSL2 - сборка под местной убунтой, заливка под win.

      В даташите первым делом нашёл адреса "аналоговой части" (или это можно назвать питанием?), там где включаются подсветка экрана, клавы и вибромотор. Реализовал blink - простейший пример с задержками на циклах.

      На 4пда нашёл исходники, видимо для версии прошивки более ранней, чем у меня - и от другого телефона. На основе её и даташита запустил UART на передачу, подпаялся к пятачкам под аккумулятором. Кстати, под запуском имеется ввиду - разобрался как передавать байты и менять скорость. Сам блок включает FDL1 - в инициализацию не вникал.

      Решил пойти дальше, разобраться с RTC или клавой - но застрял. Там вроде клавиатура зависит от RTC, который находится на "analog die" - а наладить с ним общение не удалось. И до прерываний (любых) тоже не дошёл - забросил проект.

      Так что жду ваших исходников в любом рабочем виде, а уж если будет рабочий пример с извлечением pinmap (до необходимости которого я не дошёл) - вообще шик.


      1. jpegqs Автор
        24.11.2022 17:36
        +1

        Мои тулы с гитхаба собрать и запустить сможете? (Что загрузчик FDL для Линукс и custom_fdl.) С вами бы я скооперировался для ускорения разработки. На базе этих исходников у меня FDL2 с игрой и USB файл сервер.


        1. khaleb1102
          24.11.2022 17:38
          +1

          Попробую в эти выходные


        1. khaleb1102
          24.11.2022 17:39

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


  1. jpegqs Автор
    24.11.2022 18:27
    +6

    Хотелось бы накопить достаточно знаний о чипе чтобы сделать открытую ОС. Но такое я один не потяну, нужна команда. Так что я хочу сделать порт Doom что работает на достаточном количестве телефонов, а там может народ подтянется и поможет с остальным. (Или не подтянется, ну и ладно... попытаться всё равно стоит.)


    1. Javian
      24.11.2022 19:19
      +3

      Off надо бы на hackaday как новость разместить.


      1. jpegqs Автор
        24.11.2022 20:05
        +4

        На Hacker News размещал, никто не заметил, но там всегда как повезёт.


  1. Qumbayas
    25.11.2022 06:17
    +2

    Очень круто! Меня рассмешило в свое время, как doom запустили в диспетчере задач windows


  1. irishmann
    25.11.2022 08:08
    +2

    На старых телефонах была же платформа J2ME, почему ее не используют на современных кнопочных звонилках?


    1. jpegqs Автор
      25.11.2022 09:17
      +3

      Причём J в ARMv5TEJ - это Jazelle, расширение процессора что позволяет выполнять Java байткод напрямую. Но Java там нет, возможно из-за малого количества RAM/флэш памяти.


      1. 0xdead926e
        25.11.2022 09:43
        +2

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

        *и кстати, на симанцах эту java-машину каждый второй отключал. ибо лишний мегабайт оперативки, да.*


    1. Akon32
      25.11.2022 10:19

      То ли она медленно развивалась, то ли в Google/Android был синдром NIH.


  1. DinoZavr3
    25.11.2022 13:24

    Оо, круто, что нужно для запуска? Может, тоже попробую


    1. jpegqs Автор
      25.11.2022 17:10

      Пока не дошел до публикации всего. На гитхаб (в дампер/загрузчик) добавил использование libusb (для тех кто на Windows - это будет единственный метод, подозреваю что еще и драйвера требует, те же самые что для прошивки используются). Если вы на Windows, то попробуйте собрать это и дампнуть прошивку. И телефон нужен конкретного чипсета. В общем не просто и не сразу, код пока настроен на одну модель телефона и LCD экрана, но у меня есть идеи для автоматического нахождения конфигурации телефона.