changeset 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 5083bc84fd84
children 5b308c7b098c
files genesis.c
diffstat 1 files changed, 17 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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);