diff --git a/src/engine/platform/ay.cpp b/src/engine/platform/ay.cpp index 328f5de48..f4dc46623 100644 --- a/src/engine/platform/ay.cpp +++ b/src/engine/platform/ay.cpp @@ -7,7 +7,7 @@ #define rWrite(a,v) if (!skipRegisterWrites) {pendingWrites[a]=v;} #define immWrite(a,v) if (!skipRegisterWrites) {writes.emplace(a,v);} -#define PSG_FREQ_BASE 7640.0f +#define PSG_FREQ_BASE 6848.0f void DivPlatformAY8910::acquire(short* bufL, short* bufR, size_t start, size_t len) { if (ayBufLenwrite(0x0+((w.addr>>8)<<1),w.addr); - fm->write(0x1+((w.addr>>8)<<1),w.val); - writes.pop(); - delay=4; - } - } - - fm->generate(&fmout); - - os[0]=fmout.data[0]+(fmout.data[2]>>1); - if (os[0]<-32768) os[0]=-32768; - if (os[0]>32767) os[0]=32767; - - os[1]=fmout.data[1]+(fmout.data[2]>>1); - if (os[1]<-32768) os[1]=-32768; - if (os[1]>32767) os[1]=32767; - - bufL[h]=os[0]; - bufR[h]=os[1]; - }*/ } void DivPlatformAY8910::tick() { @@ -337,17 +310,21 @@ void DivPlatformAY8910::notifyInsDeletion(void* ins) { } } +void DivPlatformAY8910::setPAL(bool pal) { + if (pal) { + rate=221681; + } else { + rate=223722; + } +} + int DivPlatformAY8910::init(DivEngine* p, int channels, int sugRate, bool pal) { parent=p; skipRegisterWrites=false; for (int i=0; i<3; i++) { isMuted[i]=false; } - if (pal) { - rate=250000; - } else { - rate=250000; - } + setPAL(pal); ay=new ay8910_device(rate); ay->set_psg_type(ay8910_device::PSG_TYPE_AY); ay->device_start(); diff --git a/src/engine/platform/ay.h b/src/engine/platform/ay.h index e240c29c5..f803c76b9 100644 --- a/src/engine/platform/ay.h +++ b/src/engine/platform/ay.h @@ -57,6 +57,7 @@ class DivPlatformAY8910: public DivDispatch { void forceIns(); void tick(); void muteChannel(int ch, bool mute); + void setPAL(bool pal); bool isStereo(); bool keyOffAffectsArp(int ch); void notifyInsDeletion(void* ins); diff --git a/src/engine/platform/ay8930.cpp b/src/engine/platform/ay8930.cpp index 6a974d91a..4579c3ecb 100644 --- a/src/engine/platform/ay8930.cpp +++ b/src/engine/platform/ay8930.cpp @@ -7,7 +7,7 @@ #define rWrite(a,v) if (!skipRegisterWrites) {pendingWrites[a]=v;} #define immWrite(a,v) if (!skipRegisterWrites) {writes.emplace(a,v);} -#define PSG_FREQ_BASE 7640.0f +#define PSG_FREQ_BASE 6848.0f void DivPlatformAY8930::acquire(short* bufL, short* bufR, size_t start, size_t len) { if (ayBufLendevice_start(); ayBufLen=65536; diff --git a/src/engine/platform/ay8930.h b/src/engine/platform/ay8930.h index 1220b2cd0..90226f234 100644 --- a/src/engine/platform/ay8930.h +++ b/src/engine/platform/ay8930.h @@ -58,6 +58,7 @@ class DivPlatformAY8930: public DivDispatch { void forceIns(); void tick(); void muteChannel(int ch, bool mute); + void setPAL(bool pal); bool isStereo(); bool keyOffAffectsArp(int ch); void notifyInsDeletion(void* ins);