Add boot namespace and adjust names
This commit is contained in:
@@ -3,97 +3,99 @@
|
||||
#include <limits.h>
|
||||
|
||||
namespace JabyEngine {
|
||||
namespace SPU {
|
||||
using namespace JabyEngine;
|
||||
|
||||
static void clear_main_volume() {
|
||||
static constexpr auto StartVol = SPU_IO::SweepVolume::with(SPU_IO::SweepVolume::VolumeEnable, SPU_IO::SweepVolume::Volume.with(I16_MAX >> 2));
|
||||
|
||||
SPU_IO::MainVolume::Left.write(StartVol);
|
||||
SPU_IO::MainVolume::Right.write(StartVol);
|
||||
}
|
||||
|
||||
static void clear_cd_and_ext_audio_volume() {
|
||||
SPU_IO::CDVolume::Left.write(0);
|
||||
SPU_IO::CDVolume::Right.write(0);
|
||||
|
||||
SPU_IO::ExternalAudioInputVolume::Left.write(0);
|
||||
SPU_IO::ExternalAudioInputVolume::Right.write(0);
|
||||
}
|
||||
|
||||
static void clear_control_register() {
|
||||
SPU_IO::Control.write(SPU_IO::ControlRegister());
|
||||
}
|
||||
|
||||
static void clear_voice() {
|
||||
for(auto& voice : SPU_IO::Voice) {
|
||||
voice.volumeLeft.write(SPU_IO::SweepVolume());
|
||||
voice.volumeRight.write(SPU_IO::SweepVolume());
|
||||
voice.sampleRate.write(SPU_IO::SampleRate());
|
||||
voice.ad.write(SPU_IO::AD());
|
||||
voice.sr.write(SPU_IO::SR());
|
||||
voice.currentVolume.write(SPU_IO::SimpleVolume(0));
|
||||
|
||||
voice.adr.write(0x200);
|
||||
voice.repeatAdr.write(0x200);
|
||||
}
|
||||
}
|
||||
|
||||
static void clear_pmon() {
|
||||
SPU_IO::PMON.write(SPU_IO::PitchModFlags());
|
||||
}
|
||||
|
||||
static void clear_noise_and_echo() {
|
||||
SPU_IO::NON.write(SPU_IO::NoiseGenerator());
|
||||
SPU_IO::EON.write(SPU_IO::EchoOn());
|
||||
}
|
||||
|
||||
static void clear_reverb() {
|
||||
SPU_IO::Reverb::Volume::Left.write(0);
|
||||
SPU_IO::Reverb::Volume::Right.write(0);
|
||||
SPU_IO::Reverb::WorkAreaAdr.write(0);
|
||||
}
|
||||
|
||||
static void setup_control_register() {
|
||||
static constexpr auto SetupValue = SPU_IO::ControlRegister::with(SPU_IO::ControlRegister::Enable, SPU_IO::ControlRegister::Unmute, SPU_IO::ControlRegister::CDAudioEnable);
|
||||
|
||||
SPU_IO::Control.write(SetupValue);
|
||||
}
|
||||
|
||||
static void setup_data_transfer_control() {
|
||||
static constexpr uint16_t RequiredValue = (2 << 1);
|
||||
namespace boot {
|
||||
namespace SPU {
|
||||
using namespace JabyEngine;
|
||||
|
||||
SPU_IO::DataTransferControl.write(RequiredValue);
|
||||
}
|
||||
static void clear_main_volume() {
|
||||
static constexpr auto StartVol = SPU_IO::SweepVolume::with(SPU_IO::SweepVolume::VolumeEnable, SPU_IO::SweepVolume::Volume.with(I16_MAX >> 2));
|
||||
|
||||
static void wait_voices() {
|
||||
static constexpr int16_t Treshhold = (I16_MAX*0.03);
|
||||
SPU_IO::MainVolume::Left.write(StartVol);
|
||||
SPU_IO::MainVolume::Right.write(StartVol);
|
||||
}
|
||||
|
||||
try_again:
|
||||
for(const auto& voice : SPU_IO::Voice) {
|
||||
if(voice.currentVolume.read() > Treshhold) {
|
||||
goto try_again;
|
||||
static void clear_cd_and_ext_audio_volume() {
|
||||
SPU_IO::CDVolume::Left.write(0);
|
||||
SPU_IO::CDVolume::Right.write(0);
|
||||
|
||||
SPU_IO::ExternalAudioInputVolume::Left.write(0);
|
||||
SPU_IO::ExternalAudioInputVolume::Right.write(0);
|
||||
}
|
||||
|
||||
static void clear_control_register() {
|
||||
SPU_IO::Control.write(SPU_IO::ControlRegister());
|
||||
}
|
||||
|
||||
static void clear_voice() {
|
||||
for(auto& voice : SPU_IO::Voice) {
|
||||
voice.volumeLeft.write(SPU_IO::SweepVolume());
|
||||
voice.volumeRight.write(SPU_IO::SweepVolume());
|
||||
voice.sampleRate.write(SPU_IO::SampleRate());
|
||||
voice.ad.write(SPU_IO::AD());
|
||||
voice.sr.write(SPU_IO::SR());
|
||||
voice.currentVolume.write(SPU_IO::SimpleVolume(0));
|
||||
|
||||
voice.adr.write(0x200);
|
||||
voice.repeatAdr.write(0x200);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void stop_voices() {
|
||||
SPU_IO::Key::Off.write(UI32_MAX);
|
||||
}
|
||||
static void clear_pmon() {
|
||||
SPU_IO::PMON.write(SPU_IO::PitchModFlags());
|
||||
}
|
||||
|
||||
void setup() {
|
||||
wait_voices();
|
||||
static void clear_noise_and_echo() {
|
||||
SPU_IO::NON.write(SPU_IO::NoiseGenerator());
|
||||
SPU_IO::EON.write(SPU_IO::EchoOn());
|
||||
}
|
||||
|
||||
clear_main_volume();
|
||||
clear_cd_and_ext_audio_volume();
|
||||
clear_control_register();
|
||||
clear_voice();
|
||||
clear_pmon();
|
||||
clear_noise_and_echo();
|
||||
clear_reverb();
|
||||
static void clear_reverb() {
|
||||
SPU_IO::Reverb::Volume::Left.write(0);
|
||||
SPU_IO::Reverb::Volume::Right.write(0);
|
||||
SPU_IO::Reverb::WorkAreaAdr.write(0);
|
||||
}
|
||||
|
||||
setup_data_transfer_control();
|
||||
setup_control_register();
|
||||
static void setup_control_register() {
|
||||
static constexpr auto SetupValue = SPU_IO::ControlRegister::with(SPU_IO::ControlRegister::Enable, SPU_IO::ControlRegister::Unmute, SPU_IO::ControlRegister::CDAudioEnable);
|
||||
|
||||
SPU_IO::Control.write(SetupValue);
|
||||
}
|
||||
|
||||
static void setup_data_transfer_control() {
|
||||
static constexpr uint16_t RequiredValue = (2 << 1);
|
||||
|
||||
SPU_IO::DataTransferControl.write(RequiredValue);
|
||||
}
|
||||
|
||||
static void wait_voices() {
|
||||
static constexpr int16_t Treshhold = (I16_MAX*0.03);
|
||||
|
||||
try_again:
|
||||
for(const auto& voice : SPU_IO::Voice) {
|
||||
if(voice.currentVolume.read() > Treshhold) {
|
||||
goto try_again;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void stop_voices() {
|
||||
SPU_IO::Key::Off.write(UI32_MAX);
|
||||
}
|
||||
|
||||
void setup() {
|
||||
wait_voices();
|
||||
|
||||
clear_main_volume();
|
||||
clear_cd_and_ext_audio_volume();
|
||||
clear_control_register();
|
||||
clear_voice();
|
||||
clear_pmon();
|
||||
clear_noise_and_echo();
|
||||
clear_reverb();
|
||||
|
||||
setup_data_transfer_control();
|
||||
setup_control_register();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user