|
shedevr.org.ru Группа перевода приставочных игр "ШЕДЕВР"
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
AZiCoDec
Зарегистрирован: 30.08.2009 Сообщения: 4
|
Добавлено: Вс Авг 30, 2009 9:54 pm Заголовок сообщения: Где находится код в роме? |
|
|
Здравствуйте!
Ребята, посмотрел разные ромы и так ничего и не понял - где в роме локазизируются инструкции процессору? Есть постоянное место? Попробовал поискать подобную информацию, но что-то ничего такого не нашол.. Есть где-нить доки по строению ROMа? Он вообще как-то сегментирован или там валяется всё как-попало, главное - верно указывать на нужные байты?
Ой, простите! Забыл сказать - я имею в виду NESовские ROMы...
Пасиба! _________________ YAдурашко! |
|
Вернуться к началу |
|
|
gegmopo3
Зарегистрирован: 21.08.2006 Сообщения: 233 Откуда: Красноярск
|
Добавлено: Вс Авг 30, 2009 10:28 pm Заголовок сообщения: |
|
|
Хм, он может быть и в начале рома, может в конце. В основном, самое главное идет в начале. Дебаг замути, и запусти ром и смотри где что
Цитата: | где в роме локазизируются инструкции процессору? |
Это что? _________________ Я-я-я-я! |
|
Вернуться к началу |
|
|
AZiCoDec
Зарегистрирован: 30.08.2009 Сообщения: 4
|
Добавлено: Вс Авг 30, 2009 11:57 pm Заголовок сообщения: |
|
|
Цитата: | где в роме локазизируются инструкции процессору? |
Это что? [/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 дадут адрес первой инструкции |
|
Вернуться к началу |
|
|
Griever RRC2008
Зарегистрирован: 15.07.2005 Сообщения: 112 Откуда: Н.Новгород
|
Добавлено: Пн Авг 31, 2009 9:10 am Заголовок сообщения: |
|
|
Цитата: | Например, если РОМ игры настолько мал, что может быть полностью размещен в памяти приставки, то ее мэппер, скорее всего, просто сразу скопирует содержимое всего РОМа в память.. |
В этом случае, в простонародье говорят, что это нулевой маппер. Хотя на самом деле, маппера на картридже емкостью в PRG области до 32 кб нет - адресация организовывается подключением напрямую к шинам картриджа.
Я так понял, основной вопрос в том, где в РОМе находится код. В .nes файле сразу после заголовка идут PRG банки, содержащие код и двоичные данные.
Однако это не абсолютное правило. Если маппер дает возможность доступа к PPU, PRG банк может также содержать графику в открытом или упакованном виде, и наоборот. CHR банки могут содержать код, который будет скопирован самой игрой в обрасть оперативной памяти (0-$7FF) и выполнен. Но эти случаи - очень редкие исключения.
В качестве коренного банка, как правило, подключается последний PRG банк РОМа. Количество PRG и CHR банков можно легко узнать из log сообщений FCEU. _________________
|
|
Вернуться к началу |
|
|
AZiCoDec
Зарегистрирован: 30.08.2009 Сообщения: 4
|
Добавлено: Пн Авг 31, 2009 6:15 pm Заголовок сообщения: |
|
|
Ага, понятно уже немного стаёт.. Кароче, да - PRG-сегмент вроди бы находится после 16-байт заголовка (хедер, да, это?) и сразу содержит инструкции.. (Можно расшифровывать прямо в хексере, благодаря вот таким докам без дизасма - romhacking[DOT]net/docs/112/ (мне ещё не разрешено постить юрлы )). То есть, если стоит маппер(не "нулевой"), то он сразу же находится в начале адресного пространства, да? Я пока балуюсь всякими простенькими ромиками, без-мапперными.. Я еще просто галимо читаю по английски, инфы море, но основной купой - заморская.. Зато существенно помогают словари и переводчики заодно и подучусь.. А может кто если помнит хорошие доки по структурам РОМов, хорошо бы ткнуть носом.. Буду преблагодарен.. Пока только начинаю вторгаться в этот загадочный Мир Марио желательна, конечно помощь экспертов...
Спасибо, друзья за внимание..! _________________ YAдурашко! |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пн Авг 31, 2009 6:19 pm Заголовок сообщения: |
|
|
Да. Т.е. сам РОМ начинается уже после него.
Цитата: | Можно расшифровывать прямо в хексере |
Легче взять любой дизассемблер.
Цитата: | То есть, если стоит маппер(не "нулевой"), то он сразу же находится в начале адресного пространства, да? |
Маппер находится на картридже, в РОМе его нет. Поэтому в заголовке и нужна информация о маппере, чтобы эмулятор знал, какой маппер использовать. _________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
Powered by phpBB © 2001, 2005 phpBB Group
|