PocketNES HowTo

From PHWiki

This article contains practical guides for how to do stuff related to PocketNES. For more information, see the PocketNES FAQ.

Contents

Basics

How to use PocketNES, the basics

Since PocketNES runs on a Gameboy Advance from a flash card, and not from a hard drive with an operative system there are some things different from a regular emulator. Most importantly, you don't keep the .nes roms separately, but they are included in the same file with the emulator.
The basic idea is that you put PocketNES with all the .nes roms you want to play into one .gba rom file, and then select which game you want to play from a menu within the emulator.
If this all sounds complicated, fear not. There are tools to automate all this for you! Read on!

How to get PocketNES to work, the quick and easy way

Download PocketNES Menu Maker from the downloads page.

Put all the files from the zip in the same directory with the nes roms you want to use and the pocketnes.gba. Double-click the pnesmmw.exe and click the "Make Rom" button.

You should now get a PocketNESMenu.gba in that directory.

Flash this to your Flash Card and play!

If the flash program says that the size is incorrect, just say OK, it will work anyway.

PocketNES Menu Maker automatically adds the best options known for sprite following, making it good for beginners.

If you have problems getting it to work check out the troubleshooting.

There are also several other PocketNES menu creator programs out, see downloads page. Read their respective documentation for info on how to use them.

How to control PocketNES

  • Game selection menu
Up and down on the pad moves up and down in the menu, up from the first game hops down to the last, left and right hops up and down 10 games at a time. A, B, or Start starts the selected game.
  • In-game
The controls work exactly like the NES controls, except for the R and L shoulder buttons.

Pressing L+R opens the onboard menu, up and down selects, A activates the selected option. The version number is in the bottom right on this menu screen.

To cancel out of the menu push L+R again or push B.

  • In-game menu
Autofire: ON or OFF for each button, or use "with R", hold down the R button to turn autofire on while pressing A or B.
Controller: 1P is the normal 1 player controller while 2P is the second player's control pad, usefull for 2 player games etc, Link is used for link play.
Display: SCALED is also known as fullscreen, screen shrunk to fit the GBA screen, (w/sprite) means both the background and sprites are scaled. UNSCALED is the screen in full size with the top/bottom cut off by the GBA screen. UNSCALED (Auto) means sprite following is turned on, only works if variables has been entered with the menu creator.
Link Transfer: Sends PocketNES to a linked GBA for link play.
Manage SRAM: Allows you to delete SRAM saves, if you have none it does nothing.
Save State: brings up the Save State submenu (see below).
Load State: brings up the Load State submenu (see below).
Sleep: makes the GBA go into "sleep" mode to preserve power, press SELECT+START to wake it up again. After 5 minutes of inactivity sleep mode goes on automatically.
Restart: reboots the emulator to the menu with the last game you selected, great for switching games without having to turn off the GBA.
Exit: Exits PocketNES back to Pogoshell or Menu loader. Might not work with all cards, confirmed to work with Pogoshell and EZFA loader.
  • Save State submenu
Select a slot where you want to save, <NEW> to save a new slot. To delete a save you can either highlight that save and press SELECT or simply overwrite it with a new save. At the bottom of the screen you can see the time of each save, the size of each save, and also the size of all the saves, note that there is only 56k for states now as 8k is reserved for SRAM saving.
  • Load State submenu
Select which state you want to load, press A/B to load it. You can see the time of each save, the size of each save, and also the size of all the saves. The states are saved based on names and checksums so even if you change the order of the roms, or even their names, the correct save loads. It does not matter from within what game you load the save.
  • In-game R and L buttons
Max speed/Slow motion: L+START switches between unthrottled/throttled/slow motion mode.
Quick load: R+START loads the last savestate of the current rom.
Quick save: R+SELECT saves to the last savestate of the current rom (or makes a new one if none exist).
Unscaled mode: L scrolls the screen up, R scrolls the screen down.
Scaled mode: Press L+SELECT to toggle where the lines are cut in the background for scaling, can help games look better, text more readable and so on. Note that sprites are scaled differently and not affected by this.
VS Arcade games: Tap START for credits and press SELECT to begin game. For two players you need to have more than one credit and then go to Controller: 2P and press SELECT. Note that there's a timer on the coin insert (won't register if you hold it down too long).

How to do linked play

  • 1 Cart Link Transfer (2 players):
