# HG changeset patch # User Michael Pavone # Date 1671942185 28800 # Node ID 94cca8b8429e783a961fc04110ab2eab5e34309e # Parent 5083bc84fd8481ecdb70e090f90d9e6b9281e8fa Use byte in security code for region identification for Sega/Mega CD discs diff -r 5083bc84fd84 -r 94cca8b8429e genesis.c --- a/genesis.c Sat Dec 24 14:02:14 2022 -0800 +++ b/genesis.c Sat Dec 24 20:23:05 2022 -0800 @@ -2269,6 +2269,23 @@ { tern_node *rom_db = get_rom_db(); rom_info info = configure_rom(rom_db, media->buffer, media->size, NULL, 0, base_map, base_chunks); + if (media->size > 0x20B) { + //Use a byte in the security code region that's unique across all 3 regions + //since it's more reliable than the official header field for this + uint8_t *bytes = media->buffer; + switch (bytes[0x20B]) + { + case 0x7A: + info.regions = REGION_U; + break; + case 0xA1: + info.regions = REGION_J; + break; + case 0x64: + info.regions = REGION_E; + break; + } + } segacd_context *cd = alloc_configure_segacd(media, system_opts, force_region, &info); genesis_context *gen = shared_init(system_opts, &info, force_region);