Поиск значений в эмуляторах игровых приставок

Многие, наверное, помнят время игровых приставок, пик, распространения которых в России пришелся в 1990-1995 годах Когда в каждом доме была приставка Денди (Нинтендо) или Сега. Она назывались приставки, поскольку подключались к телевизору. Игры тогда были на картриджах, аналог современных компакт дисков. Картридж - это микросхема памяти в пластмассовой коробке. Современные приставки все идут с дисками. Время приставок уже прошло, их место заняли персональные компьютеры. Но некоторые приставочные игры до сих пор занимают первые места в наших сердцах. Есть возможность поиграть в эти старые игры на своих компьютерах. Для этого существуют программы-эмуляторы игровых приставок, позволяющие запускать на персональном компьютере приставочные игры из файла списанного с картриджа приставки (такой файл называют РОМ). Приставка, как и персональный компьютер, имеет процессор и оперативную память. У приставки Денди максимальный размер памяти 64Kb. Эмулятор VirtualNES для Денди работает так, берет в своем процессе 64Kb памяти и считает что это эмулируемая память приставки. Например, блок по адресу 0059AAF0. Очевидно, что искать во всем процессе смысла нет, если можно ограничиться одним блоком 64Kb. Для этого ArtMoney принимает 0059AAF0 за нулевой адрес эмуляции, и работает только с одним блоком памяти. Это дает увеличение скорости в десятки раз, и самое главное адреса в таблице больше не зависят от эмулятора. То есть если сменить нулевой адрес нового эмулятора, то все адреса будут рабочими. Все нулевые адреса и информация об эмуляторах хранится в файле artmoney.emul. В этом файле находятся записи, которые содержат - название приставки, название и версию эмулятора, имя файла эмулятора, нулевой адрес эмулятора и размер эмулируемой области. Теперь все что остается, это при начале поиска выбрать свой эмулятор из списка. Если Вашего эмулятора нет в списке, нужно найти нулевой адрес и добавить его в файл artmoney.emul. И обязательно прислать этот файл нам, чтобы добавить новый эмулятор в общий список всех пользователей.

Далее, для примера, найдем нулевые адреса некоторых эмуляторов.
Согласно технической документации Sega Genesis, картридж может занимать до 16Mb памяти. Однако, для записи доступна только память RAM диапазона E00000-FFFFFF размером 2Mb. Большинство игр 99% используют только часть FF0000-FFFFFF размером 64Kb.
Для этой приставки удобнее принять за нулевой адрес начало области FF0000. Найдем начало этой области в Gens 2.11. Для этого воспользуемся PAR кодами. PAR код представляет собой адрес и значение, записанное подряд в шестнадцатеричной системе. Используется, чтобы занести значение по определенному в PAR коде адресу. Стандартный формат PAR кода AAAAAAVV,где А - адрес, а V - значение. PAR код у Gens имеет другой формат AAAAAA:VVVV. Выбираем в меню File\Game Genie, там, в поле CODE, вводим FF0000:ABC1, нажимаем "Add Code". Код должен быть выделен, нажимаем OK. Переходим в ArtMoney и ищем целое 2 байта ABC1. Переключаемся обратно в Gens, удаляем старый код и добавляем новый FF0000:ABC2. Отсеиваем в ArtMoney значение ABC2 и получаем адрес 0081A500. В итоге нашли адреса:
E00000 - 0081A500
F00000 - 0081A500
FE0000 - 0081A500
FF0000 - 0081A500
FFFFFF - 0082A500

Интересно, что область E00000-FF0000 вообще в Gens 2.11 не существует. То есть нас интересует диапазон адресов 0081A500-0082A500 в процессе Gens 2.11. А адрес 0081A500 есть наш начальный нулевой адрес.

