feat: add 10 emulator profiles (batch 5)
snes9x (BS-X + STBIOS, HLE coprocessors), mupen64plus (64DD IPL),
pcsx_rearmed (7 BIOS + dynamic scan fallback), stella (no BIOS),
fmsx (12 MSX ROMs), virtualjaguar (6 BIOS embedded),
sameboy (8 boot ROM types, all built-in), beetle_vb (no BIOS),
handy (lynxboot.img 512B), pokemini (bios.min + FreeBIOS fallback)
61 total profiles. Cross-reference: 667 undeclared, 182 in repo.
2026-03-17 19:33:20 +01:00
emulator : Handy
type : libretro
feat: add emulator/system pack generation, validation checks, path resolution
add --emulator, --system, --standalone, --list-emulators, --list-systems
to verify.py and generate_pack.py. packs are RTU with data directories,
regional BIOS variants, and archive support.
validation: field per file (size, crc32, md5, sha1) with conflict
detection. by_path_suffix index in database.json for regional variant
resolution via dest_hint. restructure GameCube IPL to regional subdirs.
66 E2E tests, full pipeline verified.
2026-03-22 14:02:20 +01:00
core_classification : community_fork
feat: add 10 emulator profiles (batch 5)
snes9x (BS-X + STBIOS, HLE coprocessors), mupen64plus (64DD IPL),
pcsx_rearmed (7 BIOS + dynamic scan fallback), stella (no BIOS),
fmsx (12 MSX ROMs), virtualjaguar (6 BIOS embedded),
sameboy (8 boot ROM types, all built-in), beetle_vb (no BIOS),
handy (lynxboot.img 512B), pokemini (bios.min + FreeBIOS fallback)
61 total profiles. Cross-reference: 667 undeclared, 182 in repo.
2026-03-17 19:33:20 +01:00
source : "https://github.com/libretro/libretro-handy"
2026-03-24 09:33:06 +01:00
upstream : "https://handy.sourceforge.net/"
profiled_date : "2026-03-23"
2026-03-18 05:19:57 +01:00
core_version : "0.95"
display_name : "Atari - Lynx (Handy)"
feat: add emulator/system pack generation, validation checks, path resolution
add --emulator, --system, --standalone, --list-emulators, --list-systems
to verify.py and generate_pack.py. packs are RTU with data directories,
regional BIOS variants, and archive support.
validation: field per file (size, crc32, md5, sha1) with conflict
detection. by_path_suffix index in database.json for regional variant
resolution via dest_hint. restructure GameCube IPL to regional subdirs.
66 E2E tests, full pipeline verified.
2026-03-22 14:02:20 +01:00
cores :
- handy
feat: add 10 emulator profiles (batch 5)
snes9x (BS-X + STBIOS, HLE coprocessors), mupen64plus (64DD IPL),
pcsx_rearmed (7 BIOS + dynamic scan fallback), stella (no BIOS),
fmsx (12 MSX ROMs), virtualjaguar (6 BIOS embedded),
sameboy (8 boot ROM types, all built-in), beetle_vb (no BIOS),
handy (lynxboot.img 512B), pokemini (bios.min + FreeBIOS fallback)
61 total profiles. Cross-reference: 667 undeclared, 182 in repo.
2026-03-17 19:33:20 +01:00
systems : [ atari-lynx]
notes : |
2026-03-24 09:33:06 +01:00
Handy is an Atari Lynx emulator by K. Wilkins (Handy 0.95, 2007).
The core loads lynxboot.img from the system directory and validates
it by CRC32 (0x0D973C9D). If the file is missing or the CRC does
not match, the core falls back to an internal HLE BIOS that
replicates the boot sequence in software (ram clear, cart loader
decrypt, jump to $0200).
feat: add 10 emulator profiles (batch 5)
snes9x (BS-X + STBIOS, HLE coprocessors), mupen64plus (64DD IPL),
pcsx_rearmed (7 BIOS + dynamic scan fallback), stella (no BIOS),
fmsx (12 MSX ROMs), virtualjaguar (6 BIOS embedded),
sameboy (8 boot ROM types, all built-in), beetle_vb (no BIOS),
handy (lynxboot.img 512B), pokemini (bios.min + FreeBIOS fallback)
61 total profiles. Cross-reference: 667 undeclared, 182 in repo.
2026-03-17 19:33:20 +01:00
The HLE path intercepts CPU calls to ROM addresses FE00, FE19, FE4A
and FF80 via a Mikie register write trap (address 0xFD97). When
useEmu is true (no valid BIOS loaded), CRom initialises mRomData
with a default fill byte (0x88) plus reset vectors pointing to
2026-03-24 09:33:06 +01:00
the HLE entry points.
feat: add 10 emulator profiles (batch 5)
snes9x (BS-X + STBIOS, HLE coprocessors), mupen64plus (64DD IPL),
pcsx_rearmed (7 BIOS + dynamic scan fallback), stella (no BIOS),
fmsx (12 MSX ROMs), virtualjaguar (6 BIOS embedded),
sameboy (8 boot ROM types, all built-in), beetle_vb (no BIOS),
handy (lynxboot.img 512B), pokemini (bios.min + FreeBIOS fallback)
61 total profiles. Cross-reference: 667 undeclared, 182 in repo.
2026-03-17 19:33:20 +01:00
2026-03-24 09:33:06 +01:00
Upstream Handy 0.95 requires the BIOS (throws CLynxException) and
validates by checking the first 16 bytes against a hardcoded
signature. The libretro port added the HLE fallback and switched
to full CRC32 validation.
feat: add 10 emulator profiles (batch 5)
snes9x (BS-X + STBIOS, HLE coprocessors), mupen64plus (64DD IPL),
pcsx_rearmed (7 BIOS + dynamic scan fallback), stella (no BIOS),
fmsx (12 MSX ROMs), virtualjaguar (6 BIOS embedded),
sameboy (8 boot ROM types, all built-in), beetle_vb (no BIOS),
handy (lynxboot.img 512B), pokemini (bios.min + FreeBIOS fallback)
61 total profiles. Cross-reference: 667 undeclared, 182 in repo.
2026-03-17 19:33:20 +01:00
2026-03-24 09:33:06 +01:00
For headerless cartridges (no LNX/BS93 header), the core loads
howard.o from the system directory. This is the Epyx development
kit bootloader used to bootstrap raw/headerless ROMs into memory.
Upstream requires howard.o for headerless carts (throws exception);
the libretro port makes it optional (logs error, continues).
feat: add 10 emulator profiles (batch 5)
snes9x (BS-X + STBIOS, HLE coprocessors), mupen64plus (64DD IPL),
pcsx_rearmed (7 BIOS + dynamic scan fallback), stella (no BIOS),
fmsx (12 MSX ROMs), virtualjaguar (6 BIOS embedded),
sameboy (8 boot ROM types, all built-in), beetle_vb (no BIOS),
handy (lynxboot.img 512B), pokemini (bios.min + FreeBIOS fallback)
61 total profiles. Cross-reference: 667 undeclared, 182 in repo.
2026-03-17 19:33:20 +01:00
files :
- name : "lynxboot.img"
system : atari-lynx
description : "Atari Lynx boot ROM (Mikie internal 512B ROM)"
required : false
feat: hle_fallback on 39 emulator profiles (266 entries)
Batch analysis of all 273 profiles to identify HLE/embedded
fallbacks. Added hle_fallback: true where the core has verified
software replacement for missing BIOS files:
- Embedded ROMs: vice (102), ep128emu (22), fuse (18), frodo (4)
- HLE BIOS: bsnes* (33 across 3 profiles), puae (9 AROS),
noods (4), melonds* (6 FreeBIOS), flycast (3 reios)
- Open-source replacements: sameboy (8), pokemini (1), gpsp (1)
- Built-in fallbacks: np2kai (7), atari800 (6 Altirra),
picodrive (3), quasi88 (4), gambatte (2)
Conservative: only added where notes or source code confirm HLE.
Skipped 50+ profiles where files are optional alternatives, not
HLE replaceable (neocd, opera, kronos, pcem, etc.)
2026-03-19 13:03:48 +01:00
hle_fallback : true
feat: add 10 emulator profiles (batch 5)
snes9x (BS-X + STBIOS, HLE coprocessors), mupen64plus (64DD IPL),
pcsx_rearmed (7 BIOS + dynamic scan fallback), stella (no BIOS),
fmsx (12 MSX ROMs), virtualjaguar (6 BIOS embedded),
sameboy (8 boot ROM types, all built-in), beetle_vb (no BIOS),
handy (lynxboot.img 512B), pokemini (bios.min + FreeBIOS fallback)
61 total profiles. Cross-reference: 667 undeclared, 182 in repo.
2026-03-17 19:33:20 +01:00
size : 512
crc32 : "0d973c9d"
feat: add emulator/system pack generation, validation checks, path resolution
add --emulator, --system, --standalone, --list-emulators, --list-systems
to verify.py and generate_pack.py. packs are RTU with data directories,
regional BIOS variants, and archive support.
validation: field per file (size, crc32, md5, sha1) with conflict
detection. by_path_suffix index in database.json for regional variant
resolution via dest_hint. restructure GameCube IPL to regional subdirs.
66 E2E tests, full pipeline verified.
2026-03-22 14:02:20 +01:00
validation : [ size, crc32]
2026-03-24 09:33:06 +01:00
source_ref : "rom.h:48-49 (ROM_SIZE=0x200, ROM_CRC32=0x0D973C9D), rom.cpp:76-129 (CRom constructor), libretro.cpp:1231-1258 (bios path + CSystem init)"
2026-03-29 10:02:20 +02:00
note : "Validated by CRC32 at load time. If invalid or missing, core uses HLE fallback (system.cpp:303-361 HLE_BIOS_* functions, system.cpp:406-428 trap writes)."
2026-03-24 09:33:06 +01:00
- name : "howard.o"
system : atari-lynx
description : "Epyx Howard bootloader for headerless cartridges"
required : false
source_ref : "system.cpp:197-238 (CartHeaderLess check, howard.o load via fill_pathname_resolve_relative)"
2026-03-29 10:02:20 +02:00
note : "Loaded only for headerless carts (no LNX/BS93 header). Resolved relative to the BIOS file path (system directory). Passed to CRam for execution. Most commercial games have headers and skip this entirely."