MAME, and its console cousin, MESS, has a system that allows the user to modify the values present in memory - in other words, cheat. This document will attempt to guide you through using the MAME and MESS cheat engine.
Why is there a cheat engine for MAME and MESS, when the objective of these emulators is to preserve the history behind arcade and console systems that would be otherwise lost in the annals of history? The justification of the cheat engine in MAME and MESS seems to be a rocky one, but one clear argument remains: the cheat engine allows us to keep track of what goes on while the game is working. Just like the ability to play games is a side effect of successful emulation and preservation, the ability to cheat is merely a side effect of being able to see what is going on.
However, it should be noted that the cheat engine was not originally in this vision, but rather the common "kiddie vision" of being able to cheat. The cheat engine was originally a hack to MAME v.29 created by Marc Lafontaine. The basic elements of what we refer to as the "old cheat engine" was already there - however, due to the way the cheat engine would write into memory, it could change any location in memory. Essentially, this "bug" became the predecessor to ROM cheats being part of a cheat engine.
With the passing of MAME versions, the cheat engine ceased to work for the majority of users until JCK made it work v.34b2, and updated it until v.35final. Stephane Humbert (or stephh as he is known to the cheat community) continued this work from v.37b2 to v.37b7. During this time, the cheat engine would only work for selected platforms (mainly DOS and Windows, as this was MAME's primary platforms). It was not until v.37b14 when the cheat engine was officially part of the MAME core, thanks to Brad Oliver and Ian Patterson. Now, all versions of MAME, regardless of platform, could harness the power of the cheat engine. It is this cheat engine that we refer to as the "old cheat engine".
As time passed on, it appeared that the cheat engine was showing its age. The numbers of cheats that were found, as well as the numbers of cheats that could be found if it wasn't for limitations of the cheat engine, led to a rewriting of the cheat engine that would be eventually incorporated into MAME v.60 (and henceforth referred to as the "new cheat engine"). Since then, various minor bug fixes have been made.
Most of the discussion in this document will point to the new cheat engine, although references will be made to the old cheat engine.
However, note that the old cheat engine did not work in MESS, for some reason. Thus, the new cheat engine, found only in MESS v.61 or newer, is the only one that works with MESS.
It is recommended that you have a copy of MAME or MESS with the new cheat engine, either by downloading the official binaries or compiling your own copy. You can also implement the new cheat engine in earlier versions of MAME or MESS, or your own builds of MAME or MESS, but that is beyond the scope of this document.
Note: For the purposes of this document, a game is defined as either a MAME game or a MESS system.
Before you can use the cheat engine in MAME or MESS, you must enable it. Here is how you do this for different platforms:
Be forewarned that if you use a cheat in the cheat engine, your high scores will not be saved, unless they are stored on NVRAM (such as Neo-Geo games).
If, for any reason, you need to disable the cheat engine while MAME or MESS is running, you can press F6 to do so. This, however, does NOT bypass the high score non-saving mechanism presented above. Compiling the cheat engine without this feature is considered to be taboo even in the cheating community, and thus, is beyond the scope of this document.
The easiest way to obtain cheats is to get the latest and greatest cheat file. A cheat file is simply a text file containing cheats for your game. The MAME and MESS cheat engines rely on these cheat files - they contain no information about cheats by themselves, and thus, without these cheat files you cannot cheat.
A MAME cheat file will always be called cheat.dat, and MESS cheat files will be called by their eight-letter short names, with either a .dat or a .cdb extension. That is, there is one cheat file for all of MAME, while there is one cheat file for each system emulated in MESS.
After obtaining a cheat file, you must place it in a correct location so that MAME or MESS will locate the cheat file and load the cheats off of the file.
Command-line versions of MAME and MESS can also use alternate cheat files - that is, the naming convention above need not apply, since you are overriding them. Furthermore, you can load more than one cheat file at once. To do this, launch MAME or MESS with the "-cheatfile" or the "-cf" parameter (they are one and the same), followed by a semicolon-separated list of files.
Alternately, you can change the default name of the cheat file from cheat.dat. To do this, edit mame.ini (mame.cfg in DOS and UNIX versions) and in the line it says "cheat_file cheat.dat" ("cheatfile = cheat.dat" in DOS and UNIX versions) to "cheat_file " (or "cheatfile = ") followed by a semicolon-separated list of cheat files. This would make MAME or MESS look in those files by default - any list can still be overridden with the "-cf" parameter when you run MAME or MESS.
Note that if you save a cheat from within the cheat engine, you will save it into the first file named, or the default cheat file if none is specified.
Upon enabling the Cheat Engine, there should be a new option in your Config Menu (The default button to summon the Config Menu is Tab. MESS computer systems that rely on the use of your keyboard may have to find some other mechanism to summon the menu.) called "Cheat". From this menu you will be able to access all of the functions in the cheat engine. There will be several options inside the Cheat menu. They are summarized below:
This section of the document only looks at the first option, which is the only option that you will need if you only intend to use cheats and not look for them.
To use a cheat, you must go to "Enable/Disable a Cheat". There, you will have a listing of all the cheats for that game, or the message "This game has no cheats" if the game has none. There will be three kinds of items in the list of cheats. If the item appears to be centered on the list, it is a comment - used to make quick notes. These items will be skipped over as you go down the list. The other two kinds will initially either have an "Off" or a "Set".
The cheats that are labeled "Off" that, when turned on, are then labeled "On", are persistent cheats. To turn a persistent cheat on, press the right arrow key. You may be prompted to select a number. Do so. To turn a cheat off, press the left arrow key. Note that if the cheat prompts for a number and you decide to change it, you will have to turn the cheat off, then turn the cheat back on and select the desired number.
The cheats that are labeled "Set" are one-shot cheats. To turn this kind of cheat on, or to "activate" the cheat, press Enter (Return on some keyboards). Like persistent cheats, you may be prompted to select a number.
There are also a third type of cheat, which, when off, will be labeled "Off", but when on, will not say "On". Rather, it will give some other, and perhaps more logical name, and it will usually give you at least two or more choices to choose from, not counting "Off", when you press either arrow key to go through your choices. These cheats are known as list cheats. Generally, list cheats are persistent, but they can also be one-shot cheats. There is even the remote possibility that there is an item in a list that is persistent and another that is one-shot (although list cheats will never make you select a number, even though it is theoretically possible). Thus, a list cheat can be off if you either explicitly select "Off" or select a one-shot item (since, of course, you would need to press Enter or Return to activate it).
Regardless of whether the cheat is persistent, list, or one-shot, if the word appears to be white-on-black instead of the standard black-on-white, this means that you have additional information that you should read by pressing Shift-Enter (or Shift-Return).
For those that are inclined to search for new cheats not in the list given to you, or for those who want to simplify their cheating experience, this may just be for you.
The second option in the Cheat menu is "Add/Edit a New Cheat". When going to that menu, you will notice that you will get the exact same thing as the "Enable/Disable a Cheat" menu, except that everything is centered and that you can select the comment cheats.
This menu allows you to alter or add cheats. To add a cheat, press A. A new item called "(none)" will come above where you are currently selected. This is a blank cheat. By pressing Enter (or Return), you can then edit this cheat. By pressing D over a cheat, you delete the cheat, and by pressing S, you save the existence of the cheat into your cheat file.
When you edit a cheat, you will enter a new menu with some, but not all, of the following options:
Surely, no cheat engine would be complete without a way to look for these cheats. Without cheat searching, one would have to look through obscure code that are often times either encrypted or too advanced for most people. Cheat searching, or the process of looking through game code or game memory (sometimes both), bridges that gap.
The four options in the middle of the cheat menu is the core to cheat searching. In order, they are "Start a New Cheat Search", "Continue Search", "View Last Results", and "Restore Previous Results". The first is used to begin new searches, the second to continue a search already in progress, the third allows you to see what possible matches there are so far, and the fourth will undo the last search (multiple undoes are not part of the cheat engine). If a search returns only one result, a new cheat is automatically added to your cheat menu, bearing the name of the address and the value that was there when the search began.
Just like the cheats themselves, there are two different methods to perform cheat searches, the second of which is developed alongside the new cheat engine. The older and easier to understand method is called the "Classic" method, and the newer but more powerful one is called the "Advanced" method. To switch between the two methods, under the cheat menu, go to Options, and under the "Search Dialog Style" option, press the left or right arrow keys to switch between Classic and Advanced. Both methods will be covered, starting, of course, with the Classic one.
Under the search menus in Classic mode, you will be presented with several options. If you press Enter (Return on some keyboards) on any option other than the first, the selected search will be performed:
You may choose to switch the type of search you wish to perform partway through the search.
Again, the new cheat engine is much more flexible than that of old. Firstly, there's Advanced mode. The concept behind Advanced mode is searching based on an equation method - that is, much like mathematics, you set a left hand side of the equation, right hand side, a comparison operator, and the cheat engine would return addresses and values that match the operation. The Advanced mode cheat dialog goes as follows:
A watchpoint is an object that is used to keep track of a value that is in an address while emulation is running. Thus, it can also be used for other purposes such as keeping track of short searches or filling out the remaining items in a list cheat. You can have up to 20 active watchpoints at any time. There are many ways of creating a watchpoint:
In the "Configure Watchpoints" menu, you will see twenty items, each with an address and a number in brackets, denoting the length of the watchpoint, or how many bytes it is watching. Selecting a watchpoint will bring forth a menu. The choices are:
To clear a watchpoint, select the watchpoint in the "Configure Watchpoints" menu and press D. This will set the length of the watchpoint to zero. If the watchpoint is created through a watch cheat, you can also turn the cheat off to clear it.
The cheat file is merely a text file. Anyone with a plain text editor can easily change the file to add, modify, and delete cheats, just as easy (and sometimes even easier) than creating cheats through the cheat engine.
Now, provided you have a cheat file and a text editor of competent ability (read: it should be able to read text files larger than 32K), let's take a look inside our cheat file. Our cheat file will probably contain three types of items:
There is also a fourth type of line, the underscore command, but it is irrelevant to cheating.
Every single cheat line can be divided into one of two types: old format cheats and the new format cheats. Since MESS v.61 is the first official version of MESS with a working cheat engine, needless to say only new format cheats are used in MESS.
A cheat line is further divided by colons into fields, much like a database.
This is the order of fields in an old-style cheat:
Here are the cheat type numbers for old-style cheats:
000
A persistent write cheat that constantly sets itself.001
A one-shot write cheat.002
A persistent write cheat that will set itself every second.003
A persistent write cheat that will set itself every two seconds.004
A persistent write cheat that will set itself every five seconds.005
A persistent write cheat that will set itself one second after the value in the address the cheat refers to changes.006
A persistent write cheat that will set itself two seconds after the value in the address the cheat refers to changes.007
A persistent write cheat that will set itself five seconds after the value in the address the cheat refers to changes.008
A persistent write cheat that will set itself unless the value is decreasing by 0x01 each frame.009
A persistent write cheat that will set itself unless the value is decreasing by 0x02 each frame.010
A persistent write cheat that will set itself unless the value is decreasing by 0x03 each frame.011
A persistent write cheat that will set itself unless the value is decreasing by 0x04 each frame.The following are set/clear cheats. Adding 20 to the cheat type will make the cheat clear bits instead of set them.
020
A persistent cheat that will set only the bits specified in the value.021
A one-shot cheat that will set only the bits specified in the value.022
A persistent cheat that will set only the bits specified in the value every second.023
A persistent cheat that will set only the bits specified in the value every two seconds.024
A persistent cheat that will set only the bits specified in the value every five seconds.The following are number select cheats. For number select cheats:
060
A one-shot number select cheat (from zero to the value) that will set itself when the value in memory changes.061
A one-shot number select cheat (from one to the value plus 1) that will set itself when the value in memory changes.062
A one-shot number select cheat (from one to the value) that will set itself when the value in memory changes.The following cheats did not necessarily work in the old cheat engine, but are here for completion purposes:
100
Your standard persistent ROM cheat. This cheat type takes into account the endianness (whether the most significant bit is first, which is big-endian, or last, which is little-endian) of the system you are emulating and the endianness of your computer. If necessary, the cheat engine will swap the bits so that they match.101
Your standard one-shot ROM cheat. This cheat type takes endianness issues into account.102
Your standard one-shot ROM cheat. This cheat type does not take endianness issues into account.103
Your standard one-shot ROM cheat. This cheat type does not take endianness issues into account.110
Your standard persistent memory handler cheat. This cheat type takes endianness issues into account.111
Your standard one-shot memory handler cheat This cheat type takes endianness issues into account.112
Your standard one-shot memory handler cheat. This cheat type does not take endianness issues into account.113
Your standard one-shot memory handler cheat. This cheat type does not take endianness issues into account.120
Your standard one-shot EEPROM cheat.121
A one-shot EEPROM cheat that will set only the bits specified in the value.122
A one-shot EEPROM cheat that will clear only the bits specified in the value.Adding 500 to any of the above cheat types will make linked cheats. Each linked cheat is linked to the one above it, thus, the first cheat type in a linked cheat would be less than 500. Cheat comments in linked cheats will not be read by the cheat engine.
Finally, there are two more cheat types:
Needless to day, the old cheat engine had its limitations. This is where the new cheat engine comes in. It is recommended that any cheats you make is in the new cheat engine format.
The new cheat engine has several advantages over the old one. For example, you are now able to make persistent number-select cheats that activate once every few seconds, which was not possible with the old cheat engine. Furthermore, the new cheat engine introduces new types of cheats, such as list cheats and relative address cheats. As a bonus, you can also pre-assign a key to a cheat, or have a cheat on by default.
This is the order of fields in a new-style cheat:
The cheat type in the new cheat engine is more complicated than that of the old cheat engine, but is easier to learn. It relies on 32 bits of data (expressed in eight hexadecimal digits), and the configuration of these 32 bits will determine the cheat type. Let's look at this in more detail. The bits are represented as eight groups of four (so that a final conversion to hexadecimal will be easy). "-" denotes that this bit is irrelevant to the explanation, a letter denotes that it is relevant, but varies, and "0" and "1" denote what this bit has to be to fit the explanation. By ORing the necessary bits, you will have a cheat type.
---- ---- ---- ---- ---- ---- ---- ---0
Persistent. The cheat is on until it is turned off manually.---- ---- ---- ---- ---- ---- ---- ---1
One-Shot. The cheat is on until it must be applied, afterwards it is turned off.---- ---- 0--- ---- ---- ---- ---- ----
Will not be restored. When the cheat is turned off, the value that was previously there will not be reapplied.---- ---- 1--- ---- ---- ---- ---- ----
Will be restored. When the cheat is turned off, the value that was previously there will be reapplied.---- ---- ---- ---- ---- ---- xxx- -00-
Normal/Delay. The bits marked with an X denote the length of time between applications of a cheat, in seconds. It can be set from zero (the cheat is constantly applied to the address) to seven (the cheat is applied to the address every seven seconds).---- ---- ---- ---- ---- ---- xxx- -01-
Wait for Modification. The bits marked with an X denote the length of time to wait after the value changes before the cheat is applied, in seconds. It can be set from zero (the cheat is applied instantly when the value in the address changes) to seven (the cheat is applied seven seconds after the value in the address changes)---- ---- ---- ---- ---- ---- xxx- -10-
Ignore if Decrementing. The bits marked with an X denote the value to be ignored. It can be set from zero (the cheat is applied only when the value in the address is not decrementing) to seven (the cheat is applied only when the value in the address is decrementing by seven).---- ---- ---- ---0 ---- ---- xyy- -110
Watchpoint. The bit marked with an X denote whether to make a label for the watchpoint (1 for yes). If a label is used, it is taken from the cheat comment. The bits marked with a Y denote how the watchpoint will be displayed (00 - Hex, 01 - Decimal, 10 - Binary, 11 - ASCII). Because of cheat engine limitations, this cheat must be persistent, and cannot be linked with other cheats.---- ---- ---- 0--- ---- ---- ---0 0---
Write with Mask. This will write, using a mask that specifies which bits are to be written in, a value to an address.---- ---- ---- 0x-- ---- ---- ---0 1---
Add/Subtract. This will add or subtract a constant value until it exceeds a limit, when the limit will be applied. The bit marked with an X is 0 to add and 1 to subtract.---- ---- ---- 0--- ---- ---- ---1 0---
Force Range. This cheat will ensure that the value is within a certain range, and if it is outside this range, the value, which should be inside the range, will be applied.---- ---- ---- 0x-- ---- ---- ---1 1---
Set/Clear. This cheat will set (make the specified bits 1) or clear (make the specified bits 0) the bits marked in the value on the specified address. The bit marked with an X is 0 to set and 1 to clear.---- ---- ---- ---- ---- ---0 ---- ----
Not allowed. The specific value stated in the cheat will be applied.---- ---- ---- ---- ---- xyz1 ---- ----
Allowed. The user will be able to choose a value within certain boundaries. The bit marked with a Z denotes the value that is displayed to the user. This value is added to the specified value. The bit marked with a Y denotes the minimum value that can be selected. The bit marked with an X denotes whether the value that is to be applied should be applied as a hexadecimal number or a binary-coded decimal number (0 for hex, 1 for binary-coded decimal).---- ---- ---- ---- --00 ---- ---- ----
The cheat will not do anything before the actual operation is performed.---- ---- ---- ---- --xx ---- ---- ----
The cheat will first change (prefill) the value with a constant, and when the value changes from that constant, the cheat is applied. The bits marked with an X denote the constant used: 01 for 0xFF, 10 for 0x00, and 11 for 0x11.---- ---- -yxx ---- ---- ---- ---- ----
The bits marked with an X denote how many bytes are to be written with the cheat: 00 for one byte, 01 for two, 10 for three, and 11 for four. If changing two or four bytes, the cheat engine will attempt to sort out endianness (whether the data is entered byte-swapped or not) for you. (It cannot for three bytes because the cheat engine cannot recognize word boundaries) If the cheat engine's application of the cheat is, for any reason, incorrect, then the bit marked with a Y should be 1 to put it back to its correct form.000x xxxx ---- ---- ---- ---- ---- ----
Standard Memory. This cheat will write into normal memory. The bits marked with an X denote the CPU index.001x xxxx 1--- ---- ---- ---- ---- ----
ROM Region. This cheat will write into the game ROMs themselves. The bits marked with an X denote the ROM region. For safety purposes, it is recommended that the previous value be restored when the cheat is disabled.010x xxxx ---- ---- ---- ---- ---- ----
Mapped Memory. This cheat will write into the driver declaration of the memory. The bits marked with an X denote the CPU index.0110 0001 ---- ---- ---- ---- ---- ----
EEPROM. This cheat will write into the game's EEPROM.100x xxyy ---- ---- ---- ---- ---- ----
Relative Address. This cheat will first determine an address by finding a value stored in memory and then adding a specified constant to it before the cheat is applied. The bits marked with an X denote the CPU index and the bits marked with a Y denote the number of bytes the cheat will read from memory.---- ---- ---- ---1 ---- ---- ---- ----
This cheat line is part of the cheat that the previous cheat line is of.0110 0000 ---- ---0 ---- ---- ---- ----
Comment cheat. This makes the cheat a comment, and cannot be selected. Because of cheat engine limitations, this cheat cannot be part of another cheat.0110 0010 ---- ---0 ---- ---- ---- ----
Select cheat. This makes the line a list cheat header. Because of cheat engine limitations, this cheat cannot be part of another cheat.0110 0100 ---- ---0 -1-- ---- ---- ----
Pre-Enable. This cheat line will make other cheat lines turn on by default. Because of cheat engine limitations, this cheat cannot be part of another cheat, nor can it show up under any of the cheat menus.0110 0011 ---- ---0 -1-- ---- ---- ----
Assign Activation Key. This cheat line will give an activation key to a cheat. Because of cheat engine limitations, this cheat cannot be part of another cheat, nor can it show up under any of the cheat menus.0110 0101 ---- ---0 -1-- ---- ---- ----
CPU Overclock. This cheat will overclock (or underclock) a CPU to a percentage of the actual speed. Because of cheat engine limitations, this cheat cannot be part of another cheat, nor can it show up under any of the cheat menus.Depending on the cheat type, the three data fields are used for different purposes, largely depending on the type of cheat and the operation, if any, the cheat performs. They are as follows:
Despite the power of the cheat engine, there are some restraints on the cheat type that the cheat engine is simply incapable of. They are listed below:
The new cheat engine also allows you to set a few options by writing a few lines in your cheat file. These lines are called "underscore commands", and they look like a new-style cheat, except that there is only two fields. As it is only recognizable in the new cheat engine, a preceding colon is required. The first is always _command in order to identify the line as an underscore command. The second field is a 32-bit hexadecimal number, the first six hex digits containing data that is required by the last two hex digits, which describe the command.
The list of underscore commands are described below:
00
This underscore command will disable the help system within the cheat engine. As the help system is not yet implemented, it is essentially useless.01
This underscore command will make the Classic method of cheat searching the default method. As the cheat engine already does this without underscore commands, it is now redundant, but was used during the beta versions of the cheat engine, which defaulted with the Advanced method.02
This underscore command will make the Advanced method of cheat searching the default method.03
This underscore command will make it so that under the Advanced method of cheat searching, the labels in the top four fields ("LHS", "Comparison", "RHS", and "Value") are hidden.04
This underscore command will make the cheat engine save all your unsaved cheats when emulation stops.If this document did not help you a single bit on using the MAME or MESS cheat engine, or if you want to make your newfound cheats to the world, or even if you want someone to make a cheat for you, you can always drop a line at the one and only official MAME and MESS Cheat Engine Discussion Board (registration is required), found on the web at http://cheat.retrogames.com/forums.
While you're there, you can download the latest and greatest versions of the various MAME and MESS cheat files. The MAME cheat file has been around since its inception in v.29, and has been (irregularly) updated ever since.
There are many members of the MAME and MESS cheat-finding community, and they will all be happy to address any questions you may have - supposing you follow their ground rules and don't tick anyone off, of course.
The following table provides a quick guide for conversion between old and new cheat types, and is designed so that most of the functions of the old cheat is retained. The x'es are dependent on the CPU number used in the CPU field in an old cheat, and the y's are dependent on the memory region being modified. For the bits labeled with a "-", it is suggested that these be left as zeroes, since they have no impact on the cheat type.
Notes:
| Old Cheat Type | New Cheat Type (Expanded Binary Form) |
|---|---|
000 | 000x xxxx 0-00 0--0 -000 ---0 0000 0000 |
001 | 000x xxxx 0-00 0--0 -000 ---0 0000 0001 |
002 | 000x xxxx 0-00 0--0 -000 ---0 0010 0000 |
003 | 000x xxxx 0-00 0--0 -000 ---0 0100 0000 |
004 | 000x xxxx 0-00 0--0 -000 ---0 1010 0000 |
005 | 000x xxxx 0-00 0--0 -000 ---0 0010 0010 |
006 | 000x xxxx 0-00 0--0 -000 ---0 0100 0010 |
007 | 000x xxxx 0-00 0--0 -000 ---0 1010 0010 |
008 | 000x xxxx 0-00 0--0 -000 ---0 0010 0100 |
009 | 000x xxxx 0-00 0--0 -000 ---0 0100 0100 |
010 | 000x xxxx 0-00 0--0 -000 ---0 0110 0100 |
011 | 000x xxxx 0-00 0--0 -000 ---0 1000 0100 |
020 | 000x xxxx 0-00 00-0 -000 ---0 0001 1000 |
021 | 000x xxxx 0-00 00-0 -000 ---0 0001 1001 |
022 | 000x xxxx 0-00 00-0 -000 ---0 0011 1000 |
023 | 000x xxxx 0-00 00-0 -000 ---0 0101 1000 |
024 | 000x xxxx 0-00 00-0 -000 ---0 1011 1000 |
040 | 000x xxxx 0-00 01-0 -000 ---0 0001 1000 |
041 | 000x xxxx 0-00 01-0 -000 ---0 0001 1001 |
042 | 000x xxxx 0-00 01-0 -000 ---0 0011 1000 |
043 | 000x xxxx 0-00 01-0 -000 ---0 0101 1000 |
044 | 000x xxxx 0-00 01-0 -000 ---0 1011 1000 |
060 | 000x xxxx 0-00 0--0 -000 0001 0000 0011 |
061 | 000x xxxx 0-00 0--0 -000 0111 0000 0011 |
062 | 000x xxxx 0-00 0--0 -000 0101 0000 0011 |
063 | 000x xxxx 0-00 0--0 -000 1001 0000 0011 |
064 | 000x xxxx 0-00 0--0 -000 1111 0000 0011 |
065 | 000x xxxx 0-00 0--0 -000 1101 0000 0011 |
070 | 000x xxxx 0-00 0--0 -000 0001 0000 0001 |
071 | 000x xxxx 0-00 0--0 -000 0111 0000 0001 |
072 | 000x xxxx 0-00 0--0 -000 0101 0000 0001 |
073 | 000x xxxx 0-00 0--0 -000 1001 0000 0001 |
074 | 000x xxxx 0-00 0--0 -000 1111 0000 0001 |
075 | 000x xxxx 0-00 0--0 -000 1101 0000 0001 |
080 | 000x xxxx 0-00 0--0 -000 0001 0000 0010 |
081 | 000x xxxx 0-00 0--0 -000 0111 0000 0010 |
082 | 000x xxxx 0-00 0--0 -000 0101 0000 0010 |
083 | 000x xxxx 0-00 0--0 -000 1001 0000 0010 |
084 | 000x xxxx 0-00 0--0 -000 1111 0000 0010 |
085 | 000x xxxx 0-00 0--0 -000 1101 0000 0010 |
090 | 000x xxxx 0-00 0--0 -000 0001 0000 0000 |
091 | 000x xxxx 0-00 0--0 -000 0111 0000 0000 |
092 | 000x xxxx 0-00 0--0 -000 0101 0000 0000 |
093 | 000x xxxx 0-00 0--0 -000 1001 0000 0000 |
094 | 000x xxxx 0-00 0--0 -000 1111 0000 0000 |
095 | 000x xxxx 0-00 0--0 -000 1101 0000 0000 |
100 | 001y yyyy 1-00 0--0 -000 ---0 0000 0000 |
101 | 001y yyyy 1-00 0--0 -000 ---0 0000 0001 |
102 | 001y yyyy 1-00 0--0 -000 ---0 0000 0000 |
103 | 001y yyyy 1-00 0--0 -000 ---0 0000 0001 |
110 | 010x xxxx 1-00 0--0 -000 ---0 0000 0000 |
111 | 010x xxxx 1-00 0--0 -000 ---0 0000 0001 |
112 | 010x xxxx 1-00 0--0 -000 ---0 0000 0000 |
113 | 010x xxxx 1-00 0--0 -000 ---0 0000 0001 |
120 | 0110 0001 1-00 0--0 -000 ---0 0000 0001 |
121 | 0110 0001 1-00 00-0 -000 ---0 0001 1001 |
122 | 0110 0001 1-00 01-0 -000 ---0 0001 1001 |
500 | 000x xxxx 0-00 0--1 -000 ---0 0000 0000 |
501 | 000x xxxx 0-00 0--1 -000 ---0 0000 0001 |
502 | 000x xxxx 0-00 0--1 -000 ---0 0010 0000 |
503 | 000x xxxx 0-00 0--1 -000 ---0 0100 0000 |
504 | 000x xxxx 0-00 0--1 -000 ---0 1010 0000 |
505 | 000x xxxx 0-00 0--1 -000 ---0 0010 0010 |
506 | 000x xxxx 0-00 0--1 -000 ---0 0100 0010 |
507 | 000x xxxx 0-00 0--1 -000 ---0 1010 0010 |
508 | 000x xxxx 0-00 0--1 -000 ---0 0010 0100 |
509 | 000x xxxx 0-00 0--1 -000 ---0 0100 0100 |
510 | 000x xxxx 0-00 0--1 -000 ---0 0110 0100 |
511 | 000x xxxx 0-00 0--1 -000 ---0 1000 0100 |
520 | 000x xxxx 0-00 00-1 -000 ---0 0001 1000 |
521 | 000x xxxx 0-00 00-1 -000 ---0 0001 1001 |
522 | 000x xxxx 0-00 00-1 -000 ---0 0011 1000 |
523 | 000x xxxx 0-00 00-1 -000 ---0 0101 1000 |
524 | 000x xxxx 0-00 00-1 -000 ---0 1011 1000 |
540 | 000x xxxx 0-00 01-1 -000 ---0 0001 1000 |
541 | 000x xxxx 0-00 01-1 -000 ---0 0001 1001 |
542 | 000x xxxx 0-00 01-1 -000 ---0 0011 1000 |
543 | 000x xxxx 0-00 01-1 -000 ---0 0101 1000 |
544 | 000x xxxx 0-00 01-1 -000 ---0 1011 1000 |
560 | 000x xxxx 0-00 0--1 -000 0001 0000 0011 |
561 | 000x xxxx 0-00 0--1 -000 0111 0000 0011 |
562 | 000x xxxx 0-00 0--1 -000 0101 0000 0011 |
563 | 000x xxxx 0-00 0--1 -000 1001 0000 0011 |
564 | 000x xxxx 0-00 0--1 -000 1111 0000 0011 |
565 | 000x xxxx 0-00 0--1 -000 1101 0000 0011 |
570 | 000x xxxx 0-00 0--1 -000 0001 0000 0001 |
571 | 000x xxxx 0-00 0--1 -000 0111 0000 0001 |
572 | 000x xxxx 0-00 0--1 -000 0101 0000 0001 |
573 | 000x xxxx 0-00 0--1 -000 1001 0000 0001 |
574 | 000x xxxx 0-00 0--1 -000 1111 0000 0001 |
575 | 000x xxxx 0-00 0--1 -000 1101 0000 0001 |
580 | 000x xxxx 0-00 0--1 -000 0001 0000 0010 |
581 | 000x xxxx 0-00 0--1 -000 0111 0000 0010 |
582 | 000x xxxx 0-00 0--1 -000 0101 0000 0010 |
583 | 000x xxxx 0-00 0--1 -000 1001 0000 0010 |
584 | 000x xxxx 0-00 0--1 -000 1111 0000 0010 |
585 | 000x xxxx 0-00 0--1 -000 1101 0000 0010 |
590 | 000x xxxx 0-00 0--1 -000 0001 0000 0000 |
591 | 000x xxxx 0-00 0--1 -000 0111 0000 0000 |
592 | 000x xxxx 0-00 0--1 -000 0101 0000 0000 |
593 | 000x xxxx 0-00 0--1 -000 1001 0000 0000 |
594 | 000x xxxx 0-00 0--1 -000 1111 0000 0000 |
595 | 000x xxxx 0-00 0--1 -000 1101 0000 0000 |
600 | 001y yyyy 1-00 0--1 -000 ---0 0000 0000 |
601 | 001y yyyy 1-00 0--1 -000 ---0 0000 0001 |
602 | 001y yyyy 1-00 0--1 -000 ---0 0000 0000 |
603 | 001y yyyy 1-00 0--1 -000 ---0 0000 0001 |
610 | 010x xxxx 1-00 0--1 -000 ---0 0000 0000 |
611 | 010x xxxx 1-00 0--1 -000 ---0 0000 0001 |
612 | 010x xxxx 1-00 0--1 -000 ---0 0000 0000 |
613 | 010x xxxx 1-00 0--1 -000 ---0 0000 0001 |
620 | 0110 0001 1-00 0--1 -000 ---0 0000 0001 |
621 | 0110 0001 1-00 00-1 -000 ---0 0001 1001 |
622 | 0110 0001 1-00 01-1 -000 ---0 0001 1001 |
998 | 000x xxxx ---- ---0 -0-- ---- 000- -110 |
999 | 0110 0000 ---- ---0 -0-- ---- ---- ---- |
The following table provides a quick guide for conversion between equivalent searches in Classic and Advanced Mode.
| Search Type | Starting a New Search | Continuing a Search |
|---|---|---|
| Lives | (Current Data) (Near To) (Value), Size 1, Swap Off, Signed Off | (Current Data) (Near To) (Value), Size 1, Swap Off, Signed Off |
| Lives (using Shift-Enter, or Shift-Return on some keyboards) | (Current Data) (Equal) (Value), Size 1, Swap Off, Signed Off | (Current Data) (Equal) (Value), Size 1, Swap Off, Signed Off |
| Timer | Save Memory | (Previous Data) (Increased By Value) (Value), Size 1, Swap Off, Signed Off |
| Energy | Save Memory | (Current Data) (Equal/Not Equal/Greater or Equal/Less or Equal/Greater/Less) (Previous Data), Size 1, Swap Off, Signed Off |
| Status | Save Memory | (Current Data) (Equal/Not Equal) (Previous Data), Size Bit, Swap Off, Signed Off |
| Slow But Sure | Save Memory | (Current Data) (Equal/Not Equal) (First Data), Size 1, Swap Off, Signed Off |
This appendix will give you a few examples of what the average cheat should look like. For our purposes we will use a fictional arcade game called "Return of Underscore Command (World)", which has the short name "rouc", and a clone called "Return of Underscore Command (Canada)", which has the short name "roucc".
Now, we present a code for this game:
:rouc:00000000:0000BEEF:0000007F:000000FF:Infinite Health P1
This cheat simply writes the value 7F into the address BEEF. By making various changes, we can also make similar cheats that will do the intended job of keeping the player alive, but instead in a more creative fashion.
This document is the copyright of kelvSYC. Unauthorized reproduction of this document is not permitted.
This document does not intend to replace that of the Official Cheat FAQ, maintained by Paul Priest ("Tourniquet").