SNES9X Information Welcome to SNES9X SNES9X is a Super Nintendo emulator being designed by Gary Henderson, Chad Kitching and Jerremy Koot. The Macintosh version of SNES9X is ported by John Stiles, and is available at http://emulation.net/ . The source code of the original UNIX version of SNES9X is available at http://www.snes9x.com/ . Operation of SNES9X is pretty straightforward. Choose a game image to open with the File menu's "Open" command, then it should open up on your screen. The key layout is customizable, so feel free to set it however you feel comfortable. Pressing escape brings you back to the Macintosh; once there you can reset the game, resume playing, freeze game or open another cart from the File menu. Many options are handled automatically by SNES9X. The frame-rate is auto-regulated to be as smooth as possible without permitting slowdown, sound is automatically configured, and identification of ROM images type should normally be handled without user intervention. Additional options are listed in "Preferences" in case you want to experiment with different settings. Special thanks PB1400c-san for providing the icons used in SNES9X. Frequently Asked Questions € Where can I get game files?!!?!? (or: Where can I get game [xxx]??) - Not from me. If you own or have access to a SNES, game copier devices are very inexpensive--they attach to your SNES and copy games onto floppy disk, whereupon they can be used in your Mac. If you mail me about where to get games, don't expect a response. € You never responded to my e-mail....? - There are several reasons. The most common is that your e-mail address in your mail program is wrong, or your mail server rejected the message, and the mail bounced. This happens extremely frequently with aol.com addresses; if you are an America Online user I would have to suggest that you switch to a real ISP as soon as you can. Another reason would be that you asked a question that was already covered in this document‹I get too many messages a day to repeat myself that much for a freeware product. Sorry. Lastly, I am known to be extremely tardy with e-mail when more important things (like real work) arise. Please keep in mind‹I have a real job now writing code for a living, and SNES9X is a hobby for me. I do it for fun. I am certainly concerned about major problems, but often I honestly don't have the time or desire to fix obscure or trivial problems. € ROMs that worked with older versions of SNES9X are failing in the new versions of SNES9X. - Recent versions of SNES9X incorporate an improved method for detecting the ROM type from a file. However, some ROMs on the Internet have been corrupted in such a way as to fool the auto-detector, causing it to guess improperly about the ROM's interleaving or HiROM ability. Try changing the HiROM setting or interleave setting then reopening the ROM. (Hitting 'reset' won't reload the ROM for you; you actually need to reopen it from the File menu.) € SNES9X won't start; it wants "CarbonLib" or "DrawSprocketLib." - SNES9X is very reliant on the newest and coolest features of the Mac OS. Specifically, it uses CarbonLib, which allows Mac OS applications to run natively in both classic Mac OS and Mac OS X. You can get CarbonLib from http://emulation.net/snes/ . € SNES9X won't start on my non-PowerPC Macintosh. - Please. Do us all a favor and get a new machine. € RAVE Mode doesn't do anything, or it's slower/choppier than Blocky mode. - Right now, RAVE mode requires OS 8/9‹if you're in OS X, there is no RAVE any more. (OpenGL is the replacement for RAVE, but I have not implemented OpenGL mode for SNES9X yet.) If you're under 8/9 and having problems, you need to keep in mind that RAVE Mode simply routes SNES9X video through whatever 3D acceleration hardware your Mac has‹if your 3D hardware is poor (or nonexistent), RAVE mode will be very poor, or just disable itself automatically. RAVE mode is only useful if you have a nice 3D card. In my personal experience, I've found that any recent Mac can produce incredibly smooth video, and it's absolutely full-screen, but the framerate isn't always perfect. Of course, your mileage may vary. € What's the difference between High Quality and Low Quality video? - Low Quality video disables several of SNES9X's features that slow down graphics‹transparency effects and mid-screen color changes are not supported. However, it provides extremely impressive speed on older machines; on more recent Macs, though, it fails to provide much of a speed boost, so I don't recommend using it. Note that several titles look wrong or have layering problems in Low Quality mode‹transparency effects are often used to do layering tricks, and if transparencies are disabled, layers often appear in the wrong order or with various glitches. € Should I start compiling a SNES9X compatibility list and mail it to you? - No. The team is normally well aware of what games work and what games don't. The problem is not identifying bugs but solving them ;) If you have a specific issue that you think we might have missed, though, feel free to ask. € Pilot Wings/DOOM/Mega Man X2/Mega Man X3/[xxx] doesn't run, or has weird glitches! - These games, and several more, all used custom graphics chips or hardware coprocessors. Many of them were unique, none of them were documented. The most prevalent was the SuperFX, but several companies like Capcom developed their own chipsets. Of these chips, the only two which are understood are the DSP chip and SuperFX, and the implementation is still incomplete. Future versions promise more accurate SuperFX emulation. € How do I pass level [xxx] in this game? - I'm not the Nintendo Helpline! Ask someone else! Seriously, I'm the wrong person to ask; I haven't really played my way through that many games. € It runs all slow and choppy! - Try using low quality video. Transparency, while an impressive effect, still requires very fast hardware to appreciate fully. Also, sound support (especially in 44KHz or stereo) will slow down SNES9X. If it's still too slow for you, just upgrade your Mac. SNES9X is already quite optimized code; don't expect future versions to get much faster. € Older versions of SNES9X ran faster than this one on my Mac! Why?? - They also had more bugs, supported fewer games, couldn't run SuperFX games, couldn't do transparencies, couldn't use stereo sound, couldn't use RAVE or TV Mode, etc. As SNES9X improves, its complexity also increases. We do offer options to reduce emulation accuracy for extra speed‹i.e., low quality video and monaural sound‹so use them if you must. € Game [xxx] used to work in version [xxx] and now it doesn't work (or works worse)! - Sorry. Usually stuff like that is patched up and nailed down pretty quickly, but as we fix bugs, sometimes new ones crop up in their place. € If I give it more memory, how much faster will it go? - It will not get faster at all. However, if you reduce the memory, it might crash. € Game [xxx] doesn't work! - Sorry. We do our best to ensure compatibility. € How do you pronounce '9X'? - It's a mystery. The two best candidates are 'ninety-X' and 'nine-X'. € What will SNES9X be called in the twenty first century? - Apparently, we're still calling it SNES9X. Hmm. Version History € 1.3.9b: - Fixed a bug which caused SNES9X to fail to load ROMs correctly if you changed the Interleave or Type fields in the "Open" or "Preferences" dialogs. (Only "Let SNES9X decide" was working properly.) - Fixed the "Game Genie" dialog. - I have not merged in changes from the PC 1.39a update yet, but this does not actually affect any well-known ROMs as far as I can see. These changes will be merged into the next update. - Some OS X users have reported difficulties using the controller configuration dialog after updating to 10.2. I did not write the HID Manager support code myself and have not had a chance to investigate the problem quite yet (no gamepad). - Important note: Megaman X2 and X3 support (in other words, emulation of the C4 chip) is not Mac compatible. All the SNES9X C4 emulation code is written in raw Intel assembly and does not port over to the Mac at all. Unfortunately, I do not expect this situation to change any time in the near future. € 1.3.9a: - Another round of optimizations have wrung out a few more frames per second from SNES9X on older hardware. Framerates should be higher in general, and Smooth Mode video in particular should have less of an impact on performance than before. - George Warner has contributed HID Manager support to SNES9X, which means that gamepads now work in OS X! A new folder "Gamepad Support" has been added‹if you remove this folder, HID Manager will stop working. - Now using 32-bit icons wherever possible in OS X. I didn't have 128x128 icons handy, unfortunately. (I think PB1400c provided me with them at one point, but I can't find them now.) € 1.3.9: - Fairly significant optimizations to the CPU core have resulted in impressive speedups throughout SNES9X. In extreme cases, some games will exhibit framerates of double the previous version, while more typical cases still show speedups of over 30%. - There were cases where the freeze/defrost screen would fail to appear (even though it still worked properly, you couldn't see it). This should be resolved. - Selecting RAVE video in Mac OS X will no longer hang on an empty screen. - Low quality video modes were showing incorrect colors. This has been fixed. - Mac OS X 10.1 caused Eagle/2xSAI modes to crash. This has been fixed. - Another Music Box crash bug has been resolved. € 1.3.7: - A number of changes to the emulator have been implemented to allow it to run properly under the release version of Mac OS X, including full-screen mode. You will need Mac OS X version 10.0.2 or later to run SNES9X properly‹use the "Software Update" control panel to update your system if necessary. - Classic Mac OS users will find that Mac OS 8.6, CarbonLib 1.2, and DrawSprocket 1.7.3 or later are now required to run SNES9X properly. Older configurations will probably be unstable. - A new Cheat Finder feature has been contributed by Ian Patterson. This is a pretty complicated system, but if you are dying to cheat at a game, this will certainly let you do it. You can even set watchpoints and search all of SNES RAM for a particular value. (This currently generates a blank-document "Cheat List" file in the SNES9X folder every time you quit‹I will try to remedy this in a future version.) - You can now control the SNES9X freeze/defrost panel from a gamepad, thanks to a contribution by Joshua Ochs. - A new sound decoding system has been put into place. This fixes wind/slice effects in Chrono Trigger and Final Fantasy titles, some sound effects in Mega Man X, and many other small problems. - RAVE Smooth mode may exhibit lower framerates in this version. This is due to a problem with an ATI-specific extension that SNES9X was previously using‹it caused garbled graphics in some cases. Removing the ATI-specific code fixed the problem, but causes lower performance on some hardware. - Several Mac OS X-related optimizations have been implemented. SNES9X under Mac OS X is now able to demonstrate framerates roughly equal to the Mac OS 9 version (which is particularly impressive when you consider that the OS 9 version did not allow for any multitasking). If you are getting unimpressive framerates, make sure that you're in the proper color depth (Thousands, not Millions). - A bug which would cause the Music Box feature to crash has been resolved. € 1.3.2: - SNES9X now has two new video modes called "Enhanced, 2xSAI Mode" and "Enhanced, EAGLE Mode"! Rather than simply scaling up or blurring the SNES image, these new display types actually attempt to add extra detail to the picture, with remarkably good results in many cases. Rather than looking blocky, edges and curves should actually retain their shape much better when using these new video modes. However, they take a lot of processing power‹older Macs may see a significant drop in framerate when using these modes. - To offset the heavy load of these new video modes, SNES9X now takes advantage of the second processor in multi-processor Macs! The second processor is used to apply the video mode effects. So if you have a multi-processor Mac, you will be able to use the new enhanced video modes mentioned above without incurring any loss in framerate‹in fact, SNES9X should run faster than ever before, since even simple video modes take a small amount of CPU power to run. - Separate SNES9X binaries for Mac OS 9 and Mac OS X are no longer required. Now, one application will work equally well on both. - Super Mario Kart, Metroid 3, Donkey Kong Country and other games once again work properly without glitching! It appears that the only way to fix these titles is to revert to version 3.0 of MrCpp. - A previous version added a new "fast-forward" button and I forgot to mention it in the version history. Hold this button and the emulation speed will increase dramatically, so you can skip boring or repetitive parts of a game. Thanks to Lindsey Dubb for adding this feature. - Mouse support is broken in this build, and will probably remain broken until Carbon provides a good way to track the mouse cursor past the edge of the screen. Sorry‹hope you weren't planning on a huge Mario Paint session any time soon! - A handful of fixes in the emulator core bring improved speed and compatibility in specific titles. € 1.3.0a: - SNES9X now runs natively on Mac OS X Public Beta! There are a few rough spots, but overall it works quite well. (It's 60fps solid on a G4/500, but that's pretty much expected!) The following is a list of features which are missing in action under OS X: - RAVE ‹ Removed from OS X. To be replaced with OpenGL, in a future version of SNES9X. - InputSprocket ‹ Removed from OS X. To be replaced when HID Manager is available, in a future version of Mac OS X. - NetPlay ‹ Disabled because NetSprocket is not yet working in OS X. To be fixed when NetSprocket is available, in a future version of Mac OS X. - Switch to Full Screen - Disabled because DrawSprocket is not yet working in OS X. To be fixed when DrawSprocket is available, in a future version of OS X. (Until this is fixed, you can switch resolutions using the Monitors panel inside System Preferences.) - Low Quality Video - Disabled because 8-bit video is not yet working in OS X. To be fixed when DrawSprocket is available, in a future version of OS X. So much for "developer complete." - Note: I don't recommend trying to run the Mac OS X version of SNES9X on Mac OS 9‹it will probably cause you to crash, unless you're using CarbonLib 1.1. For that matter, it's not very smart to run the Mac OS 9 version of SNES9X on Mac OS X either‹it'll probably work, but it will be slower and have lagged audio. - A bug in SNES9X 1.3.0 which caused sound effects to be garbled has been fixed. This bug seemed to occur most often on machines which had Virtual Memory disabled. - PB1400c has provided a brand-new 128x128 OS X compatible icon for SNES9X! Unfortunately, I cannot figure out how to get the 128x128 cartridge icons working properly, so they will probably get added in a future release. I think this might require using an application package. € 1.3.0: - SNES9X has been fully Carbonized! This means that all of the Mac OS X incompatible code has been stripped out, and SNES9X can easily be recompiled to run natively on Mac OS X Public Beta when it becomes available. However, the Carbonization process means that this and all future versions of SNES9X will require Mac OS 8.1 or later, as well as Apple's CarbonLib extension to run. If you're running System 7, then SNES9X will no longer work for you (don't send me your hate mail‹your system is way out of date, and you know it). If you have Mac OS 8.0, you can get a free update to Mac OS 8.1 at http://asu.info.apple.com/swupdates.nsf/artnum/n10490 . If you need CarbonLib, it's available on my web site, http://emulation.net/ . - Mode 7 graphics got a boost, with a new "Mode 7 Smoothing" option by Lindsey Dubb. This causes zoomed-in pictures to get a smoothed-out look instead of becoming blocky. It takes a fair amount of horsepower to do it, but it looks very nice. - Lindsey Dubb also contributed code which improves color shading slightly. Graphics with subtle color gradients will look better now (for example, the horizon in F-Zero is less banded). - Several minor emulation core fixes have improved compatibility in a few games. - A fast-forward button was added by Lindsay Daub. € 1.2.9: - SRAM Auto-Save has been added. This mode automatically saves your game's SRAM data to disk every thirty seconds or so; the idea is that if you crash, you won't lose your SNES9X saved games. - Several optimizations to the video driver; a few games in particular, that were doing strange things with the video hardware of the SNES, will see marked speedups. - The core of the emulator has been modified for increased SNES compatibility. - Several fixes to RAVE mode which will hopefully maintain the speed enhancements while upping reliability. - A new "Smooth Video" mode has been added, which smooths the graphics out like RAVE mode, but without utilizing 3D graphics hardware. This is useful for video cards which don't support RAVE (i.e., the Voodoo 3). It also seems a little bit sharper than RAVE mode. - You can now cancel the Freeze/Defrost dialog from an InputSprocket device, without using the keyboard, by pressing "Break" or "Start." € 1.2.6b: - A huge undocumented change in Apple's Universal Headers caused the previous version to fail to open on Mac OS 8.1 and below. - Gil Pedersen added code to optimize RAVE mode on certain ATI hardware. Rage II and Rage Pro users may notice better framerates in RAVE mode. € 1.2.6a: - Fixed a serious crashing bug that affected Mac OS 8.1 and below. - Freeze/defrost screens now put a yellow box around the most recent freeze file. This is useful if you like to keep a lot of freeze files, but occasionally forget which one is the newest. - There is a new option to display a framerate counter in the lower-left hand corner. This is useful for benchmarking purposes and is pretty cool. - Version 1.2.6 brought back the evil glitches in Super Mario Kart (as well as less-fatal-but-still-irritating problems in Super Metroid, Donkey Kong Country, etc). This problem used to be solvable by compiling with MrCpp with all optimizations off, but this fix no longer seems to work. I spent several hours trying to find a fix, but no dice so far. Sorry. € 1.2.6: - Fixed a memory leak which would cause SNES9X to quit itself spontaneously if you tried to defrost too many times in a row. - Support for Derby Stallion 96 and Sound Novel-TCool, both of which use an unusual ROM map, has been added. - Some more sound bugs have been squashed. - Minor speedups, especially with SA-1. € 1.2.3a: - SA-1 emulation has been improved; Kirby Super Star now works properly! - Sound is noticably improved in some games. € 1.2.3: - SuperFX code is working better than ever before! Many games work better now‹in particular, StarFox seems to be 100% now! However, the SuperFX emulation is incredibly processor-intensive‹it'll probably be too choppy to be fun on anything less than an iMac. - Native PKZip-compressed ROM support was removed from the Mac port because the new PKZip code used by SNES9X turned out to be very, very old and crusty‹CodeWarrior refused to even compile it! (The decompression code used old-style K&R C prototypes.) Honestly I'm not sure SNES9X ever opened ZIPs properly anyway, so this might be no loss. At any rate, GZ-compressed ROMs are still supported 100%, and will continue to be supported in the future. - This version is returning to MrCpp for much of its code generation needs, because CodeWarrior Pro 5, while an improvement, still generates slower code on average. (Unfortunately, MrCpp is more finicky and refuses to compile some parts of SNES9X properly.) This should improve framerates in some games. € 1.2.2: - SuperFX code is currently broken; this will be corrected in a later release, but the demand for this version was too high to push it back any further. - Implemented SA-1 support, which was required for Mario RPG, Kirby Superstar, Paradius 3, etc. (Currently, the only SA-1 game with a known good dump is Mario RPG.) - Mario Kart's rear-view mirror display fixed. - Fixed Mode 7 rendering code to correct a glitch on the Final Fantasy V intro screen. - Added horizontal offset per tile support in the offset per tile modes 2 and 6, and switchable horizontal/vertical offset in mode 4. Fixes Chrono Trigger in several places and Mario All Stars title screens. - Altered ROM load code to ignore corrupt ROM map type byte in ROM header, preventing the code erroneously detecting what it thinks are interleaved ROMs. Fixes EEK! The cat, Formation Soccer, the corrupt copy of Donkey Kong Country, etc. - Now recompiled almost entirely with CodeWarrior Pro 5 instead of a mixture of CW Pro 3 and MrCpp. The one exception is cpuops.cpp, which due to compiler bugs can only be built in MrCpp with optimizations off. I'm not entirely sure how the speed will be affected by this; hopefully it will be as fast as before.