{
  "commit": "d38cd580364b2c788e633b9e51c15e1668f726c0",
  "count": 1,
  "generated_at": "2026-11-03T13:36:34Z",
  "items": [
    {
      "id": "handy",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "0.97",
        "cores": [
          "handy"
        ],
        "display_name": "Atari - Lynx (Handy)",
        "emulator": "Handy",
        "files": [
          {
            "crc32": "0d973c9d",
            "description": "Atari Lynx boot ROM (Mikie internal 512B ROM)",
            "hle_fallback": true,
            "name": "lynxboot.img",
            "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).",
            "required": false,
            "size": 512,
            "source_ref": "lynx/rom.h:48-49 (ROM_SIZE=0x200, ROM_CRC32=0x0D973C9D), lynx/rom.cpp:76-129 (CRom constructor), libretro/libretro.cpp:1231-1258 (bios path + CSystem init)",
            "system": "atari-lynx",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "description": "Epyx Howard bootloader for headerless cartridges",
            "name": "howard.o",
            "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.",
            "required": false,
            "source_ref": "lynx/system.cpp:197-238 (CartHeaderLess check, howard.o load via fill_pathname_resolve_relative)",
            "system": "atari-lynx"
          }
        ],
        "notes": "Handy is an Atari Lynx emulator by K. Wilkins (Handy 0.95, 2007).\nThe core loads lynxboot.img from the system directory and validates\nit by CRC32 (0x0D973C9D). If the file is missing or the CRC does\nnot match, the core falls back to an internal HLE BIOS that\nreplicates the boot sequence in software (ram clear, cart loader\ndecrypt, jump to $0200).\n\nThe HLE path intercepts CPU calls to ROM addresses FE00, FE19, FE4A\nand FF80 via a Mikie register write trap (address 0xFD97). When\nuseEmu is true (no valid BIOS loaded), CRom initialises mRomData\nwith a default fill byte (0x88) plus reset vectors pointing to\nthe HLE entry points.\n\nUpstream Handy 0.95 requires the BIOS (throws CLynxException) and\nvalidates by checking the first 16 bytes against a hardcoded\nsignature. The libretro port added the HLE fallback and switched\nto full CRC32 validation.\n\nFor headerless cartridges (no LNX/BS93 header), the core loads\nhoward.o from the system directory. This is the Epyx development\nkit bootloader used to bootstrap raw/headerless ROMs into memory.\nUpstream requires howard.o for headerless carts (throws exception);\nthe libretro port makes it optional (logs error, continues).\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/libretro-handy",
        "source_commit": "bc55d462f0b2d6b073ea93dc552ebd73cec60fd1",
        "systems": [
          "atari-lynx"
        ],
        "type": "libretro",
        "upstream": "https://handy.sourceforge.net/",
        "version_basis": {
          "kind": "file",
          "path": "libretro/handy.h",
          "pattern": "#define\\s+HANDYVER\\s+\"([^\"]+)\""
        }
      }
    }
  ],
  "kind": "emulators",
  "schema_version": 1
}
