POKEY: optimize ASAP core a bit

This commit is contained in:
tildearrow 2022-12-22 19:37:10 -05:00
parent 05d389adac
commit 42367a5601
2 changed files with 19 additions and 12 deletions

View File

@ -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; h<start+len; h++) {
while (!writes.empty()) {
QueuedWrite w=writes.front();
@ -91,9 +91,9 @@ void DivPlatformPOKEY::acquireMZ(short* buf, size_t start, size_t len) {
oscBuf[3]->data[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<AltASAP::Pokey>(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() {

View File

@ -52,7 +52,7 @@ class DivPlatformPOKEY: public DivDispatch {
bool audctlChanged;
unsigned char oscBufDelay;
PokeyState pokey;
std::unique_ptr<AltASAP::Pokey> altASAP;
AltASAP::Pokey* altASAP;
bool useAltASAP;
unsigned char regPool[16];
friend void putDispatchChip(void*,int);