Files
libretro/emulators/mgba.yml
T
Abdessamad Derraz b3b3880c19 chore: say which repository each source_ref cites
Profiles that read two repositories, a libretro port and its upstream,
now prefix each citation with source or upstream, decided by which tree
carries the cited value at its pin. The emulator pages use the word to
tell libretro glue, emulator code as the port carries it, and the
upstream emulator apart.
2026-10-20 09:23:41 +02:00

138 lines
5.6 KiB
YAML

emulator: mGBA
type: libretro
core_classification: official_port
source: "https://github.com/libretro/mgba"
upstream: "https://github.com/mgba-emu/mgba"
logo: "https://raw.githubusercontent.com/mgba-emu/mgba/master/res/mgba-256.png"
profiled_date: "2026-03-24"
source_commit: "7a12d6d4b9acb14c0ae62c9166b6a2f3d08007f6"
core_version: "0.10-dev"
display_name: "Nintendo - Game Boy Advance (mGBA)"
cores:
- mgba
- mgba_fork
systems:
- nintendo-gba
- nintendo-gb
- nintendo-gbc
- nintendo-sgb
notes: |
mGBA is a Game Boy Advance emulator with Game Boy, Game Boy Color, and
Super Game Boy support.
All BIOS files are optional. mGBA ships a built-in HLE BIOS for GBA
(src/gba/hle-bios.c) that covers most software. The real BIOS improves
accuracy (startup logo, some edge-case SWI behavior). There is no HLE
BIOS for GB/GBC/SGB -- those rely on GBSkipBIOS() if no file is found.
BIOS loading is controlled by two core options:
mgba_use_bios (default ON) - whether to look for BIOS files at all
mgba_skip_bios (default OFF) - skip the boot animation even if loaded
The libretro port resolves BIOS filenames in retro_load_game()
(src/platform/libretro/libretro.c:2060-2118). It picks the filename
based on detected model:
GBA -> gba_bios.bin
GB (DMG/MGB) -> gb_bios.bin
GBC (CGB/AGB) -> gbc_bios.bin
SGB -> sgb_bios.bin
SGB2 -> gb_bios.bin (falls to default, missing case)
The standalone core (src/gb/core.c:649-696) correctly maps SGB2 to
sgb_bios.bin (marked TODO for a dedicated file). The libretro port
omits GB_MODEL_SGB2 from its switch, so SGB2 falls to default.
GBIsBIOS() in src/gb/gb.c validates BIOS files by CRC32 checksum.
Accepted checksums cover DMG, DMG0, MGB, SGB, SGB2, CGB, CGB0, CGBE,
AGB, and AGB0 revisions.
files:
# -------------------------------------------------------
# Game Boy Advance - BIOS (optional, HLE fallback)
# -------------------------------------------------------
- name: gba_bios.bin
system: nintendo-gba
required: false
hle_fallback: true
size: 16384 # 16 KB (0x4000, GBA_SIZE_BIOS)
validation: [size]
note: "GBA BIOS. HLE replacement built in. Real BIOS adds boot logo and full SWI accuracy."
source_ref: "source src/platform/libretro/libretro.c:2068"
# -------------------------------------------------------
# Game Boy - boot ROM (optional, skip fallback)
# -------------------------------------------------------
- name: gb_bios.bin
system: nintendo-gb
required: false
size: 256 # 256 B (0x100)
crc32: ["59c8598e", "c2f5cc97", "e6920754", "ec8a83b9", "53d0dd63", "66cc6d94", "908ba8de", "783e69c2"]
validation: [crc32]
note: "DMG/MGB boot ROM. Scrolling Nintendo logo. Skipped if absent."
source_ref: "source src/platform/libretro/libretro.c:2104, source src/platform/libretro/libretro.c:2111-2116, source src/gb/gb.c:50-63, source src/gb/gb.c:605-628, source src/gb/gb.c:661-665"
# -------------------------------------------------------
# Game Boy Color - boot ROM (optional, skip fallback)
# -------------------------------------------------------
- name: gbc_bios.bin
system: nintendo-gbc
required: false
size: 2304 # 2304 B (0x900)
crc32: ["41884e46", "e8ef5318", "e95dc95d", "ffd6b0f1", "570337ea", "69236128"]
validation: [crc32]
note: "CGB boot ROM. Used for CGB, AGB (GBA in GB mode), and SCGB models."
source_ref: "source src/platform/libretro/libretro.c:2097, source src/platform/libretro/libretro.c:2111-2116, source src/gb/gb.c:50-63, source src/gb/gb.c:605-628, source src/gb/gb.c:661-665"
# -------------------------------------------------------
# Super Game Boy - boot ROM (optional, skip fallback)
# -------------------------------------------------------
- name: sgb_bios.bin
system: nintendo-sgb
required: false
size: 256 # 256 B (0x100)
crc32: ["ec8a83b9", "53d0dd63", "59c8598e", "c2f5cc97", "e6920754", "66cc6d94", "908ba8de", "783e69c2"]
validation: [crc32]
note: "SGB boot ROM. SGB2 maps here in standalone (src/gb/core.c:655) but falls to gb_bios.bin in libretro."
source_ref: "source src/platform/libretro/libretro.c:2100, source src/platform/libretro/libretro.c:2111-2116, source src/gb/gb.c:50-63, source src/gb/gb.c:605-628, source src/gb/gb.c:661-665"
platform_details:
gba:
bios_size: 16384 # 16 KB
hle_bios: true
source_ref: "source src/gba/hle-bios.c, src/gba/gba.c:513-552"
note: |
GBALoadBIOS() validates size (must be exactly 0x4000) then computes
an internal checksum. Two official checksums are recognized:
GBA_BIOS_CHECKSUM = 0xBAAE187F (standard GBA)
GBA_DS_BIOS_CHECKSUM = 0xBAAE1880 (DS GBA mode)
Other checksums trigger a warning but the file is still loaded.
gb:
bios_size: 256 # 256 B
hle_bios: false
source_ref: "src/gb/gb.c:570-605"
note: |
GBIsBIOS() validates by CRC32. Accepted DMG-family checksums:
DMG0 = 0xC2F5CC97, DMG = 0x59C8598E, MGB = 0xE6920754
Files not matching any known checksum are rejected.
gbc:
bios_size: 2304 # 2304 B (0x900)
hle_bios: false
source_ref: "src/gb/gb.c:570-605"
note: |
Accepted CGB-family CRC32 checksums:
CGB = 0x41884E46, CGB0 = 0xE8EF5318, CGBE = 0xE95DC95D
AGB = 0xFFD6B0F1, AGB0 = 0x570337EA
sgb:
bios_size: 256 # 256 B
hle_bios: false
source_ref: "src/gb/gb.c:570-605, src/gb/core.c:654-656"
note: |
Accepted SGB CRC32 checksums:
SGB = 0xEC8A83B9, SGB2 = 0x53D0DD63
SGB2 maps here in standalone (marked TODO upstream). Libretro port
omits SGB2 case, falls to gb_bios.bin.