comparison genesis.c @ 2267:94cca8b8429e

Use byte in security code for region identification for Sega/Mega CD discs
author Michael Pavone <pavone@retrodev.com>
date Sat, 24 Dec 2022 20:23:05 -0800
parents 74112041b2c7
children 3ef80963c2a7
comparison
equal deleted inserted replaced
2266:5083bc84fd84 2267:94cca8b8429e
2267 2267
2268 genesis_context *alloc_config_genesis_cdboot(system_media *media, uint32_t system_opts, uint8_t force_region) 2268 genesis_context *alloc_config_genesis_cdboot(system_media *media, uint32_t system_opts, uint8_t force_region)
2269 { 2269 {
2270 tern_node *rom_db = get_rom_db(); 2270 tern_node *rom_db = get_rom_db();
2271 rom_info info = configure_rom(rom_db, media->buffer, media->size, NULL, 0, base_map, base_chunks); 2271 rom_info info = configure_rom(rom_db, media->buffer, media->size, NULL, 0, base_map, base_chunks);
2272 if (media->size > 0x20B) {
2273 //Use a byte in the security code region that's unique across all 3 regions
2274 //since it's more reliable than the official header field for this
2275 uint8_t *bytes = media->buffer;
2276 switch (bytes[0x20B])
2277 {
2278 case 0x7A:
2279 info.regions = REGION_U;
2280 break;
2281 case 0xA1:
2282 info.regions = REGION_J;
2283 break;
2284 case 0x64:
2285 info.regions = REGION_E;
2286 break;
2287 }
2288 }
2272 2289
2273 segacd_context *cd = alloc_configure_segacd(media, system_opts, force_region, &info); 2290 segacd_context *cd = alloc_configure_segacd(media, system_opts, force_region, &info);
2274 genesis_context *gen = shared_init(system_opts, &info, force_region); 2291 genesis_context *gen = shared_init(system_opts, &info, force_region);
2275 gen->cart = gen->lock_on = NULL; 2292 gen->cart = gen->lock_on = NULL;
2276 gen->save_storage = NULL; 2293 gen->save_storage = NULL;