Приветствую всех!
Помните компактные цифровые фотоаппараты‑«мыльницы» из нулевых? Уверен, такие девайсы были у многих, а у кого‑то есть до сих пор. Так вот. Задумывались ли вы когда‑нибудь, на каком процессоре и на какой ОС работают все эти штуки? Как оказалось, иногда всё не ограничивается проприетарными решениями, а то, что находится внутри такой железки, может, очень сильно удивить.

Итак, сегодня поговорим о том, как запускать свои приложения на, казалось бы, ничем не примечательном фотоаппарате. Узнаем, что для этого требуется и какой софт для него бывает. Как водится, будет много интересного.
❯ Суть такова
Наверное, многие из вас испытывали это ощущение: стоило услышать про какой‑то артефакт, как немедленно захотелось его себе. Так и случилось у меня. В комментариях к статье @monobogdan про КПК Blackberry на 386EX упомянули, что существовали древние цифровые фотики Canon, работающие на базе Datalight ROM‑DOS и некоего процессора с архитектурой X86. Да, даже сама оболочка этой мыльницы вместе с пользовательским интерфейсом и всей логикой обработки изображений и управления камерой на деле всего лишь экзешник CAMERA.EXE, запускающийся из Flash. А ещё это значит, что для такого девайса можно писать свой софт и запускать его на нём. Конечно, не стоит ожидать, что можно взять абсолютно любую программу для 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. Туда-то мы и будем записывать наши приложения.
Каждое приложение состоит из экзешника и одноимённого *.ini-файла. Он нужен для того, чтобы фотик опознал этот файл как исполняемый и отобразил его в меню. Содержимое его примерно следующее:
Canon DigitalEye executable:VERSION=0001:Battery 0.4L
Размер этого файла должен составлять строго 57 байт, иначе приложение не запустится. Если ещё остаётся место, лишние байты добиваем пробелами.

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

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

Вот, к примеру, индикатор заряда батареи.

А вот электронная читалка *.txt.

Для этой платформы даже были свои демки.

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

На диске A единственный экзешник CAMERA.EXE — это и есть вся локика фотоаппарата.

На диске B единственная папка DATA, где хранятся ресурсные файлы типа звуков и иконок.

Диск C не используется.

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

Далее запускаем BC, выбираем 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‑канале ↩
iliasam
Ого, даже и не слышал про такое. У меня был очень похожий фотоаппарат, сейчас глянул, а там DIGIC II :(
А какой объем памяти доступен приложению? Есть ли доступ к связи с ПК?