# # # ##### #### # # # # #### #### # #### # # # # # # # # # # # # # # # # # # # # # # # ### #### # ### ### ### # # # # # # ## # # # # # # # # # # ## #### #### # # # # # # # #### #### # # # ##### UltraHLE FAQ by Zorkwiz Version .3 (Second Public Release) Released on February 4, 1999 by Zorkwiz (pmv3@po.cwru.edu) Find me in #n64emulation, #ultrahle and #n64emuroms on EFnet DO NOT E-MAIL ME ASKING WHERE TO FIND ROMS OR ASKING WHETHER A GAME WORKS OR NOT. IF A GAME IS NOT ON THE LIST, ASSUME IT DOESN'T WORK OR TRY IT YOURSELF. Please feel free E-mail me with suggestions, corrections and info however. --------------------------------------------------------------------------------------------------------------- Table of Contents: 1: Credits 2: Version History 3: General Questions 4: Game Specific Questions 5: Technical Questions 6: Legal Issues 7: UltraHLE Technical Document 8: Compatibility List --------------------------------------------------------------------------------------------------------------- 1. Credits: Thanks to BG and [-UT-] for their conversation and help finding umm... stuff Thanks to ^SeiGGy^ in #ultrahle for Joystick support info, and info on the key mapping problems. Thanks to Marine_ and Furon in for their key remapper. Thanks to Prozac- and Demi for compatibility info. Thanks to Emulators Unlimited (www.emuunlim.com) for hosting this FAQ, hosting UltraHLE and being the best source for Emulation related content on the net. And most of all: Thanks to Epsilon and RealityMan for such an amazing piece of software. And RealityMan again for the technical doc, and some legal info. Please also read the Readme file which comes with the emulator. It will likely answer alot of your questions. --------------------------------------------------------------------------------------------------------------- 2. Version History: 1 This release was not supposed to be publicly released, but it was for a short time. 2 The first rublic release, added some missing URLs and a few more questions. 3 Added sections for legal issues and technical questions. Added an explaination of the technology behind UltraHLE (straight from RealityMan himself!) Added a straightforward compatibility list (thanks to Prozac- and Demi for the info) Updated credits, added a few questions to existing sections, and generally made the FAQ easier to read. --------------------------------------------------------------------------------------------------------------- 3. General Questions: Q: What is UltraHLE? A: UltraHLE is an advanced Nintendo 64 emulator for PCs with 3dfx chipsets. Q: Where can I get UltraHLE? A: UltraHLE is discontinued, and has been removed from most sites. Check on IRC if you can't find a copy otherwise. Q: What kind of system do I need to play games with UltraHLE? A: It is recommended that you have at least a Pentium 2 processor with a Voodoo1, Banshee, or Voodoo2 graphics board. A 3dfx board is required, although Glide wrappers can be used to emulate the 3dfx instruction calls to some extent. (See Part 5: Technical Questions) To get full speed emulation in many games a 300mhz+ processor is recommended. Q: Where can I find N64 ROM images? A: Unless you own the N64 carts, use of commercial ROMs is illegal. This doesn't stop many people from downloading them anyway, however, It is not the purpose of this FAQ to help you find ROM images. If you want to find commercial ROMs to play, that is up to you. DO NOT E-MAIL ME ASKING WHERE TO FIND ROMS! Q: Which games work with UltraHLE? A: Although many of the best N64 games work quite well with the emulator, compatibility is quite low overall due to the method which was used in programming it. The name "UltraHLE" means "Ultra High Level Emulator" and implies that the emulator skips emulation of many of the N64's basic functions in favor of emulating the high level functions which the best games really need in order to run. Because of this, many demos and simple hombrewn games which have worked on other N64 emulators fail to even load with UltraHLE. For a largely complete compatibility list scroll down to the compatibility section (Part 9). Q: Why don't the ROMs I downloaded show up in the UltraHLE GUI?? A: You either need to edit the ultra.ini file to set up the directory in which the emulator looks for ROMs, or you need to change the extention of your ROM to one of the supported file types. (.n64 .v64 .u64 .rom bin .mov) Q: Why doesn't my ROM work with UltraHLE???? The Compatibility page said that it would. A: There are a few reasons for this problem. First of all, you might not have the complete ROM, or the ROM that you have could be corrupted. Before you delete your ROM however, check to make sure that the filename has NO SPACES in it, and that the file extension is either .v64 .rom n64 .u64 .bin or .mov The emulator's GUI can recognize spaces in filenames, and will correctly read a ROM's header, but the EMU will not load ROMs with spaces in their filenames. Lastly, if you get an error loading a rom, try to load it a few times, as sometimes the emulator fails to load it correctly on the first try. Hitting F5 when a game is trying to load also sometimes (but rarely) helps. If all else fails, look for another copy of the ROM. Q: Why does sound skip when I play game X?? A: One of the most noticible problems with emulation in UltraHLE is the sound emulation. Although sounds is emulated very well in most cases, many games, like Waverace64, Mario, and Zelda among others have sound skipping problems to various extents. Q: Why can't I rotate the camera left in Mario and other games, and why doesn't the left d-pad button work correctly?? A: The key for left camera (left-c) is incorrectly mapped to the "F" key. The control setup screen shows that it should be mapped to the "J" key, but it is not. Unfortunately, the "F" key is also used for left on the d-pad (digital pad). This makes Pushing left on the D-pad impossible with the default keys. In games where you have the choice of using the d-pad or the analog pad, always use the analog, as it is correctly mapped to the arrow keys. You can use "F" for left-c, but another (better) solution is to use a nice little utility made by Furon called HLEconfig. This utility allows you to remap most of the buttons of the N64 controller to different keys than the emulator defaults to. Using this program, you can get the left-c button correctly mapped to "J", or whatever else you might want. HLEconfig can be found at http://www.locknload.net/n64/ Q: Joystick support sucks! The default joystick/joypad settings are too hard to use. What should I do? A: The solution to this is to use a key binder for your joystick/pad. You can set up a custom configuration for your stick/pad this way. Gravis products come with their own key binder, and MS Sidewinder pads also have their own key binder. If your joystick/pad doesn't fall into these categories, there are other binders floating around the net. One such program is called RB-joy, which you can find at http://alf.zfn.uni-bremen.de/~rbsoft/prod05.html. Also, if you are looking to buy a joypad for use with UltraHLE, the Gravis Xterminator has been recommended to me because of it's analog controls (just like the N64 controllers). Q: Why can't I save my game? When I quit out, my save is gone! A: You need to use the emulator's "Save State" option. When you want to save your game, hit escape to quit back to the GUI, then goto the file menu and choose "Save State" (or hit shift-F6). Now type in the filename you wish to use for your saved game. To load a saved game, start the game you wish to play, hit escape to get to the GUI, goto "Load State" in the file menu (or hit shift-F9), and choose the file which corresponds to the saved game you wish to load. You can also use F6 for a quicksave, and F9 for a quickload. Q: Game X runs too slow/too fast, is there anything I can do? A: Since there is no frame-skip or auto frame-skip in UltraHLE, the only way to speed up or slow down emulation is to change the resolution which you are running the game at, or disable the sound. Choose a high resolution to slow the emulation down, or a low resolution to speed it up. Disabling the sound also gives a speed boost. Also make sure that you have the most current drivers for your video and sound card, and that you aren't running any programs in the background while using UltraHLE. Of course upgrading your PC is always an option as well. Q: I found a patch for one of the ROMs, will it work on UltraHLE if I apply the patch? A: Generally No, the patches are mostly designed for backup machines, and they do not effect performance in UltraHLE, in fact, many patched ROMs are incompatible, whereas their unpatched counterparts work fine. The only worthwhile patch I've seen is for the HS (High Society) version of Zelda. There is a patch for this rom which can be found at http://ppgr.webjump.com/n64/n64-playable.htm (scroll down to Zelda) --------------------------------------------------------------------------------------------------------------- 4. Game Specific Questions: Q: Why is there no in-game sound in Goldeneye? A: This is one of the most common complaints I have heard about any game, and the funny thing is, it's the easiest to fix. Simply press the start button ("S" by default) once the game starts to go look at your watch, then press left a number of times until you get to the options menu. You'll see that the music and sound are turned all the way down! Turn them up, and the sound is great. Not even any skipping that I heard. Q: Why can't I get WaveRace 64 to work? A: Only the Japanese version of WaveRace64 works with UltraHLE (I've heard that there may be a working US rom, but I've yet to speak with anyone who has seen it) Q: Why can't I get Virtual Chess 64 or Mischief Makers to work? A: Only the European version of thess ROMs are compatible with UltraHLE. Q: Why is Banjo, the main character in Banjo Kazooie, so small? A: Due to a strange bug, Banjo is very small, and cannot make many of the larger jumps in the game. This makes it basically unplayable. Q: Why can't I get past X part of Zelda? A: I've heard people complain about Zelda crashing at various parts in the game. I have personally not had problems, but I havn't played very far either. --------------------------------------------------------------------------------------------------------------- 5. Technical Questions: Q: How can UltraHLE work so well after only 3-4 months of work, whereas other N64 emu's could barely get demos working after alot more time? A: UltraHLE is not an emulator in the normal sense. It does not attempt to emulate every piece of the N64 hardware. It interprets hardware calls within the ROMs and attempts to emulate them as they are called. Because of this, the authors didn't have to emulate every chip in the N64 to perfection, they apparently used a debugger to see which calls the more popular games used, and they did their best to emulate these until the games were working. Q: Can I try adding stuff to the INI file to get more games working? A: You could try, but it would take a hell of a long time to see results, if you ever did. It took the authors themselves a few weeks just to figure out the hacks for Zelda, so anyone not familiar with the program would probably be wasting their time to try this. Q: I have a TNT card (or some other non-3dfx board). Are you SURE I can't try out the emulator? A: Some people have claimed to have some success running non-3dfx boards with a Glide wrapper and being able to use UltraHLE. I have heard that TNT users in particular have had little success, but if you have a non-3dfx board, and want to try it out, goto http://www.angelic-coders.com/GlideUnderground Q: What is UltraHLE programmed with? A: Mainly with Visual C 6.0 (With SP1), dynamically recompiled into ASM. --------------------------------------------------------------------------------------------------------------- 6. Legal Issues: Q: Are emulators legal? A: Well, this is a tricky question. An emulator is legal in theory, as long as it is used exclusively for playing games which the user has paid for, and as long as no stolen information was used in the creation of the emulator. This argument has not been proved in court as of yeah, although a case from 1982 when Atari sued Coleco over their machine which would play Atari 2600 games failed in court. The true test will come in the upcoming suit which Sony has filed against Connectix over it's "Virtual Game Station" Playstation emulator for Macintosh. The outcome of this lawsuit may well set a precident for years to come, so let's hope and pray that Sony's suit fails. Q: What is the IDSA? A: The Interactive Digital Software Association is a lobby group whos members include many of the largest software companies in the world. They have taken a firm stance that emulation is illegal:period, and thus they have stirred up alot of negative feelings from people in the emulation community. There is even a boycott of IDSA affiliate's and their software. Check it out at http://www.jpisp.com/idsab/ Q: Has Nintendo sued the authors of UltraHLE? A: Not yet. They have threatened a lawsuit, but they have not contacted the authors or anyone at Emulators Unlimited as of now. It is still unknown whether they will indeed take legal action. Q: Are backup devices legal? A: Nintendo has tried very hard to wipe out backup units, especially in the U.S. They are available from many import houses however, and thus are not be illegal in all countries. The EU directive 91/250 states that they are NOT illegal in the UK at least. Q: Am I going to get in trouble if I distribute emulators or ROMs? A: It is perfectly legal to distribute emulators, but commercial ROMs are another story. If you distribute ROMs on the web, you may get a nice form letter from the IDSA very soon. I have never heard of a ROM site being sued however, but many have been shut down volountarily after a threat of legal action from the IDSA. --------------------------------------------------------------------------------------------------------------- 7. UltraHLE Technical Document (Thanks to RealityMan for this Doc) If you are interested in programming or emulators in general, this text is for you. The purpose is the explain the basic architecture behind UltraHLE and tell how it differs from many other emulators. The HLE in the name pretty much sums it up. It stands for High Level Emulation. Instead of trying to emulate the hardware as closely as possible and supporting low level operations, the approach is just the opposite: Emulate as little as possible and try to detect operatios as early as possible, and emulate them using optimized C-code. For example there is no boot rom and even boot code in rom images is ignored. Common operating system routines like interrupt adjustments are intercepted and ignored. When dealing with graphics and sound, the abstraction level is high (display lists and sound lists). CPU and DMA emulation is at a lower level, but still uses some tricks to detect common operations and perform them more efficiently. This probably wouldn't work on an older console, where low level programming and hand tuned assembly were the rule. But the Nintendo64 is quite different. Most of the code is written in high level C eliminating need for 100% exact CPU emulation (so things like exceptions or virtual memory can be emulated only approximately). Graphics and sound both use command lists, that are reasonably standard between different games. On the real console display and sound lists are executed using the Reality Signal Processor (RSP) which executes code from the rom image. It is a vector processor with operations specifically designed for fast geometry and audio, and as such is difficult to emulate efficiently. In UltraHLE the lists are interpreted with C-code, which has been created by studying the lists games generate. There has been no attempt to translate the RSP code, since it works so closely with the hardware and uses integer arithmetic. Instead the C-code can use floating point, which is easier and faster on the PC. This means the results are not 100% same as those on the real console, but on the plus side things are a lot faster, and often results look better (for example increasing game resolution is trivial). It is also possible to do things the original code doesn't do. For example, on the N64 loading new textures is a rather fast process, and all textures are loaded each frame. On the PC 3D-architectures, texture loading is generally a slower operation. The solution is to cache textures on the PC side and eliminate all unnecessary loads. This give a big performance boost and practically all textures can be cached, since PC has so much more texture memory. Other display optimizations include removal of hidden triangles, extra matrix loads, unused mode changes and the like. Since texture and mode changes are more expensive on the PC, it makes sense to do extra geometry processing to eliminate as many changes as possible. Triangles are also collected into larger groups (sorted by mode) to allow faster rendering. Finally, the graphics emulation has to cope with all the different rendering modes of the N64. The RCP contains a very configurable 3D-rendering unit which supports many modes that are impossible to emulate directly on 3DFX, even when using glide. UltraHLE performs pretty complex mode conversion to find the best PC-modes for each N64-mode. Things that the N64 does in a single pass are converted to 1-3 passes on the PC, depeneding on mode complexity. The modes are cached like textures, so the relatively slow mode decoding process does not slow things in practice. Since there is so little information on Nintendo64 hardware, emulating sound and graphics on hardware level would probably have been extremely difficult (unless one had access to all N64 documentation, which we didn't). So in a way this high level approach was pretty much the only way to proceed. But it was a good way nevertheless, as the results show. The high level approach doesn't extend that well to CPU emulation, but luckily the CPU is a standard MIPS R4300 with excellent documentation available. So it's just a matter of following instructions, and then making it fast (which is the hard part). What helps us, is that the games don't use the CPU to its full extent. Practically no 64-bit code is used, and virtual memory usage is limited. Initially the CPU was emulated in C like in most emulators to get things started, but that was way too slow. The next logical step also was to compile MIPS code into Intel code. All instruction decoding overhead is eliminated, but it still takes multiple Intel instructions to emulate a MIPS instruction (since MIPS has more registers and because the Intel FPU implementation just plain sucks). Also things like branches are not that easy to handle. The speedup was about 5-10x compared to C-emulation. The next step was to add optimizations to the compiler. By allocating MIPS registers temporarily into the few Intel registers, many memory accesses can be eliminated. This allows compiling small connected instruction groups into about 2 Intel ops for each MIPS ops ratio. Nearby memory accesses with similar addresses can be simplified by caching the base addresses in registers. It is also possible to replace some RISC instruction pairs with single CISC instructions. Since our target (Pentium II) does out of order execution, it was not necessary to reorder instructions, which made optimizations a lot easier. These optimizations increased speed 2x. On a Pentium II the R4300 emulation speed is now close enough to allow real time operation on many games and demos. Of course the PC has to do the work of the Reality Co-Processor too, so that will slow things down. But PCs are getting faster, and a 450Mhz Pentium II should run at excellent speed. And there are probably more possible optimizations, just waiting to be done. UltraHLE is a very unusual emulator. It doesn't run many titles (yet), but what it runs, it runs well. This is because the high level emulation routines either work (if what they assume of the game is corrent) or they fail (if the game uses a totally different display list format, for example). The goal of UltraHLE is not to run as many titles as possible. It is to run the best titles as well as possible. And looking at the current compatibility list, this is exactly what UltraHLE does. Compatibility will no doubt improve in the future, but the emphasis will still be on quality instead of quantity. --------------------------------------------------------------------------------------------------------------- 8. Compatibility List: This list is not 100% complete, but it's getting close. (thanks to Prozac- and Demi for the info) Prozac-'s Compatibility Page can be found at: http://ppgr.webjump.com/n64/n64-playable.htm Demi's Compatibility list can be found at: http://www.zophar.net/Files/compat.txt Pay attention to country info... many games are only playable if you have the right version. The following games are fully playable with only minor bugs/glitches: Title: Country: Banjo Kazooie USA (note: banjo is very small and the game cannot be completed) Bomberman Hero Jap/USA DOOM 64 USA Dynamite Soccer (J-League) Jap F1 Pole Position 64 (Human Grand Prix) USA/Jap Golden Nugget 64 USA Goldeneye 007 USA Mace : The Dark Age USA/EUR Mario Kart 64 USA Milo's Astro Lanes USA Mischief Makers EUR (note european (pal) only) Mortal Kombat Trilogy USA/EUR NBA In The Zone '98 (NBA Pro 98) USA/EUR Olympic Hockey Nagano 98 EUR Pachinko 365 Nichi Jap Pawafuru Puroyakyu 4 Jap Pawafuru Puroyakyu 5 Jap Power League 64 Jap Puyo Puyo Sun Jap Quake 64 USA Quest 64 (Holy Century Magic) USA/GER Rampage - World Tour USA StarFox Jap/USA Star Soldier Jap/USA Super Mario 64 Jap/USA Tetris 64 Jap/USA Virtual Chess 64 EUR (note european (pal) only) Wayne Gretzky's 3D Hockey Jap/USA Wayne Gretzky's 3D Hockey 98 USA WaveRace 64 USA/Jap (note: working roms for Waverace64(US) are rare) Zelda: Ocarina of Time Jap/USA The following games load and display graphics, but aren't worth playable due to major bugs: Aerogauge USA Airboarder 64 Jap/Eur Battle Tanx USA Biofreaks USA Chameleon Twist USA Cruis'n USA USA Dark Rift (Space Dynamite) Jap/USA Deadly Arts (G.A.S.P.) USA/Jap Diddy Kong Racing USA Dual Heroes USA Duke Nukem 3D USA Famista 64 Jap Habu Shogi: St. Andrews Jap Hexen 64 Jap/USA International Superstar Soccer USA/EUR J-League Elevenbeat Jap Kiratto Kaiketsu Jap Mahjob 64 Jap Mahjob Classic Jap Mike Piazza's Strike Zone USA Mortal Kombat Trilogy EUR Multi-Racing Championship EUR Mystical Ninja (Ganbake Goemon) USA NBA Hangtime USA/EUR Olympic Hockey USA/EUR Perfect Striker (J-League) Jap Pikachu Genki Dechu Jap Smash Brothers Jap Tetrisphere USA Top Gear Rally USA War Gods USA Wetrix USA Wheel of Fortune USA The following games are completely unplayable, they either crash the EMU, display a blank screen, or fail to load: 1080 Snowboarding Jap/USA Aerofighters Assault USA All-Star Baseball 99 USA Automobile Lamborghini USA Battle Phoenix 64 Jap Blast Corps USA Body Harvest USA Bomberman 64 Jap/USA Buck Bumble USA Bust a Move 2 USA Castlevania 64 USA Chopper Attack USA Choro Q 64 Jap City Tour GP (same as GT64) Jap Clayfighter 63 1/3 USA Clayfighter Sculpter's Cut USA Cruis'n World USA Dezaemon 3D Jap Extreme G USA Extreme G 2 USA F-Zero X Jap/USA FIFA 99 USA Fire Electric Pen Jap Flying Dragons USA Formula 1 Grand Prix USA Forsaken USA Fox Sports Hoops 99 USA Getter Love!! Jap Gex: Enter the Gecko USA Glover USA Goemon 2 Jap GT64 (aka City Tour GP in Japan) Jap/USA Iggy's Reckin' Balls USA International Superstar Soccer 98 USA Jepoardy USA Ken Griffey Baseball USA Killer Instinct Gold USA Knife Edge USA Kobe Bryant's NBA Courtside USA Madden 64 USA Madden NFL 99 USA Mario Party Jap Mickey's Magical Tetris USA Mischief Makers USA Mission Impossible USA Mortal Kombat 4 USA Mortal Kombat Mytholgies USA Multi Racing Championship USA Nagano Olympics Jap NASCAR 99 USA NBA Courtside EUR NBA JAM 99 USA NBA Live 99 USA NHL 99 USA NHL Breakaway 98 EUR NHL Breakaway 99 USA NFL Blitz USA NFL Quarterback Club 98 EUR Nightmare Creatures USA Offroad Challenge USA Pilotwings 64 USA Pokemon Stadium Jap Quarterback Club 99 USA Robotron 64 USA San Francisco Rush USA San Francisco Rush 2 USA SCARS USA Silicon Valley USA Seiken Teisen Puzzle Dama Jap Smash Brothers Jap Snow Speeders Jap Snowboard Kids USA South Park USA Star Wars: Rogue Squadron USA Star Wars: Shadows of the Empire USA Super Robot Spirits Jap Tactics Soccer Jap Top Gear: Overdrive USA Toukon Road Jap Toukon Road 2 Jap 64 Trump Collection Jap Turok USA Turok 2 USA Twisted Edge Snowboarding USA Virtual Pro Wrestling 64 Jap Waialae Country Club USA Wipeout 64 USA WCW/nWo Revenge USA WCW/nWo: World Tour USA WWF Warzone USA Yoshi's Story Jap/USA