PocketNES Hacks
Here you will find the various versions of PocketNES, an NES emulator for the Gameboy Advance, I've forked from. There's three major branches:
- PocketNES-k
- The first was an attempt to add rom compression support to PocketNES. Unfortunately, it has the added side-effect of being incredibly ugly internally; this is because the ROM is decompressed over the same area used for saving/loading states, sram, etc. As a result, every time any type of saving/loading occured, the entire ROM had to be decompressed. This made it difficult to upgrade. Also, a special build program had to be used if one wanted to make a compilation, as the .nes header was compressed along with everything else in the ROM, making the PocketNES ROM detector fail to detect compressed file. Because of this, this fork is dead.
- PocketNES-cs[d]
- The second major fork was in fact a fork of Dwedit's PocketNES /w Cheats. The first version merely added the ability to save cheats as was known as c[heat] s[aver]. The second version added the ability to include descriptions of cheats, a pretty useful addition. It was named c[heat] s[aver] [with] d[escriptions]. These versions don't have any ROM compression support and are obsolete.
- PocketNES...k
- The third major fork is based off PocketNES-csd. It adds back compression, though a different type I call N[ES] P[artial] C[ompression]. This was primarily chosen to try to better utilize the 128KB of RAM that I thought at the time aws available (I later learned it was only 120KB). With 128KB seemingly avaiable, it be possible to compress all 128KB or smaller files completely (minus the .nes header) while simutaneously offering partial compression for ROMs with either a Pr[o]g[ram] ROM or Ch[a]r[acter] ROM of 128KB or smaller.
- Having now learned that only 120KB is avaiable, PocketNES...k has been forced to do the same sort of ROM decompression of saves. The good news, however, is that because PocketNES...k uses 64KB less for decompressed ROMs, it's only necessary to do ROM decompression after state saves. More work is still needed to further reduce when ROM decompression occurs (for example, smaller ROMs and some other cases where ROM decompression still occurs but is probably not necessary).
- One final thing of note is PocketNES...k supports more than just LZO for decompression. Currently LZO, LZSS (aka GBA LZ77), and aPACK compression algorithms are supported. Because of the partial compression, of course, standard compression tools do not work. Instead, an lzo compressor is included with PocketNES...k and an apack compressor is available separately. More work on the apack compressor is needed to improve things such as compression rate and to closer match what the official apack compressor is capable of.
SRAM
Here are two small programs that might be useful for those who use just about any version of PocketNES.
- 8k - Almost all versions of PocketNES use the last 8K of GBA SRAM to store the last game played's SRAM. This is a small program which allows you to extract that 8K. This will probably be superceeded by Pocket Sav Organizer in the future.
- sram - This is a small program to set/unset the SRAM bit in an .nes rom. Try using this if it appears that PocketNES isn't using a game's built-in saving system.
Thanks
I'd like to thank loopy, FluBBa, and Dwedit each for their various contrabutions to PocketNES.