{
  "commit": "d38cd580364b2c788e633b9e51c15e1668f726c0",
  "count": 1,
  "generated_at": "2026-11-03T13:36:34Z",
  "items": [
    {
      "id": "bbkemu",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "0.1.0",
        "cores": [
          "bbkemu"
        ],
        "display_name": "BBK - Electronic Dictionary (BBKEmu)",
        "emulator": "BBKEmu",
        "files": [
          {
            "description": "BBK A-series font ROM",
            "name": "8.BIN",
            "note": "Read whole from {system}/BBKEmu/A4980/8.BIN, or 8.bin, into the 2 MiB window at physical 0x800000. A missing file is skipped silently, and the window then reads as 0x00 and text drawn through the OS is blank. No size or hash check. Size is the window the image fills.",
            "path": "BBKEmu/A4980/8.BIN",
            "required": true,
            "size": 2097152,
            "source_ref": "crates/bbkemu-libretro/src/lib.rs:191-215, crates/bbkemu-libretro/src/lib.rs:491-492, crates/bbkemu-core/src/memory.rs:8, crates/bbkemu-core/src/memory.rs:197-202, crates/bbkemu-core/src/memory.rs:384-390, crates/bbkemu/src/main.rs:147-158",
            "standalone_path": "system/BBKEmu/A4980/8.BIN",
            "system": "bbk-longman-4980"
          },
          {
            "description": "BBK A-series OS ROM",
            "name": "E.BIN",
            "note": "Read whole from {system}/BBKEmu/A4980/E.BIN, or E.bin or e.bin, into the 2 MiB window at physical 0xE00000. The last 256 bytes also serve as the interrupt vector page at 0x0300. A missing file is skipped silently, the OS init loop times out after 10 million cycles and no game runs. No size or hash check. Size is the window the image fills.",
            "path": "BBKEmu/A4980/E.BIN",
            "required": true,
            "size": 2097152,
            "source_ref": "crates/bbkemu-libretro/src/lib.rs:191-212, crates/bbkemu-libretro/src/lib.rs:216-218, crates/bbkemu-libretro/src/lib.rs:491-492, crates/bbkemu-core/src/memory.rs:9, crates/bbkemu-core/src/memory.rs:204-209, crates/bbkemu-core/src/memory.rs:224-226, crates/bbkemu-core/src/memory.rs:391-397, crates/bbkemu-core/src/emulator.rs:231-252, crates/bbkemu/src/main.rs:159-170",
            "standalone_path": "system/BBKEmu/A4980/E.BIN",
            "system": "bbk-longman-4980"
          },
          {
            "description": "BBK A-series font ROM, A4988 slot",
            "mode": "standalone",
            "name": "8.BIN",
            "note": "Read by the standalone binary with --model 4988 from system/BBKEmu/A4988/8.BIN relative to the working directory. The libretro core has no model option and never opens this directory.",
            "required": true,
            "size": 2097152,
            "source_ref": "crates/bbkemu/src/main.rs:108-117, crates/bbkemu/src/main.rs:147-158, crates/bbkemu-core/src/model.rs:28-34",
            "standalone_path": "system/BBKEmu/A4988/8.BIN",
            "system": "bbk-longman-4988"
          },
          {
            "description": "BBK A-series OS ROM, A4988 slot",
            "mode": "standalone",
            "name": "E.BIN",
            "note": "Read by the standalone binary with --model 4988 from system/BBKEmu/A4988/E.BIN relative to the working directory. The libretro core has no model option and never opens this directory.",
            "required": true,
            "size": 2097152,
            "source_ref": "crates/bbkemu/src/main.rs:108-117, crates/bbkemu/src/main.rs:159-170, crates/bbkemu-core/src/model.rs:28-34, crates/bbkemu-core/src/emulator.rs:148-153",
            "standalone_path": "system/BBKEmu/A4988/E.BIN",
            "system": "bbk-longman-4988"
          }
        ],
        "notes": "BBK A-series electronic dictionary game emulator written in Rust by\nAloysHF. The libretro core and the bbk-emu standalone binary share the\nbbkemu-core crate. A .gam game is 6502 code that calls into the\ndictionary's OS ROM for LCD, keyboard, audio, timer and file services.\n\nTwo ROM images are read from the system directory, in one subdirectory\nper model: {system}/BBKEmu/<model>/8.BIN, the font ROM mapped at\nphysical 0x800000-0x9FFFFF, and E.BIN, the OS ROM mapped at\n0xE00000-0xFFFFFF (crates/bbkemu-libretro/src/lib.rs:186-219,\ncrates/bbkemu-core/src/memory.rs:377-398). The libretro core always\nloads content as the A4980 model (crates/bbkemu-libretro/src/lib.rs:491-492),\nso only BBKEmu/A4980/ is ever read from RetroArch. The core also accepts\n8.bin, and E.bin or e.bin, when the upper-case name is absent. The\nEmscripten build used by EmulatorJS looks in the folder of the content\nand its BBKEmu/<model>/ subfolder as well. Both reads are std::fs::read\nresults taken only when they succeed: a missing file is skipped without\nany message to the frontend. The image is copied into a 2 MiB\nzero-filled buffer (crates/bbkemu-core/src/memory.rs:197-209), and nothing\nchecks its size or contents.\n\nWithout E.BIN, run_os_init (crates/bbkemu-core/src/emulator.rs:231-252)\nsets PC to 0x350, reads zeros from the ROM window, never sees\n_MTCT=0xFE and gives up after 10 million cycles. The bank registers\nstay unmapped and the game exits at its first OS call. Measured by\nrunning run_os_init from bbkemu-core against a dump: 1 092 023 cycles\nto completion with E.BIN, timeout without it. Without 8.BIN the font\nwindow reads as 0x00 and every glyph the OS draws is blank, but execution\ncontinues.\n\nThe standalone binary takes -8/--rom8 and -e/--rome explicit paths and\notherwise reads system/BBKEmu/<model>/8.BIN and E.BIN relative to the\nworking directory, --model 4980 (default) or 4988 selecting the\nsubdirectory (crates/bbkemu/src/main.rs:108-117, crates/bbkemu/src/main.rs:146-170).\nThe A4988 model differs by its flash save-area offset and key layout\n(crates/bbkemu-core/src/emulator.rs:148-153,\ncrates/bbkemu-libretro/src/lib.rs:640-649).\n\nDuring init the OS maps its own bank at logical bank D: 0xEA8 for the\nA4980 OS, 0xE88 for the A4988 OS (crates/bbkemu-core/src/model.rs:11-13).\nThe core never reads that value back: detect_model\n(crates/bbkemu-core/src/model.rs:37-49) has no caller. The\ninclude_bytes! font in crates/bbkemu-core/src/font.rs is not declared in\nlib.rs and is not compiled. Content arrives through the frontend buffer\n(need_fullpath = false, crates/bbkemu-libretro/src/lib.rs:429). Save RAM\nis the first 0x14000 bytes of the emulated flash\n(crates/bbkemu-libretro/src/lib.rs:861-863).\n",
        "platform_details": {
          "memory_map": {
            "note": "Physical space seen through sixteen 4 KiB bank registers: RAM below\n0x8000, 2 MiB flash at 0x200000, 8.BIN at 0x800000, E.BIN at\n0xE00000. Reads outside a loaded image return 0x00, and ROM windows\nignore writes.\n",
            "source_ref": "crates/bbkemu-core/src/memory.rs:377-398"
          }
        },
        "profiled_date": "2026-10-26",
        "source": "https://github.com/AloysHF/BBKEmu",
        "source_commit": "6641863f6ec59a74635753766e3f9d34adf92b05",
        "systems": [
          "bbk-longman-4980",
          "bbk-longman-4988"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/AloysHF/BBKEmu",
        "version_basis": {
          "kind": "file",
          "path": "Cargo.toml",
          "pattern": "version\\s+=\\s+\"([^\"]+)"
        }
      }
    }
  ],
  "kind": "emulators",
  "schema_version": 1
}
