Увидел я, значит, пост про Bad Apple на MSX и подумал — а чем я хуже? Телефоны Siemens одно время были достаточно популярны на территории бывшего СССР, особенно среди моего поколения. А их прошивки были достаточно хакабельными. Патчи были всякие разные: от замены графики до добавления новой функциональности. И самый апогей патчестроения: т.н. эльфпак или эльфлоадер, он же загрузчик нативных приложений в формате ELF, превращающий обычный кнопочный телефон в, по сути, смартфон.

В этом посте я расскажу о том, как я в 2022 году смог написать и скомпилировать эльф на macOS на М1, и покажу, что из этого получилось.


Прямо сразу: видео с тем, что получилось



Коротко о телефонах Siemens x65 и x75


  • SoC Infineon PMB8870, также известная как SGold
  • Процессор ARM926EJ-S
  • 2 Мб оперативки В комментах пишут, что 8
  • 32 Мб флэш-памяти, из них ~10 отведено под доступную пользователю файловую систему, в остальном объёме находится прошивка
  • Экран 132*176, большую часть времени работает в режиме RGB565 (16 бит на пиксель)
  • В S65 и всей 75 серии есть слот для карты памяти RS-MMC (это как SD, только тоньше и в половину длины)
  • В 75 серии присутствует аппаратный декодер mp3
  • Связь с внешним миром: GSM/GPRS (без EDGE), последовательный порт в проприетарном разъёме, ИК-порт, в некоторых моделях bluetooth.

fdsafa
Структурная схема SoC из рекламных материалов производителя

Ядро процессора только одно, и оно занимается и GSM (как я понимаю, на достаточно высоком уровне), и рисованием интерфейса на экране.

Коротко об эльфах и их загрузчике


Строго говоря, полноценной операционной системы с настоящим API, динамическим линкером, виртуальной памятью и прочими современными радостями у этих телефонов нет. В процессоре есть MMU, но он не используется. Прошивка достаточно монолитна, и, по слухам, сделана на основе ОС реального времени Nucleus RTOS. Это всё оказывается проблемой, когда хочется динамически подгружать какой-то левый код — адреса нужных этому коду функций разные на разных моделях телефонов и на разных версиях прошивки для одной и той же модели. Разработчики загрузчика эльфов решили эту проблему оригинально: сделали интерфейс системных вызовов а-ля DOS. Раскладываешь аргументы функции по регистрам, вызываешь инструкцию swi XX, где XX — номер нужной функции, а добавленный патчем обработчик прерывания уже по таблице для конкретной прошивки прыгает в нужное место.

В оригинальном репозитории на тему эльфов, который каким-то чудом всё ещё онлайн, да и по моей собственной памяти, эльфы компилировались какой-то очень странной проприетарной микроконтроллерной штукой под названием IAR. У неё вот этот способ вызова функций через swi — как будто бы встроенная в компилятор фича. Я уже был готов сам начать разбираться с правильным ABI для этих «системных вызовов», писать куски ассемблера, отлаживать всё это дело без отладчика и даже логирования, но наткнулся на вот этот репозиторий, в котором те же самые эльфы сопровождаются файлами проектов для CodeBlocks и собираются нормальным человеческим gcc. Выглядит так, что самая сложная работа всё-таки уже была сделана за меня. Так что берём это всё и…

Пытаемся собрать эльф


И сразу вопрос — а чем собирать-то будем? Я уже когда-то пробовал извратиться с Android NDK, но ничего адекватно работающего из этого не получилось. К счастью, в Homebrew есть пакет gcc-arm-embedded с описанием «Pre-built GNU bare-metal toolchain for 32-bit Arm processors» — выглядит как именно то, что нам нужно!

Ставим, собираем минимальный пример эльфа из репозитория выше, elfloader3/examples/C/main.c:
arm-none-eabi-gcc main.c -o hello.elf -I../../dev/include -DSGOLD -O2 -std=gnu99 -D__NO_LIBC -lcrt -lcrt_helper -lgcc -L../../dev/lib/libs -Wl,--defsym,__ex=0 -Wl,--gc-section -nostartfiles
(не показано: с десяток неудачных попыток)

