diff system.c @ 2459:cb62730d5c99

Initial work on Copera emulation
author Michael Pavone <pavone@retrodev.com>
date Wed, 21 Feb 2024 23:42:19 -0800
parents 9da3de58410d
children
line wrap: on
line diff
--- a/system.c	Wed Feb 21 20:34:52 2024 -0800
+++ b/system.c	Wed Feb 21 23:42:19 2024 -0800
@@ -41,6 +41,21 @@
 	) {
 		return SYSTEM_SMS;
 	}
+	if (media->size > 400) {
+		uint8_t *buffer = media->buffer;
+		if (!memcmp(buffer + 4, "\x00\x00\x04\x00", 4) && (buffer[0x80] == 0 || buffer[0x80] == 0xFF)) {
+			int i = 0x81;
+			for(; i < 0x400; i++)
+			{
+				if (buffer[i] != buffer[0x80]) {
+					break;
+				}
+			}
+			if (i == 0x400) {
+				return SYSTEM_COPERA;
+			}
+		}
+	}
 	if (safe_cmp("BLSTEL\x02", 0, media->buffer, media->size)) {
 		uint8_t *buffer = media->buffer;
 		if (media->size > 9 && buffer[7] == 0) {
@@ -119,7 +134,8 @@
 	case SYSTEM_MEDIA_PLAYER:
 		return &(alloc_media_player(media, opts))->header;
 	case SYSTEM_PICO:
-		return &(alloc_config_pico(media->buffer, media->size, lock_on, lock_on_size, opts, force_region))->header;
+	case SYSTEM_COPERA:
+		return &(alloc_config_pico(media->buffer, media->size, lock_on, lock_on_size, opts, force_region, stype))->header;
 	default:
 		return NULL;
 	}