Программирование для Palm в 2017 году
Я, в трезвом уме и доброй памяти, рассказываю как, в 2017 году начать программировать для исчезнувшей платформы.
Шло 12 мая 2017 года. Лежащий снег за окном и включённое отопление навевали мысли о вечном, и мой взор упал на шикарный промышленный КПК под управлением PalmOS.
Терминал сбора данных
Когда-то он мне был отдан, но я им ни разу так и не пользовался. По началу у него не было шнурка для СОМ-порта. А потом в процессе искусственной подпайки к контактам — был оборван шлейф от материнской платы кредла до разъёма порта КПК. Так и лежал мёртвым грузом.
И восхотел я реанимировать данный пальм, а чтобы была мотивация, решил для начала поглядеть какие бывают эмуляторы под linux, дабы посмотреть какое ПО есть и стоит ли овчинка выделки. И с поиском, установкой эмулятора немного увлёкся… Снега, холодная погода мая так повлияли на меня, что я решил попробовать писать для данного КПК. Тем более, что Palm — это КПК моей студенческой молодости, тогда это был безумно крутой гаджет. Тогда я не умел программировать под них, но очень хотел. Спустя больше 14 лет (почувствуй себя старым, ага) — решил таки попробовать это сделать.
Если вам интересно, как эмулировать данный КПК, а ещё лучше писать для него ПО, то поехали читать дальше.
Что же нужно, чтобы начать разрабатывать под Palm?
Этот вопрос может кому-то показаться простым: мол, скачай компилятор и в путь. Да, начать разрабатывать под пальм очень просто. Простота такая же как на всем известной картинке:
Самое забавное, что пользователям Windows либо надо купить компилятор Metrowerk’s CodeWarrior for Palm, либо превратить свою Windows в UNIX с помощью cygwin и далее примерно всё так же как будет описано ниже для linux. Не знаю как сейчас обстоят дела с современными виндами, но путь явно настоящих извращенцев и, судя по множеству форумов и статей, не всем по зубам. Так что дальнейшие действия описываются для Linux Mint (читай ubuntu 14.04). Путь рабочий.
Итак, что же нам нужно для разработки, отладки, проверки нашего ПО:
- Эмулятор Palm (POSE).
- Образ ROM для POSE.
- PRC tools (GCC, компилирующий программы для PalmOS).
- PalmOS SDK.
- PilRC (компилятор ресурсов).
Эмулятор Palm POSE (Palm Operation System Emulator) — программа, которая позволяет запускать всевозможные программы без копирования их на Palm. Что очень удобно. Особенно для тех, у кого Пальма нет, а хочется поиграться с разным ПО. Но эмулятор не будет работать без образа ROM — это, собственно образ прошивки живого КПК. Снять его можно тем же POSE с настоящего КПК, либо скачать в интернете. PRC tools — это, собственно говоря, набор инструментов для компиляции программ (компилятор, линковщик, отладчик). Как это не печально, но PRC tools не будет работать без PalmOS SDK под конкретную версию PalmOS. На то чтобы понять это, ушло пару дней чтения мануалов. Ну и последнее — это компилятор и просмоторщик ресурсов PilRC, штука которая позволяет готовить бинарные файлы отвечающие за отрисовку меню и замены картинок на экране.
В чём сложность?
Всё это можно было взять на официальном сайте palmos.com. Но увы, и ах, фирма Palm умерла в 2010 году (поглощена Hewlett-Packard) и сайт их умер. Большая часть ссылок в интернете — битая. В результате поиск и установка всего ПО превратилась в занимательный квест по поиску пакетов, документации, инструкций, тестирования, который вылился в данную статью.
Путей по получения данного софта достаточно много. Один из джедайских линукс путей был — всё собрать из исходников и даже честно пытался…
Но понял, что это совсем гемморный путь Здесь я буду рассказывать о самом простом и быстром пути (может не оптимальном).
Все пакеты, архивы и ПО, о котором говорится в статье было заботливо собранно в единый архив. Чтобы вы могли даже спустя 10 лет наткнувшись на данную статью, в порыве ностальгии начать программировать для PalmOS.
Эмулятор PalmOS
Самый интересный, и наверное востребованный параграф в данной статье. Собирать программы мало кто будет, а вот попробовать погонять старые игрушки или разное ПО — это пожалуйста.
Для его установки нам понадобится:
- сам эмулятор POSE
- шкурки (skins) различных КПК
- файл ROM-КПК, которого мы хотим эмулировать.
Эмулятор был найден мной вот тут (файл pose_3.5–9.1ubuntu2_i386.deb в архиве).
Скачиваем и устанавливаем его командой
sudo dpkg -i pose_3.5-9.1ubuntu2_i386.deb
Шкурки были найдены вот тут вместе с исходниками POSE. Это файл emulator-skins-19.tar.gz в архиве. Распаковываем данный архив в домашнюю папке и переименовываем её в Skins или skins. В результате внешний вид будет соответствовать реальной железке. Это просто приятный бонус, без которого и так всё будет работать.
Чтобы эмулятор заработал, нужно ему дать файл с ROM. Ромы были найдены вот тут www.mypalm.ru/html/emul-rom.shtml. Лично я использую palmos40-en-m505.rom.
Запускаем POSE из консоли, в той папке откуда брать ROMы, так как данный софт не любит русские буквы. Правой кнопкой тычем на пустом окне, выбираем File-New в открывшемся окне выбираем ROM file и сам файл.
И жмём OK. Если всё сделано правильно, то получаем рабочий эмулятор, в котором можно уже запускать практически любой софт Palm (за исключением работы с железом).
Готовый эмулятор
Самый приятный бонус, что инсталляция программ идёт в два клика и очень быстро, в отличии от установки на живой КПК. Это важно при написании и отладке ПО.
Тулчейн и SDK
Для того, чтобы все начало функционировать, нужно поставить еще несколько вещей. А именно: PRC tools, SDK для palm’а и PilRC. PRC tools — это порт нашего любимого GCC, но с выходным форматом для PalmOS. В SDK находятся несколько библиотек и куча заголовков для Palm API. Наконец, PilRC нужен для компиляции ресурсов. Ниже говорится о том, как установить PRC tools и SDK.
Исходники PRC tools можно найти на sourceforge.net/projects/prc-tools. Это связка заплаток для binutils, gdb, GCC и компоновщика, дающая поддержку PalmOS. Лично ставил ставил по инструкции en.wikibooks.org/wiki/Programming_for_Palm_OS/PrcTools. Инструкция ниже — просто копия её. Можно не заниматься скачиванием пакетов, а просто установить всё из папки в архиве prc-tools:
cd /tmp
#установка эмулятора
wget http://ftp.gnome.org/mirror/cdimage/snapshot/Debian/pool/main/p/prc-tools/prc-tools-arm_2.2.90.cvs20030306-6_i386.deb
wget http://ftp.gnome.org/mirror/cdimage/snapshot/Debian/pool/main/p/prc-tools/prc-tools-doc_2.2.90.cvs20030306-6_all.deb
wget http://ftp.gnome.org/mirror/cdimage/snapshot/Debian/pool/main/p/prc-tools/prc-tools-m68k_2.2.90.cvs20030306-6_i386.deb
wget http://ftp.gnome.org/mirror/cdimage/snapshot/Debian/pool/main/p/prc-tools/prc-tools-utils_2.2.90.cvs20030306-6_i386.deb
wget http://ftp.gnome.org/mirror/cdimage/snapshot/Debian/pool/main/p/prc-tools/prc-tools_2.2.90.cvs20030306-6_all.deb
wget http://old-releases.ubuntu.com/ubuntu/pool/universe/p/pilrc/pilrc_3.2-3_i386.deb
sudo apt-get install libstdc++5
sudo dpkg -i *.deb
Всё, теперь у нас появился рабочий компилятор. Но он нифига не компилирует, так как вместо заголовочных файлов у нас просто заглушки. Нужно установить сам SDK. Разработку планировал вести для PalmOS 3.5 и брал его здесь там же есть и для более поздних версий PalmOS (4-й и 5-й).
Аналогично, можно не заниматься закачиваением файла wget, а просто перейти в папку sdk-3.0 и сделать всё из неё.
#качаем sdk
wget http://web.archive.org/web/20141224205502/http://cdn.xenu.tk/pub/palm-archive/pub/programming/sdk/3.0/sdk35.tar.gz
#подготавливаем папки для него
sudo mkdir /usr/local/palmdev
sudo mkdir /usr/local/palmdev/sdkpalmos-3.5
#распаковываем его
tar -xzf sdk35.tar.gz
#копируем содержимое с правами суперпользователя
sudo cp -r Palm\ OS\ 3.5\ Support/* /usr/local/palmdev/sdkpalmos-3.5/
cd /usr/local/palmdev/sdkpalmos-3.5/
#переименовываем папки в нормальный вид (не знаю почему в архиве назывались вот так)
sudo mv Incs include
sudo mv GCC\ Libraries lib
#САМАЯ ГЛАВНАЯ ОПЕРАЦИЯ!
#Мы говорим нашему тулчейну, где у нас теперь лежит SKD и какой мы используем по умолчанию.
sudo palmdev-prep /usr/local/palmdev/sdkpalmos-3.5/
У SDK есть несколько полезнейших архивов:
- sdk35-docs.tar.gz — архив с документацией. По-моему просто находка!
- sdk35-examples.tar.gz — замечательный архив с примерами. Настоятельно рекомендую их скачать или взять из архива.
На данном этапе мы можем даже собрать примитивный helloword! Создаём файл hello.c. Пишем в него
#include
UInt32 PilotMain( UInt16 cmd, void *cmdPBP, UInt16 launchFlags)
{
EventType event;
char *message = "Hello, world!";
if ( sysAppLaunchCmdNormalLaunch == cmd)
{
WinDrawChars( message, StrLen(message), 55, 74 );
do {
EvtGetEvent( &event, evtWaitForever);
SysHandleEvent( &event);
} while (event.eType != appStopEvent);
}
return 0;
}
И компилируем последовательностью команд
m68k-palmos-gcc HelloWorld.c -o hello
m68k-palmos-obj-res hello
build-prc Hello.prc "Hello" HELO *.hello.grc
Заливаем файл hello.prc в наш эмулятор, запускаем и получаем
Компилятор ресурсов PilRC
В общем-то может показаться, что усё, можно программировать. Так-то оно так, и все программы будут теперь компилироваться, собираться и запускаться, но работать не будут! Так как им ещё нужно компилировать ресурсы. (логично, блин). Для компиляции ресурсов нам нужен сам компилятор PilRC, а для их просмотра PilRCUI. Данный проект жив и здоров, исходники обитают на sourceforge.net/projects/pilrc. Настоятельно рекомендую скачать исходники (есть в архиве), так как там полным полно отличной документации. А сами пакеты мной были обнаружены в старых репозитариях убунты old-releases.ubuntu.com/ubuntu/pool/universe/p/pilrc Для компилятора пакетов нужно скачать файл pilrc_3.2–3_i386.deb (есть в архиве)и установить его командой
sudo dpkg -i pilrc_3.2-3_i386.deb
Просмоторщик ресурсов в моей текущей версии ОС мне установить не удалось. Точнее удалось, но он вылетает с ошибкой (которую я не смог исправить). Привожу примерный вариант установки: для его установки надо установить дополнительные библиотеки. Было потрачено пару дней, чтобы удовлетворить все зависимости. В гугле меня просто забанили.
Надо скачать с сайтов 1 и 2 файлы: ibglib1.2ldbl_1.2.10–19build1_i386.deb, libgtk1.2_1.2.10–18.1build2_i386.deb and libgtk1.2-common_1.2.10–18.1build2_all.deb. Всё это было сложено в папочку либс в глобальном архиве. После этого их ставим
sudo dpkg -i libgtk1.2-common_1.2.10-18.1build2_all.deb libglib1.2ldbl_1.2.10-19build1_i386.deb libgtk1.2_1.2.10-18.1build2_i386.deb
Но, увы, это всё чудо запускается, но при попытке открыть проект — падает с ошибкой сегментирования. Всё это успешно пока работает только в ubuntu 8.04 стабильно ставиться из репозитариев и для просмотра пользуюсь ей, монтируя по SSHFS папку с проектом.
Настоящий графический HelloWord!
Пришла пора показать как написать настоящую графическую программу для Palm! Не буду изобретать велисипед и просто покажу пример из Туториала mobile.eric-poncet.com/palm/tutorial/hello.html
Программа состоит из нескольких файлов:
- hello.bmp — полноразмерная иконка
- hellosmall.bmp — миниатюрная иконка
- hello.c — исходный файл программы
- hello.h — заголовочный файл
- hello.rcp — файл ресурсов (текстовый)
- Makefile — и сам файл сценария сборки
Не буду подробно останавливаться на особенностях разработки и программирования, если будет интересно вы можете сами посмотреть данные файлы в текстовом редакторе. Интересно посмотреть текстовый файл ресурсов, как же он будет выглядить на КПК. Для этого и нужна программа PilRCUI. Скриншот из Ubuntu 8.04
Компилируем всё командой make и заливаем получившийся hello.prc в наш эмулятор.
Иконка
Запуск
Просмотр информации
Окей, скажете вы. Эмулятор — это хорошо, а как же живой КПК? Их есть у меня! Пройдясь по друзьям, смог откопать старого друга, который служил мне верой и правдой в студенческие времена. Palm m100. И там эта программа успешно работает!
Зачем это всё нужно, и что же дальше?
Зачем я это сделал — не знаю. Потому что могу, как в старой доброй картинке.
Меня просто пёрло, вот и сделал. Если вы думаете, что в наше время никто не пишет для PalmOS, то как оказывается это не так. Когда я искал, чтобы прикольного написать, то подумал о игре 2048, в которую рубится половина вагона метро. И как оказалось, есть несколько их версий. Например вот github.com/nizovn/2048.prc
Написана совершенно недавно. Так, что никогда не поздно учиться программировать для пальмов.
О железе
Если вам интересны подобные посты о КПК, и у вас внезапно есть старые ненужные КПК особенно семейства Palm, Psion (с проводом для СОМ-порта), то я с радостью приму их в дар, для написания подобных постов.
Парк КПК c linux, который пришлось раздать…
Например, можно рассказать о том как поставить Debian на Psion, сделать локальный репозитарий и выйти с него в интернет. У меня в ЖЖ можно почитать всякие мои извращения по теме по тегу psion, КПК, jornada, jornada 720
Полезные ссылки:
1. Главный архив с ПО, которое вам не нужно будет искать по всему интернету по битым ссылкам
2. Очень толковое описание на русском архитектуры PalmOS и пример программы
3.Неплохое описание вхождения программирования для Пальмов с живыми ссылками.
4. Отличный туториал программирования графических приложений от самых азов до профессионализма.
5. Различные исходники описанием на русском