Sends PocketNES to another GBA. The other GBA must be in multiboot receive mode (no cartridge inserted, powered on and waiting with the "GAME BOY" logo displayed). Only one game can be sent at a time, and only if it's small enough to send (approx. 190kB or less).
Detailed step by step intructions:
  1. insert card with flashed pocketnes
  2. connect link cable to another GBA
  3. turn on both GBAs
  4. pick a game
  5. press L+R
  6. choose "Link transfer" and wait for it to finish
  7. both GBAs should be running pocketnes now. on BOTH GBAs, go back to the menu (L+R) and change the controller type to "Link2P".
  8. you might have to toggle between P1 and Link2P a few times before it works.
  9. exit the menu
both GBAs should now restart and be running in linked 2-player mode.
  • 1 Cart Link Transfer (3-4 players):
Same as the above except:
  1. wait for the transfer to finish on all the GBAs
  2. on all GBAs select Link3P if you have 3 GBAs and Link4P if you have 4 GBAs.
  3. the "master" GBA, the one sending the game, must exit the menu last to restart the game.
  • 2 Cart Link Play:
  1. Go to the menu and change Controller: to read "Link2P" for 2 players, "Link3P" for 3 players, etc.
  2. Once this is done on all connected GBAs, the game will restart and you can begin playing.
  • Dummy linking:
This is used for linking up bigger roms than can be sent with single cart linking.
  1. Send any small rom to the second GBA.
  2. Start the big game you want to play on the first GBA.
  3. Now the controls from the second GBA should work to control the game you want to play.
Just ignore the screen of the second GBA, both players should look at the screen of the first GBA.
This is most useful with the Gameboy Player for Gamecube, since it's easy for two people to look at the same TV. But it also works on the regular GBA even though it's kinda hard for two people to see the small screen.

If the link is lost (cable is pulled out, or either GBA is restarted), link must be re-initiated.

Linking with PocketNES doesn't work with all flash cards and software. Linking does not work with all menu loaders, and it doesn't work with Pogoshell v 2. See Does PocketNES work with all brands of flash cards? for more info.

Use an official Nintendo link cable when linking with PocketNES. Unofficial third party link cables usually do not work. If you already have one, by all means try it and see if it works, but if you buy a link cable to use with PocketNES save yourself the hassle and get a Nintendo cable from the start.

Even if an unofficial link cable works with regular GBA games it will probably not work with PocketNES. This is because the third party cables were made to simulate the workings of the official cable as closely as possible, but is not doing that perfectly. The GBA cable is more than a simple straight through cable as it's got some circuitry in the middle to handle linking with more than 2 players. In a similar manner PocketNES tries to do what the actual Nintendo licensed linking code does, but it's not doing it quite right. So the combination of hardware and software that is slighty off leads to the linking not working.

How to use PocketNES with Gameboy Player on Gamecube

Flashcards and PocketNES works fine on the Gameboy Player, so there's not a lot to it. But there are some settings you should use to avoid flickering or shaking of the screen. Run the Gameboy Player at 60hz and turn on the soft filter.

How to use PogoNES and the NSF player

Pogoshell is a file system for Gameboy Advance. You can find more info at the Pogoshell SourceForge site. There's also a very nice FAQ site and a Tutorial site.

The NSF player should be easy to use and work good. PogoNES works fine but you can't set any sprite following or other variables.

If you want to use variables you can build a menu file using one of the tools in downloads, and then use this as any other GBA game in Pogoshell.

Please note that pogoshell itself is case sensitive and you either have to make all your nes roms extension in upper case (.NES not .nes) or add the following to your pogoshell file types:

nes 13 /.plugins/NES.bin
NES 13 /.plugins/NES.bin

where 13 is the the icon number you want.

This of course also works for .NSF files or any other pogoshell extension.

How to use flash cards

Since this is a PocketNES article and not a flash card article you will only find some general info on flash cards here.

For info on specific flash card brands and their compatibility issues with PocketNES, see the FAQ.

General Tips

  • Make sure you know how your brand of flash card works, and how the tools you are using works.
  • Make sure the software and drivers you are using are actually for your specific brand. EZ Flash is different from EZFA and those are both different from EZ2, etc. Even if drivers and software for another brand may actually work, when using non-standard homebrew roms like PocketNES it's more likely to run into problems.
  • Use the latest version of the flashing software.
  • Turn off any auto-patching or save-fixing in the flashing software, PocketNES uses SRAM and shouldn't need fixing.
  • Make sure PocketNES has access to 64kbyte (512kbit) of SRAM to itself, if it has less it might get over-written by or over-write saves from other games.
  • Always back up the PocketNES save as 64kbyte (512kbit).

If things go wrong

Some things you should try if PocketNES doesn't work:

  • If you can't get PocketNES to work in a multiboot/loader menu with other roms try flashing it as a single rom.
  • Usually, but not always the latest version of the flashing software is the best, so try that first. If that doesn't work, try downgrading to an older version.
  • Try completely clearing out the SRAM. If your flashing software has no feature to do this, flash a blank SRAM file.
  • If you get a file size error or similar from the flashing software you need to pad the rom to the correct file size. See How to get PocketNES to work with multiboot.

