View Page Source

Revision (current)
Last Updated by feos on 10/19/2023 4:12 PM
Back to Page

[https://files.tasvideos.org/common/Wiki/EmulatorResources/RamSearch/RamSearch.png|right]

Ram Search is a windows dialog for rerecording emulators designed to find useful ram values. It was originally developed for Gens rerecording by Upthorn and Nitsuja.  Since then it has been ported to most rerecording emulators supported by the site.  Therefore, it is documented here.

! Emulators with Ram Search:
*[BizHawk]
* [http://www.fceux.com/|FCEUX]
* [http://code.google.com/p/gens-rerecording/|Gens]
* [http://code.google.com/p/snes9x-rr/|SNES9X-rr]
* [http://code.google.com/p/vba-rerecording/|VBA-rr]
* [http://desmume.org/|DeSmuME]
* [http://code.google.com/p/psxjin/|PSXjin]
* [http://code.google.com/p/pcsxrr/|PCSX-rr]
* [http://code.google.com/p/pcejin/|PCEjin]
* [http://code.google.com/p/fbarr/|FBA-rr]
* [http://code.google.com/p/vbjin/|VBjin]
* [http://code.google.com/p/yabause-rr/|Yabause-rr]
----
! Documentation

Ram Search is a memory searching dialog to aid in finding useful RAM values.  Like any RAM searching dialog, it is designed to start with the entire RAM contents and then the user weeds out values that aren't what the user is looking for.  For more information regarding how to find RAM Values see [Memory Search]. For a video tutorial on RAM Search, see http://www.ustream.tv/recorded/8547343 .

To make a search, the first step is to press the {{Reset}} button.  This will put all RAM Values into the available search.  The next step is to advance the game (either by frame advance, or by letting the game play unpaused).  Then a search must be done.  This requires setting the {{Comparison Operator}} and {{Compare To/By}} then clicking the {{Search}} button. 
----
! Comparison Operators

Whenever the {{Search}} button is clicked, RAM Search compares the current RAM values with a value based on the {{Compare To/By}} .  It compares the contents based on which comparison operator is selected.  Any RAM values that don't match the comparison criteria are discarded.  RAM Search offers a variety of searching filters.  

* Less Than - Keeps values that are smaller than the Compare value 
* Greater Than - Keeps values that are greater than the Compare value
* Less than or equal - Keeps values smaller or equal
* Greater than or equal - Keeps values larger or equal
(be careful of signed vs unsigned with these)
* Equal to - Keeps only values that are the same (not a good one to use as your first search)
* Not Equal to - Keeps values that are different
* Different By []: - Keeps values that are less then or greater than the compare value by the amount typed into the edit box.  (This can be useful, for instance, if you know the amount of damage a weapon does and you are looking for an enemy HP value).
* Modulo [] Is - The modulus operator.  Will divide the current and previous and keep any that have a remainder equal to the value typed in the edit box.  (Useful for finding timers).

! Compare To/By

* Previous Value - compares to the value from the last time the {{Search}} button was pressed or from the point {{Reset}} was pressed if no search has yet been made.
* Specific Value - "Known value".   Compares to the value typed into the edit box (useful when you know what value the address should be).
* Specific Address - Compares to another RAM address based on the address typed in the edit box.
* Number of Changes - A handy feature.  Compares the number of changes of each address with the value in the edit box.
----
! Data Size/Type/Display

__Data size__

A very important value to set and depends on knowledge about the platform being used.  NES for instance will almost always be 1 byte (8-bit) values whereas SNES and GENS will often be 2 byte values.  DS and GBA are typically 4 byte.

__Data Type/Display__

Signed/Unsigned can make a significant different on the search criteria so knowledge of this property is important.  Speed address, for instance, will usually be signed whereas x,y coordinates and subpixel values will be unsigned.

Hexadecimal display can be useful, especially for values that tend to be base 16 anyway (NES subpixel values for instance are almost always 1 byte with 1/16th precision.  Hexadecimal display will show these values as 10, 20, 30, A0, etc).
----
! Advanced features

__Changes__
RAM search keeps track of values every frame.  Each time they change, the change counter increases.  It is reset after every search.  This knowledge can be used in conjunction with the {{Number of Changes}} comparison operator.  For instance, one could move the character right for 6 frames, and then do a Number of Changes = 6 search to find the characters x position.  Timers could be found by search for Changes = 1 every frame.

Changes can be reset to 0 at any time with the {{Clear Change Counts}} button.

__Preview__

Whenever a search criteria is set, RAM Search will display in red the values that will be removed if the {{Search}} button is clicked.  This allows you to preview the results of the search.

__Autosearch__

This allows you to automate the search process.  When checked, RAM Search will click the {{Search}} button for you every frame.  This could be useful for finding x position for instance.  Set the search to {{Greater than}} {{Previous Value}}, click Autosearch, the press the Frame Advance key repeatedly.

__Undo__

This allows you to clear the last search.  Useful for mis-clicks or to revert to a previous state should the search criteria not give desirable results.

__Eliminate__

Allows you to manually highlight one or more addresses in the address list and remove them without having to do a search.  This is especially useful when the list is narrowed down to just a few values that the user can visually monitor and eliminate.

__Watch__

When clicked, an address will be added to the [EmulatorResources/RamWatch|Ram Watch] dialog.

__Add Cheat__

Take the highlighted address and freeze it to its current value.