diff blastem.c @ 2545:c076a96f1668

Get CD titles sort of working in libretro target
author Michael Pavone <pavone@retrodev.com>
date Thu, 02 Jan 2025 23:02:52 -0800
parents 8cf7cadc17ee
children 6aa3025bbf5f
line wrap: on
line diff
--- a/blastem.c	Thu Nov 28 23:44:36 2024 -0800
+++ b/blastem.c	Thu Jan 02 23:02:52 2025 -0800
@@ -31,7 +31,7 @@
 #include "nuklear_ui/blastem_nuklear.h"
 #endif
 
-#define BLASTEM_VERSION "0.6.3-pre"
+#include "version.inc"
 
 #ifdef __ANDROID__
 #define FULLSCREEN_DEFAULT 1
@@ -47,243 +47,6 @@
 
 tern_node * config;
 
-#define SMD_HEADER_SIZE 512
-#define SMD_MAGIC1 0x03
-#define SMD_MAGIC2 0xAA
-#define SMD_MAGIC3 0xBB
-#define SMD_BLOCK_SIZE 0x4000
-
-#ifdef DISABLE_ZLIB
-#define ROMFILE FILE*
-#define romopen fopen
-#define romread fread
-#define romseek fseek
-#define romgetc fgetc
-#define romclose fclose
-#else
-#include "zlib/zlib.h"
-#define ROMFILE gzFile
-#define romopen gzopen
-#define romread gzfread
-#define romseek gzseek
-#define romgetc gzgetc
-#define romclose gzclose
-#endif
-
-uint16_t *process_smd_block(uint16_t *dst, uint8_t *src, size_t bytes)
-{
-	for (uint8_t *low = src, *high = (src+bytes/2), *end = src+bytes; high < end; high++, low++) {
-		*(dst++) = *low << 8 | *high;
-	}
-	return dst;
-}
-
-int load_smd_rom(ROMFILE f, void **buffer)
-{
-	uint8_t block[SMD_BLOCK_SIZE];
-	romseek(f, SMD_HEADER_SIZE, SEEK_SET);
-
-	size_t filesize = 512 * 1024;
-	size_t readsize = 0;
-	uint16_t *dst, *buf;
-	dst = buf = malloc(filesize);
-
-
-	size_t read;
-	do {
-		if ((readsize + SMD_BLOCK_SIZE > filesize)) {
-			filesize *= 2;
-			buf = realloc(buf, filesize);
-			dst = buf + readsize/sizeof(uint16_t);
-		}
-		read = romread(block, 1, SMD_BLOCK_SIZE, f);
-		if (read > 0) {
-			dst = process_smd_block(dst, block, read);
-			readsize += read;
-		}
-	} while(read > 0);
-	romclose(f);
-
-	*buffer = buf;
-
-	return readsize;
-}
-
-uint8_t is_smd_format(const char *filename, uint8_t *header)
-{
-	if (header[1] == SMD_MAGIC1 && header[8] == SMD_MAGIC2 && header[9] == SMD_MAGIC3) {
-		int i;
-		for (i = 3; i < 8; i++) {
-			if (header[i] != 0) {
-				return 0;
-			}
-		}
-		if (i == 8) {
-			if (header[2]) {
-				fatal_error("%s is a split SMD ROM which is not currently supported", filename);
-			}
-			return 1;
-		}
-	}
-	return 0;
-}
-
-uint32_t load_media_zip(const char *filename, system_media *dst)
-{
-	static const char *valid_exts[] = {"bin", "md", "gen", "sms", "gg", "rom", "smd", "sg", "sc", "sf7"};
-	const uint32_t num_exts = sizeof(valid_exts)/sizeof(*valid_exts);
-	zip_file *z = zip_open(filename);
-	if (!z) {
-		return 0;
-	}
-
-	for (uint32_t i = 0; i < z->num_entries; i++)
-	{
-		char *ext = path_extension(z->entries[i].name);
-		if (!ext) {
-			continue;
-		}
-		for (uint32_t j = 0; j < num_exts; j++)
-		{
-			if (!strcasecmp(ext, valid_exts[j])) {
-				size_t out_size = nearest_pow2(z->entries[i].size);
-				dst->buffer = zip_read(z, i, &out_size);
-				if (dst->buffer) {
-					if (is_smd_format(z->entries[i].name, dst->buffer)) {
-						size_t offset;
-						for (offset = 0; offset + SMD_BLOCK_SIZE + SMD_HEADER_SIZE <= out_size; offset += SMD_BLOCK_SIZE)
-						{
-							uint8_t tmp[SMD_BLOCK_SIZE];
-							uint8_t *u8dst = dst->buffer;
-							memcpy(tmp, u8dst + offset + SMD_HEADER_SIZE, SMD_BLOCK_SIZE);
-							process_smd_block((void *)(u8dst + offset), tmp, SMD_BLOCK_SIZE);
-						}
-						out_size = offset;
-					}
-					dst->extension = ext;
-					dst->dir = path_dirname(filename);
-					if (!dst->dir) {
-						dst->dir = path_current_dir();
-					}
-					dst->name = basename_no_extension(filename);
-					dst->size = out_size;
-					dst->zip = z;
-					return out_size;
-				}
-			}
-		}
-		free(ext);
-	}
-	zip_close(z);
-	return 0;
-}
-
-uint32_t load_media(char * filename, system_media *dst, system_type *stype)
-{
-	uint8_t header[10];
-	if (dst->zip) {
-		zip_close(dst->zip);
-	}
-	dst->orig_path = filename;
-	char *ext = path_extension(filename);
-	if (ext && !strcasecmp(ext, "zip")) {
-		free(ext);
-		return load_media_zip(filename, dst);
-	}
-	if (ext && !strcasecmp(ext, "iso")) {
-		if (stype) {
-			*stype = SYSTEM_SEGACD;
-		}
-		return make_iso_media(dst, filename);
-	}
-
-	ROMFILE f = romopen(filename, "rb");
-	if (!f) {
-		free(ext);
-		return 0;
-	}
-#ifndef DISABLE_ZLIB
-	char *to_free = NULL;
-	if (!gzdirect(f) && ext && !strcasecmp(ext, "gz")) {
-		size_t without_gz = strlen(filename) - 2;
-		to_free = calloc(1, without_gz);
-		memcpy(to_free, filename, without_gz - 1);
-		to_free[without_gz - 1] = 0;
-		free(ext);
-		filename = to_free;
-		ext = path_extension(filename);
-	}
-#endif //DISABLE_ZLIB
-
-	if (sizeof(header) != romread(header, 1, sizeof(header), f)) {
-		fatal_error("Error reading from %s\n", filename);
-	}
-
-	uint32_t ret = 0;
-	if (is_smd_format(filename, header)) {
-			if (stype) {
-				*stype = SYSTEM_GENESIS;
-			}
-			ret = load_smd_rom(f, &dst->buffer);
-		}
-
-	if (!ret) {
-		size_t filesize = 512 * 1024;
-		size_t readsize = sizeof(header);
-
-		char *buf = malloc(filesize);
-		memcpy(buf, header, readsize);
-
-		size_t read;
-		do {
-			read = romread(buf + readsize, 1, filesize - readsize, f);
-			if (read > 0) {
-				readsize += read;
-				if (readsize == filesize) {
-					int one_more = romgetc(f);
-					if (one_more >= 0) {
-						filesize *= 2;
-						buf = realloc(buf, filesize);
-						buf[readsize++] = one_more;
-					} else {
-						read = 0;
-					}
-				}
-			}
-		} while (read > 0);
-		dst->buffer = buf;
-		ret = (uint32_t)readsize;
-	}
-	dst->dir = path_dirname(filename);
-	if (!dst->dir) {
-		dst->dir = path_current_dir();
-	}
-	dst->name = basename_no_extension(filename);
-	dst->extension = ext;
-	dst->size = ret;
-	romclose(f);
-	if (!strcasecmp(dst->extension, "cue")) {
-		if (parse_cue(dst)) {
-			if (stype) {
-				*stype = SYSTEM_SEGACD;
-			}
-		}
-	} else if (!strcasecmp(dst->extension, "toc")) {
-		if (parse_toc(dst)) {
-			if (stype) {
-				*stype = SYSTEM_SEGACD;
-			}
-		}
-	}
-#ifndef DISABLE_ZLIB
-	if (to_free) {
-		free(to_free);
-	}
-#endif
-
-	return ret;
-}
-
 int break_on_sync = 0;
 char *save_state_path;
 char * save_filename;