<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.gbatemp.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Raing3</id>
	<title>WikiTemp - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.gbatemp.net/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Raing3"/>
	<link rel="alternate" type="text/html" href="https://wiki.gbatemp.net/wiki/Special:Contributions/Raing3"/>
	<updated>2026-06-07T15:48:18Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://wiki.gbatemp.net/w/index.php?title=EnHacklopedia:Hacking_NES&amp;diff=36340</id>
		<title>EnHacklopedia:Hacking NES</title>
		<link rel="alternate" type="text/html" href="https://wiki.gbatemp.net/w/index.php?title=EnHacklopedia:Hacking_NES&amp;diff=36340"/>
		<updated>2010-10-10T07:40:49Z</updated>

		<summary type="html">&lt;p&gt;Raing3: New page: ==Hacking using FCE Ultra Debug==  FCE Ultra Debug&amp;#039;s cheat console  FCE Ultra Debug is a highly compatible NES emulator that helps f...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Hacking using FCE Ultra Debug==&lt;br /&gt;
&lt;br /&gt;
[[Image:Fceu_cheat.png|center|FCE Ultra Debug&#039;s cheat console]]&lt;br /&gt;
&lt;br /&gt;
[[EnHacklopedia:Tools|FCE Ultra Debug]] is a highly compatible NES emulator that helps facilitate code hacking. It includes a RAM searcher as well as a debugger. The RAM searcher is labeled &amp;quot;Cheats&amp;quot; under the Tools menu and can also be accessed by the &amp;quot;Shift+F1&amp;quot; key combination. Cheats can be both added, removed, and searched for here. The &amp;quot;Known value&amp;quot; options searches for the specific byte entered in the space next to that button. Below this, the unknown value options exist. If the check box next to any of the bottom three options is checked, then the value is restricted to being with in the difference supplied. The RAM searcher only searches for 8-byte values and performs all searches in hexadecimal.&lt;br /&gt;
&lt;br /&gt;
[[Image:Fceu_debug.png|center|FCE Ultra Debug&#039;s debugger]]&lt;br /&gt;
&lt;br /&gt;
Also under the tools menu is the debugger, labeled &amp;quot;Debug&amp;quot;; It can also be accessed with F1. On the left is the disassembled 6502 code, with the top instruction being the current instruction to be executed. In the middle are several options. &amp;quot;Run&amp;quot; resumes the game, while &amp;quot;Step in&amp;quot; executes the next instruction. Step out continues execution until the subroutine is exected. Finally, step over skips the next instruction. The &amp;quot;seek to&amp;quot; option simply moves the disassembly to the location specified, while the seek PC moves the disassembly to the PC. Underneath this, the registers A, X, and Y are displayed, with the stack underneath. Finally, at the bottom, PPU and Sprite are listed.&lt;br /&gt;
&lt;br /&gt;
==6502 Assembly==&lt;br /&gt;
The 6502 processor that the NES uses is an 8-bit processor. The 6502 provides 2 8-bit general purpose registers (X and Y), an 8-bit accumulator, an 8-bit stack pointer, an 8-bit status register, and a 16-bit program counter. With only 151 instructions defined, many desirable operations are missing, including any multi-byte operations; multiply, divide, and modulus operations, and several branch instructions. Additionally, the 6502 contains several potentially problematic bugs. The JMP instruction is partially broken. If JMP $xxFF is executed, the PC will not jump to the address stored in $xxFF and $xxFF+1 like it should but rather to the address stored in $xxFF and $xx00. Additionally, the 105 undefined instructions result in undocumented and hard to prevent effects, instead of a NOP or BRK instruction. A list of all the 6502 opcodes and their effects on the NES can be found in the [[EnHacklopedia:Documents|6502 reference]].&lt;br /&gt;
&lt;br /&gt;
==Game Genie==&lt;br /&gt;
&lt;br /&gt;
[[Image:Gg.png|center|NES Game Genie Code Entry Screen]]&lt;br /&gt;
&lt;br /&gt;
===Description===&lt;br /&gt;
The Game Genie, made by Galoob, is a cheat device, like the Pro Action Replay. However, unlike the Pro Action Replay, the Game Genie patches ROM, whereas the Pro Action Replay edits RAM. For example, a code may patch the address 0x8000 with the value 0x3F. This means that instead of modifying 0x8000 to be 0x3F, instead the Game Genie will watch for the game to access 0x8000, and whenever that happens it will send 0x3F to the location that requested 0x8000. This method, however, has one drawback. Because the 6502 only has a 16-bit program counter, only 64 KB of memory can be referenced at a time. To get around this limitation, the NES employs what is known as &amp;quot;bank switching&amp;quot;. Basically, the NES references the entire ROM in 64 KB pages, and when necessary switches the page. What this means is that the assembly code referenced at our location 0x8000 is not always the same. It may refer to 0x8000 or 0x18000 or something else, but all will be patched. This can cause bugs, which is obviously undesirable. To combat this, Galoob provides an 8-character Game Genie code, which an extra byte called &amp;quot;compare&amp;quot;. For this example, compare will be 0x5A. What the Game Genie will do is watch the address 0x8000 to be called. When it is called, if the value at that location is 0x5A, then 0x3F will be return. Otherwise, the Game Genie will allow the game to operate as intended. Game Genie codes also have to be encoded. Encoding and decoding Game Genie codes is explained in the sections below. It is worthwhile to learn how to do these operations by hand. However, while not very hard, it is quite tedious. GG Encoder automates this process for you. Finally, decoded Game Genie codes are expressed in the format aabb:cc for 6-character and aabb?dd:cc, where aabb is the address to patch, cc is the patch value, and dd is the compare byte.&lt;br /&gt;
&lt;br /&gt;
===Decoding Game Genie Codes===&lt;br /&gt;
Game Genie codes for the NES code in two formats: 6-character and 8-character. In any Game Genie code, only 16 different letters are used: A, E. P, O, Z, X, L, U, G, K, I, S, T, V, Y, and N. Left to right, each of these characters is assigned the bytes 0x0 through 0xF. To decode a game genie code, first rewrite the code in the for of hexadecimal. For example, the code GOSSIP would become 0x49DD51. To get the address out of a 6-character game genie code, the C-style equation is &amp;quot;addr = 0x8000 + ((n3 &amp;amp; 7) &amp;lt;&amp;lt; 12) | ((n5 &amp;amp; 7) &amp;lt;&amp;lt; 8) | ((n4 &amp;amp; 8) &amp;lt;&amp;lt; 8) | ((n2 &amp;amp; 7) &amp;lt;&amp;lt; 4) | ((n1 &amp;amp; 8) &amp;lt;&amp;lt; 4 | (n4 &amp;amp; 7) | (n3 &amp;amp; 8);&amp;quot;, where n0 is the highest nybble, n1 the next highest, etc., with n5 being the lowest nybble. This equation also works for 8-character Game Genie codes. The equations for decoding the data vary slightly between the two formats. For 6-character, it&#039;s &amp;quot;data = ((n1 &amp;amp; 7) &amp;lt;&amp;lt; 4) | ((n0 &amp;amp; 8) &amp;lt;&amp;lt; 4) | (n0 &amp;amp; 7) | (n5 &amp;amp; 8);&amp;quot; while for 8-character it is &amp;quot;data = ((n1 &amp;amp; 7) &amp;lt;&amp;lt; 4) | ((n0 &amp;amp; 8) &amp;lt;&amp;lt; 4) | (n0 &amp;amp; 7) | (n7 &amp;amp; 8);&amp;quot; Finally, 8-character Game Genie codes have the extra compare byte, which is decoded with &amp;quot;compare = ((n7 &amp;amp; 7) &amp;lt;&amp;lt; 4) | ((n6 &amp;amp; 8) &amp;lt;&amp;lt; 4) | (n6 &amp;amp; 7) | (n5 &amp;amp; 8);&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====Example 6-character Game Genie Code Decoding====&lt;br /&gt;
Decoding GOSSIP. First convert into hex, which gives us 0x49DD51. Then extract the address: addr = 0x8000 + ((0xD &amp;amp; 7) &amp;lt;&amp;lt; 12) | ((1 &amp;amp; 7) &amp;lt;&amp;lt; 8) | ((5 &amp;amp; 8) &amp;lt;&amp;lt; 8) | ((0xD &amp;amp; 7) &amp;lt;&amp;lt; 4) | (9 &amp;amp; 8) &amp;lt;&amp;lt; 4) | (5 &amp;amp; 7) | (0xD &amp;amp; 8). This simplifies to 0x8000 + (5 &amp;lt;&amp;lt; 12) | (1 &amp;lt;&amp;lt; 8) | (0 &amp;lt;&amp;lt; 8) | (5 &amp;lt;&amp;lt; 4) | (8 &amp;lt;&amp;lt; 4) | 5 | 8 = 0x8000 + 0x5000 | 0x100 | 0 | 0x50 | 0x80 | 5 | 8 = 0x8000 + 0x51DD = 0xD1DD. The only thing left to do is to grab the data: data = ((9 &amp;amp; 7) &amp;lt;&amp;lt; 4) | ((4 &amp;amp; 8) &amp;lt;&amp;lt; 4) | (4 &amp;amp; 7) | (1 &amp;amp; 8) = (1 &amp;lt;&amp;lt; 4) | (0 &amp;lt;&amp;lt; 4) | 4 | 0 = 0x10 | 4 = 0x14. The decoded Game Genie code is D1DD:14.&lt;br /&gt;
&lt;br /&gt;
====Example 8-character Game Genie Code Decoding====&lt;br /&gt;
Decoding ZEXPYGLA. In hex, this gives us 0x28A17430. Extracting the address is the same as in the 6-character example: addr = 0x8000 + ((1 &amp;amp; 7) &amp;lt;&amp;lt; 12) | ((4 &amp;amp; 7) &amp;lt;&amp;lt; 8) | ((7 &amp;amp; 8) &amp;lt;&amp;lt; 8) | ((0xA &amp;amp; 7) &amp;lt;&amp;lt; 4) | ((8 &amp;amp; 8) &amp;lt;&amp;lt; 4) | (7 &amp;amp; 7) | (1 &amp;amp; 8) = 0x8000 + (1 &amp;lt;&amp;lt; 12) | (4 &amp;lt;&amp;lt; 8) | (0 &amp;lt;&amp;lt; 8) | (2 &amp;lt;&amp;lt; 4) | (8 &amp;lt;&amp;lt; 4) | 7 | 0 = 0x8000 + 0x1000 | 0x400 | 0 | 0x20 | 0x80 | 7 | 0 = 0x8000 + 0x14A7 = 0x94A7. Now get the data and compare values: data = ((8 &amp;amp; 7) &amp;lt;&amp;lt; 4) | ((2 &amp;amp; 8) &amp;lt;&amp;lt; 4) | (2 &amp;amp; 7) | (0 &amp;amp; 8) = (0 &amp;lt;&amp;lt; 4) | (0 &amp;lt;&amp;lt; 4) | 2 | 0 = 0 | 0 | 2 | 0 = 2; compare = ((0 &amp;amp; 7) &amp;lt;&amp;lt; 4) | ((3 &amp;amp; 8) &amp;lt;&amp;lt; 4) | (3 &amp;amp; 7) | (4 &amp;amp; 8) = (0 &amp;lt;&amp;lt; 4) | (0 &amp;lt;&amp;lt; 4) | 3 | 0 = 3. The final decoded version is 94A7?03:02.&lt;br /&gt;
&lt;br /&gt;
===Encoding Game Genie Codes===&lt;br /&gt;
&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
====Example 6-character Game Genie Code Encoding====&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
====Example 8-character Game Genie Code Encoding====&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
==Pro Action Replay==&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
==Known Value Searching - Metroid - Infinite Missiles==&lt;br /&gt;
This hack is performed on the Metroid (U) (PRG0) [!] rom. Results on the (E) or bad or overdump versions may be different. Boot up FCEUXD and start a game. Play through the game until you obtain missiles. If necessary, consult [http://www.gamefaqs.com/ GameFAQs]. Samus starts off with 5 missiles. This is plenty. Make a save state, just in case. Go to the cheat menu and do a known value search for 5. For me, this cut down the possibilities to 37. Shoot a missile then search for 4. I have 2 possibilies left. You may have more. While it&#039;s possible to just go ahead test each possibility, we can try to get rid of one. Walk around for a bit, but don&#039;t shoot. Then search for 4. Still 2 possibilities. Shoot another missile. Down to 3. Search for 3. Still two possibilities (0x0000 and 0x6879). Let&#039;s test them. Select the first possibility on the far right menu ($0000). Click on it. On the left, the address and value will be added. Click &amp;quot;add&amp;quot;. The game froze. This is not good. So the other possibility is likely the right one. Load the save state, at the code, and test. You have infinite missiles.&lt;br /&gt;
&lt;br /&gt;
==Basic Game Genie Code - Metroid - Infinite Missiles==&lt;br /&gt;
While the code just hacked is good for PAR, it won&#039;t work with a Game Genie. This section shows how to make the code into Game Genie. Because Game Genie patches ROM, we need to modify the assembly code to give us infinite missiles. We already have a starting point - the address where the number of missiles is stored out - 0x6879. Delete all codes and go to the debug menu. Under breakpoints, click add. In the left address box, put in our address, 0x6879. We&#039;re only looking at one address, so leave the right box blank. Underneath this, we can choose whether we want to break when the address is read from, written to, or executed, or any combination of the three. The missile address is subtracted from when a missile is shot, so this qualifies as a write. Choose this and click OK. Click the run button and shoot a missile. The game pauses and the debug menu comes up. This means that one of our breakpoints occurred, in this case our only one. On the left, the disassembly is shown, with the instruction on top being the one just executed. Here it is $D333: CE 79 68 DEC $6879 = #$04. DEC stands for decrement, or subtract one. It is subtracting one from the address given - our missile addresss! The rest is added on by FCEU. This tells you that after the operation, the value at $6879 will be 4. We want to disable this operation. The easiest way is to just NOP the instruction. NOP means nothing happens. While this would certainly achieve our goal, NOP is a one byte instruction (0xEA), whereas this DEC is three. The NOP would have to be used three times. Because the NES Game Genie only allows three codes to begin with, this is certainly undesirable. If only one NOP were to be used, all subsequent opcodes would be messed up. Indeed, here changing only 0xD333 to a NOP causes the game to reset when a missile is shot. Another option is to find some unused memory, and change the instruction so that the decrement occurs there. Opening the hex editor up and going to the 0x6800 block, there is much RAM that appears to be unused, including 0x6800. Our code will change DEC $6879 to DEC $6800. Just as CE 79 68 is DEC $6879, CE 00 68 is DEC $6800. Go in the hex editor to 0xD334 and modify 0x79 to 0x00. When shooting missiles, the missile count does not go down, and there are no apparent side effects. The final step is to format the code. We want to change the byte 0x79 to 0x00 at 0xD334. This makes the code D334?79:00, or AAUIGUPY.&lt;br /&gt;
&lt;br /&gt;
[[Category:EnHacklopedia]]&lt;/div&gt;</summary>
		<author><name>Raing3</name></author>
	</entry>
	<entry>
		<id>https://wiki.gbatemp.net/w/index.php?title=File:Gg.png&amp;diff=36339</id>
		<title>File:Gg.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gbatemp.net/w/index.php?title=File:Gg.png&amp;diff=36339"/>
		<updated>2010-10-10T07:38:41Z</updated>

		<summary type="html">&lt;p&gt;Raing3: NES Game Genie Code Entry Screen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NES Game Genie Code Entry Screen&lt;/div&gt;</summary>
		<author><name>Raing3</name></author>
	</entry>
	<entry>
		<id>https://wiki.gbatemp.net/w/index.php?title=File:Fceu_debug.png&amp;diff=36338</id>
		<title>File:Fceu debug.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gbatemp.net/w/index.php?title=File:Fceu_debug.png&amp;diff=36338"/>
		<updated>2010-10-10T07:37:38Z</updated>

		<summary type="html">&lt;p&gt;Raing3: FCE Ultra Debug&amp;#039;s debugger&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FCE Ultra Debug&#039;s debugger&lt;/div&gt;</summary>
		<author><name>Raing3</name></author>
	</entry>
	<entry>
		<id>https://wiki.gbatemp.net/w/index.php?title=File:Fceu_cheat.png&amp;diff=36337</id>
		<title>File:Fceu cheat.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gbatemp.net/w/index.php?title=File:Fceu_cheat.png&amp;diff=36337"/>
		<updated>2010-10-10T07:35:00Z</updated>

		<summary type="html">&lt;p&gt;Raing3: FCE Ultra Debug&amp;#039;s cheat console&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FCE Ultra Debug&#039;s cheat console&lt;/div&gt;</summary>
		<author><name>Raing3</name></author>
	</entry>
	<entry>
		<id>https://wiki.gbatemp.net/w/index.php?title=EnHacklopedia:Generic_Code_Hacking&amp;diff=36336</id>
		<title>EnHacklopedia:Generic Code Hacking</title>
		<link rel="alternate" type="text/html" href="https://wiki.gbatemp.net/w/index.php?title=EnHacklopedia:Generic_Code_Hacking&amp;diff=36336"/>
		<updated>2010-10-10T07:24:44Z</updated>

		<summary type="html">&lt;p&gt;Raing3: New page: ==Using Trainers== Trainers come in various forms and are called different things (code generator, code searcher, etc). They may vary in look and features, but they all function the same w...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Using Trainers==&lt;br /&gt;
Trainers come in various forms and are called different things (code generator, code searcher, etc). They may vary in look and features, but they all function the same way. They &amp;quot;dump&amp;quot; the memory from a game and search for values in it. Most trainers save this dump temporarily for making relative comparisons (greater/less/equal/different) at different points in the game. The idea being to change something in the game and compare the new memory to the old, in order to find which locations in memory have changed each time. This allows the hacker to find the address in memory of something, whether it be lives, health, or removing Lara Croft&#039;s underwear on Tomb Raider.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Typical Search Options&#039;&#039;&#039;&lt;br /&gt;
* Initial Dump / Start Search - This grabs the current memory for comparing to after causing something to change.&lt;br /&gt;
* Known Value - Searches for a user entered value.&lt;br /&gt;
* Greater Than - Find values that have increased.&lt;br /&gt;
* Less Than - Find values that have decreased.&lt;br /&gt;
* Different To / Not Equal To - Find values that have changed.&lt;br /&gt;
* Equal To - Find values that are the same.&lt;br /&gt;
* In-Range - Find any value within a certain range (like between 1 and 10).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;An Example Search For a Health Bar&#039;&#039;&#039;&lt;br /&gt;
# Get to the point in the game where health is actually displayed.&lt;br /&gt;
# Start Search (Initial Dump).&lt;br /&gt;
# Get back in the game and lose health.&lt;br /&gt;
# Search for values that are Less Than.&lt;br /&gt;
# Go back to the game and lose health again.&lt;br /&gt;
# Search Less Than again.&lt;br /&gt;
# If health is gained by pickups or something, pick one up, and search Greater Than.&lt;br /&gt;
# Repeat this until the number of results shown by the trainer is reasonably small. Sometimes it will narrow all the way to 1 result, but don&#039;t count on it.&lt;br /&gt;
# Test the result(s) until one effects health.&lt;br /&gt;
&lt;br /&gt;
===Known Value Searches===&lt;br /&gt;
A known value search is the most basic search that there is. It is used to search for things that you know the exact value of, generally something displayed onscreen, such as a score or number of lives. It&#039;s worth keeping in mind that the on-screen value is not necessarily the value that is stored in memory. It is not uncommon for the value to be stored in memory with one added or subtracted to it. Additionally, the value may be stored as a BCD or float values instead of a normal hexadecimal number. If searching for known values is not successful, unknown value searches may be necessary to find the code.&lt;br /&gt;
&lt;br /&gt;
===Unknown Value Searches===&lt;br /&gt;
For use when the user doesn&#039;t know the exact value to search for, like timers, and health bars. Unknown value searches consist of comparing memory dumps in relation to how the target has changed. If health/time decreases, search &amp;quot;Less Than.&amp;quot; If it increases, search &amp;quot;Greater than.&amp;quot; Examples of such comparison search options include: Greater Than, Less Than, Different To, and Equal To.&lt;br /&gt;
&lt;br /&gt;
===Signed Searches===&lt;br /&gt;
Some trainers allow signed searching by sign-extending values being compared, just as the game would sign them for doing things. This allows for finding things that would might be handled by a game as negative values. With a regular 32-bit search, for example, 0xFFFFFFE0 would be greater than 0x42C80000. However, if these were compared as signed, 0x42C80000 would be greater because 0xFFFFFFE0 is read as negative 0x20 (-32). Games use signed values for anything from acceleration to coordinates. For example, acceleration might be stored by a game as a negative value while driving in reverse because that&#039;s how vectors are stored. The direction is like the most significant bit, so looking at them signed makes them easy to search for. There are also times when games display a negative number for something on the screen as well.&lt;br /&gt;
&lt;br /&gt;
* Unsigned&lt;br /&gt;
** For 8-bits&lt;br /&gt;
*** 0x00 -&amp;gt; 0xFF = 0 to 255.&lt;br /&gt;
**For 16-bits&lt;br /&gt;
***0x0000 -&amp;gt; 0xFFFF = 0 to 65535.&lt;br /&gt;
**For 32-bits&lt;br /&gt;
***0x00000000 -&amp;gt; 0xFFFFFFFF = 0 to 4294967295.&lt;br /&gt;
*Signed&lt;br /&gt;
**For 8-bits&lt;br /&gt;
***0x00 -&amp;gt; 0x7F = 0 to 127.&lt;br /&gt;
***0x80 -&amp;gt; 0xFF = -127 to -1.&lt;br /&gt;
**For 16-bits&lt;br /&gt;
***0x0000 -&amp;gt; 0x7FFF = 0 to 32767.&lt;br /&gt;
***0x8000 -&amp;gt; 0xFFFF = -32768 to -1.&lt;br /&gt;
**For 32-bits&lt;br /&gt;
***0x00000000 -&amp;gt; 0x7FFFFFFF = 0 to 2147483647.&lt;br /&gt;
***0x80000000 -&amp;gt; 0xFFFFFFFF = -2147483648 to -1.&lt;br /&gt;
&lt;br /&gt;
==Hacking With Emulators==&lt;br /&gt;
An emulator is a computer program that acts as a virtual game console, so to speak. It imitates the actual hardware in order to run backups of games (ROMs) for the given system. There may not be an emulator for every system, or the ones available may not work very well (if at all). Not every emulator can run every game. This is partly because of incompetence on the part of emulator authors, especially in the case of Nintendo64. &#039;&#039;&#039;The authors do NOT provide ROMs, so don&#039;t ask!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Some emulators have built-in cheat searching utilities, just like trainers for the consoles themselves. They work the same way. More information on hacking with specific emulators may be found with the in-depth system info for some systems. There are alternatives to built-in trainers as well, like external programs used in conjunction with an emulator or using save states. These methods can be lifesavers when an emulator&#039;s cheating utilities are lacking or non-existent.&lt;br /&gt;
&lt;br /&gt;
===Renegade===&lt;br /&gt;
Most trainers and hacking tools available are for specific consoles and/or emulators. [[EnHacklopedia:Tools|Renegade]], on the other hand, is one of the few hacking tools made to support many emulators and pretty much anything else that allows the user to save a copy of the memory. Renegade can seem overwhelming at first, but hacking normal codes with it is really the same as anything else.&lt;br /&gt;
&lt;br /&gt;
[[Image:Renegade_code_search.png|center|Renegade: Code Search Window]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Attaching to an Emulator&#039;&#039;&#039;&lt;br /&gt;
# Start the emulator, and get a game running.&lt;br /&gt;
# Pause the game. Most emulators have the option to pause emulation entirely. This is recommended.&lt;br /&gt;
# Open Renegade&lt;br /&gt;
# Go to the Cheating menu. Choose Attach To Emulator.&lt;br /&gt;
# Choose the emulator that&#039;s running in the dialog box. The textbox beside there will tell if the running emulator was found by Renegade or not.&lt;br /&gt;
# The Attach button should be enabled when it verifies the selected emulator is running. Click Attach&lt;br /&gt;
# Now go to the Cheating menu and choose Code Search, Memory Editor, or open both.&lt;br /&gt;
# Now the search options look pretty much the same as in any other trainer; there&#039;s just a lot more of them.&lt;br /&gt;
# Do an Initial Dump or Known Value search to start.&lt;br /&gt;
# Switch back to the emulator and change the thing being hacked.&lt;br /&gt;
# Pause the emulator again, switch back to Renegade, and search accordingly.&lt;br /&gt;
# Keep this up to narrow results as with any other trainer.&lt;br /&gt;
# When the time comes to test results, the results window displays the addresses in the form of raw addresses. This simply means that the user is expected to use the right code prefix, etc for the system being hacked (80/81 on N64, for instance).&lt;br /&gt;
# Another thing to note is that the results are automatically stored in a text file in the searches directory each time the Results button on the Code Search window is clicked. The filename is always search#.txt. The results can also be exported as N64 codes for easy testing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Comparing Files&#039;&#039;&#039;&lt;br /&gt;
# Open the Code Search window without attaching to an emulator as described above. If it was already attached, simple select Detach From Emulator from the Cheating menu.&lt;br /&gt;
# There&#039;s an option to specify the byte order.&lt;br /&gt;
# Also notice the Header option. This can be configured to ignore the first so many bytes (header) of a file.&lt;br /&gt;
# If doing a Known Value search, one file is required to start.&lt;br /&gt;
#* On the Search Type dropdown list choose Known Value, In-Range, or any option that can be done with a single file.&lt;br /&gt;
#* Click the Search button and a file dialog appears. Choose the file to be searched. Searching will commence, and result count will be displayed&lt;br /&gt;
#* The search can be continued by simply setting the search type as desired, and clicking search again. The dialog will prompt for choosing the next file.&lt;br /&gt;
# For doing comparison searches, there is no actual &amp;quot;Initial Dump.&amp;quot; Just start by comparing the first two files.&lt;br /&gt;
#* Set the search options for the desired comparison and click the Search button. The difference here is after the dialog prompts for the first file, it will immediately prompt for the second.&lt;br /&gt;
#* The search is continued the same as if it were started by searching for a known value. Choose search options, then click Search to be prompted for the next file.&lt;br /&gt;
&lt;br /&gt;
===Save States===&lt;br /&gt;
Save states are like a RAM dump, a copy of the game&#039;s memory at any given time. These can be compared or viewed in a hex editor just like a regular RAM dump. Most emulators have the option of saving the current state of the game. Some are even nice enough to have an actual &amp;quot;RAM Dump&amp;quot; option.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Two Important Notes About Save Sates&#039;&#039;&#039;&lt;br /&gt;
# Save states typically have extra information in them besides the RAM dump itself. This is in the form of extra bytes before or after the actual dump shows up in the file. The number of bytes varies by emulator but not by game. This is because different emulator authors store information differently. Finding the right RAM addresses for values found in these files is just a matter of subtracting the size of the header from the address in the file. Meaning if the header is 0x40 bytes and the a code is found a 0x45690 in the file, the actual RAM address would be 0x45650. This is pretty much the same concept as porting codes, but the porting is being done from save sate address to RAM address.&lt;br /&gt;
# Some emulators will compress save states by default. These will need to be uncompressed before they can be handled as normal RAM dumps. Some emulators have the option of turning off the compression, others don&#039;t. In most cases, programs like WinRAR can decompress the save states because they use common compression algorithms. However, there are times when this won&#039;t work, and there isn&#039;t really any solution short of asking the emulator author.&lt;br /&gt;
&lt;br /&gt;
==Guess and Check Style Hacking==&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
==Porting Codes==&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
==Pointers==&lt;br /&gt;
&lt;br /&gt;
A pointer is an address in memory that actually contains the value of another address. Say for example the 8-bit values at 0x80045020 are 0x80 0x25 0x78 0x40. That&#039;s probably a pointer to the address 0x80257840, rather than just the values of something. Games use pointers to keep track of where certain blocks of data are located in the memory. The pointer usually references the beginning of such a block. Some cheat devices support loading these pointers from the address given in order to write to the address plus a user defined offset. For instance, health may be at 0x80257854 in memory. The pointer at 0x80045020 indicates that the block of data (player data in this case) starts at 0x80257840. The difference between the beginning of the data block and the health location is 0x14. Now a pointer code type could tell the device to load the value (pointer) at 0x80045020, add 0x14, and write the value for full health to the resulting address.&lt;br /&gt;
&lt;br /&gt;
==Miscellaneous Hacking Tips==&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
===Fake Codes===&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
==Infinite Money/Ammo/Items==&lt;br /&gt;
&#039;&#039;&#039;[Difficulty: Beginner]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
These are about the easiest codes to hack. To hack one, take the value of desired item to get infinite of, and do a known value search for it. Next, manipulate the amount of it (eg. lose a life), and search for the new value. Keep doing this until results are narrowed down enough to test some. This usually doesn&#039;t take much when searching for exact values. Most games store the simple stuff this way; however, some will use float or BCD values, depending on the game system.&lt;br /&gt;
&lt;br /&gt;
== Have Items==&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
==Activating Unlockables==&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
==Level Modifier==&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
==Character/Team/Costume Modifier==&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
==Moon Jump==&lt;br /&gt;
&#039;&#039;&#039;[Difficulty: Intermediate to Hard]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
With this type of hack, the objective is to find the player&#039;s up/down acceleration. A more technical name for this would be a Y Speed Modifier, because it alters the speed the player&#039;s Y coordinate is moving. This causes the game to think the player is floating upward just as if the jump button was pressed. In some games, there is no jump button, but this can still be done if there&#039;s a place to fall off of as falling is part of Y speed too.&lt;br /&gt;
&lt;br /&gt;
There are multiple ways to go about these, since different games on different systems tend to handle it differently. The basic theory doesn&#039;t change much with the search methods though. Y speed is usually a 16 or 32 bit signed value in memory. It increases when moving upward, and decreases when falling. This is signed because most games store vectors this way. The value is based on both the direction being moved and how fast the player is moving in that direction. Most times, Y speed will be 0 when standing still, but don&#039;t rely on this. If the player has a little bouncing stance or something, the Y speed could very well be changing just slightly the whole time. Also note that on older systems (like NES/GBC), Y speed can be as simple as an 8-bit value being 0 on the ground and 1 or higher while moving upward.&lt;br /&gt;
&lt;br /&gt;
===The GLEE Method===&lt;br /&gt;
The &amp;quot;GLEE&amp;quot; method was pioneered by macrox. The basic theory at the time was that the player&#039;s Y speed increases when not on the ground (whether rising or falling). This may seem to contradict the theory above, but it&#039;s still technically true. This is because the GLEE method treats moon jumps like most other basic codes: it uses unsigned searches. The steps are outlined below. It&#039;s probably best to set whatever search tool is being used to compare 32-bit values first, if available. If that option is unavailable or doesn&#039;t work, try 16-bit and so on.&lt;br /&gt;
&lt;br /&gt;
# If the character is stands totally still on the ground, it&#039;s a reasonable assumption that Y speed isn&#039;t changing. Start a an unknown value search (initial dump). If the character jitters while standing or something, the Equal To searches mentioned here may need to be skipped. This makes it more difficult to narrow the results, but it&#039;s still possible.&lt;br /&gt;
# Move around a bit, then stand still again. Search Equal To. Repeat this step a couple times to eliminate some junk results.&lt;br /&gt;
# Now jump, or fall from a high place if the game has no jumping. While in the air and rising/falling, search Greater Than. Even if the game does allow jumping, falling from something instead to do the Greater Than might shave some extra results off the list.&lt;br /&gt;
# Once the player lands on the ground again and is standing still, search Less Than.&lt;br /&gt;
# Repeat the steps above until the results list is narrowed considerably.&lt;br /&gt;
# When ready to test some results, jump again (if possible) and do a Greater Than while still rising. Catching the value when just beginning to rise is best, though not always easy. The current value should give an idea of what to use for a moon jump value. Turn on a result at a time and look for effects on the player&#039;s Y speed.&lt;br /&gt;
# Once the correct address is found, try different values until the desired rising effect is reached. A value too high can orbit the player instantly (and even crash the game), and a value too low will force the player to the ground or perhaps keep the play from falling. On games that don&#039;t allow jumping, try freezing the value of each address to 0 and attempting to fall until an effect is noticed. Note that getting the rising effect on games which don&#039;t allow jumping sometimes still requires falling off something.&lt;br /&gt;
#* If the game doesn&#039;t allow rising without falling off something, then be possible to hack a code to tell the game the player is in the air. This can be hard or next to impossible on some games, but it works on others.&lt;br /&gt;
#* The idea is to start a new search while standing still. Then move to a different position, and search Equal To.&lt;br /&gt;
#* Fall off something, and search Different To while in the air. Following this up with an Equal To while still in the air might help cut down the results.&lt;br /&gt;
#* Once the player in back on the ground, search Different To again. Repeat these 3 steps until the results are narrowed.&lt;br /&gt;
#* Try the results with addresses nearest the Y speed address first. Doing this can sometimes save time, especially when it gets hard to reduce the amount of results and there are still a lot left. When testing results use the value from when the player was in the air along with the Y speed code to attempt forcing the player to rise.&lt;br /&gt;
# After locating the Y speed and the right value to get the player rising up without actually jumping to the moon, look up the button activator/joker for the game and the button value desired for the moon jump code. Using the same button the game does to jump is the preferred choice.&lt;br /&gt;
# Put the Y speed code with the activator and test it. If a code was hacked to tell the game the player is in the air, put this on an activator for the same button.&lt;br /&gt;
# Enjoy the new moon jump code.&lt;br /&gt;
&lt;br /&gt;
===Signed Searching Method===&lt;br /&gt;
Another way to hack moon jumps is with signed searching. This can be useful on some systems, if a trainer is available with the option.&lt;br /&gt;
&lt;br /&gt;
# Start an unknown value search while just standing still.&lt;br /&gt;
# If the game leaves the player standing completely still, then it&#039;s safe to assume the Y speed isn&#039;t changing. Move around then stand still again. Search Equal to. Repeat a few times if desired.&lt;br /&gt;
# Now here&#039;s where signed searching differs from GLEE. The Y speed is positive while rising up, negative while falling, and either 0 or slightly less when standing still. Press the jump button and quickly freeze the game while the player is still rising. Search Greater Than.&lt;br /&gt;
# As the player begins to fall, search Less Than.&lt;br /&gt;
# When the player hits the ground and is standing still again, search Greater Than.&lt;br /&gt;
# Now jump again, and quickly freeze the game while rising once more. Do a Greater Than search.&lt;br /&gt;
# This may have been enough to get down to a decent amount of results. If not, repeat the steps as needed, remembering the way Y speed values work signed.&lt;br /&gt;
# Once the results are done enough to warrant even looking at them, look for the positive, negative, 0/negative combination of current and previous values for each result. Pick out the ones worth trying and test them with the positive value. The value may still need to be increased a little, but again, keep in mind the signing factor. Don&#039;t raise it too high and turn it negative or the player will be glued to the ground.&lt;br /&gt;
# Take the right address and value, and put the code on an activator for pressing the jump button (or other button, if desired).&lt;br /&gt;
# Up, up, and away!&lt;br /&gt;
&lt;br /&gt;
==Speed Modifier==&lt;br /&gt;
A speed modifier is a code that modifies the speed of an in-game character or object. In most cases, this is a 16 or 32-bit signed value in memory. When the character or object is stopped, the value is usually zero. Keep in mind that simpler systems such as the NES and GBC may use 8-bit values for the speed value.&lt;br /&gt;
&lt;br /&gt;
To hack this code, a slight deviation of the GLEE method may be used.&lt;br /&gt;
&lt;br /&gt;
# If the character is stands totally still on the ground, it&#039;s a reasonable assumption that the character&#039;s speed isn&#039;t changing. Start a an unknown value search (initial dump). If the character jitters while standing or something, the Equal To searches mentioned here may need to be skipped. This makes it more difficult to narrow the results, but it&#039;s still possible.&lt;br /&gt;
# Move around a bit, then stand still again. Search Equal To. Repeat this step a couple times to eliminate some junk results.&lt;br /&gt;
# Now start moving. Without stopping, do a Greater Than search.&lt;br /&gt;
# Once the character stops or diminishes in speed, do a Less Than search.&lt;br /&gt;
# Repeat the steps above until the results list is narrowed considerably.&lt;br /&gt;
# When ready to test some results, try setting the speed to something really low. If the character is going really slowly, a speed mod has been found!&lt;br /&gt;
# Once the correct address is found, try different values until the desired level of speed is reached. A value set too high may launch the character careening through the level or it may even crash the game.&lt;br /&gt;
# Once you have your code, it&#039;s a good idea to put an activator on it. Else, the character will always be moving at fast speeds. Some good choices for activators include a &amp;quot;moving/not moving&amp;quot; flag in memory, or even button activators if an alternative isn&#039;t found.&lt;br /&gt;
&lt;br /&gt;
==Position Modifier==&lt;br /&gt;
Every game uses coordinate system to position a given object or character. These coordinates are located on a set of invisible axes. Two-dimensional games use two axes, referred to as the X and Y axes. Three dimensional games rely on three axes, referred to as the X, Y, and Z axes. The X axis is used for left/right movement, the Y axis for down/up movement, and the Z axis for near/far movement. As an object&#039;s X coordinate increases, it is moved to the right, and vice-versa. The same rule applies for the other axes. It is important to note that these axes have nothing to do with what is shown on the game screen. For example: the Y coordinate measures an object&#039;s absolute height, as opposed to how high the object is relative to the ground. It is recommended that 32-bit searches are used for three-dimensional games if the emulator or trainer has that option, although 16-bit searches will work just as well. For two dimensional games, 16-bit searches are usually sufficient.&lt;br /&gt;
&lt;br /&gt;
# Identify the target object or character, preferably one whose movement can be controlled by the player. Begin an unknown value search.&lt;br /&gt;
# Identify the target axis. Hacking with only one axis in mind is much easier than attempting to keep track of movement on multiple axes. Remember that causing a change in the character&#039;s Y coordinates requires movement to a higher position in the level, which may not be easily accessible, so choosing to hack the X or Z coordinate may be easier.&lt;br /&gt;
# Move the character several game &amp;quot;feet&amp;quot;/&amp;quot;meters&amp;quot; to the left, right, away from the camera, or towards the camera. Perform a Different To search. It&#039;s important to move the character far enough away from the original point if doing a 16-bit search. As each coordinate is usually 32 bits in length (in three-dimensional games), it&#039;s extremely important to move the character so that the first half of the value changes. For example: 0x12345678 would need to become 0x1235789A (or higher) so that a 16-bit search registers the change and doesn&#039;t discard a potential code. This is not an issue with 32-bit searches.&lt;br /&gt;
# Move the character in the opposite direction, keeping the above warning in mind. Perform another Different To search.&lt;br /&gt;
# Repeat steps 3 and 4 until there is a manageable number of results, preferably less than 20 or 30.&lt;br /&gt;
# Test each code until the target character&#039;s movement on one axis is restricted.&lt;br /&gt;
# Now the codes for the other two axes need to be found. They will usually be in close proximity to the code that was just hacked. On some systems, one can usually find another part of the code by adding or subtracting 0x04 to or from the newly-found code&#039;s offset. The offset containing the X coordinate is usually first, followed by the Y coordinate, and then the Z coordinate. Note the existing values for the surrounding offsets and enter those as codes.&lt;br /&gt;
#* If the character is unable to move to the side or toward the game camera, then the correct code for the X or Z coordinate has most likely been found.&lt;br /&gt;
#* If the character is unable to jump, then the correct code for the Y coordinate has most likely been found.&lt;br /&gt;
# The first 16 bits of the value are usually enough to change a character or object&#039;s position, so assign those to a code and enjoy the results.&lt;br /&gt;
&lt;br /&gt;
Due to their nature, position modifiers are very easy to find usable values for. Simply view the offsets from each of the codes for the target character/object&#039;s coordinates, and apply those to the target character/object&#039;s position modifier, or a completely different object&#039;s position modifier.&lt;br /&gt;
&lt;br /&gt;
==Infinite Time==&lt;br /&gt;
Timers can be painfully simple, or they can send the hacker into violent tantrums. It all sort of depends on the game and system. The general idea is to just keep searching greater/less depending on the way the timer is counting, but they can vary a lot. Timers come in any size from 8-bit to 64-bit, but 16-bit and 32-bit ones are more common.&lt;br /&gt;
&lt;br /&gt;
===Basic Timer Hack Strategy===&lt;br /&gt;
# First get to the point in the game where the timer starts counting up/down. Then pause/freeze and start an unknown value search (initial dump). 32-bit is probably the way to start, if possible. If this fails, try 16-bit and so on.&lt;br /&gt;
# Now let the timer count down just a little, and do a less than search. Keep letting it count down and doing less than until the results are narrowed enough to test.&lt;br /&gt;
# In some cases, restarting the timer and doing a greater than followed by continuing with the above step will help.&lt;br /&gt;
# Now when the results are narrowed enough to start testing, set a constant write/freeze on the address using a high value to see if the timer still counts down. If the trainer being used lists all the previous values of the timer, a little educated guessing can help with picking out the right result to try. Sometimes a timer will be as simple as the value on screen being the same value in memory, but don&#039;t bank on it.&lt;br /&gt;
# Don&#039;t be surprised if none of the results work. Try a different bit size or one of the extra tips below.&lt;br /&gt;
&lt;br /&gt;
===Timer Tips===&lt;br /&gt;
* Clock style (00:00:00) timers tend to be 32-bit, but they can be found even if the user is searching 16-bit. One thing to be cautious of though is the amount of timer going by between searches. Let the seconds or minutes count up/down a couple digits, depending on the timer&#039;s speed.&lt;br /&gt;
* Don&#039;t be afraid to try searching the opposite direction when the search instructions above don&#039;t work. Sometimes a timer counting down on screen is really counting up internally. It&#039;s odd, but it happens. The timer on Starfox64 kept some hackers guessing for years because the timer on screen was stored a as 32-bit value counting down, while the real timer was a 16-bit value counting up! Just to add insult, the real timer was only a few bytes from the on-screen one.&lt;br /&gt;
* Beware of fake timers. A lot of timers there&#039;s both and on-screen timer and a real one. Test the code for as long as it would normally take the timer to run out to be sure it&#039;s really being stopped.&lt;br /&gt;
* In some cases, the right address is found, but attempts to freeze it will fail. This is because the game reads/writes the location faster than the cheat device can. The only way around this is to try hacking it with assembly. Hackers wanting to attempt this will need this address, so hang onto it.&lt;br /&gt;
&lt;br /&gt;
==Size Modifier==&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
===Objects That Change Size Normally===&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
===Objects That Never Change Size===&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
==Image Modifier==&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
==Cutscene Modifier==&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
==Skip Intros==&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
==Assembly Hacking==&lt;br /&gt;
Assembly is a generic all-encompassing term for human-readable machine code. A CPU is very good at working with numbers and interpreting their meanings; humans are at a disadvantage here, and it makes working with machine code very difficult. Assembly makes it quite a bit easier by providing a 1:1 ratio to machine code. Where machine code might look like a long string of ones and zeros, assembly might look more like this:&lt;br /&gt;
&lt;br /&gt;
 Opcode          Operands          Comments&lt;br /&gt;
 lw              r0, =0x203FA70    @ Load pointer to lives variable&lt;br /&gt;
 mov             r1, #31           @ Load number of lives we want&lt;br /&gt;
 str             r1, [r0]          @ Store lives value to variable&lt;br /&gt;
 bx              lr                @ Return&lt;br /&gt;
&lt;br /&gt;
This example is ARM/Thumb assembly for CPUs such as the ARM7 and ARM9 available in GBA and NDS. The comments help the programmer understand the assembly code even better than the CPU does; the CPU will execute any instruction given to it without determining the consequences or raising concern. The responsibility of executing the right instructions falls solely on the programmer. This example brings to light what is meant by &amp;quot;human readable machine code.&amp;quot; Compared to &amp;quot;0011010011101001100101...&amp;quot; the assembly is a lot more understandable.&lt;br /&gt;
&lt;br /&gt;
That aside, assembly is not without its own faults. It is often very difficult for a novice (with no previous programming experience) to learn and understand. This is due to assembly&#039;s naturally low level; an assembly programmer talks to the machine in its own language (via a translator).&lt;br /&gt;
&lt;br /&gt;
Programs that translate assembly into its machine code counter-part are called assemblers and are available for various target CPUs and platforms. The target CPU is what the assembler needs to output machine code for. The platform is the CPU/OS that a programmer will use to write the assembly and translate/assemble the code. Assembling code for a target that differs from the working platform called cross platform development.&lt;br /&gt;
&lt;br /&gt;
Hacking assembly is just the opposite; a hacker will translate machine code into human-readable assembly to understand the code and make changes as necessary. A program which does this kind of translation is called a disassembler, which are just as widely available as assemblers. The trouble is, few disassemblers output assembly that can be assembled back into machine code by an assembler. For the purposes of this tutorial, doing so would be out of scope because it is not usually a requirement to rebuild an entire program just to hack it. [[EnHacklopedia:Tools|Renegade64]] contains a code assembler which is much closer to what a hacker will use when patching assembly.&lt;br /&gt;
&lt;br /&gt;
===Rundown of Assembly Languages===&lt;br /&gt;
Assembly languages define a set of instructions specific to one family of CPUs. Depending on the CPU or assembly language, there may be only a small handful of instructions, or there may be a vast library of instructions available to the CPU. There are two common terms for CPUs which define the type of instruction set a CPU will use. The CISC machines generally have many different forms of the same instruction, while RISC machines typically have only one (rarely two or more) form of the same instruction. The names &amp;quot;Complex&amp;quot; and &amp;quot;Reduced&amp;quot; do not refer to the size of the instruction set, but to the ratio of instruction forms to single instructions (the smaller the number of instruction forms, the more &amp;quot;reduced&amp;quot; the instruction set). Some RISC machines have a far greater instruction set than CISC machines. For example: PowerPC(RISC) compared to 6502(CISC).&lt;br /&gt;
&lt;br /&gt;
Regardless of the type of instruction set, an instruction is typically comprised of two parts: The opcode and the operands. The opcode defines the command which the CPU will use. The operands define how the CPU will execute the instruction. The number of operands can vary, depending on the language and the opcode. Some opcodes have no operands at all; these are called &amp;quot;implied&amp;quot; operands, since the operand is implied to be non-existent.&lt;br /&gt;
&lt;br /&gt;
The most basic example of such an opcode is NOP. NOP, also sometimes called NOOP, exists on every major CPU in use today (though the assembly instruction is the same across all instruction sets, the machine code is not; yet another example of making machine code easier to understand). Its function is simply wasting CPU cycles; it does nothing else. This seems impractical by today&#039;s standards, where timing is not as crucial as it once was, and in most cases it may be desired to use every last cycle to its greatest potential. However, the NOP instruction is important for many tasks. It can be used to help synchronize multiple CPUs by having both wait for a small time, for instance. For a hacker, the NOP instruction becomes an invaluable tool for manipulating programs. Any instruction can be overwritten with a NOP to disable it completely. Overwriting the instruction which changes a character&#039;s health in a game will disable the game from changing any health at all.&lt;br /&gt;
&lt;br /&gt;
To Do: Explain operands.&lt;br /&gt;
&lt;br /&gt;
==Breaking Limits==&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
==Infinite Ammo For All Guns/Levels==&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
==Changing Starting Items/Stats==&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
==Killing Timers==&lt;br /&gt;
Timers can be stopped with assembly the same as anything else, but caution should be taken in doing so. Setting a breakpoint on write of the timer address and making disabling the instruction which write to the timer address. Now here&#039;s where the caution comes in. Some assembly routines aren&#039;t just used for that single timer. There are times when stopping a simple timer can freeze half the stuff in the game, so be careful.&lt;br /&gt;
&lt;br /&gt;
There are also times when the real timer can&#039;t be found normally, but a fake (on-screen) one can. These are more difficult to disable, but the real timer can sometimes be traced by doing a write breakpoint on the fake timer. Sometimes, it&#039;s as easy as looking as the instructions nearby. The game may be converting the timer to a different format to show on-screen immediately after it decrements and stores it. If the answer isn&#039;t obvious, the only thing to do is to backtrace the assembly to figure out where the value for the fake timer came from. It has to get it based on the real one, somehow. This is difficult to explain in real detail because games vary so much.&lt;br /&gt;
&lt;br /&gt;
==Rapid Fire==&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
==Mega Jump==&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
==Invincibility==&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
==Debug Menus==&lt;br /&gt;
To Do&lt;br /&gt;
&lt;br /&gt;
==Walk Through Walls==&lt;br /&gt;
Hacking a walk through walls code involves locating the game&#039;s clipping routines, which can often be very spread-out and embedded deep in the physics engine. This theory will focus on 3D games, but much of it can also be applied to many 2D games. 2D games simply lack a Z axis.&lt;br /&gt;
&lt;br /&gt;
Locating the clipping routines may take a few different steps, depending upon the game and how it was programmed. Locating the main character&#039;s coordinates is the best place to start. Coordinates can be found with a simple 32-bit unknown search. With 3D games, there are always three coordinates named &amp;quot;X&amp;quot;, &amp;quot;Y&amp;quot;, and &amp;quot;Z&amp;quot;. The Y coordinate is the usually easiest to find because no matter which way the character or &amp;quot;camera&amp;quot; are facing, the Y axis is always up-and-down. Reference [[#Position_Modifier|Position Modifiers]] for more information on locating coordinates.&lt;br /&gt;
&lt;br /&gt;
Coordinates are almost always placed in memory in order; the Y coordinate will appear between the X and Z coordinates. This idea can be exploited to locate all three coordinates after finding just one of them. Once the X and Z coordinates have been pin-pointed, these can be used to locate the clipping routines.&lt;br /&gt;
&lt;br /&gt;
The second step requires a write watchpoint on either the X or Z coordinate. Choosing which coordinate to use is entirely up to the hacker, as they will typically both lead to the same routines. Setting a breakpoint on one of the coordinates will usually cause a break right away, even with the main character standing completely still. If the break-causing store instruction is disabled, sometimes additional breaks will occur. It is wise to keep a list of all addresses which cause breaks without moving, and the instruction data they contain. This makes it easy to re-enable the instruction later. As soon as there are no other breaks occurring while the main character is standing still, this step is complete.&lt;br /&gt;
&lt;br /&gt;
The next step requires checking if any breaks occur while walking in an open area, without touching any walls. Most of the character control routines have already been disabled, by this point, and in most cases the main character should be &amp;quot;stuck&amp;quot; walking along only one axis. However, in a few other cases, a break will occur as soon as the main character begins to move. If this happens, the instructions causing these breaks must also be disabled. When the main character is able to glide peacefully along a single axis, the only breaks occurring should be when the main character hits a wall.&lt;br /&gt;
&lt;br /&gt;
With all of the character controlling routines disabled, walking into any wall should cause a break as the physics engine is attempting to clip the character&#039;s forward movement against the wall while retaining lateral movement (to &amp;quot;slide&amp;quot; against the wall when hit at an angle). This works because most physics engines want to adjust the coordinate for clipping (the one which was disabled for standard control) separately from the standard control routines. (Note that not all games will exhibit this behavior. For such games, the clipping will be done before the standard control routines write to the coordinates.)&lt;br /&gt;
&lt;br /&gt;
At this point, the first clipping routine has been located. Disabling it (either by disabling the single instruction with a NOP instruction, or by branching over the write or the entire routine if it can be done safely) should result in one of two possibilities: The character will either move through the wall, or yet another break will occur. In the case of the former, the code has been found (or at least one part for one of the two axes). For the latter, these clipping routines can be consecutively disabled, with each new routine found becoming another part of the completed code; all clipping routines must be disabled for both the X and Z axes.&lt;br /&gt;
&lt;br /&gt;
That concludes the basic rundown for walk through walls codes. To recap: Locate the clipping routines by disabling the standard controlling routines. Then disable those clipping routines. Test the game with the clipping routines disabled by re-enabling all of the standard controlling routines, or simply by resetting the console with the clipping-disabling codes enabled.&lt;br /&gt;
&lt;br /&gt;
==Jesus Mode==&lt;br /&gt;
A Jesus Mode code allows the player to walk on water just like Jesus in the bible did. One of the most complex hacks to make, it requires great skills with a debugger and a real familiarity with assembly language. The first Jesus Mode code made was for Super Mario 64 by Parayste.&lt;br /&gt;
&lt;br /&gt;
The idea behind Jesus Mode is to figure out how the game determines when the player hits the water, and then edit the code so that the water routine acts the same way the routine for solid ground does.&lt;br /&gt;
&lt;br /&gt;
[[Image:Mario64_jesus_mode.png|center|Mario walks on water (N64)]]&lt;br /&gt;
&lt;br /&gt;
[[Category:EnHacklopedia]]&lt;/div&gt;</summary>
		<author><name>Raing3</name></author>
	</entry>
	<entry>
		<id>https://wiki.gbatemp.net/w/index.php?title=File:Mario64_jesus_mode.png&amp;diff=36335</id>
		<title>File:Mario64 jesus mode.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gbatemp.net/w/index.php?title=File:Mario64_jesus_mode.png&amp;diff=36335"/>
		<updated>2010-10-10T07:21:23Z</updated>

		<summary type="html">&lt;p&gt;Raing3: Mario walks on water (N64)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mario walks on water (N64)&lt;/div&gt;</summary>
		<author><name>Raing3</name></author>
	</entry>
	<entry>
		<id>https://wiki.gbatemp.net/w/index.php?title=File:Renegade_code_search.png&amp;diff=36334</id>
		<title>File:Renegade code search.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gbatemp.net/w/index.php?title=File:Renegade_code_search.png&amp;diff=36334"/>
		<updated>2010-10-10T07:10:57Z</updated>

		<summary type="html">&lt;p&gt;Raing3: Renegade: Code Search Window&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Renegade: Code Search Window&lt;/div&gt;</summary>
		<author><name>Raing3</name></author>
	</entry>
	<entry>
		<id>https://wiki.gbatemp.net/w/index.php?title=EnHacklopedia:Number_and_Data_Encoding_Formats&amp;diff=36324</id>
		<title>EnHacklopedia:Number and Data Encoding Formats</title>
		<link rel="alternate" type="text/html" href="https://wiki.gbatemp.net/w/index.php?title=EnHacklopedia:Number_and_Data_Encoding_Formats&amp;diff=36324"/>
		<updated>2010-10-09T00:29:15Z</updated>

		<summary type="html">&lt;p&gt;Raing3: New page: ==Modulus== The modulus instruction (represented by % in C-style languages and MOD in other places) is a fundamental operation that is not used very often outside of computer science and a...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Modulus==&lt;br /&gt;
The modulus instruction (represented by % in C-style languages and MOD in other places) is a fundamental operation that is not used very often outside of computer science and advance math. All it does is returned the remainder of a division. For example, 3 % 2 = 1, while 3 % 3 = 0. Modulus is often used to determine divisibility, as if one number modulus a second is zero, then the first number is evenly divisible by the second. The modulus is also used in hashing algorithms.&lt;br /&gt;
&lt;br /&gt;
==Decimal==&lt;br /&gt;
The decimal method of representing numbers is the most common method used in mathematics. 10 digits (0 - 9) exist each of which occupies one decimal place. Decimal is also known as base-10, due to the fact that is both consists of 10 different digits and because each decimal place has its value based on a power of ten. In a multiple digit number, each successive digit to the left has an increased value by a factor of ten, while each successive digit to the right has a decreased value by a factor of ten. For instance, the number 873 is equivalent to 8 * 10&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 7 * 10&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + 3 * 10&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;. This is an important concept as all other base-n representations of numbers work in a similar fashion. Decimal numbers sometimes have a trailing &amp;quot;d&amp;quot; on them to make the base being used explicit. In this document, if there are no other base markers (trailing &amp;quot;b&amp;quot; or preceding &amp;quot;0x&amp;quot;), then the number is in base-10.&lt;br /&gt;
&lt;br /&gt;
==Binary==&lt;br /&gt;
At the lowest level, a computer is just a series of switches with two settings - high voltage and low voltage. By convention, the number 1 represents the high (or on) setting and 0 represents the low (or off) setting. Just as decimal places are based on powers of ten, binary (or base-2) places are based on powers of two. For instance, the number 110 is equal to 1 * 10&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 10&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + 0 * 10&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; in decimal and 1 * 2&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 2&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + 0 * 2&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; in binary. While the binary representation does allow one to easily perform [[#AND|bitwise operations]], it has a drawback. The length of the representation becomes massive quite quickly. A three digit decimal number requires a minimum of seven binary digits and a four digit decimal number requires a minimum of ten binary digits. By the number one million, twenty binary digits are required. Binary numbers are represented by a trailing b: 110 is a decimal number; 110b is binary. 1 binary digit is referred to as a &amp;quot;bit&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Hexadecimal==&lt;br /&gt;
Hexadecimal (also called base-16 or hex) is used as a substitute for binary. Hexadecimal has many of the advantages that binary has, but removes binary&#039;s largest disadvantage: the massive size. Each hexadecimal digit takes the value of one of 16 different values, 0-15. Values 10 and up are represented as the letters A through F. Because each hexadecimal place is based on a power of 16 and because 16 is equal to 2&amp;lt;sup&amp;gt;4&amp;lt;/sup&amp;gt;, hexadecimal numbers are four times shorter than their binary equivalents. Hexadecimal numbers are represented by a preceding &amp;quot;0x&amp;quot; or &amp;quot;$&amp;quot; or a succeeding &amp;quot;h&amp;quot;; For instance, 10d is also 0xA, $A, or Ah. In this document, all hexadecimal numbers are represented with the preceding &amp;quot;0x&amp;quot;. 1 hexadecimal digit is known as a nybble or half-byte, while 2 digits is called a byte (8 bits). Larger units are left somewhat ambiguous. A &amp;quot;word&amp;quot; is used to referred to the fundamental data type of a microprocessor. However, this can be 16, 32, or 64 bits, as well as some rather odd sizes on archaic processors, such as 39 bits. For the purposes of this document, a word is 32 bits with a halfword (or short) being 16 and a doubleword (or dword) being 64. A quadword (or qword) will be 128 bits.&lt;br /&gt;
&lt;br /&gt;
==Conversions==&lt;br /&gt;
Converting between bases is not that difficult a task, but can require a bit of practice. The easiest conversions to do are being base-16 and base-2. For a base-16 number, all you have to do is convert each digit into its corresponding binary form and keep the order intact. The representations are as follows:&lt;br /&gt;
&lt;br /&gt;
0x0 - 0000b&lt;br /&gt;
0x1 - 0001b&lt;br /&gt;
0x2 - 0010b&lt;br /&gt;
0x3 - 0011b&lt;br /&gt;
0x4 - 0100b&lt;br /&gt;
0x5 - 0101b&lt;br /&gt;
0x6 - 0110b&lt;br /&gt;
0x7 - 0111b&lt;br /&gt;
0x8 - 1000b&lt;br /&gt;
0x9 - 1001b&lt;br /&gt;
0xA - 1010b&lt;br /&gt;
0xB - 1011b&lt;br /&gt;
0xC - 1100b&lt;br /&gt;
0xD - 1101b&lt;br /&gt;
0xE - 1110b&lt;br /&gt;
0xF - 1111b&lt;br /&gt;
&lt;br /&gt;
For instance, to convert 0xDEA2 to binary, you would expand &amp;quot;D&amp;quot; to &amp;quot;1101&amp;quot;, &amp;quot;E&amp;quot; to &amp;quot;1110&amp;quot;, &amp;quot;A&amp;quot; to &amp;quot;1010&amp;quot;, and &amp;quot;2&amp;quot; to &amp;quot;0010&amp;quot;, giving you 1101111010100010b.&lt;br /&gt;
&lt;br /&gt;
Converting binary to hexadecimal is similar. Each four bit number is converted into its hexadecimal version. While one can start working from the right when converting hexadecimal to binary, it&#039;s important to start on the left when doing the opposite, as starting from the right will give a wrong result unless the binary number has a number of bits that is a multiple of four. For this example, the number 1111010010b will be used. The lowest four bits are 0010b which corresponds to 0x2. Then, 1101b which is 0xD. Finally 0011b, which is 0x3. The base-16 representation is 0x3D2. &lt;br /&gt;
&lt;br /&gt;
Converting binary and hexadecimal into decimal is easy as well, but a much different task. It is good practice to know the first few powers of 2 (1, 2, 4, 8, 16) and 16 (1, 16, 256, 4096, 65536). The so-called one&#039;s place in the number has a value of 1 (2&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; or 16&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt;) and as one moves to the left, the value of the place increases by a factor of 2 or 16 respectively. The convert these values to decimal, multiply the value of the digit in a specific binary or hexadecimal place by that place&#039;s value. Do the same for each digit, then add all the products up. &lt;br /&gt;
&lt;br /&gt;
Sample binary to decimal conversion: 110101011101b = 1 * 2&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; + 0 * 2&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + 1 * 2&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 1 * 2&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; + 1 * 2&amp;lt;sup&amp;gt;4&amp;lt;/sup&amp;gt; + 0 * 2&amp;lt;sup&amp;gt;5&amp;lt;/sup&amp;gt; + 1 * 2&amp;lt;sup&amp;gt;6&amp;lt;/sup&amp;gt; + 0 * 2&amp;lt;sup&amp;gt;7&amp;lt;/sup&amp;gt; + 1 * 2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt; + 0 * 2&amp;lt;sup&amp;gt;9&amp;lt;/sup&amp;gt; + 1 * 2&amp;lt;sup&amp;gt;11&amp;lt;/sup&amp;gt; + 1 * 2&amp;lt;sup&amp;gt;12&amp;lt;/sup&amp;gt; = 1 + 4 + 8 + 16 + 64 + 256 + 1024 + 2048 = 3,421. &lt;br /&gt;
&lt;br /&gt;
Sample hexadecimal to decimal conversion: 0xBEEF = 0xF * 16&amp;lt;sup&amp;gt;0&amp;lt;/sup&amp;gt; + 0xE * 16&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; + 0xE * 16&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; + 0xB * 16&amp;lt;sup&amp;gt;3&amp;lt;/sup&amp;gt; = 15 * 1 + 14 * 16 + 14 * 256 + 11 * 4,096 = 15 + 224 + 3,584 + 45,056 = 48,879. &lt;br /&gt;
&lt;br /&gt;
Converting numbers from decimal to binary or hexadecimal is slightly more problematic. The best way to do this is to find the largest power of 2 (or 16) that is not greater than the decimal number. Divide the number by that power and the result is the highest digit in the converted number. Divide the power by 2 (or 16) and repeat the process with that power and the remainder of the division. &lt;br /&gt;
&lt;br /&gt;
Sample decimal to binary conversion: 132. 128 is 2&amp;lt;sup&amp;gt;7&amp;lt;/sup&amp;gt;. 132 / 128 gives 1 with a remainder of 4. Dividing 128 by 2 gives 64. 4 / 64 is 0 with a remainder of 4. Dividing 64 by 2 gives 32. 4 / 32 is 0 with a remainder of 4. Dividing 32 by 2 gives 16. 4 / 16 is 0 with a remainder of 4. Dividing 16 by 2 gives 8. 4 / 8 is 0 with a remainder of 4. Dividing 8 by 2 gives 4. 4 / 4 is 1 with a remainder of 0. At this point we can stop the math. However, we still need to 0-fill the remaining bits. The 2&#039;s-place and 1&#039;s place still haven&#039;t been taken care of, which means two more zeros need to be appended. Our final result is 10000100b. &lt;br /&gt;
&lt;br /&gt;
Sample decimal to hexadecimal conversion: 327. 256 is 16&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; 327 / 256 is 1 with a remainder of 71. 256 / 16 is 16. 71 / 16 is 4 with a remainder of 7. 16 / 16 is 1. 7 / 1 is 7. The converted number is 0x147.&lt;br /&gt;
&lt;br /&gt;
==AND==&lt;br /&gt;
One of the fundamental logical and bitwise operations is known as the AND. AND takes in two inputs and produces one output. At its most fundamental level true is returned if both inputs are true and false otherwise. Bitwise AND (represented by &amp;amp;) ANDs each individual bit of a number together and the corresponding bit of the output is the result of ANDing the two input bits. For instance, take 11011111b &amp;amp; 10101101b. Bit n of the output is equal to Bit n of input 1 &amp;amp; Bit n of input 2. Bit 7 of the output will be 1 &amp;amp;s 1, or 1. Bit 6 will be 1 &amp;amp; 0 or 0. Bit 5 will be 0 &amp;amp; 1 or 0. Bit 4 will be 1 &amp;amp; 0 or 0. Bit 3 will be 1 &amp;amp; 1 or 1. Bit 2 will be 1 &amp;amp; 1 or 1. Bit 1 will be 1 &amp;amp; 0 or 0. And bit 0 will be 1 &amp;amp; 1 or 1. The final result is 10001101. &lt;br /&gt;
&lt;br /&gt;
==OR==&lt;br /&gt;
OR (represented by |) is another fundamental bitwise operation. On the one-bit level, OR returns 1 if either input is 1 and 0 if both inputs are 0. For multiple bit numbers, the same bit-by-bit process used to AND numbers and be used to OR them. Example: 10011001b | 11001010b = 11011011b. &lt;br /&gt;
&lt;br /&gt;
==XOR==&lt;br /&gt;
XOR (represented by ^) is a slightly more advanced bitwise operation. It is similar to OR and takes two inputs. However on the one-bit level, the output is 1 when either input is 1 &#039;&#039;&#039;but not both&#039;&#039;&#039;. If both inputs are 0 or 1, the output is 0. Example: 10011001b ^ 11001010b = 01010011b. &lt;br /&gt;
&lt;br /&gt;
==NOT==&lt;br /&gt;
NOT (represented by ~) is a fundamental bitwise operation. However, unlike AND, OR, and XOR, it only takes in one input. NOT inverts a bit. That is, if the input is 0, the output is 1, and if the input is 1, the output is 0. When performing a NOT, it is important to keep in mind implicit zeros. ~1101b will not be 10b. It will be 11110010b, 1111111111110010b, or 11111111111111111111111111110010b depending on whether the data size is 8-, 16-, or 32-bits. &lt;br /&gt;
&lt;br /&gt;
==Shifts==&lt;br /&gt;
A shift does what it implies: it shifts data to the left or to the right; that is, each bit is moved one place over per shift. There are left shifts and right shifts and two varieties of each.&lt;br /&gt;
&lt;br /&gt;
The logical shift (represented by &amp;lt;&amp;lt; for left and &amp;gt;&amp;gt; for right) shifts every bit to the left or the right a specified amount. Vacant bit positions are filled with zeros while the high bits (for left shift; low for right) are discarded. For example: 01001101b &amp;lt;&amp;lt; 2 = 00110100b.&lt;br /&gt;
&lt;br /&gt;
The arithmetic shift is similar to the logical shift. In fact, the left arithmetic shift is identical to the left logical shift. The difference is what occurs in the right shift. An arithmetic right shift performs the corresponding right logical shift first. Then, the MSB is replaced with what it originally was prior to the shift. Because there is no difference between left logical and arithmetic shifts, &amp;lt;&amp;lt; is used to represent both. The right arithmetic shift is represented by &amp;gt;&amp;gt;&amp;gt;. Example: 10111000 &amp;gt;&amp;gt;&amp;gt; 3 = 10010111.&lt;br /&gt;
&lt;br /&gt;
==Rotate==&lt;br /&gt;
A rotate is identical to a shift except that instead of the edge bit being thrown away, it is moved to the other end of the number. On a left rotate, the MSB becomes the LSB and on a right rotate the LSB becomes the MSB.&lt;br /&gt;
&lt;br /&gt;
==Two&#039;s Complement==&lt;br /&gt;
A major problem in the early years of computer science was how to represent negative numbers. After a lot of other formats were tried, the method eventually settled upon was Two&#039;s Complement. To turn a negative number into its two&#039;s complement representation, you invert the binary representation of that number&#039;s positive representation and then add 1. For instance, (assuming an 8-bit data size), -12 would be calculated as follows:&lt;br /&gt;
&lt;br /&gt;
12 = 00001100&lt;br /&gt;
~12 = 11110011&lt;br /&gt;
-12 = ~12 + 1 = 11110100&lt;br /&gt;
&lt;br /&gt;
Determining what a particular binary representation means is not difficult. If the highest bit is 0, the number is positive and can be calculated as normal. If the highest is 1, then the number is negative. To determine the negative number&#039;s magnitude, subtract one and then invert the number. Then convert to decimal like normal. The only exception is when the sign bit is set and every other bit is not.&lt;br /&gt;
&lt;br /&gt;
To determine the value of this representation, set the LSB and determine what this number is. Then subtract one.&lt;br /&gt;
Example: 11111110b&lt;br /&gt;
&lt;br /&gt;
The sign bit is set, so the number is negative. Subtracting gives 11111101b. Inverting gives 10b, which is 2. The number is -2.&lt;br /&gt;
Example: 00000110b&lt;br /&gt;
&lt;br /&gt;
The sign bit is not set, so the number is positive. Conversion can performed normal. The number is 6.&lt;br /&gt;
Example: 10000000b&lt;br /&gt;
&lt;br /&gt;
The sign bit is set and all other bits are not. Adding one gives 10000001b. This number represents -127. Subtracting one from that gives -128.&lt;br /&gt;
&lt;br /&gt;
==Zero- and Sign-Extensions==&lt;br /&gt;
Zero- and Sign-Extensions are the two different methods used to extend a value to a larger size, for example an 8-bit value to 16-bits. Zero-extension simply involves adding the appropriate number of zeros to the beginning of the number. For instance, zero-extending 10011111b to 16-bits would result in 0000000010011111b. Sign-extension is slightly different. If the MSB is zero, then the conversion is the same as in zero-extension. However, if the MSB is one, then the appropriate number of ones are added to the beginning of the number instead of zeros. Using the same example, sign-extending 10011111b to 16-bits would result in 1111111110011111b. Sign-extension is used because it allows two&#039;s complement numbers to keep their value when extended, whereas zero-extending the number would not.&lt;br /&gt;
&lt;br /&gt;
==IEEE-754==&lt;br /&gt;
IEEE-754 is the nearly-universal standard used for representing floating point values. Nearly any computer that contains an FPU will be using this format, and this includes consoles. The small floating point size is 32 bits; floating point values of this size are called single-precision floating point numbers (keyword &#039;&#039;&#039;float&#039;&#039;&#039; in C-like languages). Of these 32 bits, 1 is set aside for the sign, 8 bits are for the exponent, and 23 bits are for the mantissa. When the sign bit is 1, the number is negative; when it is 0, it is positive. The exponent bits actually store the exponent with 127 added to it, so when the exponent bits are 00000000b, the exponent is -127. The mantissa stores the normalized version of the number. This means that the decimal value is stored without the decimal point; the exponent keeps track of where the decimal point belongs. Normalized numbers have a MSB of one in the mantissa; there are also denormalized numbers, which have a MSB of zero in the mantissa. When using denormalized numbers, the exponent is stored with 126 added to it instead of 127.&lt;br /&gt;
&lt;br /&gt;
Example: -118.625&lt;br /&gt;
The number is negative so the sign bit is set.&lt;br /&gt;
118.625 in binary is 1110110.101b.&lt;br /&gt;
&lt;br /&gt;
Normalized, the number is 1.110110101 * 2&amp;lt;sup&amp;gt;6&amp;lt;/sup&amp;gt;.&lt;br /&gt;
The exponent is 6. Adding 127, the exponent is 133 or 10000101b.&lt;br /&gt;
The floating point value is 1100001011110110101000000000000b.&lt;br /&gt;
&lt;br /&gt;
Double-precision floating point values also exist (keyword &#039;&#039;&#039;double&#039;&#039;&#039; in C-like languages). The size is doubled to 64-bits. The exponent is expanded to 11 bits with a bias of 1,023, and the mantissa size is more than double to 52 bits. Finally, the quadruple-precision floating point values (keyword &#039;&#039;&#039;long double&#039;&#039;&#039; in C-like languages) expands the size to 128 bits, with a 112-bit mantissa and a 15-bit exponent (with a 16,383 bias).&lt;br /&gt;
&lt;br /&gt;
IEEE-754 also allows for signed infinities and NaNs. An infinity is represented by the maximum possible exponent with a mantissa of zero, while an NaN is represented by the maximum possible exponent with a non-zero mantissa.&lt;br /&gt;
&lt;br /&gt;
[[EnHacklopedia:Tools|Float Convert]] is a tool that allows one to convert between decimal floating point numbers and IEEE-754 formatted floating point numbers. However, it only works with single-precision values.&lt;br /&gt;
&lt;br /&gt;
Some basic C code can be used to convert between decimal and IEEE-754 double-precision values. This code is portable and is guaranteed to work on any platform. To convert a double to hex:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
     double val = 1.0; //Substitute your value here.&lt;br /&gt;
     printf(&amp;quot;%016I64X\n&amp;quot;, *(long long *)&amp;amp;val);&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Converting from hex to double is easy as well:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
     long long val = 0x3FF0000000000000LL; //Substitute your value here.&lt;br /&gt;
     printf(&amp;quot;%G&amp;quot;, *(double *)&amp;amp;val);&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==BCD==&lt;br /&gt;
BCD is an archaic method of representing decimal values. It was used on system without an FPU, such as the SNES. Each nybble in a BCD represents a specific decimal place; because of this, only values 0-9 are legal. The size of a BCD is arbitrary, as is the location where the decimal point exists.&lt;br /&gt;
&lt;br /&gt;
Example: 0x9837. Assuming that the decimal point exists in-between the bytes, this halfword represents the BCD value of 98.37.&lt;br /&gt;
&lt;br /&gt;
==Byte Order==&lt;br /&gt;
===Big Endian===&lt;br /&gt;
Big endian is a method of storing data. The &amp;quot;big end&amp;quot; of a word is stored first. For instance, the word 0x0A0B0C0D stored at 0x08000000 would have 0x0A stored at 0x08000000, 0x0B at 0x08000001, 0x0C at 0x08000002, and 0x0D at 0x08000003.&lt;br /&gt;
&lt;br /&gt;
===Little Endian===&lt;br /&gt;
Little endian is the most common method of storing data. The &amp;quot;little end&amp;quot; of a word is stored first. For instance, the word 0x0A0B0C0D stored at 0x08000000 would have 0x0D stored at 0x08000000, 0x0C stored at 0x08000001, 0x0B stored at 0x08000002, and 0x0A stored at 0x08000003. Many systems, including Nintendo&#039;s handhelds, store data this way.&lt;br /&gt;
&lt;br /&gt;
==ASCII==&lt;br /&gt;
ASCII is the most commonly used format for encoding characters. Originally a 7-bit encoding, it later expanded to 8-bits to double the number of characters. In ASCII, the letters &#039;A&#039; through &#039;Z&#039; are represented by 0x41 through 0x5A and &#039;a&#039; through &#039;z&#039; are 0x61 through 0x7A. &#039;0&#039; through &#039;9&#039; are 0x30 through 0x39, and a space is 0x20. While many games encode their text into ASCII, a lot of games use a modified ASCII, where the letters, while still together, start at a different point. For instance, the capital letters may begin a 0x00 instead of their standard ASCII location. A relative search can help search for text in games that use this. A relative searcher searches based on differences between bytes instead of looking for a specific series of bytes. For instance, if one were to search for &amp;quot;ABD&amp;quot;, the relative searcher would search for three consecutive bytes where the difference between the first and second was one and the difference between the second and third was two. [[EnHacklopedia:Tools|SearchR3]] is a program that automates this process. Below is an abridged ASCII table, which contains some of the more common characters used. Full ASCII tables are available on other websites, such as [http://www.asciitable.com asciitable.com].&lt;br /&gt;
&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Character&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Hex&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Dec&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|NULL&lt;br /&gt;
|0&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0x00&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|LF (Newline)&lt;br /&gt;
|10&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0x0A&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Space&lt;br /&gt;
|32&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0x20&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|!&lt;br /&gt;
|33&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0x21&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&amp;quot;&lt;br /&gt;
|35&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0x22&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|#&lt;br /&gt;
|35&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0x23&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|$&lt;br /&gt;
|36&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0x24&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&#039;(&#039; - &#039;)&#039;&lt;br /&gt;
|40 - 41&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0x28 - 0x29&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|.&lt;br /&gt;
|46&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0x2B&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&#039;0&#039; - &#039;9&#039;&lt;br /&gt;
|48 - 57&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0x30 - 0x39&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&#039;A&#039; - &#039;Z&#039;&lt;br /&gt;
|65 - 90&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0x41 - 0x5A&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&#039;a&#039; - &#039;z&#039;&lt;br /&gt;
|97 - 122&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|0x61 - 0x7A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:EnHacklopedia]]&lt;/div&gt;</summary>
		<author><name>Raing3</name></author>
	</entry>
	<entry>
		<id>https://wiki.gbatemp.net/w/index.php?title=EnHacklopedia:Tools&amp;diff=36323</id>
		<title>EnHacklopedia:Tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.gbatemp.net/w/index.php?title=EnHacklopedia:Tools&amp;diff=36323"/>
		<updated>2010-10-08T23:45:49Z</updated>

		<summary type="html">&lt;p&gt;Raing3: New page: {|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; !align=&amp;quot;center&amp;quot;|Program !align=&amp;quot;center&amp;quot;|Description !align=&amp;quot;center&amp;quot;|Author |- !align=&amp;quot;center&amp;quot; colspan=&amp;quot;3&amp;quot;|NES Tools |- |align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.n...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Program&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Description&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Author&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; colspan=&amp;quot;3&amp;quot;|NES Tools&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/nes/fceuxd_sp.rar FCEUXD SP v1.07]&amp;lt;br /&amp;gt;[http://cheats.gbatemp.net/hack/tools/nes/fceuxd_sp_source.rar Source code]&lt;br /&gt;
|NES Emulator with multiple code hacking features including a RAM searcher and debugger with breakpoint support.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Parasyte&amp;lt;br /&amp;gt;BbitMaster&amp;lt;br /&amp;gt;Xodnizel&amp;lt;br /&amp;gt;Sebastian Porst&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; colspan=&amp;quot;3&amp;quot;|SNES Tools&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/snes/snes9x_debug.7z Geiger&#039;s SNES9x&amp;lt;br /&amp;gt;Debugger Mark 9]&lt;br /&gt;
|Modified SNES9x with debugger.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Michael Springer&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/snes/snes9x.zip SNES9x v1.43]&lt;br /&gt;
|SNES Emulator with RAM searcher.&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|Gary Henderson&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; colspan=&amp;quot;3&amp;quot;|Genesis Tools&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/gen/gens_hacking_version.zip Gens Hacking Version]&lt;br /&gt;
|Modified Gens with cheat search.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/gen/gens_hacking_version.zip Gens KMod v0.4]&lt;br /&gt;
|Modified Gens with debugger.&lt;br /&gt;
|Kaneda&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/gen/gens_hacking_version.zip Gens Tracer]&lt;br /&gt;
|Slightly outdated version of Gens with a nice tracer.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; colspan=&amp;quot;3&amp;quot;|N64 Tools&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/n64/1964.exe 1964 v0.99]&lt;br /&gt;
|N64 emulator. Compatible with Renegade.&lt;br /&gt;
|Joel Middendorf&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/n64/gs_n64_crypt.zip GS Pro N64 Crypt]&lt;br /&gt;
|Tool for encrypting/decrypting the GS/AR rom for flashing with the official utils.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/n64/lemasm.zip LemAsm v0.1]&lt;br /&gt;
|R4300i Assembler/Disassembler.&lt;br /&gt;
|Lemmy&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/n64/mupen64.exe Mupen64 v0.5.1]&lt;br /&gt;
|N64 emulator. Compatible with Renegade.&lt;br /&gt;
|Hacktarux&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/n64/gs_pro_utils.zip N64 Version 3 Utilities]&lt;br /&gt;
|Datel&#039;s official software for use with GS/AR Pro.&lt;br /&gt;
|Datel&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/n64/patch_n64_utils.zip N64 Version 3 Utilities Hi-Res Patch]&lt;br /&gt;
|Patched utils to allow searching the hi-res memory. Also adds support for Windows NT/2K/XP (UserPort required).&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/n64/nemu08.zip Nemu v0.8]&lt;br /&gt;
|N64 emulator with debugger. Compatible with Renegade.&lt;br /&gt;
|Lemmy&amp;lt;br /&amp;gt;LaC&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/n64/niew.zip Niew]&lt;br /&gt;
|R4300i Assembler/Disassembler (No COP1 support).&lt;br /&gt;
|Titanik&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/n64/pcs_01.rar Parasytic Cheat Search V0.01]&amp;lt;br /&amp;gt;[http://cheats.gbatemp.net/hack/tools/n64/pcs_02.rar Parasytic Cheat Search V0.02]&lt;br /&gt;
|PJ64 Plugin for RAM searching.&lt;br /&gt;
|Parasyte&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/n64/perfect_trainer.rar Perfect Trainer v1.0b]&lt;br /&gt;
|An edited GS Pro rom for hacking Perfect Dark and a few other hi-res games.&lt;br /&gt;
|IceMario&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/n64/project64.exe Project 64 v1.6]&lt;br /&gt;
|N64 emulator. Compatible with Renegade.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/n64/project64_debug.zip Project 64 Build 52 (Debug Version)]&lt;br /&gt;
|Debug version of Project64. Tons of nice features, but it lacks the most important one: BREAKPOINTS!&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/n64/xploder64_utils.exe Official Xploder 64 Utilities]&lt;br /&gt;
|The official software for use with Xploder64.&lt;br /&gt;
|Fire International&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; colspan=&amp;quot;3&amp;quot;|PSX Tools&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/psx/caetla.zip Caetla 0.34 With Utilities]&amp;lt;br /&amp;gt;[http://cheats.gbatemp.net/hack/tools/psx/caetla128b.zip Caetla 1.28b]&lt;br /&gt;
|Homebrew PSX cheat device ROM for flashing to old PC Comms link devices. v1.28b is a hacked version.&lt;br /&gt;
|xianaix&amp;lt;br /&amp;gt;CMX&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/psx/psx_pro_modded.zip GSProModded]&lt;br /&gt;
|Official utilities for the cartridge based GS/AR Pro with the ar3stop ROM included. This allows playing backups (but not imports) without a mod-chip.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/psx/pcsx_debug.zip PCSX with Debugger]&lt;br /&gt;
|PSX emulator, compatible with Renegade. Also has a debugger.&lt;br /&gt;
|Linuzappz&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/psx/cdx_utils.zip Playstation Utitlies for CDX Version]&lt;br /&gt;
|Official utilities for the CDX based GS/AR.&lt;br /&gt;
|Datel&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/psx/psx_hack_utils.exe Playstation Version 3 Utitlies]&lt;br /&gt;
|Official utilities for the CDX based GS/AR.&lt;br /&gt;
|Datel&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/psx/psx_emulator.rar pSX (emulator) v1.11]&lt;br /&gt;
|PSX emulator, compatible with Renegade. Has a debugger, but it&#039;s not nearly as useful as PCSX.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/psx/ssspsx.zip SSSPSX]&lt;br /&gt;
|PSX emulator, compatible with Renegade.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/psx/undatel.zip Undatel]&lt;br /&gt;
|Utility for encrypting/decrypting the PSX GS/AR Pro ROM.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; colspan=&amp;quot;3&amp;quot;|DC Tools&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/dc/dccrypt.zip DCcrypt]&lt;br /&gt;
|Dreamcast GS/AR code encryptor/decryptor.&lt;br /&gt;
|Parasyte&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; colspan=&amp;quot;3&amp;quot;|GCN Tools&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/gcn/gcn_asm_gui.rar GCN ASM GUI]&lt;br /&gt;
|GCN assembler/disassembler.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/gcn/gcncrypt.zip GCNcrypt v1.5]&lt;br /&gt;
|GCN AR code encryptor/decryptor.&lt;br /&gt;
|Parasyte&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/gcn/gcnrd.rar GCNrd v1.10b]&lt;br /&gt;
|Gamecube memory searcher and debugger.&lt;br /&gt;
|Parasyte&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/gcn/gcnrd_gui.rar GCNrd GUI]&lt;br /&gt;
|GUI frontend for GCNrd.&lt;br /&gt;
|Kenobi&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/gcn/psoload.zip PSOload v2.0a]&lt;br /&gt;
|PSO-based loader.&lt;br /&gt;
|costis&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/gcn/sdload.zip SDLoad]&lt;br /&gt;
|SD card-based loader.&lt;br /&gt;
|costis&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; colspan=&amp;quot;3&amp;quot;|PS2 Tools&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/ps2/cb2crypt.rar CB2crypt]&lt;br /&gt;
|CodeBreaker PS2 code encryptor/decryptor. Works with versions up to v9.x.&lt;br /&gt;
|misfire&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/ps2/cb2util.rar CodeBreaker PS2 File Utility v1.0]&lt;br /&gt;
|Utitility for converting/encrypting/decrypting files for CodeBreaker PS2.&lt;br /&gt;
|misfire&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/ps2/maxconvert.zip MAXConvert v0.6]&lt;br /&gt;
|Utitility for encrypting/decrypting and converting PS2 codes between formats.&lt;br /&gt;
|Parasyte&amp;lt;br /&amp;gt;Pyriel&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/ps2/maxcrypt.zip MAXcrypt v1.5]&lt;br /&gt;
|AR MAX code encryptor/decryptor.&lt;br /&gt;
|Parasyte&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/ps2/ps2_code_decoder.zip PS2 Doce Decoder]&lt;br /&gt;
|Converts PS2 code between several different formats.&lt;br /&gt;
|iN tHE mIND&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/ps2/ps2dis.zip PS2DIS]&lt;br /&gt;
|Assembler/Disassembler for use with PS2 SLUS/SLES/etc files.&lt;br /&gt;
|hanimar&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; colspan=&amp;quot;3&amp;quot;|GB Tools&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/gb/bgb.zip BGB v1.12]&lt;br /&gt;
|Gameboy and Gameboy Color emulator with Debugger.&lt;br /&gt;
|bgb&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; colspan=&amp;quot;3&amp;quot;|GBA Tools&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/gba/arcrypt.rar AR Crypt v3.12 beta]&lt;br /&gt;
|GS/AR code encryptor/decryptor; Code converter.&lt;br /&gt;
|Kenobi&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/gba/cbacrypt.exe CBAcrypt]&lt;br /&gt;
|Codebreaker code encryptor/decryptor.&lt;br /&gt;
|Parasyte&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/gba/gbatool.exe GBAtool v1.20]&lt;br /&gt;
|CBA Master code finder, slide code expander and button code generator.&lt;br /&gt;
|CMX&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/gba/visual_advance_h.zip VisualBoy Advance:&amp;lt;br /&amp;gt;Hacker&#039;s Edition]&lt;br /&gt;
|GBA emulator. Modified version of VBA 1.7.2 with additional searching options.&lt;br /&gt;
|Forgotten&amp;lt;br /&amp;gt;Kenobi&amp;lt;br /&amp;gt;Labmaster&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/gba/visualboy_advance_sdl_h.zip VBA-SDL:&amp;lt;br /&amp;gt;Hackers Edition]&lt;br /&gt;
|Modified version of VBA-SDL 1.7.2. GBA emulator with debugger.&lt;br /&gt;
|Forgotten&amp;lt;br /&amp;gt;Kenobi&amp;lt;br /&amp;gt;Labmaster&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; colspan=&amp;quot;3&amp;quot;|NDS Tools&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/nds/ards_pointer_tool.rar ARDS Pointer codes Tool]&lt;br /&gt;
|Helps create ARDS Pointer codes.&lt;br /&gt;
|kenobi&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/nds/cbdscrypt.rar CBDSCrypt v1.02]&lt;br /&gt;
|Encrypts and decrypts codes for the CBDS. Also creates master codes.&lt;br /&gt;
|kenobi&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/nds/kode_garage.rar Kode Garage]&lt;br /&gt;
|Slide code and button code generator, code analyzer, code porter.&lt;br /&gt;
|KicKenchicKen57&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/nds/nds_convert.rar NDS Convert v2.12]&lt;br /&gt;
|Converts codes between AR, CB, and Dipstar formats.&lt;br /&gt;
|Dlong&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/nds/ndstool.exe NDS Tool v1.31]&lt;br /&gt;
|NDS ROM manipulator.&lt;br /&gt;
|Darkfader&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/nds/no_dollar_gba.rar No$GBA v2.4b]&lt;br /&gt;
|NDS Emulator; Renegade compatible.&lt;br /&gt;
|Martin Korth&lt;br /&gt;
|-&lt;br /&gt;
!align=&amp;quot;center&amp;quot; colspan=&amp;quot;3&amp;quot;|Miscellaneous Tools&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/misc/float_convert.exe FloatConvert]&lt;br /&gt;
|Converts floating pointer numbers between decimal and IEEE-754.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Game Genie Encoder:&#039;&#039;&#039;&amp;lt;br /&amp;gt;[http://cheats.gbatemp.net/hack/tools/misc/gg_encoder_linux.tar.bz2 Linux]&amp;lt;br /&amp;gt;[http://cheats.gbatemp.net/hack/tools/misc/gg_encoder_osc.dmg Mac OSX]&amp;lt;br /&amp;gt;[http://cheats.gbatemp.net/hack/tools/misc/gg_encoder_win32.zip Windows]&lt;br /&gt;
|Encodes and Decodes Game Genie codes for NES, SNES, Genesis, Game Boy, and Game Gear.&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/misc/gscc2k2.zip Game Software Code Creator 2K2]&lt;br /&gt;
|N64 and PSX code searchers and debugger.&lt;br /&gt;
|CMX&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/misc/gscc2k2_fix.zip Game Software Code Creator 2K2 VRAM Fix]&lt;br /&gt;
|GSCC2K2 patched to fix the 16-Bit/24-Bit radio button problem with VRAM dumping.&lt;br /&gt;
|CMX&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/misc/renegade64.rar Renegade v1.68]&lt;br /&gt;
|Multipurpose tool: Hooks emulators for several systems to search for codes among other things.&lt;br /&gt;
|Viper187&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/misc/searchr3.exe SearchR3 V1.0]&lt;br /&gt;
|Performs relative searches for strings.&lt;br /&gt;
|Antiriad&amp;lt;br /&amp;gt;DeJap^Raine&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/misc/tsearch.zip TSearch v1.6]&lt;br /&gt;
|Tool for searching the memory of PC games. Includes a somewhat simple x86 debugger as well.&lt;br /&gt;
|Corsica&amp;lt;br /&amp;gt;Production&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot;|[http://cheats.gbatemp.net/hack/tools/misc/userport.zip UserPort]&lt;br /&gt;
|Driver for Windows XP/2000 to allow older programs full access of the parallel port.&lt;br /&gt;
|Thomas Franzon&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:EnHacklopedia]]&lt;/div&gt;</summary>
		<author><name>Raing3</name></author>
	</entry>
	<entry>
		<id>https://wiki.gbatemp.net/w/index.php?title=EnHacklopedia:Documents&amp;diff=36322</id>
		<title>EnHacklopedia:Documents</title>
		<link rel="alternate" type="text/html" href="https://wiki.gbatemp.net/w/index.php?title=EnHacklopedia:Documents&amp;diff=36322"/>
		<updated>2010-10-08T23:44:29Z</updated>

		<summary type="html">&lt;p&gt;Raing3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Document&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Description&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/6502.txt 6502 Reference]&lt;br /&gt;
