In designing SuperGNES we wanted to elevate the expected emulator standards and make a very fun and easy experience for you the gamer. Game Genie codes add new possibilities and make game play easier for the sometimes different phone controls. Also it’s a pain to find codes and enter them one by one in the middle of your game. That’s why we put together a Game Genie code database that is instantly available while playing your game. Just check the codes you want to use. We’ve painstakingly compiled a database for your favorite titles with 4,010 Game Genie codes currently. This database will grow as we get more entires from you.
Game Genie Database
June 29th, 2009Schedule, Performance or Quality, pick 2 of 3
June 21st, 2009
The SuperGNES release is being pushed from June to July out of the main necessity of quality. With the changes we’ve had to make for our performance numbers, at this point we wouldn’t be doing anyone a favour by rushing to release. Anyway, this will allow us to put out a distinct and high quality product. Like the title of the blog says Schedule, Performance or Quality, pick two. We picked Performance and Quality so the Schedule will have to slide.
Okay now that’s over here is the good news. Sound is working great! We love some of the tunes the SNES games pumped out and it’s awesome to hear them working fully on SuperGNES.
Under the gun
June 15th, 2009
So the end of June is coming up about as fast as we are writing code. We are regression testing the new CPU and APU cores and adding more speed tweaks. Configurable controls and selectable screen sizes are done. Also the graphics engine is getting what I will call for now some “special sauce”. Unfortunately we still are not at our target FPS but this new graphics enhancement should put the graphics performance problems to bed perminately. We’ve been getting alot of great feed back from everyone for new product features and we can’t wait to start cracking on them after to get through this performance cycle.
Chipping away at the bottle necks
June 4th, 2009The ARM CPU (in which most mobile devices run on) is a very interesting processor to optimize for. Your typical Intel chip has few registers, tons of MHz and a fatty L2 and L3 memory cache. ARM is different. It’s RISC based, has 16 registers and has a small CPU cache (which the Linux kernel hogs
). The lack of cache makes you code differently. You instead need to get as much work done as possible within those 16 registers before you have to read or write to memory. This can make a big difference in speed. In C++ terms this means local variables and constants are your friends. Using the output to assembly code option on gcc has revealed how certain routines of ours are killing the memory bus. On Intel taxing the memory bus is not a problem because the L2 cache is so fast. However for ARM we’ve took the small cache to mind and refactored our code to be more memory IO efficient and that so far it has increased our performance. More FPS improvement news will follow soon.
For more optimization info check out Writing Efficient C and C Code Optimization.
First Video Demo
May 29th, 2009Finally after many requests we got around to putting together a video of SuperGNES in action. What you’re seeing is the F-Zero game demo running through on a G1 phone. Enjoy!
We have sound on Android CupCake
June 21st, 2008Playing PCM Audio with a DataBuffer seams to be been an issue with a great deal of emulator and game developers for the Android platform. Having spent some time on this we thought it would be a good idea to share what we have learned.
As of the latest released version of Android ( CupCake ), the API contains an class called AudioTrack(). This class allows users to stream local buffered PCM audio directly to the audio hardware. In previous releases stream output was only available while reading from a FILE or a URL.
Here is an example of playing a PCM file. You can find the yes_08k.pcm file in the Android sources in /external/srec/tests/pcm
public void onCreate(Bundle savedInstanceState) {
byte[] byteData;
super.onCreate(savedInstanceState);
try {
// Open the file and load the entire file into a byte array
File oFile = new File( "/sdcard/yes_08k.pcm");
byteData = new byte[(int) oFile.length()];
FileInputStream in = new FileInputStream( oFile );
in.read( byteData );
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
int intSize = android.media.AudioTrack.getMinBufferSize(8000,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
AudioTrack oTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 8000,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT, intSize,
AudioTrack.MODE_STREAM);
// Start playing data that is written
oTrack.play();
// Write the byte array to the track
oTrack.write(byteData, 0, byteData.length);
// Done writting to the track
oTrack.stop();
}
If you have a WAV file and your not sure of the Hz or Bit rate use the ‘file‘ UNIX command. Most WAV files are just PCM with a small header and should also work with the above example with a small bit of sound corruption at the beginning as the WAV header is read in as PCM data.
$ file yes.wav yes.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 8000 Hz
I hope this encourages people! We will have sound on Android CupCake!

