From 01b2ec4083e7118c4d778d699c17eafea5350ed1 Mon Sep 17 00:00:00 2001 From: Jaby Date: Thu, 26 Sep 2024 21:40:15 +0200 Subject: [PATCH] Fix XEBA and Voice::is_end code --- include/PSX/SPU/spu.hpp | 3 +-- include/PSX/System/IOPorts/spu_io.hpp | 16 ++++++++-------- src/Library/src/BootLoader/spu_boot.cpp | 6 +++--- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/include/PSX/SPU/spu.hpp b/include/PSX/SPU/spu.hpp index dd1a7fd4..769579e2 100644 --- a/include/PSX/SPU/spu.hpp +++ b/include/PSX/SPU/spu.hpp @@ -44,8 +44,7 @@ namespace JabyEngine { } bool is_end() const { - // TODO: Make work in XEBRA - return SPU_IO::Key::Status.read().is_set(Voice::get_id()); + return SPU_IO::Voice[Voice::get_id()].adsr_volume.read() == SimpleVolume::mute(); } }; diff --git a/include/PSX/System/IOPorts/spu_io.hpp b/include/PSX/System/IOPorts/spu_io.hpp index 72279b27..1b7638a7 100644 --- a/include/PSX/System/IOPorts/spu_io.hpp +++ b/include/PSX/System/IOPorts/spu_io.hpp @@ -35,14 +35,14 @@ namespace JabyEngine { #pragma pack(push, 1) struct Voice { - SweepVolumeIO volumeLeft; //Offset: 0x0 - SweepVolumeIO volumeRight; //Offset: 0x2 - SampleRateIO sampleRate; //Offset: 0x4; - SRAMAdrIO adr; //Offset: 0x6 - ADIO ad; //Offset: 0x8 - SRIO sr; //Offset: 0xA - SimpleVolumeIO currentVolume; //Offset: 0xC - SRAMAdrIO repeatAdr; //Offset: 0xE + SweepVolumeIO volumeLeft; //Offset: 0x0 + SweepVolumeIO volumeRight; //Offset: 0x2 + SampleRateIO sampleRate; //Offset: 0x4; + SRAMAdrIO adr; //Offset: 0x6 + ADIO ad; //Offset: 0x8 + SRIO sr; //Offset: 0xA + SimpleVolumeIO adsr_volume; //Offset: 0xC + SRAMAdrIO repeatAdr; //Offset: 0xE }; #pragma pack(pop) diff --git a/src/Library/src/BootLoader/spu_boot.cpp b/src/Library/src/BootLoader/spu_boot.cpp index d92d4534..ea1d6ea0 100644 --- a/src/Library/src/BootLoader/spu_boot.cpp +++ b/src/Library/src/BootLoader/spu_boot.cpp @@ -29,7 +29,7 @@ namespace JabyEngine { voice.sampleRate.write(SampleRate::stop()); voice.ad.write(AD::none()); voice.sr.write(SR::none()); - voice.currentVolume.write(SimpleVolume::mute()); + voice.adsr_volume.write(SimpleVolume::mute()); voice.adr.write(SRAMAdr::adpcm_start()); voice.repeatAdr.write(SRAMAdr::adpcm_start()); @@ -58,11 +58,11 @@ namespace JabyEngine { } static void wait_voices() { - static constexpr SimpleVolume Treshhold{static_cast(I16_MAX*0.03)}; + static constexpr auto Treshhold = SimpleVolume::mute(); try_again: for(const auto& voice : SPU_IO::Voice) { - if(voice.currentVolume.read() > Treshhold) { + if(voice.adsr_volume.read() > Treshhold) { goto try_again; } }