USB-NES Troubleshooting

This section details known issues with USB-NES and some workarounds.

Very Slow Mounting on Android Devices with USB-OTG

USB-NES will work with mobile systems like Android, but the drive support is very buggy and slow. Moreover, changing game carts and refreshing the cart media on these devices literally needs a USB-NES unplug-replug, and almost a minute of wait time afterwards before the system mounts it properly.

Some Android devices will automatically attempt to create a bunch of files and sub-directories in the root of any USB thumbdrive you plug into it; it is speculated this is one reason why USB-NES is struggling with Android phones. Google Pixel phones are also reportedly known to not work with USB-NES; these issues are currently under investigation in our labs.

Broken MMC5 Save RAM Access

Currently MMC5 Save RAM access does not work in the USB-NES auto-detect mode. The problem stems from the unit not being able to unlock the write-protect for the MMC5 SRAM, despite writing the correct values to the appropriate registers to enable it.

The following are mapper abstract overrides you can apply to the OVERRIDE.TXT file, to expose the cartridge ROM.SAV file in the root directory. Note the access to the cart SRAM this way is currently read-only. Also note the ROM.NES file generated in this case will be an invalid size and completely broken (don’t use the ROM.NES file at all here).

$ 1A53454E  02 01 52 08    00 00 70 00 00 00 00 00
8000  0000  6000  0000     0F 0D 0D 00       01 00  
MMC5  8K RAM FIX            @!

First, place the above code in a blank spot in OVERRIDE.TXT somewhere after the first “no cart inserted” abstract. Then set default_map_index = 1 in SETTINGS.TXT to have the unit default to the SRAM fix override when the unit is booted/detected without a cartridge inserted (open DETECT.TXT to be sure the MMC5 override is engaged like this). After initializing the unit this way, insert the MMC5 cart, and copy the ROM.SAV file out of the root directory. The above override only works with MMC5 carts with 8KB save RAM.

$ 1A53454E  02 01 52 08    00 00 80 00 00 00 00 00
8000  0000  6000  0000     0F 0D 0D 00       01 00
MMC5 16K RAM FIX            @!

Use the preceding mapper override for accessing 16 KB save RAM on applicable MMC5 carts in the same aforementioned manner as for 8 KB. Similarly, use the following mapper override on MMC5 carts for accessing 32 KB save RAM.

$ 1A53454E  02 01 52 08    00 00 90 00 00 00 00 00
8000  0000  6000  0000     0F 0D 0D 00       01 00
MMC5 32K RAM FIX            @!

Identification Errors with Bus-Conflict Mapper Boardset Types

After an upgrade to USB-NES Lite firmware version 0.70 or later, it is necessary to copy the extracted BCMTABLE.BIN file from the .zip onto the USB-NES drive.

To do this, go into SETTINGS.TXT, set BCMTABLE.BIN_enable = 1, save the file and then refresh1 your file browser to expose the BCMTABLE.BIN file in the root directory. Once the file is visible, you may copy the BCMTABLE.BIN file onto USB-NES (be sure to confirm to overwrite the existing file), and then refresh1 your browser.

From this point you may go back into the settings and disable the BCMTABLE.BIN visibility if desired.

  1. In Linux you want to unmount the USB-NES drive, press the reset button on the unit and then do a file browser refresh (try a few times until the files reappear in the previously unmounted drive). This will ensure smooth operation in Linux without having to unplug the unit from the host when modifying the USB-NES operating system.

NES Boardset Short Edge Connector Pins

Here you can see how the board’s gold edge fingers have been altered to not allow contact on the very edge of the board (except for pin 72 which is ground); USB-NES struggles to read these game boards properly without a careful cart insertion technique. Presumably this was done by Nintendo as a measure to prevent damage to the cart board hardware when being inserted & pulled from an already-powered NES deck (as ground would make contact first before any other signals). However, Nintendo eventually scrapped this edge finger convention for the more common complete type that has no such edge contact circumvention.

There are quite a few NES games out there that use boardsets with these shorter boardset edge connectors. Unfortunately due to the shallow nature of the cart connector in USB-NES it is problematic to always read these types of games properly.

The main recommended fix to access games which use these shorter cart pins that will not read properly in USB-NES is to disassemble the NES cart and remove the game board and insert the game board into USB-NES while aligning the board with the left side of the connector. You may also try aligning on the right side. In these situations, it is especially important that the cart edge connectors on the short pins are clean and free from dirt and debris.

The other suggested method to fix this issue is to use an NES->Famicom adapter daisy-chained to a Famicom->NES adapter and run the game on USB-NES through two adapters that way.

Writing Back File Data to USB-NES in Linux

Text-editor saves to files like SETTINGS.TXT or OVERRIDE.TXT work in Linux but are limited to one time; after this you must unmount the drive from the file system, hit the USB-NES reset button and then re-read the drive or refresh your file browser (you may have to try to refresh a few times in a row first). This works without having to unplug the unit at all from the host, and you may repeat this process indefinitely when editing system files on USB-NES in Linux for mostly smooth operation.

Previous issues have been resolved with the USB-NES Kernel 0.08 and USB-NES lite 0.71 firmware update.

On older versions of USB-NES kernel firmware, writing file data to USB-NES in Linux is limited to using the CP line command. Moreover, drag + drop file actions do not work on USB-NES in Linux at the moment, nor do direct saves of text files from the device using common editors.

The workaround for modifying SETTINGS.TXT on older USB-NES kernel firmware is to copy the file to your local hard drive and modify it there. Then use line command CP to copy the file to USB-NES and this will work. You will also have to reset the unit after this to re-initialize the unit. Note that downloading the FIRMWARE.BIN file directly to USB-NES from the firmware updates page does works (after the link is made, right-click it and say “save link as”).

It is highly recommended you upgrade your USB-NES kernel and firmware to the latest versions to get the best file writing performance in Linux.

Using the Media Reset Button Effectively

This issue has mostly been resolved with the USB-NES Kernel 0.07 and USB-NES lite 0.70 firmware updates; this section only describes the behaviour of older firmware.

On Windows 10 you need to press and hold the reset button to force the host to remount the file system. But if you hold reset too long, Windows will throw the USB port and you will have to re-connect the device.

In Linux you can hold the reset button down for about 2 seconds and then the host will acknowledge the change in cart media after a file browser reset. However, too short of a reset button press won’t do anything, and holding it too long basically screws it up until you unplug the thing.

It is highly recommended you upgrade your USB-NES kernel and firmware to the latest versions to get the best overall media change performance across platforms.

False Battery-Backed Save RAM Detection

Determining whether a game has battery-backed save RAM usually involves a test for detecting RAM and then powering down the RAM for one second and then back again to test for the persistence of a signature1 placed there before powerdown. This system works well for identifying games that have fresh batteries in them and usually fails if a cartridge has a dead battery.

  1. Being mindful to restore the original save RAM data back to the state before the signature write.

Occasionally however a game that does not have a battery save will be detected by USB-NES as having a save file, when in fact there is just the volatile RAM. This happens because the RAM has some persistence after shutdown even after waiting for 1 second. A longer period may be require for the RAM to discharge to avoid a false detection. However, in the rare cases of battery-save false detection (such as in SMB3), there really are no known negative side-effects of this (other than the auto-creation of a superfluous 8 KB .SAV file by the emulator). Moreover, reliable save RAM detection in NES carts is still a developing area of USB-NES.