<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.gamehacking.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rimsky82</id>
	<title>Wiki - GameHacking.org - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.gamehacking.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rimsky82"/>
	<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/Special:Contributions/Rimsky82"/>
	<updated>2026-06-04T02:50:33Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Template:Game_Genie&amp;diff=6917</id>
		<title>Template:Game Genie</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Template:Game_Genie&amp;diff=6917"/>
		<updated>2024-04-14T18:31:03Z</updated>

		<summary type="html">&lt;p&gt;Rimsky82: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|-class=&amp;quot;boxheader&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
! class=&amp;quot;bottomtemphead&amp;quot; | &#039;&#039;&#039;[[Game Genie]]&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;bottomtemphead&amp;quot; | &#039;&#039;&#039;Galoob&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|class=&amp;quot;bottomtemptext&amp;quot; align=&amp;quot;center&amp;quot; | [[Game Genie (Game Boy)|Game Boy]] - [[Game Genie (Game Gear)|Game Gear]] - [[Game Genie (NES)|NES]] - [[Game Genie (Genesis)|Genesis]] - [[Game Genie (Super Nintendo)|Super Nintendo]] - [[Game Genie (Sega CD)|Sega CD]] (Cancelled)&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;bottomtemphead&amp;quot; | &#039;&#039;&#039;Hyperkin&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|class=&amp;quot;bottomtemptext&amp;quot; align=&amp;quot;center&amp;quot; | [[Game Genie (DS/DSi/3DS)‎|DS/DSi/3DS]] - [[Game Genie (PSP)|PSP]] (Cancelled) - [[Game Genie (Wii)|Wii]] (Cancelled) - [[Game Genie:Save Editor (PlayStation 3)|PlayStation 3]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Templates]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rimsky82</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=GameShark_(Game_Boy_Advance)&amp;diff=6916</id>
		<title>GameShark (Game Boy Advance)</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=GameShark_(Game_Boy_Advance)&amp;diff=6916"/>
		<updated>2024-04-14T17:48:50Z</updated>

		<summary type="html">&lt;p&gt;Rimsky82: /* Hardware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:GameSharkFirstModel GBA cartridge.jpg|thumb|right|160px|InterAct GameShark cartridge]]&lt;br /&gt;
The &#039;&#039;&#039;GameShark&#039;&#039;&#039; is a [[Game Enhancer]] for Game Boy Advance. It allows the user to enter cheat codes and download gamesaves. It comes with software that allows for users to download new cheat codes, or enter them manually with a keyboard.&lt;br /&gt;
&lt;br /&gt;
Version 1 was actually a rebranded [[Action Replay (Game Boy Advance)|Action Replay]] until [[InterAct]] sold the GameShark brand name to [[Mad Catz]]. Mad Catz promptly released it&#039;s own GameShark as Version 2.&lt;br /&gt;
&lt;br /&gt;
==Releases==&lt;br /&gt;
For the GameBoy Advance, InterAct released a single model, while MadCatz released three models. The 1st GBA model to be released was the 2001 InterAct GameShark. After that, MadCatz released the 1st GameShark SP for GBA in 2003. This is known as the 2nd GBA model. The GameShark SP devices are known as Karabiner GameSharks. All 3 models have 12 digits of code per line instead of 8, like the 1st model. The 1st model is similar to an Action Replay. the 3rd GBA model was released in 2004 with continued prodution in 2005. This MadCatz model was a white cartridge with a looped handle. This version came with PC syncing software and a USB cable but was incompatible with the GBASP. The 4th model had a similar design, but was black instead of white, and came with no software or a cable to use on the PC. This version was released in 2006 with continued production into 2007.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;GameShark&#039;&#039;&#039; (InterAct)&lt;br /&gt;
*&#039;&#039;&#039;GameShark&#039;&#039;&#039; (Mad Catz)&lt;br /&gt;
*&#039;&#039;&#039;GameShark SP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Gsa1.png|The switch (Model 1)&lt;br /&gt;
File:GameSharkModel1 Screen02.png|Main menu (Model 1)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:GameShark GBA Packaging 2.jpg|GameShark (1st model) box - 2001&lt;br /&gt;
File:GameSharkFirstModel GBA cartridge.jpg|GameShark (1st model) cartridge - 2001&lt;br /&gt;
File:GameSharkSPFourthModel GBA box.jpg|GameShark SP box&lt;br /&gt;
File:GameShark GBA Packaging 3.jpg|GameShark SP (2nd model) packaging - 2003&lt;br /&gt;
File:GameSharkFourthModel GBA cartridge.JPG|GameShark SP (2nd model) cartridge - 2003&lt;br /&gt;
File:GameSharkSecondModel GBA box.JPG|GameShark SP (3rd model) box&lt;br /&gt;
File:GameSharkSecondModel GBA box2.JPG|GameShark SP (3rd model) (alternate box)&lt;br /&gt;
File:GameSharkSecondModel GBA cartridge.JPG|GameShark (3rd model) cartridge&lt;br /&gt;
File:GameShark GBA packaging 4.jpg|GameShark SP (3rd model) packaging&lt;br /&gt;
File:Gameshark GBA Packaging.jpg|GameShark SP (4th model) box&lt;br /&gt;
File:GameShark_SP.gif|GameShark SP (4th model) cartridge&lt;br /&gt;
File:GameShark_SP_(GBA)_-_2006_and_2007.jpg| GameShark SP 2006 and 2007&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
*[http://store.gameshark.com/ GameShark Store]&lt;br /&gt;
&lt;br /&gt;
{{GameShark}}&lt;br /&gt;
&lt;br /&gt;
[[Category:GameShark]]&lt;/div&gt;</summary>
		<author><name>Rimsky82</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Hacking_Game_Boy_Advance&amp;diff=6913</id>
		<title>Hacking Game Boy Advance</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Hacking_Game_Boy_Advance&amp;diff=6913"/>
		<updated>2024-04-14T17:09:51Z</updated>

		<summary type="html">&lt;p&gt;Rimsky82: /* Gameshark Advance Code Types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:EnHacklopedia Header}}&lt;br /&gt;
==Hacking using VBA-H==&lt;br /&gt;
&lt;br /&gt;
[[Image:vba_cheat.png|none|550px|center|VBA-H&#039;s Cheat Menu]]&lt;br /&gt;
&lt;br /&gt;
[[Tools#VisualBoyAdvance_H|VBA-H]] (Visual Boy Advance - Hacker&#039;s Edition) is a modified version of Visual Boy Advance 1.7.2 developed by kenobi and Labmaster. As it was modified from VBA 1.7.2, it has the exact same compatibility which means that although it is compatible with the vast majority of GBA games, it will not work with all of them. The most notable games that are not compatible with this version are the Classic NES Series games.&lt;br /&gt;
&lt;br /&gt;
The changes in VBA-H are all in the cheat menu. In addition to the options provided in the normal edition, VBA-SDL allows several restrictions, both by address range and difference from previous value. A flag compare option is provided as well as a way to force the displaying of results no matter how many were found.&lt;br /&gt;
&lt;br /&gt;
[[Image:vba_debug.png|none|550px|center|VBA-H&#039;s disassembler]]&lt;br /&gt;
&lt;br /&gt;
VBA-H provides the same disassembler that VBA provides. All registers are listed as well as the mode and flags. An R16 is listed; however this is simply CPSR mislabeled. A &amp;quot;Goto R15&amp;quot; option is provided which will move the disassembly to the latest instruction, and the window allows both ARM and THUMB to be viewed. This option is only a disassembler and not a debugger. For debugging, [[Tools#VBA-H_SDL|VBA-SDL-H]] must be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Button Values==&lt;br /&gt;
&lt;br /&gt;
On the GBA, the word at 0x04000130 &#039;&#039;&#039;always&#039;&#039;&#039; contains the buttons that are being pressed. The GBA stores the button values XORed with 0x3FF. The button values are as follows:&amp;lt;br /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;EnHack-code&amp;quot;&lt;br /&gt;
! class=&amp;quot;EnHack-addy&amp;quot; | Button&lt;br /&gt;
! class=&amp;quot;EnHack-comments&amp;quot; | Value&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-addy&amp;quot; | A&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-addy&amp;quot; | B&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 2&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-addy&amp;quot; | Select&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 4&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-addy&amp;quot; | Start&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 8&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-addy&amp;quot; | Right&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 0x10&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-addy&amp;quot; | Left&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 0x20&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-addy&amp;quot; | Up&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 0x40&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-addy&amp;quot; | Down&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 0x80&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-addy&amp;quot; | R&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 0x100&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-addy&amp;quot; | L&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 0x200&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Gameshark Advance and Action Replay v3==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Description - Gameshark Advance===&lt;br /&gt;
&lt;br /&gt;
[[Image:gsa1.png|center|Gameshark Advance Splash Screen]][[Image:arv1.png|center|Action Replay v1/2 Splash Screen]]&amp;lt;br /&amp;gt;[[Image:arv12.png|center|Action Replay v1/2 Main Screen]][[Image:arv13.png|center|Action Replay v1/2 Code Editing Screen]]&lt;br /&gt;
&lt;br /&gt;
The Gameshark Advance was the original cheat device for the Gameboy Advance. While more functional than the cheat devices for the Gameboy, it is still far less functional than its equivalent for the N64. The GSA&#039;s code types include 8-, 16-, and 32-bit writes, a slide code, a 16-bit If Equal To conditional, and a 16-bit ROM patch. The GSA also does not provide a code searching feature, something that had been provided in all incarnations for the Gameboy. Finally, the codes are encrypted, a first for any handheld cheat device. In Europe, the Gameshark is referred to as the Action Replay. The two products shared a name starting with revision 3, an entirely different product referred to as ARv3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Gameshark Advance Code Types===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;EnHack-codetypes&amp;quot;&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | All the following codes are in RAW form. To work, they must be encrypted.&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; | Code type&lt;br /&gt;
! class=&amp;quot;EnHack-desc&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 0aaaaaaa 000000xx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit RAM write&amp;lt;br /&amp;gt;Writes xx to 0aaaaaaa&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 1aaaaaaa 0000xxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit RAM write&amp;lt;br /&amp;gt;Writes xxxx to 0aaaaaaa&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 2aaaaaaa xxxxxxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit RAM write&amp;lt;br /&amp;gt;Writes xxxxxxxx to 0aaaaaaa&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 3000cccc xxxxxxxx&amp;lt;br /&amp;gt;aaaaaaaa aaaaaaaa&amp;lt;br /&amp;gt;aaaaaaaa ...&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit group write&amp;lt;br /&amp;gt;Writes xxxxxxxx to cccc different addresses. Due to a bug, xxxxxxxx is also written to the address xxxxxxxx. If cccc is odd, the last four bytes should be 0&#039;s.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 6aaaaaaa 0000xxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit ROM patch&amp;lt;br /&amp;gt;Intercepts reads to the address 0x08000000 + (0aaaaaaa &amp;gt;&amp;gt; 1) and returns the value xxxx when necessary. The GSA can handle a maximum of one user-defined ROM patch, and possibily zero depending on the type of master code used.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 6aaaaaaa 1000xxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit ROM patch&amp;lt;br /&amp;gt;Same as the above ROM patch except that it is enabled prior to the game booting.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 8a1aaaaa 000000xx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit GS Button RAM write&amp;lt;br /&amp;gt;Writes xx to 0a0aaaaa when the GS button is pressed.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 8a2aaaaa 0000xxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit GS Button RAM write&amp;lt;br /&amp;gt;Writes xxxx to 0a0aaaaa when the GS button is pressed.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 80F00000 0000xxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Slowdown on GS Button&amp;lt;br /&amp;gt;While the GS button is pressed, the GS will perform xxxx loops per call to the code handler, slowing down the game.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | Daaaaaaa 0000xxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If Equal To&amp;lt;br /&amp;gt;Executes the next code only if xxxx is equal to the value located at 0aaaaaaa.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | E0zzxxxx aaaaaaaa&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit Multiline If Equal To&amp;lt;br /&amp;gt;Executes the next zz codes only if xxxx is equal to the value located at 0aaaaaaa.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | Faaaaaaa 00000x0y&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Hook Routine (for Enablers)&amp;lt;br /&amp;gt;The GSA code handler hooks the routine at 0aaaaaaa. x determines whether or not the GSA must be turned off before starting the game. If it is 0, this is the case. y is the type of hook where it is one of the following:&amp;lt;br /&amp;gt;1 - Executes code handler without backing up $lr.&amp;lt;br /&amp;gt;0002 - Executes code handler and backs up $lr.&amp;lt;br /&amp;gt;3 - Replaces a 32-bit pointer used for long branches.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | xxxxxxxx 001DC0DE&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | ID Code (for Enablers)&amp;lt;br /&amp;gt;Used by GSA to autodetect games. xxxxxxxx should be the word located at 0x0800000AC.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | DEADFACE 0000xxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | DEADFACE&amp;lt;br /&amp;gt;Changes the encryption seeds.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Description - Action Replay v3===&lt;br /&gt;
&lt;br /&gt;
[[Image:arv3.png|center|Action Replay v3 Disclaimer]][[Image:arv31.png|center|Action Replay v3 main screen]]&amp;lt;br /&amp;gt;[[Image:arv32.png|center|Action Replay v3 - Add Game]][[Image:arv33.png|center|Action Replay v3 options screen]]&lt;br /&gt;
&lt;br /&gt;
After Interact went bankrupt and sold the Gameshark name rights, Datel decided to directly sell their product in North America. Because of this, the Action Replay name became used in both North America and Europe. This name synchrony began with the third revision of the AR, for the GBA. The ARv3 adds a massive number of code types, 114 in total. Additionally, the ARv3 uses a different encryption, although this has been cracked as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Action Replay Code Types===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;EnHack-codetypes&amp;quot;&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; | Type&lt;br /&gt;
! class=&amp;quot;EnHack-desc&amp;quot; | Description&lt;br /&gt;
! class=&amp;quot;EnHack-comments&amp;quot; | AR Crypt Code Type&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | Normal RAM Write Codes&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00a0aaaa xxxxxxyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit RAM Write/Fill&amp;lt;br /&amp;gt;Fills the area from 0a00aaaa to 0a00aaaa + xxxxxx with yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 00&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 02a0aaaa xxxxyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit RAM Write/Fill&amp;lt;br /&amp;gt;Fills the area from 0a00aaaa to 0a00aaaa + xxxx * 2 with yyyy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 01&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 04a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit RAM Write&amp;lt;br /&amp;gt;Writes yyyyyyyy to 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 02&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | Pointer RAM Write Codes&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 40a0aaaa xxxxxxyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit Pointer RAM Write&amp;lt;br /&amp;gt;Writes yy to the address located in 0a00aaaa + xxxxxx.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 20&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 42a0aaaa xxxxyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit Pointer RAM Write&amp;lt;br /&amp;gt;Writes yyyy to the address located in 0a00aaaa + xxxx * 2.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 21&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 44a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit Pointer RAM Write&amp;lt;br /&amp;gt;Writes yyyyyyyy to the address located in 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 22&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | Add Codes&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 80a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit Add Code&amp;lt;br /&amp;gt;Adds yy to the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 40&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 82a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit Add Code&amp;lt;br /&amp;gt;Adds yyyy to the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 41&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 84a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit Add Code&amp;lt;br /&amp;gt;Adds yyyyyyyy to the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 42&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | Write to IO Registers&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | C600aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit IO Register Write&amp;lt;br /&amp;gt;Writes yyyy to 0x0400aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 63&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | C700aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit IO Register Write&amp;lt;br /&amp;gt;Writes yyyyyyyy to 0x0400aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | E3&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | If Equal To&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 08a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If Equal To (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is equal to the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 04&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 48a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If Equal To (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is equal to the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 24&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 88a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If Equal To (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is equal to the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 44&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | C8a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If Equal To (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the byte at 0a00aaaa is not equal to yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 64&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 0Aa0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If Equal To (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is equal to the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 05&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 4Aa0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If Equal To (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is equal to the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 25&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 8Aa0aaaa 00000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If Equal To (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is equal to the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 45&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | CAa0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If Equal To (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the halfword at 0a00aaaa is not equal to yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 65&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 0Ca0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If Equal To (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is equal to the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 06&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 4Ca0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If Equal To (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is equal to the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 26&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 8Ca0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If Equal To (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is equal to the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 46&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | CCa0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If Equal To (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the word at 0a00aaaa is not equal to yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 66&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | If Not Equal To&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 10a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If not equal To (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is not equal to the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 08&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 50a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If not equal To (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is not equal to the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 28&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 90a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If not equal To (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is not equal to the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 48&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | D0a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If not equal To (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the byte at 0a00aaaa is not not equal to yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 68&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 12a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If not equal To (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is not equal to the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 09&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 52a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If not equal To (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is not equal to the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 29&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 92a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If not equal To (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is not equal to the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 49&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | D2a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If not equal To (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the halfword at 0a00aaaa is not not equal to yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 69&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 14a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If not equal To (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is not equal to the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 0A&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 54a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If not equal To (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is not equal to the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 2A&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 94a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If not equal To (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is not equal to the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 4A&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | D4a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If not equal To (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the word at 0a00aaaa is not not equal to yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 6A&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | If less than (signed)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 18a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If less than (signed) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is less than (signed) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 0C&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 58a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If less than (signed) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is less than (signed) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 2C&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 98a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If less than (signed) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is less than (signed) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 4C&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | D8a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If less than (signed) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the byte at 0a00aaaa is not less than (signed) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 6C&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 1Aa0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If less than (signed) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is less than (signed) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 0D&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 5Aa0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If less than (signed) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is less than (signed) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 2D&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 9Aa0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If less than (signed) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is less than (signed) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 4D&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | DAa0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If less than (signed) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the halfword at 0a00aaaa is not less than (signed) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 6D&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 1Ca0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If less than (signed) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is less than (signed) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 0E&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 5Ca0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If less than (signed) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is less than (signed) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 2E&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 9Ca0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If less than (signed) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is less than (signed) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 4E&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | DCa0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If less than (signed) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the word at 0a00aaaa is not less than (signed) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 6E&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | If greater than (signed)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 20a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If greater than (signed) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is greater than (signed) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 10&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 60a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If greater than (signed) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is greater than (signed) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 30&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | A0a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If greater than (signed) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is greater than (signed) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 50&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | E0a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If greater than (signed) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the byte at 0a00aaaa is not greater than (signed) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 70&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 21a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If greater than (signed) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is greater than (signed) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 11&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 61a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If greater than (signed) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is greater than (signed) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 31&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | A1a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If greater than (signed) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is greater than (signed) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 51&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | E1a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If greater than (signed) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the halfword at 0a00aaaa is not greater than (signed) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 71&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 22a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If greater than (signed) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is greater than (signed) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 12&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 62a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If greater than (signed) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is greater than (signed) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 32&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | A2a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If greater than (signed) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is greater than (signed) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 52&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | E2a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If greater than (signed) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the word at 0a00aaaa is not greater than (signed) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 72&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | If less than (unsigned)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 28a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If less than (unsigned) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is less than (unsigned) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 14&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 68a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If less than (unsigned) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is less than (unsigned) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 34&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | A8a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If less than (unsigned) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is less than (unsigned) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 54&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | E8a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If less than (unsigned) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the byte at 0a00aaaa is not less than (unsigned) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 74&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 2Aa0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If less than (unsigned) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is less than (unsigned) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 15&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 6Aa0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If less than (unsigned) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is less than (unsigned) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 35&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | AAa0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If less than (unsigned) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is less than (unsigned) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 55&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | EAa0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If less than (unsigned) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the halfword at 0a00aaaa is not less than (unsigned) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 75&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 2Ca0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If less than (unsigned) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is less than (unsigned) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 16&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 6Ca0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If less than (unsigned) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is less than (unsigned) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 36&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | ACa0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If less than (unsigned) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is less than (unsigned) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 56&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | ECa0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If less than (unsigned) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the word at 0a00aaaa is not less than (unsigned) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 76&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | If greater than (unsigned)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 30a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If greater than (unsigned) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is greater than (unsigned) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 18&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 70a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If greater than (unsigned) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is greater than (unsigned) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 38&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | B0a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If greater than (unsigned) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is greater than (unsigned) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 58&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | F0a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If greater than (unsigned) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the byte at 0a00aaaa is not greater than (unsigned) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 78&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 32a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If greater than (unsigned) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is greater than (unsigned) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 19&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 72a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If greater than (unsigned) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is greater than (unsigned) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 39&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | B2a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If greater than (unsigned) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is greater than (unsigned) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 59&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | F2a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If greater than (unsigned) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the halfword at 0a00aaaa is not greater than (unsigned) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 79&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 34a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If greater than (unsigned) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is greater than (unsigned) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 1A&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 74a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If greater than (unsigned) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is greater than (unsigned) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 3A&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | B4a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If greater than (unsigned) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is greater than (unsigned) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 5A&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | F4a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If greater than (unsigned) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the word at 0a00aaaa is not greater than (unsigned) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 7A&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | If AND&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 38a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If AND (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy AND the byte stored at 0a00aaaa is not equal to 0.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 1C&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 78a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If AND (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy AND the byte stored at 0a00aaaa is not equal to 0.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 3C&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | B8a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If AND (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy AND the byte stored at 0a00aaaa is not equal to 0.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 5C&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | F8a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If AND (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the byte at 0a00aaaa AND yy is 00.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 7C&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 39a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If AND (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy AND the halfword stored at 0a00aaaa is not equal to 0.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 1D&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 79a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If AND (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy AND the halfword stored at 0a00aaaa is not equal to 0.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 3D&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | B9a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If AND (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy AND the halfword stored at 0a00aaaa is not equal to 0.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 5D&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | F9a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If AND (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the halfword at 0a00aaaa AND yy is 00.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 7D&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 3Aa0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If AND (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy AND the word stored at 0a00aaaa is not equal to 0.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 1E&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 7Aa0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If AND (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy AND the word stored at 0a00aaaa is not equal to 0.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 3E&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | BAa0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If AND (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy AND the word stored at 0a00aaaa is not equal to 0.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 5E&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | FAa0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If AND (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the word at 0a00aaaa AND yy is 00.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 7E&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | Always... codes&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 0Ea0aaaa xxxxxxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Always skip next line&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 07&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 4Ea0aaaa xxxxxxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Always skip next two lines&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 27&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 8Ea0aaaa xxxxxxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Always skip remaining codes&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 47&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | CEa0aaaa xxxxxxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Always skip all codes&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 67&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | One line special codes&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 xxxxxxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | End of code list&amp;lt;br /&amp;gt;No codes after this point are executed.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z00&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 0800xx00&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Slowdown code&amp;lt;br /&amp;gt;The AR performs xx loops per code cycle, slowing the game down.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z04&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | Two line special codes&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 10a0aaaa&amp;lt;br /&amp;gt;000000xx 00000000&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit AR Button RAM Write&amp;lt;br /&amp;gt;Writes xx to 0a00aaaa when the AR Button is pressed.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z08&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 12a0aaaa&amp;lt;br /&amp;gt;0000xxxx 00000000&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit AR Button RAM Write&amp;lt;br /&amp;gt;Writes xxxx to 0a00aaaa when the AR Button is pressed.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z09&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 14a0aaaa&amp;lt;br /&amp;gt;xxxxxxxx 00000000&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit AR Button RAM Write&amp;lt;br /&amp;gt;Writes xxxxxxxx to 0a00aaaa when the AR Button is pressed.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z0A&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 18a0aaaa&amp;lt;br /&amp;gt;0000xxxx 00000000&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit ROM Patch&amp;lt;br /&amp;gt;Patches 0x08000000 + (0a00aaaa &amp;gt;&amp;gt; 2) with xxxx.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z0C&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 1Aa0aaaa&amp;lt;br /&amp;gt;0000xxxx 00000000&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit ROM Patch&amp;lt;br /&amp;gt;Patches 0x08000000 + (0a00aaaa &amp;gt;&amp;gt; 2) with xxxx.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z0D&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 1Ca0aaaa&amp;lt;br /&amp;gt;0000xxxx 00000000&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit ROM Patch&amp;lt;br /&amp;gt;Patches 0x08000000 + (0a00aaaa &amp;gt;&amp;gt; 2) with xxxx.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z0E&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 1Ea0aaaa&amp;lt;br /&amp;gt;0000xxxx 00000000&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit ROM Patch&amp;lt;br /&amp;gt;Patches 0x08000000 + (0a00aaaa &amp;gt;&amp;gt; 2) with xxxx.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z0F&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 40000000&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Execute codes normally&amp;lt;br /&amp;gt;All conditionals currently going on do not apply after this point.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z20&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 60000000&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Execute all following codes&amp;lt;br /&amp;gt;All following codes are executed regardless of anything else.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z30&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 80a0aaaa&amp;lt;br /&amp;gt;000000xx vvddiiii&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit slide code&amp;lt;br /&amp;gt;Writes dd bytes, starting at the address 0a00aaaa with the value xx and incrementing the address by iiii and the value by vv each iteration.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z40&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 82a0aaaa&amp;lt;br /&amp;gt;0000xxxx vvddiiii&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit slide code&amp;lt;br /&amp;gt;Writes dd halfwords, starting at the address 0a00aaaa with the value xxxx and incrementing the address by iiii * 2 and the value by vv each iteration.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z41&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 84a0aaaa&amp;lt;br /&amp;gt;xxxxxx vvddiiii&amp;lt;br /&amp;gt;80000000 00000000&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit slide code&amp;lt;br /&amp;gt;Writes dd words, starting at the address 0a00aaaa with the value xxxxxxxx and incrementing the address by iiii * 4 and the value by vv each iteration. The final line is needed to prevent a bug in the AR from occurring.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z42&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | Special Codes&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | C4aaaaaa 00000bcd&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Master Code&amp;lt;br /&amp;gt;Hooks the address 08aaaaaa for the code handler. if b is 1, the AR switch must be turned off when the game starts. Otherwise, it doesn&#039;t matter. c determines the number of codes the AR processes at a time. d is the type of hook. 0 is BL and 1 is Push LR then BL.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 62&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | xxxxxxxx 001DC0DE&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | ID Code&amp;lt;br /&amp;gt;Used by the AR to auto-detect games. xxxxxxxx should be the word at 0x080000AC.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | --&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | DEADFACE xxxxxxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | DEADFACE&amp;lt;br /&amp;gt;Changes the encryption seeds.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | --&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Encrypting/Decrypting Gameshark/Action Replay codes===&lt;br /&gt;
&lt;br /&gt;
[[Image:arcrypt.png|none|550px|center|AR Crypt]]&lt;br /&gt;
&lt;br /&gt;
Gameshark and Action Replay codes are encrypted and decrypted with [[Tools#AR_Crypt|AR Crypt]]. To encrypt codes, put the appropriate, formatted code in the left box. The choose RAW in the left radio box. On the right radio box, choose ARV1/2 for Gameshark or ARV3/4 for Action Replay. Decrypting codes works in a similar fashion. ARV1/2 or ARV3/4 on the left and RAW on the right. ARCrypt also provides an option to format codes. This only does one code at a time however. Input the address followed by the value and select the appropriate ARCrypt code type, then press the create button. Underneath the address and value, the correctly formatted code will be displayed, and will be display encrypted in the right text area. For some code types, such as slide codes, additional options will be displayed in the middle of the window. Customize these as necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Creating GS/AR master codes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Hacking Standard Master Codes====&lt;br /&gt;
&lt;br /&gt;
To create a master code for the Gameshark or Action Replay, a ROM of the game will be required, as well as [[Tools#AR_Crypt|AR Crypt]]. In AR Crypt, go to Special, then &amp;quot;Find Master Code and ID Code&amp;quot;; Load the ROM, and the master codes will be listed. Test each master code individually with a normal code. If the code works, then the master code being used is a legitimate master code. If AR Crypt does not come up with any results or non of the possible master codes works, a non-standard master code must be hacked.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Hacking Nonstandard Master Codes====&lt;br /&gt;
&lt;br /&gt;
The information in this section is based on a post originally by Parasyte.&lt;br /&gt;
&lt;br /&gt;
Both [[Tools#AR_Crypt|AR Crypt]] and [[Tools#VBA-H_SDL|VBA-SDL-H]] are required for hacking non-standard master codes, as well as a Hex Editor. Examples are provided for Baldur&#039;s Gate and Phantasy Star Collection.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Baldur&#039;s Gate=====&lt;br /&gt;
&lt;br /&gt;
Load Baldur&#039;s Gate up into VBA-SDL and enter the gameplay part of the game. Then load up a hex editor, open the ROM, and search for 0x0047C0460847C046. This is the beginning of the long branch routine. For Baldur&#039;s Gate, it&#039;s at 0x006A9888 which is GBA address 0x086A9888. It disassembles to:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;EnHack-asm&amp;quot;&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 086A9888 bx&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 086A988A mov&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r8, r8&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | &amp;lt;nowiki&amp;gt;; NOP&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 086A988C bx&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r1&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 086C988E mov&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r8, r8&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 086A9890 bx&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r2&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 086A9892 mov&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r8, r8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
etc. These bx instructions are what we want to try to hook. What we are looking for is a bx instruction which is executed many times per second. Start with the bx r0. Tell VBA-SDL to break whenever that instruction is executed (bt 086A9888) and have the game resume (c). The game doesn&#039;t break, so this isn&#039;t what we want. Go back to the debugger (F11) and move on to bx r1. Set a breakpoint on that and resume gameplay. The game breaks. This is good. Copy down the value of R1 (since we are testing bx &#039;&#039;&#039;r1&#039;&#039;&#039;) and resume gameplay. It will break again. Copy down the new value of R1. Continue this process until it appears that all the possible values r1 have been copied. For this game, the values are 0x03003ef8, 0x0869FC05, 0x0869E145, 0x02000634, 0x02000514, 0x0869E3D5, and 0x0869E0D9. Now delete the breakpoint and move to another area (say, the tavern), and repeat the process. Here, the values obtained are 0x0869E3D5, 0x0869D5A1, 0x0869D165, 0x0869C881, 0x03003EF8, 0x0869FC05, 0x0869D81D, and 0x0869CF61. Now, find the common addresses. They are 0x03003EF8, 0x0869FC05, and 0x0869E3D5. Now it&#039;s time to make the mastercode.&lt;br /&gt;
&lt;br /&gt;
One by one, search for each of the values in the ROM. Starting with 0x03003EF8, we must first rearrange this into the order it will appear in the ROM. Divide it into seperate bytes (0x03, 0x00, 0x3E, and 0xF8), then reverse the order, giving us 0xF83E0003. Search for this in the ROM. It is not present. Move to the next value, 0x0869FC05. Searching for 0x05FC6908 turns up four locations. This is not good. Any one of the four could be correct or, even worse, they could each be correct in a seperate part of the game. Go to the final value, 0x0869E3D5. Searching for 0xD5E36908 turns up only one location! Success. The location is 0x007EF48C. Turn the 00 into C4, and add 000084x1 as the value, where x is the register value used (r1 here). The final code is C47EF48C 00008411. If the code is being made for the Gameshark, the address should have the initial two zeros replaced with 48, and the value should be 000001x1, with x still being the register. For Gameshark, the final decrypted could is F87EF48C 00000111.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Phantasy Star Collection=====&lt;br /&gt;
&lt;br /&gt;
It is impossible to hack a universal master code for Phantasy Star Collection, because it contains four executables. The intro does not need a master code, but each of the other three executables (the three games) require a seperate master code. For Phantasy Star II and Phantasy Star III, creating a master code is simple enough. However, for Phantasy Star, there is a problem. The Phantasy Star exectuable is located at 0x08738000, and it is impossible to create a standard BL-type master code from any address above 0x0840001C. This is further complicated by the fact that the long branch routine does not exist in the Phantasy Star executable, so creating a master code the same way as for Baldur&#039;s Gate will not work. In this case, we shall take a different approach - find the interrupt handler. These are executed several times per second, so they are perfect.&lt;br /&gt;
&lt;br /&gt;
Load up Phantasy Star Collection in VBA-SDL-H. The GBA interrupt vector is always located at 0x03007FFC. Use the mw command to display the word there; it should be a pointer. For me, it is 0x020207d0. This is an ARM address, because it is an even number. Had it been THUMB, it would have been 0x020207d1. Disassemble the arm (da) starting at 0x020207d0. Here is what I have:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;EnHack-asm&amp;quot;&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 02020884 E59F1010 ldr&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r1, [$0202089C] (=$02000070)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 02020888 E0811002 add&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r1, r1, r2&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0202088C E5910000 ldr&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, [r1]&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 02020890 E12FFF10 bx&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This code loads pointer 0x02000070 into r1. Then, it adds r2 to it.Finally, it loads a pointer from that address into r0 and branches to that address. This is a prime example of a jump table (large amount of pointers stored in RAM). Dump the jump table from 0x02000070 with the mw command:&amp;lt;br /&amp;gt; 02000070 087384A1 0873A9FD 0873AA01 0873A9FD&amp;lt;br /&amp;gt; 02000080 0873A9FD 0873AA21 0876CA91 0873A9FD&amp;lt;br /&amp;gt; 02000090 0873A9FD 0873A9FD 0873A9FD 0873A9FD&amp;lt;br /&amp;gt; 020000A0 0873A9FD 0873A9FD 00000000 00000000&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All of these pointers are odd numbers, which means they are all pointers to THUMB instructions. There are five in total: 0x087384A1, 0x0873A9FD, 0x0873AA01, 0x0873AA21, and 0x0876CA91. Disassemble each of these addresses. Be sure to convert each address into an even number by subtracting 1. Here is what we have:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;EnHack-asm&amp;quot;&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 087384A0 B5F0 push&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | {r4-r7, lr}&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 087384A2 4A2B ldr&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r2, [$08738550] (=$020004E8)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 087384A4 482B ldr&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, [$08738554] (=$04000130)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 087384A6 8801 ldrh&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r1, [r0, #0x0]&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 087384A8 4B2B ldr&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r3, [$08738558] (=$000003FF)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 087384AA 1C18 add&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, r3, #0x0&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 087384AC 4041 eor&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r1, r0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;EnHack-asm&amp;quot;&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0873A9FC 4770 bx&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | lr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;EnHack-asm&amp;quot;&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0873AA00 4904 ldr&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r1, [$0873AA14] (=$0400000C)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0873AA02 4A05 ldr&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r2, [$0873AA18] (=$00004409)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0873AA04 1C10 add&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, r2, #0x0&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0873AA06 8008 strh&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, [r1, #0x0]&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0873AA08 3908 sub&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r1, #0x8&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0873AA0A 4A04 ldr&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r2, [$0873AA1C] (=$00007028)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0873AA0C 1C10 add&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, r2, #0x0&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0873AA0E 8008 strh&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, [r1, #0x0]&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0873AA10 4770 bx&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | lr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;EnHack-asm&amp;quot;&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0873AA20 4770 bx&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | lr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;EnHack-asm&amp;quot;&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CA90 4906 ldr&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r1, [$0876CAAC] (=$02000052)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CA92 8808 ldrh&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, [r1, #0x0]&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CA94 2800 cmp&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, #0x0&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CA96 D008 beq&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | $0876CAAA&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CA98 8808 ldrh&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, [r1, #0x0]&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CA9A 3801 sub&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, #0x1&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CA9C 8008 strh&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, [r1, #0x0]&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CA9E 0400 lsl&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, r0, #0x10&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CAA0 2800 cmp&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, #0x0&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CAA2 D102 bne&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | $0876CAAA&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CAA4 4902 ldr&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r1, [$0876CAB0] (=$02000054)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CAA6 2001 mov&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, #0x1&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CAA8 7008 strb&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, [r1, #0x0]&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CAAA 4770 bx&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | lr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The second and fourth routines simply contain bx lr, meaning they do nothing at all. There&#039;s no reason to trust either of them. The first one is the joypad routine - very promising. Take the pointer to this routine (0x087384A1), byteswap it (0xA1847308) and search the ROM for it with a hex editor. There&#039;s only one result, and it is definitely inside the Phantasy Star executable. This pointer is located at 0x007383FC. Attach the C4 codetype (F8 for Gameshark) and the 000084x3 value (000001x3 for Gameshark). Back in the ARM assembly, the first bx instruction was bx r0. So, the x is replaced with 0. The final code is C47383FC 00008403 for AR and F87383FC 00000103 for GS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Codebreaker Advance and Gameshark SP==&lt;br /&gt;
&lt;br /&gt;
[[Image:cba.png|center|Codebreaker Advance Disclaimer]][[Image:cba2.png|center|Codebreaker Advance Game List]]&amp;lt;br /&amp;gt;[[Image:cba3.png|center|Codebreaker Advance Code List]][[Image:cba4.png|center|Codebreaker Advance New Code Screen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Description - Codebreaker Advance===&lt;br /&gt;
&lt;br /&gt;
Pelican released the Codebreaker Advance shortly after the GSA came out. Like the GSA, it is a step up from its Gameboy counterpart, but lacks a trainer. Notable code types that the CBA has added include the slide code, 8- and 16-bit writes, conditionals, and a bitwise AND. However, the CBA does not implement a 32-bit RAM write or a ROM patch, both of which the GSA has. Codebreaker codes are encrypted by default, but unencrypted codes can be allowed, by not having a 9-code as the first line of a master code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Gameshark SP===&lt;br /&gt;
&lt;br /&gt;
The Gameshark name was purchased by MadCatz, who also purchased the rights to the Codebreaker Advance software. In reality, all the Gameshark SP is, is a renamed Codebreaker Advance.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Codebreaker/Gameshark SP code types===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;EnHack-codetypes&amp;quot;&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; | Code type&lt;br /&gt;
! class=&amp;quot;EnHack-desc&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 0000xxxx yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Master Code&amp;lt;br /&amp;gt;xxxx is the CRC of the game. yyyy is flags include: 0x0008 (CRC exists and is used to autodetect the game) and 0x0002 (Disable interrupts)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 1aaaaaaa xxxy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Master Code&amp;lt;br /&amp;gt;0x0aaaaaaa is the hook address for the Codebreaker. y determines the CBA Code Handler Store Address (address = (y &amp;lt;&amp;lt; 0x16) + 0x08000010) and xxx determines the hook type (0x100 is 32-bit Long Branch (THUMB), 0x200 is 32-bit Long Branch (ARM), 0x300 is 8-bit Long Branch (THUMB), and 0x400 is 8-bit Long Branch (ARM).&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 3aaaaaaa 00xx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit RAM write&amp;lt;br /&amp;gt;xx is written to 0aaaaaaa.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 4aaaaaaa yyyy&amp;lt;br /&amp;gt;zzzzxxxx iiii&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Slide code&amp;lt;br /&amp;gt;0aaaaaaa is the starting address and yyyy is the starting value. xxxx is the number of repetitions with zzzz being the value increment and iiii being the address increment.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 6aaaaaaa yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit bitwise AND&amp;lt;br /&amp;gt;ANDs the 16-bit value at the address 0aaaaaaa with yyyy and then writes it back to 0aaaaaaa.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 7aaaaaaa yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If Equal To&amp;lt;br /&amp;gt;Executes the next code only if the 16-bit value at the address 0aaaaaaa is equal to yyyy.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 8aaaaaaa yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit RAM write&amp;lt;br /&amp;gt;yyyy is written to 0aaaaaaa.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 9yyyyyyy yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Change encryption seeds.&amp;lt;br /&amp;gt;Changes encryption seeds.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | Aaaaaaaa yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If Not Equal To&amp;lt;br /&amp;gt;Executes the next code only if the 16-bit value at the address 0aaaaaaa is not equal to yyyy.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Encrypting/Decrypting Codebreaker/Gameshark SP codes===&lt;br /&gt;
&lt;br /&gt;
[[Image:cbacrypt.png|none|550px|center|CBA Crypt]]&lt;br /&gt;
&lt;br /&gt;
Codebreaker (and by extension, Gameshark SP) codes are encrypted and decrypted with [[Tools#CBAcrypt|CBA Crypt]]. To use this, first put the first line of the CB master code (the one that starts with a 9) in the left box. If the first line of the master code does not start with a 9, then encryption and decryption are not necessary. Underneath the 9 code, put the codes you want to encrypt or decrypt and press the appropriate button. On the right side, the encrypted or decrypted codes will appear. The first line will be the same on both sides. Ignore this line. The rest of the box is when you need.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Creating GSSP/CBA master codes===&lt;br /&gt;
&lt;br /&gt;
To create a master code for the Codebreaker or Gameshark SP, a ROM of the game will be required, as well as [[Tools#GBAtool|GBA Tool]]. Open GBA Tool up and click the browse button. Find the load, and load it. Then press search. A list of potential master codes will be displayed. Test each master code on the game with any code. If the code works, you have a valid master code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==ARM7 Assembly==&lt;br /&gt;
&lt;br /&gt;
The GBA uses an ARM7TMDI chip. The ARM architecture provides two modes, ARM and THUMB, and well as 31 32-bit registers. Only 16 of these registers are visible at a time, with R13, R14, and R15 being for the Stack Pointer, the Link Register, and the Program Counter respectively. The ARM instruction set uses 32-bit operations, whereas the THUMB set uses 16-bit. THUMB is designed to produce smaller code with the same speed as ARM and much of the functionability. One major limitation of THUMB is that many instructions cannot access registers above R07. In ARM, 4 bits are set aside for a conditional. The operation is executed only if the current flags meet that condition. More information on ARM and THUMB can be found in the official ARM and THUMB manuals, as well as GBATek, all provided on the [[Documents|documents page]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hacking using VBA-SDL-H==&lt;br /&gt;
&lt;br /&gt;
[[Image:vba_sdl.png|none|550px|center|VBA-SDL-H]]&lt;br /&gt;
&lt;br /&gt;
VBA-SDL-H is a modified version of VBA-SDL V1.7.2 by kenobi and Labmaster. Compatibility wise, it has the same limitations as VBA-H. VBA-SDL-H has been modified to include extra options such as Don&#039;t break on, Conditional Breaks, Break on Read, Break on Change, and Last Branch. In addition to this, it provides the same options provided by the official version of VBA-SDL.&lt;br /&gt;
&lt;br /&gt;
Inside the console window, VBA-SDL-H lists all the registers, as well as CPSR, the mode, and the status flags. Additionally, the next instruction to be executed is displayed. If the &#039;&#039;last&#039;&#039; option was enabled, the same information is also provided for when the last branch occurred. This feature has some bugs, however, and does not always work properly. &#039;&#039;h&#039;&#039; brings up a list of all available commands with a description. The &#039;&#039;c&#039;&#039; command resumes the functioning of the game. &#039;&#039;bt&#039;&#039; and &#039;&#039;ba&#039;&#039; break on the THUMB and ARM addresses provided respectively, when they are executed. &#039;&#039;bd [number]&#039;&#039; deletes the corresponding &#039;&#039;bt&#039;&#039; or &#039;&#039;ba&#039;&#039; instruction. This function has a small bug in that the last remaining breakpoint must be deleted manually. bpw [address] [bytes] breaks when [address] or any addresses up to [bytes] bytes afterwards are written to. The &#039;&#039;cow&#039;&#039; changes &#039;&#039;bpw&#039;&#039; to act as a break on change, which will not break if the value being written to the specified address is the same as the address&#039;s current value. &#039;&#039;bpr&#039;&#039; functions the same way as &#039;&#039;bpw&#039;&#039;, but it breaks when an address is read from instead of written to. The &#039;&#039;bpwc&#039;&#039; and &#039;&#039;bprc&#039;&#039; instruction delete all breaks on write and read, and the &#039;&#039;bl&#039;&#039; option lists all of these breakpoints. The &#039;&#039;db&#039;&#039; is used to disassemble the specified address from triggering a breakpoint. The instruction will still execute as normal, but VBA-SDL-H will ignore it with regard to breakpoints. &#039;&#039;cba&#039;&#039; and &#039;&#039;cbt&#039;&#039; instructions are also allowed. These instructions set conditional ARM and THUMB breakpoints.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;d&#039;&#039;, &#039;&#039;da&#039;&#039;, and &#039;&#039;dt&#039;&#039; instuctions disassemble the memory located at specified address. &#039;&#039;d&#039;&#039; disassembles in the game&#039;s current mode, while &#039;&#039;dt&#039;&#039; and &#039;&#039;da&#039;&#039; force THUMB and ARM disassembly. The next twenty operations are shown in either case. If no address is provided, disassembly begins at the current location of the game.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;mb&#039;&#039;, &#039;&#039;mh&#039;&#039;, and &#039;&#039;mw&#039;&#039; instructions show the memory at the location provided in terms of bytes, halfwords, and words. 0x100 bytes are shown in all cases and the ASCII representation of these bytes is provided on the right side. The &#039;&#039;eb&#039;&#039;, &#039;&#039;eh&#039;&#039;, and &#039;&#039;ew&#039;&#039; instructions can be used to modify these memory values; additionally, &#039;&#039;er&#039;&#039; is provided to modify the value of a register.&lt;br /&gt;
&lt;br /&gt;
Miscellaneous instructions include &#039;&#039;io&#039;&#039;, which displays the status of the I/O registers, &#039;&#039;dload&#039;&#039; and &#039;&#039;dsave&#039;&#039; which load and save raw data files, &#039;&#039;load&#039;&#039; and &#039;&#039;save&#039;&#039;, which loads or saves an Fx style save, &#039;&#039;n&#039;&#039; which executes the next instruction, and &#039;&#039;radix&#039;&#039;, which sets the print radix to the specified base. Additionally, &#039;&#039;verbose&#039;&#039; changes the verbose level, &#039;&#039;where&#039;&#039; shows the call chain, &#039;&#039;locals&#039;&#039; shows the local variables of a given address, and &#039;&#039;lf&#039;&#039; logs all output to a file. Finally, the &#039;&#039;print&#039;&#039; instruction attempts to print the value of an expression.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Converting codes==&lt;br /&gt;
&lt;br /&gt;
[http://doc.kodewerx.org/tools/gba/arcrypt.rar ARCrypt] converts codes between the three formats. Put the code to be converted in the left box, choose the appropriate devices, and hit convert. AR and GS codes must be encrypted during this process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{EnHacklopedia}}&lt;br /&gt;
&lt;br /&gt;
{{Template: EnHacklopedia_Legal}}&lt;br /&gt;
[[Category: EnHacklopedia]]&lt;/div&gt;</summary>
		<author><name>Rimsky82</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Code_Types_(Game_Boy_Advance)&amp;diff=6896</id>
		<title>Code Types (Game Boy Advance)</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Code_Types_(Game_Boy_Advance)&amp;diff=6896"/>
		<updated>2024-04-13T21:12:27Z</updated>

		<summary type="html">&lt;p&gt;Rimsky82: /* Codebreaker Advance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Codebreaker Advance===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- class=&amp;quot;codestop&amp;quot;&lt;br /&gt;
| Type &amp;amp; Format || Description || Other || Limitations&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Master Code 1 &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;0000XXXX YYYY || XXXX is the CRC value (Hash calculated using the first 64k of the rom) &amp;lt;br&amp;gt; Flags (&amp;quot;YYYY&amp;quot;): &amp;lt;br&amp;gt; 0008 - CRC Exists (CRC is used to autodetect the inserted game) &amp;lt;br&amp;gt; 0002 - Disable Interupts || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Master Code 2 &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;1XXXXXXX YYYZ || &#039;Z&#039; is the CBA Code Handler Store Address (0-7) [address = ((d &amp;lt;&amp;lt; 0x16) + 0x08000100)] &amp;lt;br&amp;gt; YYY: &amp;lt;br&amp;gt; 100 - 32-bit Long-Branch Type (Thumb) &amp;lt;br&amp;gt; 200 - 32-bit Long-Branch Type (ARM) &amp;lt;br&amp;gt; 300 - 8-bit(?) Long-Branch Type (Thumb) &amp;lt;br&amp;gt; 400 - 8-bit(?) Long-Branch Type (ARM) &amp;lt;br&amp;gt; 002 - Unknown (Odd Effect) &amp;lt;br&amp;gt; XXXXXXX = ? || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 16-bit OR &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;2XXXXXXX YYYY || OR&#039;s value at address XXXXXXX with YYYY. || Tested on VBA, not tested on hardware || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 8-bit RAM Write &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;3XXXXXXX 00YY || Writes YY to address  XXXXXXX. || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Serial Repeater &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;4ZZZZZZZ YYYY&amp;lt;br&amp;gt;AAAAXXXX VVVV || ZZZZZZZ is the address to start at and YYYY is the starting value. AAAA is the value to increment with. XXXX is the number of address iterations. And finally, VVVV is the amount added to each address iteration || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Super Code/Memwrite &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;5XXXXXXX YYYY&amp;lt;br&amp;gt;ZZZZZZZZ ZZZZ&amp;lt;br&amp;gt;........&amp;lt;br&amp;gt;ZZZZZZZZ ZZZZ || XXXXXXX is the address where the writing begins, YYYY is the number of halfwords to write and ZZZZZZZZ ZZZZ are the halfwords. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Note that halfwords are byte flipped, so the value of 1122 would become 2211. || Each address is automatically incremented by 2. (Non-changeable) || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 16-bit AND &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;6XXXXXXX YYYY || AND&#039;s value at address XXXXXXX with YYYY. || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 16-bit If Equal To &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;7XXXXXXX YYYY || Activates next code if value at address XXXXXXX is equal to YYYY. ||  -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 16-bit RAM Write &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;8XXXXXXX YYYY || Writes YYYY to address XXXXXXX. || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Change Encryption Seeds (if used as first code) &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;9YYYYYYY YYYY || Changes the encryption seeds using all 6 bytes of this code.  Each game typically has one unique seed code as the first line of the master code, but multiple can exist. || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 16-bit If Not Equal To &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;AXXXXXXX YYYY || Activates next code if value at address XXXXXXX is NOT equal to YYYY || Must be an even address. || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| If Greater Than &amp;lt;br&amp;gt;&amp;lt;br&amp;gt; BXXXXXXX YYYY || If address XXXXXXX&#039;s value is Greater Than YYYY, then activate the next code.  || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| If Lesser Than &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;CXXXXXXX YYYY || If address XXXXXXX&#039;s value is Lesser Than YYYY, then activate the next code. || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Pad Read/Button Activator &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;D00000X0 YYYY || If X is 2, Activates next code if YYYY includes the button currently being pressed.  If X is 1, then when it&#039;s not being pressed.  If X is 0, then when only the button combination is pressed and no others. || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Increment/Decrement &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;EXXXXXXX YYYY || Increase or Decrease the value of XXXXXXX by YYYY. This code type uses value ranges to determine whether to do an increment or decrement. Incremental ranges are: 0000 - 7FFF. Decremental ranges are: 8000 - FFFF. || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 16-bit If (AND) &amp;gt; 0 &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;FXXXXXXX YYYY || If the value at XXXXXXX &amp;amp; YYYY &amp;gt; 0, execute the next code. || -- || --&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Pad Values===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;padvalues&amp;quot;&amp;gt;&lt;br /&gt;
0002 - B&lt;br /&gt;
0040 - Up&lt;br /&gt;
0080 - Down&lt;br /&gt;
0020 - Left&lt;br /&gt;
0010 - Right&lt;br /&gt;
0200 - L&lt;br /&gt;
0100 - R&lt;br /&gt;
0004 - Select&lt;br /&gt;
0008 - Start &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Code Types}}&lt;br /&gt;
[[Category:Code Types]]&lt;/div&gt;</summary>
		<author><name>Rimsky82</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Code_Types_(Game_Boy_Advance)&amp;diff=6895</id>
		<title>Code Types (Game Boy Advance)</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Code_Types_(Game_Boy_Advance)&amp;diff=6895"/>
		<updated>2024-04-13T18:31:14Z</updated>

		<summary type="html">&lt;p&gt;Rimsky82: /* Codebreaker Advance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Codebreaker Advance===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- class=&amp;quot;codestop&amp;quot;&lt;br /&gt;
| Type &amp;amp; Format || Description || Other || Limitations&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Master Code 1 &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;0000XXXX YYYY || XXXX is the CRC value (Hash calculated using the first 64k of the rom) &amp;lt;br&amp;gt; Flags (&amp;quot;YYYY&amp;quot;): &amp;lt;br&amp;gt; 0008 - CRC Exists (CRC is used to autodetect the inserted game) &amp;lt;br&amp;gt; 0002 - Disable Interupts || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Master Code 2 &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;1XXXXXXX YYYZ || &#039;Z&#039; is the CBA Code Handler Store Address (0-7) [address = ((d &amp;lt;&amp;lt; 0x16) + 0x08000100)] &amp;lt;br&amp;gt; YYY: &amp;lt;br&amp;gt; 100 - 32-bit Long-Branch Type (Thumb) &amp;lt;br&amp;gt; 200 - 32-bit Long-Branch Type (ARM) &amp;lt;br&amp;gt; 300 - 8-bit(?) Long-Branch Type (Thumb) &amp;lt;br&amp;gt; 400 - 8-bit(?) Long-Branch Type (ARM) &amp;lt;br&amp;gt; 002 - Unknown (Odd Effect) &amp;lt;br&amp;gt; XXXXXXX = ? || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 16-bit OR &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;2XXXXXXX YYYY || OR&#039;s value at address XXXXXXX with YYYY. || Tested on VBA, not tested on hardware || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 8-bit RAM Write &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;3XXXXXXX 00YY || Writes YY to address  XXXXXXX. || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Serial Repeater &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;4ZZZZZZZ YYYY&amp;lt;br&amp;gt;AAAAXXXX VVVV || ZZZZZZZ is the address to start at and YYYY is the starting value. AAAA is the value to increment with. XXXX is the number of address iterations. And finally, VVVV is the amount added to each address iteration || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Super Code/Memwrite &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;5XXXXXXX YYYY&amp;lt;br&amp;gt;ZZZZZZZZ ZZZZ&amp;lt;br&amp;gt;........&amp;lt;br&amp;gt;ZZZZZZZZ ZZZZ || XXXXXXX is the address where the writing begins, YYYY is the number of halfwords to write and ZZZZZZZZ ZZZZ are the halfwords. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Note that halfwords are byte flipped, so the value of 1122 would become 2211. || Each address is automatically incremented by 2. (Non-changeable) || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 16-bit AND &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;6XXXXXXX YYYY || AND&#039;s value at address XXXXXXX with YYYY. || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 16-bit If Equal To &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;7XXXXXXX YYYY || Activates next code if value at address XXXXXXX is equal to YYYY. ||  -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 16-bit RAM Write &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;8XXXXXXX YYYY || Writes YYYY to address XXXXXXX. || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Change Encryption Seeds (if used as first code) &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;9YYYYYYY YYYY || Changes the encryption seeds using all 6 bytes of this code.  Each game typically has one unique seed code as the first line of the master code, but multiple can exist. || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 16-bit If Not Equal To &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;AXXXXXXX YYYY || Activates next code if value at address XXXXXXX is NOT equal to YYYY || Must be an even address. || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| If Greater Than &amp;lt;br&amp;gt;&amp;lt;br&amp;gt; BXXXXXXX YYYY || If address XXXXXXX&#039;s value is Greater Than YYYY, then activate the next code.  || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| If Lesser Than &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;CXXXXXXX YYYY || If address XXXXXXX&#039;s value is Lesser Than YYYY, then activate the next code. || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Pad Read/Button Activator &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;D0000020 YYYY || Activates next code if YYYY is equal to the button currently being pressed. || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Increment/Decrement &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;EXXXXXXX YYYY || Increase or Decrease the value of XXXXXXX by YYYY. This code type uses value ranges to determine whether to do an increment or decrement. Incremental ranges are: 0000 - 7FFF. Decremental ranges are: 8000 - FFFF. || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 16-bit If (AND) &amp;gt; 0 &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;FXXXXXXX YYYY || If the value at XXXXXXX &amp;amp; YYYY &amp;gt; 0, execute the next code. || -- || --&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Pad Values===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;padvalues&amp;quot;&amp;gt;&lt;br /&gt;
0002 - B&lt;br /&gt;
0040 - Up&lt;br /&gt;
0080 - Down&lt;br /&gt;
0020 - Left&lt;br /&gt;
0010 - Right&lt;br /&gt;
0200 - L&lt;br /&gt;
0100 - R&lt;br /&gt;
0004 - Select&lt;br /&gt;
0008 - Start &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Code Types}}&lt;br /&gt;
[[Category:Code Types]]&lt;/div&gt;</summary>
		<author><name>Rimsky82</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Code_Types_(Game_Boy_Advance)&amp;diff=6894</id>
		<title>Code Types (Game Boy Advance)</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Code_Types_(Game_Boy_Advance)&amp;diff=6894"/>
		<updated>2024-04-13T18:28:18Z</updated>

		<summary type="html">&lt;p&gt;Rimsky82: /* Codebreaker Advance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Codebreaker Advance===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- class=&amp;quot;codestop&amp;quot;&lt;br /&gt;
| Type &amp;amp; Format || Description || Other || Limitations&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Master Code 1 &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;0000XXXX YYYY || XXXX is the CRC value (Hash calculated using the first 64k of the rom) &amp;lt;br&amp;gt; Flags (&amp;quot;YYYY&amp;quot;): &amp;lt;br&amp;gt; 0008 - CRC Exists (CRC is used to autodetect the inserted game) &amp;lt;br&amp;gt; 0002 - Disable Interupts || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Master Code 2 &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;1XXXXXXX YYYZ || &#039;Z&#039; is the CBA Code Handler Store Address (0-7) [address = ((d &amp;lt;&amp;lt; 0x16) + 0x08000100)] &amp;lt;br&amp;gt; YYY: &amp;lt;br&amp;gt; 100 - 32-bit Long-Branch Type (Thumb) &amp;lt;br&amp;gt; 200 - 32-bit Long-Branch Type (ARM) &amp;lt;br&amp;gt; 300 - 8-bit(?) Long-Branch Type (Thumb) &amp;lt;br&amp;gt; 400 - 8-bit(?) Long-Branch Type (ARM) &amp;lt;br&amp;gt; 002 - Unknown (Odd Effect) &amp;lt;br&amp;gt; XXXXXXX = ? || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 16-bit OR &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;2XXXXXXX YYYY || OR&#039;s value at address XXXXXXX with YYYY. || Tested on VBA, not tested on hardware || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 8-bit RAM Write &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;3XXXXXXX 00YY || Writes YY to address  XXXXXXX. || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Serial Repeater &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;4ZZZZZZZ YYYY&amp;lt;br&amp;gt;AAAAXXXX VVVV || ZZZZZZZ is the address to start at and YYYY is the starting value. AAAA is the value to increment with. XXXX is the number of address iterations. And finally, VVVV is the amount added to each address iteration || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Super Code/Memwrite &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;5XXXXXXX YYYY&amp;lt;br&amp;gt;ZZZZZZZZ ZZZZ&amp;lt;br&amp;gt;........&amp;lt;br&amp;gt;ZZZZZZZZ ZZZZ || XXXXXXX is the address where the writing begins, YYYY is the number of halfwords to write and ZZZZZZZZ ZZZZ are the halfwords. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Note that halfwords are byte flipped, so the value of 1122 would become 2211. || Each address is automatically incremented by 2. (Non-changeable) || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 16-bit AND &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;6XXXXXXX YYYY || AND&#039;s value at address XXXXXXX with YYYY. || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 16-bit If Equal To &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;7XXXXXXX YYYY || Activates next code if value at address XXXXXXX is equal to YYYY. ||  -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 16-bit RAM Write &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;8XXXXXXX YYYY || Writes YYYY to address XXXXXXX. || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Change Encryption Seeds (if used as first code) &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;9YYYYYYY YYYY || Details not researched. || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 16-bit If Not Equal To &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;AXXXXXXX YYYY || Activates next code if value at address XXXXXXX is NOT equal to YYYY || Must be an even address. || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| If Greater Than &amp;lt;br&amp;gt;&amp;lt;br&amp;gt; BXXXXXXX YYYY || If address XXXXXXX&#039;s value is Greater Than YYYY, then activate the next code.  || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| If Lesser Than &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;CXXXXXXX YYYY || If address XXXXXXX&#039;s value is Lesser Than YYYY, then activate the next code. || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Pad Read/Button Activator &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;D0000020 YYYY || Activates next code if YYYY is equal to the button currently being pressed. || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Increment/Decrement &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;EXXXXXXX YYYY || Increase or Decrease the value of XXXXXXX by YYYY. This code type uses value ranges to determine whether to do an increment or decrement. Incremental ranges are: 0000 - 7FFF. Decremental ranges are: 8000 - FFFF. || -- || --&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 16-bit If (AND) &amp;gt; 0 &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;FXXXXXXX YYYY || If the value at XXXXXXX &amp;amp; YYYY &amp;gt; 0, execute the next code. || -- || --&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Pad Values===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&amp;quot;padvalues&amp;quot;&amp;gt;&lt;br /&gt;
0002 - B&lt;br /&gt;
0040 - Up&lt;br /&gt;
0080 - Down&lt;br /&gt;
0020 - Left&lt;br /&gt;
0010 - Right&lt;br /&gt;
0200 - L&lt;br /&gt;
0100 - R&lt;br /&gt;
0004 - Select&lt;br /&gt;
0008 - Start &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Code Types}}&lt;br /&gt;
[[Category:Code Types]]&lt;/div&gt;</summary>
		<author><name>Rimsky82</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Hacking_Game_Boy_Advance&amp;diff=6893</id>
		<title>Hacking Game Boy Advance</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Hacking_Game_Boy_Advance&amp;diff=6893"/>
		<updated>2024-04-12T03:02:42Z</updated>

		<summary type="html">&lt;p&gt;Rimsky82: /* Action Replay Code Types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:EnHacklopedia Header}}&lt;br /&gt;
==Hacking using VBA-H==&lt;br /&gt;
&lt;br /&gt;
[[Image:vba_cheat.png|none|550px|center|VBA-H&#039;s Cheat Menu]]&lt;br /&gt;
&lt;br /&gt;
[[Tools#VisualBoyAdvance_H|VBA-H]] (Visual Boy Advance - Hacker&#039;s Edition) is a modified version of Visual Boy Advance 1.7.2 developed by kenobi and Labmaster. As it was modified from VBA 1.7.2, it has the exact same compatibility which means that although it is compatible with the vast majority of GBA games, it will not work with all of them. The most notable games that are not compatible with this version are the Classic NES Series games.&lt;br /&gt;
&lt;br /&gt;
The changes in VBA-H are all in the cheat menu. In addition to the options provided in the normal edition, VBA-SDL allows several restrictions, both by address range and difference from previous value. A flag compare option is provided as well as a way to force the displaying of results no matter how many were found.&lt;br /&gt;
&lt;br /&gt;
[[Image:vba_debug.png|none|550px|center|VBA-H&#039;s disassembler]]&lt;br /&gt;
&lt;br /&gt;
VBA-H provides the same disassembler that VBA provides. All registers are listed as well as the mode and flags. An R16 is listed; however this is simply CPSR mislabeled. A &amp;quot;Goto R15&amp;quot; option is provided which will move the disassembly to the latest instruction, and the window allows both ARM and THUMB to be viewed. This option is only a disassembler and not a debugger. For debugging, [[Tools#VBA-H_SDL|VBA-SDL-H]] must be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Button Values==&lt;br /&gt;
&lt;br /&gt;
On the GBA, the word at 0x04000130 &#039;&#039;&#039;always&#039;&#039;&#039; contains the buttons that are being pressed. The GBA stores the button values XORed with 0x3FF. The button values are as follows:&amp;lt;br /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;EnHack-code&amp;quot;&lt;br /&gt;
! class=&amp;quot;EnHack-addy&amp;quot; | Button&lt;br /&gt;
! class=&amp;quot;EnHack-comments&amp;quot; | Value&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-addy&amp;quot; | A&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 1&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-addy&amp;quot; | B&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 2&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-addy&amp;quot; | Select&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 4&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-addy&amp;quot; | Start&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 8&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-addy&amp;quot; | Right&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 0x10&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-addy&amp;quot; | Left&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 0x20&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-addy&amp;quot; | Up&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 0x40&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-addy&amp;quot; | Down&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 0x80&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-addy&amp;quot; | R&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 0x100&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-addy&amp;quot; | L&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 0x200&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Gameshark Advance and Action Replay v3==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Description - Gameshark Advance===&lt;br /&gt;
&lt;br /&gt;
[[Image:gsa1.png|center|Gameshark Advance Splash Screen]][[Image:arv1.png|center|Action Replay v1/2 Splash Screen]]&amp;lt;br /&amp;gt;[[Image:arv12.png|center|Action Replay v1/2 Main Screen]][[Image:arv13.png|center|Action Replay v1/2 Code Editing Screen]]&lt;br /&gt;
&lt;br /&gt;
The Gameshark Advance was the original cheat device for the Gameboy Advance. While more functional than the cheat devices for the Gameboy, it is still far less functional than its equivalent for the N64. The GSA&#039;s code types include 8-, 16-, and 32-bit writes, a slide code, a 16-bit If Equal To conditional, and a 16-bit ROM patch. The GSA also does not provide a code searching feature, something that had been provided in all incarnations for the Gameboy. Finally, the codes are encrypted, a first for any handheld cheat device. In Europe, the Gameshark is referred to as the Action Replay. The two products shared a name starting with revision 3, an entirely different product referred to as ARv3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Gameshark Advance Code Types===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;EnHack-codetypes&amp;quot;&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | All the following codes are in RAW form. To work, they must be encrypted.&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; | Code type&lt;br /&gt;
! class=&amp;quot;EnHack-desc&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 0aaaaaaa 000000xx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit RAM write&amp;lt;br /&amp;gt;Writes xx to 0aaaaaaa&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 1aaaaaaa 0000xxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit RAM write&amp;lt;br /&amp;gt;Writes xxxx to 0aaaaaaa&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 2aaaaaaa xxxxxxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit RAM write&amp;lt;br /&amp;gt;Writes xxxxxxxx to 0aaaaaaa&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 3000cccc xxxxxxxx&amp;lt;br /&amp;gt;aaaaaaaa aaaaaaaa&amp;lt;br /&amp;gt;aaaaaaaa ...&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit group write&amp;lt;br /&amp;gt;Writes xxxxxxxx to cccc different addresses. Due to a bug, xxxxxxxx is also written to the address xxxxxxxx. If cccc is odd, the last four bytes should be 0&#039;s.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 6aaaaaaa 0000xxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit ROM patch&amp;lt;br /&amp;gt;Intercepts reads to the address 0x08000000 + (0aaaaaaa &amp;gt;&amp;gt; 1) and returns the value xxxx when necessary. The GSA can handle a maximum of one user-defined ROM patch, and possibily zero depending on the type of master code used.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 6aaaaaaa 1000xxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit ROM patch&amp;lt;br /&amp;gt;Same as the above ROM patch except that it is enabled prior to the game booting.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 8a1aaaaa 000000xx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit GS Button RAM write&amp;lt;br /&amp;gt;Writes xx to 0a0aaaaa when the GS button is pressed.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 8a2aaaaa 0000xxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit GS Button RAM write&amp;lt;br /&amp;gt;Writes xxxx to 0a0aaaaa when the GS button is pressed.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 80F00000 0000xxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Slowdown on GS Button&amp;lt;br /&amp;gt;While the GS button is pressed, the GS will perform xxxx loops per call to the code handler, slowing down the game.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | Daaaaaaa 0000xxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If Equal To&amp;lt;br /&amp;gt;Executes the next code only if xxxx is equal to the value located at 0aaaaaaa.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | E0zzxxxx aaaaaaaa&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit Multiline If Equal To&amp;lt;br /&amp;gt;Executes the next zz codes only if xxxx is equal to the value located at 0aaaaaaa.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | Faaaaaaa 00000x0y&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Hook Routine (for Enablers)&amp;lt;br /&amp;gt;The GSA code handler hooks the routine at 0aaaaaaa. x determines whether or not the GSA must be turned off before starting the game. If it is 0, this is the case. y is the type of hook where it is one of the following:&amp;lt;br /&amp;gt;1 - Executes code handler without backing up $lr.&amp;lt;br /&amp;gt;0002 - Executes code handler and backs up $lr.&amp;lt;br /&amp;gt;3 - Replaces a 32-bit pointer used for long branches.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | xxxxxxxx 001DC0DE&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | ID Code (for Enablers)&amp;lt;br /&amp;gt;Used by GSA to autodetect games. xxxxxxxx should be the word located at 0x0800000AC.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | DEADFACE 0000xxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | DEADFACE&amp;lt;br /&amp;gt;Changes the encryption seeds.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Description - Action Replay v3===&lt;br /&gt;
&lt;br /&gt;
[[Image:arv3.png|center|Action Replay v3 Disclaimer]][[Image:arv31.png|center|Action Replay v3 main screen]]&amp;lt;br /&amp;gt;[[Image:arv32.png|center|Action Replay v3 - Add Game]][[Image:arv33.png|center|Action Replay v3 options screen]]&lt;br /&gt;
&lt;br /&gt;
After Interact went bankrupt and sold the Gameshark name rights, Datel decided to directly sell their product in North America. Because of this, the Action Replay name became used in both North America and Europe. This name synchrony began with the third revision of the AR, for the GBA. The ARv3 adds a massive number of code types, 114 in total. Additionally, the ARv3 uses a different encryption, although this has been cracked as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Action Replay Code Types===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;EnHack-codetypes&amp;quot;&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; | Type&lt;br /&gt;
! class=&amp;quot;EnHack-desc&amp;quot; | Description&lt;br /&gt;
! class=&amp;quot;EnHack-comments&amp;quot; | AR Crypt Code Type&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | Normal RAM Write Codes&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00a0aaaa xxxxxxyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit RAM Write/Fill&amp;lt;br /&amp;gt;Fills the area from 0a00aaaa to 0a00aaaa + xxxxxx with yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 00&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 02a0aaaa xxxxyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit RAM Write/Fill&amp;lt;br /&amp;gt;Fills the area from 0a00aaaa to 0a00aaaa + xxxx * 2 with yyyy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 01&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 04a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit RAM Write&amp;lt;br /&amp;gt;Writes yyyyyyyy to 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 02&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | Pointer RAM Write Codes&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 40a0aaaa xxxxxxyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit Pointer RAM Write&amp;lt;br /&amp;gt;Writes yy to the address located in 0a00aaaa + xxxxxx.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 20&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 42a0aaaa xxxxyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit Pointer RAM Write&amp;lt;br /&amp;gt;Writes yyyy to the address located in 0a00aaaa + xxxx * 2.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 21&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 44a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit Pointer RAM Write&amp;lt;br /&amp;gt;Writes yyyyyyyy to the address located in 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 22&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | Add Codes&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 80a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit Add Code&amp;lt;br /&amp;gt;Adds yy to the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 40&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 82a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit Add Code&amp;lt;br /&amp;gt;Adds yyyy to the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 41&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 84a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit Add Code&amp;lt;br /&amp;gt;Adds yyyyyyyy to the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 42&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | Write to IO Registers&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | C600aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit IO Register Write&amp;lt;br /&amp;gt;Writes yyyy to 0x0400aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 63&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | C700aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit IO Register Write&amp;lt;br /&amp;gt;Writes yyyyyyyy to 0x0400aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | E3&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | If Equal To&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 08a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If Equal To (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is equal to the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 04&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 48a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If Equal To (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is equal to the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 24&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 88a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If Equal To (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is equal to the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 44&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | C8a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If Equal To (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the byte at 0a00aaaa is not equal to yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 64&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 0Aa0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If Equal To (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is equal to the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 05&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 4Aa0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If Equal To (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is equal to the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 25&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 8Aa0aaaa 00000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If Equal To (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is equal to the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 45&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | CAa0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If Equal To (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the halfword at 0a00aaaa is not equal to yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 65&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 0Ca0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If Equal To (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is equal to the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 06&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 4Ca0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If Equal To (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is equal to the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 26&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 8Ca0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If Equal To (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is equal to the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 46&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | CCa0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If Equal To (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the word at 0a00aaaa is not equal to yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 66&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | If Not Equal To&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 10a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If not equal To (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is not equal to the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 08&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 50a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If not equal To (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is not equal to the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 28&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 90a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If not equal To (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is not equal to the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 48&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | D0a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If not equal To (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the byte at 0a00aaaa is not not equal to yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 68&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 12a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If not equal To (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is not equal to the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 09&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 52a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If not equal To (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is not equal to the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 29&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 92a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If not equal To (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is not equal to the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 49&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | D2a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If not equal To (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the halfword at 0a00aaaa is not not equal to yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 69&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 14a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If not equal To (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is not equal to the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 0A&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 54a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If not equal To (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is not equal to the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 2A&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 94a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If not equal To (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is not equal to the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 4A&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | D4a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If not equal To (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the word at 0a00aaaa is not not equal to yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 6A&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | If less than (signed)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 18a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If less than (signed) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is less than (signed) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 0C&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 58a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If less than (signed) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is less than (signed) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 2C&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 98a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If less than (signed) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is less than (signed) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 4C&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | D8a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If less than (signed) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the byte at 0a00aaaa is not less than (signed) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 6C&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 1Aa0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If less than (signed) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is less than (signed) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 0D&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 5Aa0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If less than (signed) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is less than (signed) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 2D&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 9Aa0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If less than (signed) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is less than (signed) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 4D&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | DAa0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If less than (signed) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the halfword at 0a00aaaa is not less than (signed) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 6D&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 1Ca0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If less than (signed) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is less than (signed) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 0E&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 5Ca0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If less than (signed) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is less than (signed) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 2E&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 9Ca0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If less than (signed) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is less than (signed) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 4E&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | DCa0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If less than (signed) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the word at 0a00aaaa is not less than (signed) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 6E&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | If greater than (signed)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 20a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If greater than (signed) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is greater than (signed) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 10&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 60a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If greater than (signed) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is greater than (signed) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 30&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | A0a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If greater than (signed) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is greater than (signed) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 50&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | E0a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If greater than (signed) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the byte at 0a00aaaa is not greater than (signed) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 70&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 21a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If greater than (signed) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is greater than (signed) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 11&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 61a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If greater than (signed) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is greater than (signed) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 31&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | A1a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If greater than (signed) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is greater than (signed) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 51&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | E1a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If greater than (signed) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the halfword at 0a00aaaa is not greater than (signed) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 71&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 22a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If greater than (signed) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is greater than (signed) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 12&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 62a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If greater than (signed) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is greater than (signed) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 32&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | A2a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If greater than (signed) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is greater than (signed) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 52&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | E2a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If greater than (signed) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the word at 0a00aaaa is not greater than (signed) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 72&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | If less than (unsigned)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 28a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If less than (unsigned) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is less than (unsigned) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 14&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 68a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If less than (unsigned) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is less than (unsigned) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 34&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | A8a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If less than (unsigned) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is less than (unsigned) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 54&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | E8a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If less than (unsigned) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the byte at 0a00aaaa is not less than (unsigned) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 74&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 2Aa0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If less than (unsigned) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is less than (unsigned) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 15&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 6Aa0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If less than (unsigned) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is less than (unsigned) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 35&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | AAa0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If less than (unsigned) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is less than (unsigned) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 55&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | EAa0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If less than (unsigned) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the halfword at 0a00aaaa is not less than (unsigned) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 75&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 2Ca0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If less than (unsigned) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is less than (unsigned) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 16&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 6Ca0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If less than (unsigned) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is less than (unsigned) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 36&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | ACa0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If less than (unsigned) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is less than (unsigned) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 56&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | ECa0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If less than (unsigned) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the word at 0a00aaaa is not less than (unsigned) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 76&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | If greater than (unsigned)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 30a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If greater than (unsigned) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is greater than (unsigned) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 18&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 70a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If greater than (unsigned) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is greater than (unsigned) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 38&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | B0a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If greater than (unsigned) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is greater than (unsigned) the byte stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 58&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | F0a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If greater than (unsigned) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the byte at 0a00aaaa is not greater than (unsigned) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 78&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 32a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If greater than (unsigned) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is greater than (unsigned) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 19&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 72a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If greater than (unsigned) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is greater than (unsigned) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 39&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | B2a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If greater than (unsigned) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is greater than (unsigned) the halfword stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 59&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | F2a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If greater than (unsigned) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the halfword at 0a00aaaa is not greater than (unsigned) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 79&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 34a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If greater than (unsigned) (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy is greater than (unsigned) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 1A&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 74a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If greater than (unsigned) (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy is greater than (unsigned) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 3A&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | B4a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If greater than (unsigned) (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy is greater than (unsigned) the word stored at 0a00aaaa.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 5A&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | F4a0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If greater than (unsigned) (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the word at 0a00aaaa is not greater than (unsigned) yy.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 7A&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | If AND&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 38a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If AND (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy AND the byte stored at 0a00aaaa is not equal to 0.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 1C&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 78a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If AND (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy AND the byte stored at 0a00aaaa is not equal to 0.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 3C&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | B8a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If AND (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy AND the byte stored at 0a00aaaa is not equal to 0.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 5C&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | F8a0aaaa 000000yy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit If AND (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the byte at 0a00aaaa AND yy is 00.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 7C&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 39a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If AND (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy AND the halfword stored at 0a00aaaa is not equal to 0.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 1D&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 79a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If AND (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy AND the halfword stored at 0a00aaaa is not equal to 0.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 3D&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | B9a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If AND (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy AND the halfword stored at 0a00aaaa is not equal to 0.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 5D&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | F9a0aaaa 0000yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If AND (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the halfword at 0a00aaaa AND yy is 00.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 7D&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 3Aa0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If AND (1 line)&amp;lt;br /&amp;gt;Executes next code only if yy AND the word stored at 0a00aaaa is not equal to 0.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 1E&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 7Aa0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If AND (2 lines)&amp;lt;br /&amp;gt;Executes next two codes only if yy AND the word stored at 0a00aaaa is not equal to 0.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 3E&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | BAa0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If AND (Multi-line)&amp;lt;br /&amp;gt;All subsequent codes until the z20 code type or end of code list are executed only if yy AND the word stored at 0a00aaaa is not equal to 0.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 5E&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | FAa0aaaa yyyyyyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit If AND (Disable Codes)&amp;lt;br /&amp;gt;All codes are disabled when the word at 0a00aaaa AND yy is 00.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 7E&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | Always... codes&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 0Ea0aaaa xxxxxxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Always skip next line&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 07&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 4Ea0aaaa xxxxxxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Always skip next two lines&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 27&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 8Ea0aaaa xxxxxxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Always skip remaining codes&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 47&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | CEa0aaaa xxxxxxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Always skip all codes&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 67&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | One line special codes&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 xxxxxxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | End of code list&amp;lt;br /&amp;gt;No codes after this point are executed.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z00&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 0800xx00&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Slowdown code&amp;lt;br /&amp;gt;The AR performs xx loops per code cycle, slowing the game down.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z04&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | Two line special codes&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 10a0aaaa&amp;lt;br /&amp;gt;000000xx 00000000&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit AR Button RAM Write&amp;lt;br /&amp;gt;Writes xx to 0a00aaaa when the AR Button is pressed.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z08&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 12a0aaaa&amp;lt;br /&amp;gt;0000xxxx 00000000&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit AR Button RAM Write&amp;lt;br /&amp;gt;Writes xxxx to 0a00aaaa when the AR Button is pressed.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z09&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 14a0aaaa&amp;lt;br /&amp;gt;xxxxxxxx 00000000&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit AR Button RAM Write&amp;lt;br /&amp;gt;Writes xxxxxxxx to 0a00aaaa when the AR Button is pressed.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z0A&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 18a0aaaa&amp;lt;br /&amp;gt;0000xxxx 00000000&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit ROM Patch&amp;lt;br /&amp;gt;Patches 0x08000000 + (0a00aaaa &amp;gt;&amp;gt; 2) with xxxx.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z0C&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 1Aa0aaaa&amp;lt;br /&amp;gt;0000xxxx 00000000&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit ROM Patch&amp;lt;br /&amp;gt;Patches 0x08000000 + (0a00aaaa &amp;gt;&amp;gt; 2) with xxxx.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z0D&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 1Ca0aaaa&amp;lt;br /&amp;gt;0000xxxx 00000000&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit ROM Patch&amp;lt;br /&amp;gt;Patches 0x08000000 + (0a00aaaa &amp;gt;&amp;gt; 2) with xxxx.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z0E&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 1Ea0aaaa&amp;lt;br /&amp;gt;0000xxxx 00000000&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit ROM Patch&amp;lt;br /&amp;gt;Patches 0x08000000 + (0a00aaaa &amp;gt;&amp;gt; 2) with xxxx.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z0F&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 40000000&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Execute codes normally&amp;lt;br /&amp;gt;All conditionals currently going on do not apply after this point.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z20&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 60000000&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Execute all following codes&amp;lt;br /&amp;gt;All following codes are executed regardless of anything else.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z30&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 80a0aaaa&amp;lt;br /&amp;gt;000000xx vvddiiii&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit slide code&amp;lt;br /&amp;gt;Writes dd bytes, starting at the address 0a00aaaa with the value xx and incrementing the address by iiii and the value by vv each iteration.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z40&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 82a0aaaa&amp;lt;br /&amp;gt;0000xxxx vvddiiii&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit slide code&amp;lt;br /&amp;gt;Writes dd halfwords, starting at the address 0a00aaaa with the value xxxx and incrementing the address by iiii * 2 and the value by vv each iteration.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z41&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 00000000 84a0aaaa&amp;lt;br /&amp;gt;xxxxxx vvddiiii&amp;lt;br /&amp;gt;80000000 00000000&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 32-bit slide code&amp;lt;br /&amp;gt;Writes dd words, starting at the address 0a00aaaa with the value xxxxxxxx and incrementing the address by iiii * 4 and the value by vv each iteration. The final line is needed to prevent a bug in the AR from occurring.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | z42&lt;br /&gt;
|-&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; colspan=&amp;quot;3&amp;quot; | Special Codes&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | C4aaaaaa 00000bcd&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Master Code&amp;lt;br /&amp;gt;Hooks the address 08aaaaaa for the code handler. if b is 1, the AR switch must be turned off when the game starts. Otherwise, it doesn&#039;t matter. c determines the number of codes the AR processes at a time. d is the type of hook. 0 is BL and 1 is Push LR then BL.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | 62&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | xxxxxxxx 001DC0DE&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | ID Code&amp;lt;br /&amp;gt;Used by the AR to auto-detect games. xxxxxxxx should be the word at 0x080000AC.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | --&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | DEADFACE xxxxxxxx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | DEADFACE&amp;lt;br /&amp;gt;Changes the encryption seeds.&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | --&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Encrypting/Decrypting Gameshark/Action Replay codes===&lt;br /&gt;
&lt;br /&gt;
[[Image:arcrypt.png|none|550px|center|AR Crypt]]&lt;br /&gt;
&lt;br /&gt;
Gameshark and Action Replay codes are encrypted and decrypted with [[Tools#AR_Crypt|AR Crypt]]. To encrypt codes, put the appropriate, formatted code in the left box. The choose RAW in the left radio box. On the right radio box, choose ARV1/2 for Gameshark or ARV3/4 for Action Replay. Decrypting codes works in a similar fashion. ARV1/2 or ARV3/4 on the left and RAW on the right. ARCrypt also provides an option to format codes. This only does one code at a time however. Input the address followed by the value and select the appropriate ARCrypt code type, then press the create button. Underneath the address and value, the correctly formatted code will be displayed, and will be display encrypted in the right text area. For some code types, such as slide codes, additional options will be displayed in the middle of the window. Customize these as necessary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Creating GS/AR master codes===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Hacking Standard Master Codes====&lt;br /&gt;
&lt;br /&gt;
To create a master code for the Gameshark or Action Replay, a ROM of the game will be required, as well as [[Tools#AR_Crypt|AR Crypt]]. In AR Crypt, go to Special, then &amp;quot;Find Master Code and ID Code&amp;quot;; Load the ROM, and the master codes will be listed. Test each master code individually with a normal code. If the code works, then the master code being used is a legitimate master code. If AR Crypt does not come up with any results or non of the possible master codes works, a non-standard master code must be hacked.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Hacking Nonstandard Master Codes====&lt;br /&gt;
&lt;br /&gt;
The information in this section is based on a post originally by Parasyte.&lt;br /&gt;
&lt;br /&gt;
Both [[Tools#AR_Crypt|AR Crypt]] and [[Tools#VBA-H_SDL|VBA-SDL-H]] are required for hacking non-standard master codes, as well as a Hex Editor. Examples are provided for Baldur&#039;s Gate and Phantasy Star Collection.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Baldur&#039;s Gate=====&lt;br /&gt;
&lt;br /&gt;
Load Baldur&#039;s Gate up into VBA-SDL and enter the gameplay part of the game. Then load up a hex editor, open the ROM, and search for 0x0047C0460847C046. This is the beginning of the long branch routine. For Baldur&#039;s Gate, it&#039;s at 0x006A9888 which is GBA address 0x086A9888. It disassembles to:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;EnHack-asm&amp;quot;&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 086A9888 bx&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 086A988A mov&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r8, r8&lt;br /&gt;
| class=&amp;quot;EnHack-comments&amp;quot; | &amp;lt;nowiki&amp;gt;; NOP&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 086A988C bx&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r1&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 086C988E mov&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r8, r8&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 086A9890 bx&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r2&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 086A9892 mov&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r8, r8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
etc. These bx instructions are what we want to try to hook. What we are looking for is a bx instruction which is executed many times per second. Start with the bx r0. Tell VBA-SDL to break whenever that instruction is executed (bt 086A9888) and have the game resume (c). The game doesn&#039;t break, so this isn&#039;t what we want. Go back to the debugger (F11) and move on to bx r1. Set a breakpoint on that and resume gameplay. The game breaks. This is good. Copy down the value of R1 (since we are testing bx &#039;&#039;&#039;r1&#039;&#039;&#039;) and resume gameplay. It will break again. Copy down the new value of R1. Continue this process until it appears that all the possible values r1 have been copied. For this game, the values are 0x03003ef8, 0x0869FC05, 0x0869E145, 0x02000634, 0x02000514, 0x0869E3D5, and 0x0869E0D9. Now delete the breakpoint and move to another area (say, the tavern), and repeat the process. Here, the values obtained are 0x0869E3D5, 0x0869D5A1, 0x0869D165, 0x0869C881, 0x03003EF8, 0x0869FC05, 0x0869D81D, and 0x0869CF61. Now, find the common addresses. They are 0x03003EF8, 0x0869FC05, and 0x0869E3D5. Now it&#039;s time to make the mastercode.&lt;br /&gt;
&lt;br /&gt;
One by one, search for each of the values in the ROM. Starting with 0x03003EF8, we must first rearrange this into the order it will appear in the ROM. Divide it into seperate bytes (0x03, 0x00, 0x3E, and 0xF8), then reverse the order, giving us 0xF83E0003. Search for this in the ROM. It is not present. Move to the next value, 0x0869FC05. Searching for 0x05FC6908 turns up four locations. This is not good. Any one of the four could be correct or, even worse, they could each be correct in a seperate part of the game. Go to the final value, 0x0869E3D5. Searching for 0xD5E36908 turns up only one location! Success. The location is 0x007EF48C. Turn the 00 into C4, and add 000084x1 as the value, where x is the register value used (r1 here). The final code is C47EF48C 00008411. If the code is being made for the Gameshark, the address should have the initial two zeros replaced with 48, and the value should be 000001x1, with x still being the register. For Gameshark, the final decrypted could is F87EF48C 00000111.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Phantasy Star Collection=====&lt;br /&gt;
&lt;br /&gt;
It is impossible to hack a universal master code for Phantasy Star Collection, because it contains four executables. The intro does not need a master code, but each of the other three executables (the three games) require a seperate master code. For Phantasy Star II and Phantasy Star III, creating a master code is simple enough. However, for Phantasy Star, there is a problem. The Phantasy Star exectuable is located at 0x08738000, and it is impossible to create a standard BL-type master code from any address above 0x0840001C. This is further complicated by the fact that the long branch routine does not exist in the Phantasy Star executable, so creating a master code the same way as for Baldur&#039;s Gate will not work. In this case, we shall take a different approach - find the interrupt handler. These are executed several times per second, so they are perfect.&lt;br /&gt;
&lt;br /&gt;
Load up Phantasy Star Collection in VBA-SDL-H. The GBA interrupt vector is always located at 0x03007FFC. Use the mw command to display the word there; it should be a pointer. For me, it is 0x020207d0. This is an ARM address, because it is an even number. Had it been THUMB, it would have been 0x020207d1. Disassemble the arm (da) starting at 0x020207d0. Here is what I have:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;EnHack-asm&amp;quot;&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 02020884 E59F1010 ldr&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r1, [$0202089C] (=$02000070)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 02020888 E0811002 add&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r1, r1, r2&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0202088C E5910000 ldr&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, [r1]&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 02020890 E12FFF10 bx&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This code loads pointer 0x02000070 into r1. Then, it adds r2 to it.Finally, it loads a pointer from that address into r0 and branches to that address. This is a prime example of a jump table (large amount of pointers stored in RAM). Dump the jump table from 0x02000070 with the mw command:&amp;lt;br /&amp;gt; 02000070 087384A1 0873A9FD 0873AA01 0873A9FD&amp;lt;br /&amp;gt; 02000080 0873A9FD 0873AA21 0876CA91 0873A9FD&amp;lt;br /&amp;gt; 02000090 0873A9FD 0873A9FD 0873A9FD 0873A9FD&amp;lt;br /&amp;gt; 020000A0 0873A9FD 0873A9FD 00000000 00000000&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All of these pointers are odd numbers, which means they are all pointers to THUMB instructions. There are five in total: 0x087384A1, 0x0873A9FD, 0x0873AA01, 0x0873AA21, and 0x0876CA91. Disassemble each of these addresses. Be sure to convert each address into an even number by subtracting 1. Here is what we have:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;EnHack-asm&amp;quot;&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 087384A0 B5F0 push&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | {r4-r7, lr}&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 087384A2 4A2B ldr&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r2, [$08738550] (=$020004E8)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 087384A4 482B ldr&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, [$08738554] (=$04000130)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 087384A6 8801 ldrh&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r1, [r0, #0x0]&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 087384A8 4B2B ldr&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r3, [$08738558] (=$000003FF)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 087384AA 1C18 add&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, r3, #0x0&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 087384AC 4041 eor&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r1, r0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;EnHack-asm&amp;quot;&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0873A9FC 4770 bx&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | lr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;EnHack-asm&amp;quot;&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0873AA00 4904 ldr&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r1, [$0873AA14] (=$0400000C)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0873AA02 4A05 ldr&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r2, [$0873AA18] (=$00004409)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0873AA04 1C10 add&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, r2, #0x0&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0873AA06 8008 strh&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, [r1, #0x0]&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0873AA08 3908 sub&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r1, #0x8&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0873AA0A 4A04 ldr&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r2, [$0873AA1C] (=$00007028)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0873AA0C 1C10 add&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, r2, #0x0&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0873AA0E 8008 strh&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, [r1, #0x0]&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0873AA10 4770 bx&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | lr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;EnHack-asm&amp;quot;&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0873AA20 4770 bx&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | lr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;EnHack-asm&amp;quot;&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CA90 4906 ldr&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r1, [$0876CAAC] (=$02000052)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CA92 8808 ldrh&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, [r1, #0x0]&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CA94 2800 cmp&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, #0x0&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CA96 D008 beq&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | $0876CAAA&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CA98 8808 ldrh&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, [r1, #0x0]&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CA9A 3801 sub&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, #0x1&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CA9C 8008 strh&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, [r1, #0x0]&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CA9E 0400 lsl&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, r0, #0x10&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CAA0 2800 cmp&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, #0x0&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CAA2 D102 bne&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | $0876CAAA&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CAA4 4902 ldr&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r1, [$0876CAB0] (=$02000054)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CAA6 2001 mov&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, #0x1&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CAA8 7008 strb&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | r0, [r1, #0x0]&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-opcode&amp;quot; | 0876CAAA 4770 bx&lt;br /&gt;
| class=&amp;quot;EnHack-args&amp;quot; | lr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The second and fourth routines simply contain bx lr, meaning they do nothing at all. There&#039;s no reason to trust either of them. The first one is the joypad routine - very promising. Take the pointer to this routine (0x087384A1), byteswap it (0xA1847308) and search the ROM for it with a hex editor. There&#039;s only one result, and it is definitely inside the Phantasy Star executable. This pointer is located at 0x007383FC. Attach the C4 codetype (F8 for Gameshark) and the 000084x3 value (000001x3 for Gameshark). Back in the ARM assembly, the first bx instruction was bx r0. So, the x is replaced with 0. The final code is C47383FC 00008403 for AR and F87383FC 00000103 for GS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Codebreaker Advance and Gameshark SP==&lt;br /&gt;
&lt;br /&gt;
[[Image:cba.png|center|Codebreaker Advance Disclaimer]][[Image:cba2.png|center|Codebreaker Advance Game List]]&amp;lt;br /&amp;gt;[[Image:cba3.png|center|Codebreaker Advance Code List]][[Image:cba4.png|center|Codebreaker Advance New Code Screen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Description - Codebreaker Advance===&lt;br /&gt;
&lt;br /&gt;
Pelican released the Codebreaker Advance shortly after the GSA came out. Like the GSA, it is a step up from its Gameboy counterpart, but lacks a trainer. Notable code types that the CBA has added include the slide code, 8- and 16-bit writes, conditionals, and a bitwise AND. However, the CBA does not implement a 32-bit RAM write or a ROM patch, both of which the GSA has. Codebreaker codes are encrypted by default, but unencrypted codes can be allowed, by not having a 9-code as the first line of a master code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Gameshark SP===&lt;br /&gt;
&lt;br /&gt;
The Gameshark name was purchased by MadCatz, who also purchased the rights to the Codebreaker Advance software. In reality, all the Gameshark SP is, is a renamed Codebreaker Advance.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Codebreaker/Gameshark SP code types===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;EnHack-codetypes&amp;quot;&lt;br /&gt;
! class=&amp;quot;EnHack-type&amp;quot; | Code type&lt;br /&gt;
! class=&amp;quot;EnHack-desc&amp;quot; | Description&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 0000xxxx yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Master Code&amp;lt;br /&amp;gt;xxxx is the CRC of the game. yyyy is flags include: 0x0008 (CRC exists and is used to autodetect the game) and 0x0002 (Disable interrupts)&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 1aaaaaaa xxxy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Master Code&amp;lt;br /&amp;gt;0x0aaaaaaa is the hook address for the Codebreaker. y determines the CBA Code Handler Store Address (address = (y &amp;lt;&amp;lt; 0x16) + 0x08000010) and xxx determines the hook type (0x100 is 32-bit Long Branch (THUMB), 0x200 is 32-bit Long Branch (ARM), 0x300 is 8-bit Long Branch (THUMB), and 0x400 is 8-bit Long Branch (ARM).&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 3aaaaaaa 00xx&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 8-bit RAM write&amp;lt;br /&amp;gt;xx is written to 0aaaaaaa.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 4aaaaaaa yyyy&amp;lt;br /&amp;gt;zzzzxxxx iiii&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Slide code&amp;lt;br /&amp;gt;0aaaaaaa is the starting address and yyyy is the starting value. xxxx is the number of repetitions with zzzz being the value increment and iiii being the address increment.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 6aaaaaaa yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit bitwise AND&amp;lt;br /&amp;gt;ANDs the 16-bit value at the address 0aaaaaaa with yyyy and then writes it back to 0aaaaaaa.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 7aaaaaaa yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If Equal To&amp;lt;br /&amp;gt;Executes the next code only if the 16-bit value at the address 0aaaaaaa is equal to yyyy.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 8aaaaaaa yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit RAM write&amp;lt;br /&amp;gt;yyyy is written to 0aaaaaaa.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | 9yyyyyyy yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | Change encryption seeds.&amp;lt;br /&amp;gt;Changes encryption seeds.&lt;br /&gt;
|-&lt;br /&gt;
| class=&amp;quot;EnHack-type&amp;quot; | Aaaaaaaa yyyy&lt;br /&gt;
| class=&amp;quot;EnHack-desc&amp;quot; | 16-bit If Not Equal To&amp;lt;br /&amp;gt;Executes the next code only if the 16-bit value at the address 0aaaaaaa is not equal to yyyy.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Encrypting/Decrypting Codebreaker/Gameshark SP codes===&lt;br /&gt;
&lt;br /&gt;
[[Image:cbacrypt.png|none|550px|center|CBA Crypt]]&lt;br /&gt;
&lt;br /&gt;
Codebreaker (and by extension, Gameshark SP) codes are encrypted and decrypted with [[Tools#CBAcrypt|CBA Crypt]]. To use this, first put the first line of the CB master code (the one that starts with a 9) in the left box. If the first line of the master code does not start with a 9, then encryption and decryption are not necessary. Underneath the 9 code, put the codes you want to encrypt or decrypt and press the appropriate button. On the right side, the encrypted or decrypted codes will appear. The first line will be the same on both sides. Ignore this line. The rest of the box is when you need.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Creating GSSP/CBA master codes===&lt;br /&gt;
&lt;br /&gt;
To create a master code for the Codebreaker or Gameshark SP, a ROM of the game will be required, as well as [[Tools#GBAtool|GBA Tool]]. Open GBA Tool up and click the browse button. Find the load, and load it. Then press search. A list of potential master codes will be displayed. Test each master code on the game with any code. If the code works, you have a valid master code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==ARM7 Assembly==&lt;br /&gt;
&lt;br /&gt;
The GBA uses an ARM7TMDI chip. The ARM architecture provides two modes, ARM and THUMB, and well as 31 32-bit registers. Only 16 of these registers are visible at a time, with R13, R14, and R15 being for the Stack Pointer, the Link Register, and the Program Counter respectively. The ARM instruction set uses 32-bit operations, whereas the THUMB set uses 16-bit. THUMB is designed to produce smaller code with the same speed as ARM and much of the functionability. One major limitation of THUMB is that many instructions cannot access registers above R07. In ARM, 4 bits are set aside for a conditional. The operation is executed only if the current flags meet that condition. More information on ARM and THUMB can be found in the official ARM and THUMB manuals, as well as GBATek, all provided on the [[Documents|documents page]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hacking using VBA-SDL-H==&lt;br /&gt;
&lt;br /&gt;
[[Image:vba_sdl.png|none|550px|center|VBA-SDL-H]]&lt;br /&gt;
&lt;br /&gt;
VBA-SDL-H is a modified version of VBA-SDL V1.7.2 by kenobi and Labmaster. Compatibility wise, it has the same limitations as VBA-H. VBA-SDL-H has been modified to include extra options such as Don&#039;t break on, Conditional Breaks, Break on Read, Break on Change, and Last Branch. In addition to this, it provides the same options provided by the official version of VBA-SDL.&lt;br /&gt;
&lt;br /&gt;
Inside the console window, VBA-SDL-H lists all the registers, as well as CPSR, the mode, and the status flags. Additionally, the next instruction to be executed is displayed. If the &#039;&#039;last&#039;&#039; option was enabled, the same information is also provided for when the last branch occurred. This feature has some bugs, however, and does not always work properly. &#039;&#039;h&#039;&#039; brings up a list of all available commands with a description. The &#039;&#039;c&#039;&#039; command resumes the functioning of the game. &#039;&#039;bt&#039;&#039; and &#039;&#039;ba&#039;&#039; break on the THUMB and ARM addresses provided respectively, when they are executed. &#039;&#039;bd [number]&#039;&#039; deletes the corresponding &#039;&#039;bt&#039;&#039; or &#039;&#039;ba&#039;&#039; instruction. This function has a small bug in that the last remaining breakpoint must be deleted manually. bpw [address] [bytes] breaks when [address] or any addresses up to [bytes] bytes afterwards are written to. The &#039;&#039;cow&#039;&#039; changes &#039;&#039;bpw&#039;&#039; to act as a break on change, which will not break if the value being written to the specified address is the same as the address&#039;s current value. &#039;&#039;bpr&#039;&#039; functions the same way as &#039;&#039;bpw&#039;&#039;, but it breaks when an address is read from instead of written to. The &#039;&#039;bpwc&#039;&#039; and &#039;&#039;bprc&#039;&#039; instruction delete all breaks on write and read, and the &#039;&#039;bl&#039;&#039; option lists all of these breakpoints. The &#039;&#039;db&#039;&#039; is used to disassemble the specified address from triggering a breakpoint. The instruction will still execute as normal, but VBA-SDL-H will ignore it with regard to breakpoints. &#039;&#039;cba&#039;&#039; and &#039;&#039;cbt&#039;&#039; instructions are also allowed. These instructions set conditional ARM and THUMB breakpoints.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;d&#039;&#039;, &#039;&#039;da&#039;&#039;, and &#039;&#039;dt&#039;&#039; instuctions disassemble the memory located at specified address. &#039;&#039;d&#039;&#039; disassembles in the game&#039;s current mode, while &#039;&#039;dt&#039;&#039; and &#039;&#039;da&#039;&#039; force THUMB and ARM disassembly. The next twenty operations are shown in either case. If no address is provided, disassembly begins at the current location of the game.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;mb&#039;&#039;, &#039;&#039;mh&#039;&#039;, and &#039;&#039;mw&#039;&#039; instructions show the memory at the location provided in terms of bytes, halfwords, and words. 0x100 bytes are shown in all cases and the ASCII representation of these bytes is provided on the right side. The &#039;&#039;eb&#039;&#039;, &#039;&#039;eh&#039;&#039;, and &#039;&#039;ew&#039;&#039; instructions can be used to modify these memory values; additionally, &#039;&#039;er&#039;&#039; is provided to modify the value of a register.&lt;br /&gt;
&lt;br /&gt;
Miscellaneous instructions include &#039;&#039;io&#039;&#039;, which displays the status of the I/O registers, &#039;&#039;dload&#039;&#039; and &#039;&#039;dsave&#039;&#039; which load and save raw data files, &#039;&#039;load&#039;&#039; and &#039;&#039;save&#039;&#039;, which loads or saves an Fx style save, &#039;&#039;n&#039;&#039; which executes the next instruction, and &#039;&#039;radix&#039;&#039;, which sets the print radix to the specified base. Additionally, &#039;&#039;verbose&#039;&#039; changes the verbose level, &#039;&#039;where&#039;&#039; shows the call chain, &#039;&#039;locals&#039;&#039; shows the local variables of a given address, and &#039;&#039;lf&#039;&#039; logs all output to a file. Finally, the &#039;&#039;print&#039;&#039; instruction attempts to print the value of an expression.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Converting codes==&lt;br /&gt;
&lt;br /&gt;
[http://doc.kodewerx.org/tools/gba/arcrypt.rar ARCrypt] converts codes between the three formats. Put the code to be converted in the left box, choose the appropriate devices, and hit convert. AR and GS codes must be encrypted during this process.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{EnHacklopedia}}&lt;br /&gt;
&lt;br /&gt;
{{Template: EnHacklopedia_Legal}}&lt;br /&gt;
[[Category: EnHacklopedia]]&lt;/div&gt;</summary>
		<author><name>Rimsky82</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Hacking_Genesis&amp;diff=4645</id>
		<title>Hacking Genesis</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Hacking_Genesis&amp;diff=4645"/>
		<updated>2012-01-20T22:49:38Z</updated>

		<summary type="html">&lt;p&gt;Rimsky82: /* Decryption */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:EnHacklopedia Header}}&lt;br /&gt;
