Magic Team

Объявление

Сайт переехал сюда: http://magicteam.net
Новый форум: http://magicteam.net/forum

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Magic Team » О ромхакинге » Star Trek - 25th Anniversary (U).nes, Star Trek - 25th Anniversary (U)


Star Trek - 25th Anniversary (U).nes, Star Trek - 25th Anniversary (U)

Сообщений 1 страница 16 из 16

1

Начал искать текст а он запакован.
Может кто поможет два дня дебага не прошли даром, но не могу понять алгоритм.
Что я нарыл, точки останова ставить на $21e на запись там формируется текст.
$FF используется для вычисления символа
$C8 $c9 для циклов сдвигов
Значения $1d $1a какие то спец символы
$50
$51 Адрес в Роме откуда берем текст.

Таблица стандартная OEM

Вот что я надебагил текст программы
 
$B19D:A9 08     LDA #$08
$B19F:85 FE     STA $FE
$B1A1:A0 00     LDY #$00
$B1A3:B1 50     LDA ($50),Y (чтение из РОМ следущего символа)
$B1A5:85 FF     STA $FF
$B1A7:C6 C8     DEC $C8
$B1A9:D0 DD     BNE $B188
$B1AB:A4 FC     LDY $FC
$B1AD:C0 FF     CPY #$FF
$B1AF:F0 09     BEQ $B1BA

$B1BA:A5 C9     LDA $C9
$B1BC:C9 1D     CMP #$1D
$B1BE:90 08     BCC $B1C8

$B1C8:C9 1A     CMP #$1A
$B1CA:90 0A     BCC $B1D6
$B1CC:38        SEC
$B1CD:E9 1A     SBC #$1A
$B1CF:A8        TAY
$B1D0:B9 FD B1  LDA $B1FD,Y
$B1D3:4C D9 B1  JMP $B1D9

$B1D6:18        CLC
$B1D7:69 41     ADC #$41
$B1D9:A4 FD     LDY $FD
$B1DB:99 00 02  STA $0200,Y
$B1DE:E6 FD     INC $FD
$B1E0:C9 00     CMP #$00
$B1E2:F0 07     BEQ $B1EB
$B1E4:A9 FF     LDA #$FF
$B1E6:85 FC     STA $FC
$B1E8:4C 80 B1  JMP $B180

0

2

А почему начинается не с $B180? Последний JMP ведёт туда.
Ты перепиши этот код на какой-нибудь стандартный язык программирования и посмотри как он работать будет.

0

3

Djinn написал(а):

А почему начинается не с $B180? Последний JMP ведёт туда.
Ты перепиши этот код на какой-нибудь стандартный язык программирования и посмотри как он работать будет.

Код не весь.
Надо попробовать.

0

4

Ой, маньяки, ой, маньяки, зачем так глубоко-то лезть (переводить ассемблер в привычный язык программирования), нужно получше изучить работу игры и найти откуда она какие данные берет (так было и с сабжем и с Dragon Warrior II)

0

5

:/  МанИаки - от слова мания... (пользуясь случаем, передаю привет Coregon'y)=)
Ты мог бы пояснить как именно ты следишь - откуда игра берет данные - тоже ведь ассемблерный код ;)

0

6

В ассемблере NES есть такая команда: LDA :-), так вот по ней и можно определить откуда игра берет данные. Если адрес читаемой области больше &h8000, то чтение происходит из рома (а точнее из блока размером 32 килобайта). Найти блок из которого происходит чтение просто: ищем в роме сочетание нескольких байтов начиная с адреса памяти &h8000 (штуки 4 - 5 обычно хватает).
В дебаггере в нужный момент (начинается вывод текста или рисование графических объектов) делаем останов и пошагово ищем команды чтения из блока от &h8000 до &hFFFF. Вот собственно и всё.

А как понять, что программа там делает (до и после чтения данных) вы меня не спрашивали :-).

0

7

Найти блок из которого происходит чтение просто: ищем в роме сочетание нескольких байтов начиная с адреса памяти &h8000 (штуки 4 - 5 обычно хватает).

Это ты про банкование ПЗУ толкуешь? Я так понимаю оно понадобится только тогда, когда уже надо будет менять данные, а не при разборе кода, так?

0

8

Час спустя...
При выводе на экран надписи из рома читается ОГРОМНОЕ количество данных! в Star TreK я пять минут тыкал на RUN, но не дождался загрузки даже одной буквы, ну и как же  в этом мессиве выудить нужную ячейку?

0

9

Это я в общих чертах описывал, а для Star Trek'а останов нужно делать во время вывода букв и ставить бряк на чтение и на запись в &h0050-&h0051, таким макаром можно найти не только место хранения текста, но и поинтеры этого текста.

0

10

:D  да, это понятно! мне интересней узнать откуда ты достал $50-$51!

0

11

Это не я достал, а Chief-exb.
А в Dragon Warrior 2 я сначала нашел таблицу МТЕ (если ее можно так назвать), а затем поставил бряк на первую читающуюся букву: T из первого диалога - There one day... (точнее на все заглавные буквы T в таблице) останов произошел на коде B3CF: B1 6F  LDA($6F),Y  @  $B506 = 37
Покрутившись в этом алгоритме я нашел, откуда читаются данные и, проведя анализ этих самых данных написал распаковщик и запаковщик для этой игры.

Возможно подобным образом поступал и Chief-exb в своих поисках.

0

12

Почему сразу маньяки? Я например в Beetlejuice (NES) все процедуры распаковки переписал на нормальный язык, всю графику распаковал и написал упаковщик.

0

13

А в Dragon Warrior 2 я сначала нашел таблицу МТЕ (если ее можно так назвать)

А,  это фактически набор отдельных байт, часто идущих по порядку, на которые в дальнейшем ссылаются поинтеры?

Почему сразу маньяки?

Мой юный друг! смотри про маниаков мой пост выше  :D

Отредактировано Griever (2006-04-08 02:41:30)

0

14

Странно, вроде отвечал.
Это не просто идущие подряд байты, это структура (состоящая из двух таблиц), размеры элементов которой ограничены 15-ю байтами.

0

15

:)  Ясно, но визуально они выглядят так, как я их описал, так?

0

16

Ну почти, иногда в них можно разглядеть слова и даже целые фразы.

0

Быстрый ответ

Напишите ваше сообщение и нажмите «Отправить»



Вы здесь » Magic Team » О ромхакинге » Star Trek - 25th Anniversary (U).nes, Star Trek - 25th Anniversary (U)