Пожалуй, многие из вас помнят, какими были мобильные игры до и после выхода первого iPhone. В начале 2000-х годов, ещё до появления яблочного смартфона, игры для телефонов в основном были весьма интересными, но тем не менее, достаточно простенькими с точки зрения графики и реализации в целом. После запуска AppStore в 2008 году, на iPhone начали выходить самые разные красочные, невиданные раннее по уровню детализации и проработке 2D и 3D игры. Но появление таких игр — отнюдь не заслуга Apple, а относительной малоизвестной компании PowerVR (подразделение Imagination Tech), которая смогла разработать на базе видеочипа Dreamcast и внедрить один из первых действительно массовых мобильных 3D-ускорителей, имя которому — PowerVR MBX! Сейчас мы с вами привыкли, что почти любой дешевый смартфон может отрисовывать графику уровня PS3 в 1080p, а то и выше, но когда-то даже уровень PS2 был роскошью… Сегодня мы с вами: узнаем предысторию появления аппаратно-ускоренной 3D-графики на телефонах, рассмотрим такую фирменную фишку PowerVR, как тайловый рендеринг, а в практической части статьи нам поможет легендарный КПК Dell Axim X51v с MBX на борту, под который мы напишем 3D-игру «про жигули» с нуля! Интересно? Тогда добро пожаловать под кат!
❯ Мобильная 3D-графика. Начало
Пожалуй, 3D-графика на мобильных устройствах начала развиваться ещё с самого начала 2000-х годов. К тому моменту, как мобильные телефоны научились запускать сторонние Java-приложения, практически сразу же появился прибыльный рынок мобильных игр. Ещё до появления поддержки jar-приложений, люди ставили рекорды в «Змейке» на телефонах Nokia, таскали ящики в «Строителе» на Siemens и играли в другие предустановленные игры на девайсах других брендов, поэтому было очевидно, что игры на мобильных телефонах рано или поздно смогут занять немалую часть сегмента портативных игровых устройств.
Именно появление J2ME дало тот самый толчок для развития мобильного гейминга. Производители телефонов активно развивали и дорабатывали мобильную платформу, добавляя в неё различные API-расширения — например, активацию приложений через СМС и доступ в WAP-интернет. Сама платформа J2ME была достаточно простой для изучения и имела низкий порог вхождения не только для людей, имевших какой-то опыт программирования, но даже для совсем новичков, которые никогда не писали код и тем более игр! Благодаря этому, появились сотни игр, многие из которых до сих пор помнят и любят: это и легендарный «мячик» Bounce, и «зайчик с морковками» Bobby Carrot, и весьма крутой Gish, а также множество различных платформеров по известным фильмам и «большим» играм!
В 2003 году появился Nokia N-Gage — первый массовый телефон, ориентированный именно на мобильный гейминг, который поддерживал не только Java-игры, но и собственные Symbian-игры с достаточно крутой 3D-графикой! Примерно в том же 2003 году, для платформы Java вышло сразу два API-расширения, которые добавляли поддержку симпатичной 3D-графики даже в самые простенькие и бюджетные телефоны: Mobile 3D Graphics (M3G, была почти везде) и Mascot Capsule (эта платформа была только на Sony Ericsson и Motorola). Именно благодаря этим API, мы с вами увидели такие легендарные игры, как V-Rally, Galaxy on Fire, Deep3D и многие другие! Но тем не менее, эти API были относительно медленными из-за программной растеризации на процессоре без отдельного 3D-ускорителя и весьма ограниченными в функционале. Ближайший пример по функционалу — уровень софтрендера первой кваки на первом Pentium! Кстати, про 3D на мобильных телефонах я писал отдельную статью, там в практической части мы пишем 3D-бродилку для Sony Ericsson!
Но помимо кнопочных телефонов, существовал сегмент High-end мультимедийных устройств, которые предоставляли гораздо больший функционал и производительность за немалые деньги. И речь, конечно же, о КПК! Девайсы, работавшие на базе шустрых процессоров Intel PXA и Samsung S3C с Windows Mobile на борту были заметно более перспективными для игр… но как-то не задалось из-за отсутствия нормальных каналов для распространения. Но тем не менее, Intel (иронично, но один из самых больших производителей ARM-чипсетов для КПК в те годы), которая уже занималась развитием десктопной графики GMA и PowerVR активно работали в этой сфере и результатом стало появление видеоускорителя 2700G, который представлял из себя не только 3D GPU PowerVR MBX Lite, но и аппаратный декодер видео, позволявший смотреть видео в высоком качестве! MBX Lite позволял запустить даже Quake 3 в 640x480 (!), пусть и в 10-15 FPS… Ещё за 5 лет до этого, далеко не все десктопные видеокарты могли выдать больше 30 FPS в 800x600!
Конечно в 2004 году уже вышел PSP, выставивший новую планку уровня 3D-графики для портативного гейминга, однако для смартфонов и КПК, уровень графики, разрешение и производительность 3D-игр на MBX Lite был просто немыслимым! Одним из самых легендарных и популярных устройств с 2700G, которое вы можете приобрести достаточно дешево и сейчас, был КПК Dell Axim X51v, флагманская модель с VGA-дисплеем тех лет. Но нельзя сказать, что только PowerVR работала в этом направлении. Параллельно NVidia выпустили GoForce, крайне редко попадающийся в «полноценном» виде (NVidia предлагала дешевле лицензировать только видео-декодер с отключением 3D-части, как это было в Toshiba Portege G900) и ATI Imageon, который чаще всего можно встретить в виде Adreno на ранних Android-чипсетах Qualcomm (Adreno — анаграмма Radeon :)).
Тем не менее, решение PowerVR было действительно массовым: компания не предлагала отдельный чип (что обычно было дороже), как конкуренты, а лицензировала другим компаниям уже готовые IP-ядра, которые производители чипов могли синтезировать и использовать в своих собственных чипсетах, или, сопроцессорах, как в случае с 2700G. Благодаря этому, MBX появился в чипсете TI OMAP 2430, использовавшийся в легендарных Nokia N93i и Nokia N95, Samsung INNOV8, Asus Lamborghini, Nokia E90 и некоторых других. Кроме того, PowerVR MBX использовался в процессоре Samsung S5L8900, судя по всему, разработанный для iPhone 2G и 3G! Благодаря этому, его можно считать одним из первых массовых 3D GPU в телефонах!
Одна из игр для iPhone 2G и N95 — Assasins Creed
И Asphalt 5!
Весьма симпатично, согласитесь?
❯ Под капотом
Но MBX, конечно же, не появился «из ниоткуда» и был основан на более ранних разработках компании Imagination Tech, а именно GPU из полноценной домашней консоли SEGA Dreamcast — PowerVR CLX2, который в свою очередь был основан на ранних десктопных GPU PowerVR из середины-конца 90-х годов. Основная фишка PowerVR была в использовании так называемой техники отложного тайлового рендеринга (TBDR), которая, в отличии от классической растеризации и сортировки с помощью Z-буфера (или ручной сортировки треугольников) всех примитивов «в лоб» (методика, используемая в PSP, PS2 и большинстве видеокарт 2000-х годов), сначала ждёт от программы списка всех рисуемых треугольников в кадре, разбивает весь экран на тайлы (небольшие прямоугольные области), которые содержат в себе информацию о пересекающихся треугольниках, а затем процессом, несколько схожим с рейтрейсингом, определяет, какой из пикселей треугольника ближе всего находится к камере наблюдателя. Таким образом, мы избавляемся от необходимости сортировки геометрии с помощью Z-буфера (который сам по себе занимает достаточно много, по меркам тех лет, памяти и страдает от проблем точности и Z-fighting'а), а также такой метод позволяет реализовать более дешевый альфа-блендинг без ручной сортировки полупрозрачных примитивов и имеет ещё одну приятную фишку — «бесплатный» Occlusion Query, который можно использовать для реализации продвинутых техник отсечения невидимой глазу геометрии.
Производительность PowerVR MBX была весьма достойной для своих лет: при частоте работы в 200МГц, видеочип обеспечивал филлрейт в 100Мп, обрабатывал до 1млн треугольников в секунду. Нативным графическим API MBX был OpenGL ES 1.1 — специальная урезанная версия OpenGL для встраиваемых устройств, из которой выбросили все ненужное и которая заточена не только под floating-point, но и под fixed-point арифметику. В остальном, особо никаких отличий для программиста по сравнению с обычными GPU не было, можно было без проблем портировать уже существующие приложения для десктопого OpenGL для мобильные девайсы, чем и пользовались энтузиасты при портировании Quake 3 на Nokia E90, КПК и другие девайсы. Также, PowerVR MBX поддерживал D3DM — графический API Windows Mobile, о котором мы поговорим позднее.
Однако PowerVR MBX был GPU с фиксированным конвейером (FFP), а не программируемым, как принято в современных 3D-ускорителях. Что-же такое программируемый и фиксированный конвейер? Давайте разберемся:
Фиксированный конвейер: для того, чтобы задать визуальную составляющую рисуемой геометрии, программист оперирует набором заранее определенных при проектировании видеочипа параметров, которые позволяют управлять внешним видом растеризуемых примитивов. Например, для реализации света, программист задает параметры каждого из 8 источников света влияющих на рисуемый объект. Если программисту необходимо наложить несколько текстур за один проход (например, для реализации плавных переходов текстур на ландшафте или нанесения карты отражений на модель), он оперировал комбайнерами, которые позволяли задавать для каждого сэмплера параметры наложения. Такой подход использовался на десктопных GPU эпохи до GeForce 3 (т. е. примерно до 2000 года), до PS3 на Sony PlayStation (Xbox сразу вышел с GeForce 3) и до PSP включительно на портативках. Очевидно, что такой подход сильно ограничивает программиста в том, как будет выглядеть его игра на той или иной видеокарте.
Программируемый конвейер: в программируемом подходе, для управления визуальной составляющей программист пишет небольшие программы для видеокарты, называемые шейдерами. Всего есть два базовых (в современных GPU их больше) этапа программируемого конвейера: первый из них — вершинный шейдер, отвечающий за трансформацию геометрии (перевод из мировой системы координат в экранную) и, например, анимацию. Трансформированные вершины отправляются в следующий этап конвейера — растеризацию, где выполняется уже пиксельный шейдер, который определяет цвет пикселя (или более корректно — фрагмента в терминологии 3D графики) — т.е например, окрас объекта в определенной цвет, текстуру (или несколько текстур), рассчитывает попиксельное освещение, накладывает тени и т. д. Кроме того, такой подход позволяет реализовать сложные техники типа Ambient Occlusion, SSR, а также пост-эффекты (например блюр/блум, правда эти два можно «сэмулировать» и на FFP при определенной сноровке).
К 2007 году, Khronos выпустили спецификацию второй версии OpenGL ES, которая добавляла в мобильные устройства поддержку программируемого конвейера и шейдеров. Таким образом, мобильные GPU всё ближе приближались к уровню консолей и могли выдавать вполне годную графику, близкую к консолям. Даже была когда-то такая консоль, как Zeebo, которая работала на базе смартфонного чипсета Qualcomm с графикой ATI Imageon (!). PowerVR уже в 2009 выпустила серию SGX, которая также использовалась в iPhone, iPad, многих Android-смартфонах и планшетах, а также PS Vita!
Modern Combat 3 на iPad
Но статья с пересказом фишек PowerVR MBX была бы не особо интересной без практической части с написанием 3D-игры под этот GPU с нуля! Поэтому предлагаю посмотреть на нашего сегодняшнего гостя, легендарный флагманский КПК Dell Axim X51v из далекого 2005 года! Для тех лет, это настоящий «жир»:
Его мне подарил мой читатель Сергей с Хабра, за что ему огромное спасибо! Девайс был в полной комплектации, даже с флэшкой и усиленной АКБ, которая до сих пор неплохо держит заряд, однако у него не работал тачскрин. Если вам интересен только процесс программирования игры, а не аппаратного ремонта, то листайте ниже сразу до следующего абзаца :)
❯ Практическая часть: ремонтируем КПК
По факту, девайс полностью работал, однако в некоторые моменты времени не откликался на кнопки и тачскрин, и по всем симптомам это напоминало дребезг кнопок. При этом тачскрин сам по себе реагировал нормально во всех местах, что, фактически, исключало вероятность его поломки (хотя резистивные тач-панели сами по себе не особо надежные, в отличии от емкостных тачскринов). Дело было вот в чём: во многих КПК тех лет был отдельный аппаратный переключатель блокировки клавиатуры и тачскрина, который можно было использовать при просмотре фильмов. Однако на моем девайсе он был слишком разболтанным…
Разбирается КПК несложно: выкручиваем 4 винта и снимаем переднюю часть корпуса. На всякий случай я прочистил грязь между тачем и верхней частью корпуса — она тоже бывает влияет на ложные нажатия и чувствительность тачскрина:
А вот и виновник наших проблем: рычажок переключателя был отломан, но все еще находится в положении «разблокирован». Даже если в выжать в упор — он все равно не работал. Ну что ж, фен в руки, сдуваем переключатель и ставим вот такую перемычку (на фото флюс ещё не отмыт):
Включаем девайс и смотрим — теперь всё работает! Вот такой простой и быстрый ремонт Axim'а. КПК мне сразу очень понравился, я и ранее знал о его легендарности, но теперь узнал и о том, что он очень круто спроектирован и собран! Кстати, есть смысл сразу сдуть концевой выключатель, который прижимает задняя крышка и заменить на перемычку. GPU не очень хорошо работает на кастомных прошивок, на которую прошиты многие Axim X51v. Поэтому есть смысл прошить сток: качаем прошивку (Файл отката), закидываем на SD-карту и ребутим девайс нажатием клавиш Wi-Fi + включение + Reset. После этого, девайс пойдет прошиваться.
Теперь девайс чистый, как с завода! Можно приступить к написанию небольшой демки-игрушки, которая сможет продемонстрировать нам перспективы нашего КПК в 3D!
❯ Практическая часть: подготовка
Изначально, в практической части статьи должна была участвовать не менее легендарная Nokia N95. Однако вот незадача: несмотря на то, что под Symbian сохранился SDK (который работает нормально только под Windows XP), на устройствах с системой старше 9.x необходимо взламывать installserver, дабы иметь возможность ставить хоумбрю программы (к которым относится и наша игра) и отладчик TRK.
И хотя свой девайс я пропатчил, дебаггер нормально поднять мне так и не удалось. Я смог проинициализировать контекст GLES, запилить примитивный рендерер с загрузкой ассетов из памяти устройства но потом решил перевести проект на WinMobile… Проблем с разработкой под Symbian много: если приложение крашится — то оно просто закрывается, без сообщений и логов. Добавьте к этому то, что в Symbian вообще нет исключений и не всегда можно записать ошибки в лог и отладка превращается в ужас. Ситуацию исправляет Qt, который работает на N95, но в котором нет поддержки GLES (по крайней мере, в виде обычного QOpenGL, хотя возможность юзать API системы из Qt есть и дебаггер там работает нормально, так что не всё потеряно). Если вы когда-то что-то пилили под Symbian, особенно в Carbide — пишите свой опыт в комментариях, интересно почитать :)
WinMobile не менее интересен тем, что в нём поддерживается сразу два графических API: классический OpenGLES в профиле Common Lite (только fixed-point арифметика) и мобильная версия Direct3D — D3DM.dll, которая предоставляет API очень похожее на DX9, но без поддержки шейдеров. Что не менее приятно — есть официальные биндинги от Microsoft к D3DM в .NET Compact Framework, что позволяет легко писать 3D-игры под WM на C#/VB.NET. Поскольку WinMobile — достаточно открытая для пользователя система, хватит лишь накатить VS2005/2008 на машину с WinXP/WinVista/Win7/Win8 и сразу начать разрабатывать под неё приложения, никаких проблем с отладкой и запуском приложений тут нет. На Win10/Win11 совместимость с WM5 поломали :(
Создаём приложение для смарт-устройств, выбираем в качестве целевой платформы WM5-устройство (эмулятор будет слишком медленным для наших целей, он даже для 2D-игр не подойдет) и, наконец-то, приступаем к написанию игры!
Что же за игра у нас будет? Я решил сделать эдакое 3D-переосмысление популярного в прошлом бесконечного раннера из «тетриса», где мы едем на машинке F1 и обгоняем другие машины, стараясь в них не врезаться. Основной целью является набрать как можно больше очков. Подобные игры достаточно популярны на мобильных девайсах и сейчас: вспомнить хотя-бы Highway Traffic, однако мой вариант будет весьма колоритным: ведь в моей демке мы будем кататься на ТАЗе 21099 и уворачиваться от гнилых «вторых гольфов». Ну а почему бы и нет, я просто очень люблю старые гнилые жигули и это не первый мой проект про машины этого производителя :)
❯ Практическая часть: «движок»
Как и у настоящей машины, у каждой игры должен быть собственный движок! Однако в случае конкретно нашей игры, это скорее небольшой фреймворк, который предоставляет ровно тот функционал, который нужен игре без каких либо излишеств. Необходимо изначально распланировать требования для будущего фреймворка, дабы написание игры не скатилось в процесс, известный в узких кругах как «движкописание» :)
Рендерер: с графической точки зрения, фреймворк должен реализовывать весьма небольшой функционал. Загружать геометрию и текстуры из файлов в специально-подготовленном формате, реализовывать концепцию камеры, отрисовывать статическую геометрию, а также спрайты и текст, реализовывать примитивную систему материалов, которая позволяет наносить на геометрию текстуры, красить их в определенный цвет и управлять повершинным освещением, а также наносить на геометрию отражения с помощью специально подготовленных enviornment-текстур. Кроме того, рендерер должен уметь рисовать симпатичное анимированное небо в виде полусферы.
Звук: воспроизведение wav-звуков и музыки из файлов. Да и всё пожалуй — что ещё нужно от звуковой подсистемы? :) Стерео ведь нет, поэтому и 3D-звук не нужен.
Ввод: обработка нажатий на тачскрин и аппаратные кнопки устройства, маппинг кейкодов в виртуальный «геймпад». GUI-подсистему тоже частично можно отнести именно сюда!
Физика: AABB и Sphere vs Sphere столкновения. Никакого полноценного солвера тут и не нужно :)
Начинаем, пожалуй, с реализации рендерера. Сначала нам необходимо создать окно и контекст D3DM. Процесс практически идентичен D3D8 и D3D9: передаём информацию о нужном адаптере (видеочипе) и заполняем структуру PresentationParameters, однако есть важные нюансы: аппаратный FSAA лучше всего отключить (MultisampleQuality), а также передавайте точный размер окна, в которое собираетесь рендерить изображение, иначе система начнёт софтварно (!) скейлить рендертаргет до размера окна каждый кадр, что, как сами понимаете, крайне медленно.
Из форматов Depth-Stencil форматов поддерживается D16, D24S8 и D32. Желательно использовать D16 (несмотря на тайловую архитектуру, насколько мне известно, в MBX все равно есть fallback до классического рендеринга при некоторых условиях). Практически на всех КПК и коммуникаторах использовался 16-битный цвет, т.е RGB565, но можно указать Unknown — тогда GAPI подцепит тот формат пикселя, что используется в остальной системе.
Переходим сразу же к рисованию геометрии! Для начала рендеринга, нам необходимо подготовить состояние контекста: посчитать и установить матрицы вида (т. е. камеры) и проекции для трансформации геометрии, задать рендерстейты (список состояний, например нужно ли рисовать модельку с освещением, или нет), очистить экран и Z-буфер и установить параметры фильтрации текстур. Перспективная коррекция текстур — достаточно тяжелая операция и использовать её стоит лишь при необходимости:
public void EndScene() { device.EndScene(); device.Present();
System.Threading.Thread.Sleep(16); }
Чтобы какую-то модельку нарисовать, нам нужно сначала её загрузить! Для возможности напрямую прочитать треугольники из файла и сразу записать их в вершинный буфер, я написал небольшой конвертер из формата SMD (GoldSrc) в собственный, очень простой и легковесный формат, который состоит из позиции вершины и её текстурных координат:
foreach (SmdTriangle triangle in mesh.Triangles) { for (int i = 0; i < 3; i++) { writer.Write(FloatToFixedPoint(triangle.Verts[i].Position.X)); writer.Write(FloatToFixedPoint(triangle.Verts[i].Position.Y)); writer.Write(FloatToFixedPoint(triangle.Verts[i].Position.Z));
Обратите внимание, PowerVR MBX оперирует fixed-point арифметикой! D3DM, конечно, может автоматически преобразовывать float-координаты вершин в числа с фиксированной точкой, вот только реализовано это криво и косо: драйвер будет конвертировать все вершины в fixed-point каждый вызов отрисовки, вместо того, чтобы один раз преобразовать их после Unlock'а вершинного буфера. Теперь представьте, насколько это тормозно для хоть сколь-либо комплексной модели :)
При этом загрузчик модели при таком подходе будет очень простым и будет работать шустро даже на таком слабеньком железе:
public Model(string debugName, Stream strm) { BinaryReader reader = new BinaryReader(strm);
int hdr = reader.ReadInt32(); int numVerts = reader.ReadInt32(); int vertSize = 20;
Переходим к текстурам. Грузить напрямую png/jpg на КПК слишком долго, поэтому их я тоже перегоняю в собственный примитивный формат, который состоит из описания ширины/высоты, а также формата текстуры и собственно, самих пикселей. На данный момент поддерживаются только RGB565 текстуры — с ними MBX работает лучше всего:
public sealedclass TextureConverter { publicconstint Header = 0x1234;
Загрузчик тоже получился примитивным и шустрым донельзя, пусть и без какой либо компрессии. PowerVR MBX поддерживает собственный формат компрессии — PVRTC:
BinaryReader reader = new BinaryReader(strm);
int hdr = reader.ReadInt32(); int fmt = reader.ReadInt32();
Handle = new Texture(Engine.Current.Graphics.device, Width, Height, 1, Usage.Lockable, Format.R5G6B5, Pool.VideoMemory);
int pitch; GraphicsStream gs = Handle.LockRectangle(0, LockFlags.None, out pitch); gs.Write(data, 0, data.Length); Handle.UnlockRectangle(0);
strm.Close();
Переходим, наконец, к фактическому рисованию модели! Для этого мы строим мировую матрицу для трансформации нашей модели, а также задаем вершинный буфер для, собственно, вершинного конвейера и посылаем видеочипу команду отрисовки. ZBufferWriteEnable нужен для отрисовки геометрии без записи в Z-буфер, что можно использовать, например, для реализации скайбоксов:
public void DrawModel(Model model, Transform transform, Material material) { Matrix matrix = Matrix.RotationY(transform.Rotation.Y * MathUtils.DegToRad) * Matrix.Translation(transform.Position); device.SetTransform(TransformType.World, matrix);
void Start() { model = Model.FromFile("model.mdl");
mat = new Material(); mat.Diffuse = Texture2D.FromFile("test.tex"); }
void Update() { t = new Transform(); t.Position.Z = 150; t.Rotation.Y += 0.1f;
graphics.DrawModel(model, t, mat); }
Результат: у нас есть крутящийся кубик или любая другая произвольная 3D-модель!
Переходим к обработке ввода. Тут ничего сложного нет, ловим события KeyUp/KeyDown формы и назначаем виртуальным кнопкам их состояние.
public Input(Form parentForm) { keyState = newbool[(int)GamepadKey.Count];
parentForm.KeyPreview = true;
parentForm.KeyDown += new KeyEventHandler(OnKeyDown); parentForm.KeyUp += new KeyEventHandler(OnKeyUp); }
private GamepadKey ResolveKeyCode(Keys key) { GamepadKey k = GamepadKey.Count;
switch (key) { case Keys.Left: k = GamepadKey.Left; break; case Keys.Right: k = GamepadKey.Right; break; case Keys.Up: k = GamepadKey.Up; break; case Keys.Down: k = GamepadKey.Down; break; case Keys.Return: k = GamepadKey.OK; break; }
Теперь мы сможем управлять нашей машинкой в игре (которой пока ещё нет). Самая-самая основа для реализации игры подобного плана у нас есть, пора переходить к геймплею!
Моддинг девайсов — тема очень широкая и невероятно интересная. При желании, чего только не сделаешь со своим любимым устройством: можно кастомизировать и преобразить интерфейс девайса, портировать свежую версию системы, прошить ядро с разгоном ЦПУ… Однако помимо программного моддинга, существует и аппаратный: умельцы умудряются наращивать объем ОЗУ и постоянной памяти, менять дисплеи на более качественные и даже добавлять поддержку беспроводной зарядки/квикчарджа! Предлагаю вам взглянуть на относительно редкую, дорогую, но такую желаемую в нулевых модификацию: наращивание ОЗУ на КПК аж в два раза! Сегодня мы с вами: узнаем предысторию моддинга телефонов в нулевых, самостоятельно перепаяем чипы ОЗУ на модули большего объёма, а также разберемся в программной стороне этого вопроса. Интересно? Тогда добро пожаловать под кат!
❯ Предыстория
Пожалуй, КПК и коммуникаторы на Windows Mobile можно назвать одними из самых интересных девайсов из середины нулевых годов. Пока подавляющее число пользователей только-только пересело на кнопочные телефоны с цветными дисплеями и поддержкой WAP-интернета, владельцы КПК носили в кармане полноценный компьютер, который мог выполнять многие задачи своего «большого брата». Сёрфинг полноценного Web 2.0 интернета, редактирование и просмотр документов, прослушивание музыки и воспроизведение видео и конечно-же игры — для портативного девайса в середине нулевых это было очень круто!
i-Mate jasjar
Характеристики КПК были практически идентичными на всех устройствах: большинство девайсов работало на базе ARMv5 процессоров Intel PXA 27x с частотой 400-600МГц, Samsung S3C6410 ~400МГц, а также TI OMAP 850 на частоте ~200МГц, оснащались ~64Мб встроенной Flash-памяти и 64-128Мб оперативной памяти SDRAM. Самым ценным ресурсом была оперативная память: большинство устройств на базе PocketPC 2003 так или иначе не могли использовать встроенную Flash-памяти для хранения пользовательских данных. Девайсы с 128Мб ОЗУ ценились гораздо выше более доступных устройств с 64Мб ОЗУ.
Происходило это из-за того, что Flash-память в те годы была слишком медленной, что негативно сказывалось бы на производительности всей системы. Поэтому производители устройств пошли на хитрый шаг: они решили использовать некоторый объём ОЗУ в качестве диска для пользовательских данных, а дабы пользователь не потерял важные ему файлы при, например, замене аккумулятора, они реализовали схему отдельного запитывания модуля обновления DRAM от резервной батарейки.
Динамическая RAM устроена так, что требует процедуру регулярного обновления (термин называется RAM refresh) данных во всей банке памяти в определенные промежутки времени. Упрощенно эта процедура выглядит так: контроллер памяти в чипсете вычитывает информацию из каждой банки, а затем записывает обратно, благодаря чему информация в банке памяти не теряется. Именно для этого контроллеру ОЗУ необходимы настройки таймингов, а также для процесса, именуемый «тренировкой памяти».
Поэтому в Windows Mobile был предусмотрен отдельный «бегунок», отвечающий за объём памяти, выделенный для программ и для пользовательских данных. Хочешь запустить одновременно TouchFlo, Скайп, Аську, PocketIE и гонять в фоне музыку? Готовься переносить фотографии любимого кота на SD-флэшку и тянуть бегунок в сторону программной памяти! По умолчанию, система выделяла около 32Мб памяти под пользовательские данные и остальные 32Мб под программы. Пользователь мог выделить до ~48Мб ОЗУ для программ, чего действительно хватало для параллельной работы нескольких относительно тяжелых программ в фоне!
Однако КПК на «винде» — отнюдь не современные устройства на Android и iOS и сами программы без крайней необходимости из памяти не выгружают. В iOS и Android практикуются «скриншоты» программ, когда в диспетчере задач мы видим сохраненное состояние приложения, но по тапу приложение снова запускается и быстренько восстанавливается из ранее сохраненного состояния. Поэтому, если в устройстве заканчивалась память для программ, уже открытые приложения могли крашиться, а новые не запускаться из-за слишком малого объёма свободной ОЗУ.
Устройства на WinMobile замечательно поддавались моддингу: некоторые энтузиасты портировали более свежие версии системы, другие выпускали собственные сборки системы, подчищенные от ненужных, по их мнению, программ, дабы освободить ещё немного ОЗУ под собственные приложения. Программный моддинг был очень развит: вспомнить только «кухни» — специальные наборы программ для модификации прошивок устройств и целые ветки на форуме 4pda, где обсуждалось добавление нового функционала в девайс. Чего-уж говорить, я сам год назад добавлял поддержку Direct3D Mobile в WM2003 и подкидывал софтварный рендерер от Intel в устройство на OMAP850!
Год назад я за пару дней запилил «тридэ» леталку, использующую D3DM — софтварный рендерер в Windows Mobile.
Однако другое дело — это аппаратный моддинг, связанный с физическим вмешательством в плату устройства. Самым частым модом была замена вечно ломающегося концевого выключателя (маленький рычажок, который прижимает задняя крышка устройства. Без него девайс чаще всего не включался) на обычную перемычку, дабы девайс не подвёл в самые ответственные моменты. Другой мод — перепаковка аккумуляторов для увеличения его ёмкости. Были ещё и другие, специфические модификации — насколько я знаю, на некоторых коммуникаторах Rover радиомодуль частенько «отваливался», а девайс уходил в белый экран. Радиомодуль либо выпаивали, либо грели (а то и перекатывали), дабы он ещё поработал какое-то время. Однако самым редким, дорогим и желанным многими модом было увеличение объёма ОЗУ! Данная процедура довольно простая, однако проводилась чаще всего в мастерских: старые чипы памяти выпаивались, а на их замену припаивались новые, большего объёма. На словах все просто, однако на деле далеко не каждый мог провести такую процедуру дома: необходимо было купить чипы памяти (которые стоили около 500 рублей за один), а сами они были в корпусе BGA и для пайки необходим был паяльный фен (на строительный тоже можно было посадить — но рискованнее) и адекватный флюс для BGA (хотя я слышал истории, как мастера в нулевых сажали чипы «на пузо» чуть ли не на таблетке аспирина).
Как видите, цена на работу в СЦ была не менее 3.000 рублей, время работы — полчаса-час. Теперь вспомните, что в некоторых регионах зарплата была около 6-7 тысяч рублей в месяц… вот так вот :)
Недавно я и сам заинтересовался таким видом моддинга и решил повторить опыт умельцев из нулевых: мне удалось найти НОВЫЕ (не реклама, это единственный магазин где можно купить эти чипы в РФ) чипы памяти в блистере по 100 рублей за штучку. Давайте же проапгрейдим легендарный коммуникатор своих лет — QTek S100 aka O2 Xda Mini II aka MDA Compact!
❯ Апгрейдим
Подобному апгрейду поддаются далеко не все девайсы. К сожалению, фактически проапгрейдить можно устройства только на базе чипсетов Intel PXA, например Asus P525/550, ранние HTC и многие HP iPaq. Устройства на базе Samsung S3C6410 имеют 64Мб ОЗУ прямо на одной подложке с чипом без площадок под дополнительную память на плате, а про устройства на OMAP 850 известно мало: скорее всего, чип не поддерживает возможность использования сразу четырех банок памяти одновременно.
Этого красавца проапгрейдить не выйдет :(
Изначально с завода, на большинстве устройств с чипсетом PXA используется два чипа мобильной SDRAM памяти типа HYB25L256160AC, производства Infineon, в корпусе BGA, по 32Мб каждый. Однако существует 64Мб версия того же чипа с идентичной распиновкой, где в одном чипе расположилось сразу две банки памяти, по 32Мб каждая. По итогу нам остается только сдуть старые чипы с помощью фена, почистить посадочные площадки от остатков старых шаров и установить новые чипы памяти с помощью всё того же фена. Давайте приступим!
Я купил свой QTek S100 два года назад в состоянии «как из помойки», всего за 100 рублей. Без шуток, возможно продавец действительно посещал свалки и потом продавал по дешевке различные интересные девайсы! Лично для меня в этом нет ничего брезгливого: корпус помыть с мылом, плату почистить спиртом и вот — крутейший девайс снова в рабочем состоянии и вполне чистенький :) Аккумулятора у меня не было вообще и найти донора под перепаковку я даже не надеялся, поэтому запитывал девайс от BL-4C.
Разбираем девайс и видим плату с защитным экраном над процессором и ОЗУ. Сам экран съёмный, выпаивать его не нужно, но дабы аккуратно выпаять чипы памяти и не сдуть обвязку, придётся удалить лезвием «перекладину» на экране.
Выдавливаем под пузо чипов памяти немного флюса для BGA, берём прецизионный пинцет, фен, выставляем небольшой поток воздуха, температуру в 350 попугаев и начинаем выпаивать память по отдельности. Оба чипа сидят на бессвинце, поэтому для того, чтобы чип начал покачиваться, необходимо погреть его некоторое время. Как только чип начал «плавать» при покачиваниях пинцетом, его можно осторожно снимать пинцетом. Если снесли мелочуху, то её можно аккуратно выравнять пинцетом и поставить тем же феном обратно: поверхностное натяжении притянет элемент обратно и он встанет на место ровно, как и должно быть.
Я сначала не думал пилить контент об апгрейде памяти, поэтому фоточка совсем всратая :( Извините
Зачищаем площадку от старых шаров с помощью паяльника на 350гр и оплетки. Впрочем, шары достаточно большие — можно просто покатать шарик припоя и собрать излишки на паяльник, идеально ровно зачищать их не нужно.
Наносим флюс на посадочные площадки, примерно центрируем чип на плате и начинаем греть. Если вы не перелили флюса, благодаря поверхностному натяжению чип сам встанет на место! Почти по заводу!
Но девайс не увидит всей ОЗУ, если не поставить резистор номиналом ~0.33Ом на линию CS1 - именно она отвечает за выбор второй банки в одном чипе памяти. Можно попробовать и просто перемычку поставить, но я не гарантирую результат.
Но это не весь моддинг на сегодня! Чуть позже я кинул нормальную, красивую перемычку вместо концевого выключателя, а также перепаковал аккумулятор, установив банку от BL-4C. Она, конечно, меньшей емкости, но девайс всё равно с ней держит довольно неплохо. Обратите внимание, что BMS (плату защиты) BL-4C необходимо выпаять: коммуникатор при поиске сети потребляет довольно много, из-за чего BMS BL-4C уходит в защиту.
Включаем девайс и… он работает!
Лучше перепрошить девайс официальной прошивкой: я даунгрейдился еще до замены памяти (до этого стояла прошивка WM6.5 от Cotulla), однако после апгрейда «винда» не всегда загружалась нормально, при том что сама ОЗУ инициализировалась правильно, без каких либо проблем и ребутов. После прошивки всё снова стало нормально. Если хотите накатить кастом — то ставить нужно версию с поддержкой 128Мб ОЗУ.
Обратите внимание, что флэшер вполне честно заявляет о времени обновления в 20 реальных минут времени. В этом вина как USB 1.1, так и медленной флэши.
❯ Программная сторона вопроса
Сейчас мы рассмотрели только физическую часть замены памяти. Но некоторые читатели наверняка спросят, каким же образом коммуникатор определяет всю установленную память, если конфигурация DDR статически слинкована с первичным загрузчиком? На ПК у нас есть SPD— Serial Presence Detection, специальная небольшая флэш-память, в которой хранится конфигурация чипов и общий объём памяти на планке. В embedded-окружении чаще всего конфигурация контроллера памяти хранится в первичном загрузчике (после BootROM) — известном также как SPL.
Загрузчик HTC на устройствах PXA поддерживает несколько конфигураций ОЗУ — как минимум 64Мб и 128Мб. И судя по всему, на манер BIOS на ранних x86 машинах, загрузчик ещё на этапе тренировки ОЗУ проверяет всё доступное адресное пространство: если доступны «верхние» 64Мб ОЗУ, тогда загрузчик передаёт в Windows CE информацию о том, что установлено 128Мб памяти. На коммуникаторах Asus, загрузчик патчили для поддержки 128Мб.
Очевидно что без установки второго чипселекта (линии CS1), контроллер DRAM не сможет обратиться ко второй банке памяти в одном чипе, поэтому его установка обязательна. Иначе загрузчик не видит верхние 64Мб ОЗУ и считает, что в устройстве установлено лишь 32Мб.
❯ Каково пользоваться девайсом теперь?
Давайте глянем, как же девайс работает теперь. Пожалуй, сразу стоит упомянуть то, что у девайса изначально были перспективы к увеличению производительности: помимо возможности увеличения ОЗУ, чипсет легко разгоняется до 624МГц с стоковых 412. Очень даже бодрый результат.
Сначала я решил поиграть в классику. AoE замечательно шла и на устройствах с ~32Мб ОЗУ (т.е ранних КПК), очевидно что и на гораздо более шустром девайсе она будет идти очень хорошо. Хороший способ ознакомиться с классикой RTS, кстати!
Переходим сразу к тяжелой артиллерии. Самыми тяжелыми играми для ранних коммуникаторов считались PocketFallout и Heroes Mobile: они кушали довольно большой объём ОЗУ и что-то запустить параллельно с ними было проблематичным. Не менее тяжелой была Quake 1: игра аллокейтит для себя кучу (динамическая память) в 16Мб. Это был уже серьезный удар по свободной ОЗУ на устройствах с 64Мб памяти, QIP и PocketIE уже придется закрыть:
Но будем честны: ради игр можно было закрыть почти все приложения в диспетчере задач. А как насчет повседневных задач? Давайте откроем кучу приложений и узнаем, какое у нас будет потребление ОЗУ и общая производительность системы:
Не хило, да? Коммуникаторы и сейчас подойдут в качестве звонилок с функционалом смартфона, однако приложения под себя придётся допиливать самому. Благо API очень знакомое: в WinMobile и WinCE у нас самый обычный WinAPI, очень схожий с десктопным, а также есть немного урезанный .NET!
❯ Заключение
Вот таким был аппаратный моддинг девайсов в нулевых. Столько всего можно было сделать, имея лишь базовое оборудование! А ведь если включить смекалку, то можно заюзать КПК и в качестве одноплатников: на подавляющем числе девайсов UART без проблем можно получить с разъема для док-станции, а сама шина без проблем доступна из юзерспейса. Постараюсь развить эту тему в одной из будущих статей.
Информации по апгрейду памяти на КПК очень мало (ведь когда-то это был хлеб для СЦ) и сейчас её можно найти исключительно в архивах. Однако чем больше я посещаю паблики посвященные ретро девайсам, профильные каналы в Телеге и форумы по ремонту девайсов, я вижу всё больше упоминаний таких любимых нами наладонников! Поэтому я постарался систематизировать и собрать в кучу всю необходимую информацию для того, чтобы любой читатель мог и сам провести такую операцию в домашних условиях.
Сейчас мы привыкли с вами, что в смартфонах объём ОЗУ зачастую больше, чем в некоторых десктопных машинах. 6, 8, 12Гб — куда дальше!? А ведь когда-то и 128Мб уже было за счастье :) А какие модификации КПК были у вас и как использовали свой девайс вы? Может вы сами апгрейдили КПК? Пишите в комментариях!
P. S.: Друзья! Время от времени я пишу пост о поиске различных китайских девайсов (подделок, реплик, закосов на айфоны, самсунги, сони, HTC и т. п.) для будущих статей. Однако очень часто читатели пишут «где ж ты был месяц назад, мешок таких выбросил!», поэтому я решил в заключение каждой статьи вставлять объявление о поиске девайсов для контента. Есть желание что-то выкинуть или отправить в чермет? Даже нерабочую «невключайку» или полурабочую? А может, у этих девайсов есть шанс на более интересное существование! Смотрите в соответствующем посте, что я делаю с китайскими подделками на айфоны, самсунги, макбуки и айпады!
Понравился материал? Писать про моддинг ретро-девайсов?
Был у вас КПК/коммуникатор?
Понравился материал? У меня есть канал в Телеге, куда я публикую бэкстейдж со статей, всякие мысли и советы касательно ремонта и программирования под различные девайсы, а также вовремя публикую ссылки на свои новые статьи. 1-2 поста в день, никакого мусора!
Материал подготовлен при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, дабы не пропускать новые статьи каждую неделю!
Выкручивайте остроумие на максимум и придумайте надпись для стикера из шаблонов ниже. Лучшие идеи войдут в стикерпак, а их авторы получат полугодовую подписку на сервис «Пакет».
Кто сделал и отправил мемас на конкурс — молодец! Результаты конкурса мы объявим уже 3 мая, поделимся лучшими шутками по мнению жюри и ссылкой на стикерпак в телеграме. Полные правила конкурса.
А пока предлагаем посмотреть видео, из которых мы сделали шаблоны для мемов. В главной роли Валентин Выгодный и «Пакет» от Х5 — сервис для выгодных покупок в «Пятёрочке» и «Перекрёстке».
Реклама ООО «Корпоративный центр ИКС 5», ИНН: 7728632689
Старый КПК, постоянно включённый в сеть зарядкой. Пока свет есть, КПК не светится (спит). Когда свет пропадает, он просыпается, экран светится. Через некоторое время он может уснуть (без питания от сети), но когда свет дадут, он снова проснётся и не заснёт, пока я не нажму кнопку выключения (согласно настройке). И таким образом можно понять, отключали ли электричество ночью, в моё отсутствие и т.п. См. видео.
Посоветуйте, плиз, как сделать такой датчик из какого-либо старого светильника, ночника и т.п.! Не КПК же постоянно держать в розетке🤣
Данная статья посвящается всем оСёминенным и обРуданным, наРабкоренным и отТрибуненным, а также другим посетителям левацкого кафе «Ле Мраксизме». Помимо выше указанных членов общества, данная статья написана и для нормальных людей. Дополнительно, эта статья является по большей мере сокращённым объединением нескольких крупных статей на английском, список которых будет в конце. В конце же я и объясню, как прочитать некоторые из них, которые в нашей стране недоступны. Приятного чтения.
Часть первая – Шри Ланка
Начнём с простого и самого известного случая «Китайского Империализма». Бедный порт в Шри Ланке, который китайцы по контракту построили порт в 2007 году. Который потом «кровавый тоталитарный капиталистический Китай» «отжал» в 2017 году. Коварный Ху Цзиньтао лично продумал поставить такие условия, что через 10 лет бедную Шри Ланку охватит дефолт и его наследник сможет установить военный контроль над важнейшей точкой страны!.. Риторика может меняться в зависимости от автора публикации, но посыл один – в Компартии Китая сидят математические гении, способные просчитать всё в подробностях на десятилетия вперёд кровавый Китай сделал всё так, чтобы отобрать территорию у бедной страны и использовать её в качестве военно-морской базы.
А что же было на деле? Государство Шри Ланки отдало порт на век, за 1,12 миллиардов долларов, с условием того, что военные корабли в порт не войдут. Карунасена Кодитувакку, посол Шри Ланки при Китае, на минуточку человек, представляющий интересы государства, в интервью, когда задали вопрос о военно-морской базе сказал следующее:
В случае со Шри-Ланкой, с самого начала мы очень четко дали понять китайской стороне, что это только экономическое предприятие. Безопасность порта Хамбантота, безопасность территориального охвата Шри-Ланки в Индийском океане - это целиком дело сил безопасности Шри-Ланки. Китай никогда не спрашивал нас. Мы никогда не предлагали ему это.
Смысл этого простой – Китай не под каким предлогом там свой флот разместить не может, а также порт попросили не китайцы, а само государство острова предложила его. Это вам не Гуантаномо, взятое бесплатно навсегда США, где постоянно тусуются солдаты-разносчики свободы.
Теперь же предлагаю взглянуть на ситуацию в то время. У Шри Ланки 50 миллиардов долларов – долги, что чуть больше половины тогдашнего ВВП страны. Циферки уже невесёлые, ибо всё это надо выплачивать. Из этих 50 миллиардов – 9% долг Китаю, то есть порядка 4,5 миллиарда долларов, а 81% - старым «добрым» империалистическим державам, а в особенности их инструментом давления на страны третьего мира – МВФ, с 16-ю кредитами Шри Ланке. Коммунисты и противоположное им левачьё должны знать, что МВФ выставляет дикие проценты, а также требует изменения министров на неолиберальных. Пораскинув мозгами можно понять, что это не Китай хирургически точно довёл страну до Дефолта, а что это старые друзья-западлоиды наибольший вклад внесли в экономические проблемы страны.
Подытожим. Порт построили задолго до продажи. Получили оный порт в результате предложения Шри Ланки, а китайский «вклад» в экономические проблемы островного государства может увидеть только ярый синофобский либерал, либо левак обыкновенный.
Часть вторая – аэропорт Энтеббе
Уганда... Очередная страна, на которую всем не пофиг просто потому, что вокруг неё раздули шумиху про «Империалистический Китай». В городе Энтеббе, недалеко от столицы государства, Кампалы, Уганда построила аэропорт, на улучшение которого взяла кредит у Китая в 2021. Как вы понимаете, сразу повылазили заголовки, даже от государственных СМИ, в духе «УГАНДА ОТДАЛА КИТАЮ СВОИ САМЫЕ ВАЖНЫЕ ОБЪЕКТЫ», в статьях под которыми естественно про сам кредит дай бог два слова со смыслом.
Кредит в этой ситуации был на 207 миллионов долларов, с ДВУМЯ ПРОЦЕНТАМИ ГОДОВЫХ. Такие проценты не то, что странам дают банки – такие разного рода личностям не дают ни на что. Это жест добрейшей воли со стороны «Империалистического Китая». Как вы думаете, почему же это произошло? Если вы решили, что потому, что китайцы видят, какая ситуация в стране, то поздравляю. Вы либо удаляетесь от левацкого мышления, либо просто здраво мыслите.
Также, в ответ на подобного рода заголовки, последовало заявление от представителя Уганды, Вьяннея Лугия:
Я хочу категорически заявить, что утверждение о том, что аэропорт Энтеббе был отдан за деньги, является ложным. Правительство Уганды не может отдать такое национальное достояние. Мы уже говорили и повторяем, что этого не было. В этом нет ни унции правды.
Вот это поворот. Но смешно то, что гос.СМИ продолжили эту утку разносить в заголовках своих статей.
Что же мы имеем в итоге? Аэропорт не отжали, а кредит был отдан на щедрейших условиях. Простые люди увидев такие заголовки бы вряд ли стали искать доказательство обратного, ибо гос.СМИ жеж страны, а левачьё найдя заявление представителя – старалось бы его максимально скрыть от своей аудитории и громче повторять риторику «Китай Империалист!»
Часть третья – что же в целом по странам-«жертвам» Китая?
В 2001-ом году Китай начал активно «маньячить» по странам третьего мира и «в особенности» Африке. И «маньячит» аж так, что импорты из Африки составляют аж 4% всего объёма торговли Китая. Это либо самыми богатыми на ресурсы странами мира являются Таджикистан и Латвия, либо физически кобальт резко уменьшился в плотности, либо нас обманывают по части «выкачивания всех ресурсов Африки Китаем». Когда мы глянем на китайский экспорт в Африку – увидим, что он вообще 3,5% от всех объёмов китайских экспортов. В плане торговли Китая и стран Африки – воровство ресурсов такое же, как воровство безлимитного вайфая у соседей по этажу. Никакое.
Зато, треть всех строительных контрактов Китай подписывает именно со странами Африки. Интересно почему... Человеку разумному в голову придёт мысль «Наверное потому, что Африка – неразвитый континент», тогда как упоротый левак будет орать про то, что Китай так захватывает ресурсы. Но для упоротого левака выше было написано про объёмы торговли.
Возвращаясь к строительству, большая часть контрактов до недавних пор была на строительство предприятий по добыче ресурсов и инфраструктуры. До недавних пор потому, что в последнее время по части финансирования нагоняет отрасль производства, которое уже с нормальной инфраструктурой и добычей ресурсов развивать надо. Просто потому, что поскольку ресурсы уже добывать куда проще, а развозить их удобно – производить что-то сложное становится легче, а значит можно будет начать выезжать на продаже условных компуктеров.
Но да не будем отходить от главного слова – КОНТРАКТЫ. Почему это слово главное? Да потому, что контракты заключают с СОГЛАСИЕМ ГОСУДАРСТВА, КОТОРОМУ ПО КОНТРАКТУ ЧТО-ТО СДЕЛАЮТ. И по собранной западом, недружелюбным Китаю, информации – в этих контрактах ведёт страна-получатель, а не Китай. Условия ставятся в первую очередь по удобствам страны-получателя. Вот это я понимаю «империализм».
С таким же «империалистическим» подходом Китай активно помогал и помогает самым быстрорастущим экономикам Африки, за период с 2004 по 2015 имея ключевую роль в развитии 15 из 16 оных экономик. На форуме сотрудничества Китай-Африка, представитель КНР заявил, что страна намеренна поддержать развитие индустриализации своих партнёров. То есть стран Африки.
По статистике западных же ресурсов, вклад Китая в развитие оных стран качественно поднимает зарплаты населения, большинство граждан оных стран, вроде Мали и Замбии, где 92% и 72% одобряет действия КНР, с исключениями, в духе Зимбабве, в которой аж 31% не считает КНР лучшим помощником. Зато 48% вполне за Китай, тогда как остальные не ответили, либо отказались от оного ответа.
Китай также за счёт развития инфраструктуры помогает качественно улучшать экономику стран. Он помогает установить региональный и межрегиональный баланс оной экономики, не концентрируя всё в одном супер-дупер богатом городе, а распределяя построенное по всем территориям стран-партнёров. Как вы понимаете, куда лучше иметь средний уровень жизни и трудоустроенности по всей стране, чем условно высокий в одном городе, а в остальных местах голод и болезни, с которыми местные не могут справиться просто потому, что работать они могут только на фермах.
За период с 2000 по 2019 год Китай простил неуплату долгов в размерах 3,4 миллиарда долларов, а также поменял, по договорам и на условиях стран-получателей, кредиты на 15 миллиардов долларов в общем счёте. А недавно, в 2022 году, Китай также простил неуплату 23 долгов БЕЗ ПРОЦЕНТОВ 17 странам Африки. Как вы думаете, что бы было с Африкой, если б так себя вели США, Франция, Британия, Бельгия?..
Что же мы имеем в конце-концов? На словах «империализм», а на деле адекватные, честные торговые отношения, идущие в пользу стран-партнёров Китая. И всё по западным источникам, а не по «кроваво-буржуйским» Китайским. Миф китайского «империализма» в Африке разрушен изучением информации не из новостей и громкоговорителей левацкого движа, а из аналитических центров запада, который, напомню, «совсем чуть чуть» не любит Китай.
Послесловие
Как я уже говорил ранее, статьи все на английском и к некоторым нету доступа в РФ. Что делать, если хочется прочитать оригиналы? В гугле нужно скачать расширение-VPN, такие есть, бесплатные и доступные в РФ. Я лично пользуюсь browsec, ибо это первое, что мне попалось и что не надо оплачивать. Но вы можете и поискать сами, а можете и на комп что-нибудь другое установить. Вроде бы, в опере есть встроенный VPN, но я не знаю, не пользовался.
Вот список работ, использованных при написании данной работы:
https://www.liberationnews.org/why-chinese-debt-trap-diplomacy-is-a-lie/ - статья американской коммунистической партии, что не слепо поддерживает Китай и КНДР, как критикуя обе страны за некоторые их аспекты, так и принимая во внимание то, что действия обеих стран небезосновательны и разумны. В данной статье более простым языком рассказывается о том, о чём говорила предыдущая работа, а также идёт дополнение про аэропорт в Уганде и прощение кредитов. Статья заполнена ссылками на источники.
https://sci-hub.se/10.1016/j.rdf.2018.05.003 - научная работа одного человека. До пятой страницы идёт объяснение методики, с оной по девятой идут таблицы – а после уже и анализ. Тут говорится про пользу китайских инвестиций в страны Африки.
https://docs.aiddata.org/ad4/pdfs/WPS64_Connective_Financing_Chinese_Infrastructure_Projects_and_the_Diffusion_of_Economic_Activity_in_Developing_Countries.pdf - другая научная работа другого человека. Практически, страниц всего 34. До 26 страницы идёт массовая теоретическая работа, необходимая для понимания, что да как работает, откуда и почему взялось, т.д. т.п. Рекомендуется читать только самым заядлым экономистам. Основная информация идёт с 26 страницы, где подводится итог того, что Китай избавляет страны от экономического неравенства в региональном и межрегиональном плане, а также распределяет оную по всей территории оных стран.
В ходе написания статьи, увы, не пострадало ни одного левака, но к сожалению пострадал коммунист, во время готовки обеда, пирожков «Ежовские», сделанных из уйгурских детей, на тесте, замешанном из отнятого у украинских крестьян зерна и слёз балтов, сильно обжёгший руки, но приблизивший репрессии написанием данной статьи
Всем привет, снова) Моя хотелка так и не успокоилась. Цель была выбрана теперь другая - выбрать на авито КПК по лучшему соотношению цена/качество/возможности. Давайте приступим!
Введение
Только посмотрите на цены..... Печально, не правда-ли? Вот и я о том же.
Но не всех людей эти цены могут остановить. Бывают и довольно интересные случаи:
ого, да он просто мажор!
самая дорогая покупка кпк которую мне удалось заскринить
Что же случилось с ценами? Всё очень просто. Люди хотят заработать на коллекционерах в очередной раз) Но у них не всегда получается, некоторые девайсы висят на авито месяцами. И никто цену опускать не собирается. Не только я вижу данную ситуацию, люди не упускают возможность и сметают всё, что хоть немного ниже тысячи рублей:
Итак, данный КПК не имеет Wifi, у него всего 32мб памяти, а джойстик и вовсе отсутствует. В игрушки будет проблематично играть. Собственно, это типичная бюджетка тех времён. К тому же он имеет повреждения по корпусу. Но покупателя это не останавлиает, видимо берут их по какой-то другой причине. Типа "где ты возьмёшь классный КПК за такие деньги?"
Конечно, бывают хорошие варианты и за 1-2к рублей. Но бюджет мой ограничен -500р максимум. Что же в таком случае делать? А ведь КПК очень хочется!
Но что если посмотреть на авито не в разделе электроника/планшеты, а GPS-навигаторы? Хм, я пробовал. Листал очень долго, в основном видел никому нафиг не нужные кирпичи на windows CE. Вскоре начинают попадаться вот такие объявления:
Оказалось что КПК в отличном состоянии в пределах 500р можно найти
Выглядит здорово. И будет в комплекте даже зарядное устройство и диски с ПО для большого брата: ActiveSync, Руссификатор от Макцентра. Вот это да! Цена была чисто символическая - 400р, которая идеально подойдёт по моему бюджету. Но обьявление висит на авито уже наверное более месяца, а девайс никто не взял. Как так? Это такой же КПК на Windows Mobile, только предназначенный чуть-чуть для других вещей. В основном такая штука нужна для того, чтобы висеть на стекле автомобиля и выполнять роль навигатора.
Ситуация выглядит следующим образом
Оказалось всё очень просто. Люди думают что это обычный китайский навигатор который КПК вовсе не является. А коллекционеров такие вещи вовсе не привлекают и они проходят такие объявления стороной. Что-ж, я воспользуюсь этим)
Начало
Короче, я принял решение. Не важно кто сделал данное устройство, самое главное то, что оно будет работать на Windows Mobile, иметь достаточно большой яркий экран не менее 3.5" дюймов, иметь Wifi и bluetooth, а так же неплохой процессор. Mio MITAC p550 идеально подходит под эти требования, и я, не долго думая, решил его купить:
Как навигатор в 2023 году - не очень, давно появились крутецкие Яндекс карты. Но как КПК такая штука очень даже ничего. Толстый пластик, многопозиционный джойстик, защитное покрытие экрана придают данному девайсу дополнительную надёжноть и уверенность в том, что он прослужит долгие годы. Корпус не покрашен, это естественный цвет пластика. Это значит что Mio p550 всегда будет сохранять свой прекрасный внешний вид.
Итак, вот он у меня в руках:
Чтобы эти клавиши загорелись синим при нажатии, мне надо было установить энергопатч. Хорошо что на форуме 4pda была тема этого устройства.
К WIFI зверёк подключаться не хочет. Оказывается, что он не поддерживает WPA2 шифрование. Что же делать? Интернет по блютуз? Гемморой. Но есть ещё один способ - синхронизация с помощью ActiveSync. В таком случае Get Started CD от производителя нам очень поможет.
Программа не захотела работать на Windows 8.1 Пришло время достать своё древнее зло)
Вот он и поможет нам синхронизировать этого зверька. После установки необходимого ПО программа попросила нас перезагрузиться. За кадром я завершил настройку соединения, после чего большой брат сразу же синхронизирует наш девайс и даёт ему доступ к интернету:
Ура, теперь мы можем лазить в интернет. Ещё можно установить браузер Opera, который будет открывать большинство сайтов, включая 4pda, яндекс, википедия, old-dos, и прочие:
А что там по играм? Всё не так уж и плохо. Кроме портированных игр вроде doom и quake есть игры специально для windows mobile. Вот, например, некоторые из них:
SimCity2000 для Pocket PC
Серии игр Asphalt для КПК
Это то, во что я играл. Игр гораздо больше, мне просто лень перечислять) Ещё есть эмуляторы sega, gba, движка mophun и эмуляторы j2me, такие как Jbed, например. Всё это расширяет библиотеку игр для КПК в разы.
Заключение
Мне нравится Windows Mobile. Замечательная многозадачная операционная система, позволяющая делать пользователю всё что он захочет. Можно менять системные звуки, можно хоть весь интерфейс изменить. Программировать под неё так же довольно просто. Если вы не особо шарите в c++ и win32, существует .net compact framework и VS2008, чтобы программировать на C# или Visual Basic. Так же есть много полезных сторонних программ для этой ОС, которые позволяют редактировать реестр, разнообразить главный экран "Today", добавляя на него виджеты. Есть total commander, Pocket RAR, встроенный Pocket Office, Regedit, и даже софт для управления частотой процессора. В моём девайсе установлен процессор от samsung, SC2440 на 400мгц. С помощью программы ClockWizard я могу понижать и повышать частоту даже выше максимальной. Это называется OverClocking. Вот как это выглядит:
Максимальная частота - 420мгц. При этом батарея садится быстрее. Есть ещё AutoScaling который может автоматически поднимать или опускать частоту в зависимости от требований пользователя. Это пригодится если вы, например, хотите убрать тормоза в 3д играх. Так же не стоит забывать что Windows Mobile работает на ядре от WinCE, а это значит что и приложения от WinCE тоже будут работать на этой ОС. Перетаскивать окошки можно, но практического смысла от этого не будет. Кстати, ещё на физические кнопки можно повесить запуск любой программы или действия:
В общем, вещь очень классная, её можно брать с собой и читать новости или книги, играть в игры, выходить в интернет по блютузу, wifi(если очень постараться), или через usb, кастомизировать операционку, подключать различные переферийные устройства(данный КПК умеет в otg) и многое другое. Главное, чтобы аккумулятора хватило, а он тут не совсем съёмный. Крышка на винтике, прикрыта резиновой заглушкой, а сам аккумулятор на разъёме.
В общем, за такие смешные деньги я купил довольно крутой КПК, который уделывает по техническим параметрам многих конкурентов бюджетного сегмента. Пока что меня всё устравивает, покупкой доволен, и всем рекомендую выбирать КПК от Mio. Ведь они надёжные, прочные, имеют неплохие характеристики и стоят недорого, главное найти.
Всех с наступающим новым годом! Спасибо что прочитали!
Если вам кто-то говорит или пишет, что в Китае диктатура пролетариата и строится социализм, то держите "священное" писание изгоняющее "бесов" из сектантов свидетелей социализма в КНР.
Не так уж много людей помнят о такой аббревиатуре, как КПК. Карманные персональные компьютеры появились ещё в прошлом веке и стали незаменимыми помощниками в руках бизнесменов и крутыми девайсами в руках гиков. Ух, если сейчас вспомнить, то на ум приходят как минимум несколько серий: iPaq, Axim, Zaurus, планшеты N-серии от Nokia, Tungsten, Jornada и конечно же, Cassiopeia от японской компании Casio! Сейчас функционал КПК давно переехал в любой современный смартфон, однако в те времена, портативные компьютеры работали на целом зоопарке самого разного железа и различных ОС! Недавно мой читатель из Финляндии всё же смог привезти в Россию большую посылку с подарками, где оказался и наш сегодняшний гость. Сегодня мы взглянем на одну из самых дорогих, крутых и функциональных гиковских штук из 90-х. Встречайте — Cassiopeia!
❯ КПК и какими они бывают
Карманные персональные компьютеры появились ещё в самом начале 90-х годов. Изначально эти аппараты были направлены не столько на гиков, сколько на бизнесменов, у которых была необходимости иметь доступ к редактированию документов в любом месте: например в метро, такси или, если бизнесмен достаточно крут, в лимузине. При этом важно понимать, что портативные компьютеры (в том числе и на x86) существовали и тогда, однако назывались они по другому — HPC. Основным отличием КПК было в наличии сенсорного монохромного дисплея (обычно выполненного по резистивной технологии) и рукописного ввода, который вовсю развивали производители железа тех лет. Концепция виртуальных клавиатур не была развита от слова совсем, не говоря уж о каких-то свайпах, поэтому производители предлагали писать текст прописью, который затем распознавался PDA и превращался в обычный текст.
HPC же был классом совершенно иных устройств и является эдаким предком современных смартфонов с QWERTY-клавиатурой (привет, BlackBerry!). Основным отличием этих гаджетов было наличие физической небольшой клавиатуры, с которой пользователь мог обрабатывать документы. При этом экземпляры начала 90-х годов (которые, в общем-то, можно считать HPC, но сам термин ввела Microsoft с появлением Windows CE во второй половине 90-х годов) зачастую были обычными компьютерами на базе embedded-версий x86 процессоров и работали на DOS, зачастую с какой-либо проприетарной графической оболочкой.
HP Jornada 720. Фото честно «стырил» у @dlinyj,
И по сути именно HPC на x86 оставались основным интересом для гиков — если бы, конечно, не цена. Полноценный компьютер в кармане, на котором можно Duke Nukem запустить — это тебе не хухры-мухры! Массовый интерес КПК начали представлять тогда, когда на них стало возможным запускать сторонний софт. И двумя главными лидерами в этом направлении была Palm с PalmOS и КПК Tungsten, а также Microsoft со своей новоявленной Windows CE 2.0, при этом оставаясь программно частично совместимой с настольными версиями Windows. Почему я говорю именно о CE начиная с 2.0? Потому что 1.0 — это, судя по всему, порт Win9x под MIPS и он не совместим с более популярной CE от слова совсем.
При этом под программной совместимостью подразумевается как возможность портирования десктопных приложений, благодаря довольно большой совместимости WinAPI десктопного и WinAPI CE (та же оконная система, похожее API для мультимедиа, способ обработки ввода и работы с файлами идентичен) за исключением минорных изменений — например, полная интеграция юникода и выкидывание ANSI-версий функций, так и Look n feel системы, которая была очень похожа на Windows 98 и в «сыром» виде обеспечивала практически те же ощущения от работы системы.
Palm же свободно предоставляла SDK и относительно простой API для написания собственных приложений. При этом PalmOS была однозадачной: возможности запустить сразу две программы параллельно не было. Под палм было написано довольно много софта, многие программы распространялись платно. Поэтому CE, в целом, была покруче благодаря наличию поддержки разделяемых библиотек и полноценной многозадачности.
В начале 2000х, Microsoft начнёт развивать КПК (PPC — Pocket PC), коммуникаторы (КПК с радиомодулем и возможностью звонить) и смартфоны (коммуникаторы с физической клавиатурой и зачастую без сенсорного дисплея) в отдельной ветке Windows CE под названием Windows Mobile, где сосредоточится на мобильном Look'n'feel устройств. Помимо этого, Microsoft добавит в Windows CE поддержку 3D-графики с аппаратным видео-ускорением (D3D Mobile), полноценный Windows Media Player, API для написания игр (GAPI) и портирует .NET Framework. Именно в это время появятся такие легендарные серии, как Dell Axim, HP iPaq, КПК от Samsung, устройства от HTC (QTEK, O2, i-Mate). Palm же, к сожалению, со временем разорится и последние настоящие Palm'ы будут работать на базе Windows Mobile. Увы!
Однако устройства на базе Windows Mobile мы уже успели с вами посмотреть. Но, что насчет девайсов гораздо старше? Например, Casio Cassiopeia? Читатель из Финляндии, которого зовут Antti, почти год назад написал мне на мейл и предложил поскребать по сусекам и шкафам, дабы насобирать ништяков и отправить мне большой посылкой! Я конечно же согласился. На один из его подарков мы уже посмотрели — это был ноутбук Fujitsu-Siemens 1998 г. выпуска. Помимо этого, Antti подарил мне еще один Fujitsu-Siemens, Thinkpad и куча всякого разного железа, за что ему огромное спасибо! Посылку было очень сложно доставить в РФ: на таможне с Финляндией сейчас ситуация сложная, поэтому его другу (которому тоже большое спасибо за то, что согласился с этим всем заморочиться и помочь) пришлось везти девайсы по одному, дабы не приняли за «ввоз предметов роскоши» или тем-более контрабанду!
Большое спасибо читателю за такой подгон. Это очень крутые аппараты, которые я сразу же принялся смотреть. Давайте познакомимся с Cassiopeia поближе!
❯ Оживляем красавца
Девайс был разработан и произведен Casio в Японии, о чем нам говорит соответствующая надпись. И это не редкость для японской техники тех лет: например ноутбуки Fujitsu-Siemens тоже производились в Японии!
Сам по себе девайс был полностью рабочим, однако, батарейка CR2032 (которая подпитывает ОЗУ во время отсутствия АКБ) была утеряна вместе с заглушкой. Нам необходимо было всего лишь толкнуть аккумулятор и запустить девайс. Распиновка аккумулятора простейшая: +, термистор и -, поэтому при необходимости, вы и сами сможете смастерить свой аккумулятор. Чуть более поздние КПК общались с контроллером АКБ не меньше, чем это делает свежий айфон.
У устройства присутствует порт для установки в док-станцию, при этом есть возможность зарядки от обычного Jack-подобного БП на 5в. Поскольку крэдла у меня не оказалось, изначально я растолкал аккумулятор с помощью внешнего источника питания. Для зарядки же отлично подходит БП для Sony PSP — проверено! Что занимательно: аккумулятор спустя практически 25 лет всё ещё продолжает немного держать заряд! Пусть его хватает на ~30 минут автономной работы устройства, но все же!
После включения устройства, нас встречает окно настройки устройства: поскольку все пользовательские данные в этих версиях Windows CE хранятся в ОЗУ, после полного разряда аккумулятора и батарейки CR2032, все данные с устройства были удалены.
Девайс просил меня нажать кнопку OK, но я не сразу понял где она была… а ведь оказалась она в фирменном колесике JogDial, предназначенном для быстрого скроллинга! Похожие решения использовала Samsung, Sony Ericsson и HTC.
После этого, нас встречает такой привычный рабочий стол Windows! И Microsoft предлагала работать с ним как есть — с помощью стилуса, при этом сохранялась полная концепция окон из десктопной Windows — у нас есть панель задач, панель уведомлений, мы можем открыть несколько окон на одном экране и перетаскивать их как угодно! Для тех лет это реально здорово. Не то что сейчас в Play Store выходят всякие «Windows 10 Launcher» :)
Давайте же посмотрим на характеристики устройства внимательнее:
Процессор: NEC VR4121 (MIPS R4000) на частоте аж 131МГц
ОЗУ: 32Mb RAM
Flash-память: 32Мб (в E-105), только для прошивки + слот для CompactFlash
Дисплей: 320x240 TN-матрица с резистивным тачскрином. Максимальное кол-во цветов: 65536 (RGB565), что, в целом, даже круче чем некоторые ПК тех лет, которые до сих пор использовали палитровую графику (до 255 цветов). Для тех лет выглядит очень неплохо!
Звук: 2.5мм джек + встроенный спикер + встроенный микрофон — аппарат умел работать в качестве диктофона
ОС: Windows CE 2.11
Внешние интерфейсы: UART, IrDA
Аккумулятор: 1.400мАч, литий-ионный.
Характеристики устройства околотоповые для тех лет. Несмотря на то, что полноценного порта Windows Media Player под WinCE в те года ещё не было, с помощью сторонних плееров на нём вполне можно было слушать очень пережатую музыку в MP3 (и тут вопрос в свободном месте на CF) уже в 1999 году! Вы только представьте себе этот киберпанк: в Московском метро многие едут и слушают кассетные плееры Congli, а вы слушаете музыку с настоящего КПК! Отвал башки…
Можно вспомнить трюк многих владельцев телефонов с нулевых, которые часто слушали треки в midi-версии — т. е. без вокала. Таких треков по 1-2Кб могло поместится в память КПК десятки.
В целом, процессора аппарата должно хватать и на сильно пережатые видео. Тогда просмотром видео в дороге могли похвастаться… Ну, премиум-комплектации автомобилей BMW/Mercedes/Toyota, в которых были полноценные навигационные системы с ЖК-экранами. Насколько мне известно, полностью портативных проигрывателей (не телевизоров) ещё не было. Кроме того, была встроенная софтина для записи голоса. Качество такое себе, но лично я, будучи школьником, ухищрялся с диктофоном и записывал некоторые треки на свой телефон!
Помимо мультимедийной составляющей, девайс мог запускать и сторонний софт с играми, однако вот нюанс: в прошивке нет встроенного полноценного проводника — что странно. Тем не менее, софт предполагалось устанавливать из cab-пакетов с помощью ActiveSync. Немного позже, на Windows CE портировали кучу полезного софта: Putty для удаленной работы с терминалами, эмуляторы игровых консолей и т. п. Есть порты целых игровых движков для квестов 80-х годов.
Косынка
И я бы показал этот софт, если бы у меня была док-станция. Синхронизировать КПК на Windows CE с ПК не проблема: хотя под Windows 10 совместимость с WM6.1 сломали, в виртуалке всё работает нормально. С CF без какого-либо проводника установить софт не выйдет…
ActiveSync в те годы работал не через USB, а напрямую через UART. При этом RS232 преобразователь мог быть встроен в док-станцию.
Что весьма интересно — в Windows CE был реализован полноценный сетевой стек + урезанная версия Pocket IE! Устройство можно было подключить к интернету и просматривать Web 1.0 тех лет, правда никакого Wi-Fi или BT здесь не было, так что подключение шло с помощью последовательного порта к ПК:
Вообще, тогда существовали даже некие PDA-каналы от Microsoft: поддерживаемые сайты могли делать что-то типа страниц с основной информацией, сверстанные для КПК. На первый взгляд идея напоминает WML для WAP, по факту это все еще полноценный HTML-браузер.
Остальной бизнес-функционал подразумевал полную синхронизацию с ПК. Например почту можно было синхронизировать локально и если вам приходит кучу сообщений, вы могли ответить на него сидя в курилке на обеде, а вечером прийти, подключить девайс к ПК и ActiveSync сам отправит сообщение на мейл при появлении интернета. Тоже самое и с заметками, задачами и иными бизнес-штучками!
❯ Заключение
В остальном же, Cassiopeia E-105 — крутейшая штука, которой немного не хватает возможности установки программ без ActiveSync. Карточку CF найти ещё вполне реально, а вот док-станцию для таких HPC… вопрос другой. Впрочем, без синхронизации с ПК время от времени, их никто и не предполагал использовать. Функционал из коробки достаточно близок к Palm Tungsten, однако по факту, Windows CE предлагала ещё более высокие возможности по написанию довольно сложных приложений для такого рода девайсов. Может, у вас когда-то была Cassiopeia?
Тем не менее, аппарат был отнюдь не из дешевых и недоступен многим гикам: розничная цена ~700$ давала о себе знать. Это было около 19.000 рублей: за такие деньги можно было даже автомобиль прикупить! А вам понравилась Cassiopeia?
❯ Роадмап для следующего материала
Недавно я создалTelegram-канал для тех читателей, кто хочет видеть бэкстейджи статей, анонсы и поболтать о ретро-технике в комментариях. Без откровенного мусора — посты 1-2 раза в день и только по делу! Но поскольку не всем читателям нравится концепция каналов, я решил продублировать роадмап следующих статей:
Статья об одноплатном компьютере за… 500 рублей с AliExpress. При этом одноплатник вполне можно считать System on Module, поскольку вам придется сначала его распаять на Evaluation-плате! Посмотрим, на что способно устройство с Cortex-A7 чипсетом, MIPI-DSI-интерфейсом для дисплеев, Wi-Fi и 64Мб ОЗУ «бутербродом» на борту!
Материал о 3dfx Voodoo и написание 3D-игры полностью с нуля. Пожалуй, это будет первая игра, написанная для вуду за долгие годы! Недавно я рассказывал вам о принципе работы первых 3D-ускорителей с точки зрения железа и драйверов, теперь самое время рассказать о том, как это работало с точки зрения разработчика игр!
Рассказ о программировании нативных приложений под новодельные кнопочные телефоны по 500 рублей — Из них тоже могут получится эдакие «одноплатники», которые могут стать самостоятельными сигнализациями, например. И стоят копейки!
Использование SIM900 в качестве самостоятельного микроконтроллера — многие привыкли видеть радиомодули SIMCom как отдельные устройства, с которыми можно общаться только посредством AT-команд. На самом деле, SIM800/SIM900 могут работать как самостоятельные микроконтроллеры. Как? Расскажу в одной из следующих статей!
Подписывайтесь, дабы не пропускать свежий материал почти каждую неделю!
Материал подготовлен при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud , чтобы не пропуска новый материал каждую неделю!