&lt;br /&gt;
==Game Genie==&lt;br /&gt;
&lt;br /&gt;
[[Image:Genesisgenie.jpg|Game Genie device for Sega Genesis]]&lt;br /&gt;
&lt;br /&gt;
The Genesis game genie was different from all of the other genies in a couple ways.  It was similar in that it intercepted ROM from the cartridge and overwrote certain bytes to achieve the desired effects.  But besides obvious differences, like the shape and look of the device, the encryption scheme was also different.  Genies on other systems used letters or hex digits to mask other hex digits, and swapped them around for good measure.  The genesis genie actually used many different letters and numbers to mask 5-bit sequences, which were jumbled around.  This was because the codes were 8 digits long, but needed to hold information for 5 bytes instead of 4.&lt;br /&gt;
&lt;br /&gt;
The Genesis Game Genie used the following digits:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ABCDEFGHJKLMNPRSTVWXYZ0123456789&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice they skipped I, O, Q, and U, probably so those digits weren&#039;t confused with others.&lt;br /&gt;
&lt;br /&gt;
For substitution, &amp;quot;A&amp;quot; starts at 0 and it counts up from there. Here&#039;s a chart for easy access.&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Digit&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Substitute&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;A&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00000&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;B&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00001&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;C&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00010&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;D&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00011&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;E&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00100&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;F&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00101&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;G&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00110&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;H&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00111&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;J&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01000&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;K&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01001&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;L&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01010&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;M&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01011&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;N&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01100&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;P&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01101&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;R&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01110&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;S&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01111&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;T&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10000&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;V&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10001&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;W&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10010&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10011&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;Y&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10100&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;Z&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10101&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10110&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10111&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11000&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11001&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;4&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11010&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;5&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11011&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11100&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;7&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11101&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;8&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11110&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;9&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11111&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Decryption===&lt;br /&gt;
To get the initial binary string to decrypt a code, first you substitute each digit with it&#039;s 5-bit counterpart.  We&#039;ll use Sonic 1&#039;s &amp;quot;Each ring counts as 8&amp;quot; code as an example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SCRA-BAX0&lt;br /&gt;
&lt;br /&gt;
|-S-||-C-||-R-||-A-||-B-||-A-||-X-||-0-|&lt;br /&gt;
0111100010011100000000001000001001110110&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What we have left is a 40-bit string.&lt;br /&gt;
&lt;br /&gt;
The address is 24-bit and comprises of the following bytes, counted from high to low.  17-18-19-20-21-22-23-24-9-10-11-12-13-14-15-16-33-34-35-36-37-38-39-40&lt;br /&gt;
Which gives us -&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
a = (s &amp;amp; 0xFF0000) | ((s &amp;gt;&amp;gt; 16) &amp;amp; 0xFF00) | (s &amp;amp; 0xFF)&lt;br /&gt;
&lt;br /&gt;
address = binary 000000001001110001110110, or 0x009C76&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The value is 16-bit (it is a genesis) and comprises of the following bytes, counted from high to low.  30-31-32-25-26-27-28-29-1-2-3-4-5-6-7-8&lt;br /&gt;
Which gives us -&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
v = ((s &amp;amp; 0x700) &amp;lt;&amp;lt; 5) | ((s &amp;gt;&amp;gt; 3) &amp;amp; 0x1F00) | (s &amp;gt;&amp;gt; 32)&lt;br /&gt;
&lt;br /&gt;
value = binary 0101000001111000, or 0x5078&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So there you have it, this code replaces the value at the address 0x009C76 with 0x5078.&lt;br /&gt;
&lt;br /&gt;
To encrypt back to genie format, just follow the steps backwards.&lt;br /&gt;
&lt;br /&gt;
{{EnHacklopedia}}&lt;br /&gt;
&lt;br /&gt;
{{Template:EnHacklopedia Legal}}&lt;br /&gt;
[[Category: EnHacklopedia]]&lt;/div&gt;</summary>
		<author><name>Rimsky82</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Hacking_Genesis&amp;diff=4643</id>
		<title>Hacking Genesis</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Hacking_Genesis&amp;diff=4643"/>
		<updated>2012-01-20T07:49:01Z</updated>

		<summary type="html">&lt;p&gt;Rimsky82: /* Decryption */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:EnHacklopedia Header}}&lt;br /&gt;
