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’е.