На самом деле этот пост должен был быть перед постом про «Наибольший общий делитель«. Так вот, почему меня заинтересовал именно ARM?
Несколько месяцев назад купил я на eBay супер-убийцу iPhone :) … SciPhone I9+++. Выглядит оно как iPhone, корпус пластиковый, сенсорный экран довольно тормозной. Это чудовище оказалось абсолютно неюзабельной вещью, из-за страшно неудобного оформления RTOS, которая там используется. RTOS Nucleus+. То ли у меня руки кривые, что я не могу им пользоваться, то ли сама система жутко недружелюбная. Китайская поДелка, одним словом.
Появилась некая слабая цель на горизонте — использовать телефон в качестве тестовой платформы для изучения программирования под ARM =). Цель довольно смутная, ибо я не представляю как и там и что (относительно конечно же).
В телефоне используется процессор MT6225 GSM/GPRS Baseband, максимальная частота 104Мгц. Основан он на базе 32-битных процессоров ARM7EJ-S RISC (ARMv5TEJ).
Расшифровав все эти непонятные буковки в названии процессора, узнал, что
T — Thumb mode
E — Enhanced DSP instructions
J — Jazelle DBX (исполнение Java-байткода самим процессором)
Скачав даташит по процессору, можно выудить кучу полезной информации, например, после инициализации процессор начинает исполнять код находящийся по адресу 0x48000000, работу с сим-картами, DMA-каналами, NAND-памятью, системе прерываний IRQ, FIQ и т.д..
Спаяв простенький COM-шнурок на микросхеме ST232BN вытащил из телефона дамп на 16Мб. Вот тут и случился затык. Вытаскивал дамп я программкой Spider Man. Отследил данные проходящие через COM-порт во время считывания / записи дампа, и нифига не понял :)
- + Сначала ожидаем момент включения телефона и отсылаем ему код управления.
- + Получаем ответ (как определить, что это ответ? неясно)
- ! Начинается инициализация (отсылаются какие-то байты, получаются какие-то байты)
- ! Начинаем грузить / проверять (?) загрузчик частями по 100 байт
- …
что именно тут происходит, куда грузится загрузчик / где проверяется, в какой точке дампа начинается исполнение кода.. для меня темный лес.
Как именно записывать и считывать дамп в телефон самому я не разобрался. Исходников никаких нет. Для обработки дампов от, так называемых, «КИТов» существуют несколько программ, но все они платные, так же как «паучок».
P.S.
RISC-овый процессор может выполнить конструкцию:
a += (j << 2);
за один цикл :)
ADD Ra, Ra, Rj, LSL #2