&lt;br /&gt;
==Game Genie==&lt;br /&gt;
&lt;br /&gt;
[[Image:Genesisgenie.jpg|Game Genie device for Sega Genesis]]&lt;br /&gt;
&lt;br /&gt;
The Genesis game genie was different from all of the other genies in a couple ways.  It was similar in that it intercepted ROM from the cartridge and overwrote certain bytes to achieve the desired effects.  But besides obvious differences, like the shape and look of the device, the encryption scheme was also different.  Genies on other systems used letters or hex digits to mask other hex digits, and swapped them around for good measure.  The genesis genie actually used many different letters and numbers to mask 5-bit sequences, which were jumbled around.  This was because the codes were 8 digits long, but needed to hold information for 5 bytes instead of 4.&lt;br /&gt;
&lt;br /&gt;
The Genesis Game Genie used the following digits:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ABCDEFGHJKLMNPRSTVWXYZ0123456789&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice they skipped I, O, Q, and U, probably so those digits weren&#039;t confused with others.&lt;br /&gt;
&lt;br /&gt;
For substitution, &amp;quot;A&amp;quot; starts at 0 and it counts up from there. Here&#039;s a chart for easy access.&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Digit&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Substitute&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;A&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00000&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;B&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00001&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;C&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00010&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;D&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00011&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;E&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00100&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;F&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00101&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;G&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00110&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;H&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00111&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;J&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01000&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;K&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01001&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;L&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01010&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;M&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01011&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;N&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01100&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;P&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01101&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;R&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01110&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;S&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01111&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;T&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10000&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;V&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10001&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;W&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10010&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10011&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;Y&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10100&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;Z&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10101&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10110&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10111&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11000&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11001&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;4&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11010&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;5&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11011&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11100&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;7&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11101&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;8&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11110&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;9&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11111&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Decryption===&lt;br /&gt;
To get the initial binary string to decrypt a code, first you substitute each digit with it&#039;s 5-bit counterpart.  We&#039;ll use Sonic 1&#039;s &amp;quot;Each ring counts as 8&amp;quot; code as an example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SCRA-BAX0&lt;br /&gt;
&lt;br /&gt;
|-S-||-C-||-R-||-A-||-B-||-A-||-X-||-0-|&lt;br /&gt;
0111100010011100000000001000001001110110&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What we have left is a 40-bit string.&lt;br /&gt;
&lt;br /&gt;
The address is 24-bit and comprises of the following bytes, counted from high to low.  17-18-19-20-21-22-23-24-15-16-9-10-11-12-13-14-33-34-35-36-37-38-39-40&lt;br /&gt;
Which gives us -&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
a = (s &amp;amp; 0xFF0000) | ((s &amp;gt;&amp;gt; 10) &amp;amp; 0xC000) | ((s &amp;gt;&amp;gt; 18) &amp;amp; 0x3F00) | (s &amp;amp; 0xFF)&lt;br /&gt;
&lt;br /&gt;
address = binary 000000001001110001110110, or 0x009C76&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The value is 16-bit (it is a genesis) and comprises of the following bytes, counted from high to low.  30-31-32-25-26-27-28-29-1-2-3-4-5-6-7-8&lt;br /&gt;
Which gives us -&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
v = ((s &amp;amp; 0x700) &amp;lt;&amp;lt; 5) | ((s &amp;gt;&amp;gt; 3) &amp;amp; 0x1F00) | (s &amp;gt;&amp;gt; 32)&lt;br /&gt;
&lt;br /&gt;
value = binary 0101000001111000, or 0x5078&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So there you have it, this code replaces the value at the address 0x009C76 with 0x5078.&lt;br /&gt;
&lt;br /&gt;
To encrypt back to genie format, just follow the steps backwards.&lt;br /&gt;
&lt;br /&gt;
{{EnHacklopedia}}&lt;br /&gt;
&lt;br /&gt;
{{Template:EnHacklopedia Legal}}&lt;br /&gt;
[[Category: EnHacklopedia]]&lt;/div&gt;</summary>
		<author><name>Rimsky82</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=User:Rimsky82&amp;diff=4568</id>
		<title>User:Rimsky82</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=User:Rimsky82&amp;diff=4568"/>
		<updated>2011-11-24T05:04:12Z</updated>

		<summary type="html">&lt;p&gt;Rimsky82: initial autobiography&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;rimsky82 joined GameHacking.org as an administrator in the Spring of 2011.  He had his own site, exportcheats.com, that he had written himself and featured exporting the codes there as files for many different emulators.  Since his page wasn&#039;t getting much traffic and his features were wanted on GameHacking.org, he decided to leave his site behind and join the team here.&lt;br /&gt;
