Skip to content

My Boy! - RetroBIOS

Type standalone
Classification Embedded HLE
Source https://play.google.com/store/apps/details?id=com.fastemulator.gba
Upstream closed-source
Version 2.0.3
Profiled 2026-08-12
Cores my-boy, My Boy!, MY-BOY
Systems nintendo-gba
Author Pixel Respawn LLC
Technical 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 " (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).

2 files | 0 required, 2 optional | 2 in repo, 0 missing | 1 with HLE fallback

gba_bios.bin optional in repo HLE fallback built-in fallback
Game Boy Advance BIOS

  • System: nintendo-gba
  • Size: 16.0 KB
  • Validation: size
  • Source: My Boy! 2.0.3 g.java:66-68, g.java:80-100, settings/EmulatorSettings.java:65-73, settings/EmulatorSettings.java:121-135, EmulatorActivity.java:1564-1599, libgba.so 0x165fbc-0x166070, 0x15faf0-0x15fb5c, 0x15ec0c-0x15ec60, 1.8.0 settings/EmulatorSettings.java:478-486, libgba.so 0x10b680-0x10b76f, 0x10b770-0x10b783, 0x10a1e0-0x10a38d
  • Platforms: batocera, lakka, recalbox, retroarch, retrobat, retrodeck, retropie, rocknix, romm
  • Config key: useBios
  • 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.

rom_config.ini optional in repo bundled
Per game settings database

  • System: nintendo-gba
  • Source: My Boy! 2.0.3 Console.java:108-130, EmulatorActivity.java:642, EmulatorActivity.java:1132, 1.8.0 Console.java:130-151
  • 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.

Generated on 2026-08-23T16:12:06Z