From 8a44161810d48f4ed52908d2b98f13341f735cd2 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 20 Oct 2026 04:49:24 +0200 Subject: [PATCH] chore: re-profile Linkboy 3.11.4 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. --- emulators/fpse-ng.yml | 1 + emulators/fpse.yml | 1 + emulators/linkboy.yml | 45 ++++++++++++++++++++++++----------------- emulators/my-boy.yml | 12 +++++++---- emulators/my-oldboy.yml | 8 +++++--- 5 files changed, 42 insertions(+), 25 deletions(-) diff --git a/emulators/fpse-ng.yml b/emulators/fpse-ng.yml index ae173b5c..28c46da0 100644 --- a/emulators/fpse-ng.yml +++ b/emulators/fpse-ng.yml @@ -6,6 +6,7 @@ upstream: closed-source version_source: url: "https://play.google.com/store/apps/details?id=com.emulator.fpse64&hl=en" pattern: '\[\[\["([^"]+)"\]\],\[\[\[\d+' + no_genuine_copy: "1.17" author: "Schtruck & LDchen" profiled_date: "2026-08-11" core_version: "1.13" diff --git a/emulators/fpse.yml b/emulators/fpse.yml index ae5039d2..b643f33b 100644 --- a/emulators/fpse.yml +++ b/emulators/fpse.yml @@ -6,6 +6,7 @@ upstream: closed-source version_source: url: "https://play.google.com/store/apps/details?id=com.emulator.fpse&hl=en" pattern: '\[\[\["([^"]+)"\]\],\[\[\[\d+' + no_genuine_copy: "13.0" author: "Schtruck & LDchen (EMUSOFT)" profiled_date: "2026-08-11" core_version: "12.1" diff --git a/emulators/linkboy.yml b/emulators/linkboy.yml index 7a41192e..6b72bafc 100644 --- a/emulators/linkboy.yml +++ b/emulators/linkboy.yml @@ -7,8 +7,8 @@ version_source: url: "https://play.google.com/store/apps/details?id=com.pixelrespawn.linkboy&hl=en" pattern: '\[\[\["([^"]+)"\]\],\[\[\[\d+' author: "Pixel Respawn LLC" -profiled_date: "2026-08-11" -core_version: "3.11.0" +profiled_date: "2026-10-20" +core_version: "3.11.4" display_name: "Nintendo - Game Boy / Color / Advance (Linkboy)" mode: standalone cores: @@ -23,13 +23,15 @@ systems: notes: | Android package com.pixelrespawn.linkboy, closed source, free on Google Play with a - paid unlock, reached by ES-DE through its LINKBOY find rule. Two Play distribution - builds are read here, 3.11.0 (versionCode 86, minSdk 26, targetSdk 36, xapk sha256 + paid unlock, reached by ES-DE through its LINKBOY find rule. Three Play distribution + builds are read here, 3.11.4 (versionCode 93, minSdk 32, targetSdk 36, xapk sha256 + 4432cf9ab8ce2d148e8a0e89c26b786e4e7d060f43885d062f6d446b03ca4d32), 3.11.0 + (versionCode 86, minSdk 26, xapk sha256 83b92276d28d71e491ebcbec3fa85cef42ef49d8ee0c6fd1bbe0045bc118f866) and 1.4.2 - (versionCode 12), both carrying the app signing certificate sha256 + (versionCode 12), all carrying the app signing certificate sha256 feb643cfdd9c49f58eb325fde3d869cefcf59e45dfadb8e540beca35a7b1c28e and the Play distribution source stamp. Emulation lives in liblinkboy.so behind a JNI bridge. - Addresses below are armeabi-v7a of 3.11.0 and class names are those of its + Addresses below are armeabi-v7a of 3.11.4 and class names are those of its obfuscated dex. Four subsystems are declared: GBA, GBC, GB and SGB (ve0.java:16-21). An SGB @@ -43,22 +45,29 @@ notes: | to a ROM are written or supplied per game, not fixed files. An image is read only while the use-bios preference is on, which is off until set - (wo0.java:63, a75.java:165-173, c51.java:186,268, w41.java:243). The loader appends + (wo0.java:63, b75.java:165-173, c51.java:186,268, w41.java:243). The loader appends firmware/ and the name to the directory handed to setDataDir, the app's external files directory (c51.java:69, hg3.java:32-38), and opens the result with fopen "rb". A file whose length is not exactly the expected size is closed and treated as absent, as is a short read. On success the loader returns the crc32 of the bytes - (liblinkboy.so 0x1c870-0x1ca10, crc32 at 0x1c4cc). + (liblinkboy.so 0x1ca40-0x1cbe0, crc32 at 0x1c69c). - A missing image stops nothing. The GBA path copies a replacement bios compiled into - the library over the 16 KB region and zero fills the remainder (0x109de8-0x109e64). - The GB and GBC path hands the reset routine a boot rom present flag, false when no - image was loaded, and the machine starts from its post boot state - (0x14f534-0x14f5b8, 0x14f638-0x14f654). + A missing image stops nothing. The GBA path copies a 236 byte replacement bios + compiled into the library over the 16 KB region and zero fills the remainder. Since + 3.11.4 a second variant of that replacement is taken when the game code is B4GJ or + B4SJ (0x10a06c-0x10a108). The GB and GBC path hands the reset routine a boot rom + present flag, false when no image was loaded, and the machine starts from its post + boot state (0x14f7f4-0x14f878, 0x14f8f8-0x14f914). + + Since 3.11.4 a loaded GBA image is not run for every cartridge. When the ROM is at + least 0xa0 bytes the crc32 of the 156 header bytes from offset 4 is compared with a + fixed value, and a mismatch logs "Invalid logo, skipping BIOS" and resets with the + boot flag false. The image stays installed and the machine starts from its post + boot state (0x10a14c-0x10a1a4). Save states record the crc32 of the image they were made under. Loading a state whose value differs from the running machine re-reads the file and refuses the state - when the crc32 still disagrees (0x10aa40-0x10aa98, 0x14fe00-0x14fe64). + when the crc32 still disagrees (0x10ad00-0x10ad58, 0x1500c0-0x150124). files: - name: gba_bios.bin @@ -71,8 +80,8 @@ files: validation: [size, md5] config_key: "use-bios" description: "Game Boy Advance BIOS" - note: "Read into the 16 KB bios region when use-bios is on. Absent, mismatched in size or short, the region is filled with a replacement bios compiled into the library and zero padded." - source_ref: "Linkboy 3.11.0 cr.java:8, br.java:24-88, liblinkboy.so 0x109de8-0x109e64 (size argument 0x4000), loader 0x1c870-0x1ca10" + note: "Read into the 16 KB bios region when use-bios is on. Absent, mismatched in size or short, the region is filled with a replacement bios compiled into the library and zero padded. A cartridge whose header logo fails the crc32 test boots past it." + source_ref: "Linkboy 3.11.4 cr.java:8, br.java:24-88, liblinkboy.so 0x10a06c-0x10a108 (size argument 0x4000), 0x10a14c-0x10a1a4 (logo test), loader 0x1ca40-0x1cbe0" - name: gbc_bios.bin path: firmware/gbc_bios.bin @@ -85,7 +94,7 @@ files: config_key: "use-bios" description: "Game Boy Color boot ROM" note: "Read when use-bios is on and the machine is a Game Boy Color. Without it the reset routine receives a false boot rom flag and the machine starts from its post boot state." - source_ref: "Linkboy 3.11.0 cr.java:8, br.java:24-88, liblinkboy.so 0x14f5a0-0x14f5b0 (size argument 0x900), 0x14f638-0x14f654, loader 0x1c870-0x1ca10" + source_ref: "Linkboy 3.11.4 cr.java:8, br.java:24-88, liblinkboy.so 0x14f860-0x14f870 (size argument 0x900), 0x14f8f8-0x14f914, loader 0x1ca40-0x1cbe0" - name: gb_bios.bin path: firmware/gb_bios.bin @@ -98,4 +107,4 @@ files: config_key: "use-bios" description: "Game Boy boot ROM" note: "Read when use-bios is on and the machine is a Game Boy. Without it the reset routine receives a false boot rom flag and the machine starts from its post boot state." - source_ref: "Linkboy 3.11.0 cr.java:8, br.java:24-88, liblinkboy.so 0x14f58c-0x14f59c (size argument 0x100), 0x14f638-0x14f654, loader 0x1c870-0x1ca10" + source_ref: "Linkboy 3.11.4 cr.java:8, br.java:24-88, liblinkboy.so 0x14f84c-0x14f85c (size argument 0x100), 0x14f8f8-0x14f914, loader 0x1ca40-0x1cbe0" diff --git a/emulators/my-boy.yml b/emulators/my-boy.yml index b53ad425..78951ea7 100644 --- a/emulators/my-boy.yml +++ b/emulators/my-boy.yml @@ -6,8 +6,9 @@ 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-08-12" +profiled_date: "2026-10-20" core_version: "2.0.3" display_name: "Nintendo - Game Boy Advance (My Boy!)" mode: standalone @@ -26,9 +27,12 @@ notes: | 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). + 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 diff --git a/emulators/my-oldboy.yml b/emulators/my-oldboy.yml index 9839da2f..b49d6764 100644 --- a/emulators/my-oldboy.yml +++ b/emulators/my-oldboy.yml @@ -6,8 +6,9 @@ upstream: closed-source version_source: url: "https://play.google.com/store/apps/details?id=com.fastemulator.gbc&hl=en" pattern: '\[\[\["([^"]+)"\]\],\[\[\[\d+' + no_genuine_copy: "2.0.3" author: "Pixel Respawn LLC" -profiled_date: "2026-08-12" +profiled_date: "2026-10-20" core_version: "2.0.0" display_name: "Nintendo - Game Boy / Game Boy Color (My OldBoy!)" mode: standalone @@ -29,8 +30,9 @@ notes: | signer and the Play source stamp) and 1.5.1 (versionCode 90020, minSdk 9, armeabi, v1 signature verified entry by entry). Line numbers below are those of 2.0.0 and native addresses are arm64-v8a of the same build; 1.5.1 addresses are its armeabi - library. 2.0.2 (versionCode 90024) is the current Play build, offered by no mirror - reached here. + library. 2.0.3 is the current Play build, offered genuine by no mirror reached here. + One rebuilt copy was rejected on its certificate: 2.0.1 (C=IN), served under a 2.0.3 + page. Emulation runs in libgbc.so behind a JNI bridge (Link.java:23,29-97). Content is a .gb, .gbc, .cgb or .dmg document, or the first entry with one of those extensions in a