Описание: АРХИВНАЯ ТЕМА 2007 года |
Поиск в теме | Версия для печати |
alex_231 |
Отправлено: 31 Января, 2016 - 13:00:42
|
Chief-Net
Покинул форум
Сообщений всего: 4688
Дата рег-ции: Окт. 2014
|
Прочёл на форуме Шедевра следующее: "...это снесовская игра, абсолютных указателей тут и в помине нет."
Ничего не буду говорить в адрес автора (чтобы меня ещё раз неправильно поняли, нет уж увольте), расскажу о поинтерах NES и SNES.
NES:
так как адресное пространство приставки ограничено 64 килобайтами, то двухбайтовые указатели полностью его перекрывают и дают возможность сослаться на любую ячейку памяти, а отсюда следует вывод, что относительные ДВУХБАЙТОВЫЕ поинтеры здесь нерациональны, так как ведут к появлению дополнительных вычислений адреса (лично я ни разу не встречал в играх на NES относительных поинтеров).
SNES:
здесь немного сложнее, так как адресное пространство составляет 16 мегабайт и для его покрытия нужны трехбайтовые указатели, а в играх с большим количеством текста это приведёт к лишним затратам на третий байт указателя. Да, здесь используются относительные поинтеры. Но и трехбайтовых отсюда выкинуть нельзя, а так как структура памяти SNES, построена таким образом, что ром хранится не в начале, а в конце адресного пространства, обычно с адреса 0xC00000, то для того, чтобы привязать поинтеры к рому, от их значений следует отнять эту величину.
Но не стоит путать эти указатели с относительными, так как они указывают напрямую на ром в памяти приставки, а не на адрес в хекс-редакторе, относительные же потому и называются относительными, что указывают на место в памяти относительно определённого адреса, который явно должен присутствовать в памяти в момент использования относительного поинтера.
И вот, что я ещё хочу сказать: абсолютные поинтеры не только присутствуют в играх на SNES, но и интенсивно используются (особенно в больших играх).
Многие просто путают адресацию в памяти с адресацией в файле и вводят в заблуждение других.
----- Делая выбор, отбрось простое решение и выбери правильное...
|
|
|
HoRRoR |
Отправлено: 31 Января, 2016 - 13:03:29
|
Покинул форум
Сообщений всего: 654
Дата рег-ции: Окт. 2014
|
HoRRoR
Цитата:1: Да, HoRRoR, приведи, пожалуйста, пример относительных поинтеров на NES.
LNB, FF1, EarthBound...
Цитата:2: Нет, заголовок тут не причём. Игра не имеет заголовка (в идеале), в смысле когда она хранится в памяти никакого заголовка там нет. (и как я уже писал: поинтер - это значение адреса в памяти приставки, а не в хекс-редакторе).
Я имею ввиду, что может кто-то путает абсолютные указатели у файла с заголовком с относительными(из-за сдвига заголовка). |
|
|
alex_231 |
Отправлено: 31 Января, 2016 - 13:03:56
|
Chief-Net
Покинул форум
Сообщений всего: 4688
Дата рег-ции: Окт. 2014
|
alex_231
В LNB (как минимум) не используется банкование блока с текстом, впервые вижу игру такого типа.
Не мог бы поконкретнее описать, как используются поинтеры в FF1 и EarthBound?
Цитата:Я имею ввиду, что может кто-то путает абсолютные указатели у файла с заголовком с относительными(из-за сдвига заголовка).
Может, но это совсем уже надо быть "того", так как относительные используются на большом расстоянии от начала адресации (и начинаются обычно с нулевого смещения), а не в 512-ти (или 16-ти!) байтах от него.
Да, и ещё: на SNES часто используются двухбайтовые указатели, которые приводятся к абсолютным без каких-либо арифметических действий, путем простой записи в память рядом со старшим байтом, указывающим нужный блок (например, XX XX F0, где "ХХ ХХ" - переменный поинтер).
----- Делая выбор, отбрось простое решение и выбери правильное...
|
|
|
|
Поиск в теме | Версия для печати |
Страниц (1): [1] |
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0) |
« Базовый хакинг » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
|
|