&lt;br /&gt;
He is currently rewriting the GameHacking.org website, integrating export features as well as many more cool features that will be unique to GH.  He also hacks codes, and writes various .net programs for ROMs.&lt;/div&gt;</summary>
		<author><name>Rimsky82</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Hacking_Genesis&amp;diff=4567</id>
		<title>Hacking Genesis</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Hacking_Genesis&amp;diff=4567"/>
		<updated>2011-11-24T04:57:03Z</updated>

		<summary type="html">&lt;p&gt;Rimsky82: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:EnHacklopedia Header}}&lt;br /&gt;
&lt;br /&gt;
==Game Genie==&lt;br /&gt;
&lt;br /&gt;
[[Image:Genesisgenie.jpg|Game Genie device for Sega Genesis]]&lt;br /&gt;
&lt;br /&gt;
The Genesis game genie was different from all of the other genies in a couple ways.  It was similar in that it intercepted ROM from the cartridge and overwrote certain bytes to achieve the desired effects.  But besides obvious differences, like the shape and look of the device, the encryption scheme was also different.  Genies on other systems used letters or hex digits to mask other hex digits, and swapped them around for good measure.  The genesis genie actually used many different letters and numbers to mask 5-bit sequences, which were jumbled around.  This was because the codes were 8 digits long, but needed to hold information for 5 bytes instead of 4.&lt;br /&gt;
&lt;br /&gt;
The Genesis Game Genie used the following digits:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ABCDEFGHJKLMNPRSTVWXYZ0123456789&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice they skipped I, O, Q, and U, probably so those digits weren&#039;t confused with others.&lt;br /&gt;
&lt;br /&gt;
For substitution, &amp;quot;A&amp;quot; starts at 0 and it counts up from there. Here&#039;s a chart for easy access.&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Digit&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Substitute&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;A&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00000&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;B&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00001&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;C&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00010&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;D&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00011&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;E&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00100&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;F&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00101&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;G&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00110&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;H&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00111&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;J&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01000&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;K&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01001&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;L&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01010&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;M&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01011&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;N&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01100&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;P&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01101&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;R&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01110&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;S&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01111&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;T&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10000&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;V&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10001&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;W&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10010&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10011&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;Y&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10100&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;Z&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10101&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10110&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10111&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11000&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11001&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;4&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11010&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;5&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11011&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11100&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;7&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11101&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;8&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11110&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;9&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11111&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Decryption===&lt;br /&gt;
To get the initial binary string to decrypt a code, first you substitute each digit with it&#039;s 5-bit counterpart.  We&#039;ll use Sonic 1&#039;s &amp;quot;Each ring counts as 8&amp;quot; code as an example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SCRA-BAX0&lt;br /&gt;
&lt;br /&gt;
|-S-||-C-||-R-||-A-||-B-||-A-||-X-||-0-|&lt;br /&gt;
0111100010011100000000001000001001110110&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What we have left is a 40-bit string.&lt;br /&gt;
&lt;br /&gt;
The address is 24-bit and comprises of the following bytes, counted from high to low.  17-18-19-20-21-22-23-24-9-10-11-12-13-14-33-34-35-36-37-38-39-40&lt;br /&gt;
Which gives us -&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
a = (((s &amp;gt;&amp;gt; 16) &amp;amp; 255) &amp;lt;&amp;lt; 16) | (((s &amp;gt;&amp;gt; 24) &amp;amp; 255) &amp;lt;&amp;lt; 8) | (s &amp;amp; 255)&lt;br /&gt;
&lt;br /&gt;
address = binary 000000001001110001110110, or 0x009C76&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The value is 16-bit (it is a genesis) and comprises of the following bytes, counted from high to low.  30-31-32-25-26-27-28-29-1-2-3-4-5-6-7-8&lt;br /&gt;
Which gives us -&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
v = (((s &amp;gt;&amp;gt; 8) &amp;amp; 7) &amp;lt;&amp;lt; 13) | (((s &amp;gt;&amp;gt; 11) &amp;amp; 31) &amp;lt;&amp;lt; 8) | (s &amp;gt;&amp;gt; 32)&lt;br /&gt;
&lt;br /&gt;
value = binary 0101000001111000, or 0x5078&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So there you have it, this code replaces the value at the address 0x009C76 with 0x5078.&lt;br /&gt;
&lt;br /&gt;
To encrypt back to genie format, just follow the steps backwards.&lt;br /&gt;
&lt;br /&gt;
{{EnHacklopedia}}&lt;br /&gt;
&lt;br /&gt;
{{Template:EnHacklopedia Legal}}&lt;br /&gt;
[[Category: EnHacklopedia]]&lt;/div&gt;</summary>
		<author><name>Rimsky82</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Hacking_Genesis&amp;diff=4566</id>
		<title>Hacking Genesis</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Hacking_Genesis&amp;diff=4566"/>
		<updated>2011-11-24T04:56:35Z</updated>

		<summary type="html">&lt;p&gt;Rimsky82: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:EnHacklopedia Header}}&lt;br /&gt;
