Взлом цифровой «мыльницы» на x86 и ROM-DOS
Всем привет!
Помните те самые компактные цифровые фотоаппараты из нулевых годов? Уверен, подобные устройства были у многих, а у некоторых они пылятся на полках до сих пор. Так вот, задумывались ли вы когда-нибудь, какая операционная система и какой процессор скрываются внутри этих «мыльниц»? Как выяснилось, далеко не всегда инженеры ограничивались закрытыми проприетарными решениями, и «начинка» подобного гаджета способна искренне удивить.
Сегодня мы подробно разберем, каким образом можно запускать собственный софт на, казалось бы, совершенно заурядном фотоаппарате. Выясним, что для этого необходимо и какое программное обеспечение вообще существует для подобных ретро-устройств. Будет любопытно!
❯ Суть такова
Наверное, многим знакомо это навязчивое чувство: стоит услышать об очередном техническом артефакте, как тут же возникает непреодолимое желание заполучить его себе. Именно так всё и произошло в моем случае. Обсуждая в комментариях статью @monobogdan о КПК Blackberry на процессоре 386EX, пользователи упомянули, что в прошлом существовали старые цифровые камеры Canon, функционировавшие под управлением Datalight ROM-DOS и процессора с архитектурой x86. По сути, вся графическая оболочка интерфейса, логика обработки снимков и управления камерой представляют собой обычный исполняемый файл CAMERA.EXE, который подгружается из флеш-памяти. А это значит, что для подобных девайсов вполне реально создавать свой собственный код и запускать его. Разумеется, не стоит рассчитывать, что любая попавшаяся под руку программа для DOS заработает на фотоаппарате — из-за специфики распределения памяти прямой запуск невозможен. Тем не менее, потенциал у этого направления весьма высокий, и в былые годы энтузиасты создали немало занимательных утилит.
Вообще, фотографией я увлекаюсь постольку-поскольку, разве что изредка подумываю приобрести зеркалку ради попыток покорить топы известного профильного ресурса, но это скорее несбыточные мечты. Поэтому изначально я пропустил тот комментарий мимо ушей. Однако после беседы с товарищем @dlinyj я осознал, что эта тема гораздо глубже и интереснее, чем кажется на первый взгляд. Для человека, увлеченного редким железом на базе x86 архитектуры, такой аппарат — просто мастхэв. В итоге я загорелся идеей и раздобыл себе экземпляр для экспериментов.
❯ Откуда X86 в фотоаппарате?
На заре двухтысячных годов компания Canon представила специализированный чипсет для своих цифровых камер — DIGIC (Digital Imaging Integrated Circuit). Устройства на его основе выпускаются и по сей день, но сейчас нас интересует самая первая ревизия: DIGIC I (или просто DIGIC без цифровых индексов). Помимо специализированного сигнального процессора и аналого-цифрового преобразователя, этот набор микросхем включал в себя процессорное ядро 80186.

Если разобрать старый аппарат, на печатной плате можно легко обнаружить тот самый чип DIGIC в паре с заказным микроконтроллером от NEC.
Естественно, энтузиасты не смогли обойти стороной столь интересную архитектуру. Вскоре после релиза камер исследователи научились запускать на них самодельные программы: от простейших утилит вроде мониторинга заряда аккумулятора и звуковых сигналов до полноценного тетриса и цветовых анализаторов.

В более поздних поколениях (DIGIC II и далее) всю логику уместили в пределах однокристальной системы. Впрочем, это уже совсем другая история…
❯ Про запуск своего софта на фотоаппарате
Теперь перейдем к самому захватывающему моменту — процедуре запуска стороннего софта на камере. Посмотрев тематический ролик, я поначалу решил, что всё предельно просто:
Самым информативным руководством в сети оказалась вот эта страница (кстати, упоминавшаяся в видео). Помимо пошаговой инструкции, автор поделился небольшим архивом готового ПО.
Несмотря на то, что «мыльница» функционирует под управлением ROM-DOS, перенести туда стандартные приложения для ПК не удастся из-за кардинально иного распределения памяти.

Вот схема памяти фотоаппарата.

А так выглядит карта памяти типичного ПК.
Именно поэтому запустить Doom или классические игры с настольных компьютеров «в лоб» не получится — их необходимо глубоко адаптировать под специфику аппаратной платформы камеры. Так что придется ограничиться более легкими специализированными программами.
❯ Обзор оборудования
Для экспериментов потребуется минимум компонентов: сам фотоаппарат, карточка памяти Compact Flash и компьютер с картридером. Поддерживаются следующие модели:
-
Линейка PowerShot A: A60, A70, A75, A80, A85, A95, A300, A310, A400.
-
Линейка PowerShot G: G3, G5, G6.
-
Линейка PowerShot S: S45, S50, S60, S70 (включая S1 IS).
-
Линейка Digital IXUS / IXY / SD: v2, v3, 400, 430, 500, SD10, SD20.
-
Премиальный компакт: PowerShot Pro1.
-
Цветометрические зеркалки (DSLR): EOS 10D, EOS 300D (Digital Rebel).
Более современные камеры на чипах DIGIC II, III, 4, 4+, 5 нас не интересуют, так как они базируются на архитектуре ARM вместо x86 и используют RTOS вместо DOS.
Сколько же стоит пригодный для опытов экземпляр? Мониторинг вторичного рынка показал, что простейшую модель можно отыскать буквально за пару тысяч рублей. «Пару тысяч? Заверните две!» — подумал я и приобрел сразу пару устройств.

