scsp: zeroize dsp
The Saturn BIOS does not (un)initialize the DSP. Without zeroizing the DSP program, the SCSP DSP appears to have a program that continuously writes to 0x30000 through 0x3ffff in sound RAM, which has the effect of destroying any samples stored there.
This commit is contained in:
parent
b9e6296058
commit
3358d95704
@ -8,3 +8,12 @@ inline void copy(T * dst, const T * src, int32_t n) noexcept
|
|||||||
n -= (sizeof (T));
|
n -= (sizeof (T));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
inline void fill(T * dst, const T src, int32_t n) noexcept
|
||||||
|
{
|
||||||
|
while (n > 0) {
|
||||||
|
*dst++ = src;
|
||||||
|
n -= (sizeof (T));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -23,6 +23,9 @@ void main()
|
|||||||
|
|
||||||
scsp.reg.ctrl.MIXER = MIXER__MEM4MB;
|
scsp.reg.ctrl.MIXER = MIXER__MEM4MB;
|
||||||
|
|
||||||
|
reg32 * dsp_steps = reinterpret_cast<reg32*>(&(scsp.reg.dsp.STEP[0].MPRO[0]));
|
||||||
|
fill<reg32>(dsp_steps, 0, (sizeof (scsp.reg.dsp.STEP)));
|
||||||
|
|
||||||
uint32_t * m68k_main_start = reinterpret_cast<uint32_t*>(&_m68k_start);
|
uint32_t * m68k_main_start = reinterpret_cast<uint32_t*>(&_m68k_start);
|
||||||
uint32_t m68k_main_size = reinterpret_cast<uint32_t>(&_m68k_size);
|
uint32_t m68k_main_size = reinterpret_cast<uint32_t>(&_m68k_size);
|
||||||
copy<uint32_t>(&scsp.ram.u32[0], m68k_main_start, m68k_main_size);
|
copy<uint32_t>(&scsp.ram.u32[0], m68k_main_start, m68k_main_size);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user