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

Многие, наверное, помнят время игровых приставок, пик, распространения которых в России пришелся в 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
Для GameCube один блок RAM 24Mb (80000000-81800000). Для Wii добавляется ещё один блок на 64Mb (90000000-94000000). То есть настройки для GameCube можно получить скопировав первый блок RAM из настроек Wii. Для того чтобы найти нулевые адреса обоих блоков нужно запустить эмулятор Dolphin в режиме отладки (DEBUG MODE), запускайте Dolphin.exe -d. Открываете любую игру для Wii, жмете кнопку паузы. В меню ставите галочку View->Memory. Далее переходите в закладу Memory. В поле адрес вводите 80000000, в поле значение A1 и жмете кнопку Set Value. Переходим в ArtMoney и ищем "A1" (целое 1 байта). Переключаемся обратно в Dolphin. В поле значение вводим A2 и жмете кнопку Set Value. Отсеиваем в ArtMoney значение "A2" (целое 1 байт) и получаем адрес (обычно их три). Берите первый адрес добавляйте в таблицу и ищите на него указатель. Аналогично действуйте для адреса 90000000. Amiga 1000 это первая модель компьютера Amiga выпущенная в 1985 году! Был использован процессор Motorola 68000 частотой 7.16 МГц, память Chip RAM максимум 512Kb. Видео система Original Chip Set (OCS) поддерживала видеорежимы 320x256, 640x256 в 32 цвета (из 4096 возможных). Основная рабочая область памяти 00000000-00200000 (Chip RAM) размером до 2Mb.

Следующая модель Amiga 500 вышедшая в 1987 году уже имела дополнительную память Slow RAM 512Kb (00C00000-00C80000). Данная память Slow RAM используется только в модели Amiga 500!

А также в Amiga 500 появился дополнительный слот для Fast RAM размером до 8Mb (07800000-8000000). Большинство игр 95% использует только Chip RAM. Но есть игры, например Akira, которые используют при наличии Slow RAM или Fast RAM. При этом на параметры легко находятся указатели! Адрес жизней в Chip RAM - 00085CE0, в Slow RAM - 00C05CE0, в Fast RAM - 07805CE0. А указатель будет 00001DB0 со смещением 5CE0 (23776 в дес.). То есть смещение указателя будет равно последним 4 цифрам адресов в различных RAM.

Начиная с модели Amiga 500+ 1987 года используется новый графический чипсет Enhanced Chip Set (ECS), поддерживающий видеорежим 640x480 в 32 цвета (из 4096 возможных). Есть игры только для чипсета ECS, обычно это указывается в названии игры в скобочках. Максимальный размер Chip RAM увеличен до 2Mb

В октябре 1992 года две новых модели: Amiga 1200 и Amiga 4000. Новинки использовали графический чипсет Advanced Graphics Architecture (AGA), поддерживающий видеорежимы 800x600, 1024x768 в 256 цветов (из 16,7 млн возможных). Есть игры только для чипсета AGA, обычно это указывается в названии игры в скобочках. Amiga 1200 имела процессор Motorola 68020 частотой 14 МГц. Amiga 4000 имела мощный процессор Motorola 68030/68040 с частотой 25 МГц.

В 1993 году выходит консоль Amiga CD, технически это аналог Amiga 1200 вместо дисковода используется CD-ROM. Самая последнняя и самая мощная Amiga 4000T появилась в 1995 году. В неё можно было вставить процессор Motorola 68060 частотой 50 МГц.
Назад    Содержание    Вперед

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