Я маргинал, который знает исключительно вершки-корешки и не умеет ни код нормальный писать, ни что то доводить до конца. Я не закончил три пту в своем городе из за того, что просто отбитый маргинал. Поэтому мне не светит ни госка, ни частная контора, ни даже работа на галере - у меня нет скиллов, а умело продавать себя я не умею и у меня не хватает хватки.
Так что фигня это все, мой максимум - второсортные развлекательные статейки, чисто как бульварное чтиво, только про IT. Почти как нейромусор.
Осторожно: Статья написана максимально простым языком. Так что если вы гик, но не умеете программировать - вам всё равно будет интересно!
Недавно я наткнулся на DIY-игровую консоль за 1.500 рублей - Waveshare GamePi13. Когда гаджет приехал ко мне, я запустил примеры игр от производителя... и оторопел от 5 FPS в Pong - это ж как плохо нужно код писать!
Не желая мириться с этим, я открыл схему устройства, даташит на RP2040 и принялся писать свой собственный BIOS. Если вам интересно узнать, как работают DIY-консоли «изнутри», можно ли запускать внешние программы на микроконтроллерах из RAM, как реализованы различные подсистемы BIOS, а в конце даже написать «Змейку» - добро пожаловать под кат!
❯ Предисловие
Иногда китайские производители выпускают на рынок дешевые гаджеты с ориентиром исключительно на гиков. Чего-уж говорить, с какой-нибудь R36s чего только не сделали: и кастомные прошивки, и порты игр с ПК, и даже достаточно сложные аппаратные модификации. Однако в тусовке DIY'щиков обычно всё куда хардкорнее...
«Андерграундные» консоли выходят чуть ли не каждый день, но лишь единицы из них становятся хоть сколь либо популярными и попадают на массовый конвейер. От «больших» консолей их отличает простая схемотехника, использование распространенных и дешевых микроконтроллеров общего назначения и полная свобода творчества — что хочешь, то и твори! По характеристикам они чаще всего близки к оригинальному GameBoy или GameBoy Advance, а покупают их инженеры, демосценеры и ретро-энтузиасты, которые не только играют во что-то готовое, но и пишут небольшие игрушки сами!
Самые известные консоли такого формата — это нашумевший Playdate и чуть менее известный Arduboy. Обе консоли сильно ограничены в характеристиках и это подстегивает интерес гиков к постоянной оптимизации кода и попыткам впихнуть «невпихуемое». Выделился даже российский «Микрон», представив свою DIY-консоль «для хардкорных ардуинщиков» — некий MikBoy на базе своего же МИК32 «Амур»!
Я уверен что Микроновцы будут читать эту статью... Если вдруг всё получится и MikBoy пойдёт в серию — то напишите мне пожалуйста сообщение :)
Подобным «ардуинщиком» являюсь и я. Ещё со школьных лет меня нереально тянет к микроконтроллерам и Embedded-электронике в целом. О консоли собственной разработки я мечтаю с 14 лет, при этом мне не просто хочется собрать прототип и «забить», но и запустить мелкосерийное ручное производство и продавать устройства подписчикам! К своим 24-годам я сделал два прототипа и развел три платы, но все эти проекты так или иначе откладывались в долгий ящик...
Один из ранних-ранних прототипов, предназначенный для обкатки драйвера дисплея.
И вот, 25 сентября мне стукнуло 24 годика. Уже взрослый мальчик получил в качестве подарка донат от постоянного читателя и пошёл изучать маркетплейсы в поисках интересного железа. По ключевым словам «tft lcd diy» был найден «ESP32 Bitcoin Miner V2» (выгодный девкит с 2.8" и ESP32-S2), девкит ESP32 с 4.3" дисплеем и емкостным тачскрином, а также некий Waveshare GamePi13, о котором мы сегодня с вами и поговорим!
Отдельное спасибо хотелось бы сказать тем самым подписчикам. Без вашей поддержки этой статьи бы не было!
Waveshare — знаменитый в кругах энтузиастов SBC производитель. В основном компания занимается дисплеями, модулями расширения и одноплатными компьютерами.
В тот же день я заказал устройство, и уже через 3 недели трепетного ожидания, GamePi13 оказался у меня на столе. На первый взгляд консоль показалась очень маленькой: её 1.3" дисплей был даже меньше, чем у Nokia 6230i, а кнопки оказались расположены непривычно близко друг к другу. Ко всему прочему, у консоли не было предусмотрено вообще никакого корпуса: ни «болванки» от производителя, ни STL-файлов для печати. Что-ж, это только придаёт брутальности нашему устройству!
Оба устройства помещаются в одну ладошку... А ведь когда-то 6230i казался реально большим!
Как вы уже могли заметить, консоль состоит из двух независимых модулей: платы разработки Waveshare RP2040-PiZero и «бутербродного» геймпада с дисплеем, который подключается к гребёнке основной платы. В этом и кроется главный секрет устройства: геймпад изначально рассчитан именно для «одноплатников» Raspberry Pi, но поскольку Waveshare также выпускает плату RP2040 с Pi-совместимой гребёнкой, они решили заодно адаптировать его и для PiZero.
❯ Что внутри?
Хоть PiZero и похожа на референсную плату в лице Raspberry Pi Pico, у неё есть несколько серьёзных отличий:
Во первых, на плате установлена SPI-флэшка объёмом аж в 16МБ. Это максимальный объём, который поддерживает XIP-контроллер в RP2040. В RPi Pico же используется флэш-память объёмом всего в 2МБ.
Далее внимание привлекает использование менее эффективного ULDO RT9193 вместо полноценного DC-DC преобразователя в оригинальном Pico. Сам микроконтроллер сможет работать при разрядке аккумулятора ниже 3.6В, а вот периферия — под вопросом. Иными словами, мы не сможем использовать «все соки» из аккумулятора и нам придётся реализовывать отсечку по напряжению.
На плате распаяна микросхема-чарджер литий-ионных аккумуляторов ETA6096 с током зарядки аж в 1А. Если захотите использовать аккумулятор меньшей емкости — стоит подобрать резистор ISET большего номинала, иначе есть риск перегрева.
Из разъёмов распаян HDMI (да, я тоже в шоке), слот для MicroSD (под него отдали весь SPI0) и два Type-C: один для аппаратного USB-контроллера в RP2040, второй для USB через PIO. В общем, пытались угодить всем.
Плата с геймпадом не менее интересная. С фронтальной стороны у нас расположилось 10 кнопок и 1.3" IPS-дисплей с разрешением 240x240, использующий контроллер ST7789. Вообще, для такой диагонали разрешение дисплея крайне избыточно: оно не только съедает драгоценные килобайты оперативной памяти для фреймбуфера, но и значительно грузит DMA-контроллер и всю шину SPI. Я бы на месте инженеров установил бы сюда «золотой стандарт» — недорогой 1.8" 128x160. Все кнопки подключены к отдельным пинам без сдвигового регистра и занимают значительную часть доступных GPIO.
Я бы сделал лучше!
С обратной стороны расположился небольшой динамик, усилитель, построенный на базе NS8002, 3.5мм джек для подключения наушников, а также токоограничивающий резистор подсветки и обвязка для дисплея. Подсветка подключена напрямую к VSYS и рассчитана на питание от 3.3В, так что никакой регулировки яркости и продвинутых режимов сна!
Производитель платы — компания SpotPear.
Ну что-ж, собираем наш бутерброд обратно, подключаем Type-C и смотрим на одну из представленных демо-игр — Тетрис!
Нет, это не пережатая гифка, игра действительно идёт буквально в 1 FPS и с мерцанием — и это на микроконтроллере с ядром Cortex-M0+ на частоте аж в 150МГц! Я напомню, что N-Gage с процессором TI OMAP на более старом ядре ARM926EJ-S с частотой 104МГц умудрялся тянуть первый Tomb Raider с полностью программным рендерингом в 25 FPS!!!
Далее я решил открыть официальный вики Waveshare и изучить информацию о консоли, где нашел несколько примеров игр для неё, одной из которых был Pong. Какое же было моё разочарование, когда я узнал, что обе игры написаны полностью на Python: игровая логика, маршалинг данных, работа с «железом» — всё это было на интерпретируемом языке и более того, написано плохо и крайне неэффективно!
Ни о каком подобии SDK или библиотеки для абстрагирования работы с железом даже речи не шло, практически всё, кроме номеров пинов, было захардкожено прямо в коде игры. О хорошей архитектуре тоже речи не идёт: один класс на всю логику с глобальными переменными... В общем, сэмплы писал либо новичок, либо прожженный эмбеддер :)
Драйвер дисплея даже не пытается использовать DMA, из-за чего даже Понг, состоящий из трёх прямоугольников умудряется тормозить.
def blit_buffer(self, buffer, x, y, width, height): """ Copy buffer to display at the given location.
Args: buffer (bytes): Data to copy to display x (int): Top left corner x coordinate Y (int): Top left corner y coordinate width (int): Width height (int): Height """ self.set_window(x, y, x + width - 1, y + height - 1) self.write(None, buffer)
Звуковая подсистема, состоящая из одноканальной тональной пищалки на аппаратном ШИМ-контроллере, тоже была со своими «приколами». Например «тишина» — это 0, то есть магнит всегда прижат к нижней части, хотя должно быть PWM_MAX / 2.
Под впечатлением от такого кода, я решил попробовать написать SDK для этой консоли сам. Однако моё видение идеальной DIY-консоли сильно отличалось от того-же Arduboy или Playdate!
❯ Архитектура
При проработке архитектуры будущего «BIOS», я сразу же поставил для себя несколько чётких задач:
Во первых, BIOS должен быть достаточно абстрактным для того, чтобы скрывать от игры детали реализации конкретного «железа». Иными словами, игра оперирует не DMA-контроллерами, FPU-сопроцессором и SPI, а набором простых и понятных подсистем: графика, ввод, звук, хранилище. Кроме того, это позволяет легко портировать игры для такого BIOS'а на другие платформы: можно без проблем реализовать симулятор (не эмулятор!) консоли на ПК или портировать её на ESP32 с минимальными изменениями.
Во вторых, мы ставим производительность в основной приоритет при разработке устройства. В конце-концов это же позорище, что простейшая игра тормозит и мерцает на мощном микроконтроллере, но при этом тетрисы с трёхмерной графикой вполне шустро работали на телефонах Sony Ericsson 2005 года. Именно поэтому для написания игр используются не скриптовые языки по типу Lua или JS, а самый обычный «C с классами».
В третьих, сам BIOS должен быть легко портируем между разными платами (у SpotPear есть вторая похожая плата — уже с 1.5" и стиком) и даже аппаратными платформами. Этот проект может стать основной прошивкой для консоли уже моей разработки и иметь вот такую «кроссплатформу» было бы отнюдь не лишним!
Руководствуясь критериями выше, я решил писать BIOS на C++ (на деле C с классами) с активным использованием интерфейсов и VMT. Это позволяет не только удобно структурировать модули и повышает читаемость кода игры, но и избавляет от необходимости вручную составлять таблицу системных вызовов к API. Тем не менее, в таком подходе есть один серьёзный нюанс: когда у подсистем появляются новые методы или добавляются перегрузки к прошлым, их необходимо по порядку добавлять в конец интерфейса, иначе VMT ломается.
vtable for CTest: .word 0 .word typeinfo for CTest .word CTest::Test() .word CTest::Abc() vtable for ITest: .word 0 .word typeinfo for ITest .word __cxa_pure_virtual .word __cxa_pure_virtual
В своё время Microsoft решила эту проблему в COM с помощью QueryInterface и миллиона вариаций этих самых интерфейсов: IDirectSound8, IDirectDraw7 и т.д, но мы можем не изобретать велосипед, а просто предоставлять «старым» играм такие же «старые» версии VMT.
Основным объектом в BIOS'е является CSystem, который содержит в себе ссылки на другие подсистемы консоли, а также на информацию о текущей аппаратной платформе:
/// @brief Primary system service, supplied to both games and system modules. class ISystem { public: virtual CSystemInfo* GetSystemInfo() = 0;
Несмотря на кажущуюся «динамическую» натуру системы, никаких IID я переизобретать не стал. BIOS должен реализовывать ровно тот минимальный функционал системы, который нужен. Экземпляр CSystem создаётся так называемым «портом» на конкретную плату, который должен заполнить структуру с указателями на реализации подсистем — прямо как machine-файлы в Linux! И RAII не нарушили, и полный контроль без костылей сохранили — ляпота!
void InitializePlatform() { CommManager = new CCommunicationManager(); CDebugService* dbgSvc = new CDebugService();
/* Print some userful debug information */ CJEDECFlashID* flashId = FlashManager.GetFlashID();
while (true) { /* Tick all platform-depend services here */ CommManager->Tick(); PowerStateManager.Tick(); InputService->Tick();
System->Tick(); } }
В целом, базовая архитектура примитивная и понятная. Перейдем же к деталям реализации конкретных модулей.
❯ Графика
Первая подсистема, которую я реализовал — была графической. Концептуально она разделена на два отдельных модуля: драйвер дисплея, который позволяет получить его параметры и в будущем управлять его состоянием, а также модуль для рисования на поверхностях. Прямо как в DirectDraw:
class IDrawingSurface : public ISystemService { public: virtualvoid Clear(CColor color) = 0; virtualvoid DrawBitmap(CBitmap* bitmap, int x, int y) = 0; virtualvoid DrawBitmapEx(CBitmap* bitmap, int x, int y, CSpriteInfo* spriteInfo) = 0; virtualvoid DrawRect(CColor color, int x, int y, int width, int height) = 0; virtualvoid FillRect(CColor color, int x, int y, int width, int height) = 0; virtualvoid DrawLine(CColor color, int x1, int y1, int x2, int y2) = 0; virtualvoid DrawString(CColor color, int x, int y, CAnsiChar* str) = 0; };
class IGraphicsService : public ISystemService { public: virtualvoid SetPowerState(bool isPowerEnabled) = 0; virtualvoid SetBacklightState(bool isBacklightEnabled) = 0; /* Maybe some controller-related functions in future? Like BIAS and HW rotation? */
Сам драйвер дисплея классический: в его задачи входит инициализация контроллера, выделение памяти под фреймбуфер и регулярное обновление изображения на матрице. Поскольку в таких устройствах используются стандартные MIPI DBI экраны с набором команд DCS, часть кода инициализации и работы с дисплеем стало возможным унифицировать:
/* Perform hardware reset */ gpio_put(PIN_LCD_RST, 0); sleep_ms(DISPLAY_INIT_SLEEP_TIME); gpio_put(PIN_LCD_RST, 1); sleep_ms(DISPLAY_INIT_SLEEP_TIME); /* Wait for display controller to complete initialization */
Reset(); /* Perform software reset to maintain default register state */ SendCommand(cmdSLPOUT, 0, 0); /* Disable sleep mode */ SendCommand(cmdCOLMOD, 0x05); /* Set color format and decoding*/ SendCommand(cmdINVON, 0, 0); /* Disable inversion */ SendCommand(cmdNORON, 0, 0); /* Enable normal mode */ SendCommand(cmdMADCTL, cmdMADCTL_RGB); /* Set pixel size */
uint8_t windowSize[] = { 0 >> 8, 0, DISPLAY_WIDTH >> 8, DISPLAY_WIDTH }; /* Set display window (note this is not safe for displays with sides not equal in size) */ SendCommand(cmdCASET, windowSize, 4); SendCommand(cmdRASET, windowSize, 4);
SetPowerState(true); /* Enable display */
Вероятно читатель может спросить: «зачем выделять целых 115КБ под фреймбуфер, если можно использовать команды CASET/RASET и рисовать отдельные спрайты прямо в память дисплея?». Дело в том, что в таком случае скорость отрисовки будет падать обратно пропорционально размеру и числу рисуемых изображений. Если мы попытаемся нарисовать параллакс-фон, состоящий из трёх картинок с размерами 240x240, то нашим узким местом станет не только цена обращения к XIP-кэшу, но и производительность SPI-контроллера (который напрямую тактируется от системного PLL) и мы получим те самые 1-2 FPS. Кроме того мы потеряем возможность использования DMA и нам придётся ждать каждой транзакции на экран: это проблема многих «самодельных» консолей, которую, впрочем, можно решить обратившись к опыту предков — а именно PPU.
В своём проекте я решил активно задействовать DMA-контроллер для отправки фреймбуфера на дисплей. Концепция простая: мы указываем ему переслать фреймбуфер, начинаем подготавливать следующий кадр и если транзакция ещё не завершена - то дожидаемся её окончания, дабы картинка оставалась целостной. Однако если обновление логики следующего кадра завершается быстрее, чем DMA-контроллер успевает отправить сканлайны - мы можем получить эффект тиринга.
/* Setup DMA for SPI */ dmaChannel = dma_claim_unused_channel(true);
Далее переходим к фактической отрисовке изображений. На данный момент поддерживается только один формат пикселей — RGB565, поскольку нет особого смысла использовать 8-битную палитру для изображений 32x32 (но есть смысл использовать 4х-битную, как на NES). Процесс рисования называется блиттингом и поскольку реализация полноценного альфа-блендинга слишком дорогая для реалтайм графики на микроконтроллерах, для описания прозрачности используется техника колоркеев.
ColorKey — это как ChromaKey, но для описания прозрачного цвета используется только базовый цвет, а не цвет + порог допустимых цветов. Помните как в играх 90-х были картинки с розовым фоном цвета Magenta? Вот это оно самое :)
Рисование текста реализовано знакомым для Embedded-инженеров способом: шрифты описываются в формате 8x8, где 8 битов каждого байта обозначают наличие или отсутствие пикселя в текущей позиции. Такие шрифты не только занимают очень мало места, но их также очень легко и быстро рисовать, а также масштабировать под различные разрешения экранов. На данный момент я задумываюсь — стоит ли добавлять в консоль поддержку полноценного UTF-16, если учесть что основной таргет на русскоязычную аудиторию, где и CP866 хватает с головой?
Какой же дисплей чёткий...
❯ Ввод
Далее мы плавно переходим к реализации драйвера ввода. Как я уже говорил выше, все кнопки подключены к своим отдельным GPIO без использования сдвигового регистра или I/O Expander'а, что с одной стороны и хорошо (некоторые китайские производители реализовывают консоли с кнопками, основанными на матричном (!!!) принципе), а с другой — отъедает большинство GPIO у RP2040. Свободными пинами мы могли бы выполнять множество полезной работы: получать уровень заряда аккумулятора у Fuel Gauge, управлять уровнем подсветки с помощью ШИМ-контроллера и ключа, или, в конце-концов, сделать порт для подключения периферии... но нет так нет.
Сам по себе драйвер ввода до жути примитивный: он позволяет получить состояние отдельных кнопок, осей (как Input.GetAxis в Unity) и проверить, нажата ли хоть какая-то кнопка:
Для удобства и портабельности BIOS'а между платами, кнопки геймпада маппятся к соответствующим GPIO в отдельной таблице трансляции, которая также содержит состояния этих самых кнопок:
// Should be layouted in order of EKeyCode enum CButtonState ButtonMapping[] = { { PIN_KEY_LEFT }, { PIN_KEY_RIGHT }, { PIN_KEY_UP }, { PIN_KEY_DOWN }, { PIN_KEY_A }, { PIN_KEY_B }, { PIN_KEY_X }, { PIN_KEY_Y }, { PIN_KEY_LEFT_TRIGGER }, { PIN_KEY_RIGHT_TRIGGER } };
Дело в том, что в нашем проекте недостаточно иметь лишь одно булево: нажата-ли кнопка или нет, для компенсации дребезга кнопок у нас также реализуется задержка перед следующей проверкой и дополнительное состояние для удобства реализации меню — «только что отпущена».
for(int i = 0; i < ButtonMappingCount; i++) { CButtonState* buttonState = &ButtonMapping[i]; bool gpioState = !gpio_get(buttonState->GPIO); // Buttons are pull-up to high when not pressed
// Check if there was elapsed enough time if(timeStamp > buttonState->LastStateChange) { if(buttonState->State == EKeyState::ksReleased) buttonState->State = EKeyState::ksIdle;
Таким образом, мы получаем куда более удобную подсистему ввода, чем условная битовая маска с обозначением каждой кнопки и ручной обработкой её состояний в игре...
Вот мы и подошли к, возможно, самой интересной подсистеме в нашем BIOS'е. Думаю многие читатели так или иначе интересовались тем, как же компилятор и линкер превращают исходный код и объектный файлы в пригодные для выполнения программы и библиотеки. Вопрос запуска нативных программ на микроконтроллерах интересовал и меня — я даже написал целых три статьи об этом: в первой мы поговорили о ESP32 и Xtensa, а во второй реализовали BinLoader путём реверс-инжиниринга и хакинга кнопочного телефона, а в третьей сделали полу-универсальный ElfLoader для нескольких моделей телефонов на разных платформах.
Но начнём мы с простого. Каждая программа делится на три основных секции:
.text — содержит в себе машинный код функций и так называемые Literal pools. Может быть как в ROM, так и в RAM. На системах, где есть возможность выполнять код и в ROM, и в RAM, есть отдельная секция - .iram.
.data — содержит инициализированные переменные, которые обычно попадают в оперативную память. Для статических констант есть отдельная секция, называемая .rodata.
.bss — содержит в себе не-инициализированные переменные, обычно это нули. В исполняемый файл секция .bss напрямую не записывается, остаётся лишь информация о том, каков её размер, а саму секцию затем выделит динамический линкер.
Куда попадут части программы определяет специальная утилита — линкер, которая на основе специального скрипта «раскладывает» данные по нужным секциям. Благодаря этому скрипту, мы можем, например, перенести часть функций в оперативную память для более быстрого исполнения или добавить в начало программы заголовок с описанием приложения.
В моём случае, я решил загружать игры в SRAM и дабы не реализовывать нормальный динамический линкер и релокации, решил выделить под игру фиксированный кусочек оперативной памяти объёмом в 128КБ. Для этого я отредактировал скрипт линкера Pico C SDK так, чтобы сразу после вектора прерываний шла наша программа:
Для компиляции программы также используется кастомный скрипт для линкера и особый Makefile, где после сборки программы мы копируем все её секции в выходной файл в «сыром» виде. Поскольку программа собирается под выполнение из конкретного адреса — пока речь идёт о переносимости только между одной аппаратной платформой. На RP2040, RP2350 и возможно STM32 такое «прокатит», но вот на других ARM-процессорах — большой вопрос!
Каждое приложение, как и базовая система, предполагает использование ООП и поэтому представляет из себя реализацию класса IApplication. Для этого нам нужна некоторая runtime-поддержка: аллокатор, функция для создания экземпляра приложения, а также указатель на ISystem. Именно поэтому каждая программа должна экспортировать специальный заголовок, где содержится указатель на функцию-инициализатор:
Таким образом, для выполнения нашей программы и вызова её обработчиков событий нам достаточно лишь загрузить файл по адресу 0x200000c0 и создать экземпляр IApplication. Всё очень просто и понятно!
Но "моргалка" ведь слишком просто, согласитесь? Поэтому мы с вами напишем ремейк классической игры Змейка, которая работает в настоящие 60 FPS!
❯ Заключение
Вот таким нехитрым образом я понемногу реализовываю свою мечту детства: «андерграунд" консоль собственной разработки. Конечно здесь ещё много чего нужно доделывать перед тем, как начинать разводить свою плату, но начало ведь положено! В контексте GamePi13, я считаю что моя реализация SDK для консоли всё таки немного лучше, чем то, что предлагает производитель «из коробки».
Я понимаю что мой не совсем трушный эмбеддерский подход может вызвать разные ощущения у читателей: так что приглашаю всех заинтересованных в комментарии, обсудим с вами «сломанный Branch-prediction из-за виртуалов», «UB из-за того, что порядок указателей на реализации в VMT может отличаться» и «какого фига игры у тебя оказались в SRAM, а высокопроизводительный код на Flash, если у XIP кэш всего в 16КБ!».
А если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет — подписывайтесь на мой Telegram-канал «Клуб фанатов балдежа», куда я выкладываю бэкстейджи статей, ссылки на новые статьи и видео, а также иногда выкладываю полезные посты и щитпостю. А ролики (не всегда дублирующие статьи) можно найти на моём YouTube канале.
Если вам понравилась статья...
И у вас появилось желание что-то мне задонатить (например прикольный гаджет) - пишите мне в телегу или в комментариях :) Без вашей помощи статьи бы не выходили! А ещё у меня есть Boosty.
Что думаете о таком формате статей?
Если бы я собрался с духом и произвел 20-50 штучек консолей-самоделок с полностью готовым SDK, примерами и туториалами, купили бы себе такую
В наше время эталоном плавности и производительности среди мобильных устройств принято считать iPhone. Действительно, инженеры Apple проделали довольно большую работу по оптимизации скорости отрисовки и плавности интерфейса, однако не одним iPhone мы были едины!
В 2004 году, Palm выпустила уникальный смартфон, который сочетал в себе привычный интерфейс, широкий функционал, невероятную производительность и... эмулятор M68k. Я решил разобраться, в чём-же заключается его главный секрет и готов рассказать вам о Treo 650 во всех подробностях!
Для ЛЛ: особая архитектура ОС
❯ Предыстория
Устройства Palm всегда были уникальными и концептуально отличались от других карманных компьютеров. Пока другие производители гнались за самым мощным железом и функционалом, Palm делала акцент на обратную совместимость программ, высокую производительность и синхронизацию с ПК. История портативных гаджетов Palm начинается с КПК Pilot 1000, который вышел в 1996 году и стал одним из первых действительно массовых гаджетов в таком форм-факторе.
Pilot 1000 отдаленно напоминал современные смартфоны: у него был интерфейс, адаптированный для работы стилусом или пальцем, функционал органайзера, а также возможность установки сторонних программ и синхронизации с ПК. При этом у Palm'ов была одна очень интересная особенность: для ввода текста предлагалось использовать не виртуальную клавиатуру, а развитую технологию рукописного ввода Graffiti, которая стала визитной карточкой компании на протяжении долгих лет! Внутри Pilot'а был современный для тех лет процессор Motorola MC68328, работавший на частоте 16МГц и целых 128КБ оперативной памяти, а розничная цена составляла всего 299$, что обеспечило популярность модели и интерес со стороны разработчиков софта.
Прототип Pilot 1000, представляющий из себя Breakout-плату для MC68328!
После успеха Pilot 1000, Palm продолжила развивать линейку КПК на всё той-же аппаратной платформе, постепенно проводя её апгрейды: сначала вышел Pilot Personal/Professional с поддержкой модема от 3Com, затем Pilot III с 2МБ оперативной памяти, подсветкой экрана и ИК-портом, а годом позже и флагманский Palm VII с доступом к интернету с помощью сети Mobitex. К 2000 году для PalmOS вышло довольно много различного софта, причём большинство было платным и для его покупки надо было выписывать чек или покупать физическую копию на диске.
К 2001-ому году, Palm начала терять позиции на рынке карманных компьютеров из-за появления Microsoft PocketPC: операционная система на базе Windows CE имела многозадачность, позволяла легко портировать программы с ПК благодаря схожему API и поддерживала самые разные архитектуры процессоров. Несмотря на то, что устройства на PPC были значительно дороже, многие пользователи отдавали предпочтение именно им — и с этим нужно было что-то делать.
Маленькое инженерное чудо!
В марте 2001 года компания представила новую модель — m505, которая отличалась наличием 16-битного цветного дисплея, новым процессором Motorola Dragonball VZ, работавшем на частоте 33МГц и целыми восемью мегабайтами оперативной памяти, а также новой операционной системой PalmOS 4.0. Кроме этого, компания начала лицензировать PalmOS сторонним производителям, благодаря чему появилась линейка самобытных КПК Sony CLIÉ.
Однако уже в 2002 году, сомнительные перспективы низкочастотных процессоров Dragonball и устаревшей архитектуры m68k были очевидны для Palm и они решились на рискованный шаг: в новой линейке Tungsten они решили перейти на процессоры TI OMAP с архитектурой ARM. Но как тогда быть с уже существующим софтом, который распространялся на дисках? Правильно — встроить эмулятор m68k (PACE) в новую систему PalmOS 5.0 «Garnet»!
И если на первый взгляд эта затея кажется глупой, вы просто сравните Dragonball VZ и TI OMAP 1510:
Ядро: M68EC000 (корни идут от CMOS-версии M68k из 1985 года) vs ARM925T (почти самое современное ядро ARM на момент появления Tungsten, современнее только ARM926E)
Частота: 33МГц vs 144МГц
MIPS (число миллионов инструкций в секунду): 5.4 MIPS vs ~159 MIPS
Кэш-память: Отсутствует vs 16КБ для инструкций и 8КБ для данных
Таким образом, программы для m68k на ARM Palm'ах работали не хуже, чем на оригинальных устройствах, однако с SDK для новых устройств был очень неприятный нюанс...
В том же 2002 году, Palm выпустила первое устройство, где отошла от концепции рукописного ввода и установила полноценную QWERTY-клавиатуру — Tungsten W. Влияние BlackBerry на тенденции бизнес-устройств в те годы было очевидным, поэтому Palm разработали не просто КПК, а целый коммуникатор — с собственным радиомодулем, дисплеем высокого разрешения и... почему-то всё тем-же процессором Dragonball VZ!
Пс, если кому-то Tungsten W не нужен или вы хотите его продать — пните в комментариях пожалуйста. Можно даже нерабочий — ремонтировать такие штучки для меня одно удовольствие!
На то время процессор в Tungsten W казался малость устаревшим... Но сейчас я понимаю — по сути это один из немногих смартфонов с процессором m68k помимо Motorola Accompli!
А через год компания Handspring, созданная выходцами из Palm, представила своё собственное видение смартфона на PalmOS — Treo 600, который является кровным братом Treo 650, о котором мы с вами сегодня и поговорим. Но перед тем, как переходить к обзору устройства — мы с вами сначала его разберём и узнаем, что у него скрывается «под капотом» — здесь действительно есть на что посмотреть!
Свой Treo 650 я купил на китайской онлайн-барахолке примерно за 1.900 рублей вместе с кабелем, а выкупить и привезти его в Россию мне помогли подписчики Роман, Андрей и сервис YouCanBuy, за что вам огромное спасибо.
❯ Что внутри?
Разборка начинается с снятия задней крышки и выкручивания шести винтиков по периметру устройства. Однако перед разборкой я сразу обратил внимание на необычный 6-пиновый АКБ, который явно напоминал HTC'шные аккумуляторы тех лет. Главная их особенность в том, что на BMS (плата защиты) распаяны дополнительные чипы для обмена информацией о модели аккумулятора, его заряде, температуре и другие необходимые данные. Если запитать коммуникатор HTC тех лет от «лабораторника» просто подключив плюс и минус, то гаджет скорее всего включится, но драйвер контроллера питания не даст разрешение на старт зарядки и в меню не будет виден индикатор уровня заряда.
Владельцы HTC Gene/O2 Xda Mini II поймут...
После разборки нас встречает «бутербродная» плата и до боли знакомая схемотехника. К сожалению, в процессе эксплуатации гаджет залили водой — на защитных экранах и контактах видны следы лёгкой коррозии, а на тест-поинтах и пятачках не распаянных SMD-компонентов — заметные потемнения.
Где-то я это уже увидел... Но пока это всё ещё лишь предположения
Начнём пожалуй с верхней части бутерброда — платы, на которой виднеется слот под сим и IMEI. Крепится она на двух винтах и подключена с помощью разъёма штырькового типа. Думаю всем читателям уже очевидно, что это GSM-модем устройства, однако даже такая банальная вещь реализована здесь весьма необычным способом. Дело в том, что в коммуникаторах нулевых, использование внешних модемов было отнюдь не редкостью. В тех-же самых устройствах RoverPC и O2 можно было встретить внешние платы-модемы Telit, припаянные к основной плате методом поверхностного монтажа. Однако здесь, судя по всему, если радиочасть устройства выходила из строя, можно было самому просто поменять плату с модемом на другую и продолжать пользоваться смартфоном как ни в чем не бывало!
Конструктивно модем достаточно прост и построен на относительно распространенной компонентной базе тех лет:
В качестве Baseband-процессора процессора используется система на кристалле Broadcom BCM2132. На самом деле, этот SoC самодостаточен и способен в одиночку выполнять практически все функции необходимые для простого кнопочного телефона. Состоит он из одного ядра ARM926EJ, способного работать на частоте до 74МГц, DSP-сопроцессора на архитектуре Teaklite, контроллера дисплея, камеры, SD-карт, NAND-флэшек, а также шин общего назначения — I2C, SPI, UART, USB.
Чуть правее расположилась так называемая eMCP-микросхема Spansion S71PL032JA0, которая в одном корпусе содержит как оперативную, так и флэш-память, позволяя значительно сэкономить место на плате. Объём памяти скромный — 2МБ PSRAM и 4МБ NOR-памяти. Классика!
Выше процессора находится чип Infineon PMB6258, которыйвыполняет задачи RF-фронтэнда или трансивера. Простыми словами, именно он ответственен за преобразование аналогового сигнала с антенны в цифровой пакет, который затем обрабатывает DSP в Baseband'е. Справедливо и обратное: когда Baseband подготовил GSM-пакет, он отсылает его в трансивер, а тот «пускает» его в эфир!
Рядом с PMB6258 расположился чип PMB2259, который выполняет роль VGA-драйвера или же усилителя сигнала. Вполне возможно, что это некий предусилитель, поскольку рядом с флэш-памятью скрывается ещё один безымянный GSM-усилитель.
Принципиальная схема трансивера в паре с бейсбендом Infineon S-Gold
С модемом закончили, здесь всё стандартно. Пора разбирать и изучать гаджет дальше: вытаскиваем шлейф клавиатуры и видим очень интересный парт-номер...
HTC... Ну мало-ли, в те годы они были крупным ODM и OEM-производителем, может Palm Treo просто собирали на их заводах?!
После снятия защитных экранов сомнений больше не осталось: рядом с процессором расположился чип производства самой HTC — 30H80049. Точное его назначение мне неизвестно, но по опыту с другими коммуникаторами этого вендора осмелюсь предположить, что он выполняет роль контроллера питания. Поскольку чипы HTC используются только в собственных разработках компании — становится очевидным, что аппаратную часть Palm Treo разработал именитый тайваньский производитель! Кто бы мог подумать?
Также косвенно это подтверждает тот факт, что кроме PalmOS были Treo с Windows Mobile на борту, а как известно — HTC один из главных производителей устройств на WM.
Далее мы видим сердце основной части устройства — топовый для своих лет чипсет Intel PXA270. На самом деле, о крутости этого процессора можно рассказывать часами, чипы на базе микроархитектуры XScale были легендарными в гиковских и промышленных кругах благодаря хорошей документации, отличной производительности и наличию порта Linux. Но давайте по порядку:
Одно ARMv5-совместимое ядро, построенное на собственной микроархитектуре Intel XScale, способное работать на частоте до 624МГц. Также PXA270 поддерживал набор SIMD-инструкций Wireless MMX (олды смахнули слезу, услышав знакомую аббревиатуру).
32 килобайта L1-кэша инструкций + 32 килобайта L1-кэша данных.
Возможность выполнения до 800 миллионов инструкций в секунду (MIPS) при максимальной рабочей частоте.
Контроллеры шин общего назначения: UART, I2C, SPI, USB.
Периферийные модули для управления DRAM, NAND и NOR-памятью, а также контроллер SD-карт.
Контроллеры клавиатуры, дисплея, ШИМ, GPIO и даже встроенный RTC...
64МБ встроенной NOR-памяти типа StrataFlash
И всё это будучи изготовленным на 180нм техпроцессе!
Чуть ниже процессора расположился один-единственный чип SDRAM-памяти производства Infineon объёмом в 32МБ, а также микросхема NAND-памяти M-Systems объёмом аж в 64МБ. Одна флэшка под систему, вторая под пользовательские данные — где такое ещё можно увидеть?!
Над процессором можно заметить микросхему Broadcom BCM2035, которая выполняет роль Bluetooth-контроллера.
Около разъёма можно наблюдать ещё два «питальника» устройства: ШИМ-контроллер MAX1887, а также контроллер зарядки аккумулятора MAX1874E. Чуть ниже расположилась неизвестная микросхема, судя по характерной для Sony маркировке — это контроллер дисплея.
Не менее интересен и сам дисплей смартфона — это крупная 2.8" матрица Sony ACX533AKM с разрешением аж в 320x320, выполненная по технологии TFT-LCD (LTPS). По меркам 2004 года это очень большое разрешение для кнопочного устройства, примерно как в наше время 4K в смартфоне!
Лично меня удивляет тот факт, что на шлейфе присутствует нетипично-большое количество обвязки и в первую очередь внешняя микросхема формирования BIAS-напряжения (контрастности) TI TPS65110, который обычно встроен в сам кристалл дешифратора. Кроме того, похоже что сразу на шлейфе распаян драйвер подсветки — такое тоже встретишь не часто!
Ну что-ж, теперь мы знаем, что у Treo 650 находится «под капотом». На самом деле, у смартфона достаточно необычный даже по меркам тех лет конструктив, местами он напоминает плату самого первого коммуникатора от HTC — Wallaby и именно благодаря этой характерной преемственности, я сразу же понял откуда идут корни устройства!
С оценкой аппаратной части устройства мы закончили, давайте перейдем к программной!
❯ PalmOS — это чудо?
После включения нас встречает калибровка тачскрина, диалог первоначальной настройки и наконец главный экран. У Treo была интересная особенность: концепции рабочего стола в привычном понимании у него могло и не быть, а главным экраном являлось меню приложений, которое было разделено на несколько подгрупп.
В отличии от современников на Windows Mobile, Treo работает невероятно быстро. Почти все приложения открываются моментально и сразу готовы к работе, никаких экранов загрузки, ANR и тормозящих интерфейсов — всё работает так, как в новом iPhone сразу после покупки. И хотя iPhone куда более плавный, чем Treo 650, в некоторых кейсах смартфон от Palm показывает себя не хуже, а то и лучше какого-нибудь iPhone 15 на самой последней iOS!
За такой впечатляющей производительностью скрывается сразу две архитектурные тайны PalmOS. Первая заключается в том, что система от Palm «однозадачная» — и в ней одновременно может работать только один процесс, а для реализации отложных задач предлагается использовать кооперативную многозадачность и события. На самом деле, в ядре системы есть потоки и задачи, однако API для них задокументировано плохо, а планировщик включается лишь по запросу. Таким образом, приложению доступно практически всё процессорное время без необходимости делить его на кванты.
Вторая тайна удивит вас не меньше: помните в начале статьи я рассказывал о встроенном эмуляторе m68k — PACE? Дело в том, что Palm по каким-то причинам не успела портировать системные приложения на ARM и поэтому почти все системные и сторонние программы написаны для архитектуры m68k и выполняются в эмуляторе, сохраняя при этом невероятную производительность! А секрет здесь прост: дело в том, что PACE эмулирует только само процессорное ядро, но не весь КПК Palm. Когда программа вызывает системную функцию, эмулятор её перехватывает и вызывает соответствующую нативную реализацию для ARM.
По такой-же концепции написан эмулятор PPSSPP, а также слой совместимости с x86 в Windows 10 for ARM. По сути, это превращает нативные m68k-приложения в что-то типа интерпретируемых...
Интересно также то, что у PalmOS по сути и не было концепции файловой системы. Приложения хранили свои данные в собственных базах данных, которых могло быть несколько, а сделано это было для упрощения процесса синхронизации с компьютером. Для этого у Palm'ов была очень удобная программа — HotSync. С её помощью производился процесс авторизации пользователя, устанавливался софт (но никто не мешал устанавливать программы с SD-карты), делались бэкапы, а также переносились мультимедийные файлы.
Процесс синхронизации
Не менее интересна реализация сетевого стека в Palm'е, которая позволяет прицепить PPP вообще к любым портам в Treo. Сеть через UART? Пожалуйста. Сеть через ИК-порт — тоже без проблем. Сеть через BT или модем 3Com от модели 1998 года? Вообще без проблем! Можно было подключить даже Wi-Fi модуль в формате SDIO-карточки!
Однако в современном интернете у Treo 650 уже всё не так хорошо. К почтовым серверам с SSL он подключится не может, а браузер даже OpenNet не открывает. Это очень грустно...
Зато у Treo 650 всё хорошо с играми. В своё время известный мобильный издатель Astraware портировал на PalmOS многие Shareware-хиты нулевых. Здесь есть полноценная Zuma, Raging Thunder, классические игры Atari, арканоиды, головоломки и множество других игр из нулевых. Не все они работают идеально быстро (в том числе из-за необходимости эмуляции m68k), но поиграть было во что!
А для тех, кому не хватает нативных приложений, есть экзотическая Java-машина от IBM с поддержкой MIDP 2.0. Благодаря ей появляется возможность играть в легендарные игры для J2ME-телефонов, если они не используют специфичное API по типу 3D...
❯ Заключение
Вот такими были смартфоны Palm в начале нулевых годов. По правде сказать, Treo контрастирует на фоне Windows Mobile и Symbian-смартфонов не только невероятной производительностью, но и весьма странными архитектурными решениями. Уж чего-чего, но однозадачную ОС в смартфоне 2006 года точно не ожидаешь встретить, когда даже в самых недорогих и простых кнопочниках трудится полноценная RTOS!
Однако Treo 650 кажется диковинкой только в наше время. В те годы это было желаемое устройство для тех, кому необходимо много переписываться, читать и даже играть... Надеюсь, вам было интересно!
А если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет — подписывайтесь на мой Telegram-канал «Клуб фанатов балдежа», куда я выкладываю бэкстейджи статей, ссылки на новые статьи и видео, а также иногда выкладываю полезные посты и щитпостю. А ролики (не всегда дублирующие статьи) можно найти на моём YouTube канале.
Что думаете о Palm Treo 650/680?
Что думаете о сравнении производительности с iPhone?
Что думаете о таком формате статей?
Если вам понравилась статья...
И у вас появилось желание что-то мне задонатить (например прикольный гаджет) - пишите мне в телегу или в комментариях :) Без вашей помощи статьи бы не выходили!
Наверняка многие читатели слышали о самой дешевой консоли на маркетплейсах — «Sup». На первый взгляд, это устройство — чудо чудное: цветной дисплей приличного разрешения, целых 500 игр в комплекте, аккумулятор и даже дополнительный геймпад, и всё это за какие-то 400 рублей в розницу.
Обычный человек просто подумает мол «очередной масс-маркет по типу Тетриса» и пройдет мимо. Однако моя гиковская душа очень хотела узнать, в чём же заключается тайна самой дешевой консоли на Озоне и я решил заглянуть «под капот»… Поверьте, внутри гораздо интереснее, чем кажется на первый взгляд!
❯ Предыстория
Консоль Sup заполонила виртуальные полки магазинов примерно в 2019 году и сразу же стала мегахитом. Полноценная ретро-консоль с кучей встроенных игр всего за 300–400 рублей явно метила в конкуренты «Тетрису» по массовости, однако в технологическом плане была куда более продвинутой, чем её предшественник из 90-х. Несмотря на то, что сейчас Sup, вероятно, одна из самых продаваемых ретро-консолей, её богатая история тоже тянется с тех самых 90-х годов…
Как известно, основные игры в Sup — это различная классика времен NES, разбавленная играми «собственной» китайской разработки по типу портов Angry Birds и хаков уже существующих игр. С учетом того, что самопальные игры зачастую более «цветастые», чем родные с NES, у многих складывается впечатление, что это самый обычный эмулятор, а особо пытливые умы при разборке находили микросхему флэш-памяти и все вопросы касательно реализации у них отпадали. Но первое впечатление порой очень обманчивое, ведь Sup — аппаратный клон NES! Но давайте по порядку.
История разработки клонов Famicom (далее по тексту — «Фамиклонов») берёт своё начало примерно в 1990–1991 году. В те годы, микроэлектронная промышленность Тайваня развивалась семимильными шагами: в стране активно выпускались x86-компьютеры, ноутбуки в разных конфигурациях, различная оргтехника и всё это по относительно доступной цене. Помимо устройств на готовой компонентной базе, в Тайване также разрабатывались и производились микросхемы — как клоны существующих чипов, так и собственные разработки. Самыми крупными производителями были UMC и Holtek.
Завод UMC в Тайване
Holtek в основном производил ASIC'и для конкретных задач (к примеру контроллеры PS/2 и USB-клавиатур), а также очень недорогие 4х-битные микроконтроллеры с масочной ROM-памятью, которые использовались в устройствах по типу органайзеров и наручных часов. Однако венцом творения гаджетов на базе МК от Holtek можно считать культовую консоль нашего детства — ведь HT-943E5 использовался в том самом Brick Game!
Фото от @Azya
UMC же в те годы занималась клонами оригинальной японской консоли. В её R&D центрах были разработаны клоны центрального процессора Ricoh RP2A03 на ядре 6502, а затем и PPU («видеокарта», предок современных GPU) 2C02G, что позволило выпускать «фамиклоны», которые довольно сильно были похожи на оригинальную консоль. Это были те самые «трушные» многочиповые «Денди», за которыми гоняются коллекционеры!
Сводный братик NES, собранный на почти стандартной компонентной базе
Однако как я уже сказал выше, полупроводниковая промышленность Тайваня тогда очень быстро развивалась и ближе к середине 90-х годов, UMC освоила настолько малый техпроцесс, что умудрилась засунуть вообще весь NES в один-единственный чип UM6578F, который называется системой на кристалле (SoC). Только представьте себе: процессор, звуковой чип, видеочип, память — и всё это в небольшом кристалле, который стоит относительно недорого... Это настоящее технологическое чудо!
Одна из первых известных систем на кристалле — UM6578F, которая также производилась и другими компаниями (по лицензии?)
Но UMC и на этом решили не останавливаться. UM6578F был не просто клоном оригинального Famciom, это был серьёзный апгрейд оригинальной аппаратной платформы. Например, добавилась поддержка 16-цветного режима для спрайтов, полноценного 8-битного PCM-звука (к примеру, почти вся MP3-музыка кодирует 16-битный PCM-поток) помимо классических генераторов волн, а также расширен объём оперативной и видеопамяти до целых 10КБ — это в ПЯТЬ раз больше, чем на оригинальной консоли! Причины такого апгрейда просты: во-первых, в те годы власти Китая ввели заградительные пошлины на импорт электроники, поэтому домашние x86-компьютеры были доступны отнюдь не всем. Им на замену пришли относительно доступные компьютеры по типу «Сюбора», которые совмещали в себе как клавиатуру и набор обучающего софта вместе с интерпретатором BASIC'а, так и игровую консоль. А во-вторых — небольшие китайские компании выпускали свои собственные коммерческие игры без лицензии от Nintendo и расширенные возможности новых фамиклонов могли значительно увеличить комплексность выпускаемых игр.
Относительно современный «Сюбор-ноутбук» — примерно 2001 год
Время шло, наступил 2001 год, клоны SEGA и Famicom не теряли своей актуальности и продолжали взращивать второе поколение — детей 90-х, а в городе Чжубэй появляется компания VRT Technology, которая занимается разработкой и проектированием фамиклонов. Но в отличие от конкурентов, VRT в плане апгрейдов оригинальной платформы пошла ещё дальше и превратила NES в нечто вроде очень продвинутого микроконтроллера: их чипы научились выводить изображение не только на телевизор, но и на ЖК-дисплеи, был серьёзно доработан АЛУ — появилась возможность аппаратного умножения и ДЕЛЕНИЯ (чего не было даже в ARM) 16-битных чисел, ядро 6502 было разогнано с 1 МГц до целых 5, объём ОЗУ увеличен с 2 КБ до 8 для основного процессора и 4 для PPU, а также были добавлены контроллеры SPI, UART, АЦП и GPIO.
В одной из ревизий чипа даже есть возможность работы с SPI-флэшками!
Ко всему прочему, VRT умудрилась сделать некое подобие MMU с шиной OneBUS, благодаря чему стало возможным хранить игры на самой обычной параллельной ROM или NOR-памяти, без необходимости установки отдельного памяти чипа для PPU. Компания даже выпустила отдельный SDK для своих консолей с компилятором C, статическими библиотеками для общения с периферией и специальным эмулятором. Но вот нюанс — все чипы этого производителя поставлялись без корпуса, а приобрести их в свободной продаже нельзя, поэтому определить точную маркировку сложно...
Скриншот из документации на плату для разработчиков. Как видно, даже здесь процессор поставляется в виде System on Module
Но казалось бы... прошло столько лет, NES давным-давно неактуальна и VRT наверняка сменила профиль или вообще закрылась, а её чипы можно найти только в старых клонах и в Sup наверняка используется что-то другое... Если бы не одно но: судя по документам, бескорпусные чипы поставляются в блистере и имеют определенный срок годности. Дело в том, что они не припаиваются к плате, а приклеиваются «пузом» к текстолиту, затем их пины привариваются к дорожкам, а далее они покрываются компаундом для защиты от внешних факторов. У самих кристаллов срока годности нет, однако у клея — около 3х-4х месяцев, после чего кристаллы можно выбрасывать (в случае чипов VRT конечно, не думаю что там оптовая цена превышает 3-4 рубля за штучку), так как вряд-ли кто-то будет выделять целую линию для нанесения нового клеевого слоя на копеечные кристаллы...
Та самая каелька
В начале года я рассказывал об ещё одном китайском чуде инженерной мысли — относительно новом телефоне Kechaoda с встроенным аппаратным клоном NES, где использовался точно такой-же чип от VRT, только с поддержкой SPI-флэшек и дисплеев с шиной 8080. Учитывая огромные объёмы производства Sup и подобных ей консолей, можно сделать вывод что VRT всё ещё существует, заказывает производство новых партий и возможно даже продолжает дорабатывать свои клоны NES... Спустя 40 лет после выхода оригинальной консоли!
А далее по традиции блога я предлагаю разобрать Sup и посмотреть, что же у него находится под капотом. Уверяю вас, мой экземпляр в какой-то степени уникален!
❯ Что внутри?
Консоль разбирается очень просто: необходимо вытащить аккумулятор и выкрутить 6 винтиков с обратной части устройства, после чего крышка отходит без каких либо защелок. Внутри нас встречает толстенная однослойная плата, которая, к слову, довольно грамотно разведена инженерами. В наши дни, для серийных ЭВМ это большая редкость, но здесь авторы решили максимально сэкономить, местами используя большие резисторы-нулевики в качестве перемычек.
С правой верхней стороны расположен блок, отвечающий за питание консоли и зарядку аккумулятора. Здесь всё стандартно для таких простых устройств: защитный диод на VBat, линейный регулятор на 3.3В в корпусе SOT-23 под маркировкой 662K, а также парочка ключей, вероятно составляющие часть схемы чарджера. Схема зарядки аккумулятора здесь, судя по всему, настоящая и его основная логика расположилась в кристалле под компаундом.
Опытные читатели уже могли заметить уникальность моей ревизии: вместо чипа памяти в BGA-корпусе поверх SoM, здесь используется самая обычная NOR-флэшка в корпусе TSOP58 объёмом в 16МБ. Это значит, что теоретически я могу её сдуть, слить дамп с помощью программатора и попытаться подсунуть в него свои игры... Если вам был был бы интересен контент такого формата — дайте знать в комментариях!
Чуть ниже флэши расположилось сердце устройства — неизвестный кристалл, который с вероятностью 99% разработан VRT. Дело в том, что безвредно декапсулировать такие чипы нельзя, они с большой вероятностью трескаются, так что конкретную модель чипа мы возможно сможем узнать только изучив дамп. Левее процессора расположился кварц на 20МГц, который тактирует остальную периферию.
В качестве дисплея здесь используется безымянная матрица разрешением примерно в 240x320 с параллельным интерфейсом MIPI DBI (8080). Иными словами, здесь используется такой-же дисплей, как в классических кнопочных телефонах и DIY-самоделках. Я не пробовал подключать этот дисплей к микроконтроллер, но уверен, что если посидеть пару дней с лог. анализатором, то можно без проблем найти все сигнальные линии параллельной шины по стандартизированным командам DBI :)
Также вы могли заметить MicroUSB-разъём с верхней части устройства, который используется для зарядки. Однако здесь используются и три дополнительные сигнальные линии — D+, D- и ID, однако служат они для подключения второго геймпада, а не к ПК. Фактически это не USB, а сигнальные линии оригинального геймпада NES — Latch, Data и Clock.. такое вот нецелевое, но практичное использование разъема!
И... это всё! Да, вот такая простейшая, но при этом достаточно продуманная схемотехника и конструктив. Несмотря на дешевизну, убить этот гаджет в аппаратном плане очень сложно, его самое слабое место — это дисплей.
❯ Включаем...
После включения консоли нас встречает меню выбора языка в многоигровке. Список игр довольно обширный и ограничивается не только классикой, зачастую под непонятными названиями, но и самопальными китайскими играми. Однако здесь есть одна важная особенность: поскольку клоны VRT реализуют шину OneBus, они поддерживают только маппер MMC3, что здорово снижает число поддерживаемых игр.
В большинстве игр копирайты намеренно подрезаны, скорее всего чтобы можно было без проблем продавать консоли на маркетплейсах. Поскольку это аппаратный клон, здесь нет инпутлага и всё работает точь в точь как на оригинальной консоли, в том числе и игры для других регионов. Например ром Super Mario Bros. здесь почему-то от другого региона, из-за чего работает слишком быстро.
Звук у консоли в целом неплохой, однако у части Sup'ов не работает треугольный канал APU, из-за чего звуки и музыка в некоторых играх искажены. С чем это связано - доподлинно неизвестно, но думаю вы и сами понимаете, что контроль качества у таких чипов наверняка минимальный!
Поскольку у консоли нет Fuel Gauge (микросхемы для определения уровня заряда аккумулятора, обычно она сложнее чем просто АЦП-вольтметр) как класса, при разрядке АКБ сначала начинает тухнуть подсветка, затем утихать звук, а в произвольные моменты времени консоль может просто зависнуть (сохранений тут нет). Забавно то, что подсветка подключена напрямую к VBat (плюсу аккумулятора) и её яркость плавно снижается, обратно пропорционально заряду аккумулятора, однако такое решение "в лоб" также прямо пропорционально напряжению АКБ увеличивает потребление. Если у вас меткий глаз - сможете определить уровень заряда по тусклости :)
В процессе работы консоль потребляет аж 200мА при самом высоком уровне звука на среднем заряде аккумулятора, 170мА при 10% громкости и будет потреблять ещё меньше, если снизить подсветку дисплея путем установки линейного регулятора с выходным напряжением в 3.3В (потребление снизится до ~130мА, добавив минимум час игры от АКБ). Само процессорное ядро довольно экономичное, так что я до сих пор не понимаю, почему его не выпустили как конкурента атмеги с продвинутыми графическими и звуковыми возможностями. Родной аккумулятор хоть и имеет размеры BL-4C, на практике имеет емкость в 300-400мАч максимум, поэтому есть смысл поискать оригинальный аккумулятор от Nokia: с ним консоль сможет проработать 5-6 часов без подзарядки.
Минимальное напряжение, при котором консоль работает стабильно - 2.6В, практически без подсветки. Учитывая дропаут на линейном регуляторе, фактически процессор способен работать и на 2.4В, а возможно и ещё ниже!
Заключение
В заключении мне хотелось бы сказать, что Sup — это по факту шедевр инженерной и технологической мысли. Судите сами: полноценная ЭВМ с цветным дисплеем, звуком, памятью, большим количеством игр и даже аккумулятором, и всё это буквально за 5$. Большинство читателей наверняка посчитает это устройство одноразовым мусором, однако для меня, как для прожженного гика, это маленькое портативное чудо!
Надеюсь, вам было интересно узнать тайну Sup'а. О том, что в руках у вас не эмулятор, а настоящий аппаратный клон, только очень сильно прокачанный наверняка известно не всем... Если вам понравилась статья и вы хотите помочь мне финансово, можно воспользоваться формой доната выше. Донаты идут на контент - оборудование и всякие DIY-гаджеты. А ещё мне можно подарить какой-нибудь прикольный гаджет, о котором выйдет статья. Доставку я оплачу :)
А если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет — подписывайтесь на мой Telegram-канал «Клуб фанатов балдежа», куда я выкладываю бэкстейджи статей, ссылки на новые статьи и видео, а также иногда выкладываю полезные посты и щитпостю. А ролики (не всегда дублирующие статьи) можно найти на моём YouTube канале.
Что думаете о Sup?
Попробуем замоддить такую штучку?
Как вам статья?
Очень важно! Разыскиваются девайсы для будущих статей!
Друзья! Для подготовки статей с разработкой самопальных игрушек под необычные устройства, объявляется розыск телефонов и консолей! В 2000-х годах, китайцы часто делали дешевые телефоны с игровым уклоном — обычно у них было подобие геймпада (джойстика) или хотя бы две кнопки с верхней части устройства, выполняющие функцию A/B, а также предустановлены эмуляторы NES/Sega. Фишка в том, что на таких телефонах можно выполнять нативный код и портировать на них новые эмуляторы, чем я и хочу заняться и написать об этом подробную статью и записать видео! Если у вас есть телефон подобного формата и вы готовы его задонатить или продать, пожалуйста напишите мне в Telegram (@monobogdan) или в комментарии. Также интересуют смартфоны-консоли на Android (на рынке РФ точно была Func Much-01), там будет контент чуточку другого формата :)
Кроме того, я ищу подделки на брендовые смартфоны 2009-2015 года выпуска. Многие из них работают на весьма интересном железе и об их моддинге я бы мог сделать интересный контент. Особо разыскиваются подделки Apple iPhone и HTC (по типу HD2 и Touch Diamond 2)на Windows Mobile и Android, а также Samsung Galaxy. Также представляют моддерский интерес первые смартфоны Xiaomi из серии Mi, Meizu (ещё на Exynos) и телефоны Motorola на Linux (например, EM30, RAZR V8, ROKR Z6, ROKR E2, ROKR E6, ZINE ZN5, о которых я хотел бы подготовить отдельные статью и видео, поскольку они работали на очень мощных для своих лет процессорах, поддавались серьезному моддингу и были способны запустить даже Quake.
Большое спасибо читателям и зрителям за подгоны, без вас контент бы не выходил!
Пожалуй, все мы с вами любим диковинные гаджеты из 2000-х годов, когда производители всё ещё пытались удивить пользователя некой изюминкой. Таким необычным устройством был и предок современных планшетов — MID SmartQ V7, где за цену в 150$, производитель предлагал неплохое железо, приятный дисплей и целых три предустановленных операционных системы!
Что было «под капотом» у первых планшетов и что умел «дедушка» современного iPad с Android, Ubuntu и Windows CE «на борту» — читайте в сегодняшней подробной статье!
❯ Предыстория
Планшеты — достаточно интересный класс устройств, который за всё время существования пережил недоступность, подъём и даже в какой-то степени забвение. Их история началась ещё в конце 80-х годов с выходом GRiDPad 1900, который представлял из себя небольшой x86-компьютер с полноценным HDD, резистивным тачскрином и MS-DOS на борту:
Планшет хоть и был популярен в узких кругах, но до массового рынка ему было ещё далеко — стоимость в 3 750$ была по карману далеко не каждому заинтересованному пользователю. Однако в 90-х годах концепция планшетов и приближенных к ним устройств только развивалась. Сначала вышел Apple Newton в 1993 году по цене в 990$, а в 1996 году — уже и доступный КПК Palm Pilot 1000 по 299$.
И хотя Pilot — это именно КПК, чаще всего их использовали для тех же целей, что и современные планшеты
Но настоящий бум случился в 2005 году, когда Nokia на LinuxWorld Summit представила принципиально новое устройство — 770 Internet Tablet. Как становится ясно из названия, этот гаджет был предназначен для серфинга в интернете, однако благодаря Linux-дистрибутиву Maemo, он мог выполнять и другие функции обычного компьютера.
Дело в том, что в отличии от той же самой Motorola, которая использовала MontaVista Linux в своих телефонах на платформе EZX, Nokia сразу позиционировала свои гаджеты как открытые и созданные специально для гиков. После выхода устройства, Nokia опубликовала SDK для портирования существующих и разработки новых программ — благодаря чему список доступного софта постоянно расширялся и даже спустя 20 лет после релиза, коммьюнити Maemo всё ещё поддерживает их!
Знакомый форм-фактор, приемлемая цена в 350 долларов и умеренная популярность всей линейки N-таблетов заложили первый кирпичик в фундамент современных планшетов.
В 2008 году Intel представляет новое семейство энергоэффективных процессоров под названием Atom, а параллельно с ними концепцию MID — Mobile Internet Device, то есть портативных компьютеров с возможностью выхода в сеть. И вот тут-то началось!
В Китае MID очень понравилась местным производителям гаджетов и некоторые из них начали разрабатывать и выпускать самые разные, порой даже диковинные серийные устройства — нетбуки-трансформеры, нетбуки-телефоны, планшеты-слайдеры... и конечно же привычные нам планшеты без физических кнопок!
Прототип MID от Intel
К 2010 году на рынке мобильных чипсетов случился бум: новые процессоры выходили буквально каждые полгода, их функционал и производительность росли обратно пропорционально цене. Чипы ОЗУ и флэш-памяти тоже стремительно дешевели, а TN-TFT дисплеи пристойного разрешения уже стоили отнюдь не как крыло от Боинга. Воспользовавшись моментом, несколько китайских компаний представили как минимум 3 модели, которые выбрались за пределы локального рынка в Китае. Одним из таких был и герой сегодняшней статьи — SmartQ V7!
В 2010 году успех Android всё ещё не был очевиден. Некоторые производители продолжали продвигать свои платформы (например Bada), да и для Android ещё было разработано не так много полезного софта. Поэтому когда перед инженерами встал выбор операционной системы, они долго не думали... и решили установить в одно устройство целых три ОС: Android, Ubuntu и Windows CE, а для переключения между ними написали собственный загрузчик!
О SmartQ V7 я узнал в начале этого года, когда исследовал китайские барахолки. Мне даже удалось раздобыть один экземпляр к себе в коллекцию, но из-за особенностей загрузчика (о которых мы поговорим позже), я окирпичил свой экземпляр... Но затем на мои поиски этого устройства откликнулся пользователь с 4pda под ником spbplus (его канал на Дзене) и согласился безвозмездно отправить мне гаджет, за что ему огромное спасибо!
Полноразмерный USB 2.0, HDMI, разъем зарядки как у Nokia и ножка — неотъемлемые атрибуты гаджетов тех лет!
Давайте же по классике разберем наше устройство и узнаем, что здесь скрывается «под капотом»!
❯ Что внутри?
В конструктивном плане гаджет выполнен очень необычно. И дело не только в дизайне и наличию ножки, но и сборке: сразу видно, что бюджеты на разработку и производство устройства были очень сильно ограничены.
Разбирается гаджет несложно, но весьма хитро: сначала необходимо открутить 4 винта с обратной стороны корпуса и расщелкнуть фронтальную панельку. А далее начинаются основные «приколы» бюджетного инжиниринга: плата с фронтальными кнопками буквально приклеена к средней части корпуса, а к ней вручную припаяны как SMD-кнопки, так и межплатный шлейф вместе с проводами питания подсветки дисплея. При этом никто даже не заморачивался с отмывкой флюса — и так сойдет!
Из-за материала плёнки, как дисплей не вытирай — всё равно будут оставаться небольшие пылинки!
Материнская плата отделена от дисплея той самой средней частью корпуса, которая крепится на 5 винтов и две клипсы. И самое забавное то, что по материалу средняя часть напоминает первые опыты в 3D-печати: всё очень примитивно и несимметрично, из-за чего плату немного перекашивает уже с завода. Под дисплеем спрятано 3 потайных винта и при их откручивании надо быть предельно осторожным: если дисплей зайдет уголком за ушко, то есть немалый шанс случайно порвать его шлейф.
Уже виднеется обвязка процессора!
Материнская плата также вытаскивается вместе с средней частью корпуса и аккумулятором, но с этим никаких проблем уже нет: риск что-то повредить минимален. При взгляде на плату устройства сразу приходит понимание, почему этот гаджет стоил 150 долларов: максимальная интеграция всей периферии в один чип:
В качестве сердца устройства, здесь используется система на кристалле TeleChips TCC8902, которая состоит из одного ARM1176-ядра, работающего на частоте 800МГц, контроллера DDR2-памяти, видеоускорителя Mali-200 (в отличии от Mali-400, о существовании Mali-200 слышали единицы), а также периферийных контроллеров по типу USB, SPI, I2C, UART. Помимо этого, TCC8902 поддерживает вывод видео на множество разных источников, начиная от HDMI, заканчивая NTSC/PAL.
Выше процессора расположилась микросхема EEPROM-памяти AT88 производства Atmel. Что на ней хранится — мне неизвестно, вполне возможно что ID чипа или, что гораздо хуже, конфигурация NAND-контроллера (программаторы под эти чипы очень дорогие, а у меня «запорота» именно она).
Столько всего в одном маленьком чипе!
Чуть правее процессора расположилось два чипа оперативной памяти производства Samsung, объёмом по 128МБ каждый. В целом, 256МБ были стандартным объёмом ОЗУ почти для всех портативных гаджетов тех лет. Даже в первом iPad был именно такой объём оперативной памяти!
Почти на самом верху платы расположился чип NAND флэш-памяти производства всё той-же Samsung, объёмом в 2ГБ. В целом, это объём характерный для MP3-плееров и совсем неясно, как на таком чипе уживаются аж три операционные системы!
А вот у Galaxy Tab 7.0 было аж 512МБ оперативной памяти!
Слева расположился аудиокодек Wolfson WM8987G, отвечающий за вывод и запись звука, а также усилитель для стереодинамиков. Чуть ниже расположился чип M1530DM, выполняющий роль повышающего DC-DC преобразователя для подсветки дисплея, а рядом с коннектором шлейфа дисплея расположился неопознанный контроллер питания, который также выполняет функции чарджера.
В качестве дисплея используется классическая 60 pin RGB матрица. Такую можно достать с многих планшетов тех лет!
Питает весь планшет литий-ионный аккумулятор с номинальным напряжением в 3.7В, что несвойственно для планшетов тех лет. Обычно ставили две последовательно соединенные банки. Интересно то, что аккумулятор до сих пор держит заряд и не вздулся — даже спустя 15 лет после выхода планшета на рынок. Достойный результат!
Вот и весь конструктив планшета. Как известно, всё гениальное — просто. И планшет, который в отличии от конкурентов, стоил всего 150$ — это тоже своего рода достижение и шедевр технологической мысли! Ну, что у него внутри мы узнали, а как он проявлял себя на практике? Давайте включим и узнаем!
❯ Включаем...
После включения планшета, нас встречает меню загрузчика (местный аналог BIOS) аж с тремя системами на выбор. Но помимо выбора ОС, здесь есть дополнительная менюшка с настройками загрузки системы, где можно отрегулировать объём памяти для видеоускорителя (я такого вообще больше нигде не видел на мобильных устройствах).
Однако с этим загрузчиком был определенный нюанс. Дело в том, что большинство V7'ых и V5'ых, которые можно найти сейчас на вторичке, частично окирпиченные. Из-за своеобразного механизма разметки разделов, для установки обновленных версий Android, WinCE и Linux требовалось обновление загрузчика — так называемая смена с «синего» на «фиолетовый». Однако планшет никак не был защищен от даунгрейда прошивки, что превращало его в кирпич при попытке установить старый загрузчик поверх обновленного.
На втором экземпляре SmartQ V7 у меня грузился только Android, остальные две системы не работали, но подготовка флэшки с обновленными образами WinCE и Ubuntu решила проблему (и сломала Android, а в веб-архиве архив битый). Скачать образы ОС можно здесь, для установки достаточно лишь скопировать их в корень SD-карты и включить планшет с зажатой кнопкой действия.
Изначально я решил загрузиться в Ubuntu и она сюда портирована довольно неплохо. В качестве рабочего стола используется модифицированная оболочка OpenBox с пакетом дополнительного софта. Производительность системы не впечатляет, но совсем уж «лагодромом» гаджет назвать нельзя. А вот за что его можно поругать — так это за резистивный тачскрин, который с годами начал выдавать фантомные нажатия (и дело не в грязи под рамками)...
Как сюда пропатчить KDE2?
При разработке девайса, SmartQ явно оглядывалась на идейного вдохновителя — Nokia 770 Internet Tablet. Многие элементы интерфейса повторяют Maemo, но при этом, как и в прародителе, пользователь никак не ограничен в модификации своего собственного устройства. Прямо из менюшки можно открыть терминал, запатчить sources.list и накатить deb-пакеты из репозитория с помощью apt.
Но если пользователь был новичком, он мог поставить пакеты с помощью GUI-программы. Не Ubuntu Store, но тоже ничего.
По строке Hardware в ядре, мы сразу видим куда идут корни устройства — к референсной плате Telechips!
Впрочем, несмотря на явно гиковское направление данного гаджета, он вполне подходил и рядовому пользователю. Из коробки были доступны самые разные программы, включая просмотр документов (для чтения книг), текстовый редактор и медиаплеер VLC. Путём установки устройства на ножку и подключения хаба в полноценный USB 2.0-разъём, можно было получить почти полноценный самостоятельный компьютер, а если подключить его к телевизору с помощью HDMI — так вообще медиацентр с выходным разрешением в 1080p!
Для подключения к сети, в планшете есть Wi-Fi. Однако если возможности подключится к точке доступа не было, к планшету можно было подключить самый обычный 3G-модем и работал он не только в Linux, но и Android! Правда, аккумулятор в таком случае высаживался ещё быстрее!
Ну и куда-же без браузера! В качестве основного здесь используется Midori на базе движка WebKit. Но несмотря на то, что я успешно подключился к сети, мне не удалось открыть ни Linux.org.ru, ни OpenNet — сайт, который открывает даже PocketIE. К сожалению, сборок Chromium под ARMv6 в те годы не было, а FireFox будет слишком медленным, так что наш максимум — это Dillo.
Как перестать намеренно убирать TLS 1.2 — так это "безопасность", а как показывать заглушки доменов - так это хоть на IE 1.0!
Далее я загрузился во вторую из трёх доступных систем — Windows CE. И вот здесь картина была менее радужной, поскольку порт WinCE на Evaluation-board был ну очень кривым. Например, при переключении режима USB из Client в Host — планшет зависал, а тачскрин работал некорректно и откалибровать его возможности не было из-за кривой реализации драйвера (он эмулирует мышь, а не реализует стилус, как должно быть).
Но к теме Windows CE на планшетах мы обязательно с вами вернемся немного позже, ведь помимо SmartQ V7, был ещё один планшет с возможностью загрузки нескольких ОС. И имя ему — ePad Zenithink ZT-180!
❯ Заключение
Вот такая статья про интересный гаджет из далекого 2010 года у нас с вами получилась. И хотя на первый взгляд кажется, что установка сразу 3-х ОС — странное решение, однако в годы когда на рынке мобильных систем ещё не было однозначного лидера — это было логично, ведь производитель предоставлял пользователю полную свободу действий над своим устройством.
Если вы хотите поддержать блог материально, то это можно сделать используя форму ниже. всем большое спасибо!
А если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет — подписывайтесь на мой Telegram-канал «Клуб фанатов балдежа», куда я выкладываю бэкстейджи статей, ссылки на новые статьи и видео, а также иногда выкладываю полезные посты и щитпостю. А ролики (не всегда дублирующие статьи) можно найти на моём YouTube канале.
Как вам SmartQ V7?
Очень важно! Разыскиваются девайсы для будущих статей!
Друзья! Я ищу подделки на брендовые смартфоны 2009-2015 года выпуска. Многие из них работают на весьма интересном железе и об их моддинге я бы мог сделать интересный контент. Особо разыскиваются подделки Apple iPhone и HTC (по типу HD2 и Touch Diamond 2)на Windows Mobile и Android, а также Samsung Galaxy. Также представляют моддерский интерес первые смартфоны Xiaomi из серии Mi, Meizu (ещё на Exynos) и телефоны Motorola на Linux (например, EM30, RAZR V8, ROKR Z6, ROKR E2, ROKR E5, ZINE ZN5, о которых я хотел бы подготовить отдельные статью и видео, поскольку они работали на очень мощных для своих лет процессорах, поддавались серьезному моддингу и были способны запустить даже Quake.
Большое спасибо читателям и зрителям за подгоны, без вас контент бы не выходил! Связаться со мной можно в тг monobogdan.
Умное кольцо COLMI R12 представляет собой компактный гаджет для отслеживания активности и здоровья. Оно незаметно носится на пальце, собирая данные о сне, пульсе и шагах. Это удобное решение для тех, кто предпочитает минималистичные носимые устройства.
Power Bank KUULAA мощностью 22,5 Вт и емкостью 10000 мАч предназначен для быстрой подзарядки мобильных устройств. Его компактный размер делает его удобным для ношения с собой.
Беспроводная игровая мышь Ajazz AJ179 с сенсором Apex PAW3950 создана для геймеров, которым важна точность и скорость. Она обеспечивает надежное соединение и комфорт во время долгих игровых сессий.
Портативный проектор Magcubic Native 1080P позволяет проецировать изображение в высоком разрешении. Его компактность и простота использования делают его удобным для домашнего кинотеатра или презентаций на выезде.
Штатив Ulanzi MT-79 с высотой до 2 метров предназначен для стабилизации камеры при съемке фото и видео. Он обеспечивает необходимую высоту и устойчивость, что полезно для различных видов съёмки.
Портативное радио Retekess V115 предлагает возможность прослушивания радиостанций в различных диапазонах. Оно компактно и удобно для использования в поездках или на природе.
Беспроводной петличный микрофон Ulanzi A100 предназначен для записи чистого звука без лишних проводов. Он удобен для блогеров, интервьюеров и всех, кто нуждается в качественной аудиозаписи.
Модуль CAN MCP2515 TZT предназначен для работы с шиной CAN в электронных проектах. Он может быть полезен для разработчиков, работающих с микроконтроллерами и автомобильными системами.
Гибридный видеорегистратор Smar H.265 предназначен для систем видеонаблюдения, поддерживая различные форматы камер. Он обеспечивает запись и хранение видео, что важно для безопасности.
Смартфон Cubot KingKong Power 3 отличается большой емкостью аккумулятора, что обеспечивает продолжительное время работы. Это прочное устройство, которое может быть полезно для активных пользователей.
Набор для пайки Practice Board предназначен для тренировки навыков пайки. Он полезен для начинающих электронщиков и студентов, позволяя освоить основы пайки компонентов.
Qingping Air Detector 2 — это устройство для мониторинга качества воздуха в помещении. Он измеряет различные параметры, помогая поддерживать здоровую атмосферу.
Модуль беспроводного радиоприемника TZT предназначен для получения беспроводных сигналов в различных электронных проектах. Он может быть полезен для создания устройств дистанционного управления.
Металлический флэш-накопитель MicroDrive HS016G0828 предлагает компактное и прочное решение для хранения данных. Он удобен для переноса файлов и использования в повседневной жизни.
Паяльная станция Silverflo 948 мощностью 90 Вт предназначена для выполнения точных паяльных работ. Она обеспечивает стабильную температуру и комфорт при работе с различными компонентами.
Набор из двух мини-дрелей FOCSE предназначен для выполнения мелких сверлильных работ. Он удобен для моделирования, создания прототипов и других точных задач.
Аккумуляторная сабельная пила WOBERICH предназначена для распиловки различных материалов без привязки к электросети. Она обеспечивает мобильность и удобство в работе.
Cервоприводы TZT SG90 — это компактные и широко используемые компоненты для робототехники и моделирования. Они позволяют точно контролировать угловое положение, что полезно для различных проектов.
Бесщеточная лобзиковая пила WOBERICH предназначена для фигурной резки различных материалов. Она обеспечивает высокую производительность и точность, что важно для столярных работ.
Электрический паяльник FNIRSI T80 — это компактный паяльник с быстрым нагревом, подходящий для мобильных ремонтных работ. Он удобен для пайки мелких компонентов и работы в полевых условиях.
Цифровой термометр для мяса INKBIRD IHT-1P предназначен для точного измерения температуры готовящегося мяса. Он помогает контролировать процесс приготовления и достигать нужной степени прожарки.
Набор для сборки светодиодного светильника TZT CD4017 предназначен для обучения основам электроники. Он позволяет собрать простой светодиодный светильник, что полезно для начинающих радиолюбителей.
Миниатюрный проектор BYINTEK LOVE U4 использует ЖК-технологию и LED-источник света мощностью 45 Вт. Он обеспечивает яркость 300 ANSI люмен и имеет впечатляющий срок службы лампы до 50 000 часов, что делает его отличным выбором для домашнего кинотеатра или презентаций.
Легкие беспроводные наушники Bose&og P2961 (весом всего 170 г) предлагают комфортное прослушивание благодаря мягким амбушюрам.
Они поддерживают Bluetooth, а также могут подключаться через 3.5 мм аудиокабель или воспроизводить музыку с карты памяти. Встроенный 40-миллиметровый динамик обеспечивает чистое звучание.
Паяльная станция WEP 982 идеально подходит для точных работ с электроникой, включая SMD-компоненты.
Она быстро нагревается, имеет функцию автосна для сохранения жала и оснащена ярким цветным дисплеем для контроля температуры. Возможность быстрой смены жал делает ее удобной для различных задач.
Смартфон Xiaomi Redmi Note 14 оснащен 6.67-дюймовым AMOLED-дисплеем с частотой обновления 120 Гц и пиковой яркостью 1800 нит.
Под капотом находится процессор Helio G99-Ultra, а тройная камера с основным сенсором на 108 МП позволяет делать качественные снимки. Аккумулятор ёмкостью 5500 мАч поддерживает быструю зарядку 33 Вт.
Компактный и прочный перезаряжаемый фонарик WUBEN G5 обеспечивает яркость до 400 люмен. Его уникальный плоский дизайн позволяет удобно носить его в кармане. Фонарик имеет двойные источники света, включая RGB-подсветку, и магнитное крепление для дополнительной функциональности.
Низковольтный индукционный нагреватель ZVS мощностью 1000 Вт предназначен для быстрого и равномерного нагрева металлических деталей.
Он идеально подходит для DIY-проектов, закалки, отжига и плавления небольших объемов металлов, таких как золото, серебро, медь и алюминий, при использовании с графитовым тиглем.
Бензопила STIHL MS 250 с объемом двигателя 45.4 куб. см и мощностью 2.2 кВт (3.0 л.с.) является надежным инструментом для распиловки дров и выполнения различных работ по расчистке участка. Она обладает отличным соотношением мощности к весу и легкостью в использовании.
Ручной портативный металлоискатель используется для обнаружения скрытых металлических предметов.
Он находит применение в сфере безопасности для проверки людей на наличие запрещенных предметов, в розничной торговле для предотвращения краж, а также может быть полезен для поиска потерянных металлических изделий.
Умные часы Amazfit Cheetah с круглым 1.39-дюймовым AMOLED-дисплеем разработаны для спортсменов.
Они оснащены двухдиапазонным GPS с высокой точностью позиционирования, поддерживают более 150 спортивных режимов, предлагают научно обоснованные рекомендации по тренировкам и имеют длительное время автономной работы.
Система умной подсветки Ambilight для телевизора проецирует изменяющийся в реальном времени свет на стену за телевизором, соответствующий изображению на экране. Это создает эффект погружения, визуально расширяя экран и усиливая впечатления от просмотра фильмов, игр или другого контента.
Полно диапазонные динамики AIYIMA мощностью 30 Вт (пиковая 35 Вт) предназначены для домашнего кинотеатра. Они обеспечивают чистый и детализированный звук с широким частотным диапазоном. Прочная металлическая конструкция и портативный дизайн делают их удобными для размещения.
Насадка-кородер для бензопилы превращает ее в инструмент для снятия коры с бревен и создания пазов или борозд в древесине. Это полезное приспособление для заготовки древесины, строительства бревенчатых домов или изготовления мебели.
Мощный кулер PCV02 (18 Вт) предназначен для охлаждения смартфона во время интенсивных игровых сессий или при использовании ресурсоемких приложений.
Он оснащен двойной TEC-системой охлаждения и большой площадью рассеивания тепла, предотвращая перегрев устройства и поддерживая его производительность.
Универсальный набор аккумуляторных электроинструментов, включающий шесть различных насадок или базовых инструментов, таких как дрель/шуруповерт, шлифовальная машина, пила и другие.
Практичный пластиковый держатель MeyJig, предназначенный для организации ванной комнаты. Он обеспечивает удобное хранение зубных щеток, зубной пасты и даже бритвы, помогая поддерживать порядок и гигиену на раковине.
Современный напольный торшер YBXZN с RGB-подсветкой, создающий атмосферное освещение в помещении. Он может иметь минималистичный изогнутый дизайн и управляться с помощью пульта дистанционного управления или мобильного приложения для выбора различных цветов и световых эффектов.
Мощный налобный фонарь mixxar Z40 с яркостью до 20000 люмен, оснащенный светодиодом XHP90.2.
Он имеет зум-функцию и сенсорное управление, что делает его удобным для использования во время рыбалки, кемпинга и других активностей на открытом воздухе.
Компактная портативная игровая консоль ANBERNIC, предназначенная для эмуляции ретро-игр. Она позволяет наслаждаться играми с различных платформ прошлых поколений в любом месте, предлагая широкий выбор моделей с разными характеристиками и дизайном.
Инструмент XMSJ, предназначенный для надежной фиксации сварочного электрода во время ручной дуговой сварки (MMA). Обеспечивает безопасный и стабильный контакт электрода с заготовкой, что важно для качественного сварочного шва.