4 ms·
ARM-based machines are kinda a gimme though. The ARM is remarkably well documented, very straightforward to decode (both THUMB and ARM modes) and every ISA leve
by deaddodo 9y ago
ARM-based machines are kinda a gimme though. The ARM is remarkably well documented, very straightforward to decode (both THUMB and ARM modes) and every ISA level is a superset of the previous.
You could write the entire opcode table for an ARMv7 chip and run ARMv3, ARMv4, etc code on it. Assuming there aren't any illegal instructions and that you've got the timing right, it should run just fine. So, essentially, you've got 1/3 the hard part done.
The GPU for the GBA was basically a chimera of the GB engine and the SNES's. Even had similar modes built into the BIOS. The Switch has a Maxwell based GPU. One very similar to that in the Tegra X1, which is very well documented (If you're willing to dig through their massive Technical Reference Manual (https://developer.nvidia.com/embedded/downloads https://developer.nvidia.com/embedded/downloads) and the nouveau source.
That just leaves audio, the bus, game formats, etc to be "discovered" or reverse engineered.
- photojosh 9y agoIIRC the official GBA SDK was leaked online pretty early, and that was really useful to the emulator developers. I've tried searching to verify it's as I remember, but looks like the dev forums are long vanished. (Used to follow the scene pretty closely and still have my flash cartridge for loading homebrew stuff somewhere around, even if I didn't actually do anything with it.)
- derefr 9y agoThe dev forums are dead-ish†, but the docs are still around; I was just trying to pick it up the other day and I found everything I needed (including modern things like a Rust libgba: https://github.com/tbelaire/rusty-TONC https://github.com/tbelaire/rusty-TONC). I decided against pursuing GBA homebrew in particular, though, because Nintendo DS homebrew is slightly more fun while not being particularly higher-level than the GBA. You've still got sprites and backgrounds and scale/rot/shear effects; but now you've got two GPUs (where either GPU can address either screen), and a 3D layer sandwiched in amongst the background layers and sprite layers. † Though, I mean, that's a matter of interpretation; all the modern 3DS and Wii U homebrew is still released/discussed/developed on the GBATemp forums, which—obviously—had its roots in the GBA homebrew scene.)
- photojosh 9y agoAlmost 20 years later, I'm still following and intrigued by the homebrew scene and I take my hat off in particular to emulator developers... but I get to do embedded/microcontroller development in my day job, and that's enough difficulty for me. ;)
- jchw 9y agoI'm myself wondering how much use Nouveau will be here. I imagine the approach that Yuzu will take is actually to HLE the entire operating system and implement things on the service level. During the Switch hacking talk at 34c3, they mentioned that there was a service containing the GPU driver. So basically, the idea would be to reverse engineer how the API works and try to implement the GPU on top of it. At least, this seems like a sane approach to me. It benefits from less of the existing reverse engineering work on NVidia chipsets, BUT it's higher level, which probably means it will be easier to understand and yield better performance in practice, especially since it is going to have to be implemented on top of higher level GPU APIs anyways.