<?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=Ugetab</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=Ugetab"/>
	<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/Special:Contributions/Ugetab"/>
	<updated>2026-06-14T02:24:26Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=4474</id>
		<title>Assembly Hacking</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=4474"/>
		<updated>2010-04-18T02:15:07Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: /* FCEU */ NSF program suggestion changed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Assembly hacking is the art of editing a compiled program. Without the source code, and without notes from the source code, one has to deduce almost everything about the underlying code, and how it works with RAM.&lt;br /&gt;
&lt;br /&gt;
There are several emulators that can aid one in creating a modification for a game. Games for console systems fall into the category of compiled programs, and generally, the source code is unavailable for these games.&lt;br /&gt;
&lt;br /&gt;
The use of making an assembly hack for a game can be found with the Nintendo Entertainment System (NES) [[Game Genie]].&lt;br /&gt;
&lt;br /&gt;
The codes that are entered into an NES Game Genie represent single-byte assembly hacks. Any assembly hack that could be done with a change of 3 bytes or less is possible to implement with a single Game Genie. The SNES Game Genie allows up to 5 codes, and 5 bytes of change. While this makes the possible usage of codes very limiting, it didn&#039;t prevent single-byte invincibility and infinite lives codes from appearing that could make it unnecessary to use additional codes.&lt;br /&gt;
&lt;br /&gt;
For more modern assembly hacking of the same systems, emulators that support 50 or more codes for any given game aren&#039;t uncommon. The ROMs have been turned into files that can be patched with all the changes needed to give the game a script in a new language. Emulators that aid in the process of making assembly hacks have appeared for many different emulated systems. The effect is that more people are now capable of starting their own projects, and existing projects can be modified and/or repaired more easily.&lt;br /&gt;
&lt;br /&gt;
=Emulators=&lt;br /&gt;
&lt;br /&gt;
==NES==&lt;br /&gt;
===FCEU===&lt;br /&gt;
[http://fceux.com FCEUX] is the most up-to-date version of the FCEU* line of builds. It has taken several lines of FCEU offshoots and combined them into a single application. Even I(ugetab) have had the opportunity to contribute code, changes and fixes to it. If you were having trouble with any games while using FCEUXDSP, you can try FCEUX. If FCEUX has trouble with games, you can report the issue and, if someone gets interested in fixing it, you may end up seeing it repaired. It is currently compatible with FCEUXDSP&#039;s debugger files. If you want to use FCEUXDSP, see below.&lt;br /&gt;
&lt;br /&gt;
[http://www.the-interweb.com/serendipity/index.php?/categories/9-FCEUXD-SP FCEUXDSP] is the result of an emulator first developed by Parasyte called FCEUD, which was then picked up by bbitmaster and renamed to FCEUXD, and finally adopted as FCEUXD SP.&lt;br /&gt;
&lt;br /&gt;
====Setting breakpoints in ROM/RAM====&lt;br /&gt;
Tools&amp;gt;Debug&lt;br /&gt;
&lt;br /&gt;
In the breakpoint window, &#039;Add&#039; the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
ROM is 8000-FFFF&amp;lt;br&amp;gt;&lt;br /&gt;
RAM is 0000-07FF, 6000-7FFF&amp;lt;br&amp;gt;&lt;br /&gt;
0800-3FFF is mirrored from some part of RAM.&amp;lt;br&amp;gt;&lt;br /&gt;
4000-4015 can be breakpointed if working on an NSF. If you want to use this to deal with NSFs, FCEUX is currently the best option.&lt;br /&gt;
&lt;br /&gt;
&#039;Hex Editor&#039; is a memory viewer/modifier.&lt;br /&gt;
&lt;br /&gt;
==SNES==&lt;br /&gt;
===Geiger&#039;s SNES9X Debugger===&lt;br /&gt;
This emulator can be found at [http://geigercount.net/crypt/ Geiger&#039;s Crypt] and [http://www.zophar.net/snes/geiger-s-snes9x-debugger.html Zophar&#039;s Domain - Geiger’s Snes9x Debugger].&lt;br /&gt;
&lt;br /&gt;
====Setting breakpoints in ROM/RAM====&lt;br /&gt;
Open ROM, Click &#039;Breakpoints&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
In the breakpoint window, enter the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
Standard RAM: 7E0000 - 7FFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
SA1 RAM: 400000-407FFF, 303000-303FFF&amp;lt;br&amp;gt;&lt;br /&gt;
HiROM - C00000 - FFFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
LoROM - 808000-BFFFFF (**0000 - **7FFF doesn&#039;t exist)&lt;br /&gt;
&lt;br /&gt;
If you use the [[SA1]] logger with an SA1-using game, and wish to find an address that changed an address in RAM, you can see if the conversion chart on the [[SA1]] page shows you the address to search for in the log file.&lt;br /&gt;
&lt;br /&gt;
===FuSoYa&#039;s SNES9X SuperFX Instruction Logger===&lt;br /&gt;
This emulator can be found [http://www.gshi.org/downloads/snes9x1.43-FuSoYa-SFX_B2.zip here].&lt;br /&gt;
&lt;br /&gt;
This emulator allows you to log SuperFX instructions being used by the emulator.&lt;br /&gt;
&lt;br /&gt;
Press the NumLock button to start/stop logging.&lt;br /&gt;
&lt;br /&gt;
Instructions will be logged to sfx_trace.txt, in the folder with the emulator.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s an example on how to interpret the results:&amp;lt;br&amp;gt;&lt;br /&gt;
00:e834 40       ldw (r0)        r0=$0058 SRAM=00:5AAE&amp;lt;br&amp;gt;&lt;br /&gt;
00:e835 64       sub r4          r0=$0055 CY=1&lt;br /&gt;
&lt;br /&gt;
First line Loads Word (SRAM=00:5AAE) to (r0). In Geiger&#039;s SNES9X Debugger, this is address 705AAE in the RAM viewer. In ZSNES, you can find this in a save-state at 0x4127F + 0x5AAE (= 0x46D2D). The result of this operation is on the same line.&lt;br /&gt;
&lt;br /&gt;
Second line subtracts (r4) from (r0). This next result is on the same line as well. This can be coded out to give you Infinite Health in Doom, but it won&#039;t work as a Game Genie code. The file address would be either 6835 or 6A35. Only one address of those 2 will be 0x64.&lt;br /&gt;
&lt;br /&gt;
==Genesis==&lt;br /&gt;
&lt;br /&gt;
===Regen Debugger Build===&lt;br /&gt;
This emulator can be found [http://aamirm.hacking-cult.org/ here]&lt;br /&gt;
&lt;br /&gt;
Backup: [http://www.gshi.org/downloads/Regen095D.zip Regen 0.95 Debugger]&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve used FCEUXDSP, Geiger&#039;s Snes9x, BGB, Nemu08, pSX, or pretty much any other active debugger, you&#039;ll realize that this is along the same lines of those debuggers. This is certainly what Genesis hackers have been waiting for when it comes to a user friendly debugger.&lt;br /&gt;
&lt;br /&gt;
It runs Genesis, Game Gear, and SMS files, but only debugs Genesis at the moment. Use [[#Emukon]] if you want to hack Game Gear or SMS.&lt;br /&gt;
&lt;br /&gt;
===Gens Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/337/ here].&lt;br /&gt;
&lt;br /&gt;
No breakpoints, but adequate tracing. A guide has been written on the specific usage of the emulator.&lt;br /&gt;
&lt;br /&gt;
The idea is that you can trace-log writes to and reads from memory, and you can also log all commands, and determine what&#039;s happening from the full log, by using what you find from the hook logging.&lt;br /&gt;
&lt;br /&gt;
===HazeMD===&lt;br /&gt;
This emulator can be found at [http://haze.mameworld.info/ this address].&lt;br /&gt;
&lt;br /&gt;
This emulator is harder to get setup to use a ROM, but comes with a MAME-style debugger. MAME&#039;s debugger is well known for being so powerful, considering the number of systems it can be used with when compiled into a build of MAME. The Gens tracer tends to have slightly better compatibility, while the HazeMD emulator has more potential for cheat codes, already having a Cheat system designed to handle multiple CPUs, which could be used for 32x game ROM hacks, and RAM hacks.&lt;br /&gt;
&lt;br /&gt;
==Gameboy==&lt;br /&gt;
===BGB===&lt;br /&gt;
This emulator can be found [http://bgb.bircd.org/ here]&lt;br /&gt;
&lt;br /&gt;
Load a ROM, and right-click the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debug mode enabled: to enable debugging&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debugger to enter the debugger&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in ROM/RAM&amp;lt;br&amp;gt;&lt;br /&gt;
In the debugger window:&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;breakpoints for execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;access breakpoints for read/write breaks.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Visual Boy Advance Tracer===&lt;br /&gt;
See [[#Visual_Boy_Advance_Tracer_2]]&lt;br /&gt;
&lt;br /&gt;
==PC Engine / Turbo-Grafx 16==&lt;br /&gt;
===Mednafen===&lt;br /&gt;
This emulator can be found [http://mednafen.sourceforge.net/ here]&lt;br /&gt;
&lt;br /&gt;
Esc = Exit Mednafen (Careful about it)&lt;br /&gt;
&lt;br /&gt;
To use F12 to quit, and not the ESC key, edit this in mednafen.cfg:&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;quot;;Exit&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;command.exit keyboard 293~keyboard 27&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
To this:&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;quot;;Exit&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;command.exit keyboard 293&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
F5 = Save State&amp;lt;br&amp;gt;&lt;br /&gt;
F7 = Load State&amp;lt;br&amp;gt;&lt;br /&gt;
0-9 = Select Save Slot&lt;br /&gt;
&lt;br /&gt;
F10 = Reset&amp;lt;br&amp;gt;&lt;br /&gt;
F11 = Hard Reset (Power Switch style)&lt;br /&gt;
&lt;br /&gt;
Alt + D = Toggle Debugger&lt;br /&gt;
&lt;br /&gt;
In Debugger:&amp;lt;br&amp;gt;&lt;br /&gt;
Alt+1 = CPU debugger view&amp;lt;br&amp;gt;&lt;br /&gt;
Alt+3 = Memory editor&amp;lt;br&amp;gt;&lt;br /&gt;
R = Run&amp;lt;br&amp;gt;&lt;br /&gt;
S = Step&amp;lt;br&amp;gt;&lt;br /&gt;
Return = Goto Address(If on code)/Edit(If on register) (Type new values after original, press enter. Quicker.)&amp;lt;br&amp;gt;&lt;br /&gt;
Space = Set/Unset Execution Breakpoint&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + Return = Edit watch address&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + R = Edit Read Breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + W = Edit write breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + O = Opcode Breakpoints (Enter EA for &amp;quot;NOP&amp;quot;, etc. Use 6502 ASM table mainly)&lt;br /&gt;
&lt;br /&gt;
See included Debugger.html file for complete command list&lt;br /&gt;
&lt;br /&gt;
==Game Gear==&lt;br /&gt;
===Emukon===&lt;br /&gt;
This emulator can be found [http://emukon.kontechs.de/ here].&lt;br /&gt;
&lt;br /&gt;
Backup: [http://www.gshi.org/downloads/Emukon105.zip Emukon 1.05]&lt;br /&gt;
&lt;br /&gt;
This is basically a friendlier style of Logging Debugger the way I tend to use it, with Breakpoints to help figure out how code you find operates. I&#039;ve used it to at least as much success as I&#039;ve used the Hook_log debuggers, only this was more boring because I didn&#039;t have to fight with the emulator as much.&lt;br /&gt;
&lt;br /&gt;
You can use a combination of Breakpoints and Log Files to debug games.&lt;br /&gt;
&lt;br /&gt;
Breakpoints have their own management window, or you can right click lines in the debugger.&lt;br /&gt;
&lt;br /&gt;
To use the log files effectively, you should focus on a single byte with a known effect, get to about where the setting you&#039;re looking for will change, go to the Debugger &amp;gt; Debugger menu, enable it if needed, then click the Clear Log button if you want a fresh start, and the Log button to start logging. Get the thing changed that you want, and then look under the DebugLogs folder for the game you&#039;re working on, and search the text logs for the address you want to check, whether it&#039;s the execution address by some chance or the memory address. Breakpoints and Logging work well together to discover the execution path to a piece of code.&lt;br /&gt;
&lt;br /&gt;
It&#039;s not as exceedingly simple as some other debuggers, but it&#039;s quite useful, and it&#039;s my first choice for hacking Game Gear as well as SMS.&lt;br /&gt;
&lt;br /&gt;
==Master System==&lt;br /&gt;
===Emukon===&lt;br /&gt;
See Game Gear section: [[#Emukon]]&lt;br /&gt;
&lt;br /&gt;
==Gameboy Advance==&lt;br /&gt;
===Visual Boy Advance Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/340/ here].&lt;br /&gt;
&lt;br /&gt;
This emulator uses the Hook Log system. Those familiar with the hook_log Genesis or N64 emulators should have little trouble adapting to this system.&lt;br /&gt;
&lt;br /&gt;
Note that it has also been used to good effect for a small number of gameboy games that BGB doesn&#039;t support. [[Ugetab]] used this for GBS ripping, but with full code logging, and a save-state near when something changes, you could just as effectively search for a memory address in trace.log. Mind that while GB assembly doesn&#039;t pile up as quickly as GBA or N64, and it is still necessary to be relatively close to the change before activating logging, if you don&#039;t want to have to use a special text editor to open an enormous log file. &lt;br /&gt;
&lt;br /&gt;
===Visual Boy Advance===&lt;br /&gt;
This emulator can be found at [http://vba.ngemu.com/downloads.shtml this address].&lt;br /&gt;
&lt;br /&gt;
Windows - SDL is required. Unfortunately, no cheat device exists that can change the assembly, so hacking it is more a matter of patching the ROM, and less a matter of using it for simple cheats. Not documented.&lt;br /&gt;
&lt;br /&gt;
==Playstation==&lt;br /&gt;
===PCSX 1.5 With Debugger===&lt;br /&gt;
This emulator is available [http://www.romhacking.net/utils/267/ here].&lt;br /&gt;
&lt;br /&gt;
Press F11 to enter the debugger. On-screen aids should be apparent.&lt;br /&gt;
&lt;br /&gt;
===PSX===&lt;br /&gt;
This emulator can be found at [http://www.romhacking.net/utils/311/ this address].&lt;br /&gt;
&lt;br /&gt;
This can be a decent debugging alternative if a game doesn&#039;t work well in the above emulator.&lt;br /&gt;
&lt;br /&gt;
===PCSX Agemo debugger===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/475/ here].&lt;br /&gt;
&lt;br /&gt;
It could be favorable for some tasks, compared to the other debuggers.&lt;br /&gt;
&lt;br /&gt;
==N64==&lt;br /&gt;
===Nemu64===&lt;br /&gt;
This emulator can be found [http://www.emulator-zone.com/doc.php/n64/nemu64.html here]&lt;br /&gt;
&lt;br /&gt;
Setting execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Commands...&amp;lt;br&amp;gt;&lt;br /&gt;
To set a break on execution, go to the line that you want to break on, and click in the vertical bar to the left(&amp;lt;) of the address you want to breakpoint.&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in RAM&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Memory...&amp;lt;br&amp;gt;&lt;br /&gt;
Enable the read and/or write check boxes, and right-click the memory space you want to set, unset, or change an access breakpoint on.&lt;br /&gt;
&lt;br /&gt;
Some games don&#039;t run in Nemu, so you may have to switch to this hook_log based emulator if you want the codes. The 1964 tracer can be useful, which is available [http://www.romhacking.net/utils/335/ here].&lt;br /&gt;
&lt;br /&gt;
The hook_log system is a little bit more demanding to use than a visual debugger, but with compatibility issues, it&#039;s better than lucky to have a second usable debugging emulator. The save-states can be decompressed, and loaded in their decompressed form if needed&lt;br /&gt;
&lt;br /&gt;
An issue with this emulator is that not all instructions are logged, but it&#039;s still worth knowing about for the fact that many instructions are logged, and it can be used with write logging.&lt;br /&gt;
&lt;br /&gt;
===Project64 debug build binary===&lt;br /&gt;
This emulator can be found [http://www.thegshi.org/downloads/Project64%20Build%2052%20Debug%20Binary.zip here].&lt;br /&gt;
&lt;br /&gt;
This version of the emulator has better support for games than Nemu64, and Ugetab used this tool in combination with nemu64 to edit USFs, as well as make a few codes that people using only a single emulation tool were having extremely hard struggles with.&lt;br /&gt;
&lt;br /&gt;
==Saturn==&lt;br /&gt;
===Yabause===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/482/ here].&lt;br /&gt;
&lt;br /&gt;
This is one of the few Saturn emulators out there.&lt;br /&gt;
&lt;br /&gt;
==Wonder Swan==&lt;br /&gt;
===Cygne Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/244/ here].&lt;br /&gt;
&lt;br /&gt;
A decent Tracing program.&lt;br /&gt;
&lt;br /&gt;
===Oswan Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/338/ here].&lt;br /&gt;
&lt;br /&gt;
This is just another hook-log tracer.&lt;br /&gt;
&lt;br /&gt;
==Playstation 2==&lt;br /&gt;
[The current author is too lazy to write this, but will get around to it later if no one else does]&lt;br /&gt;
&lt;br /&gt;
[[Category:Hacking and Game Info]]&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=SA1&amp;diff=4473</id>
		<title>SA1</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=SA1&amp;diff=4473"/>
		<updated>2010-03-25T05:34:59Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: Added a new mapping possibility to &amp;#039;Memory Mapping Comparison&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
The SNES SA1 chip is an expansion chip added to an SNES cart that both contains a portion of the game&#039;s coding, and executes that portion of code to affect normal SNES RAM, and the additional RAM accessed primarily by the SA1 chip programming. The additional RAM is also accessible by the SNES CPU&#039;s instructions.&lt;br /&gt;
&lt;br /&gt;
There is no current information concerning hardware-based tests with Game Genie codes that change portions of ROM residing within the SA1.&lt;br /&gt;
&lt;br /&gt;
== Memory Mapping Comparison ==&lt;br /&gt;
Region 30:0000 - 30:3FFF is SA1 related due to the fact that some RAM is 00 mapped for SA1-using games:&lt;br /&gt;
&lt;br /&gt;
Writes from the SNES CPU to 00:0000 - 00:3FFF region to change a mirrored region at 30:0000 - 30:3FFF region&lt;br /&gt;
&lt;br /&gt;
00:0000 - 00:3FFF&amp;lt;br&amp;gt;&lt;br /&gt;
30:0000 - 30:3FFF&lt;br /&gt;
&lt;br /&gt;
SA1 code such as &amp;quot;STA $DE&amp;quot; can access address 00:30DE, and show up in the log file as a line like...&amp;lt;br&amp;gt;&lt;br /&gt;
$C2:D286 85 DE . STA $DE . [$00:00DE]&lt;br /&gt;
&lt;br /&gt;
The above may not always hold true, but it should be known that not all addresses will appear exactly as expected.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SA1 Address:&lt;br /&gt;
Reads/Writes to these addresses from the SA1 CPU translate to the below CPU-accessible addresses in SNES memory&amp;lt;br&amp;gt;&lt;br /&gt;
00:4000 - 00:7FFF&amp;lt;br&amp;gt;&lt;br /&gt;
CPU Address:&amp;lt;br&amp;gt;&lt;br /&gt;
40:0000 - 40:3FFF&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jikkyuu Oshaberi Parodius has the following in the SNES native CPU as well:&amp;lt;br&amp;gt;&lt;br /&gt;
00:676C writes going to 40:076C&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SA1 Address Testing:&amp;lt;br&amp;gt;&lt;br /&gt;
If you wish to test writes made by the SA1 to memory, and see what area is changed, you can use the following code with Super Mario RPG (US), while in a 3D stage. You should fall through the ground, and be unaligned with the map, but have the value FE written to the address you chose.&lt;br /&gt;
&lt;br /&gt;
Test SA1 Memory Writes (2 byte addresses, 0xFE written)&amp;lt;br&amp;gt;&lt;br /&gt;
C9C374A9&amp;lt;br&amp;gt;&lt;br /&gt;
C9C375FE&amp;lt;br&amp;gt;&lt;br /&gt;
C9C378FF&amp;lt;br&amp;gt;&lt;br /&gt;
C9C3793F&lt;br /&gt;
&lt;br /&gt;
Load value 0x00FE to write(could be made to load a 2-byte value)&amp;lt;br&amp;gt;&lt;br /&gt;
C9C374A9&amp;lt;br&amp;gt;&lt;br /&gt;
C9C375FE&lt;br /&gt;
&lt;br /&gt;
Address to write to(Writes to 3FFF with these values)&amp;lt;br&amp;gt;&lt;br /&gt;
C9C378FF&amp;lt;br&amp;gt;&lt;br /&gt;
C9C3793F&lt;br /&gt;
&lt;br /&gt;
[[Category:Hacking and Game Info]]&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=4435</id>
		<title>Assembly Hacking</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=4435"/>
		<updated>2010-02-02T20:30:57Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: /* FCEU */  Added a link and notes on FCEUX&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Assembly hacking is the art of editing a compiled program. Without the source code, and without notes from the source code, one has to deduce almost everything about the underlying code, and how it works with RAM.&lt;br /&gt;
&lt;br /&gt;
There are several emulators that can aid one in creating a modification for a game. Games for console systems fall into the category of compiled programs, and generally, the source code is unavailable for these games.&lt;br /&gt;
&lt;br /&gt;
The use of making an assembly hack for a game can be found with the Nintendo Entertainment System (NES) [[Game Genie]].&lt;br /&gt;
&lt;br /&gt;
The codes that are entered into an NES Game Genie represent single-byte assembly hacks. Any assembly hack that could be done with a change of 3 bytes or less is possible to implement with a single Game Genie. The SNES Game Genie allows up to 5 codes, and 5 bytes of change. While this makes the possible usage of codes very limiting, it didn&#039;t prevent single-byte invincibility and infinite lives codes from appearing that could make it unnecessary to use additional codes.&lt;br /&gt;
&lt;br /&gt;
For more modern assembly hacking of the same systems, emulators that support 50 or more codes for any given game aren&#039;t uncommon. The ROMs have been turned into files that can be patched with all the changes needed to give the game a script in a new language. Emulators that aid in the process of making assembly hacks have appeared for many different emulated systems. The effect is that more people are now capable of starting their own projects, and existing projects can be modified and/or repaired more easily.&lt;br /&gt;
&lt;br /&gt;
=Emulators=&lt;br /&gt;
&lt;br /&gt;
==NES==&lt;br /&gt;
===FCEU===&lt;br /&gt;
[http://fceux.com FCEUX] is the most up-to-date version of the FCEU* line of builds. It has taken several lines of FCEU offshoots and combined them into a single application. Even I(ugetab) have had the opportunity to contribute code, changes and fixes to it. If you were having trouble with any games while using FCEUXDSP, you can try FCEUX. If FCEUX has trouble with games, you can report the issue and, if someone gets interested in fixing it, you may end up seeing it repaired. It is currently compatible with FCEUXDSP&#039;s debugger files. If you want to use FCEUXDSP, see below.&lt;br /&gt;
&lt;br /&gt;
[http://www.the-interweb.com/serendipity/index.php?/categories/9-FCEUXD-SP FCEUXDSP] is the result of an emulator first developed by Parasyte called FCEUD, which was then picked up by bbitmaster and renamed to FCEUXD, and finally adopted as FCEUXD SP.&lt;br /&gt;
&lt;br /&gt;
====Setting breakpoints in ROM/RAM====&lt;br /&gt;
Tools&amp;gt;Debug&lt;br /&gt;
&lt;br /&gt;
In the breakpoint window, &#039;Add&#039; the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
ROM is 8000-FFFF&amp;lt;br&amp;gt;&lt;br /&gt;
RAM is 0000-07FF, 6000-7FFF&amp;lt;br&amp;gt;&lt;br /&gt;
0800-3FFF is mirrored from some part of RAM.&amp;lt;br&amp;gt;&lt;br /&gt;
4000-4015 can be breakpointed if working on an NSF. If you want to use this to deal with NSFs, try Ugetabs [http://www.angelfire.com/nc/ugetab edited version], which tends to play nicer with them&lt;br /&gt;
&lt;br /&gt;
&#039;Hex Editor&#039; is a memory viewer/modifier.&lt;br /&gt;
&lt;br /&gt;
==SNES==&lt;br /&gt;
===Geiger&#039;s SNES9X Debugger===&lt;br /&gt;
This emulator can be found at [http://geigercount.net/crypt/ Geiger&#039;s Crypt] and [http://www.zophar.net/snes/geiger-s-snes9x-debugger.html Zophar&#039;s Domain - Geiger’s Snes9x Debugger].&lt;br /&gt;
&lt;br /&gt;
====Setting breakpoints in ROM/RAM====&lt;br /&gt;
Open ROM, Click &#039;Breakpoints&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
In the breakpoint window, enter the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
Standard RAM: 7E0000 - 7FFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
SA1 RAM: 400000-407FFF, 303000-303FFF&amp;lt;br&amp;gt;&lt;br /&gt;
HiROM - C00000 - FFFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
LoROM - 808000-BFFFFF (**0000 - **7FFF doesn&#039;t exist)&lt;br /&gt;
&lt;br /&gt;
If you use the [[SA1]] logger with an SA1-using game, and wish to find an address that changed an address in RAM, you can see if the conversion chart on the [[SA1]] page shows you the address to search for in the log file.&lt;br /&gt;
&lt;br /&gt;
===FuSoYa&#039;s SNES9X SuperFX Instruction Logger===&lt;br /&gt;
This emulator can be found [http://www.gshi.org/downloads/snes9x1.43-FuSoYa-SFX_B2.zip here].&lt;br /&gt;
&lt;br /&gt;
This emulator allows you to log SuperFX instructions being used by the emulator.&lt;br /&gt;
&lt;br /&gt;
Press the NumLock button to start/stop logging.&lt;br /&gt;
&lt;br /&gt;
Instructions will be logged to sfx_trace.txt, in the folder with the emulator.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s an example on how to interpret the results:&amp;lt;br&amp;gt;&lt;br /&gt;
00:e834 40       ldw (r0)        r0=$0058 SRAM=00:5AAE&amp;lt;br&amp;gt;&lt;br /&gt;
00:e835 64       sub r4          r0=$0055 CY=1&lt;br /&gt;
&lt;br /&gt;
First line Loads Word (SRAM=00:5AAE) to (r0). In Geiger&#039;s SNES9X Debugger, this is address 705AAE in the RAM viewer. In ZSNES, you can find this in a save-state at 0x4127F + 0x5AAE (= 0x46D2D). The result of this operation is on the same line.&lt;br /&gt;
&lt;br /&gt;
Second line subtracts (r4) from (r0). This next result is on the same line as well. This can be coded out to give you Infinite Health in Doom, but it won&#039;t work as a Game Genie code. The file address would be either 6835 or 6A35. Only one address of those 2 will be 0x64.&lt;br /&gt;
&lt;br /&gt;
==Genesis==&lt;br /&gt;
&lt;br /&gt;
===Regen Debugger Build===&lt;br /&gt;
This emulator can be found [http://aamirm.hacking-cult.org/ here]&lt;br /&gt;
&lt;br /&gt;
Backup: [http://www.gshi.org/downloads/Regen095D.zip Regen 0.95 Debugger]&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve used FCEUXDSP, Geiger&#039;s Snes9x, BGB, Nemu08, pSX, or pretty much any other active debugger, you&#039;ll realize that this is along the same lines of those debuggers. This is certainly what Genesis hackers have been waiting for when it comes to a user friendly debugger.&lt;br /&gt;
&lt;br /&gt;
It runs Genesis, Game Gear, and SMS files, but only debugs Genesis at the moment. Use [[#Emukon]] if you want to hack Game Gear or SMS.&lt;br /&gt;
&lt;br /&gt;
===Gens Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/337/ here].&lt;br /&gt;
&lt;br /&gt;
No breakpoints, but adequate tracing. A guide has been written on the specific usage of the emulator.&lt;br /&gt;
&lt;br /&gt;
The idea is that you can trace-log writes to and reads from memory, and you can also log all commands, and determine what&#039;s happening from the full log, by using what you find from the hook logging.&lt;br /&gt;
&lt;br /&gt;
===HazeMD===&lt;br /&gt;
This emulator can be found at [http://haze.mameworld.info/ this address].&lt;br /&gt;
&lt;br /&gt;
This emulator is harder to get setup to use a ROM, but comes with a MAME-style debugger. MAME&#039;s debugger is well known for being so powerful, considering the number of systems it can be used with when compiled into a build of MAME. The Gens tracer tends to have slightly better compatibility, while the HazeMD emulator has more potential for cheat codes, already having a Cheat system designed to handle multiple CPUs, which could be used for 32x game ROM hacks, and RAM hacks.&lt;br /&gt;
&lt;br /&gt;
==Gameboy==&lt;br /&gt;
===BGB===&lt;br /&gt;
This emulator can be found [http://bgb.bircd.org/ here]&lt;br /&gt;
&lt;br /&gt;
Load a ROM, and right-click the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debug mode enabled: to enable debugging&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debugger to enter the debugger&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in ROM/RAM&amp;lt;br&amp;gt;&lt;br /&gt;
In the debugger window:&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;breakpoints for execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;access breakpoints for read/write breaks.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Visual Boy Advance Tracer===&lt;br /&gt;
See [[#Visual_Boy_Advance_Tracer_2]]&lt;br /&gt;
&lt;br /&gt;
==PC Engine / Turbo-Grafx 16==&lt;br /&gt;
===Mednafen===&lt;br /&gt;
This emulator can be found [http://mednafen.sourceforge.net/ here]&lt;br /&gt;
&lt;br /&gt;
Esc = Exit Mednafen (Careful about it)&lt;br /&gt;
&lt;br /&gt;
To use F12 to quit, and not the ESC key, edit this in mednafen.cfg:&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;quot;;Exit&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;command.exit keyboard 293~keyboard 27&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
To this:&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;quot;;Exit&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;command.exit keyboard 293&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
F5 = Save State&amp;lt;br&amp;gt;&lt;br /&gt;
F7 = Load State&amp;lt;br&amp;gt;&lt;br /&gt;
0-9 = Select Save Slot&lt;br /&gt;
&lt;br /&gt;
F10 = Reset&amp;lt;br&amp;gt;&lt;br /&gt;
F11 = Hard Reset (Power Switch style)&lt;br /&gt;
&lt;br /&gt;
Alt + D = Toggle Debugger&lt;br /&gt;
&lt;br /&gt;
In Debugger:&amp;lt;br&amp;gt;&lt;br /&gt;
Alt+1 = CPU debugger view&amp;lt;br&amp;gt;&lt;br /&gt;
Alt+3 = Memory editor&amp;lt;br&amp;gt;&lt;br /&gt;
R = Run&amp;lt;br&amp;gt;&lt;br /&gt;
S = Step&amp;lt;br&amp;gt;&lt;br /&gt;
Return = Goto Address(If on code)/Edit(If on register) (Type new values after original, press enter. Quicker.)&amp;lt;br&amp;gt;&lt;br /&gt;
Space = Set/Unset Execution Breakpoint&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + Return = Edit watch address&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + R = Edit Read Breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + W = Edit write breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + O = Opcode Breakpoints (Enter EA for &amp;quot;NOP&amp;quot;, etc. Use 6502 ASM table mainly)&lt;br /&gt;
&lt;br /&gt;
See included Debugger.html file for complete command list&lt;br /&gt;
&lt;br /&gt;
==Game Gear==&lt;br /&gt;
===Emukon===&lt;br /&gt;
This emulator can be found [http://emukon.kontechs.de/ here].&lt;br /&gt;
&lt;br /&gt;
Backup: [http://www.gshi.org/downloads/Emukon105.zip Emukon 1.05]&lt;br /&gt;
&lt;br /&gt;
This is basically a friendlier style of Logging Debugger the way I tend to use it, with Breakpoints to help figure out how code you find operates. I&#039;ve used it to at least as much success as I&#039;ve used the Hook_log debuggers, only this was more boring because I didn&#039;t have to fight with the emulator as much.&lt;br /&gt;
&lt;br /&gt;
You can use a combination of Breakpoints and Log Files to debug games.&lt;br /&gt;
&lt;br /&gt;
Breakpoints have their own management window, or you can right click lines in the debugger.&lt;br /&gt;
&lt;br /&gt;
To use the log files effectively, you should focus on a single byte with a known effect, get to about where the setting you&#039;re looking for will change, go to the Debugger &amp;gt; Debugger menu, enable it if needed, then click the Clear Log button if you want a fresh start, and the Log button to start logging. Get the thing changed that you want, and then look under the DebugLogs folder for the game you&#039;re working on, and search the text logs for the address you want to check, whether it&#039;s the execution address by some chance or the memory address. Breakpoints and Logging work well together to discover the execution path to a piece of code.&lt;br /&gt;
&lt;br /&gt;
It&#039;s not as exceedingly simple as some other debuggers, but it&#039;s quite useful, and it&#039;s my first choice for hacking Game Gear as well as SMS.&lt;br /&gt;
&lt;br /&gt;
==Master System==&lt;br /&gt;
===Emukon===&lt;br /&gt;
See Game Gear section: [[#Emukon]]&lt;br /&gt;
&lt;br /&gt;
==Gameboy Advance==&lt;br /&gt;
===Visual Boy Advance Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/340/ here].&lt;br /&gt;
&lt;br /&gt;
This emulator uses the Hook Log system. Those familiar with the hook_log Genesis or N64 emulators should have little trouble adapting to this system.&lt;br /&gt;
&lt;br /&gt;
Note that it has also been used to good effect for a small number of gameboy games that BGB doesn&#039;t support. [[Ugetab]] used this for GBS ripping, but with full code logging, and a save-state near when something changes, you could just as effectively search for a memory address in trace.log. Mind that while GB assembly doesn&#039;t pile up as quickly as GBA or N64, and it is still necessary to be relatively close to the change before activating logging, if you don&#039;t want to have to use a special text editor to open an enormous log file. &lt;br /&gt;
&lt;br /&gt;
===Visual Boy Advance===&lt;br /&gt;
This emulator can be found at [http://vba.ngemu.com/downloads.shtml this address].&lt;br /&gt;
&lt;br /&gt;
Windows - SDL is required. Unfortunately, no cheat device exists that can change the assembly, so hacking it is more a matter of patching the ROM, and less a matter of using it for simple cheats. Not documented.&lt;br /&gt;
&lt;br /&gt;
==Playstation==&lt;br /&gt;
===PCSX 1.5 With Debugger===&lt;br /&gt;
This emulator is available [http://www.romhacking.net/utils/267/ here].&lt;br /&gt;
&lt;br /&gt;
Press F11 to enter the debugger. On-screen aids should be apparent.&lt;br /&gt;
&lt;br /&gt;
===PSX===&lt;br /&gt;
This emulator can be found at [http://www.romhacking.net/utils/311/ this address].&lt;br /&gt;
&lt;br /&gt;
This can be a decent debugging alternative if a game doesn&#039;t work well in the above emulator.&lt;br /&gt;
&lt;br /&gt;
===PCSX Agemo debugger===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/475/ here].&lt;br /&gt;
&lt;br /&gt;
It could be favorable for some tasks, compared to the other debuggers.&lt;br /&gt;
&lt;br /&gt;
==N64==&lt;br /&gt;
===Nemu64===&lt;br /&gt;
This emulator can be found [http://www.emulator-zone.com/doc.php/n64/nemu64.html here]&lt;br /&gt;
&lt;br /&gt;
Setting execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Commands...&amp;lt;br&amp;gt;&lt;br /&gt;
To set a break on execution, go to the line that you want to break on, and click in the vertical bar to the left(&amp;lt;) of the address you want to breakpoint.&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in RAM&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Memory...&amp;lt;br&amp;gt;&lt;br /&gt;
Enable the read and/or write check boxes, and right-click the memory space you want to set, unset, or change an access breakpoint on.&lt;br /&gt;
&lt;br /&gt;
Some games don&#039;t run in Nemu, so you may have to switch to this hook_log based emulator if you want the codes. The 1964 tracer can be useful, which is available [http://www.romhacking.net/utils/335/ here].&lt;br /&gt;
&lt;br /&gt;
The hook_log system is a little bit more demanding to use than a visual debugger, but with compatibility issues, it&#039;s better than lucky to have a second usable debugging emulator. The save-states can be decompressed, and loaded in their decompressed form if needed&lt;br /&gt;
&lt;br /&gt;
An issue with this emulator is that not all instructions are logged, but it&#039;s still worth knowing about for the fact that many instructions are logged, and it can be used with write logging.&lt;br /&gt;
&lt;br /&gt;
===Project64 debug build binary===&lt;br /&gt;
This emulator can be found [http://www.thegshi.org/downloads/Project64%20Build%2052%20Debug%20Binary.zip here].&lt;br /&gt;
&lt;br /&gt;
This version of the emulator has better support for games than Nemu64, and Ugetab used this tool in combination with nemu64 to edit USFs, as well as make a few codes that people using only a single emulation tool were having extremely hard struggles with.&lt;br /&gt;
&lt;br /&gt;
==Saturn==&lt;br /&gt;
===Yabause===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/482/ here].&lt;br /&gt;
&lt;br /&gt;
This is one of the few Saturn emulators out there.&lt;br /&gt;
&lt;br /&gt;
==Wonder Swan==&lt;br /&gt;
===Cygne Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/244/ here].&lt;br /&gt;
&lt;br /&gt;
A decent Tracing program.&lt;br /&gt;
&lt;br /&gt;
===Oswan Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/338/ here].&lt;br /&gt;
&lt;br /&gt;
This is just another hook-log tracer.&lt;br /&gt;
&lt;br /&gt;
==Playstation 2==&lt;br /&gt;
[The current author is too lazy to write this, but will get around to it later if no one else does]&lt;br /&gt;
&lt;br /&gt;
[[Category:Hacking and Game Info]]&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Music_Ripping&amp;diff=4402</id>
		<title>Music Ripping</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Music_Ripping&amp;diff=4402"/>
		<updated>2009-08-29T01:37:11Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: /* NES - NSF (Nintendo Sound Format) */  Fleshed out DPCM a bit. Good reference info.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is just a basic set of quick-start info for getting into any given format that someone is willing to provide information for.&lt;br /&gt;
&lt;br /&gt;
It&#039;s not meant to be comprehensive, but just informative enough to give you something to quickly refer to until you can easily recall the basic information for actually finding the addresses.&lt;br /&gt;
&lt;br /&gt;
Debugger-specific information can normally be found on the [[Assembly Hacking]] page.&lt;br /&gt;
&lt;br /&gt;
I use the following code set distinctions:&amp;lt;br&amp;gt;&lt;br /&gt;
Sound Init (Basic register initialization. Often close to Song Init and/or Play address. Not all games use a distinctive Sound Init. Some run Play once or several times before running Song Init to achieve Sound Init)&amp;lt;br&amp;gt;&lt;br /&gt;
Song Init (If you feed this address the right number in the right register, sounds or music are played by the Play routine)&amp;lt;br&amp;gt;&lt;br /&gt;
Play (Executes the sound generation code, also good if you enter this by using sound registers and find RAM addresses related to sound to breakpoint for Song Init)&lt;br /&gt;
&lt;br /&gt;
==NES - NSF (Nintendo Sound Format)==&lt;br /&gt;
I suggest FCEUXDSP: [[Assembly_Hacking#FCEU]]&lt;br /&gt;
&lt;br /&gt;
$4000-$4009 = Sound Registers (Good for finding Play)&amp;lt;br&amp;gt;&lt;br /&gt;
$4010-$4013 = DMC / DPCM (This is a tricky addon. References info from $C000-$FFFF, and FCEUXDSP won&#039;t catch it reading this data unless you break on writes to $4012 for the start position &#039;0x40 * value + 0xC000&#039; and/or $4013 for length &#039;(0x10 * value) + 1&#039;)&amp;lt;br&amp;gt;&lt;br /&gt;
$4015 = Channel Select (Good for finding Sound Init, sometimes Play)&amp;lt;br&amp;gt;&lt;br /&gt;
$4017 = Frame Cycle/Interrupt (If this is written once, write it once in the NSF with the value written. If it&#039;s written once for every time play is run, do that in the NSF. Match in the NSF any setup used in the original game. Games sound a bit off if you don&#039;t, and you might not notice on your own)&lt;br /&gt;
&lt;br /&gt;
==Gameboy - GBS (Gameboy Sound Format)==&lt;br /&gt;
I suggest BGB: [[Assembly_Hacking#BGB]]&lt;br /&gt;
&lt;br /&gt;
$FF24 = Volume (Good for finding Sound Init, sometimes Play)&amp;lt;br&amp;gt;&lt;br /&gt;
$FF25 = L/R (00 often means a failed init. Visible in BGB)&amp;lt;br&amp;gt;&lt;br /&gt;
$FF26 = Channel On/Off (00 often means a failed init. Visible in BGB)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$FF13 = A good register to find Play with (Try $FF18/$FF1D/$FF22 if it doesn&#039;t break on $FF13)&lt;br /&gt;
&lt;br /&gt;
$FF10-$FF23 Sound Register spread&lt;br /&gt;
&lt;br /&gt;
==PC Engine / Turbo-Grafx 16 - HES (Hudson Entertainment System)==&lt;br /&gt;
I suggest Mednafen: [[Assembly_Hacking#Mednafen]]&lt;br /&gt;
&lt;br /&gt;
[http://pages.interlog.com/~daves/pce_info/pcesound.txt Source for below]&lt;br /&gt;
&lt;br /&gt;
$0800 = Voice Select (Good for sound init)&amp;lt;br&amp;gt;&lt;br /&gt;
$0801 = Main Volume (Probably also good for sound init)&amp;lt;br&amp;gt;&lt;br /&gt;
$0802 - Frequency (low)&amp;lt;br&amp;gt;&lt;br /&gt;
$0803 - Frequency (high)&amp;lt;br&amp;gt;&lt;br /&gt;
$0804 - Channel on/dda/volume - voice-dependent register&amp;lt;br&amp;gt;&lt;br /&gt;
$0805 - Pan volume (&#039;balance&#039;) - voice-dependent register&amp;lt;br&amp;gt;&lt;br /&gt;
$0806 - Wave data&amp;lt;br&amp;gt;&lt;br /&gt;
$0807 = Note Frequency (Good for finding Play, which is itself good for finding Song Init by matching up to Sound RAM Addresses)&amp;lt;br&amp;gt;&lt;br /&gt;
$0808 - LFO Frequency&amp;lt;br&amp;gt;&lt;br /&gt;
$0809 - LFO Control&lt;br /&gt;
&lt;br /&gt;
==N64 - USF (Ultra 64 Sound Format)==&lt;br /&gt;
I primarily suggest NEmu64: [[Assembly_Hacking#Nemu64]]&lt;br /&gt;
&lt;br /&gt;
This is a considerably different bag of tricks to use.&lt;br /&gt;
&lt;br /&gt;
I&#039;ve written out a decent guide, and even put together some tool modifications to make the job easier. Check out usfbegin.txt for more in-depth info. The folder with this info is [http://www.gshi.org/ugetab/USF/ here]&lt;br /&gt;
&lt;br /&gt;
AM_RANGE(0x04500000, 0x045fffff) AM_READWRITE(n64_ai_reg_r, n64_ai_reg_w) // Audio Interface&lt;br /&gt;
&lt;br /&gt;
04500004 = When you hit this, step out until you&#039;re in an infinite loop, and you should be in the Play thread. Mark it down as such, so you know not to disable it completely.&lt;br /&gt;
&lt;br /&gt;
If you break on the opcode &amp;quot;ERET&amp;quot;, then you can fairly easily build a list of threads to crash-test, until you&#039;ve killed off all of them that won&#039;t kill the music.&lt;br /&gt;
&lt;br /&gt;
Finding music inits is considerably tougher in N64 coding. I usually brute-force my way. Play through the Play routine to find RAM, use File2File methods, sometimes both... Not exactly a walk in the park, but it&#039;s the best I&#039;ve found, and it&#039;s just for the Init code that this needs to be done. Sound Tests make this a lot easier, because the value has to get from the temporary one in RAM to the sound routine in some fashion, and the temporary one used in a sound test is considerably easier to find with File2File and track through code than the pure coding method is.&lt;br /&gt;
&lt;br /&gt;
04040010 is written to for DList events. In Kirby64, it uses 00002B00 for this. This can help you remove graphics processing code. Note that not all writes to this are for graphics, and can crash the music if accesses are just outright removed.&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Music_Ripping&amp;diff=4401</id>
		<title>Music Ripping</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Music_Ripping&amp;diff=4401"/>
		<updated>2009-08-28T20:28:42Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: Tagged HES with the acronym meaning&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is just a basic set of quick-start info for getting into any given format that someone is willing to provide information for.&lt;br /&gt;
&lt;br /&gt;
It&#039;s not meant to be comprehensive, but just informative enough to give you something to quickly refer to until you can easily recall the basic information for actually finding the addresses.&lt;br /&gt;
&lt;br /&gt;
Debugger-specific information can normally be found on the [[Assembly Hacking]] page.&lt;br /&gt;
&lt;br /&gt;
I use the following code set distinctions:&amp;lt;br&amp;gt;&lt;br /&gt;
Sound Init (Basic register initialization. Often close to Song Init and/or Play address. Not all games use a distinctive Sound Init. Some run Play once or several times before running Song Init to achieve Sound Init)&amp;lt;br&amp;gt;&lt;br /&gt;
Song Init (If you feed this address the right number in the right register, sounds or music are played by the Play routine)&amp;lt;br&amp;gt;&lt;br /&gt;
Play (Executes the sound generation code, also good if you enter this by using sound registers and find RAM addresses related to sound to breakpoint for Song Init)&lt;br /&gt;
&lt;br /&gt;
==NES - NSF (Nintendo Sound Format)==&lt;br /&gt;
I suggest FCEUXDSP: [[Assembly_Hacking#FCEU]]&lt;br /&gt;
&lt;br /&gt;
$4000-$4009 = Sound Registers (Good for finding Play)&amp;lt;br&amp;gt;&lt;br /&gt;
$4010-$4013 = DMC / DPCM (This is a tricky addon. References info from $C000-$FFFF, and FCEUXDSP won&#039;t catch it reading this data unless you break on $4012/$4013 writes here)&amp;lt;br&amp;gt;&lt;br /&gt;
$4015 = Channel Select (Good for finding Sound Init, sometimes Play)&amp;lt;br&amp;gt;&lt;br /&gt;
$4017 = Frame Cycle/Interrupt (If this is written once, write it once in the NSF with the value written. If it&#039;s written once for every time play is run, do that in the NSF. Match in the NSF any setup used in the original game. Games sound a bit off if you don&#039;t, and you might not notice on your own)&lt;br /&gt;
&lt;br /&gt;
==Gameboy - GBS (Gameboy Sound Format)==&lt;br /&gt;
I suggest BGB: [[Assembly_Hacking#BGB]]&lt;br /&gt;
&lt;br /&gt;
$FF24 = Volume (Good for finding Sound Init, sometimes Play)&amp;lt;br&amp;gt;&lt;br /&gt;
$FF25 = L/R (00 often means a failed init. Visible in BGB)&amp;lt;br&amp;gt;&lt;br /&gt;
$FF26 = Channel On/Off (00 often means a failed init. Visible in BGB)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$FF13 = A good register to find Play with (Try $FF18/$FF1D/$FF22 if it doesn&#039;t break on $FF13)&lt;br /&gt;
&lt;br /&gt;
$FF10-$FF23 Sound Register spread&lt;br /&gt;
&lt;br /&gt;
==PC Engine / Turbo-Grafx 16 - HES (Hudson Entertainment System)==&lt;br /&gt;
I suggest Mednafen: [[Assembly_Hacking#Mednafen]]&lt;br /&gt;
&lt;br /&gt;
[http://pages.interlog.com/~daves/pce_info/pcesound.txt Source for below]&lt;br /&gt;
&lt;br /&gt;
$0800 = Voice Select (Good for sound init)&amp;lt;br&amp;gt;&lt;br /&gt;
$0801 = Main Volume (Probably also good for sound init)&amp;lt;br&amp;gt;&lt;br /&gt;
$0802 - Frequency (low)&amp;lt;br&amp;gt;&lt;br /&gt;
$0803 - Frequency (high)&amp;lt;br&amp;gt;&lt;br /&gt;
$0804 - Channel on/dda/volume - voice-dependent register&amp;lt;br&amp;gt;&lt;br /&gt;
$0805 - Pan volume (&#039;balance&#039;) - voice-dependent register&amp;lt;br&amp;gt;&lt;br /&gt;
$0806 - Wave data&amp;lt;br&amp;gt;&lt;br /&gt;
$0807 = Note Frequency (Good for finding Play, which is itself good for finding Song Init by matching up to Sound RAM Addresses)&amp;lt;br&amp;gt;&lt;br /&gt;
$0808 - LFO Frequency&amp;lt;br&amp;gt;&lt;br /&gt;
$0809 - LFO Control&lt;br /&gt;
&lt;br /&gt;
==N64 - USF (Ultra 64 Sound Format)==&lt;br /&gt;
I primarily suggest NEmu64: [[Assembly_Hacking#Nemu64]]&lt;br /&gt;
&lt;br /&gt;
This is a considerably different bag of tricks to use.&lt;br /&gt;
&lt;br /&gt;
I&#039;ve written out a decent guide, and even put together some tool modifications to make the job easier. Check out usfbegin.txt for more in-depth info. The folder with this info is [http://www.gshi.org/ugetab/USF/ here]&lt;br /&gt;
&lt;br /&gt;
AM_RANGE(0x04500000, 0x045fffff) AM_READWRITE(n64_ai_reg_r, n64_ai_reg_w) // Audio Interface&lt;br /&gt;
&lt;br /&gt;
04500004 = When you hit this, step out until you&#039;re in an infinite loop, and you should be in the Play thread. Mark it down as such, so you know not to disable it completely.&lt;br /&gt;
&lt;br /&gt;
If you break on the opcode &amp;quot;ERET&amp;quot;, then you can fairly easily build a list of threads to crash-test, until you&#039;ve killed off all of them that won&#039;t kill the music.&lt;br /&gt;
&lt;br /&gt;
Finding music inits is considerably tougher in N64 coding. I usually brute-force my way. Play through the Play routine to find RAM, use File2File methods, sometimes both... Not exactly a walk in the park, but it&#039;s the best I&#039;ve found, and it&#039;s just for the Init code that this needs to be done. Sound Tests make this a lot easier, because the value has to get from the temporary one in RAM to the sound routine in some fashion, and the temporary one used in a sound test is considerably easier to find with File2File and track through code than the pure coding method is.&lt;br /&gt;
&lt;br /&gt;
04040010 is written to for DList events. In Kirby64, it uses 00002B00 for this. This can help you remove graphics processing code. Note that not all writes to this are for graphics, and can crash the music if accesses are just outright removed.&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=4400</id>
		<title>Assembly Hacking</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=4400"/>
		<updated>2009-08-27T15:41:24Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: /* Mednafen */ F12 exited by default. Changed the settings to just remove escape from use&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Assembly hacking is the art of editing a compiled program. Without the source code, and without notes from the source code, one has to deduce almost everything about the underlying code, and how it works with RAM.&lt;br /&gt;
&lt;br /&gt;
There are several emulators that can aid one in creating a modification for a game. Games for console systems fall into the category of compiled programs, and generally, the source code is unavailable for these games.&lt;br /&gt;
&lt;br /&gt;
The use of making an assembly hack for a game can be found with the Nintendo Entertainment System (NES) [[Game Genie]].&lt;br /&gt;
&lt;br /&gt;
The codes that are entered into an NES Game Genie represent single-byte assembly hacks. Any assembly hack that could be done with a change of 3 bytes or less is possible to implement with a single Game Genie. The SNES Game Genie allows up to 5 codes, and 5 bytes of change. While this makes the possible usage of codes very limiting, it didn&#039;t prevent single-byte invincibility and infinite lives codes from appearing that could make it unnecessary to use additional codes.&lt;br /&gt;
&lt;br /&gt;
For more modern assembly hacking of the same systems, emulators that support 50 or more codes for any given game aren&#039;t uncommon. The ROMs have been turned into files that can be patched with all the changes needed to give the game a script in a new language. Emulators that aid in the process of making assembly hacks have appeared for many different emulated systems. The effect is that more people are now capable of starting their own projects, and existing projects can be modified and/or repaired more easily.&lt;br /&gt;
&lt;br /&gt;
=Emulators=&lt;br /&gt;
&lt;br /&gt;
==NES==&lt;br /&gt;
===FCEU===&lt;br /&gt;
[http://www.the-interweb.com/serendipity/index.php?/categories/9-FCEUXD-SP FCEUXDSP] is the result of a emulator first developed by Parasyte called FCEUD, which was then picked up by bbitmaster and renamed to FCEUXD, and finally adopted as FCEUXD SP.&lt;br /&gt;
&lt;br /&gt;
====Setting breakpoints in ROM/RAM====&lt;br /&gt;
Tools&amp;gt;Debug&lt;br /&gt;
&lt;br /&gt;
In the breakpoint window, &#039;Add&#039; the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
ROM is 8000-FFFF&amp;lt;br&amp;gt;&lt;br /&gt;
RAM is 0000-07FF, 6000-7FFF&amp;lt;br&amp;gt;&lt;br /&gt;
0800-3FFF is mirrored from some part of RAM.&amp;lt;br&amp;gt;&lt;br /&gt;
4000-4015 can be breakpointed if working on an NSF. If you want to use this to deal with NSFs, try Ugetabs [http://www.angelfire.com/nc/ugetab edited version], which tends to play nicer with them&lt;br /&gt;
&lt;br /&gt;
&#039;Hex Editor&#039; is a memory viewer/modifier.&lt;br /&gt;
&lt;br /&gt;
==SNES==&lt;br /&gt;
===Geiger&#039;s SNES9X Debugger===&lt;br /&gt;
This emulator can be found at [http://geigercount.net/crypt/ Geiger&#039;s Crypt] and [http://www.zophar.net/snes/geiger-s-snes9x-debugger.html Zophar&#039;s Domain - Geiger’s Snes9x Debugger].&lt;br /&gt;
&lt;br /&gt;
====Setting breakpoints in ROM/RAM====&lt;br /&gt;
Open ROM, Click &#039;Breakpoints&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
In the breakpoint window, enter the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
Standard RAM: 7E0000 - 7FFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
SA1 RAM: 400000-407FFF, 303000-303FFF&amp;lt;br&amp;gt;&lt;br /&gt;
HiROM - C00000 - FFFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
LoROM - 808000-BFFFFF (**0000 - **7FFF doesn&#039;t exist)&lt;br /&gt;
&lt;br /&gt;
If you use the [[SA1]] logger with an SA1-using game, and wish to find an address that changed an address in RAM, you can see if the conversion chart on the [[SA1]] page shows you the address to search for in the log file.&lt;br /&gt;
&lt;br /&gt;
===FuSoYa&#039;s SNES9X SuperFX Instruction Logger===&lt;br /&gt;
This emulator can be found [http://www.gshi.org/downloads/snes9x1.43-FuSoYa-SFX_B2.zip here].&lt;br /&gt;
&lt;br /&gt;
This emulator allows you to log SuperFX instructions being used by the emulator.&lt;br /&gt;
&lt;br /&gt;
Press the NumLock button to start/stop logging.&lt;br /&gt;
&lt;br /&gt;
Instructions will be logged to sfx_trace.txt, in the folder with the emulator.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s an example on how to interpret the results:&amp;lt;br&amp;gt;&lt;br /&gt;
00:e834 40       ldw (r0)        r0=$0058 SRAM=00:5AAE&amp;lt;br&amp;gt;&lt;br /&gt;
00:e835 64       sub r4          r0=$0055 CY=1&lt;br /&gt;
&lt;br /&gt;
First line Loads Word (SRAM=00:5AAE) to (r0). In Geiger&#039;s SNES9X Debugger, this is address 705AAE in the RAM viewer. In ZSNES, you can find this in a save-state at 0x4127F + 0x5AAE (= 0x46D2D). The result of this operation is on the same line.&lt;br /&gt;
&lt;br /&gt;
Second line subtracts (r4) from (r0). This next result is on the same line as well. This can be coded out to give you Infinite Health in Doom, but it won&#039;t work as a Game Genie code. The file address would be either 6835 or 6A35. Only one address of those 2 will be 0x64.&lt;br /&gt;
&lt;br /&gt;
==Genesis==&lt;br /&gt;
&lt;br /&gt;
===Regen Debugger Build===&lt;br /&gt;
This emulator can be found [http://aamirm.hacking-cult.org/ here]&lt;br /&gt;
&lt;br /&gt;
Backup: [http://www.gshi.org/downloads/Regen095D.zip Regen 0.95 Debugger]&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve used FCEUXDSP, Geiger&#039;s Snes9x, BGB, Nemu08, pSX, or pretty much any other active debugger, you&#039;ll realize that this is along the same lines of those debuggers. This is certainly what Genesis hackers have been waiting for when it comes to a user friendly debugger.&lt;br /&gt;
&lt;br /&gt;
It runs Genesis, Game Gear, and SMS files, but only debugs Genesis at the moment. Use [[#Emukon]] if you want to hack Game Gear or SMS.&lt;br /&gt;
&lt;br /&gt;
===Gens Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/337/ here].&lt;br /&gt;
&lt;br /&gt;
No breakpoints, but adequate tracing. A guide has been written on the specific usage of the emulator.&lt;br /&gt;
&lt;br /&gt;
The idea is that you can trace-log writes to and reads from memory, and you can also log all commands, and determine what&#039;s happening from the full log, by using what you find from the hook logging.&lt;br /&gt;
&lt;br /&gt;
===HazeMD===&lt;br /&gt;
This emulator can be found at [http://haze.mameworld.info/ this address].&lt;br /&gt;
&lt;br /&gt;
This emulator is harder to get setup to use a ROM, but comes with a MAME-style debugger. MAME&#039;s debugger is well known for being so powerful, considering the number of systems it can be used with when compiled into a build of MAME. The Gens tracer tends to have slightly better compatibility, while the HazeMD emulator has more potential for cheat codes, already having a Cheat system designed to handle multiple CPUs, which could be used for 32x game ROM hacks, and RAM hacks.&lt;br /&gt;
&lt;br /&gt;
==Gameboy==&lt;br /&gt;
===BGB===&lt;br /&gt;
This emulator can be found [http://bgb.bircd.org/ here]&lt;br /&gt;
&lt;br /&gt;
Load a ROM, and right-click the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debug mode enabled: to enable debugging&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debugger to enter the debugger&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in ROM/RAM&amp;lt;br&amp;gt;&lt;br /&gt;
In the debugger window:&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;breakpoints for execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;access breakpoints for read/write breaks.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Visual Boy Advance Tracer===&lt;br /&gt;
See [[#Visual_Boy_Advance_Tracer_2]]&lt;br /&gt;
&lt;br /&gt;
==PC Engine / Turbo-Grafx 16==&lt;br /&gt;
===Mednafen===&lt;br /&gt;
This emulator can be found [http://mednafen.sourceforge.net/ here]&lt;br /&gt;
&lt;br /&gt;
Esc = Exit Mednafen (Careful about it)&lt;br /&gt;
&lt;br /&gt;
To use F12 to quit, and not the ESC key, edit this in mednafen.cfg:&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;quot;;Exit&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;command.exit keyboard 293~keyboard 27&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
To this:&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;quot;;Exit&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;command.exit keyboard 293&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
F5 = Save State&amp;lt;br&amp;gt;&lt;br /&gt;
F7 = Load State&amp;lt;br&amp;gt;&lt;br /&gt;
0-9 = Select Save Slot&lt;br /&gt;
&lt;br /&gt;
F10 = Reset&amp;lt;br&amp;gt;&lt;br /&gt;
F11 = Hard Reset (Power Switch style)&lt;br /&gt;
&lt;br /&gt;
Alt + D = Toggle Debugger&lt;br /&gt;
&lt;br /&gt;
In Debugger:&amp;lt;br&amp;gt;&lt;br /&gt;
Alt+1 = CPU debugger view&amp;lt;br&amp;gt;&lt;br /&gt;
Alt+3 = Memory editor&amp;lt;br&amp;gt;&lt;br /&gt;
R = Run&amp;lt;br&amp;gt;&lt;br /&gt;
S = Step&amp;lt;br&amp;gt;&lt;br /&gt;
Return = Goto Address(If on code)/Edit(If on register) (Type new values after original, press enter. Quicker.)&amp;lt;br&amp;gt;&lt;br /&gt;
Space = Set/Unset Execution Breakpoint&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + Return = Edit watch address&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + R = Edit Read Breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + W = Edit write breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + O = Opcode Breakpoints (Enter EA for &amp;quot;NOP&amp;quot;, etc. Use 6502 ASM table mainly)&lt;br /&gt;
&lt;br /&gt;
See included Debugger.html file for complete command list&lt;br /&gt;
&lt;br /&gt;
==Game Gear==&lt;br /&gt;
===Emukon===&lt;br /&gt;
This emulator can be found [http://emukon.kontechs.de/ here].&lt;br /&gt;
&lt;br /&gt;
Backup: [http://www.gshi.org/downloads/Emukon105.zip Emukon 1.05]&lt;br /&gt;
&lt;br /&gt;
This is basically a friendlier style of Logging Debugger the way I tend to use it, with Breakpoints to help figure out how code you find operates. I&#039;ve used it to at least as much success as I&#039;ve used the Hook_log debuggers, only this was more boring because I didn&#039;t have to fight with the emulator as much.&lt;br /&gt;
&lt;br /&gt;
You can use a combination of Breakpoints and Log Files to debug games.&lt;br /&gt;
&lt;br /&gt;
Breakpoints have their own management window, or you can right click lines in the debugger.&lt;br /&gt;
&lt;br /&gt;
To use the log files effectively, you should focus on a single byte with a known effect, get to about where the setting you&#039;re looking for will change, go to the Debugger &amp;gt; Debugger menu, enable it if needed, then click the Clear Log button if you want a fresh start, and the Log button to start logging. Get the thing changed that you want, and then look under the DebugLogs folder for the game you&#039;re working on, and search the text logs for the address you want to check, whether it&#039;s the execution address by some chance or the memory address. Breakpoints and Logging work well together to discover the execution path to a piece of code.&lt;br /&gt;
&lt;br /&gt;
It&#039;s not as exceedingly simple as some other debuggers, but it&#039;s quite useful, and it&#039;s my first choice for hacking Game Gear as well as SMS.&lt;br /&gt;
&lt;br /&gt;
==Master System==&lt;br /&gt;
===Emukon===&lt;br /&gt;
See Game Gear section: [[#Emukon]]&lt;br /&gt;
&lt;br /&gt;
==Gameboy Advance==&lt;br /&gt;
===Visual Boy Advance Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/340/ here].&lt;br /&gt;
&lt;br /&gt;
This emulator uses the Hook Log system. Those familiar with the hook_log Genesis or N64 emulators should have little trouble adapting to this system.&lt;br /&gt;
&lt;br /&gt;
Note that it has also been used to good effect for a small number of gameboy games that BGB doesn&#039;t support. [[Ugetab]] used this for GBS ripping, but with full code logging, and a save-state near when something changes, you could just as effectively search for a memory address in trace.log. Mind that while GB assembly doesn&#039;t pile up as quickly as GBA or N64, and it is still necessary to be relatively close to the change before activating logging, if you don&#039;t want to have to use a special text editor to open an enormous log file. &lt;br /&gt;
&lt;br /&gt;
===Visual Boy Advance===&lt;br /&gt;
This emulator can be found at [http://vba.ngemu.com/downloads.shtml this address].&lt;br /&gt;
&lt;br /&gt;
Windows - SDL is required. Unfortunately, no cheat device exists that can change the assembly, so hacking it is more a matter of patching the ROM, and less a matter of using it for simple cheats. Not documented.&lt;br /&gt;
&lt;br /&gt;
==Playstation==&lt;br /&gt;
===PCSX 1.5 With Debugger===&lt;br /&gt;
This emulator is available [http://www.romhacking.net/utils/267/ here].&lt;br /&gt;
&lt;br /&gt;
Press F11 to enter the debugger. On-screen aids should be apparent.&lt;br /&gt;
&lt;br /&gt;
===PSX===&lt;br /&gt;
This emulator can be found at [http://www.romhacking.net/utils/311/ this address].&lt;br /&gt;
&lt;br /&gt;
This can be a decent debugging alternative if a game doesn&#039;t work well in the above emulator.&lt;br /&gt;
&lt;br /&gt;
===PCSX Agemo debugger===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/475/ here].&lt;br /&gt;
&lt;br /&gt;
It could be favorable for some tasks, compared to the other debuggers.&lt;br /&gt;
&lt;br /&gt;
==N64==&lt;br /&gt;
===Nemu64===&lt;br /&gt;
This emulator can be found [http://www.emulator-zone.com/doc.php/n64/nemu64.html here]&lt;br /&gt;
&lt;br /&gt;
Setting execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Commands...&amp;lt;br&amp;gt;&lt;br /&gt;
To set a break on execution, go to the line that you want to break on, and click in the vertical bar to the left(&amp;lt;) of the address you want to breakpoint.&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in RAM&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Memory...&amp;lt;br&amp;gt;&lt;br /&gt;
Enable the read and/or write check boxes, and right-click the memory space you want to set, unset, or change an access breakpoint on.&lt;br /&gt;
&lt;br /&gt;
Some games don&#039;t run in Nemu, so you may have to switch to this hook_log based emulator if you want the codes. The 1964 tracer can be useful, which is available [http://www.romhacking.net/utils/335/ here].&lt;br /&gt;
&lt;br /&gt;
The hook_log system is a little bit more demanding to use than a visual debugger, but with compatibility issues, it&#039;s better than lucky to have a second usable debugging emulator. The save-states can be decompressed, and loaded in their decompressed form if needed&lt;br /&gt;
&lt;br /&gt;
An issue with this emulator is that not all instructions are logged, but it&#039;s still worth knowing about for the fact that many instructions are logged, and it can be used with write logging.&lt;br /&gt;
&lt;br /&gt;
===Project64 debug build binary===&lt;br /&gt;
This emulator can be found [http://www.thegshi.org/downloads/Project64%20Build%2052%20Debug%20Binary.zip here].&lt;br /&gt;
&lt;br /&gt;
This version of the emulator has better support for games than Nemu64, and Ugetab used this tool in combination with nemu64 to edit USFs, as well as make a few codes that people using only a single emulation tool were having extremely hard struggles with.&lt;br /&gt;
&lt;br /&gt;
==Saturn==&lt;br /&gt;
===Yabause===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/482/ here].&lt;br /&gt;
&lt;br /&gt;
This is one of the few Saturn emulators out there.&lt;br /&gt;
&lt;br /&gt;
==Wonder Swan==&lt;br /&gt;
===Cygne Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/244/ here].&lt;br /&gt;
&lt;br /&gt;
A decent Tracing program.&lt;br /&gt;
&lt;br /&gt;
===Oswan Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/338/ here].&lt;br /&gt;
&lt;br /&gt;
This is just another hook-log tracer.&lt;br /&gt;
&lt;br /&gt;
==Playstation 2==&lt;br /&gt;
[The current author is too lazy to write this, but will get around to it later if no one else does]&lt;br /&gt;
&lt;br /&gt;
[[Category:Hacking and Game Info]]&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Music_Ripping&amp;diff=4399</id>
		<title>Music Ripping</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Music_Ripping&amp;diff=4399"/>
		<updated>2009-08-26T14:43:12Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: Created page with &amp;#039;This is just a basic set of quick-start info for getting into any given format that someone is willing to provide information for.  It&amp;#039;s not meant to be comprehensive, but just i...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is just a basic set of quick-start info for getting into any given format that someone is willing to provide information for.&lt;br /&gt;
&lt;br /&gt;
It&#039;s not meant to be comprehensive, but just informative enough to give you something to quickly refer to until you can easily recall the basic information for actually finding the addresses.&lt;br /&gt;
&lt;br /&gt;
Debugger-specific information can normally be found on the [[Assembly Hacking]] page.&lt;br /&gt;
&lt;br /&gt;
I use the following code set distinctions:&amp;lt;br&amp;gt;&lt;br /&gt;
Sound Init (Basic register initialization. Often close to Song Init and/or Play address. Not all games use a distinctive Sound Init. Some run Play once or several times before running Song Init to achieve Sound Init)&amp;lt;br&amp;gt;&lt;br /&gt;
Song Init (If you feed this address the right number in the right register, sounds or music are played by the Play routine)&amp;lt;br&amp;gt;&lt;br /&gt;
Play (Executes the sound generation code, also good if you enter this by using sound registers and find RAM addresses related to sound to breakpoint for Song Init)&lt;br /&gt;
&lt;br /&gt;
==NES - NSF (Nintendo Sound Format)==&lt;br /&gt;
I suggest FCEUXDSP: [[Assembly_Hacking#FCEU]]&lt;br /&gt;
&lt;br /&gt;
$4000-$4009 = Sound Registers (Good for finding Play)&amp;lt;br&amp;gt;&lt;br /&gt;
$4010-$4013 = DMC / DPCM (This is a tricky addon. References info from $C000-$FFFF, and FCEUXDSP won&#039;t catch it reading this data unless you break on $4012/$4013 writes here)&amp;lt;br&amp;gt;&lt;br /&gt;
$4015 = Channel Select (Good for finding Sound Init, sometimes Play)&amp;lt;br&amp;gt;&lt;br /&gt;
$4017 = Frame Cycle/Interrupt (If this is written once, write it once in the NSF with the value written. If it&#039;s written once for every time play is run, do that in the NSF. Match in the NSF any setup used in the original game. Games sound a bit off if you don&#039;t, and you might not notice on your own)&lt;br /&gt;
&lt;br /&gt;
==Gameboy - GBS (Gameboy Sound Format)==&lt;br /&gt;
I suggest BGB: [[Assembly_Hacking#BGB]]&lt;br /&gt;
&lt;br /&gt;
$FF24 = Volume (Good for finding Sound Init, sometimes Play)&amp;lt;br&amp;gt;&lt;br /&gt;
$FF25 = L/R (00 often means a failed init. Visible in BGB)&amp;lt;br&amp;gt;&lt;br /&gt;
$FF26 = Channel On/Off (00 often means a failed init. Visible in BGB)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$FF13 = A good register to find Play with (Try $FF18/$FF1D/$FF22 if it doesn&#039;t break on $FF13)&lt;br /&gt;
&lt;br /&gt;
$FF10-$FF23 Sound Register spread&lt;br /&gt;
&lt;br /&gt;
==PC Engine / Turbo-Grafx 16 - HES==&lt;br /&gt;
I suggest Mednafen: [[Assembly_Hacking#Mednafen]]&lt;br /&gt;
&lt;br /&gt;
[http://pages.interlog.com/~daves/pce_info/pcesound.txt Source for below]&lt;br /&gt;
&lt;br /&gt;
$0800 = Voice Select (Good for sound init)&amp;lt;br&amp;gt;&lt;br /&gt;
$0801 = Main Volume (Probably also good for sound init)&amp;lt;br&amp;gt;&lt;br /&gt;
$0802 - Frequency (low)&amp;lt;br&amp;gt;&lt;br /&gt;
$0803 - Frequency (high)&amp;lt;br&amp;gt;&lt;br /&gt;
$0804 - Channel on/dda/volume - voice-dependent register&amp;lt;br&amp;gt;&lt;br /&gt;
$0805 - Pan volume (&#039;balance&#039;) - voice-dependent register&amp;lt;br&amp;gt;&lt;br /&gt;
$0806 - Wave data&amp;lt;br&amp;gt;&lt;br /&gt;
$0807 = Note Frequency (Good for finding Play, which is itself good for finding Song Init by matching up to Sound RAM Addresses)&amp;lt;br&amp;gt;&lt;br /&gt;
$0808 - LFO Frequency&amp;lt;br&amp;gt;&lt;br /&gt;
$0809 - LFO Control&lt;br /&gt;
&lt;br /&gt;
==N64 - USF (Ultra 64 Sound Format)==&lt;br /&gt;
I primarily suggest NEmu64: [[Assembly_Hacking#Nemu64]]&lt;br /&gt;
&lt;br /&gt;
This is a considerably different bag of tricks to use.&lt;br /&gt;
&lt;br /&gt;
I&#039;ve written out a decent guide, and even put together some tool modifications to make the job easier. Check out usfbegin.txt for more in-depth info. The folder with this info is [http://www.gshi.org/ugetab/USF/ here]&lt;br /&gt;
&lt;br /&gt;
AM_RANGE(0x04500000, 0x045fffff) AM_READWRITE(n64_ai_reg_r, n64_ai_reg_w) // Audio Interface&lt;br /&gt;
&lt;br /&gt;
04500004 = When you hit this, step out until you&#039;re in an infinite loop, and you should be in the Play thread. Mark it down as such, so you know not to disable it completely.&lt;br /&gt;
&lt;br /&gt;
If you break on the opcode &amp;quot;ERET&amp;quot;, then you can fairly easily build a list of threads to crash-test, until you&#039;ve killed off all of them that won&#039;t kill the music.&lt;br /&gt;
&lt;br /&gt;
Finding music inits is considerably tougher in N64 coding. I usually brute-force my way. Play through the Play routine to find RAM, use File2File methods, sometimes both... Not exactly a walk in the park, but it&#039;s the best I&#039;ve found, and it&#039;s just for the Init code that this needs to be done. Sound Tests make this a lot easier, because the value has to get from the temporary one in RAM to the sound routine in some fashion, and the temporary one used in a sound test is considerably easier to find with File2File and track through code than the pure coding method is.&lt;br /&gt;
&lt;br /&gt;
04040010 is written to for DList events. In Kirby64, it uses 00002B00 for this. This can help you remove graphics processing code. Note that not all writes to this are for graphics, and can crash the music if accesses are just outright removed.&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=4398</id>
		<title>Assembly Hacking</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=4398"/>
		<updated>2009-08-26T13:52:12Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: /* Mednafen */  More bits and bobs of info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Assembly hacking is the art of editing a compiled program. Without the source code, and without notes from the source code, one has to deduce almost everything about the underlying code, and how it works with RAM.&lt;br /&gt;
&lt;br /&gt;
There are several emulators that can aid one in creating a modification for a game. Games for console systems fall into the category of compiled programs, and generally, the source code is unavailable for these games.&lt;br /&gt;
&lt;br /&gt;
The use of making an assembly hack for a game can be found with the Nintendo Entertainment System (NES) [[Game Genie]].&lt;br /&gt;
&lt;br /&gt;
The codes that are entered into an NES Game Genie represent single-byte assembly hacks. Any assembly hack that could be done with a change of 3 bytes or less is possible to implement with a single Game Genie. The SNES Game Genie allows up to 5 codes, and 5 bytes of change. While this makes the possible usage of codes very limiting, it didn&#039;t prevent single-byte invincibility and infinite lives codes from appearing that could make it unnecessary to use additional codes.&lt;br /&gt;
&lt;br /&gt;
For more modern assembly hacking of the same systems, emulators that support 50 or more codes for any given game aren&#039;t uncommon. The ROMs have been turned into files that can be patched with all the changes needed to give the game a script in a new language. Emulators that aid in the process of making assembly hacks have appeared for many different emulated systems. The effect is that more people are now capable of starting their own projects, and existing projects can be modified and/or repaired more easily.&lt;br /&gt;
&lt;br /&gt;
=Emulators=&lt;br /&gt;
&lt;br /&gt;
==NES==&lt;br /&gt;
===FCEU===&lt;br /&gt;
[http://www.the-interweb.com/serendipity/index.php?/categories/9-FCEUXD-SP FCEUXDSP] is the result of a emulator first developed by Parasyte called FCEUD, which was then picked up by bbitmaster and renamed to FCEUXD, and finally adopted as FCEUXD SP.&lt;br /&gt;
&lt;br /&gt;
====Setting breakpoints in ROM/RAM====&lt;br /&gt;
Tools&amp;gt;Debug&lt;br /&gt;
&lt;br /&gt;
In the breakpoint window, &#039;Add&#039; the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
ROM is 8000-FFFF&amp;lt;br&amp;gt;&lt;br /&gt;
RAM is 0000-07FF, 6000-7FFF&amp;lt;br&amp;gt;&lt;br /&gt;
0800-3FFF is mirrored from some part of RAM.&amp;lt;br&amp;gt;&lt;br /&gt;
4000-4015 can be breakpointed if working on an NSF. If you want to use this to deal with NSFs, try Ugetabs [http://www.angelfire.com/nc/ugetab edited version], which tends to play nicer with them&lt;br /&gt;
&lt;br /&gt;
&#039;Hex Editor&#039; is a memory viewer/modifier.&lt;br /&gt;
&lt;br /&gt;
==SNES==&lt;br /&gt;
===Geiger&#039;s SNES9X Debugger===&lt;br /&gt;
This emulator can be found at [http://geigercount.net/crypt/ Geiger&#039;s Crypt] and [http://www.zophar.net/snes/geiger-s-snes9x-debugger.html Zophar&#039;s Domain - Geiger’s Snes9x Debugger].&lt;br /&gt;
&lt;br /&gt;
====Setting breakpoints in ROM/RAM====&lt;br /&gt;
Open ROM, Click &#039;Breakpoints&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
In the breakpoint window, enter the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
Standard RAM: 7E0000 - 7FFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
SA1 RAM: 400000-407FFF, 303000-303FFF&amp;lt;br&amp;gt;&lt;br /&gt;
HiROM - C00000 - FFFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
LoROM - 808000-BFFFFF (**0000 - **7FFF doesn&#039;t exist)&lt;br /&gt;
&lt;br /&gt;
If you use the [[SA1]] logger with an SA1-using game, and wish to find an address that changed an address in RAM, you can see if the conversion chart on the [[SA1]] page shows you the address to search for in the log file.&lt;br /&gt;
&lt;br /&gt;
===FuSoYa&#039;s SNES9X SuperFX Instruction Logger===&lt;br /&gt;
This emulator can be found [http://www.gshi.org/downloads/snes9x1.43-FuSoYa-SFX_B2.zip here].&lt;br /&gt;
&lt;br /&gt;
This emulator allows you to log SuperFX instructions being used by the emulator.&lt;br /&gt;
&lt;br /&gt;
Press the NumLock button to start/stop logging.&lt;br /&gt;
&lt;br /&gt;
Instructions will be logged to sfx_trace.txt, in the folder with the emulator.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s an example on how to interpret the results:&amp;lt;br&amp;gt;&lt;br /&gt;
00:e834 40       ldw (r0)        r0=$0058 SRAM=00:5AAE&amp;lt;br&amp;gt;&lt;br /&gt;
00:e835 64       sub r4          r0=$0055 CY=1&lt;br /&gt;
&lt;br /&gt;
First line Loads Word (SRAM=00:5AAE) to (r0). In Geiger&#039;s SNES9X Debugger, this is address 705AAE in the RAM viewer. In ZSNES, you can find this in a save-state at 0x4127F + 0x5AAE (= 0x46D2D). The result of this operation is on the same line.&lt;br /&gt;
&lt;br /&gt;
Second line subtracts (r4) from (r0). This next result is on the same line as well. This can be coded out to give you Infinite Health in Doom, but it won&#039;t work as a Game Genie code. The file address would be either 6835 or 6A35. Only one address of those 2 will be 0x64.&lt;br /&gt;
&lt;br /&gt;
==Genesis==&lt;br /&gt;
&lt;br /&gt;
===Regen Debugger Build===&lt;br /&gt;
This emulator can be found [http://aamirm.hacking-cult.org/ here]&lt;br /&gt;
&lt;br /&gt;
Backup: [http://www.gshi.org/downloads/Regen095D.zip Regen 0.95 Debugger]&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve used FCEUXDSP, Geiger&#039;s Snes9x, BGB, Nemu08, pSX, or pretty much any other active debugger, you&#039;ll realize that this is along the same lines of those debuggers. This is certainly what Genesis hackers have been waiting for when it comes to a user friendly debugger.&lt;br /&gt;
&lt;br /&gt;
It runs Genesis, Game Gear, and SMS files, but only debugs Genesis at the moment. Use [[#Emukon]] if you want to hack Game Gear or SMS.&lt;br /&gt;
&lt;br /&gt;
===Gens Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/337/ here].&lt;br /&gt;
&lt;br /&gt;
No breakpoints, but adequate tracing. A guide has been written on the specific usage of the emulator.&lt;br /&gt;
&lt;br /&gt;
The idea is that you can trace-log writes to and reads from memory, and you can also log all commands, and determine what&#039;s happening from the full log, by using what you find from the hook logging.&lt;br /&gt;
&lt;br /&gt;
===HazeMD===&lt;br /&gt;
This emulator can be found at [http://haze.mameworld.info/ this address].&lt;br /&gt;
&lt;br /&gt;
This emulator is harder to get setup to use a ROM, but comes with a MAME-style debugger. MAME&#039;s debugger is well known for being so powerful, considering the number of systems it can be used with when compiled into a build of MAME. The Gens tracer tends to have slightly better compatibility, while the HazeMD emulator has more potential for cheat codes, already having a Cheat system designed to handle multiple CPUs, which could be used for 32x game ROM hacks, and RAM hacks.&lt;br /&gt;
&lt;br /&gt;
==Gameboy==&lt;br /&gt;
===BGB===&lt;br /&gt;
This emulator can be found [http://bgb.bircd.org/ here]&lt;br /&gt;
&lt;br /&gt;
Load a ROM, and right-click the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debug mode enabled: to enable debugging&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debugger to enter the debugger&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in ROM/RAM&amp;lt;br&amp;gt;&lt;br /&gt;
In the debugger window:&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;breakpoints for execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;access breakpoints for read/write breaks.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Visual Boy Advance Tracer===&lt;br /&gt;
See [[#Visual_Boy_Advance_Tracer_2]]&lt;br /&gt;
&lt;br /&gt;
==PC Engine / Turbo-Grafx 16==&lt;br /&gt;
===Mednafen===&lt;br /&gt;
This emulator can be found [http://mednafen.sourceforge.net/ here]&lt;br /&gt;
&lt;br /&gt;
Esc = Exit Mednafen (Careful about it)&lt;br /&gt;
&lt;br /&gt;
To use F12 to quit, and not the ESC key, edit this in mednafen.cfg:&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;quot;;Exit&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;command.exit keyboard 293~keyboard 27&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
To this:&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;quot;;Exit&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;command.exit keyboard 293~keyboard 123&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
F5 = Save State&amp;lt;br&amp;gt;&lt;br /&gt;
F7 = Load State&amp;lt;br&amp;gt;&lt;br /&gt;
0-9 = Select Save Slot&lt;br /&gt;
&lt;br /&gt;
F10 = Reset&amp;lt;br&amp;gt;&lt;br /&gt;
F11 = Hard Reset (Power Switch style)&lt;br /&gt;
&lt;br /&gt;
Alt + D = Toggle Debugger&lt;br /&gt;
&lt;br /&gt;
In Debugger:&amp;lt;br&amp;gt;&lt;br /&gt;
Alt+1 = CPU debugger view&amp;lt;br&amp;gt;&lt;br /&gt;
Alt+3 = Memory editor&amp;lt;br&amp;gt;&lt;br /&gt;
R = Run&amp;lt;br&amp;gt;&lt;br /&gt;
S = Step&amp;lt;br&amp;gt;&lt;br /&gt;
Return = Goto Address(If on code)/Edit(If on register) (Type new values after original, press enter. Quicker.)&amp;lt;br&amp;gt;&lt;br /&gt;
Space = Set/Unset Execution Breakpoint&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + Return = Edit watch address&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + R = Edit Read Breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + W = Edit write breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + O = Opcode Breakpoints (Enter EA for &amp;quot;NOP&amp;quot;, etc. Use 6502 ASM table mainly)&lt;br /&gt;
&lt;br /&gt;
See included Debugger.html file for complete command list&lt;br /&gt;
&lt;br /&gt;
==Game Gear==&lt;br /&gt;
===Emukon===&lt;br /&gt;
This emulator can be found [http://emukon.kontechs.de/ here].&lt;br /&gt;
&lt;br /&gt;
Backup: [http://www.gshi.org/downloads/Emukon105.zip Emukon 1.05]&lt;br /&gt;
&lt;br /&gt;
This is basically a friendlier style of Logging Debugger the way I tend to use it, with Breakpoints to help figure out how code you find operates. I&#039;ve used it to at least as much success as I&#039;ve used the Hook_log debuggers, only this was more boring because I didn&#039;t have to fight with the emulator as much.&lt;br /&gt;
&lt;br /&gt;
You can use a combination of Breakpoints and Log Files to debug games.&lt;br /&gt;
&lt;br /&gt;
Breakpoints have their own management window, or you can right click lines in the debugger.&lt;br /&gt;
&lt;br /&gt;
To use the log files effectively, you should focus on a single byte with a known effect, get to about where the setting you&#039;re looking for will change, go to the Debugger &amp;gt; Debugger menu, enable it if needed, then click the Clear Log button if you want a fresh start, and the Log button to start logging. Get the thing changed that you want, and then look under the DebugLogs folder for the game you&#039;re working on, and search the text logs for the address you want to check, whether it&#039;s the execution address by some chance or the memory address. Breakpoints and Logging work well together to discover the execution path to a piece of code.&lt;br /&gt;
&lt;br /&gt;
It&#039;s not as exceedingly simple as some other debuggers, but it&#039;s quite useful, and it&#039;s my first choice for hacking Game Gear as well as SMS.&lt;br /&gt;
&lt;br /&gt;
==Master System==&lt;br /&gt;
===Emukon===&lt;br /&gt;
See Game Gear section: [[#Emukon]]&lt;br /&gt;
&lt;br /&gt;
==Gameboy Advance==&lt;br /&gt;
===Visual Boy Advance Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/340/ here].&lt;br /&gt;
&lt;br /&gt;
This emulator uses the Hook Log system. Those familiar with the hook_log Genesis or N64 emulators should have little trouble adapting to this system.&lt;br /&gt;
&lt;br /&gt;
Note that it has also been used to good effect for a small number of gameboy games that BGB doesn&#039;t support. [[Ugetab]] used this for GBS ripping, but with full code logging, and a save-state near when something changes, you could just as effectively search for a memory address in trace.log. Mind that while GB assembly doesn&#039;t pile up as quickly as GBA or N64, and it is still necessary to be relatively close to the change before activating logging, if you don&#039;t want to have to use a special text editor to open an enormous log file. &lt;br /&gt;
&lt;br /&gt;
===Visual Boy Advance===&lt;br /&gt;
This emulator can be found at [http://vba.ngemu.com/downloads.shtml this address].&lt;br /&gt;
&lt;br /&gt;
Windows - SDL is required. Unfortunately, no cheat device exists that can change the assembly, so hacking it is more a matter of patching the ROM, and less a matter of using it for simple cheats. Not documented.&lt;br /&gt;
&lt;br /&gt;
==Playstation==&lt;br /&gt;
===PCSX 1.5 With Debugger===&lt;br /&gt;
This emulator is available [http://www.romhacking.net/utils/267/ here].&lt;br /&gt;
&lt;br /&gt;
Press F11 to enter the debugger. On-screen aids should be apparent.&lt;br /&gt;
&lt;br /&gt;
===PSX===&lt;br /&gt;
This emulator can be found at [http://www.romhacking.net/utils/311/ this address].&lt;br /&gt;
&lt;br /&gt;
This can be a decent debugging alternative if a game doesn&#039;t work well in the above emulator.&lt;br /&gt;
&lt;br /&gt;
===PCSX Agemo debugger===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/475/ here].&lt;br /&gt;
&lt;br /&gt;
It could be favorable for some tasks, compared to the other debuggers.&lt;br /&gt;
&lt;br /&gt;
==N64==&lt;br /&gt;
===Nemu64===&lt;br /&gt;
This emulator can be found [http://www.emulator-zone.com/doc.php/n64/nemu64.html here]&lt;br /&gt;
&lt;br /&gt;
Setting execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Commands...&amp;lt;br&amp;gt;&lt;br /&gt;
To set a break on execution, go to the line that you want to break on, and click in the vertical bar to the left(&amp;lt;) of the address you want to breakpoint.&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in RAM&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Memory...&amp;lt;br&amp;gt;&lt;br /&gt;
Enable the read and/or write check boxes, and right-click the memory space you want to set, unset, or change an access breakpoint on.&lt;br /&gt;
&lt;br /&gt;
Some games don&#039;t run in Nemu, so you may have to switch to this hook_log based emulator if you want the codes. The 1964 tracer can be useful, which is available [http://www.romhacking.net/utils/335/ here].&lt;br /&gt;
&lt;br /&gt;
The hook_log system is a little bit more demanding to use than a visual debugger, but with compatibility issues, it&#039;s better than lucky to have a second usable debugging emulator. The save-states can be decompressed, and loaded in their decompressed form if needed&lt;br /&gt;
&lt;br /&gt;
An issue with this emulator is that not all instructions are logged, but it&#039;s still worth knowing about for the fact that many instructions are logged, and it can be used with write logging.&lt;br /&gt;
&lt;br /&gt;
===Project64 debug build binary===&lt;br /&gt;
This emulator can be found [http://www.thegshi.org/downloads/Project64%20Build%2052%20Debug%20Binary.zip here].&lt;br /&gt;
&lt;br /&gt;
This version of the emulator has better support for games than Nemu64, and Ugetab used this tool in combination with nemu64 to edit USFs, as well as make a few codes that people using only a single emulation tool were having extremely hard struggles with.&lt;br /&gt;
&lt;br /&gt;
==Saturn==&lt;br /&gt;
===Yabause===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/482/ here].&lt;br /&gt;
&lt;br /&gt;
This is one of the few Saturn emulators out there.&lt;br /&gt;
&lt;br /&gt;
==Wonder Swan==&lt;br /&gt;
===Cygne Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/244/ here].&lt;br /&gt;
&lt;br /&gt;
A decent Tracing program.&lt;br /&gt;
&lt;br /&gt;
===Oswan Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/338/ here].&lt;br /&gt;
&lt;br /&gt;
This is just another hook-log tracer.&lt;br /&gt;
&lt;br /&gt;
==Playstation 2==&lt;br /&gt;
[The current author is too lazy to write this, but will get around to it later if no one else does]&lt;br /&gt;
&lt;br /&gt;
[[Category:Hacking and Game Info]]&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=4397</id>
		<title>Assembly Hacking</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=4397"/>
		<updated>2009-08-26T13:17:51Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: /* Mednafen */  (Forgot a debugging command)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Assembly hacking is the art of editing a compiled program. Without the source code, and without notes from the source code, one has to deduce almost everything about the underlying code, and how it works with RAM.&lt;br /&gt;
&lt;br /&gt;
There are several emulators that can aid one in creating a modification for a game. Games for console systems fall into the category of compiled programs, and generally, the source code is unavailable for these games.&lt;br /&gt;
&lt;br /&gt;
The use of making an assembly hack for a game can be found with the Nintendo Entertainment System (NES) [[Game Genie]].&lt;br /&gt;
&lt;br /&gt;
The codes that are entered into an NES Game Genie represent single-byte assembly hacks. Any assembly hack that could be done with a change of 3 bytes or less is possible to implement with a single Game Genie. The SNES Game Genie allows up to 5 codes, and 5 bytes of change. While this makes the possible usage of codes very limiting, it didn&#039;t prevent single-byte invincibility and infinite lives codes from appearing that could make it unnecessary to use additional codes.&lt;br /&gt;
&lt;br /&gt;
For more modern assembly hacking of the same systems, emulators that support 50 or more codes for any given game aren&#039;t uncommon. The ROMs have been turned into files that can be patched with all the changes needed to give the game a script in a new language. Emulators that aid in the process of making assembly hacks have appeared for many different emulated systems. The effect is that more people are now capable of starting their own projects, and existing projects can be modified and/or repaired more easily.&lt;br /&gt;
&lt;br /&gt;
=Emulators=&lt;br /&gt;
&lt;br /&gt;
==NES==&lt;br /&gt;
===FCEU===&lt;br /&gt;
[http://www.the-interweb.com/serendipity/index.php?/categories/9-FCEUXD-SP FCEUXDSP] is the result of a emulator first developed by Parasyte called FCEUD, which was then picked up by bbitmaster and renamed to FCEUXD, and finally adopted as FCEUXD SP.&lt;br /&gt;
&lt;br /&gt;
====Setting breakpoints in ROM/RAM====&lt;br /&gt;
Tools&amp;gt;Debug&lt;br /&gt;
&lt;br /&gt;
In the breakpoint window, &#039;Add&#039; the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
ROM is 8000-FFFF&amp;lt;br&amp;gt;&lt;br /&gt;
RAM is 0000-07FF, 6000-7FFF&amp;lt;br&amp;gt;&lt;br /&gt;
0800-3FFF is mirrored from some part of RAM.&amp;lt;br&amp;gt;&lt;br /&gt;
4000-4015 can be breakpointed if working on an NSF. If you want to use this to deal with NSFs, try Ugetabs [http://www.angelfire.com/nc/ugetab edited version], which tends to play nicer with them&lt;br /&gt;
&lt;br /&gt;
&#039;Hex Editor&#039; is a memory viewer/modifier.&lt;br /&gt;
&lt;br /&gt;
==SNES==&lt;br /&gt;
===Geiger&#039;s SNES9X Debugger===&lt;br /&gt;
This emulator can be found at [http://geigercount.net/crypt/ Geiger&#039;s Crypt] and [http://www.zophar.net/snes/geiger-s-snes9x-debugger.html Zophar&#039;s Domain - Geiger’s Snes9x Debugger].&lt;br /&gt;
&lt;br /&gt;
====Setting breakpoints in ROM/RAM====&lt;br /&gt;
Open ROM, Click &#039;Breakpoints&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
In the breakpoint window, enter the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
Standard RAM: 7E0000 - 7FFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
SA1 RAM: 400000-407FFF, 303000-303FFF&amp;lt;br&amp;gt;&lt;br /&gt;
HiROM - C00000 - FFFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
LoROM - 808000-BFFFFF (**0000 - **7FFF doesn&#039;t exist)&lt;br /&gt;
&lt;br /&gt;
If you use the [[SA1]] logger with an SA1-using game, and wish to find an address that changed an address in RAM, you can see if the conversion chart on the [[SA1]] page shows you the address to search for in the log file.&lt;br /&gt;
&lt;br /&gt;
===FuSoYa&#039;s SNES9X SuperFX Instruction Logger===&lt;br /&gt;
This emulator can be found [http://www.gshi.org/downloads/snes9x1.43-FuSoYa-SFX_B2.zip here].&lt;br /&gt;
&lt;br /&gt;
This emulator allows you to log SuperFX instructions being used by the emulator.&lt;br /&gt;
&lt;br /&gt;
Press the NumLock button to start/stop logging.&lt;br /&gt;
&lt;br /&gt;
Instructions will be logged to sfx_trace.txt, in the folder with the emulator.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s an example on how to interpret the results:&amp;lt;br&amp;gt;&lt;br /&gt;
00:e834 40       ldw (r0)        r0=$0058 SRAM=00:5AAE&amp;lt;br&amp;gt;&lt;br /&gt;
00:e835 64       sub r4          r0=$0055 CY=1&lt;br /&gt;
&lt;br /&gt;
First line Loads Word (SRAM=00:5AAE) to (r0). In Geiger&#039;s SNES9X Debugger, this is address 705AAE in the RAM viewer. In ZSNES, you can find this in a save-state at 0x4127F + 0x5AAE (= 0x46D2D). The result of this operation is on the same line.&lt;br /&gt;
&lt;br /&gt;
Second line subtracts (r4) from (r0). This next result is on the same line as well. This can be coded out to give you Infinite Health in Doom, but it won&#039;t work as a Game Genie code. The file address would be either 6835 or 6A35. Only one address of those 2 will be 0x64.&lt;br /&gt;
&lt;br /&gt;
==Genesis==&lt;br /&gt;
&lt;br /&gt;
===Regen Debugger Build===&lt;br /&gt;
This emulator can be found [http://aamirm.hacking-cult.org/ here]&lt;br /&gt;
&lt;br /&gt;
Backup: [http://www.gshi.org/downloads/Regen095D.zip Regen 0.95 Debugger]&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve used FCEUXDSP, Geiger&#039;s Snes9x, BGB, Nemu08, pSX, or pretty much any other active debugger, you&#039;ll realize that this is along the same lines of those debuggers. This is certainly what Genesis hackers have been waiting for when it comes to a user friendly debugger.&lt;br /&gt;
&lt;br /&gt;
It runs Genesis, Game Gear, and SMS files, but only debugs Genesis at the moment. Use [[#Emukon]] if you want to hack Game Gear or SMS.&lt;br /&gt;
&lt;br /&gt;
===Gens Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/337/ here].&lt;br /&gt;
&lt;br /&gt;
No breakpoints, but adequate tracing. A guide has been written on the specific usage of the emulator.&lt;br /&gt;
&lt;br /&gt;
The idea is that you can trace-log writes to and reads from memory, and you can also log all commands, and determine what&#039;s happening from the full log, by using what you find from the hook logging.&lt;br /&gt;
&lt;br /&gt;
===HazeMD===&lt;br /&gt;
This emulator can be found at [http://haze.mameworld.info/ this address].&lt;br /&gt;
&lt;br /&gt;
This emulator is harder to get setup to use a ROM, but comes with a MAME-style debugger. MAME&#039;s debugger is well known for being so powerful, considering the number of systems it can be used with when compiled into a build of MAME. The Gens tracer tends to have slightly better compatibility, while the HazeMD emulator has more potential for cheat codes, already having a Cheat system designed to handle multiple CPUs, which could be used for 32x game ROM hacks, and RAM hacks.&lt;br /&gt;
&lt;br /&gt;
==Gameboy==&lt;br /&gt;
===BGB===&lt;br /&gt;
This emulator can be found [http://bgb.bircd.org/ here]&lt;br /&gt;
&lt;br /&gt;
Load a ROM, and right-click the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debug mode enabled: to enable debugging&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debugger to enter the debugger&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in ROM/RAM&amp;lt;br&amp;gt;&lt;br /&gt;
In the debugger window:&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;breakpoints for execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;access breakpoints for read/write breaks.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Visual Boy Advance Tracer===&lt;br /&gt;
See [[#Visual_Boy_Advance_Tracer_2]]&lt;br /&gt;
&lt;br /&gt;
==PC Engine / Turbo-Grafx 16==&lt;br /&gt;
===Mednafen===&lt;br /&gt;
This emulator can be found [http://mednafen.sourceforge.net/ here]&lt;br /&gt;
&lt;br /&gt;
Esc = Exit Mednafen (Careful about it)&lt;br /&gt;
&lt;br /&gt;
To use F12 to quit, and not the ESC key, edit this in mednafen.cfg:&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;quot;;Exit&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;command.exit keyboard 293~keyboard 27&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
To this:&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;quot;;Exit&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;command.exit keyboard 293~keyboard 123&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
F5 = Save State&amp;lt;br&amp;gt;&lt;br /&gt;
F7 = Load State&amp;lt;br&amp;gt;&lt;br /&gt;
0-9 = Select Save Slot&lt;br /&gt;
&lt;br /&gt;
Alt + D = Toggle Debugger&lt;br /&gt;
&lt;br /&gt;
In Debugger:&amp;lt;br&amp;gt;&lt;br /&gt;
Alt+1 = CPU debugger view&amp;lt;br&amp;gt;&lt;br /&gt;
Alt+3 = Memory editor&amp;lt;br&amp;gt;&lt;br /&gt;
R = Run&amp;lt;br&amp;gt;&lt;br /&gt;
S = Step&amp;lt;br&amp;gt;&lt;br /&gt;
Return = Goto Address(If on code)/Edit(If on register)&amp;lt;br&amp;gt;&lt;br /&gt;
Space = Set/Unset Execution Breakpoint&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + Return = Edit watch address&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + R = Edit Read Breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + W = Edit write breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + O = Opcode Breakpoints&lt;br /&gt;
&lt;br /&gt;
See included Debugger.html file for complete command list&lt;br /&gt;
&lt;br /&gt;
==Game Gear==&lt;br /&gt;
===Emukon===&lt;br /&gt;
This emulator can be found [http://emukon.kontechs.de/ here].&lt;br /&gt;
&lt;br /&gt;
Backup: [http://www.gshi.org/downloads/Emukon105.zip Emukon 1.05]&lt;br /&gt;
&lt;br /&gt;
This is basically a friendlier style of Logging Debugger the way I tend to use it, with Breakpoints to help figure out how code you find operates. I&#039;ve used it to at least as much success as I&#039;ve used the Hook_log debuggers, only this was more boring because I didn&#039;t have to fight with the emulator as much.&lt;br /&gt;
&lt;br /&gt;
You can use a combination of Breakpoints and Log Files to debug games.&lt;br /&gt;
&lt;br /&gt;
Breakpoints have their own management window, or you can right click lines in the debugger.&lt;br /&gt;
&lt;br /&gt;
To use the log files effectively, you should focus on a single byte with a known effect, get to about where the setting you&#039;re looking for will change, go to the Debugger &amp;gt; Debugger menu, enable it if needed, then click the Clear Log button if you want a fresh start, and the Log button to start logging. Get the thing changed that you want, and then look under the DebugLogs folder for the game you&#039;re working on, and search the text logs for the address you want to check, whether it&#039;s the execution address by some chance or the memory address. Breakpoints and Logging work well together to discover the execution path to a piece of code.&lt;br /&gt;
&lt;br /&gt;
It&#039;s not as exceedingly simple as some other debuggers, but it&#039;s quite useful, and it&#039;s my first choice for hacking Game Gear as well as SMS.&lt;br /&gt;
&lt;br /&gt;
==Master System==&lt;br /&gt;
===Emukon===&lt;br /&gt;
See Game Gear section: [[#Emukon]]&lt;br /&gt;
&lt;br /&gt;
==Gameboy Advance==&lt;br /&gt;
===Visual Boy Advance Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/340/ here].&lt;br /&gt;
&lt;br /&gt;
This emulator uses the Hook Log system. Those familiar with the hook_log Genesis or N64 emulators should have little trouble adapting to this system.&lt;br /&gt;
&lt;br /&gt;
Note that it has also been used to good effect for a small number of gameboy games that BGB doesn&#039;t support. [[Ugetab]] used this for GBS ripping, but with full code logging, and a save-state near when something changes, you could just as effectively search for a memory address in trace.log. Mind that while GB assembly doesn&#039;t pile up as quickly as GBA or N64, and it is still necessary to be relatively close to the change before activating logging, if you don&#039;t want to have to use a special text editor to open an enormous log file. &lt;br /&gt;
&lt;br /&gt;
===Visual Boy Advance===&lt;br /&gt;
This emulator can be found at [http://vba.ngemu.com/downloads.shtml this address].&lt;br /&gt;
&lt;br /&gt;
Windows - SDL is required. Unfortunately, no cheat device exists that can change the assembly, so hacking it is more a matter of patching the ROM, and less a matter of using it for simple cheats. Not documented.&lt;br /&gt;
&lt;br /&gt;
==Playstation==&lt;br /&gt;
===PCSX 1.5 With Debugger===&lt;br /&gt;
This emulator is available [http://www.romhacking.net/utils/267/ here].&lt;br /&gt;
&lt;br /&gt;
Press F11 to enter the debugger. On-screen aids should be apparent.&lt;br /&gt;
&lt;br /&gt;
===PSX===&lt;br /&gt;
This emulator can be found at [http://www.romhacking.net/utils/311/ this address].&lt;br /&gt;
&lt;br /&gt;
This can be a decent debugging alternative if a game doesn&#039;t work well in the above emulator.&lt;br /&gt;
&lt;br /&gt;
===PCSX Agemo debugger===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/475/ here].&lt;br /&gt;
&lt;br /&gt;
It could be favorable for some tasks, compared to the other debuggers.&lt;br /&gt;
&lt;br /&gt;
==N64==&lt;br /&gt;
===Nemu64===&lt;br /&gt;
This emulator can be found [http://www.emulator-zone.com/doc.php/n64/nemu64.html here]&lt;br /&gt;
&lt;br /&gt;
Setting execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Commands...&amp;lt;br&amp;gt;&lt;br /&gt;
To set a break on execution, go to the line that you want to break on, and click in the vertical bar to the left(&amp;lt;) of the address you want to breakpoint.&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in RAM&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Memory...&amp;lt;br&amp;gt;&lt;br /&gt;
Enable the read and/or write check boxes, and right-click the memory space you want to set, unset, or change an access breakpoint on.&lt;br /&gt;
&lt;br /&gt;
Some games don&#039;t run in Nemu, so you may have to switch to this hook_log based emulator if you want the codes. The 1964 tracer can be useful, which is available [http://www.romhacking.net/utils/335/ here].&lt;br /&gt;
&lt;br /&gt;
The hook_log system is a little bit more demanding to use than a visual debugger, but with compatibility issues, it&#039;s better than lucky to have a second usable debugging emulator. The save-states can be decompressed, and loaded in their decompressed form if needed&lt;br /&gt;
&lt;br /&gt;
An issue with this emulator is that not all instructions are logged, but it&#039;s still worth knowing about for the fact that many instructions are logged, and it can be used with write logging.&lt;br /&gt;
&lt;br /&gt;
===Project64 debug build binary===&lt;br /&gt;
This emulator can be found [http://www.thegshi.org/downloads/Project64%20Build%2052%20Debug%20Binary.zip here].&lt;br /&gt;
&lt;br /&gt;
This version of the emulator has better support for games than Nemu64, and Ugetab used this tool in combination with nemu64 to edit USFs, as well as make a few codes that people using only a single emulation tool were having extremely hard struggles with.&lt;br /&gt;
&lt;br /&gt;
==Saturn==&lt;br /&gt;
===Yabause===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/482/ here].&lt;br /&gt;
&lt;br /&gt;
This is one of the few Saturn emulators out there.&lt;br /&gt;
&lt;br /&gt;
==Wonder Swan==&lt;br /&gt;
===Cygne Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/244/ here].&lt;br /&gt;
&lt;br /&gt;
A decent Tracing program.&lt;br /&gt;
&lt;br /&gt;
===Oswan Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/338/ here].&lt;br /&gt;
&lt;br /&gt;
This is just another hook-log tracer.&lt;br /&gt;
&lt;br /&gt;
==Playstation 2==&lt;br /&gt;
[The current author is too lazy to write this, but will get around to it later if no one else does]&lt;br /&gt;
&lt;br /&gt;
[[Category:Hacking and Game Info]]&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=4396</id>
		<title>Assembly Hacking</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=4396"/>
		<updated>2009-08-26T01:44:02Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: Added PC Engine/TG16 Debugger Info (Thinking of making some HES rips)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Assembly hacking is the art of editing a compiled program. Without the source code, and without notes from the source code, one has to deduce almost everything about the underlying code, and how it works with RAM.&lt;br /&gt;
&lt;br /&gt;
There are several emulators that can aid one in creating a modification for a game. Games for console systems fall into the category of compiled programs, and generally, the source code is unavailable for these games.&lt;br /&gt;
&lt;br /&gt;
The use of making an assembly hack for a game can be found with the Nintendo Entertainment System (NES) [[Game Genie]].&lt;br /&gt;
&lt;br /&gt;
The codes that are entered into an NES Game Genie represent single-byte assembly hacks. Any assembly hack that could be done with a change of 3 bytes or less is possible to implement with a single Game Genie. The SNES Game Genie allows up to 5 codes, and 5 bytes of change. While this makes the possible usage of codes very limiting, it didn&#039;t prevent single-byte invincibility and infinite lives codes from appearing that could make it unnecessary to use additional codes.&lt;br /&gt;
&lt;br /&gt;
For more modern assembly hacking of the same systems, emulators that support 50 or more codes for any given game aren&#039;t uncommon. The ROMs have been turned into files that can be patched with all the changes needed to give the game a script in a new language. Emulators that aid in the process of making assembly hacks have appeared for many different emulated systems. The effect is that more people are now capable of starting their own projects, and existing projects can be modified and/or repaired more easily.&lt;br /&gt;
&lt;br /&gt;
=Emulators=&lt;br /&gt;
&lt;br /&gt;
==NES==&lt;br /&gt;
===FCEU===&lt;br /&gt;
[http://www.the-interweb.com/serendipity/index.php?/categories/9-FCEUXD-SP FCEUXDSP] is the result of a emulator first developed by Parasyte called FCEUD, which was then picked up by bbitmaster and renamed to FCEUXD, and finally adopted as FCEUXD SP.&lt;br /&gt;
&lt;br /&gt;
====Setting breakpoints in ROM/RAM====&lt;br /&gt;
Tools&amp;gt;Debug&lt;br /&gt;
&lt;br /&gt;
In the breakpoint window, &#039;Add&#039; the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
ROM is 8000-FFFF&amp;lt;br&amp;gt;&lt;br /&gt;
RAM is 0000-07FF, 6000-7FFF&amp;lt;br&amp;gt;&lt;br /&gt;
0800-3FFF is mirrored from some part of RAM.&amp;lt;br&amp;gt;&lt;br /&gt;
4000-4015 can be breakpointed if working on an NSF. If you want to use this to deal with NSFs, try Ugetabs [http://www.angelfire.com/nc/ugetab edited version], which tends to play nicer with them&lt;br /&gt;
&lt;br /&gt;
&#039;Hex Editor&#039; is a memory viewer/modifier.&lt;br /&gt;
&lt;br /&gt;
==SNES==&lt;br /&gt;
===Geiger&#039;s SNES9X Debugger===&lt;br /&gt;
This emulator can be found at [http://geigercount.net/crypt/ Geiger&#039;s Crypt] and [http://www.zophar.net/snes/geiger-s-snes9x-debugger.html Zophar&#039;s Domain - Geiger’s Snes9x Debugger].&lt;br /&gt;
&lt;br /&gt;
====Setting breakpoints in ROM/RAM====&lt;br /&gt;
Open ROM, Click &#039;Breakpoints&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
In the breakpoint window, enter the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
Standard RAM: 7E0000 - 7FFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
SA1 RAM: 400000-407FFF, 303000-303FFF&amp;lt;br&amp;gt;&lt;br /&gt;
HiROM - C00000 - FFFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
LoROM - 808000-BFFFFF (**0000 - **7FFF doesn&#039;t exist)&lt;br /&gt;
&lt;br /&gt;
If you use the [[SA1]] logger with an SA1-using game, and wish to find an address that changed an address in RAM, you can see if the conversion chart on the [[SA1]] page shows you the address to search for in the log file.&lt;br /&gt;
&lt;br /&gt;
===FuSoYa&#039;s SNES9X SuperFX Instruction Logger===&lt;br /&gt;
This emulator can be found [http://www.gshi.org/downloads/snes9x1.43-FuSoYa-SFX_B2.zip here].&lt;br /&gt;
&lt;br /&gt;
This emulator allows you to log SuperFX instructions being used by the emulator.&lt;br /&gt;
&lt;br /&gt;
Press the NumLock button to start/stop logging.&lt;br /&gt;
&lt;br /&gt;
Instructions will be logged to sfx_trace.txt, in the folder with the emulator.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s an example on how to interpret the results:&amp;lt;br&amp;gt;&lt;br /&gt;
00:e834 40       ldw (r0)        r0=$0058 SRAM=00:5AAE&amp;lt;br&amp;gt;&lt;br /&gt;
00:e835 64       sub r4          r0=$0055 CY=1&lt;br /&gt;
&lt;br /&gt;
First line Loads Word (SRAM=00:5AAE) to (r0). In Geiger&#039;s SNES9X Debugger, this is address 705AAE in the RAM viewer. In ZSNES, you can find this in a save-state at 0x4127F + 0x5AAE (= 0x46D2D). The result of this operation is on the same line.&lt;br /&gt;
&lt;br /&gt;
Second line subtracts (r4) from (r0). This next result is on the same line as well. This can be coded out to give you Infinite Health in Doom, but it won&#039;t work as a Game Genie code. The file address would be either 6835 or 6A35. Only one address of those 2 will be 0x64.&lt;br /&gt;
&lt;br /&gt;
==Genesis==&lt;br /&gt;
&lt;br /&gt;
===Regen Debugger Build===&lt;br /&gt;
This emulator can be found [http://aamirm.hacking-cult.org/ here]&lt;br /&gt;
&lt;br /&gt;
Backup: [http://www.gshi.org/downloads/Regen095D.zip Regen 0.95 Debugger]&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve used FCEUXDSP, Geiger&#039;s Snes9x, BGB, Nemu08, pSX, or pretty much any other active debugger, you&#039;ll realize that this is along the same lines of those debuggers. This is certainly what Genesis hackers have been waiting for when it comes to a user friendly debugger.&lt;br /&gt;
&lt;br /&gt;
It runs Genesis, Game Gear, and SMS files, but only debugs Genesis at the moment. Use [[#Emukon]] if you want to hack Game Gear or SMS.&lt;br /&gt;
&lt;br /&gt;
===Gens Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/337/ here].&lt;br /&gt;
&lt;br /&gt;
No breakpoints, but adequate tracing. A guide has been written on the specific usage of the emulator.&lt;br /&gt;
&lt;br /&gt;
The idea is that you can trace-log writes to and reads from memory, and you can also log all commands, and determine what&#039;s happening from the full log, by using what you find from the hook logging.&lt;br /&gt;
&lt;br /&gt;
===HazeMD===&lt;br /&gt;
This emulator can be found at [http://haze.mameworld.info/ this address].&lt;br /&gt;
&lt;br /&gt;
This emulator is harder to get setup to use a ROM, but comes with a MAME-style debugger. MAME&#039;s debugger is well known for being so powerful, considering the number of systems it can be used with when compiled into a build of MAME. The Gens tracer tends to have slightly better compatibility, while the HazeMD emulator has more potential for cheat codes, already having a Cheat system designed to handle multiple CPUs, which could be used for 32x game ROM hacks, and RAM hacks.&lt;br /&gt;
&lt;br /&gt;
==Gameboy==&lt;br /&gt;
===BGB===&lt;br /&gt;
This emulator can be found [http://bgb.bircd.org/ here]&lt;br /&gt;
&lt;br /&gt;
Load a ROM, and right-click the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debug mode enabled: to enable debugging&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debugger to enter the debugger&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in ROM/RAM&amp;lt;br&amp;gt;&lt;br /&gt;
In the debugger window:&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;breakpoints for execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;access breakpoints for read/write breaks.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Visual Boy Advance Tracer===&lt;br /&gt;
See [[#Visual_Boy_Advance_Tracer_2]]&lt;br /&gt;
&lt;br /&gt;
==PC Engine / Turbo-Grafx 16==&lt;br /&gt;
===Mednafen===&lt;br /&gt;
This emulator can be found [http://mednafen.sourceforge.net/ here]&lt;br /&gt;
&lt;br /&gt;
Esc = Exit Mednafen (Careful about it)&lt;br /&gt;
&lt;br /&gt;
To use F12 to quit, and not the ESC key, edit this in mednafen.cfg:&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;quot;;Exit&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;command.exit keyboard 293~keyboard 27&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
To this:&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;quot;;Exit&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;quot;command.exit keyboard 293~keyboard 123&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
F5 = Save State&amp;lt;br&amp;gt;&lt;br /&gt;
F7 = Load State&amp;lt;br&amp;gt;&lt;br /&gt;
0-9 = Select Save Slot&lt;br /&gt;
&lt;br /&gt;
Alt + D = Toggle Debugger&lt;br /&gt;
&lt;br /&gt;
In Debugger:&amp;lt;br&amp;gt;&lt;br /&gt;
Alt+1 = CPU debugger view&amp;lt;br&amp;gt;&lt;br /&gt;
Alt+3 = Memory editor&amp;lt;br&amp;gt;&lt;br /&gt;
R = Run&amp;lt;br&amp;gt;&lt;br /&gt;
S = Step&amp;lt;br&amp;gt;&lt;br /&gt;
Return = Goto Address(If on code)/Edit(If on register)&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + Return = Edit watch address&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + R = Edit Read Breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + W = Edit write breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Shift + O = Opcode Breakpoints&lt;br /&gt;
&lt;br /&gt;
See included Debugger.html file for complete command list&lt;br /&gt;
&lt;br /&gt;
==Game Gear==&lt;br /&gt;
===Emukon===&lt;br /&gt;
This emulator can be found [http://emukon.kontechs.de/ here].&lt;br /&gt;
&lt;br /&gt;
Backup: [http://www.gshi.org/downloads/Emukon105.zip Emukon 1.05]&lt;br /&gt;
&lt;br /&gt;
This is basically a friendlier style of Logging Debugger the way I tend to use it, with Breakpoints to help figure out how code you find operates. I&#039;ve used it to at least as much success as I&#039;ve used the Hook_log debuggers, only this was more boring because I didn&#039;t have to fight with the emulator as much.&lt;br /&gt;
&lt;br /&gt;
You can use a combination of Breakpoints and Log Files to debug games.&lt;br /&gt;
&lt;br /&gt;
Breakpoints have their own management window, or you can right click lines in the debugger.&lt;br /&gt;
&lt;br /&gt;
To use the log files effectively, you should focus on a single byte with a known effect, get to about where the setting you&#039;re looking for will change, go to the Debugger &amp;gt; Debugger menu, enable it if needed, then click the Clear Log button if you want a fresh start, and the Log button to start logging. Get the thing changed that you want, and then look under the DebugLogs folder for the game you&#039;re working on, and search the text logs for the address you want to check, whether it&#039;s the execution address by some chance or the memory address. Breakpoints and Logging work well together to discover the execution path to a piece of code.&lt;br /&gt;
&lt;br /&gt;
It&#039;s not as exceedingly simple as some other debuggers, but it&#039;s quite useful, and it&#039;s my first choice for hacking Game Gear as well as SMS.&lt;br /&gt;
&lt;br /&gt;
==Master System==&lt;br /&gt;
===Emukon===&lt;br /&gt;
See Game Gear section: [[#Emukon]]&lt;br /&gt;
&lt;br /&gt;
==Gameboy Advance==&lt;br /&gt;
===Visual Boy Advance Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/340/ here].&lt;br /&gt;
&lt;br /&gt;
This emulator uses the Hook Log system. Those familiar with the hook_log Genesis or N64 emulators should have little trouble adapting to this system.&lt;br /&gt;
&lt;br /&gt;
Note that it has also been used to good effect for a small number of gameboy games that BGB doesn&#039;t support. [[Ugetab]] used this for GBS ripping, but with full code logging, and a save-state near when something changes, you could just as effectively search for a memory address in trace.log. Mind that while GB assembly doesn&#039;t pile up as quickly as GBA or N64, and it is still necessary to be relatively close to the change before activating logging, if you don&#039;t want to have to use a special text editor to open an enormous log file. &lt;br /&gt;
&lt;br /&gt;
===Visual Boy Advance===&lt;br /&gt;
This emulator can be found at [http://vba.ngemu.com/downloads.shtml this address].&lt;br /&gt;
&lt;br /&gt;
Windows - SDL is required. Unfortunately, no cheat device exists that can change the assembly, so hacking it is more a matter of patching the ROM, and less a matter of using it for simple cheats. Not documented.&lt;br /&gt;
&lt;br /&gt;
==Playstation==&lt;br /&gt;
===PCSX 1.5 With Debugger===&lt;br /&gt;
This emulator is available [http://www.romhacking.net/utils/267/ here].&lt;br /&gt;
&lt;br /&gt;
Press F11 to enter the debugger. On-screen aids should be apparent.&lt;br /&gt;
&lt;br /&gt;
===PSX===&lt;br /&gt;
This emulator can be found at [http://www.romhacking.net/utils/311/ this address].&lt;br /&gt;
&lt;br /&gt;
This can be a decent debugging alternative if a game doesn&#039;t work well in the above emulator.&lt;br /&gt;
&lt;br /&gt;
===PCSX Agemo debugger===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/475/ here].&lt;br /&gt;
&lt;br /&gt;
It could be favorable for some tasks, compared to the other debuggers.&lt;br /&gt;
&lt;br /&gt;
==N64==&lt;br /&gt;
===Nemu64===&lt;br /&gt;
This emulator can be found [http://www.emulator-zone.com/doc.php/n64/nemu64.html here]&lt;br /&gt;
&lt;br /&gt;
Setting execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Commands...&amp;lt;br&amp;gt;&lt;br /&gt;
To set a break on execution, go to the line that you want to break on, and click in the vertical bar to the left(&amp;lt;) of the address you want to breakpoint.&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in RAM&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Memory...&amp;lt;br&amp;gt;&lt;br /&gt;
Enable the read and/or write check boxes, and right-click the memory space you want to set, unset, or change an access breakpoint on.&lt;br /&gt;
&lt;br /&gt;
Some games don&#039;t run in Nemu, so you may have to switch to this hook_log based emulator if you want the codes. The 1964 tracer can be useful, which is available [http://www.romhacking.net/utils/335/ here].&lt;br /&gt;
&lt;br /&gt;
The hook_log system is a little bit more demanding to use than a visual debugger, but with compatibility issues, it&#039;s better than lucky to have a second usable debugging emulator. The save-states can be decompressed, and loaded in their decompressed form if needed&lt;br /&gt;
&lt;br /&gt;
An issue with this emulator is that not all instructions are logged, but it&#039;s still worth knowing about for the fact that many instructions are logged, and it can be used with write logging.&lt;br /&gt;
&lt;br /&gt;
===Project64 debug build binary===&lt;br /&gt;
This emulator can be found [http://www.thegshi.org/downloads/Project64%20Build%2052%20Debug%20Binary.zip here].&lt;br /&gt;
&lt;br /&gt;
This version of the emulator has better support for games than Nemu64, and Ugetab used this tool in combination with nemu64 to edit USFs, as well as make a few codes that people using only a single emulation tool were having extremely hard struggles with.&lt;br /&gt;
&lt;br /&gt;
==Saturn==&lt;br /&gt;
===Yabause===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/482/ here].&lt;br /&gt;
&lt;br /&gt;
This is one of the few Saturn emulators out there.&lt;br /&gt;
&lt;br /&gt;
==Wonder Swan==&lt;br /&gt;
===Cygne Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/244/ here].&lt;br /&gt;
&lt;br /&gt;
A decent Tracing program.&lt;br /&gt;
&lt;br /&gt;
===Oswan Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/338/ here].&lt;br /&gt;
&lt;br /&gt;
This is just another hook-log tracer.&lt;br /&gt;
&lt;br /&gt;
==Playstation 2==&lt;br /&gt;
[The current author is too lazy to write this, but will get around to it later if no one else does]&lt;br /&gt;
&lt;br /&gt;
[[Category:Hacking and Game Info]]&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=4393</id>
		<title>Assembly Hacking</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=4393"/>
		<updated>2009-08-09T23:18:54Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: /* SNES */  - SuperFX logging emulator added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Assembly hacking is the art of editing a compiled program. Without the source code, and without notes from the source code, one has to deduce almost everything about the underlying code, and how it works with RAM.&lt;br /&gt;
&lt;br /&gt;
There are several emulators that can aid one in creating a modification for a game. Games for console systems fall into the category of compiled programs, and generally, the source code is unavailable for these games.&lt;br /&gt;
&lt;br /&gt;
The use of making an assembly hack for a game can be found with the Nintendo Entertainment System (NES) [[Game Genie]].&lt;br /&gt;
&lt;br /&gt;
The codes that are entered into an NES Game Genie represent single-byte assembly hacks. Any assembly hack that could be done with a change of 3 bytes or less is possible to implement with a single Game Genie. The SNES Game Genie allows up to 5 codes, and 5 bytes of change. While this makes the possible usage of codes very limiting, it didn&#039;t prevent single-byte invincibility and infinite lives codes from appearing that could make it unnecessary to use additional codes.&lt;br /&gt;
&lt;br /&gt;
For more modern assembly hacking of the same systems, emulators that support 50 or more codes for any given game aren&#039;t uncommon. The ROMs have been turned into files that can be patched with all the changes needed to give the game a script in a new language. Emulators that aid in the process of making assembly hacks have appeared for many different emulated systems. The effect is that more people are now capable of starting their own projects, and existing projects can be modified and/or repaired more easily.&lt;br /&gt;
&lt;br /&gt;
=Emulators=&lt;br /&gt;
&lt;br /&gt;
==NES==&lt;br /&gt;
===FCEU===&lt;br /&gt;
[http://www.the-interweb.com/serendipity/index.php?/categories/9-FCEUXD-SP FCEUXDSP] is the result of a emulator first developed by Parasyte called FCEUD, which was then picked up by bbitmaster and renamed to FCEUXD, and finally adopted as FCEUXD SP.&lt;br /&gt;
&lt;br /&gt;
====Setting breakpoints in ROM/RAM====&lt;br /&gt;
Tools&amp;gt;Debug&lt;br /&gt;
&lt;br /&gt;
In the breakpoint window, &#039;Add&#039; the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
ROM is 8000-FFFF&amp;lt;br&amp;gt;&lt;br /&gt;
RAM is 0000-07FF, 6000-7FFF&amp;lt;br&amp;gt;&lt;br /&gt;
0800-3FFF is mirrored from some part of RAM.&amp;lt;br&amp;gt;&lt;br /&gt;
4000-4015 can be breakpointed if working on an NSF. If you want to use this to deal with NSFs, try Ugetabs [http://www.angelfire.com/nc/ugetab edited version], which tends to play nicer with them&lt;br /&gt;
&lt;br /&gt;
&#039;Hex Editor&#039; is a memory viewer/modifier.&lt;br /&gt;
&lt;br /&gt;
==SNES==&lt;br /&gt;
===Geiger&#039;s SNES9X Debugger===&lt;br /&gt;
This emulator can be found at [http://geigercount.net/crypt/ Geiger&#039;s Crypt] and [http://www.zophar.net/snes/geiger-s-snes9x-debugger.html Zophar&#039;s Domain - Geiger’s Snes9x Debugger].&lt;br /&gt;
&lt;br /&gt;
====Setting breakpoints in ROM/RAM====&lt;br /&gt;
Open ROM, Click &#039;Breakpoints&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
In the breakpoint window, enter the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
Standard RAM: 7E0000 - 7FFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
SA1 RAM: 400000-407FFF, 303000-303FFF&amp;lt;br&amp;gt;&lt;br /&gt;
HiROM - C00000 - FFFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
LoROM - 808000-BFFFFF (**0000 - **7FFF doesn&#039;t exist)&lt;br /&gt;
&lt;br /&gt;
If you use the [[SA1]] logger with an SA1-using game, and wish to find an address that changed an address in RAM, you can see if the conversion chart on the [[SA1]] page shows you the address to search for in the log file.&lt;br /&gt;
&lt;br /&gt;
===FuSoYa&#039;s SNES9X SuperFX Instruction Logger===&lt;br /&gt;
This emulator can be found [http://www.gshi.org/downloads/snes9x1.43-FuSoYa-SFX_B2.zip here].&lt;br /&gt;
&lt;br /&gt;
This emulator allows you to log SuperFX instructions being used by the emulator.&lt;br /&gt;
&lt;br /&gt;
Press the NumLock button to start/stop logging.&lt;br /&gt;
&lt;br /&gt;
Instructions will be logged to sfx_trace.txt, in the folder with the emulator.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s an example on how to interpret the results:&amp;lt;br&amp;gt;&lt;br /&gt;
00:e834 40       ldw (r0)        r0=$0058 SRAM=00:5AAE&amp;lt;br&amp;gt;&lt;br /&gt;
00:e835 64       sub r4          r0=$0055 CY=1&lt;br /&gt;
&lt;br /&gt;
First line Loads Word (SRAM=00:5AAE) to (r0). In Geiger&#039;s SNES9X Debugger, this is address 705AAE in the RAM viewer. In ZSNES, you can find this in a save-state at 0x4127F + 0x5AAE (= 0x46D2D). The result of this operation is on the same line.&lt;br /&gt;
&lt;br /&gt;
Second line subtracts (r4) from (r0). This next result is on the same line as well. This can be coded out to give you Infinite Health in Doom, but it won&#039;t work as a Game Genie code. The file address would be either 6835 or 6A35. Only one address of those 2 will be 0x64.&lt;br /&gt;
&lt;br /&gt;
==Genesis==&lt;br /&gt;
&lt;br /&gt;
===Regen Debugger Build===&lt;br /&gt;
This emulator can be found [http://aamirm.hacking-cult.org/ here]&lt;br /&gt;
&lt;br /&gt;
Backup: [http://www.gshi.org/downloads/Regen095D.zip Regen 0.95 Debugger]&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve used FCEUXDSP, Geiger&#039;s Snes9x, BGB, Nemu08, pSX, or pretty much any other active debugger, you&#039;ll realize that this is along the same lines of those debuggers. This is certainly what Genesis hackers have been waiting for when it comes to a user friendly debugger.&lt;br /&gt;
&lt;br /&gt;
It runs Genesis, Game Gear, and SMS files, but only debugs Genesis at the moment. Use [[#Emukon]] if you want to hack Game Gear or SMS.&lt;br /&gt;
&lt;br /&gt;
===Gens Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/337/ here].&lt;br /&gt;
&lt;br /&gt;
No breakpoints, but adequate tracing. A guide has been written on the specific usage of the emulator.&lt;br /&gt;
&lt;br /&gt;
The idea is that you can trace-log writes to and reads from memory, and you can also log all commands, and determine what&#039;s happening from the full log, by using what you find from the hook logging.&lt;br /&gt;
&lt;br /&gt;
===HazeMD===&lt;br /&gt;
This emulator can be found at [http://haze.mameworld.info/ this address].&lt;br /&gt;
&lt;br /&gt;
This emulator is harder to get setup to use a ROM, but comes with a MAME-style debugger. MAME&#039;s debugger is well known for being so powerful, considering the number of systems it can be used with when compiled into a build of MAME. The Gens tracer tends to have slightly better compatibility, while the HazeMD emulator has more potential for cheat codes, already having a Cheat system designed to handle multiple CPUs, which could be used for 32x game ROM hacks, and RAM hacks.&lt;br /&gt;
&lt;br /&gt;
==Gameboy==&lt;br /&gt;
===BGB===&lt;br /&gt;
This emulator can be found [http://bgb.bircd.org/ here]&lt;br /&gt;
&lt;br /&gt;
Load a ROM, and right-click the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debug mode enabled: to enable debugging&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debugger to enter the debugger&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in ROM/RAM&amp;lt;br&amp;gt;&lt;br /&gt;
In the debugger window:&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;breakpoints for execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;access breakpoints for read/write breaks.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Visual Boy Advance Tracer===&lt;br /&gt;
See [[#Visual_Boy_Advance_Tracer_2]]&lt;br /&gt;
&lt;br /&gt;
==Game Gear==&lt;br /&gt;
===Emukon===&lt;br /&gt;
This emulator can be found [http://emukon.kontechs.de/ here].&lt;br /&gt;
&lt;br /&gt;
Backup: [http://www.gshi.org/downloads/Emukon105.zip Emukon 1.05]&lt;br /&gt;
&lt;br /&gt;
This is basically a friendlier style of Logging Debugger the way I tend to use it, with Breakpoints to help figure out how code you find operates. I&#039;ve used it to at least as much success as I&#039;ve used the Hook_log debuggers, only this was more boring because I didn&#039;t have to fight with the emulator as much.&lt;br /&gt;
&lt;br /&gt;
You can use a combination of Breakpoints and Log Files to debug games.&lt;br /&gt;
&lt;br /&gt;
Breakpoints have their own management window, or you can right click lines in the debugger.&lt;br /&gt;
&lt;br /&gt;
To use the log files effectively, you should focus on a single byte with a known effect, get to about where the setting you&#039;re looking for will change, go to the Debugger &amp;gt; Debugger menu, enable it if needed, then click the Clear Log button if you want a fresh start, and the Log button to start logging. Get the thing changed that you want, and then look under the DebugLogs folder for the game you&#039;re working on, and search the text logs for the address you want to check, whether it&#039;s the execution address by some chance or the memory address. Breakpoints and Logging work well together to discover the execution path to a piece of code.&lt;br /&gt;
&lt;br /&gt;
It&#039;s not as exceedingly simple as some other debuggers, but it&#039;s quite useful, and it&#039;s my first choice for hacking Game Gear as well as SMS.&lt;br /&gt;
&lt;br /&gt;
==Master System==&lt;br /&gt;
===Emukon===&lt;br /&gt;
See Game Gear section: [[#Emukon]]&lt;br /&gt;
&lt;br /&gt;
==Gameboy Advance==&lt;br /&gt;
===Visual Boy Advance Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/340/ here].&lt;br /&gt;
&lt;br /&gt;
This emulator uses the Hook Log system. Those familiar with the hook_log Genesis or N64 emulators should have little trouble adapting to this system.&lt;br /&gt;
&lt;br /&gt;
Note that it has also been used to good effect for a small number of gameboy games that BGB doesn&#039;t support. [[Ugetab]] used this for GBS ripping, but with full code logging, and a save-state near when something changes, you could just as effectively search for a memory address in trace.log. Mind that while GB assembly doesn&#039;t pile up as quickly as GBA or N64, and it is still necessary to be relatively close to the change before activating logging, if you don&#039;t want to have to use a special text editor to open an enormous log file. &lt;br /&gt;
&lt;br /&gt;
===Visual Boy Advance===&lt;br /&gt;
This emulator can be found at [http://vba.ngemu.com/downloads.shtml this address].&lt;br /&gt;
&lt;br /&gt;
Windows - SDL is required. Unfortunately, no cheat device exists that can change the assembly, so hacking it is more a matter of patching the ROM, and less a matter of using it for simple cheats. Not documented.&lt;br /&gt;
&lt;br /&gt;
==Playstation==&lt;br /&gt;
===PCSX 1.5 With Debugger===&lt;br /&gt;
This emulator is available [http://www.romhacking.net/utils/267/ here].&lt;br /&gt;
&lt;br /&gt;
Press F11 to enter the debugger. On-screen aids should be apparent.&lt;br /&gt;
&lt;br /&gt;
===PSX===&lt;br /&gt;
This emulator can be found at [http://www.romhacking.net/utils/311/ this address].&lt;br /&gt;
&lt;br /&gt;
This can be a decent debugging alternative if a game doesn&#039;t work well in the above emulator.&lt;br /&gt;
&lt;br /&gt;
===PCSX Agemo debugger===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/475/ here].&lt;br /&gt;
&lt;br /&gt;
It could be favorable for some tasks, compared to the other debuggers.&lt;br /&gt;
&lt;br /&gt;
==N64==&lt;br /&gt;
===Nemu64===&lt;br /&gt;
This emulator can be found [http://www.emulator-zone.com/doc.php/n64/nemu64.html here]&lt;br /&gt;
&lt;br /&gt;
Setting execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Commands...&amp;lt;br&amp;gt;&lt;br /&gt;
To set a break on execution, go to the line that you want to break on, and click in the vertical bar to the left(&amp;lt;) of the address you want to breakpoint.&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in RAM&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Memory...&amp;lt;br&amp;gt;&lt;br /&gt;
Enable the read and/or write check boxes, and right-click the memory space you want to set, unset, or change an access breakpoint on.&lt;br /&gt;
&lt;br /&gt;
Some games don&#039;t run in Nemu, so you may have to switch to this hook_log based emulator if you want the codes. The 1964 tracer can be useful, which is available [http://www.romhacking.net/utils/335/ here].&lt;br /&gt;
&lt;br /&gt;
The hook_log system is a little bit more demanding to use than a visual debugger, but with compatibility issues, it&#039;s better than lucky to have a second usable debugging emulator. The save-states can be decompressed, and loaded in their decompressed form if needed&lt;br /&gt;
&lt;br /&gt;
An issue with this emulator is that not all instructions are logged, but it&#039;s still worth knowing about for the fact that many instructions are logged, and it can be used with write logging.&lt;br /&gt;
&lt;br /&gt;
===Project64 debug build binary===&lt;br /&gt;
This emulator can be found [http://www.thegshi.org/downloads/Project64%20Build%2052%20Debug%20Binary.zip here].&lt;br /&gt;
&lt;br /&gt;
This version of the emulator has better support for games than Nemu64, and Ugetab used this tool in combination with nemu64 to edit USFs, as well as make a few codes that people using only a single emulation tool were having extremely hard struggles with.&lt;br /&gt;
&lt;br /&gt;
==Saturn==&lt;br /&gt;
===Yabause===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/482/ here].&lt;br /&gt;
&lt;br /&gt;
This is one of the few Saturn emulators out there.&lt;br /&gt;
&lt;br /&gt;
==Wonder Swan==&lt;br /&gt;
===Cygne Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/244/ here].&lt;br /&gt;
&lt;br /&gt;
A decent Tracing program.&lt;br /&gt;
&lt;br /&gt;
===Oswan Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/338/ here].&lt;br /&gt;
&lt;br /&gt;
This is just another hook-log tracer.&lt;br /&gt;
&lt;br /&gt;
==Playstation 2==&lt;br /&gt;
[The current author is too lazy to write this, but will get around to it later if no one else does]&lt;br /&gt;
&lt;br /&gt;
[[Category:Hacking and Game Info]]&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=4329</id>
		<title>Assembly Hacking</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=4329"/>
		<updated>2009-06-15T00:35:18Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: Visual Boy Tracer link added, spelling&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Assembly hacking is the art of editing a compiled program. Without the source code, and without notes from the source code, one has to deduce almost everything about the underlying code, and how it works with RAM.&lt;br /&gt;
&lt;br /&gt;
There are several emulators that can aid one in creating a modification for a game. Games for console systems fall into the category of compiled programs, and generally, the source code is unavailable for these games.&lt;br /&gt;
&lt;br /&gt;
The use of making an assembly hack for a game can be found with the Nintendo Entertainment System (NES) [[Game Genie]].&lt;br /&gt;
&lt;br /&gt;
The codes that are entered into an NES Game Genie represent single-byte assembly hacks. Any assembly hack that could be done with a change of 3 bytes or less is possible to implement with a single Game Genie. The SNES Game Genie allows up to 5 codes, and 5 bytes of change. While this makes the possible usage of codes very limiting, it didn&#039;t prevent single-byte invincibility and infinite lives codes from appearing that could make it unnecessary to use additional codes.&lt;br /&gt;
&lt;br /&gt;
For more modern assembly hacking of the same systems, emulators that support 50 or more codes for any given game aren&#039;t uncommon. The ROMs have been turned into files that can be patched with all the changes needed to give the game a script in a new language. Emulators that aid in the process of making assembly hacks have appeared for many different emulated systems. The effect is that more people are now capable of starting their own projects, and existing projects can be modified and/or repaired more easily.&lt;br /&gt;
&lt;br /&gt;
=Emulators=&lt;br /&gt;
&lt;br /&gt;
==NES==&lt;br /&gt;
===FCEU===&lt;br /&gt;
[http://www.the-interweb.com/serendipity/index.php?/categories/9-FCEUXD-SP FCEUXDSP] is the result of a emulator first developed by Parasyte called FCEUD, which was then picked up by bbitmaster and renamed to FCEUXD, and finally adopted as FCEUXD SP.&lt;br /&gt;
&lt;br /&gt;
====Setting breakpoints in ROM/RAM====&lt;br /&gt;
Tools&amp;gt;Debug&lt;br /&gt;
&lt;br /&gt;
In the breakpoint window, &#039;Add&#039; the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
ROM is 8000-FFFF&amp;lt;br&amp;gt;&lt;br /&gt;
RAM is 0000-07FF, 6000-7FFF&amp;lt;br&amp;gt;&lt;br /&gt;
0800-3FFF is mirrored from some part of RAM.&amp;lt;br&amp;gt;&lt;br /&gt;
4000-4015 can be breakpointed if working on an NSF. If you want to use this to deal with NSFs, try Ugetabs [http://www.angelfire.com/nc/ugetab edited version], which tends to play nicer with them&lt;br /&gt;
&lt;br /&gt;
&#039;Hex Editor&#039; is a memory viewer/modifier.&lt;br /&gt;
&lt;br /&gt;
==SNES==&lt;br /&gt;
===Geiger&#039;s SNES9X Debugger===&lt;br /&gt;
This emulator can be found at [http://geigercount.net/crypt/ Geiger&#039;s Crypt] and [http://www.zophar.net/snes/geiger-s-snes9x-debugger.html Zophar&#039;s Domain - Geiger’s Snes9x Debugger].&lt;br /&gt;
&lt;br /&gt;
====Setting breakpoints in ROM/RAM====&lt;br /&gt;
Open ROM, Click &#039;Breakpoints&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
In the breakpoint window, enter the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
Standard RAM: 7E0000 - 7FFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
SA1 RAM: 400000-407FFF, 303000-303FFF&amp;lt;br&amp;gt;&lt;br /&gt;
HiROM - C00000 - FFFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
LoROM - 808000-BFFFFF (**0000 - **7FFF doesn&#039;t exist)&lt;br /&gt;
&lt;br /&gt;
If you use the [[SA1]] logger with an SA1-using game, and wish to find an address that changed an address in RAM, you can see if the conversion chart on the [[SA1]] page shows you the address to search for in the log file.&lt;br /&gt;
&lt;br /&gt;
==Genesis==&lt;br /&gt;
&lt;br /&gt;
===Regen Debugger Build===&lt;br /&gt;
This emulator can be found [http://aamirm.hacking-cult.org/ here]&lt;br /&gt;
&lt;br /&gt;
Backup: [http://www.gshi.org/downloads/Regen095D.zip Regen 0.95 Debugger]&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve used FCEUXDSP, Geiger&#039;s Snes9x, BGB, Nemu08, pSX, or pretty much any other active debugger, you&#039;ll realize that this is along the same lines of those debuggers. This is certainly what Genesis hackers have been waiting for when it comes to a user friendly debugger.&lt;br /&gt;
&lt;br /&gt;
It runs Genesis, Game Gear, and SMS files, but only debugs Genesis at the moment. Use [[#Emukon]] if you want to hack Game Gear or SMS.&lt;br /&gt;
&lt;br /&gt;
===Gens Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/337/ here].&lt;br /&gt;
&lt;br /&gt;
No breakpoints, but adequate tracing. A guide has been written on the specific usage of the emulator.&lt;br /&gt;
&lt;br /&gt;
The idea is that you can trace-log writes to and reads from memory, and you can also log all commands, and determine what&#039;s happening from the full log, by using what you find from the hook logging.&lt;br /&gt;
&lt;br /&gt;
===HazeMD===&lt;br /&gt;
This emulator can be found at [http://haze.mameworld.info/ this address].&lt;br /&gt;
&lt;br /&gt;
This emulator is harder to get setup to use a ROM, but comes with a MAME-style debugger. MAME&#039;s debugger is well known for being so powerful, considering the number of systems it can be used with when compiled into a build of MAME. The Gens tracer tends to have slightly better compatibility, while the HazeMD emulator has more potential for cheat codes, already having a Cheat system designed to handle multiple CPUs, which could be used for 32x game ROM hacks, and RAM hacks.&lt;br /&gt;
&lt;br /&gt;
==Gameboy==&lt;br /&gt;
===BGB===&lt;br /&gt;
This emulator can be found [http://bgb.bircd.org/ here]&lt;br /&gt;
&lt;br /&gt;
Load a ROM, and right-click the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debug mode enabled: to enable debugging&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debugger to enter the debugger&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in ROM/RAM&amp;lt;br&amp;gt;&lt;br /&gt;
In the debugger window:&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;breakpoints for execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;access breakpoints for read/write breaks.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Visual Boy Advance Tracer===&lt;br /&gt;
See [[#Visual_Boy_Advance_Tracer_2]]&lt;br /&gt;
&lt;br /&gt;
==Game Gear==&lt;br /&gt;
===Emukon===&lt;br /&gt;
This emulator can be found [http://emukon.kontechs.de/ here].&lt;br /&gt;
&lt;br /&gt;
Backup: [http://www.gshi.org/downloads/Emukon105.zip Emukon 1.05]&lt;br /&gt;
&lt;br /&gt;
This is basically a friendlier style of Logging Debugger the way I tend to use it, with Breakpoints to help figure out how code you find operates. I&#039;ve used it to at least as much success as I&#039;ve used the Hook_log debuggers, only this was more boring because I didn&#039;t have to fight with the emulator as much.&lt;br /&gt;
&lt;br /&gt;
You can use a combination of Breakpoints and Log Files to debug games.&lt;br /&gt;
&lt;br /&gt;
Breakpoints have their own management window, or you can right click lines in the debugger.&lt;br /&gt;
&lt;br /&gt;
To use the log files effectively, you should focus on a single byte with a known effect, get to about where the setting you&#039;re looking for will change, go to the Debugger &amp;gt; Debugger menu, enable it if needed, then click the Clear Log button if you want a fresh start, and the Log button to start logging. Get the thing changed that you want, and then look under the DebugLogs folder for the game you&#039;re working on, and search the text logs for the address you want to check, whether it&#039;s the execution address by some chance or the memory address. Breakpoints and Logging work well together to discover the execution path to a piece of code.&lt;br /&gt;
&lt;br /&gt;
It&#039;s not as exceedingly simple as some other debuggers, but it&#039;s quite useful, and it&#039;s my first choice for hacking Game Gear as well as SMS.&lt;br /&gt;
&lt;br /&gt;
==Master System==&lt;br /&gt;
===Emukon===&lt;br /&gt;
See Game Gear section: [[#Emukon]]&lt;br /&gt;
&lt;br /&gt;
==Gameboy Advance==&lt;br /&gt;
===Visual Boy Advance Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/340/ here].&lt;br /&gt;
&lt;br /&gt;
This emulator uses the Hook Log system. Those familiar with the hook_log Genesis or N64 emulators should have little trouble adapting to this system.&lt;br /&gt;
&lt;br /&gt;
Note that it has also been used to good effect for a small number of gameboy games that BGB doesn&#039;t support. [[Ugetab]] used this for GBS ripping, but with full code logging, and a save-state near when something changes, you could just as effectively search for a memory address in trace.log. Mind that while GB assembly doesn&#039;t pile up as quickly as GBA or N64, and it is still necessary to be relatively close to the change before activating logging, if you don&#039;t want to have to use a special text editor to open an enormous log file. &lt;br /&gt;
&lt;br /&gt;
===Visual Boy Advance===&lt;br /&gt;
This emulator can be found at [http://vba.ngemu.com/downloads.shtml this address].&lt;br /&gt;
&lt;br /&gt;
Windows - SDL is required. Unfortunately, no cheat device exists that can change the assembly, so hacking it is more a matter of patching the ROM, and less a matter of using it for simple cheats. Not documented.&lt;br /&gt;
&lt;br /&gt;
==Playstation==&lt;br /&gt;
===PCSX 1.5 With Debugger===&lt;br /&gt;
This emulator is available [http://www.romhacking.net/utils/267/ here].&lt;br /&gt;
&lt;br /&gt;
Press F11 to enter the debugger. On-screen aids should be apparent.&lt;br /&gt;
&lt;br /&gt;
===PSX===&lt;br /&gt;
This emulator can be found at [http://www.romhacking.net/utils/311/ this address].&lt;br /&gt;
&lt;br /&gt;
This can be a decent debugging alternative if a game doesn&#039;t work well in the above emulator.&lt;br /&gt;
&lt;br /&gt;
===PCSX Agemo debugger===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/475/ here].&lt;br /&gt;
&lt;br /&gt;
It could be favorable for some tasks, compared to the other debuggers.&lt;br /&gt;
&lt;br /&gt;
==N64==&lt;br /&gt;
===Nemu64===&lt;br /&gt;
This emulator can be found [http://www.emulator-zone.com/doc.php/n64/nemu64.html here]&lt;br /&gt;
&lt;br /&gt;
Setting execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Commands...&amp;lt;br&amp;gt;&lt;br /&gt;
To set a break on execution, go to the line that you want to break on, and click in the vertical bar to the left(&amp;lt;) of the address you want to breakpoint.&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in RAM&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Memory...&amp;lt;br&amp;gt;&lt;br /&gt;
Enable the read and/or write check boxes, and right-click the memory space you want to set, unset, or change an access breakpoint on.&lt;br /&gt;
&lt;br /&gt;
Some games don&#039;t run in Nemu, so you may have to switch to this hook_log based emulator if you want the codes. The 1964 tracer can be useful, which is available [http://www.romhacking.net/utils/335/ here].&lt;br /&gt;
&lt;br /&gt;
The hook_log system is a little bit more demanding to use than a visual debugger, but with compatibility issues, it&#039;s better than lucky to have a second usable debugging emulator. The save-states can be decompressed, and loaded in their decompressed form if needed&lt;br /&gt;
&lt;br /&gt;
An issue with this emulator is that not all instructions are logged, but it&#039;s still worth knowing about for the fact that many instructions are logged, and it can be used with write logging.&lt;br /&gt;
&lt;br /&gt;
===Project64 debug build binary===&lt;br /&gt;
This emulator can be found [http://www.thegshi.org/downloads/Project64%20Build%2052%20Debug%20Binary.zip here].&lt;br /&gt;
&lt;br /&gt;
This version of the emulator has better support for games than Nemu64, and Ugetab used this tool in combination with nemu64 to edit USFs, as well as make a few codes that people using only a single emulation tool were having extremely hard struggles with.&lt;br /&gt;
&lt;br /&gt;
==Saturn==&lt;br /&gt;
===Yabause===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/482/ here].&lt;br /&gt;
&lt;br /&gt;
This is one of the few Saturn emulators out there.&lt;br /&gt;
&lt;br /&gt;
==Wonder Swan==&lt;br /&gt;
===Cygne Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/244/ here].&lt;br /&gt;
&lt;br /&gt;
A decent Tracing program.&lt;br /&gt;
&lt;br /&gt;
===Oswan Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/338/ here].&lt;br /&gt;
&lt;br /&gt;
This is just another hook-log tracer.&lt;br /&gt;
&lt;br /&gt;
==Playstation 2==&lt;br /&gt;
[The current author is too lazy to write this, but will get around to it later if no one else does]&lt;br /&gt;
&lt;br /&gt;
[[Category:Hacking and Game Info]]&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=4328</id>
		<title>Assembly Hacking</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=4328"/>
		<updated>2009-06-15T00:28:37Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: Game Gear/Master System debugger&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Assembly hacking is the art of editing a compiled program. Without the source code, and without notes from the source code, one has to deduce almost everything about the underlying code, and how it works with RAM.&lt;br /&gt;
&lt;br /&gt;
There are several emulators that can aid one in creating a modification for a game. Games for console systems fall into the category of compiled programs, and generally, the source code is unavailable for these games.&lt;br /&gt;
&lt;br /&gt;
The use of making an assembly hack for a game can be found with the Nintendo Entertainment System (NES) [[Game Genie]].&lt;br /&gt;
&lt;br /&gt;
The codes that are entered into an NES Game Genie represent single-byte assembly hacks. Any assembly hack that could be done with a change of 3 bytes or less is possible to implement with a single Game Genie. The SNES Game Genie allows up to 5 codes, and 5 bytes of change. While this makes the possible usage of codes very limiting, it didn&#039;t prevent single-byte invincibility and infinite lives codes from appearing that could make it unneccesary to use additional codes.&lt;br /&gt;
&lt;br /&gt;
For more modern assembly hacking of the same systems, emulators that support 50 or more codes for any given game aren&#039;t uncommon. The ROMs have been turned into files that can be patched with all the changes needed to give the game a script in a new language. Emulators that aid in the process of making assembly hacks have appeared for many different emulated systems. The effect is that more people are now capable of starting their own projects, and existing projects can be modified and/or repaired more easily.&lt;br /&gt;
&lt;br /&gt;
=Emulators=&lt;br /&gt;
&lt;br /&gt;
==NES==&lt;br /&gt;
===FCEU===&lt;br /&gt;
[http://www.the-interweb.com/serendipity/index.php?/categories/9-FCEUXD-SP FCEUXDSP] is the result of a emulator first developed by Parasyte called FCEUD, which was then picked up by bbitmaster and renamed to FCEUXD, and finally adopted as FCEUXD SP.&lt;br /&gt;
&lt;br /&gt;
====Setting breakpoints in ROM/RAM====&lt;br /&gt;
Tools&amp;gt;Debug&lt;br /&gt;
&lt;br /&gt;
In the breakpoint window, &#039;Add&#039; the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
ROM is 8000-FFFF&amp;lt;br&amp;gt;&lt;br /&gt;
RAM is 0000-07FF, 6000-7FFF&amp;lt;br&amp;gt;&lt;br /&gt;
0800-3FFF is mirrored from some part of RAM.&amp;lt;br&amp;gt;&lt;br /&gt;
4000-4015 can be breakpointed if working on an NSF. If you want to use this to deal with NSFs, try Ugetabs [http://www.angelfire.com/nc/ugetab edited version], which tends to play nicer with them&lt;br /&gt;
&lt;br /&gt;
&#039;Hex Editor&#039; is a memory viewer/modifier.&lt;br /&gt;
&lt;br /&gt;
==SNES==&lt;br /&gt;
===Geiger&#039;s SNES9X Debugger===&lt;br /&gt;
This emulator can be found at [http://geigercount.net/crypt/ Geiger&#039;s Crypt] and [http://www.zophar.net/snes/geiger-s-snes9x-debugger.html Zophar&#039;s Domain - Geiger’s Snes9x Debugger].&lt;br /&gt;
&lt;br /&gt;
====Setting breakpoints in ROM/RAM====&lt;br /&gt;
Open ROM, Click &#039;Breakpoints&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
In the breakpoint window, enter the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
Standard RAM: 7E0000 - 7FFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
SA1 RAM: 400000-407FFF, 303000-303FFF&amp;lt;br&amp;gt;&lt;br /&gt;
HiROM - C00000 - FFFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
LoROM - 808000-BFFFFF (**0000 - **7FFF doesn&#039;t exist)&lt;br /&gt;
&lt;br /&gt;
If you use the [[SA1]] logger with an SA1-using game, and wish to find an address that changed an address in RAM, you can see if the conversion chart on the [[SA1]] page shows you the address to search for in the log file.&lt;br /&gt;
&lt;br /&gt;
==Genesis==&lt;br /&gt;
&lt;br /&gt;
===Regen Debugger Build===&lt;br /&gt;
This emulator can be found [http://aamirm.hacking-cult.org/ here]&lt;br /&gt;
&lt;br /&gt;
Backup: [http://www.gshi.org/downloads/Regen095D.zip Regen 0.95 Debugger]&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve used FCEUXDSP, Geiger&#039;s Snes9x, BGB, Nemu08, pSX, or pretty much any other active debugger, you&#039;ll realize that this is along the same lines of those debuggers. This is certainly what Genesis hackers have been waiting for when it comes to a user friendly debugger.&lt;br /&gt;
&lt;br /&gt;
It runs Genesis, Game Gear, and SMS files, but only debugs Genesis at the moment. Use [[#Emukon]] if you want to hack Game Gear or SMS.&lt;br /&gt;
&lt;br /&gt;
===Gens Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/337/ here].&lt;br /&gt;
&lt;br /&gt;
No breakpoints, but adequate tracing. A guide has been written on the specific usage of the emulator.&lt;br /&gt;
&lt;br /&gt;
The idea is that you can trace-log writes to and reads from memory, and you can also log all commands, and determine what&#039;s happening from the full log, by using what you find from the hook logging.&lt;br /&gt;
&lt;br /&gt;
===HazeMD===&lt;br /&gt;
This emulator can be found at [http://haze.mameworld.info/ this address].&lt;br /&gt;
&lt;br /&gt;
This emulator is harder to get setup to use a ROM, but comes with a MAME-style debugger. MAME&#039;s debugger is well known for being so powerful, considering the number of systems it can be used with when compiled into a build of MAME. The Gens tracer tends to have slightly better compatibility, while the HazeMD emulator has more potential for cheat codes, already having a Cheat system designed to handle multiple CPUs, which could be used for 32x game ROM hacks, and RAM hacks.&lt;br /&gt;
&lt;br /&gt;
==Gameboy==&lt;br /&gt;
===BGB===&lt;br /&gt;
This emulator can be found [http://bgb.bircd.org/ here]&lt;br /&gt;
&lt;br /&gt;
Load a ROM, and right-click the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debug mode enabled: to enable debugging&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debugger to enter the debugger&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in ROM/RAM&amp;lt;br&amp;gt;&lt;br /&gt;
In the debugger window:&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;breakpoints for execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;access breakpoints for read/write breaks.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, see below about Visual Boy Advance Tracer.&lt;br /&gt;
&lt;br /&gt;
==Game Gear==&lt;br /&gt;
===Emukon===&lt;br /&gt;
This emulator can be found [http://emukon.kontechs.de/ here].&lt;br /&gt;
&lt;br /&gt;
Backup: [http://www.gshi.org/downloads/Emukon105.zip Emukon 1.05]&lt;br /&gt;
&lt;br /&gt;
This is basically a friendlier style of Logging Debugger the way I tend to use it, with Breakpoints to help figure out how code you find operates. I&#039;ve used it to at least as much success as I&#039;ve used the Hook_log debuggers, only this was more boring because I didn&#039;t have to fight with the emulator as much.&lt;br /&gt;
&lt;br /&gt;
You can use a combination of Breakpoints and Log Files to debug games.&lt;br /&gt;
&lt;br /&gt;
Breakpoints have their own management window, or you can right click lines in the debugger.&lt;br /&gt;
&lt;br /&gt;
To use the log files effectively, you should focus on a single byte with a known effect, get to about where the setting you&#039;re looking for will change, go to the Debugger &amp;gt; Debugger menu, enable it if needed, then click the Clear Log button if you want a fresh start, and the Log button to start logging. Get the thing changed that you want, and then look under the DebugLogs folder for the game you&#039;re working on, and search the text logs for the address you want to check, whether it&#039;s the execution address by some chance or the memory address. Breakpoints and Logging work well together to discover the execution path to a piece of code.&lt;br /&gt;
&lt;br /&gt;
It&#039;s not as exceedingly simple as some other debuggers, but it&#039;s quite useful, and it&#039;s my first choice for hacking Game Gear as well as SMS.&lt;br /&gt;
&lt;br /&gt;
==Master System==&lt;br /&gt;
===Emukon===&lt;br /&gt;
See Game Gear section: [[#Emukon]]&lt;br /&gt;
&lt;br /&gt;
==Gameboy Advance==&lt;br /&gt;
===Visual Boy Advance Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/340/ here].&lt;br /&gt;
&lt;br /&gt;
This emulator uses the Hook Log system. Those familiar with the hook_log Genesis or N64 emulators should have little trouble adapting to this system.&lt;br /&gt;
&lt;br /&gt;
Note that it has also been used to good effect for a small number of gameboy games that BGB doesn&#039;t support. [[Ugetab]] used this for GBS ripping, but with full code logging, and a save-state near when something changes, you could just as effectively search for a memory address in trace.log. Mind that while GB assembly doesn&#039;t pile up as quickly as GBA or N64, and it is still nessesary to be relatively close to the change before activating logging, if you don&#039;t want to have to use a special text editor to open an enormous log file. &lt;br /&gt;
&lt;br /&gt;
===Visual Boy Advance===&lt;br /&gt;
This emulator can be found at [http://vba.ngemu.com/downloads.shtml this address].&lt;br /&gt;
&lt;br /&gt;
Windows - SDL is required. Unfortunately, no cheat device exists that can change the assembly, so hacking it is more a matter of patching the ROM, and less a matter of using it for simple cheats. Not documented.&lt;br /&gt;
&lt;br /&gt;
==Playstation==&lt;br /&gt;
===PCSX 1.5 With Debugger===&lt;br /&gt;
This emulator is available [http://www.romhacking.net/utils/267/ here].&lt;br /&gt;
&lt;br /&gt;
Press F11 to enter the debugger. On-screen aids should be apparent.&lt;br /&gt;
&lt;br /&gt;
===PSX===&lt;br /&gt;
This emulator can be found at [http://www.romhacking.net/utils/311/ this address].&lt;br /&gt;
&lt;br /&gt;
This can be a decent debugging alternative if a game doesn&#039;t work well in the above emulator.&lt;br /&gt;
&lt;br /&gt;
===PCSX Agemo debugger===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/475/ here].&lt;br /&gt;
&lt;br /&gt;
It could be favorable for some tasks, compared to the other debuggers.&lt;br /&gt;
&lt;br /&gt;
==N64==&lt;br /&gt;
===Nemu64===&lt;br /&gt;
This emulator can be found [http://www.emulator-zone.com/doc.php/n64/nemu64.html here]&lt;br /&gt;
&lt;br /&gt;
Setting execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Commands...&amp;lt;br&amp;gt;&lt;br /&gt;
To set a break on execution, go to the line that you want to break on, and click in the vertical bar to the left(&amp;lt;) of the address you want to breakpoint.&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in RAM&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Memory...&amp;lt;br&amp;gt;&lt;br /&gt;
Enable the read and/or write checkboxes, and right-click the memory space you want to set, unset, or change an access breakpoint on.&lt;br /&gt;
&lt;br /&gt;
Some games don&#039;t run in Nemu, so you may have to switch to this hook_log based emulator if you want the codes. The 1964 tracer can be useful, which is available [http://www.romhacking.net/utils/335/ here].&lt;br /&gt;
&lt;br /&gt;
The hook_log system is a little bit more demanding to use than a visual debugger, but with compatibility issues, it&#039;s better than lucky to have a second usable debugging emulator. The save-states can be decompressed, and loaded in their decompressed form if needed&lt;br /&gt;
&lt;br /&gt;
An issue with this emulator is that not all instructions are logged, but it&#039;s still worth knowing about for the fact that many instructions are logged, and it can be used with write logging.&lt;br /&gt;
&lt;br /&gt;
===Project64 debug build binary===&lt;br /&gt;
This emulator can be found [http://www.thegshi.org/downloads/Project64%20Build%2052%20Debug%20Binary.zip here].&lt;br /&gt;
&lt;br /&gt;
This version of the emulator has better support for games than Nemu64, and Ugetab used this tool in combination with nemu64 to edit USFs, as well as make a few codes that people using only a single emulation tool were having extremely hard struggles with.&lt;br /&gt;
&lt;br /&gt;
==Saturn==&lt;br /&gt;
===Yabause===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/482/ here].&lt;br /&gt;
&lt;br /&gt;
This is one of the few Saturn emulators out there.&lt;br /&gt;
&lt;br /&gt;
==Wonder Swan==&lt;br /&gt;
===Cygne Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/244/ here].&lt;br /&gt;
&lt;br /&gt;
A decent Tracing program.&lt;br /&gt;
&lt;br /&gt;
===Oswan Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/338/ here].&lt;br /&gt;
&lt;br /&gt;
This is just another hook-log tracer.&lt;br /&gt;
&lt;br /&gt;
==Playstation 2==&lt;br /&gt;
[The current author is too lazy to write this, but will get around to it later if no one else does]&lt;br /&gt;
&lt;br /&gt;
[[Category:Hacking and Game Info]]&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=4327</id>
		<title>Assembly Hacking</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=4327"/>
		<updated>2009-06-14T03:33:12Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: /* Genesis - Added Regen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Assembly hacking is the art of editing a compiled program. Without the source code, and without notes from the source code, one has to deduce almost everything about the underlying code, and how it works with RAM.&lt;br /&gt;
&lt;br /&gt;
There are several emulators that can aid one in creating a modification for a game. Games for console systems fall into the category of compiled programs, and generally, the source code is unavailable for these games.&lt;br /&gt;
&lt;br /&gt;
The use of making an assembly hack for a game can be found with the Nintendo Entertainment System (NES) [[Game Genie]].&lt;br /&gt;
&lt;br /&gt;
The codes that are entered into an NES Game Genie represent single-byte assembly hacks. Any assembly hack that could be done with a change of 3 bytes or less is possible to implement with a single Game Genie. The SNES Game Genie allows up to 5 codes, and 5 bytes of change. While this makes the possible usage of codes very limiting, it didn&#039;t prevent single-byte invincibility and infinite lives codes from appearing that could make it unneccesary to use additional codes.&lt;br /&gt;
&lt;br /&gt;
For more modern assembly hacking of the same systems, emulators that support 50 or more codes for any given game aren&#039;t uncommon. The ROMs have been turned into files that can be patched with all the changes needed to give the game a script in a new language. Emulators that aid in the process of making assembly hacks have appeared for many different emulated systems. The effect is that more people are now capable of starting their own projects, and existing projects can be modified and/or repaired more easily.&lt;br /&gt;
&lt;br /&gt;
=Emulators=&lt;br /&gt;
&lt;br /&gt;
==NES==&lt;br /&gt;
===FCEU===&lt;br /&gt;
[http://www.the-interweb.com/serendipity/index.php?/categories/9-FCEUXD-SP FCEUXDSP] is the result of a emulator first developed by Parasyte called FCEUD, which was then picked up by bbitmaster and renamed to FCEUXD, and finally adopted as FCEUXD SP.&lt;br /&gt;
&lt;br /&gt;
====Setting breakpoints in ROM/RAM====&lt;br /&gt;
Tools&amp;gt;Debug&lt;br /&gt;
&lt;br /&gt;
In the breakpoint window, &#039;Add&#039; the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
ROM is 8000-FFFF&amp;lt;br&amp;gt;&lt;br /&gt;
RAM is 0000-07FF, 6000-7FFF&amp;lt;br&amp;gt;&lt;br /&gt;
0800-3FFF is mirrored from some part of RAM.&amp;lt;br&amp;gt;&lt;br /&gt;
4000-4015 can be breakpointed if working on an NSF. If you want to use this to deal with NSFs, try Ugetabs [http://www.angelfire.com/nc/ugetab edited version], which tends to play nicer with them&lt;br /&gt;
&lt;br /&gt;
&#039;Hex Editor&#039; is a memory viewer/modifier.&lt;br /&gt;
&lt;br /&gt;
==SNES==&lt;br /&gt;
===Geiger&#039;s SNES9X Debugger===&lt;br /&gt;
This emulator can be found at [http://geigercount.net/crypt/ Geiger&#039;s Crypt] and [http://www.zophar.net/snes/geiger-s-snes9x-debugger.html Zophar&#039;s Domain - Geiger’s Snes9x Debugger].&lt;br /&gt;
&lt;br /&gt;
====Setting breakpoints in ROM/RAM====&lt;br /&gt;
Open ROM, Click &#039;Breakpoints&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
In the breakpoint window, enter the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
Standard RAM: 7E0000 - 7FFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
SA1 RAM: 400000-407FFF, 303000-303FFF&amp;lt;br&amp;gt;&lt;br /&gt;
HiROM - C00000 - FFFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
LoROM - 808000-BFFFFF (**0000 - **7FFF doesn&#039;t exist)&lt;br /&gt;
&lt;br /&gt;
If you use the [[SA1]] logger with an SA1-using game, and wish to find an address that changed an address in RAM, you can see if the conversion chart on the [[SA1]] page shows you the address to search for in the log file.&lt;br /&gt;
&lt;br /&gt;
==Genesis==&lt;br /&gt;
&lt;br /&gt;
===Regen Debugger Build===&lt;br /&gt;
To get this emulator, you can visit it&#039;s [http://aamirm.hacking-cult.org/ Homepage]&lt;br /&gt;
&lt;br /&gt;
This is a backup: [http://www.gshi.org/downloads/Regen095D.zip Regen 0.95 Debugger]&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve used FCEUXDSP, Geiger&#039;s Snes9x, BGB, Nemu08, pSX, or pretty much any other active debugger, you&#039;ll realize that this is along the same lines of those debuggers. This is certainly what Genesis hackers have been waiting for when it comes to a user friendly debugger.&lt;br /&gt;
&lt;br /&gt;
It runs Genesis, Game Gear, and SMS files, but only debugs Genesis at the moment. This is not a problem, in this hacker&#039;s opinion.&lt;br /&gt;
&lt;br /&gt;
===Gens Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/337/ here].&lt;br /&gt;
&lt;br /&gt;
No breakpoints, but adequate tracing. A guide has been written on the specific usage of the emulator.&lt;br /&gt;
&lt;br /&gt;
The idea is that you can trace-log writes to and reads from memory, and you can also log all commands, and determine what&#039;s happening from the full log, by using what you find from the hook logging.&lt;br /&gt;
&lt;br /&gt;
===HazeMD===&lt;br /&gt;
This emulator can be found at [http://haze.mameworld.info/ this address].&lt;br /&gt;
&lt;br /&gt;
This emulator is harder to get setup to use a ROM, but comes with a MAME-style debugger. MAME&#039;s debugger is well known for being so powerful, considering the number of systems it can be used with when compiled into a build of MAME. The Gens tracer tends to have slightly better compatibility, while the HazeMD emulator has more potential for cheat codes, already having a Cheat system designed to handle multiple CPUs, which could be used for 32x game ROM hacks, and RAM hacks.&lt;br /&gt;
&lt;br /&gt;
==Gameboy==&lt;br /&gt;
===BGB===&lt;br /&gt;
This emulator can be found [http://bgb.bircd.org/ here]&lt;br /&gt;
&lt;br /&gt;
Load a ROM, and right-click the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debug mode enabled: to enable debugging&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debugger to enter the debugger&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in ROM/RAM&amp;lt;br&amp;gt;&lt;br /&gt;
In the debugger window:&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;breakpoints for execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;access breakpoints for read/write breaks.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, see below about Visual Boy Advance Tracer.&lt;br /&gt;
&lt;br /&gt;
==Gameboy Advance==&lt;br /&gt;
===Visual Boy Advance Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/340/ here].&lt;br /&gt;
&lt;br /&gt;
This emulator uses the Hook Log system. Those familiar with the hook_log Genesis or N64 emulators should have little trouble adapting to this system.&lt;br /&gt;
&lt;br /&gt;
Note that it has also been used to good effect for a small number of gameboy games that BGB doesn&#039;t support. [[Ugetab]] used this for GBS ripping, but with full code logging, and a save-state near when something changes, you could just as effectively search for a memory address in trace.log. Mind that while GB assembly doesn&#039;t pile up as quickly as GBA or N64, and it is still nessesary to be relatively close to the change before activating logging, if you don&#039;t want to have to use a special text editor to open an enormous log file. &lt;br /&gt;
&lt;br /&gt;
===Visual Boy Advance===&lt;br /&gt;
This emulator can be found at [http://vba.ngemu.com/downloads.shtml this address].&lt;br /&gt;
&lt;br /&gt;
Windows - SDL is required. Unfortunately, no cheat device exists that can change the assembly, so hacking it is more a matter of patching the ROM, and less a matter of using it for simple cheats. Not documented.&lt;br /&gt;
&lt;br /&gt;
==Playstation==&lt;br /&gt;
===PCSX 1.5 With Debugger===&lt;br /&gt;
This emulator is available [http://www.romhacking.net/utils/267/ here].&lt;br /&gt;
&lt;br /&gt;
Press F11 to enter the debugger. On-screen aids should be apparent.&lt;br /&gt;
&lt;br /&gt;
===PSX===&lt;br /&gt;
This emulator can be found at [http://www.romhacking.net/utils/311/ this address].&lt;br /&gt;
&lt;br /&gt;
This can be a decent debugging alternative if a game doesn&#039;t work well in the above emulator.&lt;br /&gt;
&lt;br /&gt;
===PCSX Agemo debugger===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/475/ here].&lt;br /&gt;
&lt;br /&gt;
It could be favorable for some tasks, compared to the other debuggers.&lt;br /&gt;
&lt;br /&gt;
==N64==&lt;br /&gt;
===Nemu64===&lt;br /&gt;
This emulator can be found [http://www.emulator-zone.com/doc.php/n64/nemu64.html here]&lt;br /&gt;
&lt;br /&gt;
Setting execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Commands...&amp;lt;br&amp;gt;&lt;br /&gt;
To set a break on execution, go to the line that you want to break on, and click in the vertical bar to the left(&amp;lt;) of the address you want to breakpoint.&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in RAM&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Memory...&amp;lt;br&amp;gt;&lt;br /&gt;
Enable the read and/or write checkboxes, and right-click the memory space you want to set, unset, or change an access breakpoint on.&lt;br /&gt;
&lt;br /&gt;
Some games don&#039;t run in Nemu, so you may have to switch to this hook_log based emulator if you want the codes. The 1964 tracer can be useful, which is available [http://www.romhacking.net/utils/335/ here].&lt;br /&gt;
&lt;br /&gt;
The hook_log system is a little bit more demanding to use than a visual debugger, but with compatibility issues, it&#039;s better than lucky to have a second usable debugging emulator. The save-states can be decompressed, and loaded in their decompressed form if needed&lt;br /&gt;
&lt;br /&gt;
An issue with this emulator is that not all instructions are logged, but it&#039;s still worth knowing about for the fact that many instructions are logged, and it can be used with write logging.&lt;br /&gt;
&lt;br /&gt;
===Project64 debug build binary===&lt;br /&gt;
This emulator can be found [http://www.thegshi.org/downloads/Project64%20Build%2052%20Debug%20Binary.zip here].&lt;br /&gt;
&lt;br /&gt;
This version of the emulator has better support for games than Nemu64, and Ugetab used this tool in combination with nemu64 to edit USFs, as well as make a few codes that people using only a single emulation tool were having extremely hard struggles with.&lt;br /&gt;
&lt;br /&gt;
==Saturn==&lt;br /&gt;
===Yabause===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/482/ here].&lt;br /&gt;
&lt;br /&gt;
This is one of the few Saturn emulators out there.&lt;br /&gt;
&lt;br /&gt;
==Wonder Swan==&lt;br /&gt;
===Cygne Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/244/ here].&lt;br /&gt;
&lt;br /&gt;
A decent Tracing program.&lt;br /&gt;
&lt;br /&gt;
===Oswan Tracer===&lt;br /&gt;
This emulator can be found [http://www.romhacking.net/utils/338/ here].&lt;br /&gt;
&lt;br /&gt;
This is just another hook-log tracer.&lt;br /&gt;
&lt;br /&gt;
==Playstation 2==&lt;br /&gt;
[The current author is too lazy to write this, but will get around to it later if no one else does]&lt;br /&gt;
&lt;br /&gt;
[[Category:Hacking and Game Info]]&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=CRI_ROFS&amp;diff=4325</id>
		<title>CRI ROFS</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=CRI_ROFS&amp;diff=4325"/>
		<updated>2009-05-31T18:11:54Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: Link names lost Jap chars&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ROFS is a bulk data file structure developed by CRI Middleware Co., Ltd. It is greatly built off of the ISO-9660 standard. These are easily identified as having the file name extension of CVM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Random ==&lt;br /&gt;
&lt;br /&gt;
Several official programs for handling CVM files are known to exist. Usage is not known and guessed below.&lt;br /&gt;
&lt;br /&gt;
     rofstoko.exe - ? Seemingly used to change existing data and perhaps conversion of some file types.&lt;br /&gt;
     rofsedit.exe - ?&lt;br /&gt;
     rofsgen.exe  - ?&lt;br /&gt;
     rofsbld.exe  - ? Most likely the program used to compile an ROFS structure from a list of files.&lt;br /&gt;
     rofsview.exe - ?&lt;br /&gt;
&lt;br /&gt;
There are a few homemade programs created for interacting with CVM filesystems with various limited functionality.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Apache3&#039;&#039;&#039; - Badly named but effective for extracting the contents of a CVM (and several other disc image types such as GCM). It can also replace files inside the image. Has entirely no capacity to create new files from scratch.&lt;br /&gt;
&lt;br /&gt;
[http://gshi.org/downloads/cvm_tools/apache3_setup.exe apache3_setup.exe v3.10.6 beta]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Daemon Tools (and some other disc mounting software)&#039;&#039;&#039; - If a 0x1800 block is removed from the start of the file, it can be mounted as a disc image. Other mounting utilities may not cooperate.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Abyss&#039;&#039;&#039; - A tiny custom tool made by darthi8nt for beating up the TO7BTL.cvm file from Tales Of The Abyss. It looks to be only for that specific file and no others.&lt;br /&gt;
&lt;br /&gt;
[http://gshi.org/downloads/cvm_tools/abyss.zip abyss.zip]&lt;br /&gt;
&lt;br /&gt;
[http://gshi.org/downloads/cvm_tools/abyss_update.zip abyss_update.zip]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VF4EXt_n_reb&#039;&#039;&#039; - Another tool from darthi8nt. Same deal as with Abyss, but for VF4STRMS.cvm on Virtua Fighter 4.&lt;br /&gt;
&lt;br /&gt;
[http://gshi.org/downloads/cvm_tools/VF4EXt_n_reb.rar VF4EXt_n_reb.rar]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
This information is incomplete and may by itself not be of much help. Note also that it may not apply to all containers of this format being that there are known to be incompatible revisions.&lt;br /&gt;
&lt;br /&gt;
=== Basic ===&lt;br /&gt;
&lt;br /&gt;
As the format is built on top of the original Yellow Book standard, the file storage itself is well documented. Since both ISO and IEC are greedy bastards a relevant item to look up is ECMA-119. The ==Logical Block Size== is 2048 bytes.&lt;br /&gt;
&lt;br /&gt;
At least two versions exist, perhaps not compatible with each other. One is &#039;&#039;&#039;&#039;&#039;ROFSROFSBLD Ver.1.52 2003-06-09&#039;&#039;&#039;&#039;&#039;, another is &#039;&#039;&#039;&#039;&#039;ROFSROFSBLD Ver.1.23 2001-10-17&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
From: [http://forum.xentax.com/viewtopic.php?p=22826#p22826 XeNTaX - ROFS Compression?Encryption? Method]&lt;br /&gt;
&lt;br /&gt;
     ROFS , By turning off the 0x1800 byte from the forefront of the file (header), and change the extension to .iso, Daemon tools can mount it.&lt;br /&gt;
     &lt;br /&gt;
     With the header where 0x1800 is gone, then it seems that its retained with the file system ( ISO9660 )&lt;br /&gt;
     &lt;br /&gt;
     ROFS (CVM) file format memo&lt;br /&gt;
     &lt;br /&gt;
     B = byte (8bit)&lt;br /&gt;
     W = word (16bit)&lt;br /&gt;
     L = long word (32bit)&lt;br /&gt;
     &lt;br /&gt;
     -- &lt;br /&gt;
     0x0000-0xb7ff&lt;br /&gt;
     - ROFS version&lt;br /&gt;
     - GAME TITLE and PUBLISHER_NAME etc.&lt;br /&gt;
     &lt;br /&gt;
     offset 0xb800&lt;br /&gt;
     1W: first data length = A&lt;br /&gt;
     1L: START address START (little endian)&lt;br /&gt;
     1L: START address START (big endian)&lt;br /&gt;
     1L: FAT SIZE (little endian)&lt;br /&gt;
     1L: FAT SIZE (big endian)&lt;br /&gt;
     1B: 0x68??&lt;br /&gt;
     1B: data length X&lt;br /&gt;
     XB: ?? (date?)&lt;br /&gt;
     4B: 01 00 00 01 ??&lt;br /&gt;
     2B: 01 00 or 01 01&lt;br /&gt;
     01 01 as for the FAT SIZE-related data end?&lt;br /&gt;
     &lt;br /&gt;
     1W: next data length = B&lt;br /&gt;
     &lt;br /&gt;
     here byte become A. Reading B Byte next, it processes.  &lt;br /&gt;
     &lt;br /&gt;
     However, because completely it has become the same contents as A in regard to data which is read next, &lt;br /&gt;
     as for meaning in regard to data of B you do          not understand well. For verification?&lt;br /&gt;
     &lt;br /&gt;
     -- &lt;br /&gt;
     offset 0xb800 + A + B&lt;br /&gt;
     1W: data length C&lt;br /&gt;
     &lt;br /&gt;
     :DATA FIRST&lt;br /&gt;
     &lt;br /&gt;
     1L: START address START (little endian)&lt;br /&gt;
     1L: START address START (big endian)&lt;br /&gt;
     FILE START address = 0x800*START + 0x1800&lt;br /&gt;
     1L: file size (little endian)&lt;br /&gt;
     1L: file size (big endian)&lt;br /&gt;
     &lt;br /&gt;
     1B: 0x68 ??&lt;br /&gt;
     1B: data length Y&lt;br /&gt;
     YB: ?? (date?)&lt;br /&gt;
     4B: 01 00 00 01 ??&lt;br /&gt;
     1B: file name length Z&lt;br /&gt;
     ZB: file name&lt;br /&gt;
     2B: 3B 31 (flag?)&lt;br /&gt;
     &lt;br /&gt;
     0 fill are done&lt;br /&gt;
     &lt;br /&gt;
     last 1W: In case of data length of following data D&lt;br /&gt;
     0x0000, it adjusts the length of the following data and is packed (?)There is a place where it is done. The data other than&lt;br /&gt;
     0x00 appears to has the necessity to search.  &lt;br /&gt;
     &lt;br /&gt;
     The quantities of all to here byte become C. Reading D Byte next, it processes. &lt;br /&gt;
     However, it adjusts and is packed (?)When it was done, data length stops being agreeable.  &lt;br /&gt;
     &lt;br /&gt;
     After returning to DATA FIRST, to FAT SIZE + 0x1800 it repeats processing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From: [http://forum.xentax.com/viewtopic.php?p=24509#p24509 XeNTaX -  - ROFS Compression?Encryption? Method]&lt;br /&gt;
&lt;br /&gt;
 struct ROFSRootEntry&lt;br /&gt;
 {&lt;br /&gt;
 int Offset;&lt;br /&gt;
 short Unknown;&lt;br /&gt;
 std::string Name;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 struct ROFSEntry&lt;br /&gt;
 {&lt;br /&gt;
 unsigned short EntrySize; // Entry Header Size&lt;br /&gt;
 unsigned int Address; // File start offset&lt;br /&gt;
 unsigned int Size; // File Size&lt;br /&gt;
 unsigned char Unk0[10];&lt;br /&gt;
 unsigned short Unk;&lt;br /&gt;
 std::string Name;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 if I remember correctly the root entries are a listing of all directories in the file. &lt;br /&gt;
 from there the rofsentry structure is used to navigate the actual directory and file structure. &lt;br /&gt;
 a flag in the rofsentry structure tells if the entry is a directory(0x02) or a file(0x01) but I don&#039;t know &lt;br /&gt;
 where that was ^_^; when the entry is a directory the offset leads to another listing of directories &lt;br /&gt;
 or files. the file is padded to 4096 or 2048 I don&#039;t remember. (directories always have &amp;quot;.&amp;quot; and &amp;quot;..&amp;quot; entries)&lt;br /&gt;
 &lt;br /&gt;
 First read the root entries at offset ??? load them into memory and use that to get the entire &lt;br /&gt;
 file list(with rofsentry structure) it is just a bunch of interconnecting nodes.&lt;br /&gt;
&lt;br /&gt;
== Partial List of Games ==&lt;br /&gt;
&lt;br /&gt;
=== Playstation 2 ===&lt;br /&gt;
&lt;br /&gt;
Arcana Heart&lt;br /&gt;
&lt;br /&gt;
Namcollection&lt;br /&gt;
&lt;br /&gt;
Odin Sphere&lt;br /&gt;
&lt;br /&gt;
Persona 3&lt;br /&gt;
&lt;br /&gt;
Persona 3 FES&lt;br /&gt;
&lt;br /&gt;
Persona 4&lt;br /&gt;
&lt;br /&gt;
Sakura Taisen V&lt;br /&gt;
&lt;br /&gt;
Sonic Gems Collection&lt;br /&gt;
&lt;br /&gt;
Sonic Heroes&lt;br /&gt;
&lt;br /&gt;
Tales of Symphonia&lt;br /&gt;
&lt;br /&gt;
Tales of the Abyss&lt;br /&gt;
&lt;br /&gt;
Virtua Fighter 4&lt;br /&gt;
&lt;br /&gt;
Virtua Fighter 4 Evolution&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
*[http://www.cri-mw.co.jp/insidemw/rofs1/index_j.htm ＣＲＩ・ミドルウェア : インサイドミドルウェア : 第２話　インサイドROFS　「ROFSTOKO.EXE」:] - Japanese page roughly describing ROFS.&lt;br /&gt;
*[http://homepage1.nifty.com/~hin/rofs.html ROFS について] - Another page in Japanese, with actual information about the file structure.&lt;br /&gt;
*[http://apache3.net/ Apache3] - Site for Apache3, Munge Explorer, and several other programs.&lt;br /&gt;
*[http://www.mactech.com/articles/develop/issue_03/high_sierra.html The Ins And Outs Of ISO 9660 And High Sierra] - A rather detailed explanation of an ISO-9660 filesystem.&lt;br /&gt;
*[http://www.ecma-international.org/publications/standards/Ecma-119.htm ECMA-119 - Volume and File Structure of CDROM for Information Interchange 2nd edition (December 1987)]&lt;br /&gt;
&lt;br /&gt;
[[Category:File Systems]]&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=GSCentral&amp;diff=1923</id>
		<title>GSCentral</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=GSCentral&amp;diff=1923"/>
		<updated>2008-01-30T04:31:38Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== History ==&lt;br /&gt;
&lt;br /&gt;
A [[Gameshark]] code site created in 1998 by a person going by the name [[Jim Reinhart]]. At some point much later a clone of the site was produced after [[Rune]] either was banned or left on his own (depending on who you wish to believe). The original lasted until sometime late 2005/early 2006, when it disappeared without any particular notice. The GSCentral.com domain is still owned by [[Stinky613]], presumably until March 10th, 2012.&lt;br /&gt;
&lt;br /&gt;
As of early October, 2006, the majority of GSCentral&#039;s veteran members (and staff) left due to dislike of Rune&#039;s recent administrative actions, and his bullshit regarding when the code database would be up.&lt;br /&gt;
&lt;br /&gt;
The exodus of the GSCentral members began when Rune took down the forum (the only thing left at GSCentral), and took away the administrative powers of the very people who made the site worth visiting.  (Parasyte, Viper187)&lt;br /&gt;
&lt;br /&gt;
Many call the actions Rune took that day &#039;[[Batshit fucking insane]]!&#039;, which is indeed quite accurate considering in just one night, Rune got rid of all of the talented and capable individuals at GSCentral, and soon replaced them all with a bunch of clueless newbies.&lt;br /&gt;
&lt;br /&gt;
Not too long after the exodus, the GSCentral Forums were hacked by unknown person(s).&lt;br /&gt;
It is unknown at this time whether or not those who did the hacking were ever caught, or found out.&lt;br /&gt;
But it is rumored to be the doing of a coalition between [[GameFAQs]], [[NSider]], and [[Haxxorworld]].&lt;br /&gt;
&lt;br /&gt;
== Present ==&lt;br /&gt;
The reason given for taking the code database down was to prevent &amp;quot;thieves&amp;quot; from stealing their content. The irony of it all is that GSCentral gets the majority of its content from other sites, and often fails to give proper credit. Since then more codes have been added but it is not known whether or not the codes have been credited.&lt;br /&gt;
&lt;br /&gt;
After a ridiculous amount of procrastination, the database was &#039;&#039;technically&#039;&#039; restored. There is no way to browse codes, and is only accessible though a buggy search box.&lt;br /&gt;
&lt;br /&gt;
== Technical Information ==&lt;br /&gt;
&lt;br /&gt;
The hosting is provided by the German host [http://all-inkl.com/eng/index.php?cna=&amp;amp;cnb= All-Inkl]. It runs on Apache Apache 1.3.36, and has PHP 4.4.2, FrontPage extension 5.0.2.4803, mod_fastcgi-SNAP-0404142202, mod_ssl 2.8.27, and OpenSSL 0.9.6i. Due to circumstantial evidence, it is presumed to have access to a MySQL database. &lt;br /&gt;
&lt;br /&gt;
The newly added search function has a limitation of only accepting 3 or more characters. Non-alphanumeric characters are stripped. For example, you can&#039;t search for &amp;quot;C-12&amp;quot; and get the game &amp;quot;C-12 - Final Resistance&amp;quot;, but the full name of the game gives results. The maximum search string is 8,197 bytes (8 kilobytes exactly). After this, the server gives an HTTP 414 error, complaining about the input being too large.&lt;br /&gt;
&lt;br /&gt;
Each game is split into pages. Each page has a likely unique key generated and checked for by mcrypt. Each key is 32 characters in length. Invalid (but of the right length) keys give this error: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
An error occurred. We are unable to satisfy your request. Please contact the webmaster to notify him of this error. Upon contacting us if you could provide the URL address you tried to access and details on where you found this hyperlink it would be greatly appreciated. Thank you. We apologize for the inconvenience.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It has been discovered that nowhere near the quantity of codes that should be up actually are. Recently however more codes have been added. It is not known whether or not the codes taken from other sites have been completey credited.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
[http://gscentral.org GSCentral Main Page]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://gscentral.org/board/index.php GSCentral Forums]&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=GSCentral&amp;diff=1922</id>
		<title>GSCentral</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=GSCentral&amp;diff=1922"/>
		<updated>2008-01-25T20:58:16Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== History ==&lt;br /&gt;
&lt;br /&gt;
A [[Gameshark]] code site created in 1998 by a person going by the name [[Jim Reinhart]]. At some point much later a clone of the site was produced after [[Rune]] either was banned or left on his own (depending on who you wish to believe). The original lasted until sometime late 2005/early 2006, when it disappeared without any particular notice. The GSCentral.com domain is still owned by [[Stinky613]], presumably until March 10th, 2012.&lt;br /&gt;
&lt;br /&gt;
As of early October, 2006, the majority of GSCentral&#039;s veteran members (and staff) left due to dislike of Rune&#039;s recent administrative actions, and his bullshit regarding when the code database would be up.&lt;br /&gt;
&lt;br /&gt;
The exodus of the GSCentral members began when Rune took down the forum (the only thing left at GSCentral), and took away the administrative powers of the very people who made the site worth visiting.  (Parasyte, Viper187)&lt;br /&gt;
&lt;br /&gt;
Many call the actions Rune took that day &#039;[[Batshit fucking insane]]!&#039;, which is indeed quite accurate considering in just one night, Rune got rid of all of the talented and capable individuals at GSCentral, and soon replaced them all with a bunch of clueless newbies.&lt;br /&gt;
&lt;br /&gt;
Not too long after the exodus, the GSCentral Forums were hacked by unknown person(s).&lt;br /&gt;
It is unknown at this time whether or not those who did the hacking were ever caught, or found out.&lt;br /&gt;
But it is rumored to be the doing of a coalition between [[GameFAQs]], [[NSider]], and [[Haxxorworld]].&lt;br /&gt;
&lt;br /&gt;
== Present ==&lt;br /&gt;
The reason given for taking the code database down was to prevent content. The irony of it all is that GSCentral gets the majority of its content from other sites, and often fails to give proper credit. Since then more codes have been added but it is not known whether or not the codes have been credited.&lt;br /&gt;
&lt;br /&gt;
After a ridiculous amount of procrastination, the database was &#039;&#039;technically&#039;&#039; restored. There is no way to browse codes, and is only accessible though a buggy search box.&lt;br /&gt;
&lt;br /&gt;
== Technical Information ==&lt;br /&gt;
&lt;br /&gt;
The hosting is provided by the German host [http://all-inkl.com/eng/index.php?cna=&amp;amp;cnb= All-Inkl]. It runs on Apache Apache 1.3.36, and has PHP 4.4.2, FrontPage extension 5.0.2.4803, mod_fastcgi-SNAP-0404142202, mod_ssl 2.8.27, and OpenSSL 0.9.6i. Due to circumstantial evidence, it is presumed to have access to a MySQL database. &lt;br /&gt;
&lt;br /&gt;
The newly added search function has a limitation of only accepting 3 or more characters. Non-alphanumeric characters are stripped. For example, you can&#039;t search for &amp;quot;C-12&amp;quot; and get the game &amp;quot;C-12 - Final Resistance&amp;quot;, but the full name of the game gives results. The maximum search string is 8,197 bytes (8 kilobytes exactly). After this, the server gives an HTTP 414 error, complaining about the input being too large.&lt;br /&gt;
&lt;br /&gt;
Each game is split into pages. Each page has a likely unique key generated and checked for by mcrypt. Each key is 32 characters in length. Invalid (but of the right length) keys give this error: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
An error occurred. We are unable to satisfy your request. Please contact the webmaster to notify him of this error. Upon contacting us if you could provide the URL address you tried to access and details on where you found this hyperlink it would be greatly appreciated. Thank you. We apologize for the inconvenience.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It has been discovered that nowhere near the quantity of codes that should be up actually are. Recently however more codes have been added. It is not known whether or not the codes taken from other sites have been completey credited.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
[http://gscentral.org GSCentral Main Page]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://gscentral.org/board/index.php GSCentral Forums]&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=SA1&amp;diff=1921</id>
		<title>SA1</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=SA1&amp;diff=1921"/>
		<updated>2008-01-25T20:53:55Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: /* Memory Mapping Comparison */  (Added STA Z SA1 info)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
The SNES SA1 chip is an expansion chip added to an SNES cart that both contains a portion of the game&#039;s coding, and executes that portion of code to affect normal SNES RAM, and the additional RAM accessed primarily by the SA1 chip programming. The additional RAM is also accessible by the SNES CPU&#039;s instructions.&lt;br /&gt;
&lt;br /&gt;
There is no current information concerning hardware-based tests with Game Genie codes that change portions of ROM residing within the SA1.&lt;br /&gt;
&lt;br /&gt;
== Memory Mapping Comparison ==&lt;br /&gt;
Region 30:0000 - 30:3FFF is SA1 related due to the fact that some RAM is 00 mapped for SA1-using games:&lt;br /&gt;
&lt;br /&gt;
Writes from the SNES CPU to 00:0000 - 00:3FFF region to change a mirrored region at 30:0000 - 30:3FFF region&lt;br /&gt;
&lt;br /&gt;
00:0000 - 00:3FFF&amp;lt;br&amp;gt;&lt;br /&gt;
30:0000 - 30:3FFF&lt;br /&gt;
&lt;br /&gt;
SA1 code such as &amp;quot;STA $DE&amp;quot; can access address 00:30DE, and show up in the log file as a line like...&amp;lt;br&amp;gt;&lt;br /&gt;
$C2:D286 85 DE . STA $DE . [$00:00DE]&lt;br /&gt;
&lt;br /&gt;
The above may not always hold true, but it should be known that not all addresses will appear exactly as expected.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SA1 Address:&lt;br /&gt;
Reads/Writes to these addresses from the SA1 CPU translate to the below CPU-accessible addresses in SNES memory&amp;lt;br&amp;gt;&lt;br /&gt;
00:4000 - 00:7FFF&amp;lt;br&amp;gt;&lt;br /&gt;
CPU Address:&amp;lt;br&amp;gt;&lt;br /&gt;
40:0000 - 40:3FFF&lt;br /&gt;
&lt;br /&gt;
SA1 Address Testing:&amp;lt;br&amp;gt;&lt;br /&gt;
If you wish to test writes made by the SA1 to memory, and see what area is changed, you can use the following code with Super Mario RPG (US), while in a 3D stage. You should fall through the ground, and be unaligned with the map, but have the value FE written to the address you chose.&lt;br /&gt;
&lt;br /&gt;
Test SA1 Memory Writes (2 byte addresses, 0xFE written)&amp;lt;br&amp;gt;&lt;br /&gt;
C9C374A9&amp;lt;br&amp;gt;&lt;br /&gt;
C9C375FE&amp;lt;br&amp;gt;&lt;br /&gt;
C9C378FF&amp;lt;br&amp;gt;&lt;br /&gt;
C9C3793F&lt;br /&gt;
&lt;br /&gt;
Load value 0x00FE to write(could be made to load a 2-byte value)&amp;lt;br&amp;gt;&lt;br /&gt;
C9C374A9&amp;lt;br&amp;gt;&lt;br /&gt;
C9C375FE&lt;br /&gt;
&lt;br /&gt;
Address to write to(Writes to 3FFF with these values)&amp;lt;br&amp;gt;&lt;br /&gt;
C9C378FF&amp;lt;br&amp;gt;&lt;br /&gt;
C9C3793F&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=1918</id>
		<title>Assembly Hacking</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=1918"/>
		<updated>2008-01-16T07:52:13Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: /* Playstation */  added some more links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Overview=&lt;br /&gt;
&lt;br /&gt;
Assembly hacking is the art of editing a compiled program. Without the source code, and without notes from the source code, one has to deduce almost everything about the underlying code, and how it works with RAM.&lt;br /&gt;
&lt;br /&gt;
There are several emulators that can aid one in creating a modification for a game. Games for console systems fall into the category of compiled programs, and generally, the source code is unavailable for these games.&lt;br /&gt;
&lt;br /&gt;
The use of making an assembly hack for a game can be found with the Nintendo Entertainment System (NES) [[Game Genie]].&lt;br /&gt;
&lt;br /&gt;
The codes that are entered into an NES Game Genie represent single-byte assembly hacks. Any assembly hack that could be done with a change of 3 bytes or less is possible to implement with a single Game Genie. The SNES Game Genie allows up to 5 codes, and 5 bytes of change. While this makes the possible usage of codes very limiting, it didn&#039;t prevent single-byte invincibility and infinite lives codes from appearing that could make it unneccesary to use additional codes.&lt;br /&gt;
&lt;br /&gt;
For more modern assembly hacking of the same systems, emulators that support 50 or more codes for any given game aren&#039;t uncommon. The ROMs have been turned into files that can be patched with all the changes needed to give the game a script in a new language. Emulators that aid in the process of making assembly hacks have appeared for many different emulated systems. The effect is that more people are now capable of starting their own projects, and existing projects can be modified and/or repaired more easily.&lt;br /&gt;
&lt;br /&gt;
=Emulators=&lt;br /&gt;
&lt;br /&gt;
==NES==&lt;br /&gt;
FCEUXDSP&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.the-interweb.com/serendipity/index.php?/categories/9-FCEUXD-SP&lt;br /&gt;
&lt;br /&gt;
A project originated by Parasyte called FCEUd, picked up by bbitmaster and renamed to FCEUXD, and finally adopted as FCEUXD SP.&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in ROM/RAM&lt;br /&gt;
Tools&amp;gt;Debug&lt;br /&gt;
&lt;br /&gt;
In the breakpoint window, &#039;Add&#039; the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
ROM is 8000-FFFF&amp;lt;br&amp;gt;&lt;br /&gt;
RAM is 0000-07FF, 6000-7FFF&amp;lt;br&amp;gt;&lt;br /&gt;
0800-3FFF is mirrored from some part of RAM.&amp;lt;br&amp;gt;&lt;br /&gt;
4000-4015 can be breakpointed if working on an NSF. If you want to use this to deal with NSFs, try my edited version, which tends to play nicer with them ( http://www.angelfire.com/nc/ugetab )&lt;br /&gt;
&lt;br /&gt;
&#039;Hex Editor&#039; is a memory viewer/modifier.&lt;br /&gt;
&lt;br /&gt;
==SNES==&lt;br /&gt;
Geiger&#039;s SNES9X Debugger &amp;lt;br&amp;gt;&lt;br /&gt;
http://geigercount.net/crypt/ &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.zophar.net/snes.html&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in ROM/RAM&amp;lt;br&amp;gt;&lt;br /&gt;
Open ROM, Click &#039;Breakpoints&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
In the breakpoint window, enter the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
Standard RAM: 7E0000 - 7FFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
SA1 RAM: 400000-407FFF, 303000-303FFF&amp;lt;br&amp;gt;&lt;br /&gt;
HiROM - C00000 - FFFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
LoROM - 808000-BFFFFF (**0000 - **7FFF doesn&#039;t exist)&lt;br /&gt;
&lt;br /&gt;
If you use the [[SA1]] logger with an SA1-using game, and wish to find an address that changed an address in RAM, you can see if the conversion chart on the [[SA1]] page shows you the address to search for in the log file.&lt;br /&gt;
&lt;br /&gt;
==Genesis==&lt;br /&gt;
Gens Tracer &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.romhacking.net/utils/337/&lt;br /&gt;
&lt;br /&gt;
No breakpoints, but adequate tracing.&lt;br /&gt;
&lt;br /&gt;
I&#039;ve written a guide on the specific usage of the emulator.&lt;br /&gt;
&lt;br /&gt;
The idea is that you can trace-log writes to and reads from memory, and you can also log all commands, and determine what&#039;s happening from the full log, by using what you find from the hook logging.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HazeMD &amp;lt;br&amp;gt;&lt;br /&gt;
http://haze.mameworld.info/&lt;br /&gt;
&lt;br /&gt;
This emulator is harder to get setup to use a ROM, but comes with a MAME-style debugger. MAME&#039;s debugger is well known for being so powerful, considering the number of systems it can be used with when compiled into a build of MAME. The Gens tracer tends to have slightly better compatibility, while the HazeMD emulator has more potential for cheat codes, already having a Cheat system designed to handle multiple CPUs, which could be used for 32x game ROM hacks, and RAM hacks.&lt;br /&gt;
&lt;br /&gt;
==Gameboy==&lt;br /&gt;
BGB &amp;lt;br&amp;gt;&lt;br /&gt;
http://bgb.bircd.org/&lt;br /&gt;
&lt;br /&gt;
Load a ROM, and right-click the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debug mode enabled: to enable debugging&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debugger to enter the debugger&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in ROM/RAM&amp;lt;br&amp;gt;&lt;br /&gt;
In the debugger window:&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;breakpoints for execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;access breakpoints for read/write breaks.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also, see below about Visual Boy Advance Tracer. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gameboy Advance==&lt;br /&gt;
Visual Boy Advance Tracer &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.romhacking.net/utils/340/&lt;br /&gt;
&lt;br /&gt;
This emulator uses the Hook Log system. Those familiar with the hook_log Genesis or N64 emulators should have little trouble adapting to this system. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that it has also been used to good effect for a small number of gameboy games that BGB doesn&#039;t support. I(ugetab) used this for GBS ripping, but with full code logging, and a save-state near when something changes, you could just as effectively search for a memory address in trace.log. Mind that while GB assembly doesn&#039;t pile up as quickly as GBA or N64, you still have to be relatively close to the change before activating logging, if you don&#039;t want to have to use a special text editor to open an enormous log file. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Visual Boy Advance &amp;lt;br&amp;gt;&lt;br /&gt;
http://vba.ngemu.com/downloads.shtml &amp;lt;br&amp;gt;&lt;br /&gt;
Windows - SDL&lt;br /&gt;
&lt;br /&gt;
Unfortunately, no cheat device exists that can change the assembly, so hacking it is more a matter of patching the ROM, and less a matter of using it for simple cheats.&lt;br /&gt;
&lt;br /&gt;
Not documented.&lt;br /&gt;
&lt;br /&gt;
==Playstation==&lt;br /&gt;
PCSX 1.5 With Debugger &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.romhacking.net/utils/267/&lt;br /&gt;
&lt;br /&gt;
Press F11 to enter the debugger.&amp;lt;br&amp;gt;&lt;br /&gt;
On-screen aids should be apparent.&lt;br /&gt;
&lt;br /&gt;
pSX &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.romhacking.net/utils/311/&lt;br /&gt;
&lt;br /&gt;
This can be a decent debugging alternative if a game doesn&#039;t work well in the above emulator.&lt;br /&gt;
&lt;br /&gt;
PCSX Agemo debugger &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.romhacking.net/utils/475/&lt;br /&gt;
&lt;br /&gt;
An emulator I don&#039;t have any experience with. It could be favorable for some tasks, compared to the other debuggers.&lt;br /&gt;
&lt;br /&gt;
==N64==&lt;br /&gt;
Nemu64 &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.emulator-zone.com/doc.php/n64/nemu64.html &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.nemu.com/downloads.php (Expired)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setting execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Commands...&amp;lt;br&amp;gt;&lt;br /&gt;
To set a break on execution, go to the line that you want to break on, and click in the vertical bar to the left(&amp;lt;) of the address you want to breakpoint.&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in RAM&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Memory...&amp;lt;br&amp;gt;&lt;br /&gt;
Enable the read and/or write checkboxes, and right-click the memory space you want to set, unset, or change an access breakpoint on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some games don&#039;t run in Nemu, so you may have to switch to this hook_log based emulator if you want the codes &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.romhacking.net/utils/335/&lt;br /&gt;
&lt;br /&gt;
The hook_log system is a little bit more demanding to use than a visual debugger, but with compatibility issues, it&#039;s better than lucky to have a second usable debugging emulator. The save-states can be decompressed, and loaded in their decompressed form if needed&lt;br /&gt;
&lt;br /&gt;
An issue with this emulator is that not all instructions are logged, but it&#039;s still worth knowing about for the fact that many instructions are logged, and it can be used with write logging.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Project64 debug build binary &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.thegshi.org/downloads/Project64%20Build%2052%20Debug%20Binary.zip&lt;br /&gt;
&lt;br /&gt;
This version of the emulator has better support for games than Nemu64, and I&#039;ve(ugetab) used this tool in combination with nemu64 to edit USFs, as well as make a few codes that people using only a single emulation tool were having extremely hard struggles with.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Saturn==&lt;br /&gt;
Yabause&lt;br /&gt;
http://www.romhacking.net/utils/482/&lt;br /&gt;
&lt;br /&gt;
No info yet&lt;br /&gt;
&lt;br /&gt;
==Wonder Swan==&lt;br /&gt;
Cygne Tracer&lt;br /&gt;
http://www.romhacking.net/utils/244/&lt;br /&gt;
&lt;br /&gt;
No info yet&lt;br /&gt;
&lt;br /&gt;
Oswan Tracer&lt;br /&gt;
http://www.romhacking.net/utils/338/&lt;br /&gt;
&lt;br /&gt;
Another hook-log tracer&lt;br /&gt;
&lt;br /&gt;
==Playstation 2==&lt;br /&gt;
&lt;br /&gt;
[The current author is too lazy to write this, but will get around to it later if no one else does]&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=GSCentral&amp;diff=1915</id>
		<title>GSCentral</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=GSCentral&amp;diff=1915"/>
		<updated>2008-01-16T07:16:54Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== History ==&lt;br /&gt;
&lt;br /&gt;
A [[Gameshark]] code site created in 1998 by a person going by the name [[Jim Reinhart]]. At some point much later a clone of the site was produced after [[Rune]] either was banned or left on his own (depending on who you wish to believe). The original lasted until sometime late 2005/early 2006, when it disappeared without any particular notice. The GSCentral.com domain is still owned by [[Stinky613]], presumably until March 10th, 2012.&lt;br /&gt;
&lt;br /&gt;
As of early October, 2006, the majority of GSCentral&#039;s veteran members (and staff) left due to dislike of Rune&#039;s recent administrative actions, and his bullshit regarding when the code database would be up.&lt;br /&gt;
&lt;br /&gt;
The exodus of the GSCentral members began when Rune took down the forum (the only thing left at GSCentral), and took away the administrative powers of the very people who made the site worth visiting.  (Parasyte, Viper187)&lt;br /&gt;
&lt;br /&gt;
Many call the actions Rune took that day &#039;[[Batshit fucking insane]]!&#039;, which is indeed quite accurate considering in just one night, Rune got rid of all of the talented and capable individuals at GSCentral, and soon replaced them all with a bunch of clueless newbies.&lt;br /&gt;
&lt;br /&gt;
Not too long after the exodus, the GSCentral Forums were hacked by unknown person(s).&lt;br /&gt;
It is unknown at this time whether or not those who did the hacking were ever caught, or found out.&lt;br /&gt;
But it is rumored to be the doing of a coalition between [[GameFAQs]], [[NSider]], and [[Haxxorworld]].&lt;br /&gt;
&lt;br /&gt;
== Present ==&lt;br /&gt;
The reason given for taking the code database down was to prevent &#039;&#039;thieves&#039;&#039; from stealing their content. The irony of it all is that GSCentral gets the majority of its content from other sites, and often fails to give proper credit.&lt;br /&gt;
&lt;br /&gt;
After a ridiculous amount of procrastination, the database was &#039;&#039;technically&#039;&#039; restored. There is no way to browse codes, and is only accessible though a buggy search box.&lt;br /&gt;
&lt;br /&gt;
== Technical Information ==&lt;br /&gt;
&lt;br /&gt;
The hosting is provided by the German host [http://all-inkl.com/eng/index.php?cna=&amp;amp;cnb= All-Inkl]. It runs on Apache Apache 1.3.36, and has PHP 4.4.2, FrontPage extension 5.0.2.4803, mod_fastcgi-SNAP-0404142202, mod_ssl 2.8.27, and OpenSSL 0.9.6i. Due to circumstantial evidence, it is presumed to have access to a MySQL database. &lt;br /&gt;
&lt;br /&gt;
The newly added search function has a limitation of only accepting 3 or more characters. Non-alphanumeric characters are stripped. For example, you can&#039;t search for &amp;quot;C-12&amp;quot; and get the game &amp;quot;C-12 - Final Resistance&amp;quot;, but the full name of the game gives results. The maximum search string is 8,197 bytes (8 kilobytes exactly). After this, the server gives an HTTP 414 error, complaining about the input being too large.&lt;br /&gt;
&lt;br /&gt;
Each game is split into pages. Each page has a likely unique key generated and checked for by mcrypt. Each key is 32 characters in length. Invalid (but of the right length) keys give this error: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
An error occurred. We are unable to satisfy your request. Please contact the webmaster to notify him of this error. Upon contacting us if you could provide the URL address you tried to access and details on where you found this hyperlink it would be greatly appreciated. Thank you. We apologize for the inconvenience.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It has been discovered that nowhere near the quantity of codes that should be up actually are. Recently however more codes have been added. It is not known whether or not the codes taken from other sites have been completey credited.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
[http://gscentral.org GSCentral Main Page]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://gscentral.org/board/index.php GSCentral Forums]&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Talk:Main_Page&amp;diff=1914</id>
		<title>Talk:Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Talk:Main_Page&amp;diff=1914"/>
		<updated>2008-01-16T07:14:55Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: Reverted edits by Cryptone (Talk); changed back to last version by Ace&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=1905</id>
		<title>Assembly Hacking</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=1905"/>
		<updated>2008-01-09T19:36:46Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: added some sections, edited some links, a little maintainance&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Overview=&lt;br /&gt;
&lt;br /&gt;
Assembly hacking is the art of editing a compiled program. Without the source code, and without notes from the source code, one has to deduce almost everything about the underlying code, and how it works with RAM.&lt;br /&gt;
&lt;br /&gt;
There are several emulators that can aid one in creating a modification for a game. Games for console systems fall into the category of compiled programs, and generally, the source code is unavailable for these games.&lt;br /&gt;
&lt;br /&gt;
The use of making an assembly hack for a game can be found with the Nintendo Entertainment System (NES) [[Game Genie]].&lt;br /&gt;
&lt;br /&gt;
The codes that are entered into an NES Game Genie represent single-byte assembly hacks. Any assembly hack that could be done with a change of 3 bytes or less is possible to implement with a single Game Genie. The SNES Game Genie allows up to 5 codes, and 5 bytes of change. While this makes the possible usage of codes very limiting, it didn&#039;t prevent single-byte invincibility and infinite lives codes from appearing that could make it unneccesary to use additional codes.&lt;br /&gt;
&lt;br /&gt;
For more modern assembly hacking of the same systems, emulators that support 50 or more codes for any given game aren&#039;t uncommon. The ROMs have been turned into files that can be patched with all the changes needed to give the game a script in a new language. Emulators that aid in the process of making assembly hacks have appeared for many different emulated systems. The effect is that more people are now capable of starting their own projects, and existing projects can be modified and/or repaired more easily.&lt;br /&gt;
&lt;br /&gt;
=Emulators=&lt;br /&gt;
&lt;br /&gt;
==NES==&lt;br /&gt;
FCEUXDSP&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.the-interweb.com/serendipity/index.php?/categories/9-FCEUXD-SP&lt;br /&gt;
&lt;br /&gt;
A project originated by Parasyte called FCEUd, picked up by bbitmaster and renamed to FCEUXD, and finally adopted as FCEUXD SP.&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in ROM/RAM&lt;br /&gt;
Tools&amp;gt;Debug&lt;br /&gt;
&lt;br /&gt;
In the breakpoint window, &#039;Add&#039; the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
ROM is 8000-FFFF&amp;lt;br&amp;gt;&lt;br /&gt;
RAM is 0000-07FF, 6000-7FFF&amp;lt;br&amp;gt;&lt;br /&gt;
0800-3FFF is mirrored from some part of RAM.&amp;lt;br&amp;gt;&lt;br /&gt;
4000-4015 can be breakpointed if working on an NSF. If you want to use this to deal with NSFs, try my edited version, which tends to play nicer with them ( http://www.angelfire.com/nc/ugetab )&lt;br /&gt;
&lt;br /&gt;
&#039;Hex Editor&#039; is a memory viewer/modifier.&lt;br /&gt;
&lt;br /&gt;
==SNES==&lt;br /&gt;
Geiger&#039;s SNES9X Debugger &amp;lt;br&amp;gt;&lt;br /&gt;
http://geigercount.net/crypt/ &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.zophar.net/snes.html&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in ROM/RAM&amp;lt;br&amp;gt;&lt;br /&gt;
Open ROM, Click &#039;Breakpoints&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
In the breakpoint window, enter the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
Standard RAM: 7E0000 - 7FFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
SA1 RAM: 400000-407FFF, 303000-303FFF&amp;lt;br&amp;gt;&lt;br /&gt;
HiROM - C00000 - FFFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
LoROM - 808000-BFFFFF (**0000 - **7FFF doesn&#039;t exist)&lt;br /&gt;
&lt;br /&gt;
If you use the [[SA1]] logger with an SA1-using game, and wish to find an address that changed an address in RAM, you can see if the conversion chart on the [[SA1]] page shows you the address to search for in the log file.&lt;br /&gt;
&lt;br /&gt;
==Genesis==&lt;br /&gt;
Gens Tracer &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.romhacking.net/utils/337/&lt;br /&gt;
&lt;br /&gt;
No breakpoints, but adequate tracing.&lt;br /&gt;
&lt;br /&gt;
I&#039;ve written a guide on the specific usage of the emulator.&lt;br /&gt;
&lt;br /&gt;
The idea is that you can trace-log writes to and reads from memory, and you can also log all commands, and determine what&#039;s happening from the full log, by using what you find from the hook logging.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HazeMD &amp;lt;br&amp;gt;&lt;br /&gt;
http://haze.mameworld.info/&lt;br /&gt;
&lt;br /&gt;
This emulator is harder to get setup to use a ROM, but comes with a MAME-style debugger. MAME&#039;s debugger is well known for being so powerful, considering the number of systems it can be used with when compiled into a build of MAME. The Gens tracer tends to have slightly better compatibility, while the HazeMD emulator has more potential for cheat codes, already having a Cheat system designed to handle multiple CPUs, which could be used for 32x game ROM hacks, and RAM hacks.&lt;br /&gt;
&lt;br /&gt;
==Gameboy==&lt;br /&gt;
BGB &amp;lt;br&amp;gt;&lt;br /&gt;
http://bgb.bircd.org/&lt;br /&gt;
&lt;br /&gt;
Load a ROM, and right-click the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debug mode enabled: to enable debugging&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debugger to enter the debugger&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in ROM/RAM&amp;lt;br&amp;gt;&lt;br /&gt;
In the debugger window:&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;breakpoints for execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;access breakpoints for read/write breaks.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also, see below about Visual Boy Advance Tracer. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gameboy Advance==&lt;br /&gt;
Visual Boy Advance Tracer &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.romhacking.net/utils/340/&lt;br /&gt;
&lt;br /&gt;
This emulator uses the Hook Log system. Those familiar with the hook_log Genesis or N64 emulators should have little trouble adapting to this system. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that it has also been used to good effect for a small number of gameboy games that BGB doesn&#039;t support. I(ugetab) used this for GBS ripping, but with full code logging, and a save-state near when something changes, you could just as effectively search for a memory address in trace.log. Mind that while GB assembly doesn&#039;t pile up as quickly as GBA or N64, you still have to be relatively close to the change before activating logging, if you don&#039;t want to have to use a special text editor to open an enormous log file. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Visual Boy Advance &amp;lt;br&amp;gt;&lt;br /&gt;
http://vba.ngemu.com/downloads.shtml &amp;lt;br&amp;gt;&lt;br /&gt;
Windows - SDL&lt;br /&gt;
&lt;br /&gt;
Unfortunately, no cheat device exists that can change the assembly, so hacking it is more a matter of patching the ROM, and less a matter of using it for simple cheats.&lt;br /&gt;
&lt;br /&gt;
Not documented.&lt;br /&gt;
&lt;br /&gt;
==Playstation==&lt;br /&gt;
PCSX 1.5 With Debugger &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.romhacking.net/utils/267/&lt;br /&gt;
&lt;br /&gt;
Press F11 to enter the debugger.&amp;lt;br&amp;gt;&lt;br /&gt;
On-screen aids should be apparent.&lt;br /&gt;
&lt;br /&gt;
==N64==&lt;br /&gt;
Nemu64 &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.emulator-zone.com/doc.php/n64/nemu64.html &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.nemu.com/downloads.php (Expired)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setting execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Commands...&amp;lt;br&amp;gt;&lt;br /&gt;
To set a break on execution, go to the line that you want to break on, and click in the vertical bar to the left(&amp;lt;) of the address you want to breakpoint.&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in RAM&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Memory...&amp;lt;br&amp;gt;&lt;br /&gt;
Enable the read and/or write checkboxes, and right-click the memory space you want to set, unset, or change an access breakpoint on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some games don&#039;t run in Nemu, so you may have to switch to this hook_log based emulator if you want the codes &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.romhacking.net/utils/335/&lt;br /&gt;
&lt;br /&gt;
The hook_log system is a little bit more demanding to use than a visual debugger, but with compatibility issues, it&#039;s better than lucky to have a second usable debugging emulator. The save-states can be decompressed, and loaded in their decompressed form if needed&lt;br /&gt;
&lt;br /&gt;
An issue with this emulator is that not all instructions are logged, but it&#039;s still worth knowing about for the fact that many instructions are logged, and it can be used with write logging.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Project64 debug build binary &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.thegshi.org/downloads/Project64%20Build%2052%20Debug%20Binary.zip&lt;br /&gt;
&lt;br /&gt;
This version of the emulator has better support for games than Nemu64, and I&#039;ve(ugetab) used this tool in combination with nemu64 to edit USFs, as well as make a few codes that people using only a single emulation tool were having extremely hard struggles with.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Saturn==&lt;br /&gt;
Yabause&lt;br /&gt;
http://www.romhacking.net/utils/482/&lt;br /&gt;
&lt;br /&gt;
No info yet&lt;br /&gt;
&lt;br /&gt;
==Wonder Swan==&lt;br /&gt;
Cygne Tracer&lt;br /&gt;
http://www.romhacking.net/utils/244/&lt;br /&gt;
&lt;br /&gt;
No info yet&lt;br /&gt;
&lt;br /&gt;
Oswan Tracer&lt;br /&gt;
http://www.romhacking.net/utils/338/&lt;br /&gt;
&lt;br /&gt;
Another hook-log tracer&lt;br /&gt;
&lt;br /&gt;
==Playstation 2==&lt;br /&gt;
&lt;br /&gt;
[The current author is too lazy to write this, but will get around to it later if no one else does]&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=NSF&amp;diff=1889</id>
		<title>NSF</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=NSF&amp;diff=1889"/>
		<updated>2007-07-20T05:28:01Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The basic idea is one rips the music/sound code from an NES game and prepends a small header to the data.&lt;br /&gt;
&lt;br /&gt;
A program of some form (6502/sound emulator) then takes the data and loads it into the proper place into the 6502&#039;s address space, then inits and plays the tune.&lt;br /&gt;
&lt;br /&gt;
Many of the same methods used for finding cheat codes are compatible with finding sound information. The extra work of getting the right code into the right place and setting up the header is the primary difference between ripping and cheat making.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(The following is a modified version of the text on the nesdev.parodius.org wiki)&lt;br /&gt;
== Header Overview ==&lt;br /&gt;
&lt;br /&gt;
 offset  # of bytes   Function&lt;br /&gt;
 ----------------------------&lt;br /&gt;
 0000    5   STRING  &amp;quot;NESM&amp;quot;,01Ah  ; denotes an NES sound format file&lt;br /&gt;
 0005    1   BYTE    Version number (currently 01h)&lt;br /&gt;
 0006    1   BYTE    Total songs   (1=1 song, 2=2 songs, etc)&lt;br /&gt;
 0007    1   BYTE    Starting song (1=1st song, 2=2nd song, etc)&lt;br /&gt;
 0008    2   WORD    (lo/hi) load address of data (8000-FFFF)&lt;br /&gt;
 000a    2   WORD    (lo/hi) init address of data (8000-FFFF)&lt;br /&gt;
 000c    2   WORD    (lo/hi) play address of data (8000-FFFF)&lt;br /&gt;
 000e    32  STRING  The name of the song, null terminated&lt;br /&gt;
 002e    32  STRING  The artist, if known, null terminated&lt;br /&gt;
 004e    32  STRING  The Copyright holder, null terminated&lt;br /&gt;
 006e    2   WORD    (lo/hi) speed, in 1/1000000th sec ticks, NTSC (see text)&lt;br /&gt;
 0070    8   BYTE    Bankswitch Init Values (see text, and FDS section)&lt;br /&gt;
 0078    2   WORD    (lo/hi) speed, in 1/1000000th sec ticks, PAL (see text)&lt;br /&gt;
 007a    1   BYTE    PAL/NTSC bits:&lt;br /&gt;
                 bit 0: if clear, this is an NTSC tune&lt;br /&gt;
                 bit 0: if set, this is a PAL tune&lt;br /&gt;
                 bit 1: if set, this is a dual PAL/NTSC tune&lt;br /&gt;
                 bits 2-7: not used. they *must* be 0&lt;br /&gt;
 007b    1   BYTE    Extra Sound Chip Support&lt;br /&gt;
                 bit 0: if set, this song uses VRCVI&lt;br /&gt;
                 bit 1: if set, this song uses VRCVII&lt;br /&gt;
                 bit 2: if set, this song uses FDS Sound&lt;br /&gt;
                 bit 3: if set, this song uses MMC5 audio&lt;br /&gt;
                 bit 4: if set, this song uses Namco 106&lt;br /&gt;
                 bit 5: if set, this song uses Sunsoft FME-07&lt;br /&gt;
                 bits 6,7: future expansion: they *must* be 0&lt;br /&gt;
 007c    4   ----    4 extra bytes for expansion (must be 00h)&lt;br /&gt;
 0080    nnn ----    The music program/data follows&lt;br /&gt;
&lt;br /&gt;
This may look somewhat familiar;  if so that&#039;s because this is somewhat sort of based on the PSID file format for C64 music/sound.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Loading a tune into RAM ==&lt;br /&gt;
&lt;br /&gt;
If offsets 0070h to 0077h have 00h in them, then bankswitching is *not* used.  If one or more bytes are something other than 00h then bankswitching is used.  If bankswitching is used then the load address is still used, but you now use (ADDRESS AND 0FFFh) to determine where on the first bank to load the data.&lt;br /&gt;
&lt;br /&gt;
Each bank is 1K in size, and that means there are 8 of them for the&lt;br /&gt;
entire 08000h-0ffffh range in the 6502&#039;s address space.  You determine where in memory the data goes by setting bytes 070h thru 077h in the file. These determine the inital bank values that will be used, and hence where the data will be loaded into the address space.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s an example:&lt;br /&gt;
&lt;br /&gt;
METROID.NSF will be used for the following explaination.&lt;br /&gt;
&lt;br /&gt;
 The file is set up like so:  (starting at 070h in the file)&lt;br /&gt;
 &lt;br /&gt;
 0070: 05 05 05 05 05 05 05 05 - 00 00 00 00 00 00 00 00&lt;br /&gt;
 0080: ... music data goes here...&lt;br /&gt;
&lt;br /&gt;
Since 0070h-0077h are something other than 00h, then we know that this tune uses bankswitching.  The load address for the data is specified as 08000h.  We take this AND 0fffh and get 0000h, so we will load data in at byte 0 of bank 0, since data is loaded into the banks sequentially starting from bank 0 up until the music data is fully loaded.&lt;br /&gt;
&lt;br /&gt;
Metroid has 6 1K banks in it, numbered 0 through 5. The 6502&#039;s address space has 8 1K bankswitchable blocks on it, starting at 08000h-08fffh, 09000h-09fffh, 0a000h-0afffh ... 0f000h-0ffffh. In the Metroid NSF header, all banks start out loaded with the 6th 1K bank of data, which is 5. Each one of these is 1K in size, and the current bank is controlled by writes to 05ff8h thru 05fffh, one byte per bank.  So, 05ff8h controls the 08000h-08fffh range, 05ff9h controls the 09000h-09fffh range, etc. up to 05fffh which controls the 0f000h-0ffffh range.  When the song is loaded into RAM, it is loaded into the banks and not the 6502&#039;s address space.  Once this is done, then the bank control registers are written to set up the inital bank values. To do this, the value at 0070h in the file is written to 05ff8h, 0071h is written to 05ff9h, etc. all the way to 0077h is written to 05fffh.&lt;br /&gt;
This is should be done before every call to the init routine.&lt;br /&gt;
&lt;br /&gt;
If the tune was not bankswitched, then it is simply loaded in at the &lt;br /&gt;
specified load address, until EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Initalizing a tune ==&lt;br /&gt;
&lt;br /&gt;
This is pretty simple.  Load the desired song # into the accumulator,&lt;br /&gt;
minus 1 and set the X register to specify PAL (X=1) or NTSC (X=0).&lt;br /&gt;
If this is a single standard tune (i.e. PAL *or* NTSC but not both)&lt;br /&gt;
then the X register contents should not matter.  Once the song # and&lt;br /&gt;
optional PAL/NTSC standard are loaded, simply call the INIT address.&lt;br /&gt;
Once init is done, it should perform an RTS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Playing a tune ==&lt;br /&gt;
&lt;br /&gt;
Once the tune has been initalized, it can now be played.  To do this,&lt;br /&gt;
simply call the play address several times a second.  How many times&lt;br /&gt;
per second is determined by offsets 006eh and 006fh in the file.&lt;br /&gt;
These bytes denote the speed of playback in 1/1000000ths of a second. &lt;br /&gt;
For the &amp;quot;usual&amp;quot; 60Hz playback rate, set this to 411ah.&lt;br /&gt;
&lt;br /&gt;
To generate a differing playback rate, use this formula:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
          1000000&lt;br /&gt;
 PBRATE= ---------&lt;br /&gt;
           speed&lt;br /&gt;
&lt;br /&gt;
Where PBRATE is the value you stick into 006e/006fh in the file, and&lt;br /&gt;
speed is the desired speed in hertz. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Properly Loading a Tune ==&lt;br /&gt;
&lt;br /&gt;
* If the tune is bankswitched, go to #3.&lt;br /&gt;
&lt;br /&gt;
* Load the data into the 6502&#039;s address space starting at the specified load address. Go to #4.&lt;br /&gt;
&lt;br /&gt;
* Load the data into a RAM area, starting at (start_address AND 0fffh).&lt;br /&gt;
&lt;br /&gt;
* Tune load is done.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Properly Initializing a Tune ==&lt;br /&gt;
&lt;br /&gt;
* Clear all RAM at 0000h-07ffh.&lt;br /&gt;
&lt;br /&gt;
* Clear all RAM at 6000h-7fffh.&lt;br /&gt;
&lt;br /&gt;
* Init the sound registers by writing 00h to 04000-0400Fh, 10h to 4010h, and 00h to 4011h-4013h.&lt;br /&gt;
&lt;br /&gt;
* Set volume register 04015h to 00fh.&lt;br /&gt;
&lt;br /&gt;
* If this is a banked tune, load the bank values from the header into 5ff8-5fffh.&lt;br /&gt;
&lt;br /&gt;
* Set the accumulator and X registers for the desired song.&lt;br /&gt;
&lt;br /&gt;
* Call the music init routine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Properly Playing a Tune ==&lt;br /&gt;
Call the play address of the music at periodic intervals determined by the speed words.  Which word to use is determined by which mode you are in- PAL or NTSC.&lt;br /&gt;
&lt;br /&gt;
== Changes Since This Guide Was Written ==&lt;br /&gt;
Some players no longer use the playback rate bytes.&lt;br /&gt;
&lt;br /&gt;
== Adding DPCM ==&lt;br /&gt;
There is a large section on how to deal with DPCM samples in the [http://www.zophar.net/tech/files/NESAudioRipping.TXT NES Music Ripping Guide], but the basic information on DPCM is that writes to $4012 and $4013 access sample data stored at and between $c000 and $ffff.&lt;br /&gt;
&lt;br /&gt;
Writes to $4012 determine the location of the sample data. The value written to $4012, multiplied by 0040h, plus 0c000h, is the point in ROM space the sample starts.&lt;br /&gt;
&lt;br /&gt;
Writes to $4013 determine the length of the sample data. The value written to $4013, multiplied by 0010h, plus 1, is the length of the sample data.&lt;br /&gt;
&lt;br /&gt;
If 00h is written to $4012 and $4013, the sample would be located at $c000, and would be 1 byte in length. If 0080h is written to $4012 and $4013, the sample would be located at $e000, and would be 0x801 bytes in length.&lt;br /&gt;
&lt;br /&gt;
DPCM samples can be attached to an NSF by either relocating the neccesary data, or by including the banks with the DPCM data in the NSF. Relocating the data correctly will often lead to a smaller file size, but including the original data in it&#039;s original location is usually easier to do.&lt;br /&gt;
&lt;br /&gt;
== Sound Chip Support ==&lt;br /&gt;
Byte 007bh of the file stores the sound chip flags.  If a particular flag is set, those sound registers should be enabled.  If the flag is clear, then those registers should be disabled. All I/O registers within 8000-FFFF are &#039;&#039;write only&#039;&#039; and must not disrupt music code that happens to be stored there.&lt;br /&gt;
&lt;br /&gt;
=== VRCVI ===&lt;br /&gt;
* Uses registers 9000-9002, A000-A002, and B000-B002, write only. See [[VRC6 Audio]] for more information.&lt;br /&gt;
* Note: The A0 and A1 lines are flipped on a few games! If you rip the music and it sounds all funny, flip around  the xxx1 and xxx2 register pairs.  (i.e. 9001 and 9002)  9000 and 9003 can be left untouched.  I decided to do this since it  would make things easier all around, and this means you only will have to change the music code in a very few places (6).  Esper2 and Madara will need this change, while Castlevania 3j will not for instance.&lt;br /&gt;
&lt;br /&gt;
=== VRCVII ===&lt;br /&gt;
* Uses registers 9010 and 9030, write only. See [[VRC7 Audio]] for more information.&lt;br /&gt;
&lt;br /&gt;
=== FDS Sound ===&lt;br /&gt;
* Uses registers from 4040 through 4092. See [[FDS Audio]] for more information.&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* 6000-DFFF is assumed to be RAM, since 6000-DFFF is RAM on the FDS.  E000-FFFF is usually not included in FDS games because it is the BIOS ROM.  However, it can be used on FDS rips to help the ripper (for modified play/init addresses).&lt;br /&gt;
* Bankswitching operates slightly different on FDS tunes.  5FF6 and 5FF7 control the banks 6000-6FFF and 7000-7FFF respectively.  NSF header offsets 76h and 77h correspond to *both* 6000-7FFF *AND* E000-FFFF.  Keep this in mind!&lt;br /&gt;
&lt;br /&gt;
=== MMC5 Sound ===&lt;br /&gt;
* Uses registers 5000-5015, write only as well as 5205 and 5206, and 5C00-5FF5. see [[MMC5 Audio]] for more information.&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* 5205 and 5206 are a hardware 8*8 multiplier.  The idea being you write your two bytes to be multiplied into 5205 and 5206 and after doing so, you read the result back out.&lt;br /&gt;
* 5C00-5FF5 should be RAM to emulate EXRAM while in MMC5 mode.&lt;br /&gt;
&lt;br /&gt;
=== Namco 106 Sound ===&lt;br /&gt;
* Uses registers 4800 and F800. See [[Namco 106 Audio]] for more information.&lt;br /&gt;
&lt;br /&gt;
=== Sunsoft FME-07 Sound ===&lt;br /&gt;
* Uses registers C000 and E000. See [[Sunsoft Audio]] for more information.&lt;br /&gt;
&lt;br /&gt;
== Caveats ==&lt;br /&gt;
# The starting song number and maximum song numbers start counting at 1, while the init address of the tune starts counting at 0.  To &amp;quot;fix&amp;quot;, simply pass the desired song number minus 1 to the init routine.&lt;br /&gt;
# The NTSC speed word is used *only* for NTSC tunes, or dual PAL/NTSC tunes. The PAL speed word is used *only* for PAL tunes, or dual PAL/NTSC tunes.&lt;br /&gt;
# The length of the text in the name, artist, and copyright fields must be 31 characters or less!  There has to be at least a single NULL byte (00h) after the text, between fields.&lt;br /&gt;
# If a field is not known (name, artist, copyright) then the field must contain the string &amp;quot;&amp;lt;?&amp;gt;&amp;quot; (without quotes).  &lt;br /&gt;
# There should be 8K of RAM present at 6000-7FFFh. MMC5 tunes need RAM at 5C00-5FF7 to emulate its EXRAM. 8000-FFFF should be read-only (not writable) after a tune has loaded.  The only time this area should be writable is if an FDS tune is being played.&lt;br /&gt;
# Do not assume the state of *anything* on entry to the init routine except A and X.  Y can be anything, as can the flags.  &lt;br /&gt;
# Do not assume the state of *anything* on entry to the play routine either. Flags, X, A, and Y could be at any state.  I&#039;ve fixed about 10 tunes because of this problem and the problem above.&lt;br /&gt;
# The stack sits at 1FFh and grows down to 100h.  Make sure the tune does not attempt to use 1E0h-1FFh for variables. (Armed Dragon Villigust did and I had to relocate its RAM usage to 2xx) Tunes that do use this area are likely relying on direct lookup of stack values. Games that do this need to be debugged to find the location that pushes or writes this information.&lt;br /&gt;
# Variables should sit in the 0000h-07FFh area *only*.  If the tune writes outside this range, say 1400h this is bad and should be relocated. (Terminator 3 did this and I relocated it to 04xx). Note that most recent players also support RAM at 6000h-7FFFh.&lt;br /&gt;
# Some games require A/X/Y to be &#039;cleaned&#039; before running some code. This can be required during the Init routine, or before the Play address is run. In one case, all the songs in an NSF wouldn&#039;t loop because the Y register wasn&#039;t zeroed in the init routine.&lt;br /&gt;
&lt;br /&gt;
== Using FCEUXDSP ==&lt;br /&gt;
Ripping can be made much easier by using this relatively new NES debugging emulator.&lt;br /&gt;
&lt;br /&gt;
By breakpointing writes to $4015, then resetting the game, you can often find the part of code that initializes the sound registers(Sound Init), and see if it&#039;s doing anything unusual at that point.&lt;br /&gt;
&lt;br /&gt;
Breaking on writes to $4000 - $400F will usually show you part of the Play routine. Using the &#039;Step Out&#039; option tends to help show the entry point into the routine.&lt;br /&gt;
&lt;br /&gt;
Discovering what part of memory changes to choose the next note is helpful in figuring out where the music init is. Breaking on writes to these addresses helps find the Song Init coding, either by visually dissecting the code, or by using Step Out to try to find a place to breakpoint, and change the A/X/Y registers, in hopes of choosing a different song, which will confirm that it&#039;s a Song Init routine.&lt;br /&gt;
&lt;br /&gt;
If you load an NSF, you can use the debugger to check for errors without much difficulty. You can also use a trick for debugging that lets you use verified Game memory to test the NSF for correct music information, and Play routine...&lt;br /&gt;
&lt;br /&gt;
Open any regular game rom, open the hex viewer, then open the NSF file you want with the Hex viewer open. Run another copy of FCEUXDSP, and load the rom of the game you&#039;re working on an NSF of. In the game window, open it&#039;s hex-editor window too. In the emulator with the game running, get some music going, and click-drag downward from 0x200 until you have 0x700 bytes selected, and copy the information to the clipboard. This skips 0x100, where the stack is stored. In the NSF-emulating window&#039;s hex editor, paste the info at 0x200, and see if the NSF plays the music correctly. If it does, you can narrow down the amount of info copied selectively, until you get the bit of information it needs to play, and find what routine needs to be adding this info to RAM. Some fixes can consist of a single byte of difference in RAM between the original, and the repaired version of an NSF. Note that this will require that the right banks be loaded, or it will fail outright. An inaccurate Play address can also result in a lack of sound.&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=NSF&amp;diff=1888</id>
		<title>NSF</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=NSF&amp;diff=1888"/>
		<updated>2007-07-17T02:22:35Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The basic idea is one rips the music/sound code from an NES game and prepends a small header to the data.&lt;br /&gt;
&lt;br /&gt;
A program of some form (6502/sound emulator) then takes the data and loads it into the proper place into the 6502&#039;s address space, then inits and plays the tune.&lt;br /&gt;
&lt;br /&gt;
Many of the same methods used for finding cheat codes are compatible with finding sound information. The extra work of getting the right code into the right place and setting up the header is the primary difference between ripping and cheat making.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(The following is a modified version of the text on the nesdev.parodius.org wiki)&lt;br /&gt;
== Header Overview ==&lt;br /&gt;
&lt;br /&gt;
 offset  # of bytes   Function&lt;br /&gt;
 ----------------------------&lt;br /&gt;
 0000    5   STRING  &amp;quot;NESM&amp;quot;,01Ah  ; denotes an NES sound format file&lt;br /&gt;
 0005    1   BYTE    Version number (currently 01h)&lt;br /&gt;
 0006    1   BYTE    Total songs   (1=1 song, 2=2 songs, etc)&lt;br /&gt;
 0007    1   BYTE    Starting song (1=1st song, 2=2nd song, etc)&lt;br /&gt;
 0008    2   WORD    (lo/hi) load address of data (8000-FFFF)&lt;br /&gt;
 000a    2   WORD    (lo/hi) init address of data (8000-FFFF)&lt;br /&gt;
 000c    2   WORD    (lo/hi) play address of data (8000-FFFF)&lt;br /&gt;
 000e    32  STRING  The name of the song, null terminated&lt;br /&gt;
 002e    32  STRING  The artist, if known, null terminated&lt;br /&gt;
 004e    32  STRING  The Copyright holder, null terminated&lt;br /&gt;
 006e    2   WORD    (lo/hi) speed, in 1/1000000th sec ticks, NTSC (see text)&lt;br /&gt;
 0070    8   BYTE    Bankswitch Init Values (see text, and FDS section)&lt;br /&gt;
 0078    2   WORD    (lo/hi) speed, in 1/1000000th sec ticks, PAL (see text)&lt;br /&gt;
 007a    1   BYTE    PAL/NTSC bits:&lt;br /&gt;
                 bit 0: if clear, this is an NTSC tune&lt;br /&gt;
                 bit 0: if set, this is a PAL tune&lt;br /&gt;
                 bit 1: if set, this is a dual PAL/NTSC tune&lt;br /&gt;
                 bits 2-7: not used. they *must* be 0&lt;br /&gt;
 007b    1   BYTE    Extra Sound Chip Support&lt;br /&gt;
                 bit 0: if set, this song uses VRCVI&lt;br /&gt;
                 bit 1: if set, this song uses VRCVII&lt;br /&gt;
                 bit 2: if set, this song uses FDS Sound&lt;br /&gt;
                 bit 3: if set, this song uses MMC5 audio&lt;br /&gt;
                 bit 4: if set, this song uses Namco 106&lt;br /&gt;
                 bit 5: if set, this song uses Sunsoft FME-07&lt;br /&gt;
                 bits 6,7: future expansion: they *must* be 0&lt;br /&gt;
 007c    4   ----    4 extra bytes for expansion (must be 00h)&lt;br /&gt;
 0080    nnn ----    The music program/data follows&lt;br /&gt;
&lt;br /&gt;
This may look somewhat familiar;  if so that&#039;s because this is somewhat sort of based on the PSID file format for C64 music/sound.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Loading a tune into RAM ==&lt;br /&gt;
&lt;br /&gt;
If offsets 0070h to 0077h have 00h in them, then bankswitching is *not* used.  If one or more bytes are something other than 00h then bankswitching is used.  If bankswitching is used then the load address is still used, but you now use (ADDRESS AND 0FFFh) to determine where on the first bank to load the data.&lt;br /&gt;
&lt;br /&gt;
Each bank is 4K in size, and that means there are 8 of them for the&lt;br /&gt;
entire 08000h-0ffffh range in the 6502&#039;s address space.  You determine where in memory the data goes by setting bytes 070h thru 077h in the file. These determine the inital bank values that will be used, and hence where the data will be loaded into the address space.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s an example:&lt;br /&gt;
&lt;br /&gt;
METROID.NSF will be used for the following explaination.&lt;br /&gt;
&lt;br /&gt;
 The file is set up like so:  (starting at 070h in the file)&lt;br /&gt;
 &lt;br /&gt;
 0070: 05 05 05 05 05 05 05 05 - 00 00 00 00 00 00 00 00&lt;br /&gt;
 0080: ... music data goes here...&lt;br /&gt;
&lt;br /&gt;
Since 0070h-0077h are something other than 00h, then we know that this tune uses bankswitching.  The load address for the data is specified as 08000h.  We take this AND 0fffh and get 0000h, so we will load data in at byte 0 of bank 0, since data is loaded into the banks sequentially starting from bank 0 up until the music data is fully loaded.&lt;br /&gt;
&lt;br /&gt;
Metroid has 6 4K banks in it, numbered 0 through 5. The 6502&#039;s address space has 8 4K bankswitchable blocks on it, starting at 08000h-08fffh, 09000h-09fffh, 0a000h-0afffh ... 0f000h-0ffffh. In the Metroid NSF header, all banks start out loaded with the 6th 4K bank of data, which is 5. Each one of these is 4K in size, and the current bank is controlled by writes to 05ff8h thru 05fffh, one byte per bank.  So, 05ff8h controls the 08000h-08fffh range, 05ff9h controls the 09000h-09fffh range, etc. up to 05fffh which controls the 0f000h-0ffffh range.  When the song is loaded into RAM, it is loaded into the banks and not the 6502&#039;s address space.  Once this is done, then the bank control registers are written to set up the inital bank values. To do this, the value at 0070h in the file is written to 05ff8h, 0071h is written to 05ff9h, etc. all the way to 0077h is written to 05fffh.&lt;br /&gt;
This is should be done before every call to the init routine.&lt;br /&gt;
&lt;br /&gt;
If the tune was not bankswitched, then it is simply loaded in at the &lt;br /&gt;
specified load address, until EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Initalizing a tune ==&lt;br /&gt;
&lt;br /&gt;
This is pretty simple.  Load the desired song # into the accumulator,&lt;br /&gt;
minus 1 and set the X register to specify PAL (X=1) or NTSC (X=0).&lt;br /&gt;
If this is a single standard tune (i.e. PAL *or* NTSC but not both)&lt;br /&gt;
then the X register contents should not matter.  Once the song # and&lt;br /&gt;
optional PAL/NTSC standard are loaded, simply call the INIT address.&lt;br /&gt;
Once init is done, it should perform an RTS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Playing a tune ==&lt;br /&gt;
&lt;br /&gt;
Once the tune has been initalized, it can now be played.  To do this,&lt;br /&gt;
simply call the play address several times a second.  How many times&lt;br /&gt;
per second is determined by offsets 006eh and 006fh in the file.&lt;br /&gt;
These bytes denote the speed of playback in 1/1000000ths of a second. &lt;br /&gt;
For the &amp;quot;usual&amp;quot; 60Hz playback rate, set this to 411ah.&lt;br /&gt;
&lt;br /&gt;
To generate a differing playback rate, use this formula:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
          1000000&lt;br /&gt;
 PBRATE= ---------&lt;br /&gt;
           speed&lt;br /&gt;
&lt;br /&gt;
Where PBRATE is the value you stick into 006e/006fh in the file, and&lt;br /&gt;
speed is the desired speed in hertz. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Properly Loading a Tune ==&lt;br /&gt;
&lt;br /&gt;
* If the tune is bankswitched, go to #3.&lt;br /&gt;
&lt;br /&gt;
* Load the data into the 6502&#039;s address space starting at the specified load address. Go to #4.&lt;br /&gt;
&lt;br /&gt;
* Load the data into a RAM area, starting at (start_address AND 0fffh).&lt;br /&gt;
&lt;br /&gt;
* Tune load is done.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Properly Initializing a Tune ==&lt;br /&gt;
&lt;br /&gt;
* Clear all RAM at 0000h-07ffh.&lt;br /&gt;
&lt;br /&gt;
* Clear all RAM at 6000h-7fffh.&lt;br /&gt;
&lt;br /&gt;
* Init the sound registers by writing 00h to 04000-0400Fh, 10h to 4010h, and 00h to 4011h-4013h.&lt;br /&gt;
&lt;br /&gt;
* Set volume register 04015h to 00fh.&lt;br /&gt;
&lt;br /&gt;
* If this is a banked tune, load the bank values from the header into 5ff8-5fffh.&lt;br /&gt;
&lt;br /&gt;
* Set the accumulator and X registers for the desired song.&lt;br /&gt;
&lt;br /&gt;
* Call the music init routine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Properly Playing a Tune ==&lt;br /&gt;
Call the play address of the music at periodic intervals determined by the speed words.  Which word to use is determined by which mode you are in- PAL or NTSC.&lt;br /&gt;
&lt;br /&gt;
== Changes Since This Guide Was Written ==&lt;br /&gt;
Some players no longer use the playback rate bytes.&lt;br /&gt;
&lt;br /&gt;
== Adding DPCM ==&lt;br /&gt;
There is a large section on how to deal with DPCM samples in the [http://www.zophar.net/tech/files/NESAudioRipping.TXT NES Music Ripping Guide], but the basic information on DPCM is that writes to $4012 and $4013 access sample data stored at and between $c000 and $ffff.&lt;br /&gt;
&lt;br /&gt;
Writes to $4012 determine the location of the sample data. The value written to $4012, multiplied by 0040h, plus 0c000h, is the point in ROM space the sample starts.&lt;br /&gt;
&lt;br /&gt;
Writes to $4013 determine the length of the sample data. The value written to $4013, multiplied by 0010h, plus 1, is the length of the sample data.&lt;br /&gt;
&lt;br /&gt;
If 00h is written to $4012 and $4013, the sample would be located at $c000, and would be 1 byte in length. If 0080h is written to $4012 and $4013, the sample would be located at $e000, and would be 0x801 bytes in length.&lt;br /&gt;
&lt;br /&gt;
DPCM samples can be attached to an NSF by either relocating the neccesary data, or by including the banks with the DPCM data in the NSF. Relocating the data correctly will often lead to a smaller file size, but including the original data in it&#039;s original location is usually easier to do.&lt;br /&gt;
&lt;br /&gt;
== Sound Chip Support ==&lt;br /&gt;
Byte 007bh of the file stores the sound chip flags.  If a particular flag is set, those sound registers should be enabled.  If the flag is clear, then those registers should be disabled. All I/O registers within 8000-FFFF are &#039;&#039;write only&#039;&#039; and must not disrupt music code that happens to be stored there.&lt;br /&gt;
&lt;br /&gt;
=== VRCVI ===&lt;br /&gt;
* Uses registers 9000-9002, A000-A002, and B000-B002, write only. See [[VRC6 Audio]] for more information.&lt;br /&gt;
* Note: The A0 and A1 lines are flipped on a few games! If you rip the music and it sounds all funny, flip around  the xxx1 and xxx2 register pairs.  (i.e. 9001 and 9002)  9000 and 9003 can be left untouched.  I decided to do this since it  would make things easier all around, and this means you only will have to change the music code in a very few places (6).  Esper2 and Madara will need this change, while Castlevania 3j will not for instance.&lt;br /&gt;
&lt;br /&gt;
=== VRCVII ===&lt;br /&gt;
* Uses registers 9010 and 9030, write only. See [[VRC7 Audio]] for more information.&lt;br /&gt;
&lt;br /&gt;
=== FDS Sound ===&lt;br /&gt;
* Uses registers from 4040 through 4092. See [[FDS Audio]] for more information.&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* 6000-DFFF is assumed to be RAM, since 6000-DFFF is RAM on the FDS.  E000-FFFF is usually not included in FDS games because it is the BIOS ROM.  However, it can be used on FDS rips to help the ripper (for modified play/init addresses).&lt;br /&gt;
* Bankswitching operates slightly different on FDS tunes.  5FF6 and 5FF7 control the banks 6000-6FFF and 7000-7FFF respectively.  NSF header offsets 76h and 77h correspond to *both* 6000-7FFF *AND* E000-FFFF.  Keep this in mind!&lt;br /&gt;
&lt;br /&gt;
=== MMC5 Sound ===&lt;br /&gt;
* Uses registers 5000-5015, write only as well as 5205 and 5206, and 5C00-5FF5. see [[MMC5 Audio]] for more information.&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* 5205 and 5206 are a hardware 8*8 multiplier.  The idea being you write your two bytes to be multiplied into 5205 and 5206 and after doing so, you read the result back out.&lt;br /&gt;
* 5C00-5FF5 should be RAM to emulate EXRAM while in MMC5 mode.&lt;br /&gt;
&lt;br /&gt;
=== Namco 106 Sound ===&lt;br /&gt;
* Uses registers 4800 and F800. See [[Namco 106 Audio]] for more information.&lt;br /&gt;
&lt;br /&gt;
=== Sunsoft FME-07 Sound ===&lt;br /&gt;
* Uses registers C000 and E000. See [[Sunsoft Audio]] for more information.&lt;br /&gt;
&lt;br /&gt;
== Caveats ==&lt;br /&gt;
# The starting song number and maximum song numbers start counting at 1, while the init address of the tune starts counting at 0.  To &amp;quot;fix&amp;quot;, simply pass the desired song number minus 1 to the init routine.&lt;br /&gt;
# The NTSC speed word is used *only* for NTSC tunes, or dual PAL/NTSC tunes. The PAL speed word is used *only* for PAL tunes, or dual PAL/NTSC tunes.&lt;br /&gt;
# The length of the text in the name, artist, and copyright fields must be 31 characters or less!  There has to be at least a single NULL byte (00h) after the text, between fields.&lt;br /&gt;
# If a field is not known (name, artist, copyright) then the field must contain the string &amp;quot;&amp;lt;?&amp;gt;&amp;quot; (without quotes).  &lt;br /&gt;
# There should be 8K of RAM present at 6000-7FFFh. MMC5 tunes need RAM at 5C00-5FF7 to emulate its EXRAM. 8000-FFFF should be read-only (not writable) after a tune has loaded.  The only time this area should be writable is if an FDS tune is being played.&lt;br /&gt;
# Do not assume the state of *anything* on entry to the init routine except A and X.  Y can be anything, as can the flags.  &lt;br /&gt;
# Do not assume the state of *anything* on entry to the play routine either. Flags, X, A, and Y could be at any state.  I&#039;ve fixed about 10 tunes because of this problem and the problem above.&lt;br /&gt;
# The stack sits at 1FFh and grows down to 100h.  Make sure the tune does not attempt to use 1E0h-1FFh for variables. (Armed Dragon Villigust did and I had to relocate its RAM usage to 2xx) Tunes that do use this area are likely relying on direct lookup of stack values. Games that do this need to be debugged to find the location that pushes or writes this information.&lt;br /&gt;
# Variables should sit in the 0000h-07FFh area *only*.  If the tune writes outside this range, say 1400h this is bad and should be relocated. (Terminator 3 did this and I relocated it to 04xx). Note that most recent players also support RAM at 6000h-7FFFh.&lt;br /&gt;
# Some games require A/X/Y to be &#039;cleaned&#039; before running some code. This can be required during the Init routine, or before the Play address is run. In one case, all the songs in an NSF wouldn&#039;t loop because the Y register wasn&#039;t zeroed in the init routine.&lt;br /&gt;
&lt;br /&gt;
== Using FCEUXDSP ==&lt;br /&gt;
Ripping can be made much easier by using this relatively new NES debugging emulator.&lt;br /&gt;
&lt;br /&gt;
By breakpointing writes to $4015, then resetting the game, you can often find the part of code that initializes the sound registers(Sound Init), and see if it&#039;s doing anything unusual at that point.&lt;br /&gt;
&lt;br /&gt;
Breaking on writes to $4000 - $400F will usually show you part of the Play routine. Using the &#039;Step Out&#039; option tends to help show the entry point into the routine.&lt;br /&gt;
&lt;br /&gt;
Discovering what part of memory changes to choose the next note is helpful in figuring out where the music init is. Breaking on writes to these addresses helps find the Song Init coding, either by visually dissecting the code, or by using Step Out to try to find a place to breakpoint, and change the A/X/Y registers, in hopes of choosing a different song, which will confirm that it&#039;s a Song Init routine.&lt;br /&gt;
&lt;br /&gt;
If you load an NSF, you can use the debugger to check for errors without much difficulty. You can also use a trick for debugging that lets you use verified Game memory to test the NSF for correct music information, and Play routine...&lt;br /&gt;
&lt;br /&gt;
Open any regular game rom, open the hex viewer, then open the NSF file you want with the Hex viewer open. Run another copy of FCEUXDSP, and load the rom of the game you&#039;re working on an NSF of. In the game window, open it&#039;s hex-editor window too. In the emulator with the game running, get some music going, and click-drag downward from 0x200 until you have 0x700 bytes selected, and copy the information to the clipboard. This skips 0x100, where the stack is stored. In the NSF-emulating window&#039;s hex editor, paste the info at 0x200, and see if the NSF plays the music correctly. If it does, you can narrow down the amount of info copied selectively, until you get the bit of information it needs to play, and find what routine needs to be adding this info to RAM. Some fixes can consist of a single byte of difference in RAM between the original, and the repaired version of an NSF. Note that this will require that the right banks be loaded, or it will fail outright. An inaccurate Play address can also result in a lack of sound.&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=CMGSCCC&amp;diff=1745</id>
		<title>CMGSCCC</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=CMGSCCC&amp;diff=1745"/>
		<updated>2007-02-27T19:18:19Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: /* GSCCC, Incorporated */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A GameShark code site started on September 23rd, 1996 by Code Master. After battles with many enemies, such as the Girl Scout Council of Colonial Coast and InterAct Accessories, the site was renamed from GameShark Code Creators Club to Game Software Code Creators Club. Code Master eventually changed his own name to CMX, presumably to make it seem as though he&#039;s more like DMX.&lt;br /&gt;
&lt;br /&gt;
At an unknown point, CMX accepted a position as Pelican&#039;s official code hacker and the site was converted over to being [[Code Breaker]] specific. Since then, the site has become heavily ad laden, requires becoming a member to view any codes, and has turned into a place to generally avoid. &lt;br /&gt;
&lt;br /&gt;
More recently, though reports indicate this has been going on for around a year, an Internet Explorer exploit known as &amp;quot;EXP/Agent.B&amp;quot; was installed on the forums. A topic about this was made [http://forums.cmgsccc.com/showthread.php?t=16224 here]. Another topic about this was posted on GSHI&#039;s forums here: [http://gshi.org/vb/showthread.php?t=2031 CMGSCCC is spreading malware]. It has also been noticed that there are popups containing pornography on the GSCCC forums as of late.&lt;br /&gt;
&lt;br /&gt;
== GSCCC, Incorporated ==&lt;br /&gt;
A domestic corporation in Waterloo, Illinois. The corporation is a &amp;quot;Single Owner Corporation,&amp;quot; in that all officers of the corporation are the same. As CMX refers to himself as the President of GSCCC, Incorporated, it appears his name is Bryan Black.&lt;br /&gt;
&lt;br /&gt;
From 2000 to 2005, the address of the corporation&#039;s registered agent was [http://maps.google.com/?q=5725%20Sportsman%20Rd%20Waterloo%20IL%2062298%20US 5725 Sportsman Rd, Waterloo IL 62298 US], which Mapquest high resolution imagery showed to be a farm house.&lt;br /&gt;
&lt;br /&gt;
From 2005 to 2006, the address of the corporation&#039;s registered agent was [http://maps.google.com/?q=411+Park+St,+Waterloo,+IL+62298&amp;amp;ie=UTF8&amp;amp;z=15&amp;amp;ll=38.333712,-90.154924&amp;amp;spn=0.015182,0.043259&amp;amp;om=1&amp;amp;iwloc=addr 411 Park Street Suite C, Waterloo, IL 62298], which is the PDQ Tax Service in Waterloo. &lt;br /&gt;
&lt;br /&gt;
The Illinois Secretary of State&#039;s website shows that GSCCC, Incorporated has never filed an annual report, and is a &amp;quot;corporation not in good standing,&amp;quot; indicating that the corporation is not legally allowed to conduct business under that name for failing to obey Illinois Statutes.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
[http://www.cmgsccc.com CMGSCCC.com]&lt;br /&gt;
&lt;br /&gt;
[http://web.archive.org/web/20010722015402/http://cmgsccc.com/ GSCCC index page as retrieved on 2001-07-22 by the Internet Archive]&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Code_Types&amp;diff=1729</id>
		<title>Code Types</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Code_Types&amp;diff=1729"/>
		<updated>2007-01-15T21:51:55Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: /* &amp;#039;&amp;#039;&amp;#039;Codebreaker Advance&amp;#039;&amp;#039;&amp;#039; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Explanation of what a code type is, and what they&#039;re used for here..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Playstation Systems&amp;lt;/font&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Playstation 2 ==&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Code Breaker&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;GameShark (Interact)&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;GameShark (Mad Catz)&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Xploder&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Playstation ==&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Gameshark&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
{| style=&amp;quot;border:1px solid #000000; margin: 0; padding:0;&amp;quot; width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&amp;quot;&lt;br /&gt;
! Type !! Description !! Example !! Other&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 30&lt;br /&gt;
| 8-bit constant write || 3XXXXXXX 00YY &amp;lt;br&amp;gt; Writes YY to Address XXXXXXX || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 80&lt;br /&gt;
| 16-bit constant write || 8XXXXXXX ZZYY &amp;lt;br&amp;gt; Writes ZZYY to Address XXXXXXX || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 50&lt;br /&gt;
| serial repeater || 5000XXYY 00ZZ &amp;lt;br&amp;gt; TTTTTTTT VVVV &amp;lt;br&amp;gt; Writes XX codes, with YY added to the address for each code after TTTTTTTT, and ZZZZ added to the amount for each code after value VVVV || Gameshark 2.2 and higher. May need to seperate pairs of serial codes with a 00000000 0000 code for disk-based gamesharks&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! E0&lt;br /&gt;
| 8-bit equal-to trigger || E0XXXXXX 00YY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is equal to YY ||  Gameshark 2.2 and higher.&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! E1&lt;br /&gt;
| 8-bit different-from trigger || E1XXXXXX 00YY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is different from YY ||  Gameshark 2.2(?) and higher.&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! E2&lt;br /&gt;
| 8-bit less-than trigger || E2XXXXXX 00YY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is less than YY ||  Gameshark 2.2 and higher.&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! E3&lt;br /&gt;
| 8-bit greater-than trigger || E3XXXXXX 00YY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is greater than YY || Gameshark 2.2 and higher.&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D0&lt;br /&gt;
| 16-bit equal-to trigger || D0XXXXXX YYYY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is equal to YYYY ||  NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D1&lt;br /&gt;
| 16-bit different-from trigger || D1XXXXXX YYYY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is different from YYYY ||  Gameshark 2.2 and higher.&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D2&lt;br /&gt;
| 16-bit less-than trigger || D2XXXXXX YYYY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is less than YYYY ||  Gameshark 2.2 and higher.&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D3&lt;br /&gt;
| 16-bit greater-than trigger || D3XXXXXX YYYY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is greater than YYYY ||  Gameshark 2.2 and higher.&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D4&lt;br /&gt;
| 16-bit universal joker || D4000000 YYYY &amp;lt;br&amp;gt; Activates next code if the button presses equate to YYYY || Gameshark 2.41 and higher. Needs a button chart&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D5&lt;br /&gt;
| 16-bit codes-on trigger || D5000000 YYYY &amp;lt;br&amp;gt; Activates all codes if buton presses equate to YYYY || Gameshark 2.41 and higher. Needs a button chart&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D6&lt;br /&gt;
| 16-bit codes-off trigger || D6000000 YYYY &amp;lt;br&amp;gt; Activates all codes if buton presses equate to YYYY || Gameshark 2.41 and higher. Needs a button chart&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 10&lt;br /&gt;
| 16-bit incrementer || 10XXXXXX YYYY &amp;lt;br&amp;gt; Increments value at address 80XXXXXX by YYYY || Gameshark 2.2 and higher. Use with a joker&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 11&lt;br /&gt;
| 16-bit decrementer || 11XXXXXX YYYY &amp;lt;br&amp;gt; Decrements value at address 80XXXXXX by YYYY || Gameshark 2.2 and higher. Use with a joker&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 20&lt;br /&gt;
| 8-bit incrementer || 20XXXXXX 00YY &amp;lt;br&amp;gt; Increments value at address 80XXXXXX by YY || Gameshark 2.2 and higher. Use with a joker&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 21&lt;br /&gt;
| 8-bit decrementer || 21XXXXXX 00YY &amp;lt;br&amp;gt; Decrements value at address 80XXXXXX by YY || Gameshark 2.2 and higher. Use with a joker&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! C0&lt;br /&gt;
| enable all codes trigger || C0XXXXXX YYYY &amp;lt;br&amp;gt; If value at address 80XXXXXX is equal to YYYY, enable all loaded codes in game. Affects all codes, not just the one this line is used in. || Gameshark 2.41 or higher.&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! C1&lt;br /&gt;
| codes-on delay || C1000000 YYYY &amp;lt;br&amp;gt; Delays codes from being on by YYYY time when game starts. 4000-5000 should give 20-30 seconds. || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! C2&lt;br /&gt;
| copy memory || C2XXXXXX YYYY &amp;lt;br&amp;gt; 80ZZZZZZ 0000 &amp;lt;br&amp;gt; Copy YYYY bytes from 80XXXXXX to 80ZZZZZZ. Could be used for copying large sets of complex character stats from one character to another, like working-magic-only, if serial repeater won&#039;t work || NA&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Xploder/Codebreaker&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
{| style=&amp;quot;border:1px solid #000000; margin: 0; padding:0;&amp;quot; width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&amp;quot;&lt;br /&gt;
! Type !! Description !! Example !! Other&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 30&lt;br /&gt;
| 8-bit constant write || 3XXXXXXX 00YY &amp;lt;br&amp;gt; Writes YY to Address XXXXXXX || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 80&lt;br /&gt;
| 16-bit constant write || 8XXXXXXX ZZYY &amp;lt;br&amp;gt; Writes ZZYY to Address XXXXXXX || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 70&lt;br /&gt;
| 16-bit equal-to trigger || 70XXXXXX YYYY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is equal to YYYY || NA&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Action Replay&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Gold Finger&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Caetla&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Nintendo Systems&amp;lt;/font&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== GameCube ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Action Replay&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Nintendo 64 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;GameShark&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== GameBoy Advance ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Codebreaker Advance&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
{| style=&amp;quot;border:1px solid #000000; margin: 0; padding:0;&amp;quot; width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&amp;quot;&lt;br /&gt;
! Type !! Description !! Example !! Other&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 0&lt;br /&gt;
| Master Code 1 || 0000XXXX YYYY &amp;lt;br&amp;gt; XXXX is the CRC value (the &amp;quot;Game ID&amp;quot; converted to hex) &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 || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 1&lt;br /&gt;
| Master Code 2 || 1XXXXXXX YYYZ &amp;lt;br&amp;gt; &#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 = ? || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 2&lt;br /&gt;
| 16-bit bitwise OR || 2XXXXXXX YYYY &amp;lt;br&amp;gt; XXXXXXX = Address &amp;lt;br&amp;gt; YYYY = Value to OR with || Tested on VBA, not tested on hardware&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 3&lt;br /&gt;
| 8-bit RAM Write || 3XXXXXXX 00YY &amp;lt;br&amp;gt; XXXXXXX = Address &amp;lt;br&amp;gt; YY = Value to write || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 4&lt;br /&gt;
| serial repeater || 4qqqqqqq xxyy &amp;lt;br&amp;gt; XXYY#### ++++ &amp;lt;br&amp;gt; qqqqqqq=Address to Start At &amp;lt;br&amp;gt; xxyy = Start Value &amp;lt;br&amp;gt; XXYY = Add To Value &amp;lt;br&amp;gt; #### = Number of Address Iterations &amp;lt;br&amp;gt; ++++ = Amount Added to each Address Iteration || XXYY portion tested in VBA, not tested on hardware&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 5&lt;br /&gt;
| Unknown || Unknown || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 6&lt;br /&gt;
| 16-bit bitwise AND || 6XXXXXXX YYYY &amp;lt;br&amp;gt; XXXXXXX = Address &amp;lt;br&amp;gt; YYYY = Value to AND with || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 7&lt;br /&gt;
| 16-bit equal-to trigger || 7XXXXXXX YYYY &amp;lt;br&amp;gt; Activates next code if address XXXXXXX is equal to YYYY ||  NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 8&lt;br /&gt;
| 16-bit RAM Write || 8XXXXXXX YYYY &amp;lt;br&amp;gt; XXXXXXX = Address &amp;lt;br&amp;gt; YYYY = Value to write || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 9&lt;br /&gt;
| Change Encryption Seeds (if used as first code) || 9YYYYYYY YYYY &amp;lt;br&amp;gt; Details not researched || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! A&lt;br /&gt;
| 16-bit not-equal-to trigger || AXXXXXXX YYYY &amp;lt;br&amp;gt; Activates next code if address XXXXXXX is not equal to YYYY || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! B&lt;br /&gt;
| Unknown || Unknown || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! C&lt;br /&gt;
| Unknown || Unknown || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D&lt;br /&gt;
| Unknown || Unknown || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! E&lt;br /&gt;
| Unknown || Unknown || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! F&lt;br /&gt;
| Unknown || Unknown || NA&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;GameShark Advance (Interact)&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;GameShark Advance (Mad Catz)&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Action Replay&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nintendo DS ==&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Codebreaker Advance&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Sega Systems&amp;lt;/font&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dreamcast ==&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;GameShark CDX&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Codebreaker&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Saturn ==&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;GameShark&#039;&#039;&#039;===&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=NSF&amp;diff=1695</id>
		<title>NSF</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=NSF&amp;diff=1695"/>
		<updated>2006-12-12T05:29:01Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The basic idea is one rips the music/sound code from an NES game and prepends a small header to the data.&lt;br /&gt;
&lt;br /&gt;
A program of some form (6502/sound emulator) then takes the data and loads it into the proper place into the 6502&#039;s address space, then inits and plays the tune.&lt;br /&gt;
&lt;br /&gt;
Many of the same methods used for finding cheat codes are compatible with finding sound information. The extra work of getting the right code into the right place and setting up the header is the primary difference between ripping and cheat making.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Header Overview ==&lt;br /&gt;
&lt;br /&gt;
 offset  # of bytes   Function&lt;br /&gt;
 ----------------------------&lt;br /&gt;
 0000    5   STRING  &amp;quot;NESM&amp;quot;,01Ah  ; denotes an NES sound format file&lt;br /&gt;
 0005    1   BYTE    Version number (currently 01h)&lt;br /&gt;
 0006    1   BYTE    Total songs   (1=1 song, 2=2 songs, etc)&lt;br /&gt;
 0007    1   BYTE    Starting song (1= 1st song, 2=2nd song, etc)&lt;br /&gt;
 0008    2   WORD    (lo/hi) load address of data (8000-FFFF)&lt;br /&gt;
 000a    2   WORD    (lo/hi) init address of data (8000-FFFF)&lt;br /&gt;
 000c    2   WORD    (lo/hi) play address of data (8000-FFFF)&lt;br /&gt;
 000e    32  STRING  The name of the song, null terminated&lt;br /&gt;
 002e    32  STRING  The artist, if known, null terminated&lt;br /&gt;
 004e    32  STRING  The Copyright holder, null terminated&lt;br /&gt;
 006e    2   WORD    (lo/hi) speed, in 1/1000000th sec ticks, NTSC (see text)&lt;br /&gt;
 0070    8   BYTE    Bankswitch Init Values (see text, and FDS section)&lt;br /&gt;
 0078    2   WORD    (lo/hi) speed, in 1/1000000th sec ticks, PAL (see text)&lt;br /&gt;
 007a    1   BYTE    PAL/NTSC bits:&lt;br /&gt;
                 bit 0: if clear, this is an NTSC tune&lt;br /&gt;
                 bit 0: if set, this is a PAL tune&lt;br /&gt;
                 bit 1: if set, this is a dual PAL/NTSC tune&lt;br /&gt;
                 bits 2-7: not used. they *must* be 0&lt;br /&gt;
 007b    1   BYTE    Extra Sound Chip Support&lt;br /&gt;
                 bit 0: if set, this song uses VRCVI&lt;br /&gt;
                 bit 1: if set, this song uses VRCVII&lt;br /&gt;
                 bit 2: if set, this song uses FDS Sound&lt;br /&gt;
                 bit 3: if set, this song uses MMC5 audio&lt;br /&gt;
                 bit 4: if set, this song uses Namco 106&lt;br /&gt;
                 bit 5: if set, this song uses Sunsoft FME-07&lt;br /&gt;
                 bits 6,7: future expansion: they *must* be 0&lt;br /&gt;
 007c    4   ----    4 extra bytes for expansion (must be 00h)&lt;br /&gt;
 0080    nnn ----    The music program/data follows&lt;br /&gt;
&lt;br /&gt;
This may look somewhat familiar;  if so that&#039;s because this is somewhat sorta of based on the PSID file format for C64 music/sound.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Loading a tune into RAM ==&lt;br /&gt;
&lt;br /&gt;
If offsets 0070h to 0077h have 00h in them, then bankswitching is *not* used.  If one or more bytes are something other than 00h then bankswitching is used.  If bankswitching is used then the load address is still used, but you now use (ADDRESS AND 0FFFh) to determine where on the first bank to load the data.&lt;br /&gt;
&lt;br /&gt;
Each bank is 4K in size, and that means there are 8 of them for the&lt;br /&gt;
entire 08000h-0ffffh range in the 6502&#039;s address space.  You determine where in memory the data goes by setting bytes 070h thru 077h in the file. These determine the inital bank values that will be used, and hence where the data will be loaded into the address space.&lt;br /&gt;
&lt;br /&gt;
Here&#039;s an example:&lt;br /&gt;
&lt;br /&gt;
METROID.NSF will be used for the following explaination.&lt;br /&gt;
&lt;br /&gt;
 The file is set up like so:  (starting at 070h in the file)&lt;br /&gt;
 &lt;br /&gt;
 0070: 05 05 05 05 05 05 05 05 - 00 00 00 00 00 00 00 00&lt;br /&gt;
 0080: ... music data goes here...&lt;br /&gt;
&lt;br /&gt;
Since 0070h-0077h are something other than 00h, then we know that this tune uses bankswitching.  The load address for the data is specified as 08000h.  We take this AND 0fffh and get 0000h, so we will load data in at byte 0 of bank 0, since data is loaded into the banks sequentially starting from bank 0 up until the music data is fully loaded.&lt;br /&gt;
&lt;br /&gt;
Metroid has 6 4K banks in it, numbered 0 through 5.  The 6502&#039;s address space has 8 4K bankswitchable blocks on it, starting at 08000h-08fffh, 09000h-09fffh, 0a000h-0afffh ... 0f000h-0ffffh.  Each one of these is 4K in size, and the current bank is controlled by writes to 05ff8h thru 05fffh, one byte per bank.  So, 05ff8h controls the 08000h-08fffh range, 05ff9h controls the 09000h-09fffh range, etc. up to 05fffh which controls the 0f000h-0ffffh range.  When the song is loaded into RAM, it is loaded into the banks and not the 6502&#039;s address space.  Once this is done, then the bank control registers are written to set up the inital bank values. To do this, the value at 0070h in the file is written to 05ff8h, 0071h&lt;br /&gt;
is written to 05ff9h, etc. all the way to 0077h is written to 05fffh.&lt;br /&gt;
This is should be done before every call to the init routine.&lt;br /&gt;
&lt;br /&gt;
If the tune was not bankswitched, then it is simply loaded in at the &lt;br /&gt;
specified load address, until EOF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Initalizing a tune ==&lt;br /&gt;
&lt;br /&gt;
This is pretty simple.  Load the desired song # into the accumulator,&lt;br /&gt;
minus 1 and set the X register to specify PAL (X=1) or NTSC (X=0).&lt;br /&gt;
If this is a single standard tune (i.e. PAL *or* NTSC but not both)&lt;br /&gt;
then the X register contents should not matter.  Once the song # and&lt;br /&gt;
optional PAL/NTSC standard are loaded, simply call the INIT address.&lt;br /&gt;
Once init is done, it should perform an RTS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Playing a tune ==&lt;br /&gt;
&lt;br /&gt;
Once the tune has been initalized, it can now be played.  To do this,&lt;br /&gt;
simply call the play address several times a second.  How many times&lt;br /&gt;
per second is determined by offsets 006eh and 006fh in the file.&lt;br /&gt;
These bytes denote the speed of playback in 1/1000000ths of a second. &lt;br /&gt;
For the &amp;quot;usual&amp;quot; 60Hz playback rate, set this to 411ah.  &lt;br /&gt;
&lt;br /&gt;
To generate a differing playback rate, use this formula:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
          1000000&lt;br /&gt;
 PBRATE= ---------&lt;br /&gt;
           speed&lt;br /&gt;
&lt;br /&gt;
Where PBRATE is the value you stick into 006e/006fh in the file, and&lt;br /&gt;
speed is the desired speed in hertz. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Properly Loading a Tune ==&lt;br /&gt;
&lt;br /&gt;
* If the tune is bankswitched, go to #3.&lt;br /&gt;
&lt;br /&gt;
* Load the data into the 6502&#039;s address space starting at the specified load address. Go to #4.&lt;br /&gt;
&lt;br /&gt;
* Load the data into a RAM area, starting at (start_address AND 0fffh).&lt;br /&gt;
&lt;br /&gt;
* Tune load is done.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Properly Initializing a Tune ==&lt;br /&gt;
&lt;br /&gt;
* Clear all RAM at 0000h-07ffh.&lt;br /&gt;
&lt;br /&gt;
* Clear all RAM at 6000h-7fffh.&lt;br /&gt;
&lt;br /&gt;
* Init the sound registers by writing 00h to 04000-0400Fh, 10h to 4010h, and 00h to 4011h-4013h.&lt;br /&gt;
&lt;br /&gt;
* Set volume register 04015h to 00fh.&lt;br /&gt;
&lt;br /&gt;
* If this is a banked tune, load the bank values from the header into 5ff8-5fffh.&lt;br /&gt;
&lt;br /&gt;
* Set the accumulator and X registers for the desired song.&lt;br /&gt;
&lt;br /&gt;
* Call the music init routine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Properly Playing a Tune ==&lt;br /&gt;
&lt;br /&gt;
Call the play address of the music at periodic intervals determined by the speed words.  Which word to use is determined by which mode you are in- PAL or NTSC.&lt;br /&gt;
&lt;br /&gt;
== Adding DPCM ==&lt;br /&gt;
There is a large section on how to deal with DPCM samples in the [http://www.zophar.net/tech/files/NESAudioRipping.TXT NES Music Ripping Guide], but the basic information on DPCM is that writes to $4012 and $4013 access sample data stored at and between $c000 and $ffff.&lt;br /&gt;
&lt;br /&gt;
Writes to $4012 determine the location of the sample data. The value written to $4012, multiplied by 0040h, plus 0c000h, is the point in ROM space the sample starts.&lt;br /&gt;
&lt;br /&gt;
Writes to $4013 determine the length of the sample data. The value written to $4013, multiplied by 0010h, plus 1, is the length of the sample data.&lt;br /&gt;
&lt;br /&gt;
If 00h is written to $4012 and $4013, the sample would be located at $c000, and would be 1 byte in length. If 0080h is written to $4012 and $4013, the sample would be located at $e000, and would be 0x801 bytes in length.&lt;br /&gt;
&lt;br /&gt;
DPCM samples can be attached to an NSF by either relocating the neccesary data, or by including the banks with the DPCM data in the NSF. Relocating the data correctly will often lead to a smaller file size, but including the original data in it&#039;s original location is usually easier to do.&lt;br /&gt;
&lt;br /&gt;
== Sound Chip Support ==&lt;br /&gt;
Byte 007bh of the file stores the sound chip flags.  If a particular flag is set, those sound registers should be enabled.  If the flag is clear, then those registers should be disabled. All I/O registers within 8000-FFFF are &#039;&#039;write only&#039;&#039; and must not disrupt music code that happens to be stored there.&lt;br /&gt;
&lt;br /&gt;
=== VRCVI ===&lt;br /&gt;
* Uses registers 9000-9002, A000-A002, and B000-B002, write only. See [[VRC6 Audio]] for more information.&lt;br /&gt;
* Note: The A0 and A1 lines are flipped on a few games! If you rip the music and it sounds all funny, flip around  the xxx1 and xxx2 register pairs.  (i.e. 9001 and 9002)  9000 and 9003 can be left untouched.  I decided to do this since it  would make things easier all around, and this means you only will have to change the music code in a very few places (6).  Esper2 and Madara will need this change, while Castlevania 3j will not for instance.&lt;br /&gt;
&lt;br /&gt;
=== VRCVII ===&lt;br /&gt;
* Uses registers 9010 and 9030, write only. See [[VRC7 Audio]] for more information.&lt;br /&gt;
&lt;br /&gt;
=== FDS Sound ===&lt;br /&gt;
* Uses registers from 4040 through 4092. See [[FDS Audio]] for more information.&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* 6000-DFFF is assumed to be RAM, since 6000-DFFF is RAM on the FDS.  E000-FFFF is usually not included in FDS games because it is the BIOS ROM.  However, it can be used on FDS rips to help the ripper (for modified play/init addresses).&lt;br /&gt;
* Bankswitching operates slightly different on FDS tunes.  5FF6 and 5FF7 control the banks 6000-6FFF and 7000-7FFF respectively.  NSF header offsets 76h and 77h correspond to *both* 6000-7FFF *AND* E000-FFFF.  Keep this in mind!&lt;br /&gt;
&lt;br /&gt;
=== MMC5 Sound ===&lt;br /&gt;
* Uses registers 5000-5015, write only as well as 5205 and 5206, and 5C00-5FF5. see [[MMC5 Audio]] for more information.&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* 5205 and 5206 are a hardware 8*8 multiplier.  The idea being you write your two bytes to be multiplied into 5205 and 5206 and after doing so, you read the result back out.&lt;br /&gt;
* 5C00-5FF5 should be RAM to emulate EXRAM while in MMC5 mode.&lt;br /&gt;
&lt;br /&gt;
=== Namco 106 Sound ===&lt;br /&gt;
* Uses registers 4800 and F800. See [[Namco 106 Audio]] for more information.&lt;br /&gt;
&lt;br /&gt;
=== Sunsoft FME-07 Sound ===&lt;br /&gt;
* Uses registers C000 and E000. See [[Sunsoft Audio]] for more information.&lt;br /&gt;
&lt;br /&gt;
== Caveats ==&lt;br /&gt;
# The starting song number and maximum song numbers start counting at 1, while the init address of the tune starts counting at 0.  To &amp;quot;fix&amp;quot;, simply pass the desired song number minus 1 to the init routine.&lt;br /&gt;
# The NTSC speed word is used *only* for NTSC tunes, or dual PAL/NTSC tunes. The PAL speed word is used *only* for PAL tunes, or dual PAL/NTSC tunes.&lt;br /&gt;
# The length of the text in the name, artist, and copyright fields must be 31 characters or less!  There has to be at least a single NULL byte (00h) after the text, between fields.&lt;br /&gt;
# If a field is not known (name, artist, copyright) then the field must contain the string &amp;quot;&amp;lt;?&amp;gt;&amp;quot; (without quotes).  &lt;br /&gt;
# There should be 8K of RAM present at 6000-7FFFh. MMC5 tunes need RAM at 5C00-5FF7 to emulate its EXRAM. 8000-FFFF should be read-only (not writable) after a tune has loaded.  The only time this area should be writable is if an FDS tune is being played.&lt;br /&gt;
# Do not assume the state of *anything* on entry to the init routine except A and X.  Y can be anything, as can the flags.  &lt;br /&gt;
# Do not assume the state of *anything* on entry to the play routine either. Flags, X, A, and Y could be at any state.  I&#039;ve fixed about 10 tunes because of this problem and the problem, above.&lt;br /&gt;
# The stack sits at 1FFh and grows down.  Make sure the tune does not attempt to use 1F0h-1FFh for variables. (Armed Dragon Villigust did and I had to relocate its RAM usage to 2xx)&lt;br /&gt;
# Variables should sit in the 0000h-07FFh area *only*.  If the tune writes outside this range, say 1400h this is bad and should be relocated. (Terminator 3 did this and I relocated it to 04xx).&lt;br /&gt;
&lt;br /&gt;
== Using FCEUXDSP ==&lt;br /&gt;
Ripping can be made much easier by using this relatively new NES debugging emulator.&lt;br /&gt;
&lt;br /&gt;
By breakpointing writes to $4015, then resetting the game, you can often find the part of code that initializes the sound registers(Sound Init), and see if it&#039;s doing anything unusual at that point.&lt;br /&gt;
&lt;br /&gt;
Breaking on writes to $4000 - $400F will usually show you part of the Play routine. Using the &#039;Step Out&#039; option tends to help show the entry point into the routine.&lt;br /&gt;
&lt;br /&gt;
Discovering what part of memory changes to choose the next note is helpful in figuring out where the music init is. Breaking on writes to these addresses helps find the Song Init coding, either by visually disecting the code, or by using Step Out to try to find a place to breakpoint, and change the A/X/Y registers, in hopes of choosing a different song, which will confirm that it&#039;s a Song Init routine.&lt;br /&gt;
&lt;br /&gt;
If you load an NSF, you can use the debugger to check for errors without much difficulty. You can also use a trick for debugging that lets you use verified Game memory to test the NSF for correct music information, and Play routine...&lt;br /&gt;
&lt;br /&gt;
Open a regular game rom, and open the hex viewer, then open the NSF file you want with the Hex viewer open. Run another copy of FCEUXDSP, and load the rom of the game you&#039;re working on an NSF of. In the other copy, open it&#039;s hex-editor window too. In the emulator with the game running, get some music going, and click-drag downward from 0x200 until you have 0x700 bytes selected, and copy the information to the clipboard. This skips 0x100, where the stack is stored. In the NSF-emulating window&#039;s hex editor, paste the info at 0x200, and see if the NSF plays the music correctly. If it does, you can narrow down the amount of info copied selectively, until you get the bit of information it needs to play, and find what routine needs to be adding this info to RAM. Some fixed can consist of a single byte of difference in RAM between the original, and the repaired version of an NSF.&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Code_Types&amp;diff=1694</id>
		<title>Code Types</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Code_Types&amp;diff=1694"/>
		<updated>2006-12-11T23:38:42Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Explanation of what a code type is, and what they&#039;re used for here..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Playstation Systems&amp;lt;/font&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Playstation 2 ==&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Code Breaker&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;GameShark (Interact)&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;GameShark (Mad Catz)&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Xploder&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Playstation ==&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Gameshark&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
{| style=&amp;quot;border:1px solid #000000; margin: 0; padding:0;&amp;quot; width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&amp;quot;&lt;br /&gt;
! Type !! Description !! Example !! Other&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 30&lt;br /&gt;
| 8-bit constant write || 3XXXXXXX 00YY &amp;lt;br&amp;gt; Writes YY to Address XXXXXXX || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 80&lt;br /&gt;
| 16-bit constant write || 8XXXXXXX ZZYY &amp;lt;br&amp;gt; Writes ZZYY to Address XXXXXXX || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 50&lt;br /&gt;
| serial repeater || 5000XXYY 00ZZ &amp;lt;br&amp;gt; TTTTTTTT VVVV &amp;lt;br&amp;gt; Writes XX codes, with YY added to the address for each code after TTTTTTTT, and ZZZZ added to the amount for each code after value VVVV || Gameshark 2.2 and higher. May need to seperate pairs of serial codes with a 00000000 0000 code for disk-based gamesharks&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! E0&lt;br /&gt;
| 8-bit equal-to trigger || E0XXXXXX 00YY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is equal to YY ||  Gameshark 2.2 and higher.&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! E1&lt;br /&gt;
| 8-bit different-from trigger || E1XXXXXX 00YY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is different from YY ||  Gameshark 2.2(?) and higher.&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! E2&lt;br /&gt;
| 8-bit less-than trigger || E2XXXXXX 00YY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is less than YY ||  Gameshark 2.2 and higher.&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! E3&lt;br /&gt;
| 8-bit greater-than trigger || E3XXXXXX 00YY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is greater than YY || Gameshark 2.2 and higher.&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D0&lt;br /&gt;
| 16-bit equal-to trigger || D0XXXXXX YYYY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is equal to YYYY ||  NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D1&lt;br /&gt;
| 16-bit different-from trigger || D1XXXXXX YYYY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is different from YYYY ||  Gameshark 2.2 and higher.&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D2&lt;br /&gt;
| 16-bit less-than trigger || D2XXXXXX YYYY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is less than YYYY ||  Gameshark 2.2 and higher.&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D3&lt;br /&gt;
| 16-bit greater-than trigger || D3XXXXXX YYYY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is greater than YYYY ||  Gameshark 2.2 and higher.&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D4&lt;br /&gt;
| 16-bit universal joker || D4000000 YYYY &amp;lt;br&amp;gt; Activates next code if the button presses equate to YYYY || Gameshark 2.41 and higher. Needs a button chart&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D5&lt;br /&gt;
| 16-bit codes-on trigger || D5000000 YYYY &amp;lt;br&amp;gt; Activates all codes if buton presses equate to YYYY || Gameshark 2.41 and higher. Needs a button chart&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D6&lt;br /&gt;
| 16-bit codes-off trigger || D6000000 YYYY &amp;lt;br&amp;gt; Activates all codes if buton presses equate to YYYY || Gameshark 2.41 and higher. Needs a button chart&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 10&lt;br /&gt;
| 16-bit incrementer || 10XXXXXX YYYY &amp;lt;br&amp;gt; Increments value at address 80XXXXXX by YYYY || Gameshark 2.2 and higher. Use with a joker&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 11&lt;br /&gt;
| 16-bit decrementer || 11XXXXXX YYYY &amp;lt;br&amp;gt; Decrements value at address 80XXXXXX by YYYY || Gameshark 2.2 and higher. Use with a joker&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 20&lt;br /&gt;
| 8-bit incrementer || 20XXXXXX 00YY &amp;lt;br&amp;gt; Increments value at address 80XXXXXX by YY || Gameshark 2.2 and higher. Use with a joker&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 21&lt;br /&gt;
| 8-bit decrementer || 21XXXXXX 00YY &amp;lt;br&amp;gt; Decrements value at address 80XXXXXX by YY || Gameshark 2.2 and higher. Use with a joker&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! C0&lt;br /&gt;
| enable all codes trigger || C0XXXXXX YYYY &amp;lt;br&amp;gt; If value at address 80XXXXXX is equal to YYYY, enable all loaded codes in game. Affects all codes, not just the one this line is used in. || Gameshark 2.41 or higher.&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! C1&lt;br /&gt;
| codes-on delay || C1000000 YYYY &amp;lt;br&amp;gt; Delays codes from being on by YYYY time when game starts. 4000-5000 should give 20-30 seconds. || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! C2&lt;br /&gt;
| copy memory || C2XXXXXX YYYY &amp;lt;br&amp;gt; 80ZZZZZZ 0000 &amp;lt;br&amp;gt; Copy YYYY bytes from 80XXXXXX to 80ZZZZZZ. Could be used for copying large sets of complex character stats from one character to another, like working-magic-only, if serial repeater won&#039;t work || NA&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Xploder/Codebreaker&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
{| style=&amp;quot;border:1px solid #000000; margin: 0; padding:0;&amp;quot; width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&amp;quot;&lt;br /&gt;
! Type !! Description !! Example !! Other&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 30&lt;br /&gt;
| 8-bit constant write || 3XXXXXXX 00YY &amp;lt;br&amp;gt; Writes YY to Address XXXXXXX || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#d0d8e0; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 80&lt;br /&gt;
| 16-bit constant write || 8XXXXXXX ZZYY &amp;lt;br&amp;gt; Writes ZZYY to Address XXXXXXX || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#cedff2; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 70&lt;br /&gt;
| 16-bit equal-to trigger || 70XXXXXX YYYY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is equal to YYYY || NA&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Action Replay&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Gold Finger&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Caetla&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Nintendo Systems&amp;lt;/font&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== GameCube ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Action Replay&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Nintendo 64 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;GameShark&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== GameBoy Advance ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Codebreaker Advance&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;GameShark Advance (Interact)&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;GameShark Advance (Mad Catz)&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Action Replay&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nintendo DS ==&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Codebreaker Advance&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Sega Systems&amp;lt;/font&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dreamcast ==&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;GameShark CDX&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Codebreaker&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Saturn ==&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;GameShark&#039;&#039;&#039;===&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Caetla&amp;diff=1693</id>
		<title>Caetla</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Caetla&amp;diff=1693"/>
		<updated>2006-12-11T23:35:35Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: Reverted edits by Goquendo (Talk); changed back to last version by LiquidManZero&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Originally produced by kcomm for use as a development tool, it was soon leaked onto the internet. Later versions had a massive flaw in that they stored codes on a special memory card file. The problem with this is that the program to create the file seems not to exist.&lt;br /&gt;
&lt;br /&gt;
Most versions of Caetla could be used to run out of region and pirated discs on an unmodified playstation.&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Game_Enhancer&amp;diff=1671</id>
		<title>Game Enhancer</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Game_Enhancer&amp;diff=1671"/>
		<updated>2006-12-09T04:30:31Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A game enhancer is a device, usually a cartridge or a CD/DVD, which is used for altering a games memory, which allows access to hidden content or typical cheats.&lt;br /&gt;
&lt;br /&gt;
== List of Game Enhancers ==&lt;br /&gt;
[[Action Replay]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Caetla]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Codebreaker]]&amp;lt;Br&amp;gt;&lt;br /&gt;
[[Game Genie]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Gameshark]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Gold Finger]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Xploder]]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Unhacked:_Playstation&amp;diff=1665</id>
		<title>Unhacked: Playstation</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Unhacked:_Playstation&amp;diff=1665"/>
		<updated>2006-12-07T18:08:22Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ Unhacked PlayStation Games&lt;br /&gt;
! Game !! License Code(s) !! Hacker(s) attempting hacks !! Attempt start date&lt;br /&gt;
|-&lt;br /&gt;
! Activision Classics&lt;br /&gt;
| SLUS-00777&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! [[Chronicles of the Sword]]&lt;br /&gt;
| SCUS-94700&lt;br /&gt;
SCUS-94701&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! Nova Storm&lt;br /&gt;
| SCUS-94404&lt;br /&gt;
SCUS-94707&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! Pshychic Detective&lt;br /&gt;
| SLUS-00165-7&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! Zoop&lt;br /&gt;
| SLUS-00078&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Related ==&lt;br /&gt;
*[[Unhacked: Index|Unhacked Games Index]]&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=SA1&amp;diff=1660</id>
		<title>SA1</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=SA1&amp;diff=1660"/>
		<updated>2006-12-06T22:26:05Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
The SNES SA1 chip is an expansion chip added to an SNES cart that both contains a portion of the game&#039;s coding, and executes that portion of code to affect normal SNES RAM, and the additional RAM accessed primarily by the SA1 chip programming. The additional RAM is also accessible by the SNES CPU&#039;s instructions.&lt;br /&gt;
&lt;br /&gt;
There is no current information concerning hardware-based tests with Game Genie codes that change portions of ROM residing within the SA1.&lt;br /&gt;
&lt;br /&gt;
== Memory Mapping Comparison ==&lt;br /&gt;
Region 30:0000 - 30:3FFF is SA1 related due to the fact that some RAM is 00 mapped for SA1-using games:&lt;br /&gt;
&lt;br /&gt;
Writes from the SNES CPU to 00:0000 - 00:3FFF region to change a mirrored region at 30:0000 - 30:3FFF region&lt;br /&gt;
&lt;br /&gt;
00:0000 - 00:3FFF&amp;lt;br&amp;gt;&lt;br /&gt;
30:0000 - 30:3FFF&lt;br /&gt;
&lt;br /&gt;
SA1 Address:&lt;br /&gt;
Reads/Writes to these addresses from the SA1 CPU translate to the below CPU-accessible addresses in SNES memory&amp;lt;br&amp;gt;&lt;br /&gt;
00:4000 - 00:7FFF&amp;lt;br&amp;gt;&lt;br /&gt;
CPU Address:&amp;lt;br&amp;gt;&lt;br /&gt;
40:0000 - 40:3FFF&lt;br /&gt;
&lt;br /&gt;
SA1 Address Testing:&amp;lt;br&amp;gt;&lt;br /&gt;
If you wish to test writes made by the SA1 to memory, and see what area is changed, you can use the following code with Super Mario RPG (US), while in a 3D stage. You should fall through the ground, and be unaligned with the map, but have the value FE written to the address you chose.&lt;br /&gt;
&lt;br /&gt;
Test SA1 Memory Writes (2 byte addresses, 0xFE written)&amp;lt;br&amp;gt;&lt;br /&gt;
C9C374A9&amp;lt;br&amp;gt;&lt;br /&gt;
C9C375FE&amp;lt;br&amp;gt;&lt;br /&gt;
C9C378FF&amp;lt;br&amp;gt;&lt;br /&gt;
C9C3793F&lt;br /&gt;
&lt;br /&gt;
Load value 0x00FE to write(could be made to load a 2-byte value)&amp;lt;br&amp;gt;&lt;br /&gt;
C9C374A9&amp;lt;br&amp;gt;&lt;br /&gt;
C9C375FE&lt;br /&gt;
&lt;br /&gt;
Address to write to(Writes to 3FFF with these values)&amp;lt;br&amp;gt;&lt;br /&gt;
C9C378FF&amp;lt;br&amp;gt;&lt;br /&gt;
C9C3793F&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Main_Page&amp;diff=1538</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Main_Page&amp;diff=1538"/>
		<updated>2006-12-01T17:57:08Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please follow the [[GSHI:Guidelines]] when contributing to the wiki&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Game Systems Headquarters International&amp;lt;/H1&amp;gt;&lt;br /&gt;
{| style=&amp;quot;border:1px solid #aaaaaa; margin: 0; padding:0;&amp;quot; width=&amp;quot;25%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;right&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; style=&amp;quot;font-size: 105%; background-color:#98FB98; border-bottom:1px solid #aaaaaa; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Featured Page&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background:#ffffff; padding:0.2em 0.4em 0.2em 0.4em; text-align: center;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Assembly Hacking]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;blockquote&amp;gt;GSHI is a longstanding collaborative group of code hackers, who have contributed many, many codes to the scene, for such cheat systems as Gameshark, Action Replay, CodeBreaker, and Game Genie. The website and forums were started by and are currently coadministrated by the member who calls himself Lazy Bastard. Many people who use these cheat systems and devices are unaware that the companies who manufacture and market them use websites and communities such as GSHI to produce and distribute the codes that cause them to be as popular as they are. &amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;The website is located here: http://www.gshi.org&amp;lt;BR&amp;gt;The community itself gathers at the website&#039;s home forums, located here: http://www.gshi.org/vb/&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{| style=&amp;quot;border:1px solid #aaaaaa; margin: 0; padding:0;&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;right&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; style=&amp;quot;font-size: 105%; background-color:#FFDEAD; border-bottom:1px solid #aaaaaa; text-align: center; padding:0;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Pages that need information&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background:#ffffff; padding:0.2em 0.4em 0.2em 0.4em;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* [[GSHI]]&lt;br /&gt;
* [[Code Types]]&lt;br /&gt;
* [[Game Genie]]&lt;br /&gt;
* [[Action Replay]]&lt;br /&gt;
* [[Codebreaker]]&lt;br /&gt;
* [[Gameshark]]&lt;br /&gt;
* [[Xploder]]&lt;br /&gt;
* [[GCNrd]]&lt;br /&gt;
* [[CMGSCCC]]&lt;br /&gt;
* [[GSCentral]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Help:Contents&amp;diff=1536</id>
		<title>Help:Contents</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Help:Contents&amp;diff=1536"/>
		<updated>2006-12-01T03:40:44Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A basic statement concerning why this wiki exists, and how it was intended to be used can be found here:&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.gshi.org/wiki/index.php/GSHI:Guidelines&lt;br /&gt;
&lt;br /&gt;
Several good explainations on how to effectively edit pages can be found here:&amp;lt;br&amp;gt;&lt;br /&gt;
http://en.wikipedia.org/wiki/Help:Contents/Editing_Wikipedia&lt;br /&gt;
&lt;br /&gt;
If you wish to experiment, you are free to use your own user page to test editing methods. Using the preview button when testing changes to your own page and wiki articles will help prevent the need to edit pages multiple times to fix errors you make.&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Wiki_-_GameHacking.org:Guidelines&amp;diff=1535</id>
		<title>Wiki - GameHacking.org:Guidelines</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Wiki_-_GameHacking.org:Guidelines&amp;diff=1535"/>
		<updated>2006-12-01T03:33:28Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The primary guidelines for using this wiki are that you should be providing information relavent to hacking, discussing said content, or simply viewing the content available.&lt;br /&gt;
&lt;br /&gt;
This wiki is not a forum, and wasn&#039;t intended to be. Discussions that are limited to users&#039; personal pages aren&#039;t strictly required to follow an orientation towards hacking, but are required to be civil.&lt;br /&gt;
&lt;br /&gt;
I believe that the topic shown at wikipedia concerning their view of civility will suffice if you&#039;ve never recognized civil behavior for yourself, or find the meaning unclear:&amp;lt;br&amp;gt;&lt;br /&gt;
[http://en.wikipedia.org/wiki/WP:CIV Civility]&lt;br /&gt;
&lt;br /&gt;
Other wikipedia standards may be adopted in the future, if problems in comprehension arise.&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=User_talk:Lemmayoshi&amp;diff=1534</id>
		<title>User talk:Lemmayoshi</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=User_talk:Lemmayoshi&amp;diff=1534"/>
		<updated>2006-12-01T02:38:40Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Leave the insults to The Pit in the forums.&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Main_Page&amp;diff=1521</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Main_Page&amp;diff=1521"/>
		<updated>2006-11-30T22:09:03Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;H1&amp;gt;Game Systems Headquarters International&amp;lt;/H1&amp;gt;&lt;br /&gt;
{| style=&amp;quot;border:1px solid #aaaaaa; margin: 0; padding:0;&amp;quot; width=&amp;quot;25%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;right&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; style=&amp;quot;font-size: 105%; background-color:#98FB98; border-bottom:1px solid #aaaaaa; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Featured Page&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background:#ffffff; padding:0.2em 0.4em 0.2em 0.4em; text-align: center;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Assembly Hacking]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;blockquote&amp;gt;GSHI is a longstanding collaborative group of code hackers, who have contributed many, many codes to the scene, for such cheat systems as Gameshark, Action Replay, CodeBreaker, and Game Genie. The website and forums were started by and are currently coadministrated by the member who calls himself Lazy Bastard. Many people who use these cheat systems and devices are unaware that the companies who manufacture and market them use websites and communities such as GSHI to produce and distribute the codes that cause them to be as popular as they are. &amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;The website is located here: http://www.gshi.org&amp;lt;BR&amp;gt;The community itself gathers at the website&#039;s home forums, located here: http://www.gshi.org/vb/&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{| style=&amp;quot;border:1px solid #aaaaaa; margin: 0; padding:0;&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;right&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; style=&amp;quot;font-size: 105%; background-color:#FFDEAD; border-bottom:1px solid #aaaaaa; text-align: center; padding:0;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Pages that need information&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background:#ffffff; padding:0.2em 0.4em 0.2em 0.4em;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* [[GSHI]]&lt;br /&gt;
* [[Code Types]]&lt;br /&gt;
* [[Game Genie]]&lt;br /&gt;
* [[Action Replay]]&lt;br /&gt;
* [[Codebreaker]]&lt;br /&gt;
* [[Gameshark]]&lt;br /&gt;
* [[Xploder]]&lt;br /&gt;
* [[GCNrd]]&lt;br /&gt;
* [[CMGSCCC]]&lt;br /&gt;
* [[GSCentral]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Game_Genie&amp;diff=1519</id>
		<title>Game Genie</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Game_Genie&amp;diff=1519"/>
		<updated>2006-11-30T22:08:30Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: Game genie moved to Game Genie&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Game Genie starter page.&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Code_Types&amp;diff=1518</id>
		<title>Code Types</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Code_Types&amp;diff=1518"/>
		<updated>2006-11-30T21:59:42Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Explanation of what a code type is, and what they&#039;re used for here..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Playstation Systems&amp;lt;/font&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Playstation 2 ==&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Code Breaker&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;GameShark (Interact)&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;GameShark (Mad Catz)&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Xploder&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Playstation ==&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Gameshark&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
{| style=&amp;quot;border:1px solid #000000; margin: 0; padding:0;&amp;quot; width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&amp;quot;&lt;br /&gt;
! Type !! Description !! Example !! Other&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ccffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 30&lt;br /&gt;
| 8-bit constant write || 3XXXXXXX 00YY &amp;lt;br&amp;gt; Writes YY to Address XXXXXXX || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ffffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 80&lt;br /&gt;
| 16-bit constant write || 8XXXXXXX ZZYY &amp;lt;br&amp;gt; Writes ZZYY to Address XXXXXXX || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ccffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 50&lt;br /&gt;
| serial repeater || 5000XXYY 00ZZ &amp;lt;br&amp;gt; TTTTTTTT VVVV &amp;lt;br&amp;gt; Writes XX codes, with YY added to the address for each code after TTTTTTTT, and ZZZZ added to the amount for each code after value VVVV || Gameshark 2.41 and higher. May need to seperate pairs of serial codes with a 00000000 0000 code for disk-based gamesharks&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ffffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! E0&lt;br /&gt;
| 8-bit equal-to joker || E0XXXXXX 00YY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is equal to YY || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ccffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! E1&lt;br /&gt;
| 8-bit different-from joker || E1XXXXXX 00YY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is different from YY || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ffffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! E2&lt;br /&gt;
| 8-bit less-than joker || E2XXXXXX 00YY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is less than YY || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ccffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! E3&lt;br /&gt;
| 8-bit greater-than joker || E3XXXXXX 00YY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is greater than YY || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ffffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D0&lt;br /&gt;
| 16-bit equal-to joker || D0XXXXXX YYYY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is equal to YYYY || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ccffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D1&lt;br /&gt;
| 16-bit different-from joker || D1XXXXXX YYYY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is different from YYYY || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ffffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D2&lt;br /&gt;
| 16-bit less-than joker || D2XXXXXX YYYY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is less than YYYY || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ccffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D3&lt;br /&gt;
| 16-bit greater-than joker || D3XXXXXX YYYY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is greater than YYYY || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ffffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D4&lt;br /&gt;
| 16-bit universal joker || D4000000 YYYY &amp;lt;br&amp;gt; Activates next code if the button presses equate to YYYY || Needs a button chart&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ccffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D5&lt;br /&gt;
| 16-bit codes-on joker || D5000000 YYYY &amp;lt;br&amp;gt; Activates all codes if buton presses equate to YYYY || Needs a button chart&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ffffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D6&lt;br /&gt;
| 16-bit codes-off joker || D6000000 YYYY &amp;lt;br&amp;gt; Activates all codes if buton presses equate to YYYY || Needs a button chart&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ccffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 10&lt;br /&gt;
| 16-bit incrementer || 10XXXXXX YYYY &amp;lt;br&amp;gt; Increments value at address 80XXXXXX by YYYY || Use with a joker&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ffffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 11&lt;br /&gt;
| 16-bit decrementer || 11XXXXXX YYYY &amp;lt;br&amp;gt; Decrements value at address 80XXXXXX by YYYY || Use with a joker&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ccffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 20&lt;br /&gt;
| 8-bit incrementer || 20XXXXXX 00YY &amp;lt;br&amp;gt; Increments value at address 80XXXXXX by YY || Use with a joker&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ffffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 21&lt;br /&gt;
| 8-bit decrementer || 21XXXXXX 00YY &amp;lt;br&amp;gt; Decrements value at address 80XXXXXX by YY || Use with a joker&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ccffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! C1&lt;br /&gt;
| codes-on delay || C1000000 YYYY &amp;lt;br&amp;gt; Delays codes from being on by YYYY time when game starts. 4000-5000 should give 20-30 seconds. || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ffffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! C2&lt;br /&gt;
| copy memory || C2XXXXXX YYYY &amp;lt;br&amp;gt; 80ZZZZZZ 0000 &amp;lt;br&amp;gt; Copy YYYY bytes from 80XXXXXX to 80ZZZZZZ. Could be used for copying large sets of complex character stats from one character to another, like working-magic-only, if serial repeater won&#039;t work || NA&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Xploder/Codebreaker&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Action Replay&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Gold Finger&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Caetla&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Nintendo Systems&amp;lt;/font&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== GameCube ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Action Replay&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Nintendo 64 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;GameShark&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== GameBoy Advance ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Codebreaker Advance&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;GameShark Advance (Interact)&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;GameShark Advance (Mad Catz)&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Action Replay&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Sega Systems&amp;lt;/font&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dreamcast ==&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;GameShark CDX&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;Codebreaker&#039;&#039;&#039;===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Saturn ==&lt;br /&gt;
&lt;br /&gt;
===&#039;&#039;&#039;GameShark&#039;&#039;&#039;===&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Code_Types&amp;diff=1517</id>
		<title>Code Types</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Code_Types&amp;diff=1517"/>
		<updated>2006-11-30T21:54:25Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: /* Playstation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Explanation of what a code type is, and what they&#039;re used for here..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Playstation Systems&amp;lt;/font&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Playstation 2 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Code Breaker&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GameShark (Interact)&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GameShark (Mad Catz)&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Xploder&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Playstation ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Gameshark&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
{| style=&amp;quot;border:1px solid #000000; margin: 0; padding:0;&amp;quot; width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&amp;quot;&lt;br /&gt;
! Type !! Description !! Example !! Other&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ccffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 30&lt;br /&gt;
| 8-bit constant write || 3XXXXXXX 00YY &amp;lt;br&amp;gt; Writes YY to Address XXXXXXX || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ffffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 80&lt;br /&gt;
| 16-bit constant write || 8XXXXXXX ZZYY &amp;lt;br&amp;gt; Writes ZZYY to Address XXXXXXX || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ccffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 50&lt;br /&gt;
| serial repeater || 5000XXYY 00ZZ &amp;lt;br&amp;gt; TTTTTTTT VVVV &amp;lt;br&amp;gt; Writes XX codes, with YY added to the address for each code after TTTTTTTT, and ZZZZ added to the amount for each code after value VVVV || Gameshark 2.41 and higher. May need to seperate pairs of serial codes with a 00000000 0000 code for disk-based gamesharks&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ffffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! E0&lt;br /&gt;
| 8-bit equal-to joker || E0XXXXXX 00YY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is equal to YY || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ccffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! E1&lt;br /&gt;
| 8-bit different-from joker || E1XXXXXX 00YY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is different from YY || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ffffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! E2&lt;br /&gt;
| 8-bit less-than joker || E2XXXXXX 00YY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is less than YY || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ccffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! E3&lt;br /&gt;
| 8-bit greater-than joker || E3XXXXXX 00YY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is greater than YY || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ffffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D0&lt;br /&gt;
| 16-bit equal-to joker || D0XXXXXX YYYY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is equal to YYYY || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ccffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D1&lt;br /&gt;
| 16-bit different-from joker || D1XXXXXX YYYY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is different from YYYY || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ffffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D2&lt;br /&gt;
| 16-bit less-than joker || D2XXXXXX YYYY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is less than YYYY || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ccffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D3&lt;br /&gt;
| 16-bit greater-than joker || D3XXXXXX YYYY &amp;lt;br&amp;gt; Activates next code if address 80XXXXXX is greater than YYYY || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ffffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D4&lt;br /&gt;
| 16-bit universal joker || D4000000 YYYY &amp;lt;br&amp;gt; Activates next code if the button presses equate to YYYY || Needs a button chart&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ccffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D5&lt;br /&gt;
| 16-bit codes-on joker || D5000000 YYYY &amp;lt;br&amp;gt; Activates all codes if buton presses equate to YYYY || Needs a button chart&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ffffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! D6&lt;br /&gt;
| 16-bit codes-off joker || D6000000 YYYY &amp;lt;br&amp;gt; Activates all codes if buton presses equate to YYYY || Needs a button chart&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ccffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 10&lt;br /&gt;
| 16-bit incrementer || 10XXXXXX YYYY &amp;lt;br&amp;gt; Increments value at address 80XXXXXX by YYYY || Use with a joker&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ffffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 11&lt;br /&gt;
| 16-bit decrementer || 11XXXXXX YYYY &amp;lt;br&amp;gt; Decrements value at address 80XXXXXX by YYYY || Use with a joker&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ccffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 20&lt;br /&gt;
| 8-bit incrementer || 20XXXXXX 00YY &amp;lt;br&amp;gt; Increments value at address 80XXXXXX by YY || Use with a joker&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ffffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! 21&lt;br /&gt;
| 8-bit decrementer || 21XXXXXX 00YY &amp;lt;br&amp;gt; Decrements value at address 80XXXXXX by YY || Use with a joker&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ccffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! C1&lt;br /&gt;
| codes-on delay || C1000000 YYYY &amp;lt;br&amp;gt; Delays codes from being on by YYYY time when game starts. 4000-5000 should give 20-30 seconds. || NA&lt;br /&gt;
|- align=&amp;quot;center&amp;quot; style=&amp;quot;font-size: 105%; background-color:#ffffff; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
! C2&lt;br /&gt;
| copy memory || C2XXXXXX YYYY &amp;lt;br&amp;gt; 80ZZZZZZ 0000 &amp;lt;br&amp;gt; Copy YYYY bytes from 80XXXXXX to 80ZZZZZZ. Could be used for copying large sets of complex character stats from one character to another, like working-magic-only, if serial repeater won&#039;t work || NA&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Xploder/Codebreaker&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Action Replay&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Gold Finger&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Caetla&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Nintendo Systems&amp;lt;/font&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GameCube ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Action Replay&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Nintendo 64 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GameShark&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== GameBoy Advance ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Codebreaker Advance&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GameShark Advance (Interact)&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GameShark Advance (Mad Catz)&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Action Replay&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Sega Systems&amp;lt;/font&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Dreamcast ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GameShark CDX&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Codebreaker&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Saturn ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;GameShark&#039;&#039;&#039;&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=1516</id>
		<title>Assembly Hacking</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=1516"/>
		<updated>2006-11-30T21:11:54Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Overview=&lt;br /&gt;
&lt;br /&gt;
Assembly hacking is the art of editing a compiled program. Without the source code, and without notes from the source code, one has to deduce almost everything about the underlying code, and how it works with RAM.&lt;br /&gt;
&lt;br /&gt;
There are several emulators that can aid one in creating a modification for a game. Games for console systems fall into the category of compiled programs, and generally, the source code is unavailable for these games.&lt;br /&gt;
&lt;br /&gt;
The use of making an assembly hack for a game can be found with the Nintendo Entertainment System (NES) [[Game Genie]].&lt;br /&gt;
&lt;br /&gt;
The codes that are entered into an NES Game Genie represent single-byte assembly hacks. Any assembly hack that could be done with a change of 3 bytes or less is possible to implement with a single Game Genie. The SNES Game Genie allows up to 5 codes, and 5 bytes of change. While this makes the possible usage of codes very limiting, it didn&#039;t prevent single-byte invincibility and infinite lives codes from appearing that could make it unneccesary to use additional codes.&lt;br /&gt;
&lt;br /&gt;
For more modern assembly hacking of the same systems, emulators that support 50 or more codes for any given game aren&#039;t uncommon. The ROMs have been turned into files that can be patched with all the changes needed to give the game a script in a new language. Emulators that aid in the process of making assembly hacks have appeared for many different emulated systems. The effect is that more people are now capable of starting their own projects, and existing projects can be modified and/or repaired more easily.&lt;br /&gt;
&lt;br /&gt;
=Emulators=&lt;br /&gt;
&lt;br /&gt;
==NES==&lt;br /&gt;
FCEUXDSP&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.the-interweb.com/serendipity/index.php?/categories/9-FCEUXD-SP&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in ROM/RAM&lt;br /&gt;
Tools&amp;gt;Debug&lt;br /&gt;
&lt;br /&gt;
In the breakpoint window, &#039;Add&#039; the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
ROM is 8000-FFFF&amp;lt;br&amp;gt;&lt;br /&gt;
RAM is 0000-07FF, 6000-7FFF&amp;lt;br&amp;gt;&lt;br /&gt;
0800-3FFF is mirrored from some part of RAM.&amp;lt;br&amp;gt;&lt;br /&gt;
4000-4015 can be breakpointed if working on an NSF. If the &#039;Hex Editor&#039; is opened in a normal game, then an NSF is loaded, you can use it to work on NSF RAM, in conjunction with the debugger.&lt;br /&gt;
&lt;br /&gt;
&#039;Hex Editor&#039; is a memory viewer/modifier.&lt;br /&gt;
&lt;br /&gt;
==SNES==&lt;br /&gt;
Geiger&#039;s SNES9X Debugger &amp;lt;br&amp;gt;&lt;br /&gt;
http://geigercount.net/crypt/ &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.zophar.net/snes.html&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in ROM/RAM&amp;lt;br&amp;gt;&lt;br /&gt;
Open ROM, Click &#039;Breakpoints&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
In the breakpoint window, enter the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
Standard RAM: 7E0000 - 7FFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
SA1 RAM: 400000-407FFF, 303000-303FFF&amp;lt;br&amp;gt;&lt;br /&gt;
HiROM - C00000 - FFFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
LoROM - 808000-BFFFFF (**0000 - **7FFF doesn&#039;t exist)&lt;br /&gt;
&lt;br /&gt;
If you use the [[SA1]] logger with an SA1-using game, and wish to find an address that changed an address in RAM, you can see if the conversion chart on the [[SA1]] page shows you the address to search for in the log file.&lt;br /&gt;
&lt;br /&gt;
==Genesis==&lt;br /&gt;
Gens Tracer &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.romhacking.net/?Category=&amp;amp;Console=0&amp;amp;Game=0&amp;amp;Author=0&amp;amp;Recm=&amp;amp;Level=&amp;amp;utilsearch=++Go++&amp;amp;title=Gens+Tracer&amp;amp;dsearch=&amp;amp;page=utils&amp;amp;action=utillist&lt;br /&gt;
&lt;br /&gt;
No breakpoints, but adequate tracing.&lt;br /&gt;
&lt;br /&gt;
I&#039;ve written a guide on the specific usage of the emulator.&lt;br /&gt;
&lt;br /&gt;
The idea is that you can trace-log writes to and reads from memory, and you can also log all commands, and determine what&#039;s happening from the full log, by using what you find from the hook logging.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HazeMD &amp;lt;br&amp;gt;&lt;br /&gt;
http://haze.mameworld.info/&lt;br /&gt;
&lt;br /&gt;
This emulator is harder to get setup to use a ROM, but comes with a MAME-style debugger. MAME&#039;s debugger is well known for being so powerful, considering the number of systems it can be used with when compiled into a build of MAME. The Gens tracer tends to have slightly better compatibility, while the HazeMD emulator has more potential for cheat codes, already having a Cheat system designed to handle multiple CPUs, which could be used for 32x game ROM hacks, and RAM hacks.&lt;br /&gt;
&lt;br /&gt;
==Gameboy==&lt;br /&gt;
BGB &amp;lt;br&amp;gt;&lt;br /&gt;
http://bgb.bircd.org/&lt;br /&gt;
&lt;br /&gt;
Load a ROM, and right-click the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debug mode enabled: to enable debugging&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debugger to enter the debugger&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in ROM/RAM&amp;lt;br&amp;gt;&lt;br /&gt;
In the debugger window:&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;breakpoints for execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;access breakpoints for read/write breaks.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gameboy Advance==&lt;br /&gt;
Visual Boy Advance Tracer &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.romhacking.net/?Category=&amp;amp;Console=10&amp;amp;Game=0&amp;amp;Author=695&amp;amp;Recm=&amp;amp;Level=&amp;amp;utilsearch=++Go++&amp;amp;title=&amp;amp;dsearch=&amp;amp;page=utils&amp;amp;action=utillist&lt;br /&gt;
&lt;br /&gt;
This emulator uses the Hook Log system. Those familiar with the hook_log Genesis or N64 emulators should have little trouble adapting to this system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Visual Boy Advance &amp;lt;br&amp;gt;&lt;br /&gt;
http://vba.ngemu.com/downloads.shtml &amp;lt;br&amp;gt;&lt;br /&gt;
Windows - SDL&lt;br /&gt;
&lt;br /&gt;
Unfortunately, no cheat device exists that can change the assembly, so hacking it is more a matter of patching the ROM, and less a matter of using it for simple cheats.&lt;br /&gt;
&lt;br /&gt;
Not documented.&lt;br /&gt;
&lt;br /&gt;
==Playstation==&lt;br /&gt;
PCSX 1.5 With Debugger &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.romhacking.net/?Category=&amp;amp;Console=0&amp;amp;Game=0&amp;amp;Author=0&amp;amp;Recm=&amp;amp;Level=&amp;amp;utilsearch=++Go++&amp;amp;title=PCSX+1.5+With+Debugger&amp;amp;dsearch=&amp;amp;page=utils&amp;amp;action=utillist&lt;br /&gt;
&lt;br /&gt;
Press F11 to enter the debugger.&amp;lt;br&amp;gt;&lt;br /&gt;
On-screen aids should be apparent.&lt;br /&gt;
&lt;br /&gt;
==N64==&lt;br /&gt;
Nemu64 (Project64 debug version for testing, etc.) &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.nemu.com/downloads.php &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.thegshi.org/downloads/Project64%20Build%2052%20Debug%20Binary.zip&lt;br /&gt;
&lt;br /&gt;
Setting execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Commands...&amp;lt;br&amp;gt;&lt;br /&gt;
To set a break on execution, go to the line that you want to break on, and click in the vertical bar to the left(&amp;lt;) of the address you want to breakpoint.&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in RAM&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Memory...&amp;lt;br&amp;gt;&lt;br /&gt;
Enable the read and/or write checkboxes, and right-click the memory space you want to set, unset, or change an access breakpoint on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some games don&#039;t run in Nemu, so you may have to switch to this hook_log based emulator if you want the codes &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.romhacking.net/?Category=&amp;amp;Console=27&amp;amp;Game=0&amp;amp;Author=0&amp;amp;Recm=&amp;amp;Level=&amp;amp;utilsearch=++Go++&amp;amp;title=tracer&amp;amp;dsearch=&amp;amp;page=utils&amp;amp;action=utillist&lt;br /&gt;
&lt;br /&gt;
The hook_log system is a little bit more demanding to use than a visual debugger, but with compatibility issues, it&#039;s better than lucky to have a second usable debugging emulator. The save-states can be decompressed, and loaded in their decompressed form if needed&lt;br /&gt;
&lt;br /&gt;
An issue with this emulator is that not all instructions are logged, but it&#039;s still worth knowing about for the fact that many instructions are logged, and it can be used with write logging.&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=1513</id>
		<title>Assembly Hacking</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Assembly_Hacking&amp;diff=1513"/>
		<updated>2006-11-30T19:30:55Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Overview=&lt;br /&gt;
&lt;br /&gt;
Assembly hacking is the art of editing a compiled program. Without the source code, and without notes from the source code, one has to deduce almost everything about the underlying code, and how it works with RAM.&lt;br /&gt;
&lt;br /&gt;
There are several emulators that can aid one in creating a modification for a game. Games for console systems fall into the category of compiled programs, and generally, the source code is unavailable for these games.&lt;br /&gt;
&lt;br /&gt;
The use of making an assembly hack for a game can be found with the Nintendo Entertainment System (NES) [[Game Genie]].&lt;br /&gt;
&lt;br /&gt;
The codes are were entered into an NES Game Genie represented single-byte assembly hacks. Any assembly hack that could be done with a change of 3 bytes or less was possible to implement with a single Game Genie. The SNES Game Genie allowed up to 5 codes, and 5 bytes of change. While this makes the possible usage of codes very limiting, it didn&#039;t prevent single-line invincibility and infinite lives codes from appearing that could make it unneccesary to use additional codes.&lt;br /&gt;
&lt;br /&gt;
For more modern assembly hacking of the same systems, emulators that support 50 or more codes for any given game aren&#039;t uncommon. The ROMs have been turned into files that can be patched with all the changes needed to give the game a script in a new language. Emulators that aid in the process of making assembly hacks have appeared for many different emulated systems. The effect is that more people are now capable of starting their own projects, and existing projects can be modified and/or repaired more easily.&lt;br /&gt;
&lt;br /&gt;
=Emulators=&lt;br /&gt;
&lt;br /&gt;
==NES==&lt;br /&gt;
FCEUXDSP&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.the-interweb.com/serendipity/index.php?/categories/9-FCEUXD-SP&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in ROM/RAM&lt;br /&gt;
Tools&amp;gt;Debug&lt;br /&gt;
&lt;br /&gt;
In the breakpoint window, &#039;Add&#039; the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
ROM is 8000-FFFF&amp;lt;br&amp;gt;&lt;br /&gt;
RAM is 0000-07FF, 6000-7FFF&amp;lt;br&amp;gt;&lt;br /&gt;
0800-3FFF is mirrored from some part of RAM.&amp;lt;br&amp;gt;&lt;br /&gt;
4000-4015 can be breakpointed if working on an NSF. If the &#039;Hex Editor&#039; is opened in a normal game, then an NSF is loaded, you can use it to work on NSF RAM, in conjunction with the debugger.&lt;br /&gt;
&lt;br /&gt;
&#039;Hex Editor&#039; is a memory viewer/modifier.&lt;br /&gt;
&lt;br /&gt;
==SNES==&lt;br /&gt;
Geiger&#039;s SNES9X Debugger &amp;lt;br&amp;gt;&lt;br /&gt;
http://geigercount.net/crypt/ &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.zophar.net/snes.html&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in ROM/RAM&amp;lt;br&amp;gt;&lt;br /&gt;
Open ROM, Click &#039;Breakpoints&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
In the breakpoint window, enter the Executable address or Memory address you want.&amp;lt;br&amp;gt;&lt;br /&gt;
Standard RAM: 7E0000 - 7FFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
SA1 RAM: 400000-407FFF, 303000-303FFF&amp;lt;br&amp;gt;&lt;br /&gt;
HiROM - C00000 - FFFFFF&amp;lt;br&amp;gt;&lt;br /&gt;
LoROM - 808000-BFFFFF (**0000 - **7FFF doesn&#039;t exist)&lt;br /&gt;
&lt;br /&gt;
If you use the [[SA1]] logger with an SA1-using game, and wish to find an address that changed an address in RAM, you can see if the conversion chart on the [[SA1]] page shows you the address to search for in the log file.&lt;br /&gt;
&lt;br /&gt;
==Genesis==&lt;br /&gt;
Gens Tracer &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.romhacking.net/?Category=&amp;amp;Console=0&amp;amp;Game=0&amp;amp;Author=0&amp;amp;Recm=&amp;amp;Level=&amp;amp;utilsearch=++Go++&amp;amp;title=Gens+Tracer&amp;amp;dsearch=&amp;amp;page=utils&amp;amp;action=utillist&lt;br /&gt;
&lt;br /&gt;
No breakpoints, but adequate tracing.&lt;br /&gt;
&lt;br /&gt;
I&#039;ve written a guide on the specific usage of the emulator.&lt;br /&gt;
&lt;br /&gt;
The idea is that you can trace-log writes to and reads from memory, and you can also log all commands, and determine what&#039;s happening from the full log, by using what you find from the hook logging.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HazeMD &amp;lt;br&amp;gt;&lt;br /&gt;
http://haze.mameworld.info/&lt;br /&gt;
&lt;br /&gt;
This emulator is harder to get setup to use a ROM, but comes with a MAME-style debugger. MAME&#039;s debugger is well known for being so powerful, considering the number of systems it can be used with when compiled into a build of MAME. The Gens tracer tends to have slightly better compatibility, while the HazeMD emulator has more potential for cheat codes, already having a Cheat system designed to handle multiple CPUs, which could be used for 32x game ROM hacks, and RAM hacks.&lt;br /&gt;
&lt;br /&gt;
==Gameboy==&lt;br /&gt;
BGB &amp;lt;br&amp;gt;&lt;br /&gt;
http://bgb.bircd.org/&lt;br /&gt;
&lt;br /&gt;
Load a ROM, and right-click the screen.&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debug mode enabled: to enable debugging&amp;lt;br&amp;gt;&lt;br /&gt;
Other&amp;gt;debugger to enter the debugger&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in ROM/RAM&amp;lt;br&amp;gt;&lt;br /&gt;
In the debugger window:&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;breakpoints for execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Debug&amp;gt;access breakpoints for read/write breaks.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gameboy Advance==&lt;br /&gt;
Visual Boy Advance Tracer &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.romhacking.net/?Category=&amp;amp;Console=10&amp;amp;Game=0&amp;amp;Author=695&amp;amp;Recm=&amp;amp;Level=&amp;amp;utilsearch=++Go++&amp;amp;title=&amp;amp;dsearch=&amp;amp;page=utils&amp;amp;action=utillist&lt;br /&gt;
&lt;br /&gt;
This emulator uses the Hook Log system. Those familiar with the hook_log Genesis or N64 emulators should have little trouble adapting to this system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Visual Boy Advance &amp;lt;br&amp;gt;&lt;br /&gt;
http://vba.ngemu.com/downloads.shtml &amp;lt;br&amp;gt;&lt;br /&gt;
Windows - SDL&lt;br /&gt;
&lt;br /&gt;
Unfortunately, no cheat device exists that can change the assembly, so hacking it is more a matter of patching the ROM, and less a matter of using it for simple cheats.&lt;br /&gt;
&lt;br /&gt;
Not documented.&lt;br /&gt;
&lt;br /&gt;
==Playstation==&lt;br /&gt;
PCSX 1.5 With Debugger &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.romhacking.net/?Category=&amp;amp;Console=0&amp;amp;Game=0&amp;amp;Author=0&amp;amp;Recm=&amp;amp;Level=&amp;amp;utilsearch=++Go++&amp;amp;title=PCSX+1.5+With+Debugger&amp;amp;dsearch=&amp;amp;page=utils&amp;amp;action=utillist&lt;br /&gt;
&lt;br /&gt;
Press F11 to enter the debugger.&amp;lt;br&amp;gt;&lt;br /&gt;
On-screen aids should be apparent.&lt;br /&gt;
&lt;br /&gt;
==N64==&lt;br /&gt;
Nemu64 (Project64 debug version for testing, etc.) &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.nemu.com/downloads.php &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.thegshi.org/downloads/Project64%20Build%2052%20Debug%20Binary.zip&lt;br /&gt;
&lt;br /&gt;
Setting execution breakpoints&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Commands...&amp;lt;br&amp;gt;&lt;br /&gt;
To set a break on execution, go to the line that you want to break on, and click in the vertical bar to the left(&amp;lt;) of the address you want to breakpoint.&lt;br /&gt;
&lt;br /&gt;
Setting breakpoints in RAM&amp;lt;br&amp;gt;&lt;br /&gt;
Plugins&amp;gt;Debugger: Memory...&amp;lt;br&amp;gt;&lt;br /&gt;
Enable the read and/or write checkboxes, and right-click the memory space you want to set, unset, or change an access breakpoint on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some games don&#039;t run in Nemu, so you may have to switch to this hook_log based emulator if you want the codes &amp;lt;br&amp;gt;&lt;br /&gt;
http://www.romhacking.net/?Category=&amp;amp;Console=27&amp;amp;Game=0&amp;amp;Author=0&amp;amp;Recm=&amp;amp;Level=&amp;amp;utilsearch=++Go++&amp;amp;title=tracer&amp;amp;dsearch=&amp;amp;page=utils&amp;amp;action=utillist&lt;br /&gt;
&lt;br /&gt;
The hook_log system is a little bit more demanding to use than a visual debugger, but with compatibility issues, it&#039;s better than lucky to have a second usable debugging emulator. The save-states can be decompressed, and loaded in their decompressed form if needed&lt;br /&gt;
&lt;br /&gt;
An issue with this emulator is that not all instructions are logged, but it&#039;s still worth knowing about for the fact that many instructions are logged, and it can be used with write logging.&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=SA1&amp;diff=1511</id>
		<title>SA1</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=SA1&amp;diff=1511"/>
		<updated>2006-11-30T18:32:30Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
The SNES SA1 chip is an expansion chip added to an SNES cart that both contains a portion of the game&#039;s coding, and executes that portion of code to affect normal SNES RAM, and the additional RAM accessed primarily by the SA1 chip programming. The additional RAM is also accessible by the SNES CPU&#039;s instructions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There is no current information concerning hardware-based tests with Game Genie codes that change portions of ROM residing within the SA1.&lt;br /&gt;
&lt;br /&gt;
==Memory Mapping Comparison==&lt;br /&gt;
Region 30:0000 - 30:3FFF is SA1 related due to the fact that some RAM is 00 mapped for SA1-using games:&lt;br /&gt;
&lt;br /&gt;
Writes from the SNES CPU to 00:0000 - 00:3FFF region to change a mirrored region at 30:0000 - 30:3FFF region&lt;br /&gt;
&lt;br /&gt;
00:0000 - 00:3FFF&lt;br /&gt;
30:0000 - 30:3FFF&lt;br /&gt;
&lt;br /&gt;
SA1 Address:&lt;br /&gt;
Reads/Writes to these addresses from the SA1 CPU translate to the below CPU-accessible addresses in SNES memory&lt;br /&gt;
00:4000 - 00:7FFF&lt;br /&gt;
CPU Address:&lt;br /&gt;
40:0000 - 40:3FFF&lt;br /&gt;
&lt;br /&gt;
SA1 Address Testing:&lt;br /&gt;
If you wish to test writes made by the SA1 to memory, and see what area is changed, you can use the following code with Super Mario RPG (US), while in a 3D stage. You should fall through the ground, and be unaligned with the map, but have the value FE written to the address you chose.&lt;br /&gt;
&lt;br /&gt;
Test SA1 Memory Writes (2 byte addresses, 0xFE written)&lt;br /&gt;
C9C374A9&lt;br /&gt;
C9C375FE&lt;br /&gt;
C9C378FF&lt;br /&gt;
C9C3793F&lt;br /&gt;
&lt;br /&gt;
Load value 0x00FE to write(could be made to load a 2-byte value)&lt;br /&gt;
C9C374A9&lt;br /&gt;
C9C375FE&lt;br /&gt;
&lt;br /&gt;
Address to write to(Writes to 3FFF with these values)&lt;br /&gt;
C9C378FF&lt;br /&gt;
C9C3793F&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=SA1&amp;diff=1510</id>
		<title>SA1</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=SA1&amp;diff=1510"/>
		<updated>2006-11-30T18:30:22Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
----&lt;br /&gt;
The SNES SA1 chip is an expansion chip added to an SNES cart that both contains a portion of the game&#039;s coding, and executes that portion of code to affect normal SNES RAM, and the additional RAM accessed primarily by the SA1 chip programming. The additional RAM is also accessible by the SNES CPU&#039;s instructions.&lt;br /&gt;
&lt;br /&gt;
There is no current information concerning hardware-based tests with Game Genie codes that change portions of ROM residing within the SA1.&lt;br /&gt;
&lt;br /&gt;
==Memory Mapping Comparison==&lt;br /&gt;
----&lt;br /&gt;
Region 30:0000 - 30:3FFF is SA1 related due to the fact that some RAM is 00 mapped for SA1-using games:&lt;br /&gt;
&lt;br /&gt;
Writes from the SNES CPU to 00:0000 - 00:3FFF region to change a mirrored region at 30:0000 - 30:3FFF region&lt;br /&gt;
&lt;br /&gt;
00:0000 - 00:3FFF&lt;br /&gt;
30:0000 - 30:3FFF&lt;br /&gt;
&lt;br /&gt;
SA1 Address:&lt;br /&gt;
Reads/Writes to these addresses from the SA1 CPU translate to the below CPU-accessible addresses in SNES memory&lt;br /&gt;
00:4000 - 00:7FFF&lt;br /&gt;
CPU Address:&lt;br /&gt;
40:0000 - 40:3FFF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SA1 Address Testing:&lt;br /&gt;
If you wish to test writes made by the SA1 to memory, and see what area is changed, you can use the following code with Super Mario RPG (US), while in a 3D stage. You should fall through the ground, and be unaligned with the map, but have the value FE written to the address you chose.&lt;br /&gt;
&lt;br /&gt;
Test SA1 Memory Writes (2 byte addresses, 0xFE written)&lt;br /&gt;
C9C374A9&lt;br /&gt;
C9C375FE&lt;br /&gt;
C9C378FF&lt;br /&gt;
C9C3793F&lt;br /&gt;
&lt;br /&gt;
Load value 0x00FE to write(could be made to load a 2-byte value)&lt;br /&gt;
C9C374A9&lt;br /&gt;
C9C375FE&lt;br /&gt;
&lt;br /&gt;
Address to write to(Writes to 3FFF with these values)&lt;br /&gt;
C9C378FF&lt;br /&gt;
C9C3793F&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Final_Fantasy_VI_Advance_(Hacking)&amp;diff=1493</id>
		<title>Final Fantasy VI Advance (Hacking)</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Final_Fantasy_VI_Advance_(Hacking)&amp;diff=1493"/>
		<updated>2006-11-29T21:50:55Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Post Final Fantasy 6 GBA finds here===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid #aaaaaa; margin: 0; padding:0;&amp;quot; width=&amp;quot;25%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;right&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; style=&amp;quot;font-size: 105%; background-color:#FFDEAD; border-bottom:1px solid #aaaaaa; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Fly on Daryl&#039;s Airship&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background:#ffffff; padding:0.2em 0.4em 0.2em 0.4em; text-align: center;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
[[image: Daryl2.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
|- style=&amp;quot;background:#ffffff; padding:0.2em 0.4em 0.2em 0.4em; text-align: center;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
----&lt;br /&gt;
32001E94 00FF&amp;lt;br&amp;gt;320011FA 0003&amp;lt;br&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
On the World Map,&#039;&#039;&#039; access the main menu and exit it to be in the Airship. From there, press Start and you&#039;ll be on the deck of Daryl&#039;s Airship. - Ace&lt;br /&gt;
|}&lt;br /&gt;
02000056 - Change to 01 to call a battle (doesn&#039;t work on world map). It seems to call the last battle you were in. Ace&#039;s enemy group mod works with it. - KE&lt;br /&gt;
&lt;br /&gt;
0200004C - Screen fade. F0 is normal brightness, 00 is pitch black - KE&amp;lt;br&amp;gt;&lt;br /&gt;
0200004D - Background brightness. 00 is normal, F0 is hellabright(tm) - KE&amp;lt;br&amp;gt; &lt;br /&gt;
0200004B - some digits start a brightness loop. F0 will give you a seizure - KE&amp;lt;br&amp;gt;&lt;br /&gt;
020000FF - Setting this to anything but 00 will put you in &amp;quot;oh chit KE hav to much sakeke&amp;quot; mode, world map only - KE&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
02001CF5 - changes which party you are in control of. 01-03 are the normal parties (2 and 3 are only used in multiple-party scenarios), 00 puts you in a party with a character that has kefka&#039;s sprite on the world map, ghestal&#039;s portrait, and cyan in battle. - KE&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
02026237 - Changes how many parties you can put your characters into at the party selection screen. - KE &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8200185E 5951 - before using code clear the 3rd and 4th slots of your party. with the code on they will be kefka and leo. both have sprites for normal maps and the world map, and work in battle. Kefka must be given commands before he can be used in battle.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== cadohacan ==&lt;br /&gt;
32001F64 00xx &amp;lt; room modifer looking for debug room right now&lt;br /&gt;
&lt;br /&gt;
== Event Modifier/Activator ==&lt;br /&gt;
I think the primary Event Modifier/Activator address is 020000E7&lt;br /&gt;
&lt;br /&gt;
F1 - Load Intro&amp;lt;br&amp;gt;&lt;br /&gt;
F4 - Call Ending Screen&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
There&#039;s more that effects it. I&#039;ve managed to call battles, shops, menus, etc with it. Right now it&#039;s all about figuring it out...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note 1: When I said I didn&#039;t know much about it, I meant it. :P&amp;lt;br&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
Note 2: These values will work in town without having to change anything else..&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anyway, There seems to be a lot of stuff that effects this. So expect mixed effects....&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
         &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!---                     EXTERNAL LINKS GO HERE                             ---&amp;gt;&lt;br /&gt;
==External links==&lt;br /&gt;
&lt;br /&gt;
*[http://gshi.org/?s=v2&amp;amp;sys=7&amp;amp;gid=6366 Codes for Final Fantasy VI (J) (GBA) on the GSHI]&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Final_Fantasy_VI_Advance_(Hacking)&amp;diff=1451</id>
		<title>Final Fantasy VI Advance (Hacking)</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Final_Fantasy_VI_Advance_(Hacking)&amp;diff=1451"/>
		<updated>2006-11-29T04:53:51Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Post Final Fantasy 6 GBA finds here===&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot; width=&amp;quot;75%&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background:#ffdead;&amp;quot;&lt;br /&gt;
|Fly on Daryl&#039;s Airship&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
|http://gshi.org/ace/images/daryl.png&lt;br /&gt;
|- align=&amp;quot;center&amp;quot;&lt;br /&gt;
|32001E94 00FF&amp;lt;br&amp;gt;320011FA 0003&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;On the World Map,&#039;&#039;&#039; access the main menu and exit it to be in the Airship. From there, press Start and you&#039;ll be on the deck of Daryl&#039;s Airship. &amp;lt;br&amp;gt;- Ace&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
02000056 - Change to 01 to call a battle (doesn&#039;t work on world map). It seems to call the last battle you were in. Ace&#039;s enemy group mod works with it. - KE&lt;br /&gt;
&lt;br /&gt;
0200004C - Screen fade. F0 is normal brightness, 00 is pitch black - KE&amp;lt;br&amp;gt;&lt;br /&gt;
0200004D - Background brightness. 00 is normal, F0 is hellabright(tm) - KE&amp;lt;br&amp;gt; &lt;br /&gt;
0200004B - some digits start a brightness loop. F0 will give you a seizure - KE&amp;lt;br&amp;gt;&lt;br /&gt;
020000FF - Setting this to anything but 00 will put you in &amp;quot;oh chit KE hav to much sakeke&amp;quot; mode, world map only - KE&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
02001CF5 - changes which party you are in control of. 01-03 are the normal parties (2 and 3 are only used in multiple-party scenarios), 00 puts you in a party with a character that has kefka&#039;s sprite on the world map, ghestal&#039;s portrait, and cyan in battle. - KE&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
02026237 - Changes how many parties you can put your characters into at the party selection screen. - KE &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8200185E 5951 - before using code clear the 3rd and 4th slots of your party. with the code on they will be kefka and leo. both have sprites for normal maps and the world map, and work in battle. Kefka must be given commands before he can be used in battle.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Event Modifier/Activator===&lt;br /&gt;
When I said I didn&#039;t know much about it, I meant it. :P&amp;lt;br&amp;gt;&lt;br /&gt;
Anyway, what I think to be the primary address is this: 020000E7&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;NOTE 1: There seems to be a lot of stuff that effects this. So expect mixed effects....&amp;lt;br&amp;gt;NOTE 2: These values will work in town without having to change anything else..&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
F1 - Load Intro&amp;lt;br&amp;gt;&lt;br /&gt;
F4 - Call Ending Screen&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
There&#039;s more that effects it. I&#039;ve managed to call battles, shops, menus, etc with it. Right now it&#039;s all about figuring it out...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----                      &lt;br /&gt;
&amp;lt;!--                     ANYTHING BELOW THIS LINE IS TO BE EXTERNAL LINKS            --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;External Links:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;[http://gshi.org/?s=v2&amp;amp;sys=7&amp;amp;gid=6366 Codes for Final Fantasy VI (J) on the GSHI]&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Main_Page&amp;diff=1450</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Main_Page&amp;diff=1450"/>
		<updated>2006-11-29T03:06:09Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;H1&amp;gt;Game Systems Headquarters International&amp;lt;/H1&amp;gt;&lt;br /&gt;
{| style=&amp;quot;border:1px solid #aaaaaa; margin: 0; padding:0;&amp;quot; width=&amp;quot;25%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;right&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; style=&amp;quot;font-size: 105%; background-color:#98FB98; border-bottom:1px solid #aaaaaa; text-align: center; padding:0;&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Featured Page&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background:#ffffff; padding:0.2em 0.4em 0.2em 0.4em;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[image: Kefka-t.png|center]]  &lt;br /&gt;
* [[Hacking:FF6A|Final Fantasy VI Code Hacking]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;blockquote&amp;gt;GSHI is a longstanding collaborative group of code hackers, who have contributed many, many codes to the scene, for such cheat systems as Gameshark, Action Replay, CodeBreaker, and Game Genie. The website and forums were started by and are currently coadministrated by the member who calls himself Lazy Bastard. Many people who use these cheat systems and devices are unaware that the companies who manufacture and market them use websites and communities such as GSHI to produce and distribute the codes that cause them to be as popular as they are. &amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;The website is located here: http://www.gshi.org&amp;lt;BR&amp;gt;The community itself gathers at the website&#039;s home forums, located here: http://www.gshi.org/vb/&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{| style=&amp;quot;border:1px solid #aaaaaa; margin: 0; padding:0;&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; align=&amp;quot;right&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; style=&amp;quot;font-size: 105%; background-color:#FFDEAD; border-bottom:1px solid #aaaaaa; text-align: center; padding:0;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;Pages that need information&#039;&#039;&#039;&lt;br /&gt;
|- style=&amp;quot;background:#ffffff; padding:0.2em 0.4em 0.2em 0.4em;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
* [[GSHI]]&lt;br /&gt;
* [[Kodewerx]]&lt;br /&gt;
* [[Game genie]]&lt;br /&gt;
* [[Action Replay]]&lt;br /&gt;
* [[Codebreaker]]&lt;br /&gt;
* [[Gameshark]]&lt;br /&gt;
* [[Xploder]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
	<entry>
		<id>https://wiki.gamehacking.org/index.php?title=Main_Page&amp;diff=1449</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.gamehacking.org/index.php?title=Main_Page&amp;diff=1449"/>
		<updated>2006-11-29T01:44:26Z</updated>

		<summary type="html">&lt;p&gt;Ugetab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;H1&amp;gt;Game Systems Headquarters International&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
{| style=&amp;quot;border:0; margin: 0;&amp;quot; width=&amp;quot;25%&amp;quot; cellspacing=&amp;quot;10&amp;quot; align=&amp;quot;right&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;padding:0; border:1px solid #aaaaaa; margin-bottom:5px;&amp;quot; &lt;br /&gt;
| &amp;lt;div style=&amp;quot;font-size: 105%; padding:0.4em; background-color:#98FB98; border-bottom:1px solid #aaaaaa; text-align: center;&amp;quot;&amp;gt;&#039;&#039;&#039;Featured Page&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#ffffff; padding:0.2em 0.4em 0.2em 0.4em;&amp;quot;&amp;gt;&lt;br /&gt;
{| style=&amp;quot;border: 0; margin: 0;&amp;quot; cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[image: Kefka-t.png|center]]  &lt;br /&gt;
* [[Hacking:FF6A|Final Fantasy VI Code Hacking]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;GSHI is a longstanding collaborative group of code hackers, who have contributed many, many codes to the scene, for such cheat systems as Gameshark, Action Replay, CodeBreaker, and Game Genie. The website and forums were started by and are currently coadministrated by the member who calls himself Lazy Bastard. Many people who use these cheat systems and devices are unaware that the companies who manufacture and market them use websites and communities such as GSHI to produce and distribute the codes that cause them to be as popular as they are. &amp;lt;BR&amp;gt;&amp;lt;BR&amp;gt;The website is located here: http://www.gshi.org&amp;lt;BR&amp;gt;The community itself gathers at the website&#039;s home forums, located here: http://www.gshi.org/vb/&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
| valign=&amp;quot;center&amp;quot; style=&amp;quot;padding:0; border:1px solid #aaaaaa; margin-bottom:5px;&amp;quot; &lt;br /&gt;
| &amp;lt;div style=&amp;quot;font-size: 105%; padding:0.4em; background-color:#FFDEAD; border-bottom:1px solid #aaaaaa; text-align: center;&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&#039;&#039;&#039;Pages that need information&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#ffffff; padding:0.2em 0.4em 0.2em 0.4em;&amp;quot;&amp;gt;&lt;br /&gt;
{| style=&amp;quot;border: 0; margin: 0;&amp;quot; cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |  &lt;br /&gt;
* [[GSHI]]&lt;br /&gt;
* [[Kodewerx]]&lt;br /&gt;
* [[Game genie]]&lt;br /&gt;
* [[Action Replay]]&lt;br /&gt;
* [[Codebreaker]]&lt;br /&gt;
* [[Gameshark]]&lt;br /&gt;
* [[Xploder]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ugetab</name></author>
	</entry>
</feed>