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