mGBA is an excellent, cross-platform GBA emulator
The Nintendo Gameboy Advance was an amazing handheld console, and fans continue playing their favorite games on the portable devices even today. But you can always emulate the games for an enhanced experience or just for nostalgia.
MGBA is an excellent GBA emulator that is available for many platforms. Unlike most emulators, mGBA does not require a BIOS to play the games, and you can play Gameboy and Gameboy Color titles as well.
So, if you have your ROMs and the emulator, you can start playing right away. Hit Ctrl + O or use the File menu > Load ROM, to select your game. mGBA supports many formats GBA, GB, GBC, ELF, AGB, MB, ROM, BIN, SGB. The emulator can open games in archives directly, and works with ZIP and 7z files.
The controls are fairly simple, use the Up, Down, Left and Right arrow keys for moving around, A and S act as the Left and Right shoulder buttons, while Z and X are used for the B and A keys respectively. As for the Select and Start buttons, those are configured to the Backspace and Enter keys. If you don't like the shortcuts and want to change them, e.g. you're used to WASD, click on the Set All button and define your own controls. You may rewind or fast-forward the gameplay using hotkeys.
MGBA also supports game controllers, I tested it with my PS4's DualShock 4 (via Bluetooth) and it worked with no problems or need for configuration. To change the size of the emulator's screen, click the Audio/Video menu > Frame Size and select an option. The Alt + Enter hotkey toggles between full-screen and windowed modes. Frameskip is supported as well, in case you have issues with the game.
MGBA supports up to 9 save states per game, which is convenient. Save states are faster to load, but you should make an in-game save whenever possible, to avoid errors in any emulator. Speaking of which, mGBA can load SAV save files (in-game saves, not save states) from other emulators. Retroarch saves it in the .SRM format, but you don't need to convert it to SAV. Just rename the extension to .SAV. Open mGBA, click the File menu > Load Alternate save game, select the SAV file, and you're good to go. As long as the game save and ROM file names match, it will work.
I use this method to play the same game on my computer and my Android phone. You can use the SyncThing app and SyncTrazor desktop program to keep the files in sync between devices. In this case though, you'll have to keep renaming the extension to SRM or SAV as required.
If you're bored with the game's graphics, you can enable shaders. I played with shaders enabled for the most part, and they change the appearance of games quite nicely. Personally, I liked the LCD and XBR shaders over the rest. This is a matter of personal preference, here are some screenshots that show the differences.
The emulator has options to take a screenshot, and can also be used to record a video of the gameplay, so you don't need third-party tools to do the job.
The available options include MP4, WebM, AVI, MKV, GIF, APNG, and PNG.
MGBA supports the Solar Sensor which a few game cartridges came with, e.g. Boktai. You may manually increase the Solar Sensor as required from the emulation menu. mGBA recently added support for Dolphin (Gamecube emulator) connectivity, you can read more about it at the announcement page.
Performance wise, mGBA runs smoothly while using very little resources, about 6% of the CPU and 110MB of RAM (on default graphics settings).
MGBA is an open source program, it is available for Windows, Linux, macOS, PSVita, Nintendo 3DS, Switch and Wii, and as a libretro core for Retroarch. I had been using VBA-M on my PC for a long time, before trying the mGBA core on Retroarch Android, which convinced me to try the Windows version. Both emulators are fine in my opinion. mGBA is more actively developed, and its menus are somewhat on the user-friendly side, but the shaders in VBA-M are better, especially the xBRZ.