Первым ко мне попал PowerShot A85.
Этот аппарат оказался неисправным — наблюдались проблемы с механизмом выдвижения объектива. Я взял его исключительно ради экспериментов с DOS, понимая, что в случае неудачи устройство будет не жалко. Для таких целей сгодится фотик даже с разбитой линзой или неработающей матрицей, главное условие — чтобы он включался и открывал системное меню.

Дизайн полностью соответствует эпохе начала двухтысячных: массивный корпус, крошечный дисплей, оптический видоискатель над экраном, использование карт Compact Flash (карты SD стали массовыми значительно позже) и узнаваемое расположение элементов управления.
Подробно останавливаться на органах управления смысла нет: любой, кто застал ту эпоху, прекрасно помнит логику работы подобных устройств.

Верхняя панель содержит селектор режимов, динамик и кнопку спуска. Обожаю механику тех лет: все элементы приятно щелкают, вращаются и нажимаются с отчетливым тактильным откликом.

Энергопотребление у камеры солидное — для работы требуется аж четыре пальчиковых элемента питания.

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

На корпусе предусмотрен USB-порт для синхронизации с ПК.

Защитная заглушка отвалилась при первом же прикосновении. Питать устройство допускается и от внешнего сетевого адаптера.

Сбоку расположена крышка отсека накопителя.

Кроме слота для карт Compact Flash, там ничего больше нет.

А это Canon PowerShot A70 — та самая модель из статьи чешского энтузиаста.

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

Верхние панели практически идентичны.

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

Выкрутив все крепежные винты, снимаем переднюю облицовочную панель.
С левой стороны сразу бросается в глаза крупный конденсатор вспышки. Его необходимо в обязательном порядке разрядить, иначе велик риск вывести электронику из строя или получить мощный удар током. Проще всего сделать это с помощью мощного резистора номиналом около 1 кОм, поднеся его выводам к контактам детали. Ни в коем случае нельзя замыкать их напрямую: произойдет сильный хлопок, способный повредить компонент. Учитывайте, что остаточный заряд может сохраняться на конденсаторе в течение нескольких дней.

На шлейфе обнаруживается забавное подтверждение того, что устройство работает под управлением DOS.

Конструктивное исполнение программного переключателя режимов.

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

Плата питания устройства.

Электролит от потеков батарей успел проникнуть довольно глубоко. Никогда не оставляйте элементы питания внутри устройств на долгое время, если не хотите столкнуться с подобной картиной.
На этом этапе я решил прекратить разборку, поскольку не обладаю достаточным опытом ремонта подобной микроэлектроники и рискую окончательно доломать аппарат. Тщательно удалив все следы окисления и солевые отложения, я собрал камеру обратно. К моему удивлению, после сборки девайс подал признаки жизни. Скорее всего, корень проблемы крылся в банальном окислении контактов или мелком мусоре, который случайно выпал во время чистки.
А вот со второй моделью (A70) повезло меньше. Продавец утверждал, что камера полностью исправна, но то ли он лукавил, то ли сказалась небрежная доставка (устройство приехало обернутым всего в пару слоев пленки), однако признаков жизни аппарат не подает — экран не загорается, реакции на нажатия кнопок или легкие постукивания нет.
В этом видеоролике внутреннее устройство камеры показано более подробно.
❯ Как он в плане съёмки?
Конечно же, я не мог не протестировать устройство по его прямому назначению.
Разумеется, подобные мыльницы безнадежно устарели по современным меркам, однако они отлично подходят для передачи специфической атмосферы двухтысячных годов. Если грамотно подобрать антураж, снимки получаются невероятно колоритными для любителей ретро-стилистики.
Ещё фотографии
❯ Запускаем софт
Ну что же, перейдем непосредственно к практической части.
В первую очередь нам понадобится карта памяти Compact Flash подходящего объема, отформатированная в файловую систему FAT32.

Затем в корневом каталоге накопителя создаем директорию DC97, а внутри нее — папку MISC. Именно туда мы будем складывать наши исполняемые файлы.
Каждая программа состоит из бинарника (.exe) и сопутствующего INI-файла с тем же именем. Он необходим для того, чтобы камера распознала приложение и вывела его название в меню. Содержимое конфигурационного файла выглядит следующим образом:
Canon DigitalEye executable:VERSION=0001:Battery 0.4L
Размер этого файла должен составлять ровно 57 байт, иначе программа попросту не запустится. Если остаются свободные позиции, оставшееся пространство добивается пробелами.

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

