Part 0 - Table of Contents

  1. Introduction
  2. Enabling the Cheat Engine
  3. Using a Cheat File
  4. Using Cheats
  5. Adding New Cheats
  6. Cheat Searching
  7. Watchpoints
  8. Dissecting the Cheat File
  9. Other Cheat Engine Notes
  10. The MAME and MESS Cheat Engine Discussion Board
Appendices
  1. Glossary
  2. Cheat Type Conversion Guide
  3. Search Conversion Guide
  4. Example Codes
  5. Credits
  6. Legal Mumbo Jumbo

Part 1 - Introduction

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.

Part 2 - Enabling the Cheat Engine

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.

Part 3 - Using a Cheat File

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.

Part 4 - Using Cheats

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).

Part 5 - Adding New Cheats

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:

Part 6 - Cheat Searching

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:

Part 7 - Watchpoints

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.

Part 8 - Dissecting the Cheat File

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:

  1. The game's eight-letter name.
  2. (MESS only) the CRC value of the cart (or disk, or tape, etc.).
  3. The CPU number. 98% of the time, this will be 0, but it depends on the game.
  4. The address in memory that this cheat will change, or for watchpoint cheats, watch. For comment cheats, of which this field will be of no use, leave it as zeroes.
  5. The value that the cheat will apply to the address. For watchpoint and comment cheats, for which this field will be of no use, leave it as zeroes.
  6. The three-digit cheat type number, described below.
  7. The name of the cheat, which can be up to 31 characters long.
  8. An optional cheat comment (leave out the colon preceding this field if you do not want a cheat comment) that can be up to 255 characters long.

Here are the cheat type numbers for old-style cheats:

The following are set/clear cheats. Adding 20 to the cheat type will make the cheat clear bits instead of set them.

The following are number select cheats. For number select cheats:

The following cheats did not necessarily work in the old cheat engine, but are here for completion purposes:

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:

998
A one-byte watchpoint cheat. This can then be adjusted in length and in size through the use of the "Configure Watchpoints" menu.
999
A comment cheat.

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:

  1. The game's eight-letter name.
  2. (MESS only) the CRC value of the cart (or disk, or tape, etc.).
  3. The cheat type number, in 32-bit hexadecimal format.
  4. The first data field, traditionally called the "address field".
  5. The second data field, traditionally called the "value field".
  6. The third data field, traditionally called the "extended data field".
  7. The name of the cheat, which can be up to 255 characters long.
  8. An optional cheat comment (leave out the colon preceding this field if you do not want a cheat comment) that can be up to 255 characters long.

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.

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:

Part 9 - Other Cheat Engine Notes

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:

Part 10 - The MAME and MESS Cheat Engine Discussion Board

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.


Appendix 1 - Glossary

