POKEY: optimize ASAP core a bit
This commit is contained in:
parent
05d389adac
commit
42367a5601
|
@ -70,9 +70,9 @@ void DivPlatformPOKEY::acquire(short* bufL, short* bufR, size_t start, size_t le
|
||||||
} else {
|
} else {
|
||||||
acquireMZ(bufL, start, len);
|
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++) {
|
for (size_t h=start; h<start+len; h++) {
|
||||||
while (!writes.empty()) {
|
while (!writes.empty()) {
|
||||||
QueuedWrite w=writes.front();
|
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;
|
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()) {
|
while (!writes.empty()) {
|
||||||
QueuedWrite w=writes.front();
|
QueuedWrite w=writes.front();
|
||||||
altASAP->write(w.addr, w.val);
|
altASAP->write(w.addr, w.val);
|
||||||
|
@ -454,7 +454,10 @@ void DivPlatformPOKEY::setFlags(const DivConfig& flags) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (useAltASAP) {
|
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;
|
dumpWrites=false;
|
||||||
skipRegisterWrites=false;
|
skipRegisterWrites=false;
|
||||||
oscBufDelay=0;
|
oscBufDelay=0;
|
||||||
|
altASAP=NULL;
|
||||||
for (int i=0; i<4; i++) {
|
for (int i=0; i<4; i++) {
|
||||||
isMuted[i]=false;
|
isMuted[i]=false;
|
||||||
oscBuf[i]=new DivDispatchOscBuffer;
|
oscBuf[i]=new DivDispatchOscBuffer;
|
||||||
|
@ -489,10 +493,13 @@ void DivPlatformPOKEY::quit() {
|
||||||
for (int i=0; i<4; i++) {
|
for (int i=0; i<4; i++) {
|
||||||
delete oscBuf[i];
|
delete oscBuf[i];
|
||||||
}
|
}
|
||||||
}
|
if (altASAP) {
|
||||||
|
delete altASAP;
|
||||||
void DivPlatformPOKEY::setAltASAP(bool value) {
|
}
|
||||||
useAltASAP=value;
|
}
|
||||||
|
|
||||||
|
void DivPlatformPOKEY::setAltASAP(bool value) {
|
||||||
|
useAltASAP=value;
|
||||||
}
|
}
|
||||||
|
|
||||||
DivPlatformPOKEY::~DivPlatformPOKEY() {
|
DivPlatformPOKEY::~DivPlatformPOKEY() {
|
||||||
|
|
|
@ -52,7 +52,7 @@ class DivPlatformPOKEY: public DivDispatch {
|
||||||
bool audctlChanged;
|
bool audctlChanged;
|
||||||
unsigned char oscBufDelay;
|
unsigned char oscBufDelay;
|
||||||
PokeyState pokey;
|
PokeyState pokey;
|
||||||
std::unique_ptr<AltASAP::Pokey> altASAP;
|
AltASAP::Pokey* altASAP;
|
||||||
bool useAltASAP;
|
bool useAltASAP;
|
||||||
unsigned char regPool[16];
|
unsigned char regPool[16];
|
||||||
friend void putDispatchChip(void*,int);
|
friend void putDispatchChip(void*,int);
|
||||||
|
|
Loading…
Reference in New Issue