Moar Teak LLE

Co-Authored-By: PSISP <12768103+psi-rockin@users.noreply.github.com>
This commit is contained in:
wheremyfoodat 2024-02-17 03:48:37 +02:00
parent 363c71e66c
commit 5dd3c02ffb
10 changed files with 284 additions and 21 deletions

View file

@ -24,8 +24,10 @@ Emulator::Emulator()
httpServer(this)
#endif
{
dsp = Audio::makeDSPCore(Audio::DSPCore::Type::Teakra, memory);
kernel.getServiceManager().getDSP().setDSPCore(dsp.get());
DSPService& dspService = kernel.getServiceManager().getDSP();
dsp = Audio::makeDSPCore(Audio::DSPCore::Type::Teakra, memory, dspService);
dspService.setDSPCore(dsp.get());
#ifdef PANDA3DS_ENABLE_DISCORD_RPC
if (config.discordRpcEnabled) {
@ -49,6 +51,8 @@ void Emulator::reset(ReloadOption reload) {
cpu.reset();
gpu.reset();
memory.reset();
dsp->reset();
// Reset scheduler and add a VBlank event
scheduler.reset();
@ -139,13 +143,18 @@ void Emulator::pollScheduler() {
ServiceManager& srv = kernel.getServiceManager();
srv.sendGPUInterrupt(GPUInterrupt::VBlank0);
srv.sendGPUInterrupt(GPUInterrupt::VBlank1);
// Queue next VBlank event
scheduler.addEvent(Scheduler::EventType::VBlank, time + CPU::ticksPerSec / 60);
break;
}
case Scheduler::EventType::UpdateTimers: kernel.pollTimers(); break;
case Scheduler::EventType::RunDSP: {
scheduler.addEvent(Scheduler::EventType::RunDSP, time + 16384 * 2);
dsp->runAudioFrame();
break;
}
default: {
Helpers::panic("Scheduler: Unimplemented event type received: %d\n", static_cast<int>(eventType));