Activation key cheat
A cheat that assigns a key to another cheat when emulation begins. This type of cheat is only available in the new cheat engine.
Add/Subtract cheat
A cheat that will add or subtract a constant value from the value in an address, up to a specified limit.
Binary coded decimal
A format for storing numbers in which each digit is placed in its own four-bit block. As, the number after 0x09 in binary coded decimal format is 0x10, rather than 0x0A in hexadecimal format.
Cheat comment
An optional field, placed last if there is one, in a cheat. Summoned by pressing Shift-Enter (or Shift-Return) when in the "Enable/Disable a Cheat" menu.
Cheat file
A text file containing cheat lines and comment lines.
Cheat line
A line in a cheat file that, when read by the cheat engine, creates a cheat.
Comment cheat
A cheat line that creates a menu item in the "Enable/Disable a Cheat" menu that the cursor will skip over.
Comment line
A line in the cheat file that starts with a colon.
EEPROM cheat
A cheat that modifies values stored in EEPROM. Unlike other cheats, these cheats remain even when the machine is shut down.
Forced range cheat
A cheat that does not permit a value stored in memory from going outside of a specified range, by writing a value within the range when it falls out.
List cheat
A cheat that allows the user to select a value from a predefined list. This type of cheat is only available in the new cheat engine.
List cheat header
The first cheat in a list cheat. It is used to signify the beginning of the list and the name of the list.
MAME
Acronym of "Multiple Arcade Machine Emulator", an open-source emulator for multiple platforms that can emulate over 3000 arcade games. More information about this emulator can be obtained by visiting http://www.mame.net.
Memory handler cheat
A cheat where it modifies values by writing straight to the memory defined in an emulator's driver, bypassing the emulated memory mechanism. This is used when none of the CPUs can access the memory.
MESS
Acronym of "Multi-Emulator Super System", an open-source emulator for multiple platforms based on the MAME source code that can emulate over 200 different kinds of consoles and computers. More information about this emulator can be obtained by visiting http://mess.emuverse.com.
New cheat engine
The cheat engine found in versions of MAME and MESS v.60 or newer.
New-style cheat
A cheat line that will only be recognized by the cheat engine found in v.60 or later versions of MAME and MESS. This cheat line can be identified by the fact that the line starts with a colon.
Number select cheat
A cheat that allows the user to select a number between either zero or one to a specified value, plus either zero or one.
Old cheat engine
The cheat engine found in versions of MAME or MESS before v.60, but generally referring to the cheat engine found in v.37b14 to v.59.
Old-style cheat
A cheat line that can be recognized by the old cheat engine. This cheat line can be identified by the fact that the line does not start with either a colon or a semicolon.
One-Shot cheat
A cheat that, when activated, is on only for an instant - usually one frame.
Overclocking cheat
A cheat that allows processors to overclock, thus making the game go a bit faster. This type of cheat is only available in the new cheat engine.
Persistent cheat
A cheat that, when activated, stays on until you turn it off.
Pre-Enabled cheat
A cheat that is on when emulation begins.
Relative Address Cheat
A cheat that indirectly writes a value to a constantly changing address determined by adding a constant value called the index to a value stored in memory.
ROM cheat
A cheat that patches the ROM so that the values stored in the cheat will be read instead of the values stored in a ROM.
Set/Clear cheat
A cheat that sets or clears only the bits specified in a value.
Underscore Command
A cheat line that sets options for the cheat engine. Only available in the new cheat engine.
Watchpoint
A cheat engine function that allows you to keep watch of an address in memory while emulation is running.
Watchpoint cheat
A cheat that creates a watchpoint. If a watchpoint cheat is persistent, the watchpoint will be deleted when the cheat is off.
Write cheat
A cheat that writes a value to an address stored in memory.

