Files
libretro/emulators/linkboy.yml
T
Abdessamad Derraz 8a44161810 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.
2026-10-20 04:49:24 +02:00

111 lines
5.5 KiB
YAML

emulator: Linkboy
type: standalone
core_classification: embedded_hle
source: "https://play.google.com/store/apps/details?id=com.pixelrespawn.linkboy"
upstream: closed-source
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-10-20"
core_version: "3.11.4"
display_name: "Nintendo - Game Boy / Color / Advance (Linkboy)"
mode: standalone
cores:
- "linkboy"
- "Linkboy"
- "LINKBOY"
systems:
- nintendo-gb
- nintendo-gbc
- nintendo-gba
- nintendo-sgb
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. 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), 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.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
cartridge runs in GB mode when prefer-sgb is off (wo0.java:62, c51.java:183-185).
The three firmware images are the only files the emulator reads that it does not
write itself. One table holds their names, sizes and md5 sums (cr.java:8), and the
firmware screen reports each as present, mismatched or absent by comparing the
size and then the md5 of the whole file (br.java:24-88, yz1.java:39, hr1.java:110).
Saves, cheats, thumbnails, keymaps and the ips, ups and bps patches picked up next
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, 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 0x1ca40-0x1cbe0, crc32 at 0x1c69c).
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 (0x10ad00-0x10ad58, 0x1500c0-0x150124).
files:
- name: gba_bios.bin
path: firmware/gba_bios.bin
system: nintendo-gba
required: false
hle_fallback: true
size: 16384
md5: a860e8c0b6d573d191e4ec7db1b1e4f6
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. 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
system: nintendo-gbc
required: false
hle_fallback: true
size: 2304
md5: dbfce9db9deaa2567f6a84fde55f9680
validation: [size, md5]
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.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
system: nintendo-gb
required: false
hle_fallback: true
size: 256
md5: 32fbbd84168d3482956eb3c5051637f5
validation: [size, md5]
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.4 cr.java:8, br.java:24-88, liblinkboy.so 0x14f84c-0x14f85c (size argument 0x100), 0x14f8f8-0x14f914, loader 0x1ca40-0x1cbe0"