mirror of
https://github.com/ekeeke/Genesis-Plus-GX.git
synced 2024-12-27 11:41:48 +01:00
236 lines
5.8 KiB
HTML
236 lines
5.8 KiB
HTML
<HTML>
|
|
<HEAD>
|
|
<TITLE>GameGenie patches</TITLE>
|
|
</HEAD>
|
|
<BODY TEXT="#000000" BGCOLOR="#FEFEF4">
|
|
<BASEFONT FACE="MS Sans Serif" SIZE="-1">
|
|
|
|
<BR>
|
|
<CENTER><H1>GameGenie Patching</H1></CENTER>
|
|
<BR>
|
|
<P> GameGenie was a device created by codemasters and galoob that
|
|
let you make cheats for games. It was plugged in the console like a normal
|
|
cartridge, and in its top the desired cartridge was plugged. These cheats are
|
|
possible because what GameGenie do is edit the RAM that stores values used by
|
|
the ROMs, setting these values to a constant that can be, for example, the
|
|
number of lifes you have!</P>
|
|
<P> Genecyst was the first Genesis emulator to have support
|
|
for GameGenie then, with Kgen98, Steve Snake started to use this neat feature
|
|
in his great emulator. No ROM image of a GameGenie is necessary, as some may
|
|
imagine, to use them with console emulators, these programs themselves have a
|
|
built-in feature that acts like a GameGenie, writing the codes in the emulated
|
|
RAM.</P>
|
|
<P> The GameGenie code consists of a eight-bytes long string, and
|
|
the valid characters are A, B, C, D, E, F, G, H, J, K, L, M, N, P, R, S, T, V,
|
|
W, X, Y, Z, 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9, all in uppercase. Each character
|
|
have a binary repressentation, which is 5-bits long.</P>
|
|
|
|
<TABLE WIDTH="70%" BORDER="0" ALIGN="CENTER">
|
|
<TR>
|
|
<TD>
|
|
<TABLE BORDER="1" ALIGN="CENTER">
|
|
<TR>
|
|
<TH>Char</TH>
|
|
<TH>Value</TH>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">A</TD><TD>00000</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">B</TD><TD>00001</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">C</TD><TD>00010</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">D</TD><TD>00011</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">E</TD><TD>00100</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">F</TD><TD>00101</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">G</TD><TD>00110</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">H</TD><TD>00111</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">J</TD><TD>01000</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">K</TD><TD>01001</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">L</TD><TD>01010</TD>
|
|
</TR>
|
|
</TABLE>
|
|
</TD>
|
|
<TD VALIGN="TOP">
|
|
<TABLE BORDER="1" ALIGN="CENTER">
|
|
<TR>
|
|
<TH>Char</TH>
|
|
<TH>Value</TH>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">M</TD><TD>01011</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">N</TD><TD>01100</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">P</TD><TD>01101</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">R</TD><TD>01110</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">S</TD><TD>01111</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">T</TD><TD>10000</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">V</TD><TD>10001</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">W</TD><TD>10010</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">X</TD><TD>10011</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">Y</TD><TD>10100</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">Z</TD><TD>10101</TD>
|
|
</TR>
|
|
</TABLE>
|
|
</TD>
|
|
<TD VALIGN="TOP">
|
|
<TABLE BORDER="1" ALIGN="CENTER">
|
|
<TR>
|
|
<TH>Char</TH>
|
|
<TH>Value</TH>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">0</TD><TD>10110</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">1</TD><TD>10111</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">2</TD><TD>11000</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">3</TD><TD>11001</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">4</TD><TD>11010</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">5</TD><TD>11011</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">6</TD><TD>11100</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">7</TD><TD>11101</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">8</TD><TD>11110</TD>
|
|
</TR>
|
|
<TR>
|
|
<TD ALIGN="CENTER">9</TD><TD>11111</TD>
|
|
</TR>
|
|
</TABLE>
|
|
</TD>
|
|
</TR>
|
|
</TABLE>
|
|
<BR>
|
|
<P> The cheat code should be firstly converted directly using the
|
|
table above, and then the bits should be reordered. For example, the GameGenie
|
|
code SCRA-BJX0 is translated to:</P>
|
|
<FONT FACE="Courier">
|
|
<TABLE BORDER="0" ALIGN="CENTER">
|
|
<TR>
|
|
<TD>
|
|
<TABLE BORDER="0" ALIGN="CENTER">
|
|
<TR><TD ALIGN="RIGHT" VALIGN="MIDDLE">Code:</TD></TR>
|
|
<TR><TD ALIGN="RIGHT" VALIGN="MIDDLE">Bits:</TD></TR>
|
|
<TR><TD ALIGN="RIGHT" VALIGN="MIDDLE">Id:</TD></TR>
|
|
</TABLE>
|
|
</TD>
|
|
<TD>
|
|
<TABLE BORDER="1" ALIGN="CENTER">
|
|
<TR ALIGN="CENTER">
|
|
<TD>S</TD><TD>C</TD><TD>R</TD><TD>A</TD>
|
|
</TR>
|
|
<TR ALIGN="CENTER">
|
|
<TD>01111</TD><TD>00010</TD><TD>01110</TD><TD>00000</TD>
|
|
</TR>
|
|
<TR ALIGN="CENTER">
|
|
<TD>ijklm</TD><TD>nopIJ</TD><TD>KLMNO</TD><TD>PABCD</TD>
|
|
</TR>
|
|
</TABLE>
|
|
</TD>
|
|
<TD>
|
|
<TABLE BORDER="0" ALIGN="CENTER">
|
|
<TR><TD ALIGN="RIGHT" VALIGN="MIDDLE">-</TD></TR>
|
|
<TR><TD ALIGN="RIGHT" VALIGN="MIDDLE">-</TD></TR>
|
|
<TR><TD ALIGN="RIGHT" VALIGN="MIDDLE">-</TD></TR>
|
|
</TABLE>
|
|
</TD>
|
|
<TD>
|
|
<TABLE BORDER="1" ALIGN="CENTER">
|
|
<TR ALIGN="CENTER"><TD>B</TD><TD>J</TD><TD>X</TD><TD>0</TD></TR>
|
|
<TR ALIGN="CENTER"><TD>00001</TD><TD>01000</TD><TD>10011</TD><TD>10110</TD></TR>
|
|
<TR ALIGN="CENTER"><TD>EFGHd</TD><TD>efgha</TD><TD>bcQRS</TD><TD>TUVWX</TD></TR>
|
|
</TABLE>
|
|
</TD>
|
|
</TR>
|
|
</TABLE>
|
|
</FONT>
|
|
<P> Then rearrange (using the id) as...</P>
|
|
<FONT FACE="Courier">
|
|
<TABLE BORDER="0" ALIGN="CENTER">
|
|
<TR>
|
|
<TD>
|
|
<TABLE BORDER="0" ALIGN="CENTER">
|
|
<TR><TD ALIGN="RIGHT" VALIGN="MIDDLE">Bits:</TD></TR>
|
|
<TR><TD ALIGN="RIGHT" VALIGN="MIDDLE">Id:</TD></TR>
|
|
</TABLE>
|
|
</TD>
|
|
<TD>
|
|
<TABLE BORDER="1" ALIGN="CENTER">
|
|
<TR>
|
|
<TD>00000000</TD><TD>10011100</TD><TD>01110110</TD>
|
|
</TR>
|
|
<TR ALIGN="CENTER">
|
|
<TD>ABCDEFGH</TD><TD>IJKLMNOP</TD><TD>QRSTUVWX</TD>
|
|
</TR>
|
|
</TABLE>
|
|
</TD>
|
|
<TD>
|
|
<TABLE BORDER="0" ALIGN="CENTER">
|
|
<TR><TD ALIGN="RIGHT" VALIGN="MIDDLE">:</TD></TR>
|
|
<TR><TD ALIGN="RIGHT" VALIGN="MIDDLE">:</TD></TR>
|
|
</TABLE>
|
|
</TD>
|
|
<TD>
|
|
<TABLE BORDER="1">
|
|
<TR ALIGN="CENTER"><TD>01010100</TD> <TD>01111000</TD></TR>
|
|
<TR ALIGN="CENTER"><TD>abcdefgh</TD><TD>ijklmnop</TD></TR>
|
|
</TABLE>
|
|
</TD>
|
|
</TR>
|
|
</TABLE>
|
|
</FONT>
|
|
<BR>
|
|
<P> Which give us, in hexa, <B>009C76:5478</B>. This means that
|
|
<B>H5478</B> will be written at <B>H009C76</B> memory offset.</P>
|
|
</BODY>
|
|
</HTML>
|