Cheat Type Conversion Guide

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)
000000x xxxx 0-00 0--0 -000 ---0 0000 0000
001000x xxxx 0-00 0--0 -000 ---0 0000 0001
002000x xxxx 0-00 0--0 -000 ---0 0010 0000
003000x xxxx 0-00 0--0 -000 ---0 0100 0000
004000x xxxx 0-00 0--0 -000 ---0 1010 0000
005000x xxxx 0-00 0--0 -000 ---0 0010 0010
006000x xxxx 0-00 0--0 -000 ---0 0100 0010
007000x xxxx 0-00 0--0 -000 ---0 1010 0010
008000x xxxx 0-00 0--0 -000 ---0 0010 0100
009000x xxxx 0-00 0--0 -000 ---0 0100 0100
010000x xxxx 0-00 0--0 -000 ---0 0110 0100
011000x xxxx 0-00 0--0 -000 ---0 1000 0100
020000x xxxx 0-00 00-0 -000 ---0 0001 1000
021000x xxxx 0-00 00-0 -000 ---0 0001 1001
022000x xxxx 0-00 00-0 -000 ---0 0011 1000
023000x xxxx 0-00 00-0 -000 ---0 0101 1000
024000x xxxx 0-00 00-0 -000 ---0 1011 1000
040000x xxxx 0-00 01-0 -000 ---0 0001 1000
041000x xxxx 0-00 01-0 -000 ---0 0001 1001
042000x xxxx 0-00 01-0 -000 ---0 0011 1000
043000x xxxx 0-00 01-0 -000 ---0 0101 1000
044000x xxxx 0-00 01-0 -000 ---0 1011 1000
060000x xxxx 0-00 0--0 -000 0001 0000 0011
061000x xxxx 0-00 0--0 -000 0111 0000 0011
062000x xxxx 0-00 0--0 -000 0101 0000 0011
063000x xxxx 0-00 0--0 -000 1001 0000 0011
064000x xxxx 0-00 0--0 -000 1111 0000 0011
065000x xxxx 0-00 0--0 -000 1101 0000 0011
070000x xxxx 0-00 0--0 -000 0001 0000 0001
071000x xxxx 0-00 0--0 -000 0111 0000 0001
072000x xxxx 0-00 0--0 -000 0101 0000 0001
073000x xxxx 0-00 0--0 -000 1001 0000 0001
074000x xxxx 0-00 0--0 -000 1111 0000 0001
075000x xxxx 0-00 0--0 -000 1101 0000 0001
080000x xxxx 0-00 0--0 -000 0001 0000 0010
081000x xxxx 0-00 0--0 -000 0111 0000 0010
082000x xxxx 0-00 0--0 -000 0101 0000 0010
083000x xxxx 0-00 0--0 -000 1001 0000 0010
084000x xxxx 0-00 0--0 -000 1111 0000 0010
085000x xxxx 0-00 0--0 -000 1101 0000 0010
090000x xxxx 0-00 0--0 -000 0001 0000 0000
091000x xxxx 0-00 0--0 -000 0111 0000 0000
092000x xxxx 0-00 0--0 -000 0101 0000 0000
093000x xxxx 0-00 0--0 -000 1001 0000 0000
094000x xxxx 0-00 0--0 -000 1111 0000 0000
095000x xxxx 0-00 0--0 -000 1101 0000 0000
100001y yyyy 1-00 0--0 -000 ---0 0000 0000
101001y yyyy 1-00 0--0 -000 ---0 0000 0001
102001y yyyy 1-00 0--0 -000 ---0 0000 0000
103001y yyyy 1-00 0--0 -000 ---0 0000 0001
110010x xxxx 1-00 0--0 -000 ---0 0000 0000
111010x xxxx 1-00 0--0 -000 ---0 0000 0001
112010x xxxx 1-00 0--0 -000 ---0 0000 0000
113010x xxxx 1-00 0--0 -000 ---0 0000 0001
1200110 0001 1-00 0--0 -000 ---0 0000 0001
1210110 0001 1-00 00-0 -000 ---0 0001 1001
1220110 0001 1-00 01-0 -000 ---0 0001 1001
500000x xxxx 0-00 0--1 -000 ---0 0000 0000
501000x xxxx 0-00 0--1 -000 ---0 0000 0001
502000x xxxx 0-00 0--1 -000 ---0 0010 0000
503000x xxxx 0-00 0--1 -000 ---0 0100 0000
504000x xxxx 0-00 0--1 -000 ---0 1010 0000
505000x xxxx 0-00 0--1 -000 ---0 0010 0010
506000x xxxx 0-00 0--1 -000 ---0 0100 0010
507000x xxxx 0-00 0--1 -000 ---0 1010 0010
508000x xxxx 0-00 0--1 -000 ---0 0010 0100
509000x xxxx 0-00 0--1 -000 ---0 0100 0100
510000x xxxx 0-00 0--1 -000 ---0 0110 0100
511000x xxxx 0-00 0--1 -000 ---0 1000 0100
520000x xxxx 0-00 00-1 -000 ---0 0001 1000
521000x xxxx 0-00 00-1 -000 ---0 0001 1001
522000x xxxx 0-00 00-1 -000 ---0 0011 1000
523000x xxxx 0-00 00-1 -000 ---0 0101 1000
524000x xxxx 0-00 00-1 -000 ---0 1011 1000
540000x xxxx 0-00 01-1 -000 ---0 0001 1000
541000x xxxx 0-00 01-1 -000 ---0 0001 1001
542000x xxxx 0-00 01-1 -000 ---0 0011 1000
543000x xxxx 0-00 01-1 -000 ---0 0101 1000
544000x xxxx 0-00 01-1 -000 ---0 1011 1000
560000x xxxx 0-00 0--1 -000 0001 0000 0011
561000x xxxx 0-00 0--1 -000 0111 0000 0011
562000x xxxx 0-00 0--1 -000 0101 0000 0011
563000x xxxx 0-00 0--1 -000 1001 0000 0011
564000x xxxx 0-00 0--1 -000 1111 0000 0011
565000x xxxx 0-00 0--1 -000 1101 0000 0011
570000x xxxx 0-00 0--1 -000 0001 0000 0001
571000x xxxx 0-00 0--1 -000 0111 0000 0001
572000x xxxx 0-00 0--1 -000 0101 0000 0001
573000x xxxx 0-00 0--1 -000 1001 0000 0001
574000x xxxx 0-00 0--1 -000 1111 0000 0001
575000x xxxx 0-00 0--1 -000 1101 0000 0001
580000x xxxx 0-00 0--1 -000 0001 0000 0010
581000x xxxx 0-00 0--1 -000 0111 0000 0010
582000x xxxx 0-00 0--1 -000 0101 0000 0010
583000x xxxx 0-00 0--1 -000 1001 0000 0010
584000x xxxx 0-00 0--1 -000 1111 0000 0010
585000x xxxx 0-00 0--1 -000 1101 0000 0010
590000x xxxx 0-00 0--1 -000 0001 0000 0000
591000x xxxx 0-00 0--1 -000 0111 0000 0000
592000x xxxx 0-00 0--1 -000 0101 0000 0000
593000x xxxx 0-00 0--1 -000 1001 0000 0000
594000x xxxx 0-00 0--1 -000 1111 0000 0000
595000x xxxx 0-00 0--1 -000 1101 0000 0000
600001y yyyy 1-00 0--1 -000 ---0 0000 0000
601001y yyyy 1-00 0--1 -000 ---0 0000 0001
602001y yyyy 1-00 0--1 -000 ---0 0000 0000
603001y yyyy 1-00 0--1 -000 ---0 0000 0001
610010x xxxx 1-00 0--1 -000 ---0 0000 0000
611010x xxxx 1-00 0--1 -000 ---0 0000 0001
612010x xxxx 1-00 0--1 -000 ---0 0000 0000
613010x xxxx 1-00 0--1 -000 ---0 0000 0001
6200110 0001 1-00 0--1 -000 ---0 0000 0001
6210110 0001 1-00 00-1 -000 ---0 0001 1001
6220110 0001 1-00 01-1 -000 ---0 0001 1001
998000x xxxx ---- ---0 -0-- ---- 000- -110
9990110 0000 ---- ---0 -0-- ---- ---- ----

Appendix 3 - Search Conversion Guide

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

Appendix 4 - Example Codes

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.

Appendix 5 - Credits

Bugfinder
For making cheats so that yes, we have one less question in life to worry about.
Ian Patterson
For creating the rich and flexible cheat engine that graces these two fine emulators.
JCK
For helping to make the cheat engine the glorious form that it is.
Marc Lafontaine
For bringing forth the small little spark that grew into what it is today.
Mike_Haggar
For maintaining the latest collection of CPS cheats.
Pugsy
For maintaining the premier MAME cheat file.
stephh
For maintaining the cheats where Pugsy's stops - in even greater detail. Let's hope it restarts again.
Tourniquet
For maintaining the "Shin-Cheat FAQ".
The cheat finding and cheat using community
For without them, this document would have been rendered unnecessary.
The developers of MAME and MESS
For their efforts into creating the emulators that grace your presence.

Appendix 6 - Legal Mumbo Jumbo

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").