|Contains information on every opcode for the 6502, as well as the status flags and addressing modes. 6502 is the processor used in the NES.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/65816.txt 65816 Reference]&lt;br /&gt;
|Contains information on every opcode for the 65816, as well as the status flags and addressing modes. 65816 is the processor used in the SNES.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/arm.pdf ARM Reference]&lt;br /&gt;
|Official ARM Reference Manual. The GBA contains an ARM7 processor and the NDS has both an ARM7 as well as an ARM9.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/qrc_arm.pdf ARM Quick Reference Card]&lt;br /&gt;
|A three page quick reference for the ARM instruction set.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/gbatek.html GBA Tek]&lt;br /&gt;
|Unofficial GBA and NDS reference.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/gekko_user_manual.pdf Gekko User Manual]&lt;br /&gt;
|Official Gekko (Gamecube) reference manual.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/hitachi_sh7750.pdf Hitachi SH7750 User&#039;s Manual]&lt;br /&gt;
|Official reference manual for the SH7750 processor. Could be useful assembly reference for Dreamcast.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/m68000prm.pdf m68k Programmer&#039;s Reference Manual]&lt;br /&gt;
|Official reference manual for the m68k processor. The m68k is used in the Sega Genesis.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/mips32_vol1.pdf MIPS32 Architecture For Programmers: Volume I]&lt;br /&gt;
|&amp;quot;Introduction to the MIPS32 Architecture&amp;quot; Official reference manual for MIPS32 architectures. Covers the CPU used in PSX and N64.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/mips32_vol2.pdf MIPS32 Architecture For Programmers: Volume II]&lt;br /&gt;
|&amp;quot;The MIPS32 Instruction Set&amp;quot; Official reference manual for MIPS32 architectures. Covers the CPU used in PSX and N64.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/mips32_vol3.pdf MIPS32 Architecture For Programmers: Volume III]&lt;br /&gt;
|&amp;quot;The MIPS32 Privileged Resource Architecture&amp;quot; Official reference manual for MIPS32 architectures. Covers the CPU used in PSX and N64.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/n64ops.zip Nintendo 64 Toolkit]&lt;br /&gt;
|Contains information on the R4300i processor which the N64 uses as well as other miscellaneous features of the N64.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/psx_documentation_project.pdf PSX Documentation Project]&lt;br /&gt;
|Everything you ever wanted to know about the PSX but were afraid to ask.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/r4300i_datasheet.pdf R4300i Datasheet]&lt;br /&gt;
|The official info on the r4300i processor from MIPS.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/qrc_thumb.pdf THUMB Quick Reference Card]&lt;br /&gt;
|A three page quick reference for the THUMB instructions set. THUMB is a special state of ARM that contains different instructions.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/z80080.pdf Z80 CPU Family User&#039;s Manual]&lt;br /&gt;
|Official reference manual for the Z80 processor. The Z80 is used in the Sega Master System and Game Gear, as well as all Game Boy models prior to the GBA.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:EnHacklopedia]]&lt;/div&gt;</summary>
		<author><name>Raing3</name></author>
	</entry>
	<entry>
		<id>https://wiki.gbatemp.net/w/index.php?title=EnHacklopedia:Documents&amp;diff=36321</id>
		<title>EnHacklopedia:Documents</title>
		<link rel="alternate" type="text/html" href="https://wiki.gbatemp.net/w/index.php?title=EnHacklopedia:Documents&amp;diff=36321"/>
		<updated>2010-10-08T23:43:10Z</updated>

		<summary type="html">&lt;p&gt;Raing3: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Documents==&lt;br /&gt;
{|cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Document&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Description&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/6502.txt 6502 Reference]&lt;br /&gt;
|Contains information on every opcode for the 6502, as well as the status flags and addressing modes. 6502 is the processor used in the NES.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/65816.txt 65816 Reference]&lt;br /&gt;
|Contains information on every opcode for the 65816, as well as the status flags and addressing modes. 65816 is the processor used in the SNES.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/arm.pdf ARM Reference]&lt;br /&gt;
|Official ARM Reference Manual. The GBA contains an ARM7 processor and the NDS has both an ARM7 as well as an ARM9.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/qrc_arm.pdf ARM Quick Reference Card]&lt;br /&gt;
|A three page quick reference for the ARM instruction set.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/gbatek.html GBA Tek]&lt;br /&gt;
|Unofficial GBA and NDS reference.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/gekko_user_manual.pdf Gekko User Manual]&lt;br /&gt;
|Official Gekko (Gamecube) reference manual.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/hitachi_sh7750.pdf Hitachi SH7750 User&#039;s Manual]&lt;br /&gt;
|Official reference manual for the SH7750 processor. Could be useful assembly reference for Dreamcast.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/m68000prm.pdf m68k Programmer&#039;s Reference Manual]&lt;br /&gt;
|Official reference manual for the m68k processor. The m68k is used in the Sega Genesis.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/mips32_vol1.pdf MIPS32 Architecture For Programmers: Volume I]&lt;br /&gt;
|&amp;quot;Introduction to the MIPS32 Architecture&amp;quot; Official reference manual for MIPS32 architectures. Covers the CPU used in PSX and N64.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/mips32_vol2.pdf MIPS32 Architecture For Programmers: Volume II]&lt;br /&gt;
|&amp;quot;The MIPS32 Instruction Set&amp;quot; Official reference manual for MIPS32 architectures. Covers the CPU used in PSX and N64.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/mips32_vol3.pdf MIPS32 Architecture For Programmers: Volume III]&lt;br /&gt;
|&amp;quot;The MIPS32 Privileged Resource Architecture&amp;quot; Official reference manual for MIPS32 architectures. Covers the CPU used in PSX and N64.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/n64ops.zip Nintendo 64 Toolkit]&lt;br /&gt;
|Contains information on the R4300i processor which the N64 uses as well as other miscellaneous features of the N64.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/psx_documentation_project.pdf PSX Documentation Project]&lt;br /&gt;
|Everything you ever wanted to know about the PSX but were afraid to ask.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/r4300i_datasheet.pdf R4300i Datasheet]&lt;br /&gt;
|The official info on the r4300i processor from MIPS.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/qrc_thumb.pdf THUMB Quick Reference Card]&lt;br /&gt;
|A three page quick reference for the THUMB instructions set. THUMB is a special state of ARM that contains different instructions.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/z80080.pdf Z80 CPU Family User&#039;s Manual]&lt;br /&gt;
|Official reference manual for the Z80 processor. The Z80 is used in the Sega Master System and Game Gear, as well as all Game Boy models prior to the GBA.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:EnHacklopedia]]&lt;/div&gt;</summary>
		<author><name>Raing3</name></author>
	</entry>
	<entry>
		<id>https://wiki.gbatemp.net/w/index.php?title=EnHacklopedia:Documents&amp;diff=36317</id>
		<title>EnHacklopedia:Documents</title>
		<link rel="alternate" type="text/html" href="https://wiki.gbatemp.net/w/index.php?title=EnHacklopedia:Documents&amp;diff=36317"/>
		<updated>2010-10-08T14:24:10Z</updated>

		<summary type="html">&lt;p&gt;Raing3: New page: ==Documents== {|border=&amp;quot;1&amp;quot; !align=&amp;quot;center&amp;quot;|Document !align=&amp;quot;center&amp;quot;|Description |- |[http://cheats.gbatemp.net/hack/documents/6502.txt 6502 Reference] |Contains information on every opcode...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Documents==&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Document&lt;br /&gt;
!align=&amp;quot;center&amp;quot;|Description&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/6502.txt 6502 Reference]&lt;br /&gt;
|Contains information on every opcode for the 6502, as well as the status flags and addressing modes. 6502 is the processor used in the NES.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/65816.txt 65816 Reference]&lt;br /&gt;
|Contains information on every opcode for the 65816, as well as the status flags and addressing modes. 65816 is the processor used in the SNES.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/arm.pdf ARM Reference]&lt;br /&gt;
|Official ARM Reference Manual. The GBA contains an ARM7 processor and the NDS has both an ARM7 as well as an ARM9.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/qrc_arm.pdf ARM Quick Reference Card]&lt;br /&gt;
|A three page quick reference for the ARM instruction set.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/gbatek.html GBA Tek]&lt;br /&gt;
|Unofficial GBA and NDS reference.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/gekko_user_manual.pdf Gekko User Manual]&lt;br /&gt;
|Official Gekko (Gamecube) reference manual.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/hitachi_sh7750.pdf Hitachi SH7750 User&#039;s Manual]&lt;br /&gt;
|Official reference manual for the SH7750 processor. Could be useful assembly reference for Dreamcast.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/m68000prm.pdf m68k Programmer&#039;s Reference Manual]&lt;br /&gt;
|Official reference manual for the m68k processor. The m68k is used in the Sega Genesis.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/mips32_vol1.pdf MIPS32 Architecture For Programmers: Volume I]&lt;br /&gt;
|&amp;quot;Introduction to the MIPS32 Architecture&amp;quot; Official reference manual for MIPS32 architectures. Covers the CPU used in PSX and N64.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/mips32_vol2.pdf MIPS32 Architecture For Programmers: Volume II]&lt;br /&gt;
|&amp;quot;The MIPS32 Instruction Set&amp;quot; Official reference manual for MIPS32 architectures. Covers the CPU used in PSX and N64.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/mips32_vol3.pdf MIPS32 Architecture For Programmers: Volume III]&lt;br /&gt;
|&amp;quot;The MIPS32 Privileged Resource Architecture&amp;quot; Official reference manual for MIPS32 architectures. Covers the CPU used in PSX and N64.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/n64ops.zip Nintendo 64 Toolkit]&lt;br /&gt;
|Contains information on the R4300i processor which the N64 uses as well as other miscellaneous features of the N64.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/psx_documentation_project.pdf PSX Documentation Project]&lt;br /&gt;
|Everything you ever wanted to know about the PSX but were afraid to ask.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/r4300i_datasheet.pdf R4300i Datasheet]&lt;br /&gt;
|The official info on the r4300i processor from MIPS.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/qrc_thumb.pdf THUMB Quick Reference Card]&lt;br /&gt;
|A three page quick reference for the THUMB instructions set. THUMB is a special state of ARM that contains different instructions.&lt;br /&gt;
|-&lt;br /&gt;
|[http://cheats.gbatemp.net/hack/documents/z80080.pdf Z80 CPU Family User&#039;s Manual]&lt;br /&gt;
|Official reference manual for the Z80 processor. The Z80 is used in the Sega Master System and Game Gear, as well as all Game Boy models prior to the GBA.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Raing3</name></author>
	</entry>
	<entry>
		<id>https://wiki.gbatemp.net/w/index.php?title=3_in_1_Expansion_Pack_for_EZ-Flash_V&amp;diff=23151</id>
		<title>3 in 1 Expansion Pack for EZ-Flash V</title>
		<link rel="alternate" type="text/html" href="https://wiki.gbatemp.net/w/index.php?title=3_in_1_Expansion_Pack_for_EZ-Flash_V&amp;diff=23151"/>
		<updated>2009-04-02T10:23:41Z</updated>

		<summary type="html">&lt;p&gt;Raing3: The download link to NDS Backup Tools 3in1 was broken so I changed it to a GBAtemp link.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AKA: 3-in-1, 3 in 1, EZ Expansion Pack, EZ-Flash 3-in-1, EZ-Flash 3 in 1, Expansion Pack &amp;lt;BR /&amp;gt;&lt;br /&gt;
Manufactured by: [http://www.ezflash.cn EZ-Flash] &lt;br /&gt;
[[Image:3in1-1.jpg|350px|3 in 1 Expansion Pack (Only for DS Lite)|right]]&lt;br /&gt;
[[Image:EZ-Flash_3in1_gba_sized.jpg|350px|3 in 1 Expansion Pack (GBA Cartridge Sized)|right]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Variants ==&lt;br /&gt;
*3 in 1 Expansion Pack for EZ-Flash V for DS Lite (White or Black)&lt;br /&gt;
*3 in 1 Expansion Pack for EZ-Flash V for DS (AKA DS &amp;quot;Phat&amp;quot; Version or GBA Size)&lt;br /&gt;
&lt;br /&gt;
Note: There are two chip set variations, where one chip set has succeeded the first. This has resulted in changes in source code provided to third-party developers. According to the EZ Team, this change was due to a shortage of a specific flash chip.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
The 3 in 1 Expansion Pack is a [[:Category:NDS Slot-2 Carts|NDS Slot-2 Cart]] that works in conjunction with [[:Category:NDS Slot-1 Carts|NDS Slot-1 Carts]]. The device officially attempts to integrate three distinct solutions. First, the device is capable of loading GBA games stored in slot-1 devices in a manner similar to previous slot-2 solutions created by the EZ-flash team. Secondly, the 3 in 1 is a memory expansion pack. Finally, the device is a competing rumble pak expansion for games that support official DS rumble pack. Furthermore, open third-party access to the hardware features have expanded the capability of the Expansion Pack.&lt;br /&gt;
&lt;br /&gt;
The 3 in 1 Expansion Pack for EZ-Flash V can be officially purchased as a bundle with the EZ-Flash V or separately. The product was specifically designed for [[EZ-Flash V]], but users of other slot-1 cards are able to utilize the Expansion Pack.&lt;br /&gt;
&lt;br /&gt;
== Hardware Features ==&lt;br /&gt;
&lt;br /&gt;
* 256 Mb (32 MB) of NOR Flash Memory. This type of memory is able to retain data without requiring uninterrupted power. Depending on data size, writing may take up to several minutes. One typical use includes copying over a GBA ROM, thereby allowing the 3-in-1 to act like a real GBA cartridge.&lt;br /&gt;
* 128 Mb (16 MB) of PSRAM. This memory does not retain data when the power is turned off. However it can be written at speeds much faster than NOR memory.&lt;br /&gt;
* 4 Mb (512 KB) of battery backed SRAM for save data. The battery is necessary to retain data.&lt;br /&gt;
* Programmable embedded &amp;quot;rumble pak&amp;quot; (haptic feedback) device&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
=== Official ===&lt;br /&gt;
# GBA Loader: &lt;br /&gt;
#* GBA ROMs and save data are stored long-term in the Slot-1 device memory&lt;br /&gt;
# 128 Mb (16 MB) PSRAM Expansion:&lt;br /&gt;
#* Extra RAM necessary for programs like DS Opera Web Browser loaded from Slot-1 device.&lt;br /&gt;
# Rumble function: &lt;br /&gt;
#* Works with all official rumble enabled NDS games and homebrew loaded from Slot-1 device.&lt;br /&gt;
#* Rumble can be set to three levels of intensity.&lt;br /&gt;
&lt;br /&gt;
=== Third-Party ===&lt;br /&gt;
The source code necessary to utilize the key hardware features of the expansion pack is readily available to developers. There have already been many successful solutions for third-party slot-1 carts. There are many practical and creative projects openly available in the homebrew scene.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name &amp;amp; Link&lt;br /&gt;
! Author&lt;br /&gt;
! Program Type&lt;br /&gt;
! Brief Summary&lt;br /&gt;
|-&lt;br /&gt;
| [http://ezflash.sosuke.com/viewtopic.php?t=4262 Standalone Browser Patch]&lt;br /&gt;
| Triforce, Cory1492&lt;br /&gt;
| Patcher&lt;br /&gt;
| Patches the DS Browser allowing automatic detection of the 3 in 1 PSRAM&lt;br /&gt;
|-&lt;br /&gt;
| [http://ezflash.sosuke.com/viewtopic.php?t=4767 Standalone Rumble Patch]&lt;br /&gt;
| anonYmous&lt;br /&gt;
| Patcher&lt;br /&gt;
| Patching tool for DS ROMS that support rumble. This allows automatic detection of the rumble hardware, therefore not requiring any tool to turn on the rumble feature. This is a manual version of the automated patching done by the EZ-Flash V.&lt;br /&gt;
|-&lt;br /&gt;
| [http://ezflash.sosuke.com/viewtopic.php?t=4749 GBALdr]&lt;br /&gt;
| Cory1492&lt;br /&gt;
| GBA ROM Loader&lt;br /&gt;
| A homebrew application run from the DS that will load games directly to NOR memory, load/save .sav files, and can auto-backup the save data currently on the cart when loading a new game.  Due to the fact that it only loads games into NOR memory, it can be painfully slow, taking up to 5 minutes in some cases.  Cory1492 has recently updated the GBALdr program to fix the problems detecting and running GBA games with newer 3in1 cards which have different hardware components to earlier versions.  Full details of the updated GBALdr can be found [http://nds.cmamod.com/2008/01/27/gbaldr-3in1-01-final-hw-abstraction-update/ here].&lt;br /&gt;
|-&lt;br /&gt;
| [http://ezflash.sosuke.com/about5006.html 3in1 ExpPack Tool] (Succeeded by GBA ExpLoader)&lt;br /&gt;
| Rudolph&lt;br /&gt;
| GBA ROM Loader / Hardware Enabling&lt;br /&gt;
| Another homebrew application that runs from the DS.  This is by far one of the best loaders available.  Just as with GBALdr, it can load games to the 3 in 1.  What makes it different than GBALdr is the fact that it can load all ROMS under 16MB directly to the PSRAM on the 3 in 1, making copy time less than a minute in nearly all cases.  Additionally, it can load games to NOR memory if they exceed 16MB.  Two other features that I find to be unique to this tool is the ability to turn the Rumble Pack on and off (for supported DS games) and the ability to switch the cart over to an Expansion Pack for use with the Opera Browser.  Rudolph recently updated the 3in1 ExpPack software and renamed it to GBA ExpLoader. Compatible with the first chip set. The latest version can be downloaded from [http://blog.so-net.ne.jp/Rudolph/ here]&lt;br /&gt;
|-&lt;br /&gt;
| [http://kotei.blog.so-net.ne.jp/ GBA ExpLoader] (Successor to 3in1 ExpPack Tool by Rudolph)&lt;br /&gt;
| Rudolph&lt;br /&gt;
| GBA ROM Loader and Patcher / Hardware Enabling&lt;br /&gt;
| Rewrite of the 3in1 ExpPack Tool allowing expanded compatibility with not only the succeeding 3in1 chip set, but also other [[:Category:NDS Slot-2 Carts|slot-2 carts]]. Differences from 3in1 ExpPack Tool: automatic GBA ROM file patching, multiple save mechanism, and extended compatibility with specific save types (for example, ROM 1386 - Famicom Mini Vol 5 Zelda no Densetsu, save type EEPROM_124).&lt;br /&gt;
|-&lt;br /&gt;
| [http://gbatemp.net/index.php?download=2775 NDS Backup Tool 3in1]&lt;br /&gt;
| Rudolph&lt;br /&gt;
| Backup Tool&lt;br /&gt;
| Utilizes the NOR Flash Memory and SRAM. This homebrew application can send or backup save information stored an original DS game cartridge. Furthermore, NDS Backup Tool 3in1 can backup original carts as ROMs. DS cartridges that contain more than 256 Mb (32MB) of data are compatible with this tool. The software is sophisticated enough to copy data in 256 Mb chunks and then rejoin them later in the slot-1 cartridge memory. Compatible with both chip sets.&lt;br /&gt;
|-&lt;br /&gt;
| [http://ezflash.sosuke.com/about6317.html NDStation]&lt;br /&gt;
| Chuckstudios&lt;br /&gt;
| Patcher&lt;br /&gt;
| A very interesting approach to loading ROMs on the 3 in 1.  Rather than having a homebrew running on the DS transfer the ROM to the 3 in 1, chuckstudios developed a Windows program (later ported to Linux by dg10050) that packaged the GBA ROM in an .NDS file.  This packaged file, when launched from a Slot 1 card, would backup any existing save on the 3 in 1 and load the ROM onto it.  The aim of the project is to give things a more integrated and unified feel with your Slot 1 cart. Additionally, one can customize the icon of the .nds file, alternatively load the game into the PSRAM, compress the ROM, and include a custom GBA border.&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.cyclopsds.com/cgi-bin/cyclods/engine.pl?page=support CycloDS Evolution Firmware v1.2 and up]&lt;br /&gt;
| Team Cyclops&lt;br /&gt;
| Firmware&lt;br /&gt;
| The [[CycloDS Evolution]] officially integrates rumble for Nintendo DS games, memory expansion for Opera Browser without any additional ROM patching, and GBA-NDS linking.&lt;br /&gt;
|-&lt;br /&gt;
| [http://ezflash.sosuke.com/viewtopic.php?t=5342&amp;amp;start=0 Pokepatch for EZ3in1]&lt;br /&gt;
| Cory1492&lt;br /&gt;
| Patcher&lt;br /&gt;
| Patches Pokémon DS versions Diamond and Pearl allowing DS-GBA linkage. The GBA game must be loaded into the NOR. Please read the linked discussion thoroughly.&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.dslinux.org DSLinux]&lt;br /&gt;
| [http://dslinux.org/cgi-bin/moin.cgi/ContactingDevelopers DSLinux Dev Team]&lt;br /&gt;
| Operating System&lt;br /&gt;
| Provides the Linux operating system more available RAM&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.snemul.com/ds/ SNEmulDS]&lt;br /&gt;
| Archeide &lt;br /&gt;
| SNES Emulator&lt;br /&gt;
| Provides additional RAM to emulator in order to improve large SNES ROM emulation&lt;br /&gt;
|-&lt;br /&gt;
| [http://lazyone.drunkencoders.com/wordpress/index.php Mini vMac Port]&lt;br /&gt;
| Lazyone&lt;br /&gt;
| Legacy Mac OS Emulator&lt;br /&gt;
| Provides additional RAM&lt;br /&gt;
|-&lt;br /&gt;
| [http://lameboy.nutki.com Lameboy]&lt;br /&gt;
| Nutki&lt;br /&gt;
| Game Boy / Game Boy Color Emulator&lt;br /&gt;
| Rumble is supported GB/GBC games&lt;br /&gt;
|-&lt;br /&gt;
| [http://quake.drunkencoders.com/ Quake 1 and Quake 2 for Nintendo DS]&lt;br /&gt;
| Simon Hall&lt;br /&gt;
| Quake 1 and Quake 2 Ports for the DS&lt;br /&gt;
| Quake 1 uses the additional RAM as an optional enhancement. Quake 2 requires additional RAM from slot-2.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Compatibility ==&lt;br /&gt;
The current compatibility of the 3 in 1 with official games is practically complete. The official EZ-Flash V kernel software is capable of integrating all hardware featured in the 3 in 1 Expansion Pack. The EZ-Flash team does not ensure hardware compatibility with other slot-1 devices. Compatibility with third-party slot-1 carts appear to be just as good.&lt;br /&gt;
&lt;br /&gt;
The 3 in 1 is compatible with GBA ROMs [[#When do I need to patch a GBA ROM in regards to the saving function?|properly patched]]. Optional ROM trimming is also available. GBA ROMs can be written to the PSRAM unless the ROM is larger than the 128 Mbit capacity and/or has a save type of 1 Mbit or larger. All GBA ROMs can be written into the 256 Mbit NOR flash memory. The NDS Browser requires additional patching and/or tools for unofficial slot-1 carts in order to recognize the PSRAM. The rumble feature is for NDS games and can be easily coded into homebrew. [[Lameboy]], a slot-1 Game Boy / Game Boy Color emulator, is an example of homebrew that is compatible with 3 in 1 rumble when properly enabled by either official or third-party software.&lt;br /&gt;
&lt;br /&gt;
Homebrew applications can use the Expansion Pack as a memory expansion. For example, DSLinux-DLDI uses it to provide extra RAM for their linux port. SNEmulDS utilizes the extra RAM to improve large Nintendo SNES ROM emulation.&lt;br /&gt;
&lt;br /&gt;
== Review ==&lt;br /&gt;
&lt;br /&gt;
=== Official GBAtemp Review ===&lt;br /&gt;
[http://gbatemp.net/index.php?showtopic=42399 EZ-Flash V GBAtemp Review]&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Overall:&#039;&#039;&#039; &#039;&#039;&amp;quot;The build quality is great, it feels very sturdy and the black brushed finish was a good choice. The cart is held together with a single screw on the back. It fits firmly in the GBA slot however it does seem to stick out ever so slightly, so slight it’s hardly worth mentioning. You’ll notice it if you brush your finger over it though.&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;GBA:&#039;&#039;&#039; &#039;&#039;&amp;quot;You can start a GBA game by either hitting the ‘Start GBA game’ button on the DS firmware menu or by pressing R+A when selecting the game in the EZ-V menu. There is no EZ-V GBA loader menu meaning that you can only have one game on the cart at one time. It would be nice if in the future you were allowed to write multiple games to the 256mbit of space. But as it stands it&#039;s a simple and effective GBA solution for a slot-1 flash card. The EZTeam come highly recommended with all their GBA ventures and the Expansion Pack is no exception, GBA games run fine and are easy to write and use.&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;RAM:&#039;&#039;&#039; &#039;&#039;&amp;quot;When the Opera DS Browser was released it came with a separate RAM pack which gave the DS that little extra boost to run the application. The Expansion Pack simulates this RAM pack when you use the DS Browser ROM. There is no patching required, just simple drag &amp;amp; drop and the Opera Browser will work fine. Strangely though the Expansion Pack will not work if you use the original DS Browser DS card with it, only the ROM version will work. That being the case there shouldn’t be many people out there that would want to use the original card with the Expansion Pack if they have an EZ-V.&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Rumble:&#039;&#039;&#039; &#039;&#039;&amp;quot;Rumble is loud, very loud. On full rumble the Expansion Pack is frighteningly loud and completely distracts from the gaming experience. This is in line with the official rumble pack. However you have the ability to select between three different strengths of rumble. Pressing R+L on the EZ-V loader will take you to the menu where you can select between low, medium or high. On low the rumble emits hardly any noise and still has a pleasant sensation when playing games like Elite Beat Agents. Games do not have to be patched for rumble support, that information is stored in the updated savelist file. Only official rumble supported games will use the Expansion Pack as it works just like the official pack.&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Images ===&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:3-in-1.jpg&lt;br /&gt;
Image:Back.jpg&lt;br /&gt;
Image:Bottom.jpg&lt;br /&gt;
Image:Expansion-open2.jpg&lt;br /&gt;
Image:Expansion-open.jpg&lt;br /&gt;
Image:Ezv-plus.jpg&lt;br /&gt;
Image:Ez3n1package.jpg|Standalone Packaging&lt;br /&gt;
Image:Ez3n1openpackage.jpg|Contents&lt;br /&gt;
Image:Ez3n1compare.jpg|Comparison to Original&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Initial Setup==&lt;br /&gt;
&#039;&#039;&#039;Simply put, the most popular unified third-party program for GBA ROM Loading, RAM Expansion, and Rumble at this time is [http://kotei.blog.so-net.ne.jp/ GBA ExpLoader]. GBA ExpLoader automatically patches GBA ROMs during the ROM loading process.&#039;&#039;&#039; The following are fairly generalized instructions.&lt;br /&gt;
=== GBA ===&lt;br /&gt;
EZ-Flash V owners may follow the [http://ezflash.sosuke.com/wiki/index.php?title=EZFlash_V_quickstart_guide Official EZ-Flash V Quickstart Guide]. Other Slot-1 Carts will require a third-party solution.&lt;br /&gt;
==== Automatic Patching Method ====&lt;br /&gt;
Third-party applications have become more sophisticated allowing a more streamlined process of initial setup. This method of initial setup does not require manual patching of GBA ROMs.&lt;br /&gt;
#One will need a [[#Third-Party|Third-Party Loader]] that supports automatic GBA ROM patching in order to load a GBA ROM from a DLDI compatible Slot 1 cart.&lt;br /&gt;
#GBA ROMs can be [[GBAtemp_Glossary#T|trimmed]].&lt;br /&gt;
#Once the GBA ROMs and the necessary files for the Third-Party Loader are copied over to the slot-1 memory card, follow the instructions of the homebrew loader accordingly. One typical step is [[DLDI]] patching of the loader, which is usually a file with a .nds extension.&lt;br /&gt;
&lt;br /&gt;
==== Original Method ====&lt;br /&gt;
The original method requires manual ROM patching. This can be used as a historical reference as third-party applications with automatic ROM patching become more mature.&lt;br /&gt;
#One will need a [[#Third-Party|Third-Party Loader]] in order to load a GBA ROM from a DLDI compatible Slot 1 cart.&lt;br /&gt;
#GBA ROMs can be [[GBAtemp_Glossary#T|trimmed]].&lt;br /&gt;
#GBA ROMs must be properly patched in order for the 3 in 1 to save to SRAM.  Two popular tools are known to do this:&lt;br /&gt;
#*[http://gbatemp.net/index.php?download=224 GBATA] - GBATA is the most widely accepted tool to use when SRAM patching GBA ROMs.  All you need to do is load up the ROM (click the [...] button), click on the SRAM Patch tab, and click the Patch button.  If the button is grayed out, then the ROM does not need to be patched.&lt;br /&gt;
#*[http://www.sosuke.com/ezflash/viewtopic.php?t=719 EZ4 Client] - EZ4 Client is an alternative to GBATA.  While it performs a similar function as GBATA, several users have reported lost save files with roms patched with this program.  If you have a GBA ROM that uses a 1mbit save, you must use this program to patch it.&lt;br /&gt;
#Once the the GBA roms and the necessary files for the Third-Party Loader are copied over to the slot-1 memory card, follow the instructions of the homebrew loader accordingly. One typical step is [[DLDI]] patching of the loader, which is usually a file with a .nds extension.&lt;br /&gt;
&lt;br /&gt;
=== Nintendo DS Browser ===&lt;br /&gt;
The EZ-Flash V can open a clean Nintendo DS Browser ROM without any additional setup. Other Slot-1 Carts will require a third-party solution in order for the ROM to recognize the 3 in 1 PSRAM.&lt;br /&gt;
&lt;br /&gt;
*One working third-party solution that enables other slot-1 carts to use the 3 in 1 with the Nintendo DS Browser ROM would be the GBA ExpLoader by Rudolph.&lt;br /&gt;
#Patch the program [[DLDI]] accordingly.&lt;br /&gt;
#Switch to the Rumble selection menu.&lt;br /&gt;
#Select &#039;Expansion RAM&#039;.&lt;br /&gt;
#Start-up the DS Browser.&lt;br /&gt;
&lt;br /&gt;
=== Rumble ===&lt;br /&gt;
According to the Quickstart Guide and Official GBAtemp review, an updated save list is necessary in order to identify NDS ROMs that support rumble when used in conjunction with the EZ-Flash V. Other Slot-1 Carts will require a third-party solution. Rumble is compatible with any NDS game or homebrew program that supports it.&lt;br /&gt;
&lt;br /&gt;
*One working third-party solution that enables rumble in other slot-1 carts would be the GBA ExpLoader by Rudolph.&lt;br /&gt;
#Patch the program [[DLDI]] accordingly.&lt;br /&gt;
#Switch to the Rumble selection menu.&lt;br /&gt;
#Select the intensity of rumble, and the tool will soft-reset.&lt;br /&gt;
#Start-up a DS game or homebrew program.&lt;br /&gt;
&lt;br /&gt;
*Due to the recent 3 in 1 expansion pack hardware revision, automatic rumble enabling for slot-1 carts, like EDGE and CycloDS, is broken. This is one workaround: &lt;br /&gt;
#Patch one of the games with Standalone 3in1 rumble patcher, for example Metroid Prime Pinball (preferable US version)&lt;br /&gt;
#Load the patched game once&lt;br /&gt;
#Trigger soft-reset&lt;br /&gt;
#Load a different game&lt;br /&gt;
&lt;br /&gt;
==Frequently asked questions==&lt;br /&gt;
&lt;br /&gt;
===Where do I put my ROMs?===&lt;br /&gt;
Unlike a lot of Slot 2 solutions out there, the 3 in 1 does not have its own removable storage.  This is due to the fact that it was initially designed for use with the EZ-Flash V. ROMs are stored in a permanent fashion on the removable media or internal storage of your Slot 1 device.  Where they are put is determined by which solution you choose from the [[#Third-Party|third-party solutions]] list. A cool feature of the 3 in 1 is treating a GBA ROM loaded in the NOR like a GBA cartridge.&lt;br /&gt;
&lt;br /&gt;
===Can the 3 in 1 only hold 1 GBA ROM at a time?===&lt;br /&gt;
The 3 in 1 can only hold one ROM in its NOR, unless you are running an EZFlash V or V Plus with the 1.8x b2 loader.  Any time you want to play a game 16MB or less, you copy it over to the PSRAM on the cartridge using your loader of choice.  This is standard with all slot 2 cartridges.  Most slot 2s that have firmware (the ones with removable or internal storage have the loader built-in).  The only reason people think otherwise is because most Slot 2s have either removable or internal storage for ROMs, homebrew, etc, which the 3 in 1 does not.  Please read the [[#Initial Setup|initial setup]] section, it will give a more in-depth explanation.&lt;br /&gt;
&lt;br /&gt;
===Whenever I load up a game, my save is gone!  What do I do?===&lt;br /&gt;
This kind of issue can only be resolved through troubleshooting. Does the GBA ROM require SRAM patching beforehand? If so, make sure you are SRAM patching your games using one of the two tools listed in the [[#Initial Setup|initial setup]] section.  If you are already doing this, make sure you are loading games in either PSRAM or NOR, not both.  From what I have seen, most loaders want you to use one or the other for it to work correctly.  Check the help files of your loader for more information (such as known bugs, proper ROM loading procedure, etc.).&lt;br /&gt;
&lt;br /&gt;
===When do I need to patch a GBA ROM in regards to the saving function?===&lt;br /&gt;
You will need to patch the ROM if your loader does not feature automatic patching. Furthermore, patching is only necessary if the ROM does not use SRAM for saving. Anything already using up to 512kbit (64KiB) SRAM to begin with shouldn&#039;t need to be patched at all. GBA games that originally used EEPROM or FLASH, and/or has over 512Kbit, will need to be patched. 1024Kbit save types have to be patched with EZ4 client since GBATA has not implemented the concept of SRAM bankswitching. GBATA, for example, will not allow the file to be patched if unnecessary.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[CycloDS Evolution]]&lt;br /&gt;
* [[EZ-Flash II]]&lt;br /&gt;
* [[EZ-Flash III]]&lt;br /&gt;
* [[EZ-Flash IV]]&lt;br /&gt;
* [[EZ-Flash V]]&lt;br /&gt;
* [[R4 DS]]&lt;br /&gt;
* [[M3 DS Simply]]&lt;br /&gt;
&lt;br /&gt;
== Useful links == &lt;br /&gt;
&lt;br /&gt;
=== Support ===&lt;br /&gt;
*[http://www.ezflash.cn Official EZ-Flash website]&lt;br /&gt;
*[http://ezflash.sosuke.com Official English speaking EZ-Flash community/resource]&lt;br /&gt;
*[http://www.monroeworld.com/myfaq/index.php?action=show&amp;amp;cat=8 Monroeworld FAQ on EZ 3-in-1]&lt;br /&gt;
&lt;br /&gt;
=== Homebrew Development (Read thoroughly) ===&lt;br /&gt;
*[http://ezflash.sosuke.com/viewtopic.php?t=4171 3 in 1 Sample Code in Action - PSRAM, NOR, Rumble]&lt;br /&gt;
*[http://ezflash.sosuke.com/viewtopic.php?f=16&amp;amp;t=11939 New Source Code Notice by EZ Team in Regards to New Chipset]&lt;br /&gt;
*[http://forum.gbadev.org/viewtopic.php?t=13023 RAM Unlocking API for Slot-2 Devices]&lt;br /&gt;
&lt;br /&gt;
[[Category:NDS Slot-2 Carts]]&lt;br /&gt;
[[Category:GBA Flash Carts]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ders alweighs a more ta do, laddy! yarrrrr --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raing3</name></author>
	</entry>
</feed>