Probably, VBA and mGBA are almost the same as an emulator.
Because if there is a problem as an emulator, the game will not work.
If the game works and can be played, then it is correct as an emulator.
On top of that, if there is a problem, I think it is undefined behavior.
In other words, when there is a bug in the code of your game, and it refers to memory that should not be referred to, or when it executes a strange undefined instruction, this is the behavior.
The mGBA aims to make this undefined behavior as close as possible to the actual game console,
The no$gba debugger, which aims to stop for debugger (although sometimes the debugger hangs because it cannot be stopped),
And the VBA that is neither of those.
In terms of test play, It best when the undefined behavior is stopped like the no$gba debugger.
The sooner it stops, the better, because if it doesn’t, you won’t know there is a bug.
The earlier the timing of the stop, the better.
For example, if it is stopped after the stack is exhausted, it cannot be debugged.
In this sense, I think no$gba debugger is superior.
I also appreciate the fact that it has the most decent debugger function among the three.
Compared to VBA and mGBA, which can set break points but have questionable continue behavior, the no$gba debugger works well.
However, when viewed as an emulator for playing games, the no$gba debugger is the worst.
This emulator is focused on debugging games, and I don’t think it thinks much about playing games.
And it is not open source.
This undefined behavior issue has been a popular topic in browsers.
As I’m sure you all know, it’s the IE vs mozilla(netscape) vs others war.
//In the end, KDE’s browser (Konqueror/KHTML), which was a weak force among others, became WebKit with the support of apple, and then became chrome by google, and won the world.
Browsers don’t work by magic, they work by code that interprets HTML, css, and javascript.
There is code written to interpret them, but undefined behaviors, such as “does it work if the value that is expected to be an integer is negative?” and other undefined behaviors caused a lot of trouble.
Of course, It’s your wrong HTML is bad, but from the user’s point of view, it’s not.
From the user’s point of view, it doesn’t matter if the code is right or wrong, they just want to see the website.
I think this is the same with emulators.
Since it is an emulator, it may be better to be faithful to the actual device, but the users don’t care about that, they just want to play the game.