Заливаем на телефон, запускаем. Ничего не происходит. Осознаём, что эльфы, которые генерирует gcc, всё-таки не настолько же простые, как из IAR. Ставим имеющийся в репозитории более новый эльфлоадер. Поверх старого, надеясь, что ничего не сломается.


Возвращение 2007 выглядит примерно вот так

Хорошая новость: телефон после установки патча включается и работает. Плохая: эльф всё равно не запускается, но теперь хотя бы показывает ошибку.


Динамические библиотеки, щито?! В 2007 такого не было.

После чтения исходников стало понятно, что библиотека должна быть в папке /ZBin/lib либо в памяти телефона, либо на карте. Кладём её туда и запускаем ещё раз. Получаем ошибку «Incorrect elf». Находим в исходниках рядом с ней строку (орфография сохранена):
If you wont to use the shared libraries, you must add to linker option '--defsym __ex=0' add use elfclose function!

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

  • Пришлось отказаться от предоставленной эльфлоадером «рантайм-библиотеки», потому что у меня так и не получилось заставить это работать. Видимо, GCC слишком новый.
  • Не обязательно вызывать все функции прошивки через программные прерывания. Этот новый эльфлоадер так и не делает — он получает указатель на таблицу указателей на функции через swi 0x80FF, а дальше уже вызывает из неё. Я у себя сделал так же, в swilib.h уже все нужные макросы прописаны, удобно.
  • Ни в коем случае нельзя инициализировать поля с указателями в структурах статически (на этапе компиляции). Эльф загружается в по сути случайный адрес в оперативке, а компилятор прописывает в эти поля адреса как будто эльф загружен по адресу 0x00000000. Результат предсказуем. Если инициализировать во время выполнения, такой проблемы нет, адрес высчитывается относительно pc и получается правильный.
  • Выгрузку эльфа из памяти я так и не смог сделать. Идея там такая, что нужно, чтобы эльф экспортировал (или импортировал?) символ __ex, в который эльфлоадер положит указатель на свою структуру с информацией про сам этот эльф. При выходе нужно передать этот указатель в функцию elfclose(). У меня так и не получилось заставить линкер экспортировать этот символ так, как оно ожидает, так что эта память просто течёт. Но для того, что мы тут пытаемся сделать, это вроде и не так уж страшно ¯\_(ツ)_/¯

Итоговый makefile
CC=arm-none-eabi-gcc
CFLAGS=-I../sie-dev/elfloader3/dev/include -DSGOLD -DX75 -D__NO_LIBC -O2 -std=gnu99 -Wl,-s -nostartfiles -nostdlib -fPIE -fshort-wchar
LIBS=-lgcc
DEPS=

%.o: %.c $(DEPS)
	$(CC) -c -o $@ $< $(CFLAGS)

BadApple: BadApple.o
	$(CC) -o BadApple.elf BadApple.o $(CFLAGS) $(LIBS)

.PHONY: clean

clean:
	rm -f *.o *.elf


Собственно сжатие и вывод видео


Изначально я хотел выводить картинку прямо в буфер экрана, но из этого ничего не получилось. Функция RamScreenBuffer() действительно возвращает указатель на буфер экрана. Можно прочитать 132*176*2 байт и получится скриншот. Но писать туда бесполезно — ничего из записанного почему-то нигде не отображается. Скорее всего, потому что сама прошивка его перезаписывает раньше, чем свежезаписанные данные попадут в местный аналог видеокарты.

В итоге остановился на менее оптимальном способе: сделать растр (т.н. IMGHDR), обновлять в нём пиксели каждый кадр и рисовать его на экран. Он бывает с 1, 8 или 16 битами на пиксель, я выбрал 8, чтобы были градации серого, но чтобы и не приходилось слишком много данных гонять туда-сюда (это ооооочень медленно). Получилось не очень оптимально, но 15 кадров в секунду вроде бы тянет.

Алгоритм сжатия максимально тупой, вариация на тему RLE. Есть команды «пропустить пиксели» (которые не поменялись с прошлого кадра), «перезаписать пиксели», «заполнить указанным значением» и «заполнить нулями». Всё видео, 3287 кадров, заняло около 13 Мб. Для облегчения чтения файл поделен на страницы по 40 Кб. Предполагается читать страницу целиком и держать её в памяти — каждый кадр гарантированно находится в пределах одной страницы.

