diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index ecab835fd..b7db4c353 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -1251,6 +1251,8 @@ void DivEngine::renderSamplesP() { } void DivEngine::renderSamples() { + sPreview.sample=-1; + sPreview.pos=0; if (jediTable==NULL) { jediTable=new int[16*49]; for (int step=0; step<49; step++) { @@ -1441,7 +1443,9 @@ void DivEngine::playSub(bool preserveDrift) { if (nextTick(preserveDrift)) break; } dispatch->setSkipRegisterWrites(false); - dispatch->forceIns(); + if (goal>0) { + dispatch->forceIns(); + } if (preserveDrift) { clockDrift=prevDrift; } else { diff --git a/src/engine/platform/arcade.cpp b/src/engine/platform/arcade.cpp index c3ad0c7b2..6ecc14c86 100644 --- a/src/engine/platform/arcade.cpp +++ b/src/engine/platform/arcade.cpp @@ -476,6 +476,7 @@ void DivPlatformArcade::setYMFM(bool use) { int DivPlatformArcade::init(DivEngine* p, int channels, int sugRate, bool pal) { parent=p; + skipRegisterWrites=false; for (int i=0; i<13; i++) { isMuted[i]=false; } diff --git a/src/engine/platform/c64.cpp b/src/engine/platform/c64.cpp index 5d83fd743..1c04092b7 100644 --- a/src/engine/platform/c64.cpp +++ b/src/engine/platform/c64.cpp @@ -326,6 +326,7 @@ void DivPlatformC64::setPAL(bool pal) { int DivPlatformC64::init(DivEngine* p, int channels, int sugRate, bool pal) { parent=p; + skipRegisterWrites=false; for (int i=0; i<3; i++) { isMuted[i]=false; } diff --git a/src/engine/platform/dummy.cpp b/src/engine/platform/dummy.cpp index 390363dda..62f4298b9 100644 --- a/src/engine/platform/dummy.cpp +++ b/src/engine/platform/dummy.cpp @@ -74,6 +74,7 @@ void DivPlatformDummy::reset() { int DivPlatformDummy::init(DivEngine* p, int channels, int sugRate, bool pal) { parent=p; + skipRegisterWrites=false; for (int i=0; i<17; i++) { isMuted[i]=false; } diff --git a/src/engine/platform/gb.cpp b/src/engine/platform/gb.cpp index 21e95c6f6..e5c4d4d80 100644 --- a/src/engine/platform/gb.cpp +++ b/src/engine/platform/gb.cpp @@ -317,6 +317,7 @@ int DivPlatformGB::init(DivEngine* p, int channels, int sugRate, bool pal) { isMuted[i]=false; } parent=p; + skipRegisterWrites=false; rate=262144; gb=new GB_gameboy_t; reset(); diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index dd40bfa84..ca647b1f5 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -432,6 +432,7 @@ void DivPlatformGenesis::setPAL(bool pal) { int DivPlatformGenesis::init(DivEngine* p, int channels, int sugRate, bool pal) { parent=p; + skipRegisterWrites=false; for (int i=0; i<10; i++) { isMuted[i]=false; } diff --git a/src/engine/platform/nes.cpp b/src/engine/platform/nes.cpp index 6575bf7b8..f3f81171f 100644 --- a/src/engine/platform/nes.cpp +++ b/src/engine/platform/nes.cpp @@ -327,6 +327,7 @@ void DivPlatformNES::setPAL(bool pal) { int DivPlatformNES::init(DivEngine* p, int channels, int sugRate, bool pal) { parent=p; + skipRegisterWrites=false; for (int i=0; i<5; i++) { isMuted[i]=false; } diff --git a/src/engine/platform/nes.h b/src/engine/platform/nes.h index 6a6fd9778..8809e1d94 100644 --- a/src/engine/platform/nes.h +++ b/src/engine/platform/nes.h @@ -37,7 +37,6 @@ class DivPlatformNES: public DivDispatch { unsigned int dacPos; int dacSample; unsigned char sampleBank; - unsigned char lastPan; float freqBase; diff --git a/src/engine/platform/pce.cpp b/src/engine/platform/pce.cpp index 8ed56b709..90be7e379 100644 --- a/src/engine/platform/pce.cpp +++ b/src/engine/platform/pce.cpp @@ -318,6 +318,7 @@ void DivPlatformPCE::setPAL(bool pal) { int DivPlatformPCE::init(DivEngine* p, int channels, int sugRate, bool pal) { parent=p; + skipRegisterWrites=false; for (int i=0; i<6; i++) { isMuted[i]=false; } diff --git a/src/engine/platform/sms.cpp b/src/engine/platform/sms.cpp index 0f9cedc0a..f62d0eb68 100644 --- a/src/engine/platform/sms.cpp +++ b/src/engine/platform/sms.cpp @@ -187,6 +187,7 @@ void DivPlatformSMS::setPAL(bool pal) { int DivPlatformSMS::init(DivEngine* p, int channels, int sugRate, bool pal) { parent=p; + skipRegisterWrites=false; for (int i=0; i<4; i++) { isMuted[i]=false; } diff --git a/src/engine/platform/ym2610.cpp b/src/engine/platform/ym2610.cpp index 3d90383a8..26e631f63 100644 --- a/src/engine/platform/ym2610.cpp +++ b/src/engine/platform/ym2610.cpp @@ -565,6 +565,7 @@ bool DivPlatformYM2610::keyOffAffectsArp(int ch) { int DivPlatformYM2610::init(DivEngine* p, int channels, int sugRate, bool pal) { parent=p; + skipRegisterWrites=false; for (int i=0; i<13; i++) { isMuted[i]=false; } diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index cfe615a34..1feb9e2ee 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -816,6 +816,7 @@ void DivEngine::nextBuf(float** in, float** out, int inChans, int outChans, unsi } else { temp[2]=s->rendData[sPreview.pos++]; } + if (s->depth==8) temp[2]<<=8; blip_add_delta(bb[2],i,temp[2]-prevSample[2]); prevSample[2]=temp[2]; }