Points of Required Attention™
Please chime in on a proposed restructuring of the ROM hacking sections.
Views: 88,481,786
Main | FAQ | Uploader | IRC chat | Radio | Memberlist | Active users | Latest posts | Calendar | Stats | Online users | Search 04-25-24 12:51 PM
Guest: Register | Login

0 users currently in ROM Hacking | 1 guest | 1 bot

Main - ROM Hacking - 6 to 8 lettered game genie codes New thread | New reply


born2party
Posted on 12-06-09 08:22 AM Link | Quote | ID: 121617


Level: 15

Posts: 34/35
EXP: 15857
Next: 527

Since: 04-04-08

Last post: 5253 days
Last view: 4851 days
Does anyone know of a program that can easily convert 6 lettered game genie codes to 8?
I've googled and found only complicated tutorials.

I still don't get it.

Theres got to be an easier way.

Parasyte
Posted on 12-06-09 07:38 PM Link | Quote | ID: 121648


Red Goomba
Level: 18

Posts: 28/48
EXP: 24784
Next: 5113

Since: 02-09-09
From: Flagstaff, AZ

Last post: 5209 days
Last view: 5187 days
Perhaps the question you should be asking is, why?

The only difference between a 6-digit Game Genie code and an 8-digit code is that the latter includes a data checking (condition) parameter. The data check helps to ensure the code output is only sent to the console when the proper ROM bank is loaded.

So ... If you have a 6-digit code that is working, why bother turning it into an 8-digit code? It's not like its a dumb processes (able to be done by a simple program/algorithm) anyway; you still need to know the correct input byte from the original ROM bank.

If you are already aware of all this, you should have also known that any Game Genie encoder/decoder is just the tool you need; Paste the 6-digit code, you'll be given the raw (address ? condition : data) format. The (condition) will be blank, of course, so fill it with the input byte from the proper ROM bank, and convert it back to a Game Genie code.

Simple, no?

Jigglysaint
Posted on 12-07-09 12:18 AM (rev. 2 of 12-07-09 12:29 AM) Link | Quote | ID: 121681


Red Paragoomba
Level: 20

Posts: 48/62
EXP: 38537
Next: 3902

Since: 04-04-07

Last post: 4616 days
Last view: 2353 days
Para, I thought the compare value only checks the individual value, not the rom bank. If there's no compare, then all addresses in the game are affect, but with the compare, only bytes that match the compare value will be altered. Correct me if I'm wrong though.

Edit: Found a document on it: http://tuxnes.sourceforge.net/gamegenie.html

born2party
Posted on 12-07-09 07:25 AM Link | Quote | ID: 121717


Level: 15

Posts: 35/35
EXP: 15857
Next: 527

Since: 04-04-08

Last post: 5253 days
Last view: 4851 days
Posted by Parasyte
Perhaps the question you should be asking is, why?


So ... If you have a 6-digit code that is working, why bother turning it into an 8-digit code? It's not like its a dumb processes (able to be done by a simple program/algorithm) anyway; you still need to know the correct input byte from the original ROM bank.

__________________________________________________________________

Because unlike 8 digit codes, 6 digit turns up 20 or more possible rom addresses.
Where 8 only has 1 or a few.

Plus i have read tutorials that stated that 6 digits have more side effects than 8 and often tend to cause crashes.
__________________________________________________________________

Parasyte
Posted on 12-07-09 10:23 PM Link | Quote | ID: 121766


Red Goomba
Level: 18

Posts: 29/48
EXP: 24784
Next: 5113

Since: 02-09-09
From: Flagstaff, AZ

Last post: 5209 days
Last view: 5187 days
Posted by Jigglysaint
Para, I thought the compare value only checks the individual value, not the rom bank. If there's no compare, then all addresses in the game are affect, but with the compare, only bytes that match the compare value will be altered. Correct me if I'm wrong though.

Edit: Found a document on it: http://tuxnes.sourceforge.net/gamegenie.html


Uh yeah, that's what I said. Didn't mean to make it sound like the comparison was for ROM bank numbers (since there is no general [easy] way to get that information in hardware). Sorry for any confusion.

Posted by born2party
Posted by Parasyte
Perhaps the question you should be asking is, why?


So ... If you have a 6-digit code that is working, why bother turning it into an 8-digit code? It's not like its a dumb processes (able to be done by a simple program/algorithm) anyway; you still need to know the correct input byte from the original ROM bank.


Because unlike 8 digit codes, 6 digit turns up 20 or more possible rom addresses.
Where 8 only has 1 or a few.

Plus i have read tutorials that stated that 6 digits have more side effects than 8 and often tend to cause crashes.


I don't understand that; possible ROM addresses? There are two ways to look at ROM in a bank-switching computer (like NES): 1) As a complete ROM chip; just one large file. 2) The same way a CPU with limited address space sees it; in smaller pieces, usually only 1 or 2 banks at a time.

In the former interpretation of "ROM addresses", each address references only a single byte. This is simple; you see files in this light all the time.

In the latter interpretation, you realize that a CPU address of something like $8000 can be remapped in hardware to point to different banks within the ROM. On the other hand, address $E000 [likely] cannot be remapped at all, and so it can only reference a single byte in a single bank.

This was a short lesson, and much important information was left out. But the gist is simple: the lack of the comparison parameter in a Game Genie code does not inherently make the game less stable or cause more crashes. There is a high probability that they will be less stable, yes. But do not take this as canon.

How do you know if you need the comparison parameter? Well, that depends on the mapper used in the game you're working with. Some mappers have 16KB of ROM space "hard wired" at $C000-$FFFF; any Game Genies address that falls within that range do not require the comparison parameter. Other mappers have 8KB "hard wired" at $E000-$FFFF. And yet others have the full 32KB of ROM space "hard wired" ($8000-$FFFF).

As for how you actually use the comparison parameter after it's determined to be necessary... well, I assume you know the data byte you're intending to replace with the code; that data byte is what you put into the comparison parameter.

Here is an example:

Assume, for a moment, that you just debugged your favorite game and found an "LDA" instruction (opcode: $A9,$xx) that loads the number of lives you start with. In this case, the $xx might be $03... Anyway, you want to replace the $03 with something a little more fun, like $32 to start with 50 lives.

Now assume the address of this instruction is at address $D5F3, and that the mapper uses an 8KB "hard wired" bank (at $E000-$FFFF). Since the address does not fall within the "hard wired" bank, using the comparison parameter is a good idea.

The opcode at $D5F3 is $A9, so the $03 must be at $D5F4; you will use that address for your Game Genie code.

Six-digit format = D5F4 : 32
Eight-digit format = D5F4 ? 03 : 32

Does that make sense? The only difference is the "? 03" -- which came from the original instruction:

$D5F3: A9 03      LDA #$03

Main - ROM Hacking - 6 to 8 lettered game genie codes New thread | New reply

Acmlmboard 2.1+4δ (2023-01-15)
© 2005-2023 Acmlm, blackhole89, Xkeeper et al.

Page rendered in 0.020 seconds. (341KB of memory used)
MySQL - queries: 47, rows: 72/72, time: 0.015 seconds.