Внимание! Эмулятор Kega Fusion для данных использует перевернутый порядок байтов. То есть, при поиске вы должны выбрать в настройках ArtMoney перевернутый порядок байтов. Если Вы сделали таблицы в эмуляторе Gens, то для того чтобы они работали в Kega Fusion, нужно у всех адресов поставить галочку "перевернуть", если не будет работать, то надо поставить тип 2 байта целое. Если Вы сделали таблицы в эмуляторе Kega Fusion, то для того чтобы они работали в Gens, нужно у всех адресов убрать галочку "перевернуть", если не будет работать, то надо отнять от адреса единичку и поставить тип 2 байта целое. Для приставки Sega Mega CD основная рабочая область FF0000-FFFFFF, такая же, как и у Genesis. Есть дополнительные области RAM 020000-03FFFF, 200000-23FFFF, но обычно они не используются. Кроме того есть 512K RAM сопроцессора 000000-07FFFF. Основная трудность, что паркоды не работают в эмуляторах в режиме MegaCD. Поэтому нужно найти известный адрес жизни, в какой-нибудь игре, и вычесть из него адрес жизни в эмуляторе, получим адрес начала блока.

Внимание! Эмулятор Kega Fusion для данных использует перевернутый порядок байтов. То есть, при поиске вы должны выбрать в настройках ArtMoney перевернутый порядок байтов. Если Вы сделали таблицы в эмуляторе Gens, то для того чтобы они работали в Kega Fusion, нужно у всех адресов поставить галочку "перевернуть", если не будет работать, то надо поставить тип 2 байта целое. Если Вы сделали таблицы в эмуляторе Kega Fusion, то для того чтобы они работали в Gens, нужно у всех адресов убрать галочку "перевернуть", если не будет работать, то надо отнять от адреса единичку и поставить тип 2 байта целое.
У этой приставки вся область памяти (до 16Mb) делится на банки памяти. Существует два типа картриджей LoROM и HiROM. Игра картриджа LoROM грузится в младшие банки памяти, а HiROM грузится в старшие банки памяти. Согласно технической документации, доступны для записи только определенные банки памяти. Для LoROM рабочая область памяти WorkRAM 7E0000-7FFFFF, то есть перезаписываемая память картриджа 128Kb. Для HiROM типа также есть рабочая область C00000-CFFFFF размером 1Mb, но она используется очень редко (только если игра очень большая и не помешается в WorkRAM). Тип картриджа можно посмотреть из команды меню "ROM info" программы Snes9X. Большинство игр имеют тип LoROM. Для этой приставки удобнее принять за нулевой адрес начало рабочей области.

Найдем начало этой области в Zsnesw 1.36. Просто вносим PAR коды в Zsnesw на адреса 7E0000 и C00000 и находим адреса начала банков в ArtMoney.
7E0000 - 006АD598
C00000 - 01C60068

PAR код у Zsnesw имеет формат AAAAAAVV, где А - адрес, а V - значение (искать надо целое 1 байт). Обратите внимание, что банки памяти в Zsnesw идут не подряд. Начальный нулевой адрес равен 006АD598.

