mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-20 10:23:16 -05:00
Linkboy 3.11.4 adds a cartridge logo check before the BIOS boot and a second built-in BIOS variant. My Boy! 2.1.1, My OldBoy! 2.0.3, FPse 13.0 and FPseNG 1.17 circulate only rebuilt: their profiles stay on the last genuine build and name the release.
118 lines
6.5 KiB
YAML
118 lines
6.5 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
|
|
version_source:
|
|
url: "https://play.google.com/store/apps/details?id=com.fastemulator.gba&hl=en"
|
|
pattern: '\[\[\["([^"]+)"\]\],\[\[\[\d+'
|
|
no_genuine_copy: "2.1.1"
|
|
author: "Pixel Respawn LLC"
|
|
profiled_date: "2026-10-20"
|
|
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, and 1.8.0 addresses are its x86 library. 2.1.1
|
|
(versionCode 90062) is the current Play build, and every copy of it reached here is
|
|
rebuilt. Seven rebuilt copies were rejected on their certificate: 2.1.1
|
|
(CN=APKVISION.ORG, with an injected second dex), 2.1.1 (the AOSP test key), 2.0.9
|
|
(CN=APKVISION.ORG), 2.0.8 (C=RU, O=A1), 2.0.6 (C=IN), 2.0.6 (O=APKMODY) 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"
|