Список форумов shedevr.org.ru shedevr.org.ru
Группа перевода приставочных игр "ШЕДЕВР"
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Где находится код в роме?

 
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Экстремальный ромхакинг
Предыдущая тема :: Следующая тема  
Автор Сообщение
AZiCoDec



Зарегистрирован: 30.08.2009
Сообщения: 4

СообщениеДобавлено: Вс Авг 30, 2009 9:54 pm    Заголовок сообщения: Где находится код в роме? Ответить с цитатой

Здравствуйте!
Ребята, посмотрел разные ромы и так ничего и не понял - где в роме локазизируются инструкции процессору? Есть постоянное место? Попробовал поискать подобную информацию, но что-то ничего такого не нашол.. Есть где-нить доки по строению ROMа? Он вообще как-то сегментирован или там валяется всё как-попало, главное - верно указывать на нужные байты?

Ой, простите! Забыл сказать - я имею в виду NESовские ROMы... Confused
Пасиба!
_________________
YAдурашко!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
gegmopo3



Зарегистрирован: 21.08.2006
Сообщения: 233
Откуда: Красноярск

СообщениеДобавлено: Вс Авг 30, 2009 10:28 pm    Заголовок сообщения: Ответить с цитатой

Хм, он может быть и в начале рома, может в конце. В основном, самое главное идет в начале. Дебаг замути, и запусти ром и смотри где что Very Happy

Цитата:
где в роме локазизируются инструкции процессору?


Это что? Shocked
_________________
Я-я-я-я!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
AZiCoDec



Зарегистрирован: 30.08.2009
Сообщения: 4

СообщениеДобавлено: Вс Авг 30, 2009 11:57 pm    Заголовок сообщения: Ответить с цитатой

Цитата:
где в роме локазизируются инструкции процессору?


Это что? Shocked[/quote]

Ну, это я хотел лаконично выразится, да еще и ошибку не заметил)) В общем -всё понятно))

Хз, мне бы точно знать.. А почему он в разных местах? Происходит же всякая инициализация и всё такое на начальном уровне.. Откуда система знает размещение инструкций? Есть указатели на это место?
_________________
YAдурашко!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
GrayLightTaliz



Зарегистрирован: 13.10.2005
Сообщения: 204
Откуда: Краснодар/Королёв

СообщениеДобавлено: Пн Авг 31, 2009 2:07 am    Заголовок сообщения: Ответить с цитатой

Насколько я понял, при инициализации NES происходит "reset"-прерывание процессора, при котором он запрашивает вектор(адрес) обработчика этого прерывания по адресу $FFFC

Т.е., запросив слово по адресу $FFFC, процессор получит адрес кода и начнет его выполнение..

Проблема в том, что оперативной памяти у приставки мало, и данные из РОМа загружаются в эту память порциями.. В том числе, данные по адресу $FFFC могут быть загружены из разных областей РОМа.. За то, какой блок РОМа и куда (в памяти приставки) загружать, отвечает система, встроенная в картридж, которая называется MAPPER.. Мэпперы бывают разные и работают они по-разному.. Мэппер не является частью РОМа, а лишь отвечает за обмен информацией между РОМом и системой приставки.. Поэтому в файлы NES-ромов добавлены дополнительные данные с информацией об используемом мэппере.. Например, если РОМ игры настолько мал, что может быть полностью размещен в памяти приставки, то ее мэппер, скорее всего, просто сразу скопирует содержимое всего РОМа в память.. если же РОМ большой.. то мэппер (в зависимости от того как он работает) загрузит некоторый начальный блок данных из РОМа в память приставки, и будет ожидать, когда программа запросит новые данные из РОМа.. команды от процессора мэппер может получать путем записи нужных значение по нужным адресам в памяти, т.е. они работают как порты мэппера..

В общем, если ищешь начало кода, то:

1. Изучи первые 16 байт NES файла и выясни информацию о мэппере
(это тот самый дополнительный блок с информацией о картридже, в том числе об используемом мэппере.. далее идет уже непосредственно содержимое РОМа)

2. Узнав, какой мэппер используется, вычисли какие данные из РОМа и куда будут записаны при инициализации

3. Два байта, оказавшиеся по адресу $FFFC дадут адрес первой инструкции
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Griever
RRC2008
RRC2008


Зарегистрирован: 15.07.2005
Сообщения: 112
Откуда: Н.Новгород

СообщениеДобавлено: Пн Авг 31, 2009 9:10 am    Заголовок сообщения: Ответить с цитатой

Цитата:
Например, если РОМ игры настолько мал, что может быть полностью размещен в памяти приставки, то ее мэппер, скорее всего, просто сразу скопирует содержимое всего РОМа в память..

В этом случае, в простонародье говорят, что это нулевой маппер. Хотя на самом деле, маппера на картридже емкостью в PRG области до 32 кб нет - адресация организовывается подключением напрямую к шинам картриджа.

Я так понял, основной вопрос в том, где в РОМе находится код. В .nes файле сразу после заголовка идут PRG банки, содержащие код и двоичные данные.
Однако это не абсолютное правило. Если маппер дает возможность доступа к PPU, PRG банк может также содержать графику в открытом или упакованном виде, и наоборот. CHR банки могут содержать код, который будет скопирован самой игрой в обрасть оперативной памяти (0-$7FF) и выполнен. Но эти случаи - очень редкие исключения.
В качестве коренного банка, как правило, подключается последний PRG банк РОМа. Количество PRG и CHR банков можно легко узнать из log сообщений FCEU.
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
AZiCoDec



Зарегистрирован: 30.08.2009
Сообщения: 4

СообщениеДобавлено: Пн Авг 31, 2009 6:15 pm    Заголовок сообщения: Ответить с цитатой

Ага, понятно уже немного стаёт.. Кароче, да - PRG-сегмент вроди бы находится после 16-байт заголовка (хедер, да, это?) и сразу содержит инструкции.. (Можно расшифровывать прямо в хексере, благодаря вот таким докам без дизасма - romhacking[DOT]net/docs/112/ (мне ещё не разрешено постить юрлы Smile)). То есть, если стоит маппер(не "нулевой"), то он сразу же находится в начале адресного пространства, да? Я пока балуюсь всякими простенькими ромиками, без-мапперными.. Я еще просто галимо читаю по английски, инфы море, но основной купой - заморская.. Зато существенно помогают словари и переводчики Razz заодно и подучусь.. А может кто если помнит хорошие доки по структурам РОМов, хорошо бы ткнуть носом.. Буду преблагодарен.. Пока только начинаю вторгаться в этот загадочный Мир Марио Smile желательна, конечно помощь экспертов...

Спасибо, друзья за внимание..! Rolling Eyes
_________________
YAдурашко!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
HoRRoR
RRC2008
RRC2008


Зарегистрирован: 21.06.2006
Сообщения: 2341
Откуда: Ростов-на-Дону

СообщениеДобавлено: Пн Авг 31, 2009 6:19 pm    Заголовок сообщения: Ответить с цитатой

Цитата:
хедер, да, это?

Да. Т.е. сам РОМ начинается уже после него.

Цитата:
Можно расшифровывать прямо в хексере

Легче взять любой дизассемблер.

Цитата:
То есть, если стоит маппер(не "нулевой"), то он сразу же находится в начале адресного пространства, да?

Маппер находится на картридже, в РОМе его нет. Поэтому в заголовке и нужна информация о маппере, чтобы эмулятор знал, какой маппер использовать.
_________________
Работаю за деньги
KILL ALL HUMANS!!!!!111
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Экстремальный ромхакинг Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group