Для приставки Snes9X нулевой адрес меняется в зависимости от операционной системы. Найдем нулевой адрес для Snes9X 1.43. Для Windows 98 - 00D74240, для Windows 2000 - 013F0048. Найдем указатель на этот адрес, для этого запустим поиск указателей в Windows 98, сохраним результат поиска. Потом запустим Windows 2000 и загрузим в ArtMoney сохраненный результат, сделаем отсеивание указателей. Получим адрес указателя 0085C1A0, при старте Snes9X он равен нулю, после загрузки рома он указывает на нужную область. Приставка на базе процессора Z80. Адресное пространство всего 64 Kb. Перезаписываемая область памяти WorkRAM C000-FFFF размером 16Kb. По адресу $8000 содержится номер банка WorkRAM. То есть если номер банк 1, а потом поменять на 2, то рабочая область поменяет содержимое, адреса останутся те же. Большинство игр используют один банк WorkRAM.
Для нахождения нулевого адреса используйте PAR код на адрес C000. Для эмулятора Kega Fusion 3.4 начальный адрес рабочей области равен 00DEC048. В приставке есть центральный процессор MCS 6502 с оперативной памятью 64Kb. И есть также видеопроцессор PPU с видеопамятью 8Кб. Перезаписываемая область памяти RAM 0000-8000 размером 32Kb. Большинство игр использует WorkRAM 6000-8000 размером 8Kb. Для VirtualNES 0.92 нулевой адрес равен 0059AAF0. Центральный процессор, модифицированный вариант Z80, который адресует 64Kb памяти.
A000-BFFF switchable RAM 8Kb
C000-DFFF internal RAM 8Kb
Через редактор памяти эмулятора VisualBoyAdvance легко находим адреса этих блоков.
Центральный процессор ARM7TDMI 16.78 MHz, который может работать с 4Gb памяти. Существует две перезаписываемые области памяти
02000000-0203FFFF On-board WorkRAM 256kB
03000000-03007FFF In-chip WorkRAM 32kB
Через редактор памяти эмулятора VisualBoyAdvance легко находим адреса этих блоков. Для приставки Sony Playstation основная рабочая область памяти 80000000 - 801FFFFF размером 2Mb. Карта памяти:
000000 - 000100 CPU Internal RAM (Timers / DMA / z80 / etc.)
000100 - 006BFF Work RAM
006C00 - 006FFF CPU Workspace
007000 - 007FFF Sound RAM
008000 - 00BFFF Video RAM
200000 - 3FFFFF ROM
800000 - 9FFFFF Extra ROM (for 32 Mbit games)
FF0000 - FFFFFF BIOS
Рабочий банк памяти 100000 - 10FFFF (64Kb). Найдем начало банка 100000 в Nebula 2.25, используя игру Metal Slug 2 (mslug2.zip).
Создайте файл NENULA\CHEATS\mslug2.dat
[0]
Name=Zero
0=ZeroA1,100000,A1
1=ZeroA2,100000,A2
2=ZeroA3,100000,A3
Default=0

Выберите "Game->Cheats->Zero->ZeroA1" в меню Nebula. Переходим в ArtMoney и ищем "A1" (целое 1 байта). Переключаемся обратно в Nebula. Выберите "Game->Cheats->Zero->ZeroA2" в меню Nebula. Отсеиваем в ArtMoney значение "A2" (целое 1 байт) и получаем адрес 037F8058. Находи указатель на этот адрес, получаем указатель 00732678. Рабочая область 000000 - 1FFFFF (2Mb).
Меню CHEATS в Nebula не работает. Поэтому нужно найти известный адрес жизни, в какой-нибудь игре, и вычесть из него адрес жизни в эмуляторе, получим адрес начала области. Рабочая область памяти FF0000 - FFFFFF (64Kb). Найдем начало области FF0000 в Nebula 2.25, используя игру Alien Vs Predator (avsp.zip).
Создайте файл NENULA\CHEATS\avsp.dat
[0]
Name=Zero
0=ZeroA1,FF0000,A1
1=ZeroA2,FF0000,A2
2=ZeroA3,FF0000,A3
Default=0

