While we are talking about game genie, I had a question regarding exactly how it works. Here is my understanding, please correct me if I make a mistake. The GG maps itself to the reset vector, so that it's code runs at power on. The code in the GG displays the menu and lets you enter your codes. When you hit "start" the GG then does a JMP to the address that the cartridge has at the reset vector, and your game runs.
The part I'm having trouble with is exactly how the altering of memory gets done. It obviously doesn't alter the memory, then JMP to the carts reset vector because that wouldn't work. The init code for the game would overwrite what the GG had written. The only thing I can think of is that the GG actually monitors the data/address buses and "doctors up" the reads from the altered addresses to return the new values instead of what is actually in the memory. It seems like this type of monitoring would need to be very fast in order to hijack the data bus without violating the timing restrictions on the CPU. I guess you could do it with a FPGA or PLD, but that would be too expensive to have sold for $30. Any help is appreciated.