gbaid 0.2.0-alpha
A GameBoy Advance emulator in D
To use this package, run the following command in your project's root directory:
Manual usage
Put the following dependency into your project's dependences section:
GBAiD
GBAiD stands for <strong>G</strong>ame<strong>B</strong>oy <strong>A</strong>dvance <strong>i</strong>n <strong>D</strong>. I've started this project as an effort to learn the D programming language.
This emulator is written mostly in pure D, with some inline x86 (32 and 64 bit) assembly in the display emulation to help with performance.
Current state
All of the GameBoy's built-in hardware has been implemented, with the exception of sound.
I've tested 8 games so far:
- Super Mario Advance
- Mario kart
- Pokemon Emerald
- Legend of Zelda: A Link To The Past
- Legend of Zelda: Minish Cap
- Doom
- Classic NES Series: Super Mario Bros
- Classic NES Series: Metroid
- Street Fighter Alpha 3
The Classic NES Series games load, but are very glitchy. Considering the anti-emulation features implemented in them, just the fact that they load is a good thing.
The emulator uses under 40% CPU on an Intel Core i7-4980HQ (2.80GHz), for a single core.
Building
Dependencies
GBAiD uses SDL2 for input, OpenGL graphics, sound (eventually) and controller support.
- SDL 2.0.3 or greater is required
- OpenGL 2.0 or greater is required
Compiling
A D compiler and DUB should be installed. Compiling works with LDC and DMD, other compilers have not been tested.
Then use:
dub build --build release
It is necessary to build in release mode to have the performance required for the emulator to run at full speed.
LDC has better performance over DMD, use the --compiler ldc2
option to enable it.
Running
Use:
dub run --build release -- (arguments)
Again, use --compiler ldc2
option to enable LDC.
Or get the binary from the bin
folder after building and use:
./gbaid (arguments)
Arguments
At minimum, you must specify the path to the bios and rom images with
-b (path to bios) (path to rom)
The following arguments are also recognized:
Long form | Short form | Argument | Usage |
---|---|---|---|
--bios | -b | Path to bios | Specify bios image |
--save | -s | Path to save | Specify path for loading and saving saves |
--noload | -n | None | Don't load the save |
--nosave | -N | None | Don't save the save |
--scale | -r | Scaling factor (float) | Draw the display at "factor" times the original resolution |
--filtering | -f | LINEAR or NONE | What technique to use to filter the output texture to be drawn to the screen |
--upscaling | -u | EPX, XBR, BICUBIC or NONE | What technique to use to increase the resolution of the drawn texture |
--controller | -c | None | Disable keyboard input and use a controller instead |
--memory | -m | See saves section | What memory configuration to use for the save format |
Note that these arguments are case sensitive and that bundling is only supported by the noload
and nosave
switches.
Saves
Saves use a custom format and .gsf
extension that is not compatible with other emulators. If no save path is specified,
the same path as the ROM is used, but with the .gsf
extension instead of whatever the ROM image is using. If no save is
found matching either the given or default path, then a new save is created using that path. Saves are overwritten on exit,
unless the --nosave
argument is used.
The emulator can almost always auto-detect the save type, but for some games, such as the Classic NES Series, this will not work.
Instead, the --memory
flag should be used, with one of the arguments from below.
Argument | Description |
---|---|
SRAM | 64K of static RAM |
SRAM_EEPROM | 64K of static RAM and an EEPROM |
FLASH64K | 64K of Flash |
FLASH64K_EEPROM | 64K of Flash and an EEPROM |
FLASH128K | 128K of Flash |
FLASH128K_EEPROM | 128K of Flash and an EEPROM |
EEPROM | Only an EEPROM |
AUTO | Auto-detect, default |
For Classic NES Series games, use EEPROM
These flags are only needed when creating a new save, after that the format is saved in the save file.
Controls
These will be re-mapable in a future version.
Gamepad | Keyboard | Controller |
---|---|---|
A | P | A |
B | L | B |
Up | W | D-pad or L-stick |
Down | S | D-pad or L-stick |
Right | D | D-pad or L-stick |
Left | A | D-pad or L-stick |
R | R-shift | RB or RT |
L | L-shift | LB or LT |
Start | Enter | Start |
Select | Tab | Select |
Upscaling
All upscaling is implemented as OpenGL shaders.
- EPX is a simple but fast 2x upscaler.
- XBR is a 5x implementation, it gives better results, but is slower.
- BICUBIC is an interpolation method that offers better results than linear filtering at a greater cost.
It upscales to whatever is defined by the
--scale
switch so it should always be used with this method.
When you use the --upscaling
switch you should also use the --scale
switch with the appropriate factor for the selected algorithm.
License
GBAiD is licensed under MIT
Useful information
This page for a whole lot of detailed information on the hardware.
This and this for a list of all instructions supported by the ARM7TDMI CPU.
- Registered by Aleksi Sapon
- 0.2.0-alpha released 8 years ago
- DDoS/GBAiD
- MIT
- Authors:
- Dependencies:
- derelict-gl3, derelict-sdl2
- Versions:
-
0.3.0-beta 2017-Jul-19 0.2.1-alpha 2017-Mar-16 0.2.0-alpha 2016-Dec-26 0.1.2-alpha 2015-Mar-25 0.1.1-alpha 2014-Dec-27 - Download Stats:
-
-
0 downloads today
-
0 downloads this week
-
0 downloads this month
-
366 downloads total
-
- Score:
- 2.2
- Short URL:
- gbaid.dub.pm