Выберите "Game->Cheats->Zero->ZeroA1" в меню Nebula. Переходим в ArtMoney и ищем "A1" (целое 1 байта). Переключаемся обратно в Nebula. Выберите "Game->Cheats->Zero->ZeroA2" в меню Nebula. Отсеиваем в ArtMoney значение "A2" (целое 1 байт) и получаем адрес 037F8058. Находи указатель на этот адрес, получаем указатель 00732678. Для приставки Panasonic 3DO рабочая область памяти RAM находится по адресам 00000000 - 00200000 размером 2Mb. В эмуляторе FreeDo вызываем окно дебагера (в меню CPU->DEBUG). В поле Commands пишем команду - w 0x00000000 0xAA (записываем по адресу 00000000 значение AA). После этого в ArtMoney ищем значение AA тип 1 байт целое. Далее выполняем w 0x00000000 0xBB, и в ArtMoney отсеиваем значение BB. Получаем нулевой адрес эмуляции. Внимание! Эмулятор FreeDo для данных использует перевернутый порядок байтов. То есть, при поиске вы должны выбрать в настройках ArtMoney перевернутый порядок байтов. IBM PC имела 20-разрядную адресацию, что позволяло адресовать память до 1Mb. Физический 20-битный адрес формируется из двух 16-битных чисел: сегмент и смещение. Сегмент и смещение складываются, и получается физический 20-битный адрес. Сегмент может грузиться в разный физический адрес, а вот адресация внутри сегмента уже постоянна и не меняется. Именно поэтому адреса в таблице для DOS игр могут меняться и требуют использование команды "авто изменение адресов". Начиная с 80386 процессора, появилась дополнительная память свыше 1Mb. Но доступ в дополнительную память медленнее, чем в основную, и возможен только через использование специальных драйверов EMM386.SYS и HIMEM.SYS. Поэтому параметры DOS игр следует искать в основной памяти (в первом мегабайте памяти).
Для нахождение нулевого адреса, достаточно запустить в эмуляторе такой код, где Value - значение которое нужно занести в нулевой адрес:
xor AX,AX
mov BX,Value
mov ES,AX
mov ES:0,BX
Для эмулятора NTVDM (стандартный эмулятор DOS в Windows 2000/XP) нулевой адрес эмуляции совпадает с нулевым виртуальным адресом процесса. То есть найденный виртуальный адрес в процессе NTVDM совпадает с физическим адресом DOS.
Для эмулятора WINOA386 (стандартный эмулятор DOS в Windows 95/98) найти область не возможно, так как она дефрагментирована.
Для эмулятора DosBox легко находится нулевой адрес, потом указатель на него.

Внимание! Настройки ArtMoney для DOS не работают для игр запускаемых в защищенном режиме. Это в основном большие игры 1993-1996 года выпуска и моложе. Например, такие игры как Syndicate (1993), Doom (1993), Doom 2 (1994) и Heroes of Might and Magic (1995). Для приставки Sony Playstation 2 основная рабочая область памяти 00000000-01FFFFFF размером 32Mb. Для TLB версии PCSX2 0.92 нулевой адрес легко находится через редактор памяти (вызывается через меню Debug - Memory Dump, там внизу есть поля для ввода адреса и значения, а также кнопка Patch It для изменения). Например, заносите по нулевому адресу значение A1A2A3A4. Переходим в ArtMoney и ищем "A1A2A3A4" (целое 4 байта). Легко нашли один адрес, он и есть нулевой. На него ищем указатель. Для VM версии PCSX2 только через известный адрес, в какой-нибудь игре, или через карту процесса (ищите блок размером 2000000, он там один такой).

Внимание! PCSX2 версия VM (Virtual Memory) имеет защиту памяти процесса от записи, поэтому используйте настройку "Использовать свои функции доступа к памяти" (доступно только в ArtMoney Pro). Для приставки Nintendo 64 основная рабочая область RAM памяти 00000000 - 00800000 размером 8Mb. Компьютер на базе процессора Z80. Адресное пространство 64 Kb. Память разбита на 4 слота по 16 Kb. Для MSX 1 и 2 перезаписываемая область памяти RAM 8000-FFFF размером 32Kb. Для MSX 2+ перезаписываемая область все 64 Kb. В эмуляторе Blue MSX 2.7 есть редактор памяти в окне Debugger, нулевые адрес ищутся через него. Нужно найти указатель на каждый из четырёх слотов. Основная рабочая область памяти 1F0000 - 1F2000 (8Kb). 00200000-002FFFFF : Work RAM Low (1MB)
06000000-07FFFFFF : Work RAM High (1MB) Основная рабочая область памяти 0C000000-0FFFFFFF (System RAM) размером 16Mb
Назад    Содержание    Вперед

Copyright (C) 1996-2010, System SoftLab.
Дата последнего обновления
30 апреля 2010 года