mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-10 21:43:23 -05:00
Thirty profiles from the ES-DE batch, each source-verified by the session that wrote it and passing the schema and semantic checks. Five declare no files at all and say why in notes referenced to the code: NGP.emu, openbor, Plastic, Swan.emu and XeniOS. Twenty-eight files come with them, every one declared by the profile that needs it and matching the hash it declares, with no duplicate of anything already held: the NetherSX2 Turnip Classic assets, the Speccy machine ROMs, the Virtual Boy homebrew the app bundles, Snes9x EX+'s bundled game, and sixtyforce's Overrides.plist, which carries a size and no hash because the binary never checks one. supermodel gains the four data files it reads from its install tree, hakux marks its controller map unsourceable now that the asset manager is known to read inside the package, and nethersx2 sheds the two core aliases that belong to the Turnip profiles.
111 lines
6.1 KiB
YAML
111 lines
6.1 KiB
YAML
emulator: "My Boy!"
|
|
type: standalone
|
|
core_classification: embedded_hle
|
|
source: "https://play.google.com/store/apps/details?id=com.fastemulator.gba"
|
|
upstream: closed-source
|
|
author: "Pixel Respawn LLC"
|
|
profiled_date: "2026-08-12"
|
|
core_version: "2.0.3"
|
|
display_name: "Nintendo - Game Boy Advance (My Boy!)"
|
|
mode: standalone
|
|
cores:
|
|
- "my-boy"
|
|
- "My Boy!"
|
|
- "MY-BOY"
|
|
systems:
|
|
- nintendo-gba
|
|
|
|
notes: |
|
|
Android package com.fastemulator.gba, closed source, sold on Google Play, reached by
|
|
ES-DE through its MY-BOY find rule and started with android.intent.action.VIEW on the
|
|
content URI of the game. Two Play distribution builds carrying the developer
|
|
certificate sha256 942e532dc3a3608a1d04760b8e1b09a2f11c0c8f64ae8bb441f0c8ab1122a7ab
|
|
are read here: 2.0.3 (versionCode 90053, minSdk 21, targetSdk 33, arm64-v8a and
|
|
armeabi-v7a, bundletool v1 signer and the Play source stamp) and 1.8.0 (versionCode
|
|
90048, armeabi and x86). Line numbers below are those of 2.0.3 and native addresses
|
|
are arm64-v8a of the same build; 1.8.0 addresses are its x86 library. Four rebuilt
|
|
copies were rejected on their certificate: 2.0.9 (CN=APKVISION.ORG), 2.0.8 (C=RU,
|
|
O=A1), 2.0.6 (C=IN) and a second 1.8.0 (O=jojoy.mod).
|
|
|
|
One system is emulated, Game Boy Advance, in libgba.so behind a JNI bridge
|
|
(Link.java:21-23,83). Content is a .gba or .bin document, or the first entry with one
|
|
of those extensions in a zip document (g.java:71-78,80-100,113-122,
|
|
EmulatorActivity.java:2001).
|
|
|
|
The BIOS is the one file the user supplies. The document picker takes any name from
|
|
any location, and the choice is stored as the persisted URI biosUri
|
|
(settings/EmulatorSettings.java:65-73,121-135). A document is
|
|
accepted only when its reported size is exactly 16384 bytes, or, for an
|
|
application/zip document, when an entry declares that size; the name is never
|
|
examined (g.java:66-68,80-100,102-111). One that fails leaves the preference reading
|
|
"Unrecognized BIOS file." at pick time and on every later visit to the screen
|
|
(settings/EmulatorSettings.java:101-108,131-133). At game start the stream is read
|
|
until 16384 bytes are in hand and anything shorter raises, which reports "Load BIOS
|
|
failed." and passes null (EmulatorActivity.java:1564-1599).
|
|
|
|
The read happens only while Use BIOS is on, off until the user turns it on; both Boot
|
|
BIOS and the file picker depend on that switch, and the advanced reset returns all
|
|
three to their defaults (res/xml/settings_advanced.xml,
|
|
settings/EmulatorSettings.java:79-80).
|
|
|
|
The bytes are copied to the head of the emulator's 32 KB BIOS area, offsets 0x2c and
|
|
0x39 are cleared, the remainder is zero filled and a flag byte at the end of the area
|
|
records that an image is installed (libgba.so 0x165fbc-0x166070, 0x15faf0-0x15fb5c).
|
|
With no image that flag is false and the area is filled instead with a 692 byte
|
|
replacement inflated from a 488 byte deflate stream in .rodata, byte identical between
|
|
1.8.0 and 2.0.3 (0x15ec0c-0x15ec60). Nothing else about the file is examined: no hash
|
|
and no content test exists on either side of the bridge.
|
|
|
|
Two features refuse to mix the two modes. A save state made under the other setting
|
|
returns -5 and reports "The save file requires using the BIOS file."
|
|
(EmulatorActivity.java:909), and a link connection whose peer disagrees returns 3 and
|
|
reports "BIOS settings do not match!" (EmulatorActivity.java:768).
|
|
|
|
1.8.0 reached the same file through a filesystem path. Its own browser filtered on
|
|
.bin, .bios and .zip and wrote the path to biosFile
|
|
(settings/EmulatorSettings.java:478-486, FileBrowserActivity.java:196-211), and the
|
|
native loader opened it with fopen "rb", or walked it as a zip and took the first
|
|
entry, keeping either only when the size callback returned true for exactly 16384
|
|
bytes (0x10b680-0x10b76f, 0x10b770-0x10b783, 0x10a1e0-0x10a38d). That build also
|
|
looked beside the ROM for a .ips then a .ups image and applied it on load, and wrote
|
|
"<name> (patched).gba" from the manual patch entry (Link.java:18,
|
|
MainActivity.java:181-208, 0x10b910). Neither the code nor the strings survive in
|
|
2.0.3.
|
|
|
|
Per game settings come from rom_config.ini, an asset of the application keyed on the
|
|
four character game code (Console.java:108-130). Shaders are read from the assets of the
|
|
separate package com.fastemulator.shaderpack, whose own shaders array names them
|
|
(EmulatorActivity.java:1491, settings/EmulatorSettings.java:420,434-438). Battery
|
|
saves, states, cheats, screen layouts and key maps are written by the application
|
|
under its external files directory (w0/d.java:13-43, Console.java:61-68).
|
|
|
|
files:
|
|
- name: gba_bios.bin
|
|
system: nintendo-gba
|
|
required: false
|
|
hle_fallback: true
|
|
has_builtin: true
|
|
agnostic: true
|
|
size: 16384
|
|
validation: [size]
|
|
config_key: "useBios"
|
|
description: "Game Boy Advance BIOS"
|
|
note: >-
|
|
Chosen from any location under any name through the document picker, or taken from
|
|
the first entry of that size in a zip document. A file of another size is refused
|
|
when picked and again when the game starts, and the emulator runs on the
|
|
replacement compiled into its library.
|
|
source_ref: "My Boy! 2.0.3 g.java:66-68 (size test), g.java:80-100 (zip walk and direct open), settings/EmulatorSettings.java:65-73,121-135 (picker and validation), EmulatorActivity.java:1564-1599 (read and loadBios), libgba.so 0x165fbc-0x166070 (bridge), 0x15faf0-0x15fb5c (install), 0x15ec0c-0x15ec60 (replacement); 1.8.0 settings/EmulatorSettings.java:478-486, libgba.so 0x10b680-0x10b76f, 0x10b770-0x10b783, 0x10a1e0-0x10a38d"
|
|
|
|
- name: rom_config.ini
|
|
system: nintendo-gba
|
|
required: false
|
|
bundled: true
|
|
description: "Per game settings database"
|
|
note: >-
|
|
Opened from the application assets when a game starts and read as the section
|
|
named by its four character code. Save type, flash size, mirroring, sprite limit,
|
|
cpu core and the timing hacks become console options, and the addon key arms the
|
|
solar, tilt, gyroscope and rumble sensors. Byte identical in 1.8.0 and 2.0.3.
|
|
source_ref: "My Boy! 2.0.3 Console.java:108-130, EmulatorActivity.java:642,1132; 1.8.0 Console.java:130-151"
|