&lt;br /&gt;
==Game Genie==&lt;br /&gt;
[[Image:Genesisgenie.jpg|Game Genie device for Sega Genesis]]&lt;br /&gt;
The Genesis game genie was different from all of the other genies in a couple ways.  It was similar in that it intercepted ROM from the cartridge and overwrote certain bytes to achieve the desired effects.  But besides obvious differences, like the shape and look of the device, the encryption scheme was also different.  Genies on other systems used letters or hex digits to mask other hex digits, and swapped them around for good measure.  The genesis genie actually used many different letters and numbers to mask 5-bit sequences, which were jumbled around.  This was because the codes were 8 digits long, but needed to hold information for 5 bytes instead of 4.&lt;br /&gt;
&lt;br /&gt;
The Genesis Game Genie used the following digits:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ABCDEFGHJKLMNPRSTVWXYZ0123456789&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice they skipped I, O, Q, and U, probably so those digits weren&#039;t confused with others.&lt;br /&gt;
&lt;br /&gt;
For substitution, &amp;quot;A&amp;quot; starts at 0 and it counts up from there. Here&#039;s a chart for easy access.&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Digit&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Substitute&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;A&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00000&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;B&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00001&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;C&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00010&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;D&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00011&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;E&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00100&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;F&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00101&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;G&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00110&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;H&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00111&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;J&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01000&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;K&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01001&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;L&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01010&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;M&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01011&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;N&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01100&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;P&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01101&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;R&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01110&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;S&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01111&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;T&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10000&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;V&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10001&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;W&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10010&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10011&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;Y&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10100&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;Z&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10101&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10110&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10111&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11000&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11001&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;4&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11010&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;5&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11011&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11100&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;7&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11101&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;8&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11110&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;9&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11111&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Decryption===&lt;br /&gt;
To get the initial binary string to decrypt a code, first you substitute each digit with it&#039;s 5-bit counterpart.  We&#039;ll use Sonic 1&#039;s &amp;quot;Each ring counts as 8&amp;quot; code as an example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SCRA-BAX0&lt;br /&gt;
&lt;br /&gt;
|-S-||-C-||-R-||-A-||-B-||-A-||-X-||-0-|&lt;br /&gt;
0111100010011100000000001000001001110110&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What we have left is a 40-bit string.&lt;br /&gt;
&lt;br /&gt;
The address is 24-bit and comprises of the following bytes, counted from high to low.  17-18-19-20-21-22-23-24-9-10-11-12-13-14-33-34-35-36-37-38-39-40&lt;br /&gt;
Which gives us -&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
a = (((s &amp;gt;&amp;gt; 16) &amp;amp; 255) &amp;lt;&amp;lt; 16) | (((s &amp;gt;&amp;gt; 24) &amp;amp; 255) &amp;lt;&amp;lt; 8) | (s &amp;amp; 255)&lt;br /&gt;
&lt;br /&gt;
address = binary 000000001001110001110110, or 0x009C76&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The value is 16-bit (it is a genesis) and comprises of the following bytes, counted from high to low.  30-31-32-25-26-27-28-29-1-2-3-4-5-6-7-8&lt;br /&gt;
Which gives us -&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
v = (((s &amp;gt;&amp;gt; 8) &amp;amp; 7) &amp;lt;&amp;lt; 13) | (((s &amp;gt;&amp;gt; 11) &amp;amp; 31) &amp;lt;&amp;lt; 8) | (s &amp;gt;&amp;gt; 32)&lt;br /&gt;
&lt;br /&gt;
value = binary 0101000001111000, or 0x5078&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So there you have it, this code replaces the value at the address 0x009C76 with 0x5078.&lt;br /&gt;
&lt;br /&gt;
To encrypt back to genie format, just follow the steps backwards.&lt;br /&gt;
&lt;br /&gt;
{{EnHacklopedia}}&lt;br /&gt;
&lt;br /&gt;
{{Template:EnHacklopedia Legal}}&lt;br /&gt;
[[Category: EnHacklopedia]]&lt;/div&gt;</summary>
		<author><name>Rimsky82</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=File:Genesisgenie.jpg&amp;diff=4565</id>
		<title>File:Genesisgenie.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=File:Genesisgenie.jpg&amp;diff=4565"/>
		<updated>2011-11-24T04:55:33Z</updated>

		<summary type="html">&lt;p&gt;Rimsky82: uploaded a new version of &amp;amp;quot;File:Genesisgenie.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Game Genie device for the Sega Genesis.&lt;/div&gt;</summary>
		<author><name>Rimsky82</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=File:Genesisgenie.jpg&amp;diff=4564</id>
		<title>File:Genesisgenie.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=File:Genesisgenie.jpg&amp;diff=4564"/>
		<updated>2011-11-24T04:53:28Z</updated>

		<summary type="html">&lt;p&gt;Rimsky82: The Game Genie device for the Sega Genesis.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Game Genie device for the Sega Genesis.&lt;/div&gt;</summary>
		<author><name>Rimsky82</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Hacking_Genesis&amp;diff=4563</id>
		<title>Hacking Genesis</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Hacking_Genesis&amp;diff=4563"/>
		<updated>2011-11-24T04:49:38Z</updated>

		<summary type="html">&lt;p&gt;Rimsky82: started genie section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:EnHacklopedia Header}}&lt;br /&gt;
