diff --git a/src/engine/platform/abstract.cpp b/src/engine/platform/abstract.cpp index 214157258..bd3efa72a 100644 --- a/src/engine/platform/abstract.cpp +++ b/src/engine/platform/abstract.cpp @@ -18,6 +18,7 @@ */ #include "../dispatch.h" +#include "../../ta-log.h" void DivDispatch::acquire(short** buf, size_t len) { } @@ -121,7 +122,8 @@ void DivDispatch::notifyWaveChange(int ins) { } void DivDispatch::notifyInsDeletion(void* ins) { - + logE("notifyInsDeletion NOT implemented!"); + abort(); } void DivDispatch::notifyPlaybackStop() { diff --git a/src/engine/platform/arcade.cpp b/src/engine/platform/arcade.cpp index 1984e5a18..7251ef90e 100644 --- a/src/engine/platform/arcade.cpp +++ b/src/engine/platform/arcade.cpp @@ -800,6 +800,12 @@ void DivPlatformArcade::notifyInsChange(int ins) { } } +void DivPlatformArcade::notifyInsDeletion(void* ins) { + for (int i=0; i<8; i++) { + chan[i].std.notifyInsDeletion((DivInstrument*)ins); + } +} + void* DivPlatformArcade::getChanState(int ch) { return &chan[ch]; } diff --git a/src/engine/platform/arcade.h b/src/engine/platform/arcade.h index 0bbd9b2cb..45c2e6b54 100644 --- a/src/engine/platform/arcade.h +++ b/src/engine/platform/arcade.h @@ -76,6 +76,7 @@ class DivPlatformArcade: public DivPlatformOPM { void muteChannel(int ch, bool mute); DivMacroInt* getChanMacroInt(int ch); void notifyInsChange(int ins); + void notifyInsDeletion(void* ins); void setFlags(const DivConfig& flags); int getOutputCount(); void setYMFM(bool use); diff --git a/src/engine/platform/dummy.cpp b/src/engine/platform/dummy.cpp index 28cb5d40e..42ce1ad5e 100644 --- a/src/engine/platform/dummy.cpp +++ b/src/engine/platform/dummy.cpp @@ -131,6 +131,10 @@ int DivPlatformDummy::dispatch(DivCommand c) { return 1; } +void DivPlatformDummy::notifyInsDeletion(void* ins) { + // nothing +} + void DivPlatformDummy::reset() { for (int i=0; i8)?12:0; } diff --git a/src/engine/platform/genesisext.h b/src/engine/platform/genesisext.h index 304f609fe..67955adcf 100644 --- a/src/engine/platform/genesisext.h +++ b/src/engine/platform/genesisext.h @@ -41,6 +41,7 @@ class DivPlatformGenesisExt: public DivPlatformGenesis { bool keyOffAffectsArp(int ch); bool keyOffAffectsPorta(int ch); void notifyInsChange(int ins); + void notifyInsDeletion(void* ins); int getPortaFloor(int ch); void setCSMChannel(unsigned char ch); int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); diff --git a/src/engine/platform/msm6258.cpp b/src/engine/platform/msm6258.cpp index af1472af2..7814d23e8 100644 --- a/src/engine/platform/msm6258.cpp +++ b/src/engine/platform/msm6258.cpp @@ -353,6 +353,9 @@ void DivPlatformMSM6258::notifyInsChange(int ins) { } void DivPlatformMSM6258::notifyInsDeletion(void* ins) { + for (int i=0; i<1; i++) { + chan[i].std.notifyInsDeletion((DivInstrument*)ins); + } } void DivPlatformMSM6258::setFlags(const DivConfig& flags) { diff --git a/src/engine/platform/msm6295.cpp b/src/engine/platform/msm6295.cpp index bc41091c0..608429002 100644 --- a/src/engine/platform/msm6295.cpp +++ b/src/engine/platform/msm6295.cpp @@ -326,6 +326,9 @@ void DivPlatformMSM6295::notifyInsChange(int ins) { } void DivPlatformMSM6295::notifyInsDeletion(void* ins) { + for (int i=0; i<4; i++) { + chan[i].std.notifyInsDeletion((DivInstrument*)ins); + } } const void* DivPlatformMSM6295::getSampleMem(int index) { diff --git a/src/engine/platform/opl.cpp b/src/engine/platform/opl.cpp index 2c6c15903..855c56e16 100644 --- a/src/engine/platform/opl.cpp +++ b/src/engine/platform/opl.cpp @@ -1640,6 +1640,9 @@ void DivPlatformOPL::notifyInsChange(int ins) { } void DivPlatformOPL::notifyInsDeletion(void* ins) { + for (int i=0; inotifyInsDeletion(ins); + for (int i=0; i<3; i++) { + chan[i].std.notifyInsDeletion((DivInstrument*)ins); + } } void DivPlatformYM2203::setSkipRegisterWrites(bool value) { diff --git a/src/engine/platform/ym2203.h b/src/engine/platform/ym2203.h index 2f4da5b49..8b8c0d6be 100644 --- a/src/engine/platform/ym2203.h +++ b/src/engine/platform/ym2203.h @@ -73,7 +73,7 @@ class DivPlatformYM2203: public DivPlatformOPN { int getOutputCount(); bool keyOffAffectsArp(int ch); void notifyInsChange(int ins); - void notifyInsDeletion(void* ins); + virtual void notifyInsDeletion(void* ins); void setSkipRegisterWrites(bool val); void poke(unsigned int addr, unsigned short val); void poke(std::vector& wlist); diff --git a/src/engine/platform/ym2203ext.cpp b/src/engine/platform/ym2203ext.cpp index 701ae9e5e..99d533575 100644 --- a/src/engine/platform/ym2203ext.cpp +++ b/src/engine/platform/ym2203ext.cpp @@ -641,6 +641,13 @@ void DivPlatformYM2203Ext::notifyInsChange(int ins) { } } +void DivPlatformYM2203Ext::notifyInsDeletion(void* ins) { + DivPlatformYM2203::notifyInsDeletion(ins); + for (int i=0; i<4; i++) { + opChan[i].std.notifyInsDeletion((DivInstrument*)ins); + } +} + int DivPlatformYM2203Ext::init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags) { DivPlatformYM2203::init(parent,channels,sugRate,flags); for (int i=0; i<4; i++) { diff --git a/src/engine/platform/ym2203ext.h b/src/engine/platform/ym2203ext.h index 14535e2d1..6d8bb0baa 100644 --- a/src/engine/platform/ym2203ext.h +++ b/src/engine/platform/ym2203ext.h @@ -39,6 +39,7 @@ class DivPlatformYM2203Ext: public DivPlatformYM2203 { void muteChannel(int ch, bool mute); bool keyOffAffectsArp(int ch); void notifyInsChange(int ins); + void notifyInsDeletion(void* ins); int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); void quit(); ~DivPlatformYM2203Ext(); diff --git a/src/engine/platform/ym2608.cpp b/src/engine/platform/ym2608.cpp index 152002321..08969eea6 100644 --- a/src/engine/platform/ym2608.cpp +++ b/src/engine/platform/ym2608.cpp @@ -1458,6 +1458,12 @@ void DivPlatformYM2608::notifyInsChange(int ins) { void DivPlatformYM2608::notifyInsDeletion(void* ins) { ay->notifyInsDeletion(ins); + for (int i=0; i& wlist); diff --git a/src/engine/platform/ym2608ext.cpp b/src/engine/platform/ym2608ext.cpp index 0a6abe7a5..e8e35cdcc 100644 --- a/src/engine/platform/ym2608ext.cpp +++ b/src/engine/platform/ym2608ext.cpp @@ -679,6 +679,13 @@ void DivPlatformYM2608Ext::notifyInsChange(int ins) { } } +void DivPlatformYM2608Ext::notifyInsDeletion(void* ins) { + DivPlatformYM2608::notifyInsDeletion(ins); + for (int i=0; i<4; i++) { + opChan[i].std.notifyInsDeletion((DivInstrument*)ins); + } +} + int DivPlatformYM2608Ext::init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags) { DivPlatformYM2608::init(parent,channels,sugRate,flags); for (int i=0; i<4; i++) { diff --git a/src/engine/platform/ym2608ext.h b/src/engine/platform/ym2608ext.h index 01afb3617..e99518fbe 100644 --- a/src/engine/platform/ym2608ext.h +++ b/src/engine/platform/ym2608ext.h @@ -39,6 +39,7 @@ class DivPlatformYM2608Ext: public DivPlatformYM2608 { void muteChannel(int ch, bool mute); bool keyOffAffectsArp(int ch); void notifyInsChange(int ins); + void notifyInsDeletion(void* ins); int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); void quit(); ~DivPlatformYM2608Ext(); diff --git a/src/engine/platform/ym2610.cpp b/src/engine/platform/ym2610.cpp index 48fa4ca08..5c62a491c 100644 --- a/src/engine/platform/ym2610.cpp +++ b/src/engine/platform/ym2610.cpp @@ -1406,6 +1406,12 @@ void DivPlatformYM2610::notifyInsChange(int ins) { void DivPlatformYM2610::notifyInsDeletion(void* ins) { ay->notifyInsDeletion(ins); + for (int i=0; i& wlist); diff --git a/src/engine/platform/ym2610b.cpp b/src/engine/platform/ym2610b.cpp index 875383e7d..a8f2329e4 100644 --- a/src/engine/platform/ym2610b.cpp +++ b/src/engine/platform/ym2610b.cpp @@ -1477,6 +1477,12 @@ void DivPlatformYM2610B::notifyInsChange(int ins) { void DivPlatformYM2610B::notifyInsDeletion(void* ins) { ay->notifyInsDeletion(ins); + for (int i=0; i& wlist); diff --git a/src/engine/platform/ym2610bext.cpp b/src/engine/platform/ym2610bext.cpp index c8d0b6454..28563b20e 100644 --- a/src/engine/platform/ym2610bext.cpp +++ b/src/engine/platform/ym2610bext.cpp @@ -670,6 +670,13 @@ void DivPlatformYM2610BExt::notifyInsChange(int ins) { } } +void DivPlatformYM2610BExt::notifyInsDeletion(void* ins) { + DivPlatformYM2610B::notifyInsDeletion(ins); + for (int i=0; i<4; i++) { + opChan[i].std.notifyInsDeletion((DivInstrument*)ins); + } +} + int DivPlatformYM2610BExt::init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags) { DivPlatformYM2610B::init(parent,channels,sugRate,flags); for (int i=0; i<4; i++) { diff --git a/src/engine/platform/ym2610bext.h b/src/engine/platform/ym2610bext.h index c77649597..50bd5badf 100644 --- a/src/engine/platform/ym2610bext.h +++ b/src/engine/platform/ym2610bext.h @@ -39,6 +39,7 @@ class DivPlatformYM2610BExt: public DivPlatformYM2610B { void muteChannel(int ch, bool mute); bool keyOffAffectsArp(int ch); void notifyInsChange(int ins); + void notifyInsDeletion(void* ins); int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); void quit(); ~DivPlatformYM2610BExt(); diff --git a/src/engine/platform/ym2610ext.cpp b/src/engine/platform/ym2610ext.cpp index 54bbd2b7e..03442dc5b 100644 --- a/src/engine/platform/ym2610ext.cpp +++ b/src/engine/platform/ym2610ext.cpp @@ -670,6 +670,13 @@ void DivPlatformYM2610Ext::notifyInsChange(int ins) { } } +void DivPlatformYM2610Ext::notifyInsDeletion(void* ins) { + DivPlatformYM2610::notifyInsDeletion(ins); + for (int i=0; i<4; i++) { + opChan[i].std.notifyInsDeletion((DivInstrument*)ins); + } +} + int DivPlatformYM2610Ext::init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags) { DivPlatformYM2610::init(parent,channels,sugRate,flags); for (int i=0; i<4; i++) { diff --git a/src/engine/platform/ym2610ext.h b/src/engine/platform/ym2610ext.h index 5e78c53f4..e41033384 100644 --- a/src/engine/platform/ym2610ext.h +++ b/src/engine/platform/ym2610ext.h @@ -39,6 +39,7 @@ class DivPlatformYM2610Ext: public DivPlatformYM2610 { void muteChannel(int ch, bool mute); bool keyOffAffectsArp(int ch); void notifyInsChange(int ins); + void notifyInsDeletion(void* ins); int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags); void quit(); ~DivPlatformYM2610Ext();