Юрасик выкладывал мануал по вставке интро в ромы GBA. С этим всё понятно. Возник вопрос, есть ли способ аналогичной вставки интрошки в ром GB/GBC?
Заранее спасибо.
Способ везде одинаковый: пишешь код, внедряешь в программу.
А как в этих случаях быть со ресурсами? Ведь внутри рома где-то зашиты обращения к ресурсам по определённым адресам (ну как минимум к строкам). Добавляя свой код мы сдвигаем адресное пространство, и ресурсы уже находятся по другим адресам.
Ресурсы так же внедряются, как и код. Код легко добавляется без сдвигания. :) На это есть джампы.
Цитата: inside от 08 февраля 2012, 10:53:33
А как в этих случаях быть со ресурсами? Ведь внутри рома где-то зашиты обращения к ресурсам по определённым адресам (ну как минимум к строкам). Добавляя свой код мы сдвигаем адресное пространство, и ресурсы уже находятся по другим адресам.
Зачем сдвигать?
1. Запихиваешь интрушку в конец рома.
2. В начале рома направляешь поинтер на интрушку.
3. В конце интрушки ставишь тот поинтер, который изменил в начале рома.
???
PROFIT!
Цитировать2. В начале рома направляешь поинтер на интрушку.
Ну так чтобы направить нужно как минимум один джамп написать, он же тоже место занимает?
Или по ROM'у напихана куча NOP'ов на такие случаи? :)
В самом начале есть джамп на код начальной заставки (или чего-нибудь другого), его меняешь, чтобы он указывал на конец рома - в то место, где будет лежать интрушка, в конце интрушки делаешь джамп в то место, на которое шёл оригинальный джамп. Таким образом длина кода остаётся неизменной (если не считать интрушку).
Джампов в коде очень и очень много, так что есть варианты - интрушку можно вставлять в разные места.
Если ты заменяешь какой-то код джампом в другое место, то этот код нужно написать в новом месте да и всё.
а пример можно? ))