Update SPU IO way
This commit is contained in:
@@ -26,7 +26,7 @@ namespace JabyEngine {
|
||||
DMA_IO::SPU.set_adr(adr);
|
||||
}
|
||||
|
||||
static void set_dst(SPU::SRAM_Adr adr) {
|
||||
static void set_dst(SPU::SRAMAdr adr) {
|
||||
SPU_IO::SRAMTransferAdr.write(adr);
|
||||
SPU_IO::ControlRegister.set_transfer_mode(SPU_IO::ControlRegister::DMAWrite);
|
||||
}
|
||||
|
@@ -8,7 +8,7 @@ namespace JabyEngine {
|
||||
using namespace SPU_IO;
|
||||
|
||||
static void clear_main_volume() {
|
||||
static constexpr auto StartVol = SweepVolume::from(SweepVolume::VolumeEnable, SweepVolume::Volume.with(static_cast<int16_t>(I16_MAX >> 2)));
|
||||
static constexpr auto StartVol = SweepVolume::from(SweepVolume::VolumeMode::Enable, SweepVolume::VolumeMode::Volume.with(SweepVolume::VolumeMode::MaxVolume >> 1));
|
||||
|
||||
MainVolume::Left.write(StartVol);
|
||||
MainVolume::Right.write(StartVol);
|
||||
@@ -18,37 +18,37 @@ namespace JabyEngine {
|
||||
CDVolume::Left.write(0.75_vol);
|
||||
CDVolume::Right.write(0.75_vol);
|
||||
|
||||
ExternalAudioInputVolume::Left.write({0});
|
||||
ExternalAudioInputVolume::Right.write({0});
|
||||
ExternalAudioInputVolume::Left.write(SimpleVolume::mute());
|
||||
ExternalAudioInputVolume::Right.write(SimpleVolume::mute());
|
||||
}
|
||||
|
||||
static void clear_voice() {
|
||||
for(auto& voice : SPU_IO::Voice) {
|
||||
voice.volumeLeft.write({0});
|
||||
voice.volumeRight.write({0});
|
||||
voice.sampleRate.write({0});
|
||||
voice.ad.write({0});
|
||||
voice.sr.write({0});
|
||||
voice.currentVolume.write({0});
|
||||
voice.volumeLeft.write(SweepVolume::mute());
|
||||
voice.volumeRight.write(SweepVolume::mute());
|
||||
voice.sampleRate.write(SampleRate::stop());
|
||||
voice.ad.write(AD::none());
|
||||
voice.sr.write(SR::none());
|
||||
voice.currentVolume.write(SimpleVolume::mute());
|
||||
|
||||
voice.adr.write(Voice::start_adr());
|
||||
voice.repeatAdr.write(Voice::start_adr());
|
||||
voice.adr.write(SRAMAdr::adpcm_start());
|
||||
voice.repeatAdr.write(SRAMAdr::adpcm_start());
|
||||
}
|
||||
}
|
||||
|
||||
static void clear_pmon() {
|
||||
SPU_IO::PMON.write({0});
|
||||
SPU_IO::PMON.write(PitchModulation::AllOff());
|
||||
}
|
||||
|
||||
static void clear_noise_and_echo() {
|
||||
SPU_IO::NON.write({0});
|
||||
SPU_IO::NON.write(Noise::AllOff());
|
||||
SPU_IO::EON.write(Echo::AllOff());
|
||||
}
|
||||
|
||||
static void clear_reverb() {
|
||||
Reverb::Volume::Left.write({0});
|
||||
Reverb::Volume::Right.write({0});
|
||||
Reverb::WorkAreaAdr.write({0});
|
||||
Reverb::Volume::Left.write(SimpleVolume::mute());
|
||||
Reverb::Volume::Right.write(SimpleVolume::mute());
|
||||
Reverb::WorkAreaAdr.write(SRAMAdr::null());
|
||||
}
|
||||
|
||||
static void setup_control_register() {
|
||||
@@ -57,12 +57,6 @@ namespace JabyEngine {
|
||||
SPU_IO::ControlRegister.write(SetupValue);
|
||||
}
|
||||
|
||||
static void setup_data_transfer_control() {
|
||||
static constexpr struct DataTransferControl RequiredValue{(2 << 1)};
|
||||
|
||||
DataTransferControl.write(RequiredValue);
|
||||
}
|
||||
|
||||
static void wait_voices() {
|
||||
static constexpr SimpleVolume Treshhold{static_cast<int16_t>(I16_MAX*0.03)};
|
||||
|
||||
@@ -75,7 +69,7 @@ namespace JabyEngine {
|
||||
}
|
||||
|
||||
void stop_voices() {
|
||||
SPU_IO::Key::Off.write({UI32_MAX});
|
||||
SPU_IO::Key::Off.write(KeyOff::all());
|
||||
}
|
||||
|
||||
void setup() {
|
||||
@@ -88,7 +82,6 @@ namespace JabyEngine {
|
||||
clear_noise_and_echo();
|
||||
clear_reverb();
|
||||
|
||||
setup_data_transfer_control();
|
||||
setup_control_register();
|
||||
}
|
||||
}
|
||||
|
@@ -31,9 +31,9 @@ namespace JabyEngine {
|
||||
};
|
||||
|
||||
struct VAGState {
|
||||
uint32_t voice_id;
|
||||
size_t words_left;
|
||||
SPU::SRAM_Adr adr;
|
||||
uint32_t voice_id;
|
||||
size_t words_left;
|
||||
SPU::SRAMAdr adr;
|
||||
|
||||
static constexpr VAGState create(uint32_t voice_id) {
|
||||
return VAGState{.voice_id = voice_id, .words_left = 0, .adr = 0};
|
||||
|
@@ -8,16 +8,16 @@
|
||||
|
||||
namespace JabyEngine {
|
||||
namespace SPU {
|
||||
SRAM_Adr Voice :: allocate(size_t size) const {
|
||||
SRAMAdr Voice :: allocate(size_t size) const {
|
||||
Voice::stop();
|
||||
const auto voice_id = Voice::get_id();
|
||||
const auto adr = SRAM_Adr{static_cast<SRAM_Adr::UnderlyingType>(reinterpret_cast<uintptr_t>(SPU_MMU::allocate(voice_id, size)))};
|
||||
const auto adr = SRAMAdr{static_cast<SRAMAdr::UnderlyingType>(reinterpret_cast<uintptr_t>(SPU_MMU::allocate(voice_id, size)))};
|
||||
|
||||
SPU_IO::Voice[voice_id].adr.write(adr);
|
||||
return adr;
|
||||
}
|
||||
|
||||
SRAM_Adr Voice :: allocate(SPU_IO::SampleRate frequency, size_t size) const {
|
||||
SRAMAdr Voice :: allocate(SPU_IO::SampleRate frequency, size_t size) const {
|
||||
const auto result = Voice::allocate(size);
|
||||
Voice::set_sample_rate(frequency);
|
||||
return result;
|
||||
|
Reference in New Issue
Block a user