BC/NW 2006, №1, (8) : 17.11
Концепция перевода консольных
приложений
Т.А. Винниченко, А.С. Ярмушов
(Ульяновск, УлГТУ
ИАТУ, Россия)
В данной работе будут отражены основные
положения, требуемые для перевода игр,
программ, сделанных для консолей прошлого: NES(Nintendo entertainment
system), SNES(super n.e.s), GB(game boy),
SMS(sega master systems), а также приложений, к которым возможно
применение адекватных методов перевода, рассмотренных в данной работе.
Прежде
всего, в начале следует сказать о начальных задачах, которые должен поставить
перед собой переводчик: во-первых, выбрать приложение для перевода, во-вторых,
изучить внутреннюю структуру данного приложения, составить индивидуальную
таблицу кодировки символов, в-третьих, найти шрифт и перерисовать его,
в-четвертых, вынуть текст из ROM’а, в-пятых перевести данное приложение
с иностранного языка на родной(русский, например). В-шестых, вставить текст
обратно в ROM. В-седьмых, переведенное приложение подвергать
тестированию на наличие ошибок и последующей корректировки. Но не всегда
процесс перевода можно описать подобным образом, очень часто текст или/и шрифт
бывают запакованы особым алгоритмом, в этом случае от переводчика-программиста
также потребуются особые знания ассемблера той системы, для которой он
переводит приложение. (Например: на SNES используется ассемблер
65816).Чтобы переводчику понять алгоритм запаковки и написать
распаковщик/запаковщик текста и графики. Выбор приложение для перевода
осуществляется только пожеланию программиста. На втором этапе производиться
составление таблицы кодировки символов (дело в том, что весь текст на
приставках, чаще всего, имеет
нестандартную кодировку текста), в данном процессе нужен эмулятор – благодаря
нему мы можем воспроизводить приложение на PC, и тестировать его.
Запоминаем попадающееся слово из переводимого вами приложения (например: happy).
Используем Pokeperevod 1.41 (shedevr.org.ru) для составления
первичной таблицы кодировки, сохраняем данную таблицу. Затем подгружаем в шестнадцатеричный редактор
(например: GoldFinger) нашу таблицу и ROM, дополняем недостающие символы по мере
обнаружения текста. Также на этом этапе производиться запоминание всех смещений
начала и конца блоков текста. На третьем этапе осуществляется визуальный поиск
шрифта в ROM’e при помощи программы YY-CHR 0.97.b22, здесь
возможны несколько вариантов: перерисовка шрифта на пустом месте, затем
дальнейшее вычисление HEX-кодов русских символов, либо перерисовка
строчных букв латинского шрифта на кириллицу, в этом случае рекомендуется
использование программы ConverterLKL 8.0 (sevaton.narod.ru),
созданной специально для цели перекодировки соответствующего русского текста в
текст латиницы (например: ЧЕРНЫЙ =>XFQNbJ). После перерисовки шрифта
можно извлечь текст при помощи программы Kruptar 6.0.6.0 (magicteam.nm.ru),
в котором может производиться и дальнейшая его обработка и перевод. Замечаем,
что при переводе длина переведенной строки не должна быть больше или меньше ее
начального состояния1. Вставка текста в ROM производиться
строго на то смещение, с которого производилось извлечение текста2.
На заключительном и самом ответственном этапе
производиться проверка всей проделанной работы на наличие ошибок. Венчанием
всей работы является создание полноценного IPS-patch’a при помощи
программы BEOPAT, который сверяет оригинальный и изменяемый ROM и создает исполняемый файл, который содержит в себе
инструкции по изменению оригинального ROM’а в переведенный.
1
- На самом деле, длину строки можно
менять, но для этого нужно найти специальные байт-указатели и увеличить
значение последующего указателя на кол-во прибавочных символов. В рамках данной
статьи не возможно рассказать об их классификации и роли.
2
– Этот принцип тоже можно обойти, если
известна полная таблица байт-указателей и в ROM’е имеется свободное место для добавки текста. В этом
случае, вся таблица байт-указателей должна быть полностью пересчитана и обязана
указывать на другое смещение текста в ROM’е.