diff system.c @ 2413:64cf80e683aa

Initial support for Colecovision emulation
author Michael Pavone <pavone@retrodev.com>
date Thu, 04 Jan 2024 22:56:35 -0800
parents 92449b47cce8
children 65c2e4d990cc
line wrap: on
line diff
--- a/system.c	Thu Jan 04 22:14:29 2024 -0800
+++ b/system.c	Thu Jan 04 22:56:35 2024 -0800
@@ -4,6 +4,7 @@
 #include "gen_player.h"
 #include "sms.h"
 #include "mediaplayer.h"
+#include "coleco.h"
 
 uint8_t safe_cmp(char *str, long offset, uint8_t *buffer, long filesize)
 {
@@ -39,6 +40,15 @@
 		|| safe_cmp("fLaC", 0, media->buffer, media->size)) {
 		return SYSTEM_MEDIA_PLAYER;
 	}
+	if (
+		(safe_cmp("\xAA\x55", 0, media->buffer, media->size)
+		|| safe_cmp("\x55\xAA", 0, media->buffer, media->size))
+		&& media->size > 0xB) {
+		uint8_t *buffer = media->buffer;
+		if (((buffer[0xB] << 8) | buffer[0xA]) > 0x8000) {
+			return SYSTEM_COLECOVISION;
+		}
+	}
 
 
 	//TODO: Detect Jaguar ROMs here
@@ -54,6 +64,9 @@
 		if (!strcmp("j64", media->extension)) {
 			return SYSTEM_JAGUAR;
 		}
+		if (!strcmp("col", media->extension)) {
+			return SYSTEM_COLECOVISION;
+		}
 	}
 
 	//More certain checks failed, look for a valid 68K reset vector
@@ -87,6 +100,8 @@
 #ifndef NO_Z80
 	case SYSTEM_SMS:
 		return &(alloc_configure_sms(media, opts, force_region))->header;
+	case SYSTEM_COLECOVISION:
+		return &(alloc_configure_coleco(media))->header;
 #endif
 	case SYSTEM_MEDIA_PLAYER:
 		return &(alloc_media_player(media, opts))->header;