{
  "commit": "d38cd580364b2c788e633b9e51c15e1668f726c0",
  "count": 1,
  "generated_at": "2026-11-03T13:36:34Z",
  "items": [
    {
      "id": "frodo",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "V4.2",
        "cores": [
          "frodo"
        ],
        "display_name": "Commodore - C64 (Frodo)",
        "emulator": "Frodo",
        "files": [
          {
            "description": "C64 BASIC V2 ROM",
            "hle_fallback": true,
            "name": "Basic ROM",
            "note": "Embedded as builtin_basic_rom[] in Basic_ROM.h. External file never loaded in practice (DATADIR is empty, path is bare filename in cwd).",
            "required": false,
            "size": 8192,
            "source_ref": "source Src/main.cpp:71, 77, 100-102",
            "system": "commodore-c64"
          },
          {
            "description": "C64 Kernal ROM",
            "hle_fallback": true,
            "name": "Kernal ROM",
            "note": "Embedded as builtin_kernal_rom[] in Kernal_ROM.h. Patched at runtime for fast reset and 1541 IEC traps.",
            "required": false,
            "size": 8192,
            "source_ref": "source Src/main.cpp:72, 78, 104-106",
            "system": "commodore-c64"
          },
          {
            "description": "C64 Character Generator ROM",
            "hle_fallback": true,
            "name": "Char ROM",
            "note": "Embedded as builtin_char_rom[] in Char_ROM.h. Used by VIC-II for text/bitmap rendering.",
            "required": false,
            "size": 4096,
            "source_ref": "source Src/main.cpp:73, 79, 108-110",
            "system": "commodore-c64"
          },
          {
            "description": "Commodore 1541 floppy drive ROM",
            "hle_fallback": true,
            "name": "1541 ROM",
            "note": "Embedded as builtin_drive_rom[] in 1541_ROM.h. Patched at runtime to disable checksum and trap disk I/O.",
            "required": false,
            "size": 16384,
            "source_ref": "source Src/main.cpp:74, 80, 112-114",
            "system": "commodore-c64"
          }
        ],
        "notes": "Frodo is a Commodore 64 emulator by Christian Bauer (Frodo V4.2), ported\nto libretro. It emulates the C64 (MOS 6510, VIC-II, SID, CIA x2) and an\noptional 1541 floppy drive.\n\nAll four ROMs are embedded directly in the core binary as compiled-in\nbyte arrays (Basic_ROM.h, Kernal_ROM.h, Char_ROM.h, 1541_ROM.h). No\nexternal BIOS files are required for normal operation.\n\nThe core attempts to load external ROM files from the current working\ndirectory (DATADIR is empty in the libretro build) at startup via\nload_rom_files() in main.cpp. If any file fails to open or has the wrong\nsize, the embedded ROM is used as fallback via memcpy(). The filenames\nare hardcoded with spaces, no subdirectory prefix.\n\nROM loading order in load_rom_files():\n1. \"Basic ROM\"  (8192 bytes, BASIC_ROM_SIZE 0x2000) -> TheC64->Basic\n2. \"Kernal ROM\" (8192 bytes, KERNAL_ROM_SIZE 0x2000) -> TheC64->Kernal\n3. \"Char ROM\"   (4096 bytes, CHAR_ROM_SIZE 0x1000) -> TheC64->Char\n4. \"1541 ROM\"   (16384 bytes, DRIVE_ROM_SIZE 0x4000) -> TheC64->ROM1541\n\nThe core does NOT construct paths relative to retro_system_directory for\nROM loading. The system directory variable is fetched in retro_init() but\nonly used for the save directory fallback, not for ROM path construction.\nDATADIR defaults to \"\" (empty string) when not defined by the build\nsystem, so the filenames resolve to bare names in the cwd. In practice,\nthe external ROM loading path is effectively unused in the libretro build\nsince the cwd is unpredictable and the filenames contain spaces.\n\nThe Kernal ROM is patched at runtime by PatchKernal() in C64.cpp for\nfast reset (addresses 0x1D84-0x1D85) and IEC bus replacement when 1541\nprocessor emulation is enabled (multiple addresses in the 0x0D00-0x0E00\nrange are patched with 0xF2 trap opcodes).\n\nThe 1541 drive ROM is also patched in PatchKernal(): ROM checksum\nverification is disabled (0x2AE4-0x2AE9 NOPed), DOS idle loop is\ntrapped (0x2C9B), and write sector / format track operations are\nintercepted (0x3594-0x3598, 0x3B0C-0x3B0D).\n\nSource: Src/main.cpp:67-115 (ROM defines, load_rom, load_rom_files),\nSrc/C64.h:33-37 (ROM size constants), Src/C64.cpp:221-285 (PatchKernal),\nSrc/C64.cpp:734-746 (Run init, saves original kernal bytes, calls PatchKernal),\nSrc/Basic_ROM.h, Src/Kernal_ROM.h, Src/Char_ROM.h, Src/1541_ROM.h\n(embedded ROM arrays)\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/frodo-libretro",
        "source_commit": "891d20102a8894dd4fce73fb8bd2f623483fd05f",
        "systems": [
          "commodore-c64"
        ],
        "type": "libretro",
        "upstream": "https://github.com/cebix/frodo4",
        "version_basis": {
          "kind": "file",
          "path": "Src/Version.h",
          "pattern": "VERSION_STRING\\[\\]\\s*=\\s*\"Frodo ([^\"]+)\""
        }
      }
    }
  ],
  "kind": "emulators",
  "schema_version": 1
}