Saving problems are almost always due to the flash card software and tools, see below.

Also, check the known bugs section of the FAQ.

Troubleshooting

Troubleshooting Common Problems

  • Link play doesn't work.
  • Get an official Nintendo link cable.
  • Keep retrying, redo each step of the linking process a few times, and reboot both GBAs.
For more details see How to do linked play.
On some flash cards linking doesn't seem to be working if PocketNES isn't the only ROM on the card, see the FAQ.
  • Saving doesn't work at all or saves disappears sometimes when the GBA is switched off.
  • Any problems with the saving is basically always because of the flash card software or tools and not PocketNES. It's a good idea to read up on exactly how the tools you're using works. Note that PocketNES uses 64kbyte (512kbit) save and on a lot of flash cards this can lead to the save overwriting or getting overwritten by other games saves, be sure to allocate enough space for it.
  • If the saves don't work properly you can also try completely clearing out the SRAM and try again. If your flashing software has no feature to do this, flash a blank SRAM file.
For more info on known save issues with specific flash card brands see the FAQ.
For general advice on how to use flash cards, see above.
Having said all this there is a very rare bug in PocketNES that will corrupt the saves, but if this happens the saves will not just up and disappear, but when you try to load a save the text of the save names will all be corrupt random jibberish or lines. This is a lot rarer than flash card problems. It's happened to me twice in two years.
To be safe, backup your PocketNES save frequently.
  • The screen turns up blank, messed up garbage, only a few games work, or nothing works but the menu.
Try checking these things:
  • Make sure that pocketnes.gba (and any other files needed by the builder) is in the same directory where you create the rom.
  • Try using another menu creator tool, there's several to choose from in downloads
  • Try using another flasher tool to flash your card, or try another version of the tool you are using. Usually the latest version should work best, but not always.
  • Make sure your roms aren't corrupt. The easiest way is to use PocketNES Menu Maker from downloads.
