I created this simple patch to my snes9x... now attempting to record this movie, with sound.
The patch will simply disable the feedback from mixer propagating back to APU, acting as if the sound is muted, even when it's not. The sound will probably be wrong somewhere, but it's better than no sound.
--- soundux.cpp 2004-07-10 22:52:38.000000000 +0300
+++ soundux.cpp 2005-02-12 05:06:57.000000000 +0200
@@ -156,6 +156,9 @@
extern "C" void DecodeBlockAsm (int8 *, int16 *, int32 *, int32 *);
extern "C" void DecodeBlockAsm2 (int8 *, int16 *, int32 *, int32 *);
+int FakeMute = 1;
+int DoFakeMute = 0;
+
// F is channel's current frequency and M is the 16-bit modulation waveform
// from the previous channel multiplied by the current envelope volume level.
#define PITCH_MOD(F,M) ((F) * ((((unsigned long) (M)) + 0x800000) >> 16) >> 7)
@@ -174,9 +177,11 @@
{
ch->state = SOUND_SILENT;
ch->mode = MODE_NONE;
+ if(!DoFakeMute) {
APU.DSP [APU_ENDX] |= 1 << i;
APU.DSP [APU_KON] &= ~(1 << i);
APU.DSP [APU_KOFF] &= ~(1 << i);
+ }
APU.KeyedChannels &= ~(1 << i);
}
#ifdef __DJGPP
@@ -185,7 +190,9 @@
void S9xAPUSetEndX (int ch)
{
+ if(!DoFakeMute) {
APU.DSP [APU_ENDX] |= 1 << ch;
+ }
}
#ifdef __DJGPP
END_OF_FUNCTION (S9xAPUSetEndX)
@@ -864,6 +871,8 @@
static int wave[SOUND_BUFFER_SIZE];
int pitch_mod = SoundData.pitch_mod & ~APU.DSP[APU_NON];
+
+ DoFakeMute=FakeMute;
for (uint32 J = 0; J < NUM_CHANNELS; J++)
{
@@ -1148,6 +1157,7 @@
}
stereo_exit: ;
}
+ DoFakeMute=0;
}
#ifdef __DJGPP
@@ -1160,6 +1170,8 @@
int pitch_mod = SoundData.pitch_mod & (~APU.DSP[APU_NON]);
+ DoFakeMute=FakeMute;
+
for (uint32 J = 0; J < NUM_CHANNELS; J++)
{
Channel *ch = &SoundData.channels[J];
@@ -1433,6 +1445,7 @@
}
mono_exit: ;
}
+ DoFakeMute=0;
}
#ifdef __DJGPP
END_OF_FUNCTION(MixMono);
Edit: Casting my Yes vote for what it matters.
I can't know whether this movie is perfect or optimal, but it indeed is entertaining - in completely different way than, say, Castlevania.