GGVm supports a subset of the NES's full capabilities. This subset was chosen to support the needs of most of today's homebrew developers. This enabled us to complete the project quickly enough to return to creating homebrew games. In addition, this allowed us to take large shortcuts in how the system is emulated, which enables games to run smoothly at 60 fps with little or no stuttering even on somewhat old Android devices. Please read the feature list below to get an idea of what GGVm's capabilities are.
Here is the github repository.
GGVm on Github
If you wish to donate to support the development of GGVm, you may paypal the following email address:
Here is the Wiki. This is a repository for information about publishing on digital platforms.
Here's a demo of Dushlan, an open source NES game, wrapped up in GGVm. You'll need Java to run it.
Download Dushlan GGVm jar
Here's the same demo, packaged up in GGVm for Android. You'll want to hook up a usb cable, turn on "unknown sources" in your settings, put the file somewhere and install it via a file manager on your android device.
Download Dushlan APK
Here's The Legends of Owlia (demo) packaged up in GGVm for Android.
Download The Legends of Owlia DEMO APK
Here are some games that were adapted to GGVm. Some are on Steam, itch.io, or KickStarter!
- -Nomolos Storming the CATSle (Steam Greenlight)
-The Legends of Owlia (Steam store page)
-Get 'em Gary (Itch.io, Steam Store Page)
-The Mad Wizard
-Rise of Amondus
-The Incident (Steam Greenlight)
-Mystic Searches (Steam Greenlight)
-Eskimo Bob (Steam Store Page)
Touch controls for mobile platforms are functional and close to completion.
Features and limitations:
- -Smooth 60fps play on pc systems up to ~8 years old and on Android phones and tablets up to ~3 years old that I have tested. Running at 60fps on devices as old as iPad 2nd gen.
-No input lag added beyond latency already present in the controller subsystem.
-Games must not rely on CPU for timing, only nmi (for example, Dushlan had used cpu for gameplay timing---I modified it to use nmis instead)
-6502 cpu core. Only write your game ONCE, for the NES!
-No real PPU emulation. Split screen capabilities are provided via special registers.
-No real APU emulation. Games must write to special GGVm only hardware registers to play music and sfx back from a list that you provide from your game module.
-Background sprites may partially hide foreground sprites, assuming bg sprites are solid 8x8 squares of pixels.
-You can leave out the iNES header and configure from GGVM, which discourages someone from extracting your rom.
-Due to coding audio adapter, you can gut sound-engine. Thus if anyone extracts your ROM, it'll have no audio and they wasted their time.
-Mapper 0, 2, and 30 supported. Mapper 4 support is planned.
-Live CHR-RAM streaming supported
-No undocumented cpu opcodes supported yet, but can add support
-Automatic save/restore state
-Controller configuration for XBOX 360 and Retrousb controllers, manual config for others
-Windowed or fullscreen mode
In case you're wondering, GGVm stands for: "Gradual Games Virtual Machine."