Исходники самого эльфа и кодировщика

FAQ


Q: Зачем ты это сделал?
A: Потому что могу, потому что хотел выпендриться, и потому что у меня всё равно почти нет жизни.

Q: А на других телефонах заработает?
A: На 75 серии — скорее да, чем нет. На 65 серии — скорее нет, чем да, потому что во встроенную память файл с видео не влезет, нужна карта. На S65 может заработать, если сконвертировать музыку в amr или wav. А может и не заработать. Есть только один способ узнать!

Q: Но ведь на этих сименсах и так можно смотреть видео? Я помню, я смотрел!
A: В окошке на полэкрана, с битрейтом «шакалы 20й степени» и однозначным FPS.

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


  1. vs74
    26.01.2022 21:12
    +6

    Любимый телефон в 2007 был)


    1. FrozenTwilight
      26.01.2022 23:31
      +3

      У меня была его младшая версия -- С75. Но мне ооочень нравился CX75 из-за всех его фич с мп3 и картой памяти.

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


      1. slaFFik
        27.01.2022 00:10
        +1

        У меня CX65 был, я прошивку ставил с программным mp3 декодером, и мог с компа заливать в телефон аж 3-4 mp3 файла и воспроизводить их. Памяти было 10,6 мегабайт.

        И поводу zip - все верно. Паковал шпоры на первых курсах универа (куча .txt файлов внутри зипа). И с телефона заходил в архив и открывал что нужно.


      1. grishkaa Автор
        27.01.2022 02:05
        +3

        Поддержка zip в любом случае необходима любому телефону с J2ME, потому что .jar — это на самом деле zip с классами, ресурсами и манифестом.


        1. chelovek-jpeg
          28.01.2022 10:42
          +1

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


    1. vd0
      27.01.2022 00:28
      +1

      Как я его любил... До сих пор вспоминается с большей теплотой чем любой другой телефон


    1. chelovek-jpeg
      28.01.2022 10:40

      юзал его с 2007 по 2009) эльфы, патчи наше всё) по-сути первый мой смартфон. Забавное совпадение на днях загорелся идеей его купить, скоро приобрету бу и потом корпус заменю на новый


  1. 13_beta2
    26.01.2022 21:16
    +10

    Ох, аж олдскулы свело.

    Помню прекрасно и софт того времени и многометровые листинги в Ида (поди найди, где вообще в 16 мб бинарнике код а где картинки с нескучным обоями), первые опыты с не-х86 ассемблером и первые патчи, бесконечные поиски в оперативке нужных данных и попытки придумать и организовать интерфейс обмена данными между такой заплаткой и j2me приложением. Как-то заодно был приобретён первый опыт с java, злое*учим эклипсом и масса других побочных навыков. Скучно точно не было.


    1. dydyman
      26.01.2022 22:03

      поди найди, где вообще в 16 мб бинарнике код а где картинки с нескучным обоями
      Я так иконки меню переделывал, прозрачность они не поддерживали, а очень хотелось. Как-то психанул и нарисовал комплект анимированных иконок с кусочками обоев на заднем плане (получилась иллюзия прозрачности) и запаковал в прошивку. Ну а смещение в фулфлеше для перезаписи imei, помнил тогда наизусть.
      Сейчас для любителей ковыряться в железе есть ардуины/малины на любой вкус, а тогда вместо них были Сименсы )


      1. 13_beta2
        27.01.2022 20:42

        В отличие от ... Сименсы были "всем понятной "потребительской электроникой и показать свои эксперименты можно было условно любому знакомому. Кого-то и этот аспект мотивировал.


    1. grishkaa Автор
      27.01.2022 02:34

      поди найди, где вообще в 16 мб бинарнике код а где картинки с нескучным обоями
      К моменту, когда я начал этим всем увлекаться, уже были инструменты вроде smelter, которые умели показывать где что по блокам. Дизассемблировать прошивку я, правда, тогда не пробовал, зато пробовал вот вчера, гидрой. Декомпилирует во что-то осмысленное, но, блин, всё равно сложно понять как именно и почему оно всё работает. Возможно я просто не умею реверсить bare metal код.


    1. Ommonick
      27.01.2022 11:24
      +1

      До сих пор лежит дома Samsung x600, который при включении говорит металлизированным голосом "система включена". Было время, да.


  1. drWhy
    26.01.2022 22:04
    +1

    Когда-то купил AX72, но так и не дождался, пока патчи под него подвезут. Может время настало?


    1. Nick0las
      27.01.2022 18:31
      +1

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

      Добавлено: некоторые телефоны можно было прошить прошивкой от другой модели. Например на CX65 ставилась прошивка от CX70. А на ME45 прошивка от S45i (хотя это совсем другая история)


      1. grishkaa Автор
        27.01.2022 23:21

        Так вообще, насколько я понимаю, «SWI-библиотека» появилась ещё до эльфлоадера, именно чтобы можно было писать портабельные патчи. И в Smelter есть кнопка, чтобы искать функции по паттернам.


        1. Nick0las
          28.01.2022 00:42

          Искать по паттерну смелтером можно. Но кроме вызова функций надо еще свою функцию вызывать откуда надо. Поэтому библиотека функций не решает все проблемы портируемости.


          1. grishkaa Автор
            28.01.2022 00:42

            А, да, снова туплю


  1. dreikk91
    27.01.2022 00:28

    вроде в сх75 8мб оперативки, а спатчем 16.


  1. Wolf4D
    27.01.2022 00:52
    +2

    А вот S75 отлично проигрывал видео фуллскрин, там ЕМНИП и аппаратный декодер был. Помню, с завода на нём лежало видео "Million Bycicles", игравшее плавно и красиво - а я затарился огромной (не меньше гигабайта!) картой памяти, и смотрел оттуда полнометражки. Где-то на половине иногда начинался рассинхрон звука, но я мужественно терпел. Помню и всю эту работу с эльфами, и то, что изложено в статье - очень круто :)

    А CX75 отличная машинка - мой папа использовал его ещё года три назад, и только ради новомодных банковских приложений отказался от него. Весь корпус потёрт, аккумулятор менялся, но аппарат активно эксплуатировался больше десяти лет! Теперь лежит в холодном резерве, чтобы в случае необходимости снова встать "на боевое дежурство".


    1. space2pacman
      27.01.2022 02:58
      +4

      Видео Million Bycicles ещё осталось? Скиньте через ИК-порт.


      1. grishkaa Автор
        27.01.2022 03:00
        +2

        Такие видео через ик-порт кидать долго, не факт что за урок получится успеть


        1. Solid_Nitrogen
          27.01.2022 19:19

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


      1. jaydee77
        27.01.2022 06:47
        +3

        1. Wolf4D
          27.01.2022 08:57

          Да, это он! Как раз собирался отправиться на поиски.


  1. Daddy_Cool
    27.01.2022 02:54

    Посмотерл видео - прикольно!
    Вот есть стим-панк, есть дизель-панк... А может есть такой...кнопочно-телефонный панк? Где мир пошел не по пути больших тыкательных экранов, а по пути здорового человека? Экраны чтоб смотреть, кнопки, чтоб в них тыкать...


    1. grishkaa Автор
      27.01.2022 03:05

      Так до появления айфона вполне себе были кнопочные смартфоны с более настоящими ОС, с тем же симбианом например. Стоили, как правило, как несколько обычных телефонов.

      Мне, правда, кажется прикольным компромиссный вариант — слайдер и с большим сенсорным экраном, и с физическими кнопками. У меня как-то в итоге ни слайдера, ни раскладушки не было, может поэтому так и кажется)


    1. K0styan
      27.01.2022 11:35

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

      *окей, до 4 части, там уже смартфоны(


    1. chelovek-jpeg
      28.01.2022 10:46

      вот был же расцвет 8-битной культуры, может и ренессанс старых мобильников будет?)


      1. grishkaa Автор
        28.01.2022 10:50

        Так вроде уже понемногу начинается. У меня один друг недавно купил себе какую-то нокию (с симбианом, правда, насколько я помню), игры запускать. И ведь в других странах 2G-сети уже начали отключать, а в России таких планов вроде пока нет :)

        Если честно, я даже от реакции общественности на эту статью несколько офигел. Ожидал, что да, ностальгия у народа есть, но чтоб вот прям настолько!


    1. tormozedison
      29.01.2022 14:08

      Kai OS - и есть такой панк.


  1. space2pacman
    27.01.2022 02:57

    Был C65 и был удивлён, что через галерею видео формата 3gp не воспроизводилось а через файловый менеджер - да.


    1. c45
      27.01.2022 21:52

      Да, в C65 можно было смотреть короткие видео через файлменеджер, но не во всех прошивках.


  1. dlinyj
    27.01.2022 03:07
    +3

    Потрясающая статья!
    Громадное спасибо, аш олдскулы свело. Интересно, где вы нашли описание всех функций?


    1. grishkaa Автор
      27.01.2022 03:13
      +4

      Сами определения — вот тут, в том же репозитории вот тут есть куча примеров эльфов, где они используются. Ну а так, как ни странно, можно гуглить их названия (они достаточно уникальны!) и забредать на какие-нибудь древние форумы, или на буквально сайты на народе. В исходниках эльфов частенько есть комментарии. На русском. В windows-1251, ъаъ. И всякий там код для инициализации CSM/GUI все явно копипастили друг у друга, я тоже скопипастил, но переписал, чтобы он был более читаемый.

      И, конечно же, можно экспериментировать. Но аккуратно. Любое неверное движение — и телефон говорит «пик» и вырубается. Причину можно посмотреть в инженерном меню в разделе "(S)Exit", но она в большинстве случаев вообще не помогает понять что именно пошло не так.


      1. dlinyj
        27.01.2022 12:09
        +1

        Спасибо!


  1. strangest
    27.01.2022 04:49
    +3

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

    аудитория была в шоке, ведь телефон видео не поддерживает - но играет!


  1. 0xdead926e
    27.01.2022 05:13
    +1

    тщмта, железа этих телефонов вполне хватало на xvid 132*176 в 15 fps. больше смысла не имело, ибо дефолтный "драйвер" дисплея (который на самом деле не драйвер, а просто процесс nucleus'а, а драйвера siemens не использовали вообще) просто не умел рефрешить чаще.

    упор там был даже не в производительность проца, которой вполне хватало (но дико нехватало наличия хоть какого-нибудь FPU и бесило то, что проц даже банально делить не умеет), а в скорость доступа до флешки. той, которая (RS-)MMC. наивный fopen/fread выдавал единицы килобайт в секунду. ровно по той причине, что siemens не использовали драйвера.

    при этом чисто технически sdio-контроллер там мог читать флешки быстро и делал это- но только в родном плеере. спокойно выдавал все 1411 кбит/с.

    крч, не просто так в этих телефонах в векторах прерываний есть замечательная константа 0xFACE926E, а память при старте ос они проверяют не менее замечательной константой 0xDEAD926E.

    • 2 Мб оперативки

    1. а на cx75 (и возможно m75)- 16, верхние 8 из которых не использовались. но можно включить обратно.


    1. grishkaa Автор
      27.01.2022 05:30
      +1

      наивный fopen/fread выдавал единицы килобайт в секунду
      О. А вот это интересно. Я реально столкнулся с тем, что при чтении страницы (40 кб) из файла наивно в GUI_OnRedraw() всё ощутимо пролагивает на полсекунды. Решил это тем, что выделил два буфера: один для страницы, с которой мы рисуем кадры, и второй — чтобы асинхронно (если честно, всё ещё не до конца понимаю что делает SUBPROC(), но вроде бы запускает переданную функцию как отдельный поток) читать в него файл. Когда закончили с текущим буфером, меняем их местами и снова запускаем чтение асинхронно.
      крч, не просто так в этих телефонах в векторах прерываний есть замечательная константа 0xFACE926E, а память при старте ос они проверяют не менее замечательной константой 0xDEAD926E.
      Это я не находил :)

      Но у меня как-то вообще всё туго с реверсингом bare metal кода, даже с современными инструментами вроде ghidra. Наверное, не стоит пытаться тренироваться в этом на ~22 мегабайтах прошивки с RTOS для устройства с каким-то умопомрачительным количеством периферии.
      8. а на cx75 (и возможно m75)- 16, верхние 8 из которых не использовались. но можно включить обратно.
      Поправил. Чот да, я всё-таки туплю — мне попадались адреса типа 0хa82f0714, при том, что я помню, что внешняя по отношению к процессору оперативка начинается с 0xa8000000, а это уже смещение почти 3 мб.

      А зачем они ставили 16, чтобы не использовать половину? Это ж дорого?


      1. 0xdead926e
        27.01.2022 05:41
        +3

        Это я не находил :)

        я просто лениво-лениво пишу эмулятор pmb8875/6, насмотрелась на оные. ну, а на dead926e еще тогда, чуть меньше 15 лет назад.

        0xface926e лежит по адресу 0x14. но не уверена, что его можно прочитать просто так- туда подмаплена TCM.

        Я реально столкнулся с тем, что при чтении страницы (40 кб) из файла наивно в GUI_OnRedraw() всё ощутимо пролагивает на полсекунды. 

        там просто фс тоже в отдельном процессе и общение с ним mailbox'ами и очередями. с очевидными тормозами на каждом шагу.

        А зачем они ставили 16, чтобы не использовать половину? Это ж дорого?

        кто же их знает, это же siemens xD

        возможно, хотели что-то еще добавить, но не успели. там очень-очень много недопиленных вещей. *показывает на 3d-ускоритель в s75*

        даже с современными инструментами вроде ghidra.

        гидрой, да 32-меговый бинарь... она ж подавится xD

        вроде бы запускает переданную функцию как отдельный поток

        чисто технически все эльфы работают в одном потоке. cepid 0x4209, насколько помню. а subproc запускает функцию в контексте другого (но тоже одного и фиксированного) потока с другим приоритетом (pid == приоритет). вот его уже не помню, слишком давно было.


        1. grishkaa Автор
          27.01.2022 05:58
          +1

          я просто лениво-лениво пишу эмулятор pmb8875/6, насмотрелась на оные.
          Ещё интереснее! Такая мысль у меня тоже была, чтобы наконец-то какими-то практическими вещами укрепить своё понимание как работают процессоры в частности и железо в целом на низком уровне. Но лучше, видимо, всё-таки начать с чего-нибудь более документированного и менее сложного. Игровой приставки там какой-нибудь. Там из обязательной к поддержке периферии обычно только видеочип и кнопки/джойстики.

          И как успехи?
          ну, а на dead926e еще тогда, чуть меньше 15 лет назад.
          В фулфлэше с того сх75, что в видео, оно есть на смещении 0x92AC4 (в обратном порядке байт).
          там просто фс тоже в отдельном процессе и общение с ним mailbox'ами и очередями.
          Ага, до чего-то такого я докапывался, по крайней мере видел процессы (CepID, кстати что такое CepID?) с FFS в названии — это либо For Fuck's Sake, либо Flash File System, каждый выбирает расшифровку по вкусу. И ещё все функции для работы с файлами вызываются через какую-то таблицу с указателями (которая я не смог найти где заполняется). Подозреваю, что они разные для флэша и карты.
          *показывает на 3d-ускоритель в s75*
          Так он вроде работал? В соседнем комменте про это писали.
          гидрой, да 32-меговый бинарь… она ж подавится xD
          Как ни странно, не давилась даже на макбуке 2012 года, а на этом с м1 макс уж и подавно.


  1. 0xdead926e
    27.01.2022 06:10
    +3

    И как успехи?

    https://pastebin.com/YBYspJBe

    nucleus запускается, совсем лоулевел "драйвера" запускаются, шедулер работает. до старта "основной ос" не доходит (да, там "ос поверх ос"). за что-то надо дернуть, еще не нашла, за что xD

    или возможно просто что-то прошивке не нравится и она втихую перестает дальше запускаться (но не выключается и не перестает перезапускать watchdog)

    тот лог с фуллфлеша s65, если что.

    Так он вроде работал? В соседнем комменте про это писали.

    в соседнем комменте про видео, а не про 3d. ЕМНИП там стоял ati imageon из первых, у которых был opengles 1.1. и вот оно работало настолько плохо... что я не уверена, что он вообще использовался. xD

    какую-то таблицу с указателями

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

    кажется, около dns.


  1. DaemonGloom
    27.01.2022 08:52
    +1

    Эх, ностальгия. Бессонные ночи, поиск функций в прошивке по паттернам (и методом тыка) для добавления в таблицу функций, портирование патчей от других моделей и написание эльфов. Поиск адресов падения в s-exit, первые попытки перестать экономить память и взять аж 256 байт сразу под конфиг, а не увеличивать это значение понемногу с каждой версией. Где-то до сих пор валяется архив с патчами, которые я так и не выложил, и прочим барахлом. Жаль, сам телефон после долгого лежания в столе перестал включаться.


  1. FSA
    27.01.2022 09:43
    +3

    Киллер-фичей Siemens были виртуальные SIM-карты. При чём их можно было сделать даже на M55, но было немного неудобно, что нужно было перезагружать телефон. На M65 и S75 можно уже выбрать карту из менюшки, подождать и пользоваться.


    1. Frankenstine
      27.01.2022 11:45
      +1

      У меня были на SL45, жаль только таким образом пролюбил физическую симку, кек


    1. 13_beta2
      27.01.2022 20:38
      +1

      Именно. Жаль современные симки уже не брутфорсятся.

      А ещё люди знавшие про патч мультисим явно не разделяли мнение о "инновационности" eSIM многие годы спустя.


  1. Blackmeser
    27.01.2022 10:11
    +1

    Буквально на днях купил Б/У Siemens 65 серии, ибо ностальгия. К сожалению узнал что Теле2 отказался от предоставления доступа в интернет GPRS. Кто-нибудь знает, можно ли собрать кабель-аналог DCA510 самому? Где взять распиновку?


    1. Nick0las
      27.01.2022 18:42
      +2

      Распиновка гуглится по x65 pionout. Она такая:

      1 - зарядка (можно подать +5в от USB)

      2 - GND

      3 - TX

      4 - RX

      5 - CTS. Привязываем к земле (pin 2)

      7 - DCD. Привязываем к земле (pin 2)

      Большинство инструкций упускают что 5 и 7 ноги надо подтянуть к земле. А так - подойдет практически любой USB-UART с уровнями 3.3В. Для прошивки зарядка (pin 1) не нужна насколько я помню.


    1. 13_beta2
      27.01.2022 20:35

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


      1. SlimShaggy
        27.01.2022 23:06

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


        1. 13_beta2
          28.01.2022 00:00

          Шить — нельзя, да. Были (даже есть, если поискать) оба варианта. Помню в родном dca510 отвратное качество пластика, растрескался моментально.

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


          1. SlimShaggy
            28.01.2022 00:03

            Мой китайский 510 (с коробочкой посередине) до сих пор цел - видимо, тот редкий случай, когда китай качественнее бренда.


        1. Blackmeser
          28.01.2022 06:45

          Кабель откопал, кажется DCA510, проблема что в диспетчере устройств когда его подключишь - он не определяется, а когда телефон подключаешь - тогда начинает определяться, но как Unknown Device, VID_0000&PID_0000, дрова не ставятся, пытался вручную вдолбить дрова FTDI (COM<->USB), они отказались запускаться. С VID_0000&PID_0000 что-то можно сделать? Или это проблема кабеля?


          1. Nick0las
            28.01.2022 12:38

            Похоже что кабель не DCA510 или USB-UART чип сильно не в порядке. Я бы посоветовал найти исправный USB-UART и соеденить с имеющимся разъемом.


          1. SlimShaggy
            28.01.2022 15:50

            Скорее всего проблема кабеля. Мой даже без телефона определялся как USB-Serial Converter и в системе появлялся виртуальный COM-порт.


          1. 0xdead926e
            28.01.2022 18:28
            +2

            скорее всего это защита от контрафактных чипов, FTDI этим страдали. будет работать только со старыми драйверами (2.8.14 кажется), если прописать vid/pid в него обратно (гуглится по ftdi mprog). но проще взять любой другой usb-uart конвертер, лучше всего на ch340 - они точно могут в два мегабода и их дрова не страдают защитой от подделок.


  1. DrMefistO
    27.01.2022 10:41
    +2

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

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


    1. grishkaa Автор
      27.01.2022 19:32

      Сомневаюсь, что кому бы то ни было было бы интересно смотреть на под сотню таких команд, мелких изменений исходника из папки examples и крашей прошивки. Но так, когда я ещё не разобрался с инициализацией структур, но уже смог собрать что-то пытающееся запуститься, я отлаживал эти проблемы с указателями с помощью таки работающих sprintf и ShowMSG (показывает алерт).


      1. DrMefistO
        27.01.2022 20:26

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


        1. grishkaa Автор
          27.01.2022 20:30

          Нуууу грабли, по которым я прошёл, я таки перечислил :)


  1. nullch
    27.01.2022 10:55
    +1

    Какая милота. Напомнил мне мое детство, правда я писал эльфы патчи для SE. Скучаю по тем временам.


  1. kasiopei
    27.01.2022 10:56
    +3

    Я на своем выставил вместо фона гифку с показаниями радиации. Достаешь так из кармана, смотришь с испуганым видом. "Уго у вас тут фон!"


    1. drWhy
      27.01.2022 11:07

      Главное — не обратный отсчёт с арабским текстом в самолёте, были такие скринсейверы.


  1. dreikk91
    27.01.2022 11:41
    +2

    Мне больше всего нравились эмуляторы и порт дума. Тогда это было очень круто.

    С телефонов есть мс60 рабочий, сх75 в разобраном виде, но вроде тоже рабочий, el71 с дохлым шлейфом, без батареи но включается (дажу фул слил), е71 работает, но плохо сеть ловит. Последним купил sxg75 за 30 грн без батареи, но это уже не совсем то.

    Кабель для прошивки сделал на ch340g, был старый на pl2102, но с ним часто бсоды прилетали

    Кстати елка нормально тянула видео xvid 320x240 с хорошим битрейтом и фпс


  1. SlimShaggy
    27.01.2022 23:29
    +3

    Я в те времена благодаря Сименсу увлекся нетмониторингом. Был такой патч "miniGPS" - заменял название оператора на текст из файлика с именем, соответствующим CID-LAC текущей соты. И Java-редактор этих самых файликов к нему прилагался. Эх, сколько километров было пройдено в поисках немногочисленных базовых станций орловского Мегафона. Плюс каждую обойти кругом, чтоб поймать все сектора. И название для каждого понятное придумать, и на карту нанести... А еще во многих местах рядом стояли БСки разных операторов, и нужно было по уровню сигнала и задержке (или надписи на контейнере ????) определить, какая из них "моя". Через некоторое время принадлежность отдельно стоящих вышек мог определять на взгляд. В общем, веселые были времена, не то что сейчас, когда на каждом втором столбе микросота висит)


    1. grishkaa Автор
      27.01.2022 23:35
      +1

      Если что, на андроиде это всё тоже можно прямо сейчас. Во-первых в большинстве прошивок есть секретное меню, которое открывается, если набрать *#*#INFO#*#*, там можно посмотреть информацию об используемой БС, и ещё можно вручную выбрать стандарт связи (пользуюсь иногда, когда оно включает EDGE при доступном, но, видимо, не 100% идеальном LTE). Во-вторых, для получения той же самой инфы есть апи, доступное приложениям. Где-то в недрах TelephonyManager, по-моему. Можно поставить какое-нибудь готовое приложение (их много), можно написать своё.


      1. SlimShaggy
        27.01.2022 23:41

        Да, иногда меня тянет тряхнуть стариной и я расставляю вышки в CellMapper ????

        А еще сейчас есть "реестр санитаров", в котором можно искать БСки вообще не выходя из дома)


    1. 13_beta2
      28.01.2022 06:18
      +2

      благодаря Сименсу увлекся нетмониторингом

      Как раз похожий случай. Штатное меню, конечно, было непригодно, но раз измерения есть в памяти -- грех не воспользоваться. Дальше уже появилась подстветка по встроенной "БД", запись логов, привязка на конкретный канал. Сейчас на случайно сохранившиеся скриншоты без слёз не взглянешь, а как для 2006 очень помогало с хобби.


  1. Virusmater
    29.01.2022 03:55

    Вот бы кто сделал интервью с участниками сименс сцены. Valera V, smelter, cbn с его эмулями, kibab и его база патчей, avkiev, chaos, papuas, perk11, BoBa, SiNgle... Список может продолжаться бесконечно.

    Про ресурсы Сименс клаб, конфликт орг с ру, вап клаб, аллсименс, кибаб, siepatchdb конфа в жаббере.


  1. Rescor
    29.01.2022 18:41

    Bad Apple на SL45. :)