diff segacd.c @ 2335:c05b7c5e6f11

Automatically format Sega CD backup RAM
author Michael Pavone <pavone@retrodev.com>
date Sat, 26 Aug 2023 20:32:53 -0700
parents 06d5e9b08bdb
children ae073c2167e2
line wrap: on
line diff
--- a/segacd.c	Sat Aug 26 19:59:44 2023 -0700
+++ b/segacd.c	Sat Aug 26 20:32:53 2023 -0700
@@ -1801,3 +1801,31 @@
 	rf5c164_adjust_master_clock(&cd->pcm, new_clock);
 	cdd_fader_set_speed_percent(&cd->fader, percent);
 }
+
+static uint8_t *copy_chars(uint8_t *dst, uint8_t *str)
+{
+	size_t len = strlen(str);
+	memcpy(dst, str, len);
+	return dst + len;
+}
+
+void segacd_format_bram(uint8_t *buffer, size_t size)
+{
+	memset(buffer, 0, size);
+	uint16_t free_blocks = (size / 64) - 3;
+	uint8_t *cur = buffer + size - 0x40;
+	cur = copy_chars(cur, "___________");
+	cur += 4;
+	*(cur++) = 0x40;
+	for (int i = 0; i < 4; i++)
+	{
+		*(cur++) = free_blocks >> 8;
+		*(cur++) = free_blocks;
+	}
+	cur += 8;
+	cur = copy_chars(cur, "SEGA_CD_ROM");
+	++cur;
+	*(cur++) = 1;
+	cur += 3;
+	copy_chars(cur, "RAM_CARTRIDGE___");
+}