comparison 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
comparison
equal deleted inserted replaced
2334:57ebbc1ade30 2335:c05b7c5e6f11
1799 scd_run(cd, scd_cycle); 1799 scd_run(cd, scd_cycle);
1800 uint32_t new_clock = ((uint64_t)SCD_MCLKS * (uint64_t)percent) / 100; 1800 uint32_t new_clock = ((uint64_t)SCD_MCLKS * (uint64_t)percent) / 100;
1801 rf5c164_adjust_master_clock(&cd->pcm, new_clock); 1801 rf5c164_adjust_master_clock(&cd->pcm, new_clock);
1802 cdd_fader_set_speed_percent(&cd->fader, percent); 1802 cdd_fader_set_speed_percent(&cd->fader, percent);
1803 } 1803 }
1804
1805 static uint8_t *copy_chars(uint8_t *dst, uint8_t *str)
1806 {
1807 size_t len = strlen(str);
1808 memcpy(dst, str, len);
1809 return dst + len;
1810 }
1811
1812 void segacd_format_bram(uint8_t *buffer, size_t size)
1813 {
1814 memset(buffer, 0, size);
1815 uint16_t free_blocks = (size / 64) - 3;
1816 uint8_t *cur = buffer + size - 0x40;
1817 cur = copy_chars(cur, "___________");
1818 cur += 4;
1819 *(cur++) = 0x40;
1820 for (int i = 0; i < 4; i++)
1821 {
1822 *(cur++) = free_blocks >> 8;
1823 *(cur++) = free_blocks;
1824 }
1825 cur += 8;
1826 cur = copy_chars(cur, "SEGA_CD_ROM");
1827 ++cur;
1828 *(cur++) = 1;
1829 cur += 3;
1830 copy_chars(cur, "RAM_CARTRIDGE___");
1831 }