|
|
|
|
|
|
|
|
|
- XCALIBUR'S
POINTER DOCUMENT
- ВСТУПЛЕНИЕ
- Ну вот, наконец-то я написал ещё одну доку, на этот раз она
посвящена пойнтерам. Разговор пойдёт об изменении Lo-ROM SNES
пойнтеров.
Чтобы понять, о чём это всё ты должен обладать базовыми знаниями
в ромхакинге.
-
ЧТО ЕСТЬ ПОЙНТЕР?
- Пойнтер - это строка шестнадцетиричных чисел (обычно 2 байта),
которая говорит программе, где располагается какой-либо ресурс.
Это напоминает команду GoTo в бэйсике. Изменяя пойнтер, ты меняешь
место, в котором программа будет искать информацию. Пойнтеры -
очень нужная штука, с их помощью можно более качественно переводить
игры.
-
КАК ВСЁ ЭТО РАБОТАЕТ?
-
- Пойнтер - это своего рода указатель. Программа прыгает по указанному
адресу и читает байты до байта, означающего конец последовательности,
давайте далее называть его стоп-байт.
Вот пример:
Stick[FF]Club[FF]Copper[FF]
Выделенная буква означает место, на которое указывает пойнтер,
[FF] - стоп-байт. То есть программа прыгает на это место и читает
байты до тех пор, пока не обнаружит стоп-байт.
Пойнтер указывает на первую букву первого слова строки. Например,
если мы изменим пойнтер так, чтобы он указывал на букву "o"
в слове "Copper", вместо "C", то в игре будет
отображаться "opper". Надеюсь, вы поняли, к чему я клоню
- с помощью пойнтеров можно изменять длину слов и делать переводы
качественнее.
-
ПОИСК ПОЙНТЕРА НА ТЕКСТ
-
-
- Теперь, когда ты знаешь, что такое пойнтер, научимся находить
их.
Начнём с того, что у игр для SNES есть 200-байтовый заголовок,
это очень важно знать, чтобы потом не ошибиться при поиске пойнтеров.
Теперь попробуем найти пойнтер для текста. Допустим, мы поковырялись
в РОМ'е и нашли смещение, с которого начинается текст, пусть
это будет 02A840. Теперь от этого смещения отнимем заголовок(200
байт). То есть 02A840 - 200 = 02A640. Теперь убираем первые
два символа и получаем A640. И меняем местами оставшиеся два
байта (реверс), т.е. у нас было A640, а стало 40A6 - это наш
пойнтер!
Теперь ищем 40A6 как шестнадцетиричное значение в РОМ'е, пока
не наткнёмся на таблицу пойнтеров. "Как же я её отличу
от всего остального!?" - спросишь ты, да очень просто,
второй байт будет больше, например:
40A6 40A9 и т.д.
А, вот ещё! Все значения пойнтеров ДОЛЖНЫ быть между 8000 и FFFF.
К примеру, 016438. Пусть у тебя получилось 6238. Вот блин это
меньше 8000. Тогда нужно добавить 8000 к этому значению. 6238
+ 8000 = E238. Теперь сделаем реверс 38E2. Вот и всё, наш пойнтер
38E2.
-
ФИЗИЧЕСКОЕ РАСШИРЕНИЕ SNES ROM'а
-
-
-
- SNES РОМ'ы очень легко расширить. Всё что нужно - это открыть
файл в шестнадцетиричном редакторе и добавить необходимое количество
байт(FF). Важно, чтобы место, которое добавляешь ДОЛЖНО ПРЕВЫШАТЬ
32Кб или $8000 шестнадцетиричных байт, или 1 банк.
РОМ'ы расширяемые таким способом будут более устойчивы, если
будут более 80,000 шестнадцетиричных байт. Ниже, маленькая диаграмма,
которая показывает соотношение смещения с пойнтерами и размера
РОМ'а:
(Указанные адреса включают 200-байтовый заголовок)
Смещение Размер РОМ'а(Мб)
0801FF 0.5
1001FF 1.0
1801FF 1.5
2001FF 2.0
2801FF 2.5
3001FF 3.0
Ну, вот мы и добрались до конца этого документа, я больше ничего
не могу написать. И думаю, что этот документ будет полезен многим
начинающим ромхакерам.
Перевёл Jim DiGriz, (С) 2004
Оригинал написал Xcalibur
Xcalibur's Pointer Document
Версия 1.1
Copyright 2000 Excalibur Translations
==========
Версии
==========
1.1 - Документ более понятен для простых смертных
1.0 - Первый релиз
-
Перевёл: Jim
DiGriz
ICQ: 276340136
|
|
|
|
|
|
|