{
  "schemaVersion": 1,
  "gameId": "wonder-boy-in-monster-world-genesis-original",
  "edition": "Supplied [h1] US/Europe Genesis cartridge",
  "rom": {
    "file": "rom/wonder-boy-in-monster-world.bin",
    "bytes": 786432,
    "sha256": "c4e3e9facf3f79dbe757f3090c59d09b8a8e9ddd84c8d82bb0ed10c589756385",
    "archiveEntry": "Wonderboy 5 (MonsterWorld 3) (UE) [h1].bin",
    "archiveSha256": "785c01f79e968ba0f784888acbce6666d1e4937870f8736d6a9a1c0cffcadcf7",
    "fileBytesUnchanged": true
  },
  "frontend": {
    "name": "EmulatorJS",
    "version": "4.2.3",
    "source": "https://github.com/EmulatorJS/EmulatorJS/tree/v4.2.3",
    "retainedFrom": "COSOM Sonic / Madden / Sol-Feace Genesis runtime",
    "retainedSourceNotes": "runtime/PATCHES.txt",
    "includedRuntimeFilesByteIdentical": true
  },
  "core": {
    "name": "Genesis Plus GX",
    "mode": "single-thread legacy / WebGL1",
    "wasmSha256": "cfec0e5915c4b3d03336482e990a7809f16b37909992f94631c2cad8e92b5aae",
    "source": "https://github.com/EmulatorJS/Genesis-Plus-GX"
  },
  "runtimeFiles": [
    {
      "path": "runtime/compression/extract7z.js",
      "bytes": 280155,
      "sha256": "4ac9933b995a516cb6b3ca4027db860278372a20c21c405d93ceb1998498853a"
    },
    {
      "path": "runtime/compression/extractzip.js",
      "bytes": 196199,
      "sha256": "3cc825428724213acd43d30552a78008e0869b2326de17dee240dbff9ee2f629"
    },
    {
      "path": "runtime/compression/libunrar.js",
      "bytes": 66684,
      "sha256": "bc35b98ec95020ec047f4762de3e66629741eee3826022195498d2a1e0fc102c"
    },
    {
      "path": "runtime/compression/libunrar.wasm",
      "bytes": 173799,
      "sha256": "e4ea9bd0b13a9767916b424469e30205f47f267ecd9125ed56fb9ff0b9bc1b58"
    },
    {
      "path": "runtime/compression/README.md",
      "bytes": 189,
      "sha256": "c01bf373463b6eac94ce2db8f6102010c104683bd70203e9b1343865693d1db5"
    },
    {
      "path": "runtime/cores/genesis_plus_gx-legacy-wasm.data",
      "bytes": 1204803,
      "sha256": "2a1edeb68d7ec882149ed3cd5d3aa95a6ac231ebabaf82cdb56175a8b62967cc"
    },
    {
      "path": "runtime/cores/reports/genesis_plus_gx.json",
      "bytes": 129,
      "sha256": "5936a8ce8d7f010d5bfdd8c3bba2b2414f103b3a703121e56f2724b24dbe7ff3"
    },
    {
      "path": "runtime/emulator.css",
      "bytes": 33532,
      "sha256": "0ba5b1ce183b6ecb95c17e54e89fbae77697ebb94ec23caca5fd19f9b569defe"
    },
    {
      "path": "runtime/emulator.min.css",
      "bytes": 33532,
      "sha256": "0ba5b1ce183b6ecb95c17e54e89fbae77697ebb94ec23caca5fd19f9b569defe"
    },
    {
      "path": "runtime/emulator.min.js",
      "bytes": 583736,
      "sha256": "6ec963ed832b432d2bc0ce1f8cc9bdc51b65bdad709b515e3cfb89321eded58d"
    },
    {
      "path": "runtime/GENESIS-PLUS-GX-LICENSE.txt",
      "bytes": 63857,
      "sha256": "642c163624269243d1f6b29d759d4e3a2d161bdc272c90d82ecbeec82ae26755"
    },
    {
      "path": "runtime/LICENSE.txt",
      "bytes": 35111,
      "sha256": "a617fab6d251b3302b1cb2c1c94f52d1c584f6fcb2fc218ec1a475bc08053a61"
    },
    {
      "path": "runtime/loader.js",
      "bytes": 7594,
      "sha256": "69e0903bf1e2f62ced78895e7e511fa26e11316f7eb734925c35e919ba1287b2"
    },
    {
      "path": "runtime/localization/af-FR.json",
      "bytes": 10847,
      "sha256": "98c0a0748b8a79c4888b756cc032721203bd07ab1e01c82ceb78bf507531bae9"
    },
    {
      "path": "runtime/localization/ar-AR.json",
      "bytes": 9834,
      "sha256": "7f08398ad9cf828c1c6d8cdaa65f9352d4873691475e14b76cbb11b802f8dc28"
    },
    {
      "path": "runtime/localization/ben-BEN.json",
      "bytes": 12548,
      "sha256": "09a2adec9d6d26cbf1b007f1f39f3787f487fe421cae499048712a261e540545"
    },
    {
      "path": "runtime/localization/de-GER.json",
      "bytes": 8758,
      "sha256": "370590727debfb65fbd07c6622bb4ddc8ab25c465aeaa83f9d4ec7ad6552d8dd"
    },
    {
      "path": "runtime/localization/el-GR.json",
      "bytes": 11271,
      "sha256": "304ebd42b2275028deab2806022238e80f4c0470f982f86788ad4cafec8b94bd"
    },
    {
      "path": "runtime/localization/en-US.json",
      "bytes": 9825,
      "sha256": "b0c9a9bb92ecd2d03614ee2b0eeda160e883ee79ea94d9e8131addb92c5803f9"
    },
    {
      "path": "runtime/localization/es-ES.json",
      "bytes": 9601,
      "sha256": "88be7f8de1e1fce480ce8883a975fc7c7985208e5b100a297591cea07bc97e46"
    },
    {
      "path": "runtime/localization/fa-AF.json",
      "bytes": 10778,
      "sha256": "e9e21fb390ebcc5c1170ccf4fbc62caece7997f0c14bd4da5da2e3720c864103"
    },
    {
      "path": "runtime/localization/hi-HI.json",
      "bytes": 12787,
      "sha256": "63b7e7a676facd3e29e352e92f716f4a1065b606e2bf302e5fdd3dec531b1182"
    },
    {
      "path": "runtime/localization/it-IT.json",
      "bytes": 8721,
      "sha256": "90b2febc77fa1c4ed672f5669dfedddc5f40409e2ddbe0d84e43366ea9e957c3"
    },
    {
      "path": "runtime/localization/ja-JA.json",
      "bytes": 9543,
      "sha256": "bcde0373941009e441094c2a75736598ca7ed0e6b7c09ab7f7a6bc5a7afa068a"
    },
    {
      "path": "runtime/localization/jv-JV.json",
      "bytes": 8388,
      "sha256": "16e5f8d17eae444268a1c7fd7833a955201e7090af54d69ddfb4c075cd53e710"
    },
    {
      "path": "runtime/localization/pt-BR.json",
      "bytes": 13209,
      "sha256": "6aced4ba66a75ffaac8b43db3e4bd1678e9d6a781b508ecf38a21b8bc3047474"
    },
    {
      "path": "runtime/localization/README.md",
      "bytes": 2684,
      "sha256": "bb6832a0cbc3feb5ab5cc0ad86606f830bd06d118703e6964476b78f41c5eb55"
    },
    {
      "path": "runtime/localization/retroarch.json",
      "bytes": 30095,
      "sha256": "31e0c9c1876402da54219ad6da5294eafe78e94d4663e7d2b02193d1b14925b7"
    },
    {
      "path": "runtime/localization/ro-RO.json",
      "bytes": 9350,
      "sha256": "a58ad0f67d49c56db5f4e274e2cd1a03581b593ba4a6321dffc6ef129ecc373a"
    },
    {
      "path": "runtime/localization/ru-RU.json",
      "bytes": 10950,
      "sha256": "9ac48f105165af995fe48180f2f9fc84661755a44647cfa571a3f69e33ca1476"
    },
    {
      "path": "runtime/localization/tr-TR.json",
      "bytes": 8849,
      "sha256": "37aa1368de761196f439604a1b04b0d11e2858a3bdcc7c392db37e6306d02ecc"
    },
    {
      "path": "runtime/localization/vi-VN.json",
      "bytes": 9014,
      "sha256": "60c6d3a730a067f3f8af8cb12cec96d275221b5c6c89cade8285345e38e99605"
    },
    {
      "path": "runtime/localization/zh-CN.json",
      "bytes": 10521,
      "sha256": "a20b7d3c3395d3cce4d697b45555e4228c076f07caba1c2bcf76bb66bedb79d2"
    },
    {
      "path": "runtime/PATCHES.txt",
      "bytes": 967,
      "sha256": "e0c473bf3c35e45c3c0d7d2f6b25a39db4aeff360c1d5d6aa60b459ee4fc7747"
    },
    {
      "path": "runtime/src/compression.js",
      "bytes": 6409,
      "sha256": "bd6723ec29fee8de81118cfbddfcb53301b8f41f7c6fb22c2de44dedbf111c2c"
    },
    {
      "path": "runtime/src/emulator.js",
      "bytes": 340673,
      "sha256": "9dba72dbb05437906a60a644c0d7441ef648d6d42ea02d0669039d4c7fb0866e"
    },
    {
      "path": "runtime/src/GameManager.js",
      "bytes": 19048,
      "sha256": "f026130eda3648557498c54c70cbb5b36fd71b088e7e42e5a13e413aab11d888"
    },
    {
      "path": "runtime/src/gamepad.js",
      "bytes": 6054,
      "sha256": "27707ee9256cf3e1a6f32d1c3c42f2aed991d637773699fff566008229cc09c8"
    },
    {
      "path": "runtime/src/nipplejs.js",
      "bytes": 20259,
      "sha256": "cf745190f5dc5db942ad54f5683d56c6d6da445646f4b4fc23c049c9985a04df"
    },
    {
      "path": "runtime/src/shaders.js",
      "bytes": 139565,
      "sha256": "79bcd4c35740b2858fc28f2f1894ddb8f483f1aba6f564869a713515726fe902"
    },
    {
      "path": "runtime/src/socket.io.min.js",
      "bytes": 46831,
      "sha256": "b0e735814f8dcfecd6cdb8a7ce95a297a7e1e5f2727a29e6f5901801d52fa0c5"
    },
    {
      "path": "runtime/src/storage.js",
      "bytes": 4600,
      "sha256": "06759f310bb2d782d2728e1d3417a0d8f613eff935d2959c1a705670041a6f2e"
    },
    {
      "path": "runtime/version.json",
      "bytes": 126,
      "sha256": "d8991427000a96fb97daefdb62178071e9bbff911760706148e584ae8d69f9e7"
    }
  ],
  "saveFormat": "cosom-wonderboy-genesis-snapshot-v1",
  "saveNotes": [
    "New portable files pair the 1036312-byte native snapshot, all 65536 bytes of EEPROM backing storage, and the 28-byte live I2C controller. The exact native serializer omits both cartridge components.",
    "Only actual loaded WASM plus mounted ROM identity and this ROM-specific native metadata/specification allow capture or restore.",
    "Selected-file success requires exclusive writer close and matching full readback.",
    "Legacy native-only imports remain supported; missing backing starts FF and the controller resets to its verified idle state, with a visible warning.",
    "Startup Create clears both cartridge components before native reset; Save as clones the current complete adventure.",
    "All components restore or roll back together. The native .srm cache is explicitly synchronized after confirmed restore/reset because native blank flushes may be skipped.",
    "A new valid settled original cartridge record can automatically commit the complete selected session only when write access is already granted; read-only/download modes keep a pending notice.",
    "Original packer, serial writer, reader and validator are verified under controlled native invocation with the mandatory runtime compatibility path. Genuine inn input/continue workflow remains a separate verification limit."
  ],
  "limits": [
    "No complete campaign playthrough.",
    "No physical wireless controller test.",
    "Browser file picker permissions depend on browser."
  ],
  "omittedRuntimeFiles": [
    {
      "path": "runtime/localization/ko-KO.json",
      "bytes": 10925,
      "sha256": "c5822e658e952dc1f20cfee36a1be8b3d6f5ad3026e3b4ad5ab42af6aebdefa9",
      "reason": "Unused Korean locale has a missing JSON comma at line 309. The player explicitly selects en-US; the malformed unused locale is omitted from this new project payload.",
      "originalRetained": true,
      "retention": "Unmodified private project research copy and unchanged upstream COSOM source runtime."
    }
  ],
  "saveComponents": {
    "nativeSnapshotBytes": 1036312,
    "batteryBytes": 65536,
    "batteryPointer": 4585648,
    "batteryGuard": {
      "detected": 1,
      "on": 1,
      "custom": 1,
      "start": 2097153,
      "end": 2097153,
      "crc": "mutable; not a guard"
    },
    "eepromControllerBytes": 28,
    "eepromControllerPointer": 4653336,
    "eepromGuard": {
      "addressBits": 7,
      "sizeMask": 127,
      "pageWriteMask": 3,
      "sclBit": 1,
      "sdaInBit": 0,
      "sdaOutBit": 0
    },
    "timelineBytes": 1101876,
    "canonicalBlankBatterySha256": "71189f7fb6aed638640078fba3a35fda6c39c8962e74dcc75935aac948da9063"
  },
  "compatibilityProfile": {
    "profile": "cosom-wonderboy-h1-eeprom-compat-v1",
    "mandatory": true,
    "nativeCode": "0001B2:E840",
    "suppliedWord": "E820",
    "liveWord": "E840",
    "changedByte": "0001B3:20->40",
    "reason": "The supplied SRAM-hack header routes original save/load to parallel SRAM; the pinned GX product detector maps this title to serial I2C EEPROM. Restoring the canonical header byte in live core memory restores the original serial routines.",
    "sourceAndMountedRomBytesUnchanged": true,
    "canonicalReferenceRomSha256": "6b2ac36f624f914ad26e32baa87d1253aea9dcfc13d2a5842ecdd2bd4a7a43b9",
    "appliedWithOptionalAssistsOff": true,
    "reappliedAfter": [
      "native reset",
      "snapshot load",
      "optional-assist change"
    ]
  },
  "originalSaveObserver": {
    "profile": "cosom-wonderboy-original-save-observer-v1",
    "slotCount": 1,
    "recordOffset": 0,
    "recordBytes": 64,
    "minimumStableMs": 600,
    "pollMs": 250,
    "requiresIdleEEPROMController": true,
    "automaticFileWrite": "Only existing granted write access; complete exclusive close and readback. No automatic permission picker.",
    "withoutWritableFile": "Dirty notice directs the player to manual Save selected file, Save as NEW file, or backup download.",
    "boundaries": "Authoritative baseline is re-primed after load, rewind, reset, new adventure, import, gold or optional-assist changes. Unpersisted notices survive nondiscarding changes.",
    "limits": [
      "Repeated original saves producing identical record bytes cannot be detected by record changes alone.",
      "Controlled original packer/writer/loader native proof is separate from genuine inn interaction and selected OS-file permission tests."
    ]
  }
}
