Running my games on NES (Nintendo Entertainment System) hardware using PowerPak


Note – This is not an installation guide.  This is the process I went through to setup the PowerPak to play my custom developed NES games.

I recently ordered a PowerPak from RetroUSB, which allows classic 8-bit NES (Nintendo Entertainment System) games to be played on actual NES hardware. This is a description of the steps that I followed to play the two NES games that I created (Space Dude and Prez) using the RetroUSB cart.

PowerPak

The first thing to know is that he PowerPak uses a CompactFlash (CF) card to store the NES game files.  CompactFlash cards appear to be frequently used with digital cameras, and are about 1.5 inches wide and tall.  A CompactFlash card does not come with the PowerPak, which is noted on the item page, but I overlooked that when I ordered the PowerPak.  Additionally, a CompactFlash card reader is also required to copy the NES game files to the Compact Flash card.  The card will cost around $20 to $100 depending on the size of the card (as of the time this is being written).  A simple Compact Flash card reader will cost around $15.

I ordered the Unitek USB card reader as well as SanDisk Ultra 16GB and SanDisk Extreme 128GB CompactFlash cards.  The RetroUSB site notes that larger CompactFlash cards with higher write speeds may not work with the PowerPak, which is why I ordered the 16GB card just in case the 128GB card didn’t work.  The 128GB card actually came with a nice small carrying case.

Compact Flash (CF) cards and reader

I plugged the card reader into the USB 3 port on my desktop computer, inserted the 128GB CompactFlash card, and it automatically detected the device, created an E: drive, and opened a folder for the CompactFlash card.  I copied my two NES game files to the new folder.

CompactFlash (CF) card in reader Custom developed NES game files

Next, I pulled the CompactFlash card out of the reader and put face up into the top of the PowerPak.  The card has to be pressed in completely so that the card is flush with the top of the cartridge.  Then press down on the tab to lock it into place.  To eject the card, push the tab back up then press down.

CompactFLash (CF) card in PowerPak Compact Flash (CF) card inserted into PowerPak PowerPak tab pressed down

The moment of truth is actually inserting the PowerPak into an actual Nintendo Entertainment System from the 1980s and pressing the power button.  Unfortunately, on the first try it returned “PowerPak file not found”.  However, it did at least detect the PowerPak and display a message.

Inserting PowerPak into NES (Nintendo Entertainment System) console PowerPak in NES (Nintendo Entertainment System) console NES (Nintendo Entertainment System) console powered on with PowerPak PowerPak missing Mappers POWERPAK directory

 

Looking at the online PowerPak user manual, the first check is to see if the CompactFlash card is using either FAT16 or FAT32 file system.  This can be checked by putting the card in the card reader, right clicking the card reader drive (such as E:), and checking the file system.  In my case, it was using FAT32.  If not, right clicking the drive should bring up an option to format the card.  On my system, there was only an exFAT option, which doesn’t appear to be exactly the same as FAT16 or FAT32.  If that is the case, then other options (Linux?) may be required to correctly format the CompactFlash card.  I didn’t look into it since my card was already formatted as FAT32 

Checking FAT file system

Next I tried the 16GB CompactFlash drive and copied my NES files using the same process, and got the same “PowerPak file not found” messsage.  I went back to the manual and noticed that the “POWERPAK directory” needed to be downloaded from the RetroUSB website, decompressed, and copied to the CompactFlash drive.  Going back to the PowerPak page, this appears to be what is referred to as the “Mappers” file.  I downloaded the PowerPak Mappers v1.34 file, extracted to a folder on my desktop, and then copied it to the 128GB CompactFlash card.

Copying POWERPAK folder to CompactFlash (CF) card

Making some progress.  Now I was able to see the PowerPak logo on the title screen.  Pressing start brings up a screen to enter Game Genie codes.  Pressing start again allowed me to select one of the two NES games that I copied to the CompactFlash drive.  The display was cut off some on the top of the screen on the television, but I could still determine which game it was.  Pressing start again started the load process.  Unfortunately, the game never loaded.  After waiting about a minute I tried pressing reset on the console deck but it returned an error.  Then I turned the power on and off, which displayed the title screen and code entry screens again, but did not let me select one of my games.  It just went directly to the game loading screen that hangs.  I also adjusted the television picture and brightness to make the photos look not as blurry.