&lt;br /&gt;
==Game Genie==&lt;br /&gt;
The Genesis game genie was different from all of the other genies in a couple ways.  It was similar in that it intercepted ROM from the cartridge and overwrote certain bytes to achieve the desired effects.  But besides obvious differences, like the shape and look of the device, the encryption scheme was also different.  Genies on other systems used letters or hex digits to mask other hex digits, and swapped them around for good measure.  The genesis genie actually used many different letters and numbers to mask 5-bit sequences, which were jumbled around.  This was because the codes were 8 digits long, but needed to hold information for 5 bytes instead of 4.&lt;br /&gt;
&lt;br /&gt;
The Genesis Game Genie used the following digits:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ABCDEFGHJKLMNPRSTVWXYZ0123456789&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice they skipped I, O, Q, and U, probably so those digits weren&#039;t confused with others.&lt;br /&gt;
&lt;br /&gt;
For substitution, &amp;quot;A&amp;quot; starts at 0 and it counts up from there. Here&#039;s a chart for easy access.&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Digit&amp;lt;/th&amp;gt;&lt;br /&gt;
            &amp;lt;th&amp;gt;Substitute&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;A&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00000&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;B&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00001&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;C&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00010&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;D&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00011&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;E&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00100&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;F&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00101&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;G&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00110&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;H&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;00111&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;J&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01000&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;K&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01001&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;L&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01010&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;M&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01011&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;N&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01100&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;P&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01101&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;R&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01110&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;S&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;01111&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;T&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10000&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;V&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10001&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;W&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10010&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;X&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10011&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;Y&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10100&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;Z&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10101&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;0&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10110&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;10111&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11000&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;3&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11001&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;4&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11010&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;5&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11011&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;6&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11100&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;7&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11101&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;8&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11110&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
        &amp;lt;tr&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;9&amp;lt;/td&amp;gt;&lt;br /&gt;
            &amp;lt;td&amp;gt;11111&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Decryption===&lt;br /&gt;
