Stuff like I/O (video output, sound output, and input) I got figured out, or I could use a ruby-style lib for that (and btw, ruby is cool Razz)
Kind of disappointing that I haven't managed to convince a single person to use it yet, but whatever :P
Though something like SNESGT that has open code would sure rock my boat.
I was going to mention that it's still not up-to-par with Super Sleuth, but looking at the latest WIP, all the common buggy games are working fine except Battle Blaze. F1 Grand Prix, Mecarobot Golf, etc are all great. Though HDMA timing is still off a bit, so MG is working due to something else running too fast.
Still, it's very, very good. Much improved over the last official release.
(save for demos written solely to show an emulator isn't correct, ie the equivalence of pissing contests in the emulation world)
I do resent the implied notion that this is why we write these demos. In fact, other people using them for exactly that reason is probably the main reason I don't release my demos. The other being that I'm too lazy to document them properly to be useful to others.
And honestly, you'd be really surprised by how often the obscure corner case you didn't think mattered ends up fixing a few random games you didn't even know had problems. But yeah, some of mine are just inane. Like the last write to VRAM before vblank ends will write the MDR (open bus register) instead of the value you want. 1:10 million chance of doing that accidentally.
The funny thing with GBA emulation is that getting much closer to accurate timing can actually make the emulation worse.
True, on the lowest end, falling back on emulation running too fast will get a lot more software working. I've had games break for being six clock cycles off @ 21MHz per frame. Very few games fail when running too fast, and they honestly probably should be declared broken even if they work on the real hardware.
Another thing people fail to realize is that the accuracy vs compatibility trade-off is exponential, whereas accuracy versus speed is linear:
For "Phantom System X":
95% compatibility can be done with 300MHz - 500MHz
99% compatibility at 700MHz - 1.4GHz
99.5% compatibility at 1.6GHz - 2.4GHz
99.8% compatibility at 3GHz - 4GHz
99.90% compatibility at 6GHz - 10GHz
etc.
Again, I think both approaches should be taken:
first, one that aims to get maximum compatibility with the lower-end spectrum of modern hardware; and
second, one aiming to document and preserve information about the system for the future when the low-end hardware is 10-50x faster than it was a few years ago.
This is especially important for older / rarer systems as developer hardware becomes increasingly uncommon. Sure, a GBA linker is easy to get, but try finding a Vectrex flash cart or a Wonderswan Color Wonder-Magic Linker.
A rule of thumb for platforms like this is to be generous in timing so that you give at least as many cycles as a real GBA would
It also gets better and better with future systems. As clock rates increase, the chances of games breaking from not being perfect decreases. Good thing, too. Just the pipelines + caches alone are getting near impossible to emulate perfectly.
Given GBA software is largely written in C, I suspect the SNES will be the last system that really cares about low-level details to get hack-free 100% commercial software compatibility. I don't even think it's feasible for a human being to get full cycle-level perfection of something as complex as the N64, anyway.
I think the heavy promotion of "accuracy oriented" emulators has caused a lot of misconceptions about what are and are not the causes of bugs in various emulators.
You may have a point. Though it's hard to say how many bugs are due to timing issues, and how many are due to logic bugs.
It's awfully easy to trust No$GBA as being more accurate when the source isn't out.
Thank you. I wish it didn't take another emulator author to have the guts to say that. I'm sure no$gba, Kega, pSX and SNESGT are all great, but without the source how can I really be sure?