PowerPak title screen (Press A to choose a game file) PowerPak Game Genie code entry screen PowerPak game selection screen PowerPak loading game

Going back to the manual again, I learned that pressing start on the title menu loads the last loaded game.  To get the game selection screen, the A button needs to be pressed on the title screen.  Then select your game.  Important – On the Game Genie code entry screen, it should display the filename of the game you just selected.  I was wondering why it showed TETRIS.NES, which wasn’t even on my CompactFlash card.  So again, press the A button (not start) on the title screen, then select your game, then select Start Game.  When in doubt, press the A button instead of the start button.

After making that correction, my games loaded successfully!  My Prez game looked great, and looked just like it does on the emulator.  Except that it’s actually running on an original Nintendo console!  The Space Dude game ran as well, but some of the colors were off, such as the ship being colored black.  Resolving that may require going back and looking at the original 6502 code that I wrote and modifying the colors.

PowerPak correctly selected PREZ.NES game Space Dude running on NES (Nintendo Entertainment System) hardware using PowerPak PREZ running on NES (Nintendo Entertainment System) hardware using PowerPak PREZ running on NES (Nintendo Entertainment System) hardware using PowerPak PREZ running on NES (Nintendo Entertainment System) hardware using PowerPak

By the way, it worked correctly on the 128 GB CompactFlash card.  For some reason, I got copy failures when copying the POWERPAK Mappers folder to the 16 GB card.  Since it is working for the 128 GB card, I haven’t went back to look at the problem with the 16 GB card.  Maybe it needs to be reformatted.  I think I got impatient waiting for the files to copy and pulled it out of the reader as it was estimating copy space.

Overall, I am happy with the PowerPak and thrilled to see my games running on an actual NES and playing with an NES controller.  I won’t say that it’s easy enough for the average Joe to setup without spending some time.  It took me about 3 hours to figure everything out, while also writing and taking pictures for this post.  If I were to give one of these to somebody as a Christmas present, I would probably go ahead and setup the CompactFlash card with everything, because most people probably don’t own CompactFlash card readers.  I hadn’t even heard of CompactFlash card until I bought the PowerPak and noticed that the card slot was for something I hadn’t used before.  I would also definitely let anyone using it know to press the A button on the title screen to load a game, because most people just assume that the A button and start button do the same thing, and the start button was usually the default for starting most NES games.


February 2020 Summary

This month I continued to work on SDL Shooter, which is a space shooter written in SDL and C.  This game started as a presentation demo for the December 2019 Knoxville Game Design meeting.  The project source code is available on my GitHub account.  I’m hoping to release it on more platforms when it gets to a point where I feel that it is complete.  Right now I’m just having fun adding new types of enemies.

 

  • Foxtrot – Moves a few units either vertically or horizontally, pauses, and then moves in a new direction.
  • Golf – Snake type enemy that has a random number of tail links.  Each link of the tail must be damaged before the head can be damaged.  Moves in a sine wave at variable rates.
  • Hotel – Stationary enemy that constantly fires projectiles in a radial fashion.
  • India – Large enemy that explodes into four smaller enemies when damaged.  When the four smaller enemies are damaged they explode into eight even smaller enemies.  I need to make the explosion angles random, instead of the standard 90/180/270 and 45/90,135, etc angles.
  • Juliett – Hopper enemy that jumps in a parabola one to three units horizontally.  One issue is two of these enemies can jump to the same spot and overlap.  This could be solved by adding a target location variable for each enemy, and determine if another enemy has claimed that spot before jumping there.  I would also like to have the enemy attack the player’s ship in some way.  Either charge the player’s ship when it is aligned vertically, or shoot webs at the player’s ship to slow it down like in Zekkou no Tomodachi.
  • Kilo – A random number is displayed on top, and the player must shoot the correct binary sequence to defeat this enemy.  Added the current “attack value” below the target value, which makes completing the binary sequence a little easier.  The enemy has between 3 and 5 bits, so the maximum value for a 3 bit enemy is 7 and the maximum for a 5 bit enemy is 31.
  • Lima – A bat type enemy that starts sleeping, and then awakes and chases the player when the ship is near.  The enemy is only vulnerable when it is not sleeping.  The amount of time that it takes for the enemy to wake up is random.  The second level enemy moves faster and takes more damage to defeat.
  • Mike – Color orb enemy.  Three small orbs revolve around the center, which are either red, green, or blue.  The player must shoot the correct revolving orb to match the center.  If the center is yellow, cyan, or magenta, then it takes the correct two orb combination to defeat the enemy (such as cyan = green and blue).  Shooting an incorrect orb will make the orbs revolve faster for a short period of time and the enemy will shoot at the player’s ship.

