{
  "commit": "d38cd580364b2c788e633b9e51c15e1668f726c0",
  "count": 1,
  "generated_at": "2026-11-03T13:36:34Z",
  "items": [
    {
      "id": "vemulator",
      "profile": {
        "core_classification": "official_port",
        "core_version": "0.1",
        "cores": [
          "vemulator"
        ],
        "display_name": "VeMUlator",
        "emulator": "VeMUlator",
        "files": [],
        "notes": "Sega Dreamcast VMU/VMS emulator. Same author (Mahmoud Jaoune) ported\nthe original Android Java app to C++ for libretro. Emulates the Sanyo\nLC8670 CPU, 128 KB flash, 48x32 LCD, piezo buzzer, and timers.\n\nNo BIOS files required. The core uses HLE exclusively: startCPU()\nchecks BIOSExists (always false), then initializeHLE() sets SFR\nregisters and system RAM directly (vmu.cpp:193-222).\n\nA loadBIOS() function exists (vmu.cpp:82-137) handling encrypted and\nunencrypted BIOS images, but is never called from the libretro\ninterface. retro_load_game() only loads game flash data, with no\nsystem directory query. README lists BIOS support as planned.\n",
        "platform_details": {
          "hle_implementation": {
            "note": "HLE skips the BIOS boot sequence and jumps directly into the loaded\ngame. System clock, date, and button state are initialized in RAM.\nThe EXT register is set to 1 to signal HLE mode to the CPU\n(vmu.cpp:198-199). Games that depend on BIOS-initialized state\nbeyond what HLE provides may not work correctly.\n",
            "ram_init": [
              "0x31 = 0xFF (battery level)",
              "0x6E = 0xFF",
              "P3 = 0xFF (no buttons pressed)",
              "BCD date/time at 0x10-0x16, raw at 0x17-0x1D"
            ],
            "sfr_init": {
              "BTCR": "0x41",
              "IE": "0x80",
              "MCR": "0x08",
              "OCR": "0xA3",
              "P7": "0x02",
              "PSW": "0x02",
              "SP": "0x7F"
            },
            "source_ref": "vmu.cpp:195-222"
          },
          "unused_bios_loader": {
            "detection": "first byte 0x2A (JMPF) = unencrypted, otherwise encrypted",
            "encryption": "XOR 0x37 after stripping 4-byte header",
            "max_file_size": 61444,
            "note": "The loadBIOS() method is fully implemented but unreachable from the\nlibretro interface. No system directory query, no BIOS path construction,\nand no call site exists in main.cpp. A future update could wire this up\nto support real VMU firmware boot (file manager, clock, mini-games menu).\n",
            "rom_load_size": 61440,
            "source_ref": "vmu.cpp:82-137"
          }
        },
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/vemulator-libretro",
        "source_commit": "27a062f6ae532e5028e4fb54f523cc689e78146a",
        "systems": [
          "sega-vmu"
        ],
        "type": "libretro",
        "upstream": "closed-source Android app (removed from Google Play ~2020)",
        "version_basis": {
          "kind": "file",
          "path": "main.cpp",
          "pattern": "info->library_version\\s*=\\s*\"([^\"]+)\""
        }
      }
    }
  ],
  "kind": "emulators",
  "schema_version": 1
}