При соблюдении всех условий подготовленные утилиты появятся в списке наряду со штатным функционалом.
Одновременно на карту можно записать до четырех приложений — если превысить этот лимит, лишние пункты просто перестанут отображаться.
❯ Что тут есть из ПО?
Как выяснилось, для данных камер энтузиасты разработали довольно много полезного софта.

Вот, например, продвинутый индикатор заряда элементов питания.

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

Для данной платформы даже создавали графические демо-ролики.

Из развлекательного софта доступны классический тетрис и пятнашки.
❯ Память
Встроенный файловый менеджер позволяет оценить внутреннюю структуру накопителей камеры.

На диске A находится единственный файл CAMERA.EXE, в котором заложена вся логика функционирования фотоаппарата.

Диск B содержит системную папку DATA с ресурсами вроде иконок и звуковых эффектов.

Диск C в данной модели не задействован.

Ну а диск D — это и есть установленная карта памяти.
❯ Сборка своего софта
Напоследок вкратце затронем вопрос разработки и компиляции подобных программ.
Поскольку камера работает под управлением ROM-DOS, процесс создания софта ничем принципиально не отличается от программирования под обычный DOS-ПК. Давайте попробуем скомпилировать простейшее приложение из исходных кодов и посмотрим на результат.
Для начала скачиваем среду Borland C++. Установка предельно проста: распаковываем архив в папку BORLANDC на системном диске, после чего прописываем путь C:\BORLANDC\BIN в системную переменную PATH.

Затем запускаем среду разработки, переходим в меню Options\Directories и задаем пути к рабочим каталогам. На этом настройка окружения завершена.
Теперь переходим к коду программы. В качестве примера я взял утилиту, выводящую на экран скан-коды нажатых клавиш:
/****************************************************************************/
/* Keys flag view Canon PowerShot A70 */
/****************************************************************************/
/* Created: 1.5.2005 [BORLAND C 3.1] */
/* Last modified: 1.5.2005 [BORLAND C 3.1] */
/* Copyright (C) 2004-2005 by RayeR */
/* Contact: http://www.volny.cz/rayer */
/* Compiler: Borland C++ 3.1, disable Word Alignment, set 80186 code gen. */
/****************************************************************************/
#include "psiolib.c" // PowerShot I/O library 2.0+
DWord key;
int main(void)
{
ps_init();
ps_cls(0,0);
ps_set_pal(ps_default_palette,0);
do {
key=ps_get_key_state();
ps_gotoxy(0,0);
ps_clr_line(0,15);
ps_printf(0,14,0,"KEYFLAG: %08X h\n",key);
ps_gotoxy(0,9);
ps_printf(1,14,0,"Press [MENU] key to exit",key);
if (key!=0)
ps_delay(1000);
} while ((key&PS_KEY_MENU)==0);
return(0);
}
Для успешной сборки потребуется библиотека PSIOLIB (PowerShot I/O), которую нужно скачать с упоминавшегося ранее чешского сайта и положить рядом с исходным файлом.

Компилируем проект и получаем готовый исполняемый файл для переноса на флешку.
Далее создаем конфигурационный INI-файл с аналогичным названием, куда прописываем строчку:
Canon DigitalEye executable:VERSION=0001:Hello app
Текст после двоеточия будет отображаться как пункт меню в интерфейсе камеры. Не забываем про жесткое требование к размеру файла — при нарушении этого условия приложение проигнорируется.

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

Отлично, всё работает корректно!
❯ Что же в итоге?
Конечно же, возможности модификации этим не исчерпываются — для подобных платформ создано немало другого интересного софта. Ну и не стоит забывать про первостепенное предназначение устройства, тем более что снимки получаются атмосферными.
У меня уже появился спортивный интерес попробовать портировать на эту аппаратную платформу какую-нибудь старую игру с ПК. Запустить Doom вряд ли получится из-за скромных вычислительных ресурсов процессора, но поэкспериментировать с простыми проектами времен зарождения архитектуры XT было бы весьма увлекательно.
Вот такие дела.
Может быть интересно:

Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram‑канале ↩
Neuralink продемонстрировала, как парализованный пациент силой мысли передал слова «Я люблю тебя»
Представлен пассивный NAS Minisforum S5 на новейшем пятиядерном процессоре Intel с поддержкой 40 ТБ памяти
SanDisk представила защищенный SSD E31: объем до 2 ТБ, USB-C и скорость 1000 МБ/с
Очереди у Apple Store: новые iPhone 18 Pro раскупают с молниеносной скоростью
Xiaomi выпустила посудомойку на 20 комплектов посуды с паровой сушкой при 115 °C
Ярчайшая Венера украсила небо: планету будет видно до 25 сентября
Для смартфонов Samsung Galaxy S26 вышло ключевое сентябрьское обновление от Google
В Великобритании создают беспроводную зарядку для дронов, способную обеспечить месяцы полета на высоте 20 км