Astral/H3X
Member
This is a thread that I wanted to make a while ago, but I was a Junior member at the time and so I couldn't, but here it is! I don't work at Nintendo, but I'd like to see someone poke any good holes in the whole thing. This ALSO applies to the DS VC that I see some people asking for.
I see a whole bunch of people talking about "Woe is us, Nintendo won't release the GBA on eShop! Noooo!" And talking about how they are so lazy and yadda yadda yadda. I've tried to make this as a singular post before, but it usually gets drowned out in everything else, so here we go:
The main reason that, I feel, is that the 3DS isn't emulating the GBA at all. We all know how Nintendo did Wii BC on the Wii U: it downclocks itself, and then runs the code natively. This allows for a host of advantages, namely perfect speed, compatibility, and errorless execution. It does however, come with a few disadvantages; it can't access anything Wii U specific. No controllers, no Gamepad, and no OS or Miiverse. Based on this, we can see a very large number of similarities between this and the 3DS's implementation of GBA VC. Looking at it, there are no savestates, no sleep, no wireless, no OS, and all in all, no enhancements whatsoever. The most we get is deciding between full screen and blown up, but as we can see with the DS/i compatibility, that appears to actually be hardware based, not software. In fact, the ONLY thing that the 3DS does other than a real deal GBA, is the bottom screen displays a message, and allows you to back out of the game, which still doesn't pause or affect the GBA game in any way.
The GBA, DS, and 3DS all have one major similarity: they all have ARM CPUs. Just like the Wii U has a turbocharged Wii CPU, which in turn has a turbocharged GCN CPU, it's highly likely that the 3DS can natively run DS and GBA code. The 3DS is dual core, so I'd wager that it's actually the second core running the very small bit of background work, being the warning message and the reboot menu. IIRC, the GBA loaded the entire game into RAM during the bootup, and the 3DS probably hands the ROM into some RAM and runs it as such, and simply has a .sav in the location the GBA thinks the battery is.
tl;dr It's not emulating GBA, it's running it AS a GBA.
So why does it do this? Why not just... I don't know, emulate it?
It's probably just not powerful enough. I've... dabbled... into DS based flashcarts, and one of my greatest dreams was to play any GBA game on there that I wished. I got that, but before that I experimented with way too many things and found, rather unfortunately, that the DS cannot emulate a DS. It's simply too weak, and the only way is to get it to run it natively. Even with the DSTwo, a cart heralded as one that could do GBA emulation on its own, was full of choppy framerates and bad compatibility, and that was with a whole extra CPU to help it.
The 3DS, while easily powerful enough to get past DSTwo levels of speed/compatibility, probably just isn't quite powerful enough to run GBA games to the level they want. Nintendo wants it damn perfect, to a flaw. They trickle releases on the VC, and a large bit of why is they recode every emulator for perfect running. A general purpose emulator (what Sony does) simply isn't good enough for them, I suppose.
tl;dr - Not quite strong enough for what Nintendo wants out of it on this front.
So why doesn't Nintendo let people freely download the native running VC versions?
Probably to save face, in its own way. The Virtual Console has a list of features, save states, pausing, working with the OS, etc etc, and these features don't exist on the GBA VC. I feel Nintendo doesn't want to do that, since a lot of people would be confused, or cry laziness, and all sorts of things that Nintendo doesn't want. It's probably much better, in their eyes, to keep them as a specific reward for those who bought the system early. They also assume that people who were early adopters would be Nintendo's loyalists, by and large, and would not be the easily confused mass market.
I DO however think they did try to get it working as an emulated VC, instead of native code. We were promised GBA VC "soon" after the Ambassador program, but it took all the way until December before we actually got it, and even then it was a close call. That's quite a bit of time to work out .sav and RAM passthrough, eh? They were probably working on the emulation based model before they had to fall back to this version.
tl;dr, stupid confused people.
The overall tl;dr of this is a combination of technical limitations and stupid confusable consumers. If anyone knows that any of this is specifically wrong, let me know, but I still see a lot of people bashing on Nintendo for this, even though it's likely the best route they could have gone with, when factoring the non-enthusiast market.
And please, stop yelling at Nintendo for this. Maybe petition them to say we aren't all retarded consumers, or that it really wouldn't be that confusing if two of these games ran slightly different than their NES games.
EDIT: Summary for people who can't be bothered to read/or I explained it too badly to understand.
There are two ways of accomplishing running a game. One way is through Emulation, which is what Sony does. Emulation allows you to have it set up where you can add features, such as filters, save states, and other things of that nature. HOWEVER, emulation is not only far from perfect, but is also highly demanding! A PSP can play a GBA game, but is far from perfect on many titles -- reason why is because more accuracy = more required horsepower.
The other way is to simply run it as native code. This provides PERFECT speed, compatibility, and sound, while only taking the exact power required of the original system (if your system is equal or stronger, it's perfect). It has a few major disadvantages, however. The first is it requires a FULLY COMPATIBLE HARDWARE. Without it, you can't even think about it. It'd be like opening a .exe on your Android phone, but even more incompatible. It ALSO limits the game to only the features of the original system. GBA games can't sleep, and neither DS or GBA can use the Home Menu. That's because those games weren't programmed with a Home Menu or Sleep in mind.
Sony uses Emulation, Nintendo (for Wii, DS, and GBA) uses Native code.
I see a whole bunch of people talking about "Woe is us, Nintendo won't release the GBA on eShop! Noooo!" And talking about how they are so lazy and yadda yadda yadda. I've tried to make this as a singular post before, but it usually gets drowned out in everything else, so here we go:
The main reason that, I feel, is that the 3DS isn't emulating the GBA at all. We all know how Nintendo did Wii BC on the Wii U: it downclocks itself, and then runs the code natively. This allows for a host of advantages, namely perfect speed, compatibility, and errorless execution. It does however, come with a few disadvantages; it can't access anything Wii U specific. No controllers, no Gamepad, and no OS or Miiverse. Based on this, we can see a very large number of similarities between this and the 3DS's implementation of GBA VC. Looking at it, there are no savestates, no sleep, no wireless, no OS, and all in all, no enhancements whatsoever. The most we get is deciding between full screen and blown up, but as we can see with the DS/i compatibility, that appears to actually be hardware based, not software. In fact, the ONLY thing that the 3DS does other than a real deal GBA, is the bottom screen displays a message, and allows you to back out of the game, which still doesn't pause or affect the GBA game in any way.
The GBA, DS, and 3DS all have one major similarity: they all have ARM CPUs. Just like the Wii U has a turbocharged Wii CPU, which in turn has a turbocharged GCN CPU, it's highly likely that the 3DS can natively run DS and GBA code. The 3DS is dual core, so I'd wager that it's actually the second core running the very small bit of background work, being the warning message and the reboot menu. IIRC, the GBA loaded the entire game into RAM during the bootup, and the 3DS probably hands the ROM into some RAM and runs it as such, and simply has a .sav in the location the GBA thinks the battery is.
tl;dr It's not emulating GBA, it's running it AS a GBA.
So why does it do this? Why not just... I don't know, emulate it?
It's probably just not powerful enough. I've... dabbled... into DS based flashcarts, and one of my greatest dreams was to play any GBA game on there that I wished. I got that, but before that I experimented with way too many things and found, rather unfortunately, that the DS cannot emulate a DS. It's simply too weak, and the only way is to get it to run it natively. Even with the DSTwo, a cart heralded as one that could do GBA emulation on its own, was full of choppy framerates and bad compatibility, and that was with a whole extra CPU to help it.
The 3DS, while easily powerful enough to get past DSTwo levels of speed/compatibility, probably just isn't quite powerful enough to run GBA games to the level they want. Nintendo wants it damn perfect, to a flaw. They trickle releases on the VC, and a large bit of why is they recode every emulator for perfect running. A general purpose emulator (what Sony does) simply isn't good enough for them, I suppose.
tl;dr - Not quite strong enough for what Nintendo wants out of it on this front.
So why doesn't Nintendo let people freely download the native running VC versions?
Probably to save face, in its own way. The Virtual Console has a list of features, save states, pausing, working with the OS, etc etc, and these features don't exist on the GBA VC. I feel Nintendo doesn't want to do that, since a lot of people would be confused, or cry laziness, and all sorts of things that Nintendo doesn't want. It's probably much better, in their eyes, to keep them as a specific reward for those who bought the system early. They also assume that people who were early adopters would be Nintendo's loyalists, by and large, and would not be the easily confused mass market.
I DO however think they did try to get it working as an emulated VC, instead of native code. We were promised GBA VC "soon" after the Ambassador program, but it took all the way until December before we actually got it, and even then it was a close call. That's quite a bit of time to work out .sav and RAM passthrough, eh? They were probably working on the emulation based model before they had to fall back to this version.
tl;dr, stupid confused people.
The overall tl;dr of this is a combination of technical limitations and stupid confusable consumers. If anyone knows that any of this is specifically wrong, let me know, but I still see a lot of people bashing on Nintendo for this, even though it's likely the best route they could have gone with, when factoring the non-enthusiast market.
And please, stop yelling at Nintendo for this. Maybe petition them to say we aren't all retarded consumers, or that it really wouldn't be that confusing if two of these games ran slightly different than their NES games.
EDIT: Summary for people who can't be bothered to read/or I explained it too badly to understand.
There are two ways of accomplishing running a game. One way is through Emulation, which is what Sony does. Emulation allows you to have it set up where you can add features, such as filters, save states, and other things of that nature. HOWEVER, emulation is not only far from perfect, but is also highly demanding! A PSP can play a GBA game, but is far from perfect on many titles -- reason why is because more accuracy = more required horsepower.
The other way is to simply run it as native code. This provides PERFECT speed, compatibility, and sound, while only taking the exact power required of the original system (if your system is equal or stronger, it's perfect). It has a few major disadvantages, however. The first is it requires a FULLY COMPATIBLE HARDWARE. Without it, you can't even think about it. It'd be like opening a .exe on your Android phone, but even more incompatible. It ALSO limits the game to only the features of the original system. GBA games can't sleep, and neither DS or GBA can use the Home Menu. That's because those games weren't programmed with a Home Menu or Sleep in mind.
Sony uses Emulation, Nintendo (for Wii, DS, and GBA) uses Native code.