To get the initial binary string to decrypt a code, first you substitute each digit with it&#039;s 5-bit counterpart.  We&#039;ll use Sonic 1&#039;s &amp;quot;Each ring counts as 8&amp;quot; code as an example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SCRA-BAX0&lt;br /&gt;
&lt;br /&gt;
|-S-||-C-||-R-||-A-||-B-||-A-||-X-||-0-|&lt;br /&gt;
0111100010011100000000001000001001110110&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What we have left is a 40-bit string.&lt;br /&gt;
&lt;br /&gt;
The address is 24-bit and comprises of the following bytes, counted from high to low.  17-18-19-20-21-22-23-24-9-10-11-12-13-14-33-34-35-36-37-38-39-40&lt;br /&gt;
Which gives us -&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
a = (((s &amp;gt;&amp;gt; 16) &amp;amp; 255) &amp;lt;&amp;lt; 16) | (((s &amp;gt;&amp;gt; 24) &amp;amp; 255) &amp;lt;&amp;lt; 8) | (s &amp;amp; 255)&lt;br /&gt;
&lt;br /&gt;
address = binary 000000001001110001110110, or 0x009C76&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The value is 16-bit (it is a genesis) and comprises of the following bytes, counted from high to low.  30-31-32-25-26-27-28-29-1-2-3-4-5-6-7-8&lt;br /&gt;
Which gives us -&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
v = (((s &amp;gt;&amp;gt; 8) &amp;amp; 7) &amp;lt;&amp;lt; 13) | (((s &amp;gt;&amp;gt; 11) &amp;amp; 31) &amp;lt;&amp;lt; 8) | (s &amp;gt;&amp;gt; 32)&lt;br /&gt;
&lt;br /&gt;
value = binary 0101000001111000, or 0x5078&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So there you have it, this code replaces the value at the address 0x009C76 with 0x5078.&lt;br /&gt;
&lt;br /&gt;
To encrypt back to genie format, just follow the steps backwards.&lt;br /&gt;
&lt;br /&gt;
{{EnHacklopedia}}&lt;br /&gt;
&lt;br /&gt;
{{Template:EnHacklopedia Legal}}&lt;br /&gt;
[[Category: EnHacklopedia]]&lt;/div&gt;</summary>
		<author><name>Rimsky82</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Hacking_Genesis&amp;diff=4562</id>
		<title>Hacking Genesis</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Hacking_Genesis&amp;diff=4562"/>
		<updated>2011-11-24T03:19:31Z</updated>

		<summary type="html">&lt;p&gt;Rimsky82: starting out with just headers and footers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:EnHacklopedia Header}}&lt;br /&gt;
