Mercurial > repos > blastem
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___"); +}