I checked my Microsoft developer dashboard today to see if the XBox One Creators Program was still running.  I noticed that Kitty’s Adventure has now passed 50,000 acquisitions between XBox One and Windows Store.  It is by far the most popular game that I’ve released to this day.

Also this month, we had a great turnout for the online Knoxville Game Design Meeting.  This month’s topic was Java Game Development.

I spent some time updating my two college work pages for Georgia Tech and the University of Tennessee.  Links to those two pages are now displayed on the main menu on my site under Education.  I also found more of my old websites, which I uploaded and linked on my wiki page under Historical Pages.  I uploaded the source code for some projects that were missing, such as the Predator database projects.

Blender Simulation of Liquid Filling a Cocktail Glass


I finally resolved a problem that has plagued me for years, which is simulating liquid filling in a cocktail glass. It seems like this could be solved with a simple scale in the upward direction in Unity, but it’s a lot more complex. My cocktail glass model has two meshes, one for the glass which remains static and another for the fluid which increases in size as the glass is filled. The fluid mesh is an upsidedown cone with a flattened top. Simply scaling the fluid mesh will result in the fluid mesh not correctly filling the glass.

Simple scale of entire fluid mesh gives incorrect fill of cocktail glass
Simple scale of entire fluid mesh gives incorrect fill of cocktail glass

When I created the original fluid mesh in Blender , I believe I used the boolean difference modifier, but it’s been years since I created it so I could have possibly used some other method. For the animation, I used an armature in Blender with two bones. A bottom bone for controlling the ring of vertexes at the bottom of the fluid mesh and a top bone for controlling the ring of vertexes at the top of the mesh.

The new 2.80 version of Blender has significant changes for weight painting. I created the following infographic to show the process I use for weight painting a mesh. For my fuild mesh, I set full wieght of the top vertexes to the top bone, and the full weight of the bottom vertexes to the bottom bone.

Weight Painting in Blender 2.80

To solve the liquid filling problem, the bottom set of vertexes must remain unchanged, while the top vertexes move upward and scale outward. The fluid mesh is modeled with the glass filled. Therefore, in Blender the default pose is the last frame in the animation. I used 60 frames for this animation, so I set the keyframe for the 60th frame with the default pose. It is important to set the keying mode to location, rotation, and scale. In most of my games, I only set the key mode to location and rotation, since game objects are rarely ever scaled.

To create the filling effect, in Animation mode I set the frame in the timeline to the first frame. Then I select the top bone and scale it inward (on the X and Y axes) so that it matches the same diameter as the bottom of the glass (and same diameter as the ring of bottom vertexes). Then I translate the top bone downward, until it exactly overlaps with the bottom ring of vertexes. Then I add a keyframe for the first frame. Pressing play will show the simulated liquid starting from the bottom of the glass and filling to the rim of the glass.

Correct cocktail glass fill animation using two armature bones
Correct cocktail glass fill animation using two armature bones

I plan to use this new liquid fill animation technique to update Bartender Game in the near future.