&lt;br /&gt;
==Game Genie==&lt;br /&gt;
&lt;br /&gt;
Coming Soon...&lt;br /&gt;
&lt;br /&gt;
{{EnHacklopedia}}&lt;br /&gt;
&lt;br /&gt;
{{Template:EnHacklopedia Legal}}&lt;br /&gt;
[[Category: EnHacklopedia]]&lt;/div&gt;</summary>
		<author><name>Rimsky82</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Main_Page&amp;diff=4549</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Main_Page&amp;diff=4549"/>
		<updated>2011-11-17T20:56:09Z</updated>

		<summary type="html">&lt;p&gt;Rimsky82: branding edits only.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;blockquote&amp;gt;Welcome to the Gamehacking.org wiki. The Gamehacking.org wiki is centered primarily around [[Game Enhancer|Game Enhancers]] and anything related to them. This includes articles on prominent [[:Category:People|community members]], [[:Category:Websites|websites]], [[:Category:Hacking and Game Info|hacking info]], [[:Category:Hardware Software and Accessories|software]], [[:Category:Game Enhancer Developers|developers, and publishers]]. The wiki is also used to archive [[:Category:GSHI|anything Gamehacking.org]].&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus far we have accumulated [[Special:Statistics|{{NUMBEROFARTICLES}}]] [[Special:Allpages|articles]]. Feel free to contribute to the wiki as you please (after registration) as there is much work left to be done. If you contribute enough you could make the [[Top Contributors|Top 10 Contributors list]]. Please follow the [[GSHI:Guidelines|guidelines]] when contributing to the wiki.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Worthwhile Reading}}&lt;/div&gt;</summary>
		<author><name>Rimsky82</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Main_Page&amp;diff=4548</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Main_Page&amp;diff=4548"/>
		<updated>2011-11-17T20:53:36Z</updated>

		<summary type="html">&lt;p&gt;Rimsky82: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;blockquote&amp;gt;Welcome to the &#039;&#039;&#039;[[GSHI]]&#039;&#039;&#039; wiki. The GSHI wiki is centered primarily around [[Game Enhancer|Game Enhancers]] and anything related to them. This includes articles on prominent [[:Category:People|community members]], [[:Category:Websites|websites]], [[:Category:Hacking and Game Info|hacking info]], [[:Category:Hardware Software and Accessories|software]], [[:Category:Game Enhancer Developers|developers, and publishers]]. The wiki is also used to archive [[:Category:GSHI|anything GSHI]].&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus far we have accumulated [[Special:Statistics|{{NUMBEROFARTICLES}}]] [[Special:Allpages|articles]]. Feel free to contribute to the wiki as you please (after registration) as there is much work left to be done. If you contribute enough you could make the [[Top Contributors|Top 10 Contributors list]]. Please follow the [[GSHI:Guidelines|guidelines]] when contributing to the wiki.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Worthwhile Reading}}&lt;/div&gt;</summary>
		<author><name>Rimsky82</name></author>
	</entry>
</feed>