Booting the Final GameCube Game
dolphin-emu.org
dolphin-emu.org
>Easier access to memchecks means that Dolphin can accurately emulate well known crash glitches in games without Dolphin itself crashing!
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.
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.
Nintendo is just absurdly bad at anything to do with "online".
And even then, the (licenses for) the old games that you're buying from Nintendo's service are actually licenses to the particular port that runs on whatever the console generation you buy them on. If you buy the Wii Virtual Console port of Mario 64, that doesn't entitle you to download+run the Wii U Virtual Console port of Mario 64. You either accumulate an ever-expanding pile of hardware dongles that will themselves break one day, or you keep buying and re-buying ports of your favourite old games for each new console generation, never knowing whether they'll actually bother to port any given game to any given console, whether they did it for a previous generation or not.
This doesn't quite match the meaning of "convenient" in the sense that Steam is convenient: with Steam, when you buy a game, you're buying a license to play that game on anything—if the game starts out only on Windows, but then is ported to run on Mac and Linux, you don't have to pay again. You just own "the game", and are granted the ability to download+run whatever ports of it exist on Steam.
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.
Anyway, once we had the rights, we of course asked for a copy of the game. Well, naturally, they didn't have one. And several of these old systems had some form of copy protection. Well, fortunately, the 1980s demo scene had led to cracked copies of these games being easily downloaded (bonus fun fact: I may be the only person in history who clicked 'agree' on a 'you must have written permission from the publisher to download this ROM' and meant it). But of course the crackers had included crack intros which we certainly couldn't use. So we ended up including the cracked version, with the cracks, and just initializing the games to a memory state just after the crack intro played.
Without those crackers cracking the game, we might never have found a copy that we could have published.
Not likely, but possible.
I'm not sure if this was protection related, but once I rented a C64 game and it wouldn't work. The store wanted me to pay for it until we booted it on their system and saw it work. Years later, I read in a magazine that that particular game wouldn't work with my particular printer. :( Weird.
Can a crack and/or cracktro be considered protected under copyright law?
I know you skipped over it, but technically it was still included without permission, I assume.
This is a rather limited point of view - the draw to emulation is much more than convenience.
There are thriving communities based around homebrew, preservation, ROM hacking, translations, prototype collecting, debugging, tool-assisted speedrunning, enhancements, music, artwork and reverse engineering.
> 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.
Just because we usually associate an exception with unintended behavior doesn't mean that is always the case.
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?)
On top of that, you can't use those wasted bits for anything else anyway, so what's the point?
Then design your toolchain so that you have knowledge that the address space is only X bits.
In fact, doing some research shows that 8-bits of the address are often ignored on the Motorola 68000 leaving a 24-bit memory address.
For example, in V8 they use the bottom 2 bits of pointers for other things. They get away with it because objects are 4 byte aligned.
This kind of trick is easier to get away with if you know exactly which CPUs your software is going to run on. Otherwise your software could break horribly when a new generation of CPU comes around.
There are relatively few architectures which have address sizes that are not a power of two, mostly because this means an array of addresses requires wasteful padding for alignment. And for 32-bit architectures, even at the time it was realistic for high end workstations to have 4G of physical RAM, so there was a good reason to support this at the architectural level. Removing this for a game console after it was developed would have been more expensive than leaving it in.
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.
You could do something similar with PS1, PS2 and PSP - use undocumented methods to overclock the CPU and make them run quicker.
[1] http://all-things-andy-gavin.com/2011/02/06/making-crash-ban...
Even on the PS1 where I used an undocumented graphics command to get a 'free' screen clear (nothing dodgy and we learned about it by watching Tekken in the PA) I got told to remove it.
> I had a quick look at the BAT mappings it was setting up. The data BATs were set up in a regular manner, with a 1:1 mapping from virtual memory to physical memory. But the instruction BATs was a weird 1:1 mapping with a bunch of holes. It mapped 128KB, followed by a 1.85MB gap, then 512KB followed by at 1.5MB gap. Then 1MB followed by a 11MB gap and a final 2MB.
> My guess, is the important code that would run multiple times a frame was positioned into areas backed by BATs (with linker scripts), as BAT mappings are nice and fast. Then they would use page tables to fill in the gaps with more uncommon code.
> Most of the uncommon code would be backed by invalid memory, until something jumped to it. Then a pagefault handler would decompress and/or copy that code from auxiliary ram into a cache backed by real memory, and set up page tables to map the code into place.
> Complicated, but would allow them to squash a large executable into the limited ram of the gamecube.
https://www.reddit.com/r/programming/comments/51f1yz/booting...
Interesting
It'd be a wonderful kind of postmortem.
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.
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.