mirror of
https://github.com/par274/sharpemu.git
synced 2026-07-30 22:49:53 +08:00
2b6bd5a532
* [audio] added sdl audio backend and in-tree atrac9 decoder * [input] replaced per-platform pad readers with sdl gamepad input * [video] added sdl window and host display plumbing * [gui] added host display options and per-game render settings * [bink] synced host movie playback to the guest audio clock * [cpu] hooked windows write faults into guest image tracking * [perf] added guest and render profiling, reserved host cpu lanes * [kernel] fixed stale pthread mutex handle alias * [host] wired the sdl session, save-data paths and project references * [audio] hoisted ajm trace stackalloc out of its loop * [video] Add guest image sync setting * [build] Strip native symbols * reuse
36 lines
947 B
C#
36 lines
947 B
C#
// SPDX-License-Identifier: MIT
|
|
#nullable disable
|
|
namespace LibAtrac9
|
|
{
|
|
/// <summary>
|
|
/// An Xorshift RNG used by the ATRAC9 codec
|
|
/// </summary>
|
|
internal class Atrac9Rng
|
|
{
|
|
private ushort _stateA;
|
|
private ushort _stateB;
|
|
private ushort _stateC;
|
|
private ushort _stateD;
|
|
|
|
public Atrac9Rng(ushort seed)
|
|
{
|
|
int startValue = 0x4D93 * (seed ^ (seed >> 14));
|
|
|
|
_stateA = (ushort)(3 - startValue);
|
|
_stateB = (ushort)(2 - startValue);
|
|
_stateC = (ushort)(1 - startValue);
|
|
_stateD = (ushort)(0 - startValue);
|
|
}
|
|
|
|
public ushort Next()
|
|
{
|
|
ushort t = (ushort)(_stateD ^ (_stateD << 5));
|
|
_stateD = _stateC;
|
|
_stateC = _stateB;
|
|
_stateB = _stateA;
|
|
_stateA = (ushort)(t ^ _stateA ^ ((t ^ (_stateA >> 5)) >> 4));
|
|
return _stateA;
|
|
}
|
|
}
|
|
}
|