Mercurial > repos > blastem
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; |