Casio PV-S450 » Программирование » PVOS и патчи к ней »
PVOS и патчи к ней » Программирование » PVOS и патчи к ней »
Операционные системы
Файлы DIFF и операция PATCH.
(сокращенная версия данной статьи есть на сайте Pocket-Viewer.ru - Пользователю).
В продолжение статьи "Формат HEX и переустановка PVOS".
Причина установка на Casio PocketViewer другой Операционной Системы (PVOS) взамен оригинальной - недовольство к реализации некоторых её Функций. Именно поэтому и появляются новые версии PVOS с новыми возможностями, именно поэтому пользователь и делает переустановку. Но программисты иногда разрабатывают нечто дополнительное, что неплохо бы добавить в состав самой системы. Так возникают патчи. Здесь я попробую описать некоторые моменты, касаемые установки на PVOS патчей.
1. Патчи - что это такое.
Патч, как правильно писал Костик Рассказов в своем пояснении к TextViewer-у - это некоторая "нашлепка" к программе, которая вносит в нее другие функции. Кстати, патч - это именно сами изменения, которые пользователь по своему желанию ставит (или нет) на основную программу. Поэтому версии TextViewer-а некорректно называть патчами - это УЖЕ ПРОПАТЧЕННЫЕ ПРОГРАММЫ.
Патчи получили широкое распространение в эру появления Интернета и широкого роста игрушек для IBM PC. Многих тогда интересовали вопросы "неубиваемости", "бессмертия", "неограниченного оружия" и т.д., а то и просто снятия защиты от копирования. Вместо того, чтобы перекачивать новую версию программы со "взломанным" участком, можно было скачать маленький текстовой файл, по которому небольшая программка выполняла необходимые изменения в основной программе. Программку для наложения патчей нужно было скачать всего лиш один раз, а сам патч можно было переписать чуть ли не от руки. Потом появились версии, когда данные патча "зашивались" внутрь выполнимого файла - для удобства пользователя, размер программы и способ ее передачи перестал играть важную роль. Всякие "крэки" (crack) и "сервис-паки" (service-pack) - это тоже патчи.
Но если для какой-нибудь игрушки реализовать "бессмертие" - всего лишь изменить несколько байт (забить командой "NOP" место, где уменьшается "жизнь"), то для PVOS задача стоит более серьезная - добавить в систему некоторых новых функций. К счастью, ОС занимает на весь объем 1 Мб, в ней достаточно свободных дырок. В этих участках и можно зазместить код дополнительных функций.
Именно так реализованы в SSC-PVOS русская клавиатура, патч индикатора батарейки (SSC-PVOS - это ядро оригинальной ОС с множеством установленных причесанных патчей), так реализованы часы в главном меню (от Fatty) для PVOS-1.02. Кстати, замена картинки для экрана выключения или экрана связи - это тоже наложение патча, поскольку картинка зашита в тело самой ОС.
2. Патчи PVOS в файлах формата DIFF.
Патчи для PVOS выпускаются (обычно) в файлах с расширением DIFF. Формат DIFF - это файл протокола сравнения двух файлов HEX, их отличия в наглядном виде. Строки данных в нем имеют тот-же формат, что и в HEX-файлах. Но касательно PVOS его используют для получения новой версии HEX-файла по имеющейся версии и DIFF-файлу. В файле указывается адреса в HEX-файле, старое значение строк и новое значение строк. Замена происходит для всей строки. Если в имеющемся HEX-файле по указанным адресам содержаться не те значения, то "патчер" (программа наложения патча) будет выдавать предупреждения.
Например, мой патч для исправления опечатки "ПоследКие" в SSC-PVOS v.003 можно словами описать так:
- В строке 20019 файла HEX
- значения ":10E2D000 ... ACAAA60002"
- заменить на ":10E2D000 ... AFAAA600FF".
Как видите, все просто, и такое можно сделать даже в текстовом редакторе (если он поддерживает текстовые файлы размером до 3-х Мб). Но этот патч очень маленький, он изменяет только один байт. Большинство патчей содержат десятки изменяемых строк, и вручную это сделать очень сложно. Для автоматизации этого процесса существует программа-"патчер".
Например, на сайте SSC-Group имеется версия от Anleitung zur Verwendung (120 Кбайт, 21.02.2001, www.PocketViewer.de), которой и пользуются многие.
Процесс "патчанья" ОС следующий:
#ln
#i Скачать DIFF-патч для версии PVOS, установленной на вашей машинке;
#i Получить файл вашей ОС в HEX-формате (размер около 3 Мб);
#i Скачать программу PATCH.EXE;
#i Сохранить исходную версию файла PVOS на всякий случай;
#i Выполнить команду из командной строки
> patch.exe PVOS-NNN.hex PATCH-NNN.diff
#i Установить полученную версию PVOS в PocketViewer.
#/ln
Заметим, что некоторые патчи подходят только к конкретным версиям PVOS. Также, патчи могут содержать ошибки, и вдруг Вам может достанется еще неисправленная версия...
Если Вы хотите установить патч именно на ту версию, что установлена на Вашей машинке, то "выкачать" наружу ее можно программой GetOS. Если что-то после установки патча не понравится, то старую версию можно установить обратно.
3. Измение картинок в составе PVOS.
PVOS содержит много графической информации в виде уже готовых изображений (иконок, кнопок, окошек диалога), в том числе - экран, появляющийся при выключении (Off-Screen). Все эти изображения можно менять, при условии, что размер останется в точности тем же. Но произвольно изменять можно не так уж и много - часть картинок довольно мала (менее 16х16) и используется в конкретных программах - "Планировщике", "Заметках", "Эскизах". Но такие изображения, как экран выключения, экран связи, некоторые иконки программ можно вполне безбоязненно изменить по своему вкусу.
Более полно по данному вопросу можно прочитать мою статью на сайте Миляра PocketViewer.ru - Пользователю - "Графика в составе PVOS".
Однако, заменять картинки посредством патчей DIFF очень неудобно - ведь нужно получить патч на основе ОС и файла с новой картинкой. Поэтому для данной операции - замены картинок в ОС - написаны специальные программы, требующие на входе просто BMP-файл.
4. Патчи PVOS в виде исполнимых модулей.
Описанный процесс "патчанья" PVOS через DIFF-файл имеет некоторые минусы:
- - необходимо иметь HEX-файл ОС имеено требуемой версии,
- - после изменений необходима процедура переустановки системы.
При поиске альтернативных вариантов наложения патчей был разработан метод изменения PVOS в самой FLASH-памяти PocketViewer. Суть его в том, что перепрограммировать любой участок FLASH-памяти можно прямо из AddIn-программы, нужно только знать как.
Метод выглядит так: #ln #i создается AddIn-программа, в которую зашивается содержимое патча; #i AddIn-программа BIN-формата устанавливается в машинку; #i AddIn-программа запускается на выполнение и изменяет FLASH-память; #i модуль AddIn-программы удаляется из области программ за ненадобностью; #i получается машинка с обновленной PVOS. #/ln
Данный алгоритм должен был, по идее, сохранять гарантию на машинку, и обеспечивать большее удобство для пользователя. Разработкой пакета патчей такого вида занималась SSC-Group, но после выхода версии PVOS v.003 дальнейшее развитие данного направления неизвестно. Из имеющегося, известного мне, данный формат имеет патч BootStrap.BIN (например, смотри пакет TimeSync от Бойко).
В принципе, выкачав из машинки ОС до установки такого патча и после, можно получить его DIFF-вариант. Перспективы данного направления неясны. Возможно, интересным было бы решение, когда AddIn-программа содержит данные патча не в своем теле, а принимает на входе любой DIFF-файл (или его аналог).
Рямов Сергей /[rss2ly@email.kht.ru|«RSS»]/, г. Хабаровск.