Форум Magic Team
Переводы, переводы, переводы... => Ромхакинг и перевод => Тема начата: lupus от 07 Февраля 2012, 23:15:51
-
Юрасик выкладывал мануал по вставке интро в ромы GBA. С этим всё понятно. Возник вопрос, есть ли способ аналогичной вставки интрошки в ром GB/GBC?
Заранее спасибо.
-
Способ везде одинаковый: пишешь код, внедряешь в программу.
-
А как в этих случаях быть со ресурсами? Ведь внутри рома где-то зашиты обращения к ресурсам по определённым адресам (ну как минимум к строкам). Добавляя свой код мы сдвигаем адресное пространство, и ресурсы уже находятся по другим адресам.
-
Ресурсы так же внедряются, как и код. Код легко добавляется без сдвигания. :) На это есть джампы.
-
А как в этих случаях быть со ресурсами? Ведь внутри рома где-то зашиты обращения к ресурсам по определённым адресам (ну как минимум к строкам). Добавляя свой код мы сдвигаем адресное пространство, и ресурсы уже находятся по другим адресам.
Зачем сдвигать?
1. Запихиваешь интрушку в конец рома.
2. В начале рома направляешь поинтер на интрушку.
3. В конце интрушки ставишь тот поинтер, который изменил в начале рома.
???
PROFIT!
-
2. В начале рома направляешь поинтер на интрушку.
Ну так чтобы направить нужно как минимум один джамп написать, он же тоже место занимает?
Или по ROM'у напихана куча NOP'ов на такие случаи? :)
-
В самом начале есть джамп на код начальной заставки (или чего-нибудь другого), его меняешь, чтобы он указывал на конец рома - в то место, где будет лежать интрушка, в конце интрушки делаешь джамп в то место, на которое шёл оригинальный джамп. Таким образом длина кода остаётся неизменной (если не считать интрушку).
Джампов в коде очень и очень много, так что есть варианты - интрушку можно вставлять в разные места.
-
Если ты заменяешь какой-то код джампом в другое место, то этот код нужно написать в новом месте да и всё.
-
а пример можно? ))