mirror of
https://github.com/SourMesen/Mesen2.git
synced 2025-04-02 10:21:44 -04:00
-ADPCM edge cases work better (reset, length latching, dma, etc.) -BRAM unlocking/locking fixes -Read ToC command returns the correct amount of data -SCSI data port returns the drive's reply whenever a reply is being read, regardless of the value written to the port through $1801 -Implemented/fixed audio sample read behavior (latching, L/R toggle) -Fixed missing (unused) readable/writable bits in some registes All of these fixes are based on the test results from krikzz's test rom here: https://github.com/krikzz/turbo-ed-pro-pub/tree/main/tcd-verificator
44 lines
No EOL
1.1 KiB
C++
44 lines
No EOL
1.1 KiB
C++
#include "pch.h"
|
|
#include "PCE/CdRom/PceAudioFader.h"
|
|
#include "PCE/PceConsole.h"
|
|
#include "Utilities/Serializer.h"
|
|
|
|
PceAudioFader::PceAudioFader(PceConsole* console)
|
|
{
|
|
_console = console;
|
|
}
|
|
|
|
uint8_t PceAudioFader::Read()
|
|
{
|
|
return _state.RegValue;
|
|
}
|
|
|
|
void PceAudioFader::Write(uint8_t value)
|
|
{
|
|
_state.RegValue = value;
|
|
_state.Enabled = (value & 0x08) != 0;
|
|
_state.Target = (value & 0x02) ? PceAudioFaderTarget::Adpcm : PceAudioFaderTarget::CdAudio;
|
|
_state.StartClock = _console->GetMasterClock();
|
|
_state.FastFade = (value & 0x04) != 0;
|
|
}
|
|
|
|
double PceAudioFader::GetVolume(PceAudioFaderTarget target)
|
|
{
|
|
if(_state.Enabled && _state.Target == target) {
|
|
//Number of clocks to reduce volume by 1%
|
|
uint64_t fadeSpeed = (_state.FastFade ? 0.025 : 0.06) * _console->GetMasterClockRate();
|
|
|
|
double volume = 1.0 - (_console->GetMasterClock() - _state.StartClock) / fadeSpeed / 100.0;
|
|
return volume < 0 ? 0 : volume;
|
|
}
|
|
return 1.0;
|
|
}
|
|
|
|
void PceAudioFader::Serialize(Serializer& s)
|
|
{
|
|
SV(_state.Enabled);
|
|
SV(_state.Target);
|
|
SV(_state.StartClock);
|
|
SV(_state.FastFade);
|
|
SV(_state.RegValue);
|
|
} |