Wanting to learn more about the NES, I decided to write my own emulator, and today I'm releasing it into the wild. I plan to do a lot more work on it, and I have some interesting ideas that I hope will carve it into a niche of its own.
Some features of note include NTSC simulation, gameplay recording, mid-instruction cycle-accuracy, game genie support.
Currently Supported Mappers: 0, 1, 2, 3, 4, 5, 7, 9, 10, 11, 13, 16, 18, 19, 28, 34, 66, 69, 71, 79, 85, 118, 119, 140, 163, 185, 228, 232
Many difficult to emulate games work, such as BattleToads, Bee-52, Mig 29 Soviet Fighter, and Crystalis to name a few.
I attempted cycle-accuracy in the CPU and PPU, and have more or less achieved it. There is still a lot more work to be done, but it's totally playable currently.
I plan on putting the code up soon under an unrestrictive license (MIT maybe), after I clean it up a little.Download Any-Yes 0.2.0
Let me know what you think, I certainly plan on improving it greatly! Thanks!
Instructions, from the readme:
To run: You must have Java installed. Simply double click the .jar file if you are in Windows.
If that doesn't work, or you are in Linux, run this command:
java -jar any-yes.jar
Put ROMs in the included ROMS folder, which is the easiest method of accessing them.
You can also navigate to whereever they are using the built-in file browser, but it's still somewhat of a work in prgress.
The file browser is simply a frontend. To set key mappings and other options, you must launch a game.
To navigate, click files or directories. To go up to a previous directory, click the folder name in the top bar.
If you need to change the start-up directory, edit last_dir.txt, which is in the loader/config/all/ subdirectory of the config location (see below)
You can make the window large by double clicking the title bar, or dragging the edges to resize. True fullscreen support will come soon.
Zip support is very temperamental, some zip files refuse to open currently. If you run into this problem, please unzip the rom and try again.
To map controller controls:
Press Escape while in a game
Click "Map Controls"
Currently cannot remap keyboard controls.
All config data currently is put in:
Windows: <OS Drive>:/vnand/
(VNAnd is the name of a larger multi-emulator platform I am working on, of which Any-Yes is a module)
Any-Yes specific data and configs are in the engine_data/any-yes subdirectory.
Some notes about the recording system:
Press R or click "Create" in the menu to begin recording.
Press R again or click "Finish" to complete the recording.
Press T to play the recording. Currently you can only have one recording at a time per game, to have more, move the recording file for that game.
You can make a recording over multiple play sessions by saving the state (F5) while recording. If you load the save state later, it will continue recording.
Escape: Toggle Pause / Menu
Q - toggle NTSC simulation
W - toggle linear screen filter
S - toggle scanline overlay
` - hold for fast forward
R - toggle recording
T - play recording
F1 - quick save state
F2 - quick load state
F5 - save state file
F6 - Load state file
Arrow key - D-Pad
Z - B
X - A
Tab - Select
Enter - Start
Some lofty and not-so-lofty upcoming features I plan on supporting:
- Game Manual / Cover archival
- Better frontend
- Android (Mostly working)
- Neural Network to learn to play games (via reinforcement learning, think Mar I/O)
- External hardware simulation (plug and unplug virtual controllers, TVs, etc in a visual way)
- Fast cycle-innacurate core
- Command line launch support
- Added more conventional menu bar
- various optimizations
- Rewrote NMI triggering (Fixes Bases Loaded II)
- Added mappers 85 and 34
- Adapted VRC7 sound chip from nesimulare (MIT licensed) for use with Any-Yes APU
- Partial Namco 163 sound chip support
- Audio high & low pass filtering
- Major performance increase (Located a huge source of Java garbage collection)
- Prevent joysticks that rapid-fire events from making key mapping impossible
- Save state serialzation rewrite
- Minor timing fixes
- Better handling of cleanup for audio and video threads
- Added mappers 18, 79, and 185
- Fixed save state info in mapper 16 and 19
- NTSC simulation now attempts to use more CPU cores
- CHR-RAM banking, fixing Romancia and Lagrange Point
- Updated libGDX to 1.9.6
- Updated lwjgl to version 3
- Added dummy write in INC and multi-write detection in MMC1 (Fixes Bill & Ted)
- PPU $2004 now returns more accurate values (Fixes Micro Machines) (Still needs a little work)
- Adjusted NMI timing (Fixes Battletoads)