From 42367a5601c6832bb304a75e35b81dd63d3dc1f7 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 22 Dec 2022 19:37:10 -0500 Subject: [PATCH] POKEY: optimize ASAP core a bit --- src/engine/platform/pokey.cpp | 29 ++++++++++++++++++----------- src/engine/platform/pokey.h | 2 +- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/engine/platform/pokey.cpp b/src/engine/platform/pokey.cpp index e8892b1f..bb9a0a7a 100644 --- a/src/engine/platform/pokey.cpp +++ b/src/engine/platform/pokey.cpp @@ -70,9 +70,9 @@ void DivPlatformPOKEY::acquire(short* bufL, short* bufR, size_t start, size_t le } else { acquireMZ(bufL, start, len); } -} - -void DivPlatformPOKEY::acquireMZ(short* buf, size_t start, size_t len) { +} + +void DivPlatformPOKEY::acquireMZ(short* buf, size_t start, size_t len) { for (size_t h=start; hdata[oscBuf[3]->needle++]=pokey.outvol_3<<11; } } -} - -void DivPlatformPOKEY::acquireASAP(short* buf, size_t start, size_t len) { +} + +void DivPlatformPOKEY::acquireASAP(short* buf, size_t start, size_t len) { while (!writes.empty()) { QueuedWrite w=writes.front(); altASAP->write(w.addr, w.val); @@ -454,7 +454,10 @@ void DivPlatformPOKEY::setFlags(const DivConfig& flags) { } if (useAltASAP) { - altASAP=std::make_unique(chipClock, chipClock); + if (altASAP) { + delete altASAP; + } + altASAP=new AltASAP::Pokey(chipClock, chipClock); } } @@ -471,6 +474,7 @@ int DivPlatformPOKEY::init(DivEngine* p, int channels, int sugRate, const DivCon dumpWrites=false; skipRegisterWrites=false; oscBufDelay=0; + altASAP=NULL; for (int i=0; i<4; i++) { isMuted[i]=false; oscBuf[i]=new DivDispatchOscBuffer; @@ -489,10 +493,13 @@ void DivPlatformPOKEY::quit() { for (int i=0; i<4; i++) { delete oscBuf[i]; } -} - -void DivPlatformPOKEY::setAltASAP(bool value) { - useAltASAP=value; + if (altASAP) { + delete altASAP; + } +} + +void DivPlatformPOKEY::setAltASAP(bool value) { + useAltASAP=value; } DivPlatformPOKEY::~DivPlatformPOKEY() { diff --git a/src/engine/platform/pokey.h b/src/engine/platform/pokey.h index a326bb37..f242ae7b 100644 --- a/src/engine/platform/pokey.h +++ b/src/engine/platform/pokey.h @@ -52,7 +52,7 @@ class DivPlatformPOKEY: public DivDispatch { bool audctlChanged; unsigned char oscBufDelay; PokeyState pokey; - std::unique_ptr altASAP; + AltASAP::Pokey* altASAP; bool useAltASAP; unsigned char regPool[16]; friend void putDispatchChip(void*,int);