Put it in the directory where you keep your roms, open pnesmmw.exe and check the list, any bad roms are marked [bad], try excluding them and build the menu again.
If that doesn't help also try exluding [unk] unknown roms and [ovr] overdumped roms.
PocketNES can handle bad roms, so most of the overdumps ([o] in GoodNES, [ovr] in Menu Maker) should work, but some of the bad dumps ([b] in GoodNES, [bad] in Menu Maker) might not, or the game will act weird. If a game is marked [bad] it is highly recommended that you find a clean dump to avoid problems.
  • If you are having problems with a game that should be working fine (see the compatibility list, always try verifying the rom to make sure you don't have a bad dump.
To verify and rename the roms see How to verify NES roms.
To repair overdumped roms see How to fix corrupt NES ROMs.
  • The game plays too fast.
Most likely you have a PAL rom, it should be marked (E) in GoodNES. See below how to use GoodNES to rename your roms to identify any PAL roms.
You can try enable the pal timing variable but for most games it doesn't work very good. Try finding a (U) or even (J) rom instead, those run normal speed on PocketNES.


How to verify NES roms

It is recommened to rename and verify your roms using GoodNES (the Menu Maker's database is based on GoodNES) to make sure they aren't bad dumps and keep track of your roms.
GoodNES is a rom renamer, but it also looks up the checksum of the roms to verify that they aren't corrupt in any way.
Get GoodNES from downloads, unzip the contents to the same directory as the nes roms you want to check. Go to DOS (or the command prompt) and type
goodnes rename
OR download the GoodNESbat, unzip that to the same dir, and double click it.
The recognized roms will now be renamed to their correct and full names and moved to a new directory, NESRen. Anything left in the original directory are roms that was not recognised, and are problably corrupt in some way.

Now look at the roms in the NESRen dir. Any roms with [b] or [o] is a bad dump and should be avoided. Look in the GoodCodes.txt for info on the other codes.
Sometimes even roms verified by GoodNES are faulty somehow, so it's not foolproof.
Also, GoodNES does not check the headers of the roms, so for example, the wrong mapper can be given in the header, making the graphics garbled in PocketNES. If you get problems like this, try repair the rom with NesToy, even if GoodNES says it's fine.
You can try to fix the bad roms, see How to fix corrupt NES roms.
Read the GoodNES docus and try typing GoodNES with no variables in DOS to see other ways to verify the roms without renaming them etc.
If you get a strange error try downloading zlib.dll and put in your C:\Windows\system or equivalent or in the same folder with GoodNES.


How to fix corrupt NES ROMs

If you suspect that some of your NES Roms are corrupt, or if GoodNES marked them as [o] overdump or [b] bad dump, you could try fixing them.
To fix nes roms, first get NesToy from downloads, and put it in the same directory as the roms.
The easiest way to repair the roms is to go to DOS and type
nestoy -doall
this will repair and rename the roms. If you just want to resize them (good for overdumps, [o] in GoodNES) just use
nestoy -resize
and similarly, to repair the headers only,
nestoy -repair
The files will be backed up before repair.
If some of the roms aren't recognized by NesToy, try using GoodNES which has a bigger database.
See nestoy.txt in the zip for info on other commands to use.


Intermediary

How to use options and variables (for sprite following)

If you just want to use sprite following, the easiest way is to download PocketNES Menu Maker which automatically assigns all the known variables.
Most of the other menu creator programs have similar options, read their documentation for more info.
See What are options or variables? in the FAQ for more detailed info on each option.


How to get PocketNES to display a splash screen

Most menu creators include some option to add a splash screen.
A splash screen should be 240x160 pixels.
Hoe's ROM Builder automatically convert any picture you want to include. Get it from Hoe's site.
PocketNES Menu Maker and some of the other creators in downloads can also include a splash screen, but it needs to be in raw format. You can find an example file in downloads too.
To make your own raw image, first create a 240x160 bitmap (.BMP). Get Bimbo from downloads. (or use your favourite tool from GBADev.) Load your BMP, then export to Mode 3.


How to get PocketNES to work with multiboot

PocketNES version 7 and later was released with a proper header, and if you use a pro flash card or newer you don't have to fix anything for it to work multibooted together with other GBA roms.
On the turbo cards and older you have to "pad" the size of the rom to make it fit properly in the bank. The easiest way is to use the latest version of PocketNES Menu Maker (get it from downloads). Just enable padding and you're all set.


How to extract NES roms from a PocketNES compilation GBA rom

Get PocketNES ROM Splitter from Hoe's site and open the GBA rom with this. The program is easy to use and should be self explanatory.


Advanced

How to find sprite numbers

Sprite numbers are found easiest by trial and error. I made two files to facilitate this.
Download MenuTest to get them both.
Please note that this only works with the old menu system before version 7a, so use this with PocketNES version 7 or older.
Exctract the files into a directory with the nes file you want to test and pocketnes.gba. If there is more than one nes rom in the dir it won't work. You need to test one rom at a time.
Double click nes2gbatest.bat. This creates NESTest.GBA. Flash this and run it on the GBA for testing. When there is only one nesrom but several menu items the emulator always use the one rom, but with the different options in the menu, nifty, isn't it? :D
The first single numbers in the list (1-12) are for testing speed hacks alone. Try these if you are having speed problems or flickering graphics.
The ones that follows are for finding sprite numbers for screen following. 016-2516 tests sprite following (16) that is 16|0, 16|1 etc.
The most common sprite numbers are 0-3,8, and 11. Try these first before going down the whole list.
Once you find the best options for speed hacks and/or sprite following, write the variables down so you can use them for your menu as described above
Sprite number following doesn't always work, some games change the sprite order around. Sometimes the screen start to shake or break up or other problems. If this happen you can try finding the sprite's memory location instead, see below.


How to find sprite height memory location

This is for use with the |32 option, and it's kind of advanced so it's best to try and find the sprite number first instead.
I like to use the NESten emulator. You can find this at Zophar's Domain.
Load the rom and start the game. Open the Cheat Console from the CPU menu. New search, click on the empty search, search type "change", start search. It will now say too many results. Don't worry this is to be expected. Jump up, or go up, whatever, while your sprite is still higher than before, click on "changed" in the cheat window. Make sure you can see both windows at the same time! Jump down, or go down, and click changed again. If there are other sprites moving onscreen (there usually is) click equal a few times to try to eliminate them. Go left and right a few times (WITHOUT changing your height if possible), click Equal in between. Remember we are looking for the height so this hopefully eliminates the horisontal memory location. Jump up to a higher location and repeat... It takes a while to get the hang of it, but once you understand the logic it's a lot easier.
Once you get the list down to a few numbers (1 if you're lucky, 10 if you're not) you need to convert these numbers to decimal, as they are now in hexadecimal. If you have a hex-editor or something else that can do this, use it. If not I put a simple little page with javascript to do it here.
When you have all your address numbers in binary turn them into a test menu as the one used above, but put like
32-1035|32|1035
32-1281|32|1281
etc
Go down the list to test the addresses you found, and with a little luck, one of them will work!


Questions

Still need help?

If you still don't get it to work, or need more help, take it to the forum!


See also

PocketNES, PocketNES FAQ