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