9 ms·
Booting the Final GameCube Game
- starshadowx2 10y agoI think the best (funniest) part of this is that some crashes are now emulated correctly. >Easier access to memchecks means that Dolphin can accurately emulate well known crash glitches in games without Dolphin itself crashing!
- rocky1138 10y agoNormally, an emulator strives for accuracy. But, since there are so few (if any) Wii and Gamecube games coming out, the library is fixed. So, I think it might be a better choice to hard-code a fix for specific games for these known crashes rather than emulating the crash accurately.
- lazerwalker 10y agoThat's a philosophical question more than a pragmatic one: even if they can manually hard-code crash fixes for specific games, is the role of an emulator to provide cycle-perfect emulation or to provide the best possible game experience?
- hiddenkrypt 10y agoIt depends on the philosophy that guides the emulation author. For example, the creator of bsnes believes in accuracy over everything. He's proud that his emulator will show the same bugs as the console when other emulators don't.
- DSMan195276 10y agoI would also add that practicality definitely comes into play. For example, there's a GBC emulator for the GBA that is written entirely in ARM assembly because that was the only way to make it run fast enough. There is a certain amount of accuracy that was sacrificed to make it work, but the fact that it actually runs games at playable speed is notable in-and-of-itself. It probably could have been done more accurately, but that doesn't really matter to most people if the games run at completely unplayable speeds, accurate or not.
- derefr 10y agoOne thing I always wonder about low-resource-usage emulation projects for old consoles with fixed game libraries (e.g. GBA emulating GBC), is why you can't just throw some heavy ahead-of-time analysis at the problem of statically recompiling the whole game library for the native destination architecture. Why write an "emulator" at all, when you know exactly what code you want to run, and know exactly what code that code should translate into when run on the target CPU? I guess a potential problem would be that this requires shipping a (IP-infringing) copy of the recompiled game library with the emulator. But it doesn't quite: instead of a library of ROMs, you could just ship a library of hint files to turn the static-analysis step of the recompilation into a few seconds of work, such that you still need an input ROM and the dest-ISA program is only generated in memory.
- derefr 10y agoIn this case, the question is not between emulating a crash and allowing the game to proceed, but rather between emulating an abort() to land the VM in a sane terminated state, or skipping the abort() and continuing on until the emulator itself is pushed into an undefined state and crashes.
- grenoire 10y agoDolphin development logs NEVER disappoint.
- ponco 10y agoI love that this project documents its development so thoroughly and entertainingly. I first used Dolphin 5+ years ago (craving some Double Dash) and even then I remember being intrigued about the under the hood stuff. Congratulations to them for reaching this milestone.
- raverbashing 10y agoI wonder if all this craziness in the SW game is an attempt at copy protection or something else
- glaberficken 10y agoFrom reading the article I gather the intention was performance optimization on the GameCube's limited hardware not copy protection.
- phire 10y agoYeah. It looks like a memory optimisation to squash more code and data into the gamecube's 24mb of memory. It was one of the earlier gamecube games and it looks like they rolled their own custom solution rather than using one of the standard nintendo libraries for advanced memory management that most other games use.
- gambiting 10y agoI have an interesting anecdote about GC development - I know of a game that almost released on GC that would break the drive on every console it was played on - a developer responsible for the loading code used an undocumented method to increase the read speed from the optical drive, so that data would stream in sufficiently fast for the game. Unfortunately, that was more than the drive was designed for, and it would actually die after few hours of use that way. QC reported some of their test consoles dying, but Nintendo ruled they must have been defective, and replaced them - and the game actually went to manufacturing like that. The whole release was halted a week before it was due because someone spoke to the guy and asked how he got the data streaming to work quickly enough. You could do something similar with PS1, PS2 and PSP - use undocumented methods to overclock the CPU and make them run quicker.
- Sniffnoy 10y agoCrash Bandicoot did something like that, didn't it?
- chris_wot 10y agoIt would be funny if they released an SDK and someone wrote new games for the GameCube...
- wolrah 10y agoAs with most console homebrew communities, this is already a thing. https://github.com/devkitPro/libogc https://github.com/devkitPro/libogc It doesn't seem like it's been heavily used on GC, but the Wii has a decent homebrew scene. Nothing really compares to the OG Xbox though, starting off in console modding on that platform really ruined me for everything else.
- bri3d 10y agoAlthough, it's worth noting that most OG Xbox homebrew (that I know of, at least) was made using leaked official SDKs (XDK), not open-source reverse engineered SDKs. IMO the PSP's homebrew community was the best without relying on leaked SDKs - the open source PSPSDK is very good and was used in lieu of leaked SDKs by almost all homebrew authors.
- deleted 10y ago[deleted]
- daenney 10y agoI love stuff like this: > Because the CPU can't directly map the auxiliary RAM to the address space due to a missing hardware feature, the game has to read or write to an invalid memory address to invoke an exception handler. This exception handler would then use Direct Memory Access (DMA) to move data from the auxiliary RAM into a game designated cache in physical memory. So essentially we're just leveraging exception handlers to code parts of the game treating the exception as "desired" behaviour.
- monocasa 10y agoI mean, your swap file does the exact same thing.
- deleted 10y ago[deleted]
- armada651 10y agoWell, when you can handle an exception cleanly why wouldn't you rely on it? Just because we usually associate an exception with unintended behavior doesn't mean that is always the case.
- jandrese 10y agoThis is how pretty much all virtual memory systems are implemented.
- blondie9x 10y agoPeople often complain about the legality issue surrounding emulation and roms in general. One thing to remember about the proliferation of the roms and emu scene is that of convenience. People now a days tend to appreciate having less stuff and digital content. Steaming, Steam, etc. If Nintendo created some sort of digital game marketplace odds are good emu and rom scene would deteriorate. fundamentally issue is the scene itself and how gamers now a days want to consume content. Also important to remember is that often times the older consoles and cartridges no longer function well, the condition of the physical hardware starts to deteriorate and unfortunately things can wear out.
- vlunkr 10y agoThere are many parallels to the music piracy controversies with Napster, etc. iTunes gave people a convenient alternative and turned into a big success. If they would just make more old games available people would probably be willing to pay for them.
- douche 10y agoGoG seems to be doing good business, for old PC games. From what I can see, it's kind of gutted the old PC/DOS abandonware sites, at least compared to the state of things 10-15 years ago.
- kibwen 10y agoNintendo does have a digital game marketplace, and it's stuffed with quite good games. However, even if a game has previously been published on Nintendo hardware, that does not automatically give Nintendo the rights to release it again on their virtual console. Those deals all need to be renegotiated, which is never going to happen (or may be downright impossible) for more obscure games.
- bduerst 10y agoIt's too bad they never covered distribution in their original game licensing (that allowed publishers to get the Nintendo official seal on the packaging). I wonder if consoles/companies of today are correcting that to account for future distribution models.
- _ytji 10y ago>> Secondly, the GameCube only has 24MB (and some specialized areas) of RAM across a 4GB address space, meaning most memory addresses have no RAM backing them! Is this common with consoles or anywhere else? I knew that there's very little RAM on consoles, but is there a reason for having the large address space available? (possibly convenience?)
- larrik 10y agoIt's just an artifact of 32-bit addressing. Addresses are just an integer from 0 to (2^31 - 1). Using a smaller address space may be possible (although it is still very limited), but dealing with anything other than exactly 32 bits is a TON of extra work, and so it's not reasonably to accomodate what is really a non-issue.
- serge2k 10y agoWhy would it be a ton of extra work?
- larrik 10y agoBecause the CPU "thinks" in 32-bits, therefore anything not 32-bits needs to be processed first. You would need to first convert your memory address to 32-bits before the CPU could read it, which brings something that would normally be a single CPU clock tick into more than that (it's slightly more complicated than that, but only in ways that make it worse). On top of that, since compilers don't normally do this stuff for you, you would need to end up writing a wrapper to handle every possible memory call, and write it in assembly. On top of that, you can't use those wasted bits for anything else anyway, so what's the point?
- serge2k 10y agoAt the CPU level wouldn't you just not bother attaching the address lines above X bits? Then design your toolchain so that you have knowledge that the address space is only X bits.
- 10y ago
- AceJohnny2 10y agoI'd love to see some of those games' original devs chime in on the how and why of their hacks revealed by the emulation community. It'd be a wonderful kind of postmortem.