All Projects → DDoS → Gbaid

DDoS / Gbaid

Licence: mit
A GameBoy Advance emulator in D

Programming Languages

d
599 projects

Projects that are alternatives of or similar to Gbaid

Mock Kakin
崩坏3rd蛋池抽取模拟器,支持多种配置定义模式,并且较好的还原了游戏内的概率。
Stars: ✭ 29 (-62.82%)
Mutual labels:  game, emulator
Rhisis
Rhisis is an experimental FlyFF MMORPG emulator built with C# 9 and .NET 5
Stars: ✭ 132 (+69.23%)
Mutual labels:  game, emulator
Azerothcore Wotlk
Complete Open Source and Modular solution for MMO
Stars: ✭ 1,330 (+1605.13%)
Mutual labels:  game, emulator
Rustynes
👾 An NES emulator by Rust and WebAssembly
Stars: ✭ 399 (+411.54%)
Mutual labels:  game, emulator
Quadplay
The quadplay✜ fantasy console
Stars: ✭ 563 (+621.79%)
Mutual labels:  game, emulator
Gameboy.live
🕹️ A basic gameboy emulator with terminal "Cloud Gaming" support
Stars: ✭ 4,263 (+5365.38%)
Mutual labels:  game, emulator
Snowflake
❄️ 🎮 Extensible Emulator Frontend written in C# and Javascript
Stars: ✭ 185 (+137.18%)
Mutual labels:  game, emulator
Cemu graphic packs
Community Graphic Packs for Cemu
Stars: ✭ 916 (+1074.36%)
Mutual labels:  game, emulator
Projectdmg
C# GameBoy Emulator
Stars: ✭ 57 (-26.92%)
Mutual labels:  game, emulator
Craft
A simple Minecraft clone written in C using modern OpenGL (shaders).
Stars: ✭ 8,957 (+11383.33%)
Mutual labels:  game
Expo Three Demo
🍎👩‍🏫 Collection of Demos for THREE.js in Expo!
Stars: ✭ 76 (-2.56%)
Mutual labels:  game
Sdlpal
SDL-based reimplementation of the classic Chinese-language RPG "Xiān jiàn Qí Xiá Zhuàn" (also known as PAL).
Stars: ✭ 1,190 (+1425.64%)
Mutual labels:  game
Warriorjs
🏰 An exciting game of programming and Artificial Intelligence
Stars: ✭ 8,673 (+11019.23%)
Mutual labels:  game
Soldat
Soldat is a unique 2D (side-view) multiplayer action game
Stars: ✭ 1,199 (+1437.18%)
Mutual labels:  game
Dungeonrush
👾🐍 A opensource game inspired by Snake, written in pure C with SDL
Stars: ✭ 1,192 (+1428.21%)
Mutual labels:  game
Gloomy Dungeons 2
Gloomy Dungeons II - a continuation of old-school 3d-shooter.
Stars: ✭ 77 (-1.28%)
Mutual labels:  game
Game Of Github
Play Game of Life in your GitHub contributions
Stars: ✭ 74 (-5.13%)
Mutual labels:  game
Travian Kingdom
Travian Kingdom server script free. Not finish yet. Abandoned.
Stars: ✭ 74 (-5.13%)
Mutual labels:  game
Damn.dog
A guessing game for WikiHow illustrations.
Stars: ✭ 78 (+0%)
Mutual labels:  game
Openrails
Open Rails: free train simulator that supports the world's largest range of digital content.
Stars: ✭ 76 (-2.56%)
Mutual labels:  game

GBAiD

GBAiD stands for GameBoy Advance in D. I've started this project as an effort to learn the D programming language.

This emulator is written mostly in pure D, with some optional inline x86 (32 and 64 bit) assembly in the display emulation to help with performance.

Current state

Go dragons!

All of the GameBoy's built-in hardware has been implemented, except for some advanced serial communication port functionality.

I've tested 8 games so far:

  • Super Mario Advance
  • Mario Kart
  • Pokemon Emerald (full play-through completed)
  • Pokemon Ruby/Sapphire
  • Pokemon Fire Red
  • 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 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 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)

When a multiplayer count is specified, one ROM must be given per player. Instead of one path, specify multiple successive paths.

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, either on exit or quick save
--scale -r Scaling factor (float) Draw the display at "factor" times the original resolution
--fullscreen -R None Display in full screen mode (--scale will be ignored)
--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 Enable the controller as an input method
--multiplayer -m Player count (max 4) Run multiple GBAs with an emulated link cable
--raw-audio N/A None    Don't filter the audio output of the emulator; will generally be noisier
--save-memory N/A See saves section What memory configuration to use for the main save
--eeprom N/A See saves section What memory configuration to use for the EEPROM
--rtc N/A See saves section What memory configuration to use for the RTC

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.

When using multiplayer, the same save file resolution algorithm is used. If there are conflicting paths, they are fixed by appending an index. It's incremented for each previous player that has a conflicting save file.

The emulator can almost always auto-detect the save type, but it's not guaranteed to always work. If it doesn't work, then you will need to use the following switches to configure the save memory manually.

The --save-memory switch is used to configure the main save memory. It takes any one of the following arguments (case senstive).

Argument Description
SRAM 64KB of static RAM
FLASH_512K 512Kb of Flash
FLASH_1M 1Mb of Flash
NONE No main save memory
AUTO Decide from the ROM

The --eeprom and --rtc switches are used to configure the optional EEPROM and RTC respectively. They take any one of the following arguments (case senstive).

Argument Description
ON Enabled
OFF Disabled
AUTO Decide from the ROM

These flags are only needed when creating a new save, after that the format is saved in the save file.

GBA 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

Emulator controls

These will be re-mapable in a future version.

Function Keyboard Controller
Quick save Q X
Switch player 1 to 4 N/A

Quick saves are not save states, they just write the contents of the save memory to the save file immediately. Otherwise this is only done on exit. This is useful to ensure you do not loose game progress if the emulator crashes or fails to close normally. Note that quick saves are disabled when using the -N switch.

Multiplayer

Multiplayer support is only in alpha. Currently it's not even possible to control players at the same time. The active player must be switched using the number keys. It can at least be used for simple things, like trading Pokémon. Mario Kart multiplayer races work, but without simultaneous players they aren't very exciting...

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 (unless you are using the full screen mode).

License

GBAiD is licensed under MIT

TODO

  • Fix LoZ Minish Cap bug: Link disappears when walking into water in Castor Winds
  • Emulator pause feature
  • Save states with quick saves

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.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].