Wow - perfect timing. I must chime in here.
After being away from Lynx emulation and development for about 10 years now, i just came back last week to check what has happened since.
My search for the latest handy-emulator and available patches/fixes just turned up with exactly what was mentioned in the first post - 0.98beta seems to be the last exe-build floating around.
The sources available from sage's github page (handy-win32src-0.95-patched) seem to be the most complete regarding updates and patches:
patches included in "handy-win32src-0.95-patched" (correct me if i'm wrong):
- crashes at startup for cc65.org bugfix (patch available on handy's sourceforge page "patch.diff")
- single point sprite bugfix (fixes Robotron intro, Joust lava, ...)
- everon bugfix (fixes wuerfel.lnx)
- stuttering sound fixed (doublebuffered)
- eeprom support
available patches missing in "handy-win32src-0.95-patched"
- zipped rom filenames containing more than 1 dot (patch available on handy's sourceforge page (system.cpp) - search/replace 2 occurences of strchr with strrchr)
- Gates of Zendocon sound missing (laughing spider)
The missing sound in Gates of Zendocon was already fixed by GadgetUK.
handy0.97 - Gates of Zendocon sound fixed but others broke
handy0.971 - seems to work fine
Maybe @GadgetUK can make the source public or dig his memory what the required code changes were (i know - it was 6 years ago...). Pretty PLEASE?
Also - the stuttering sound fix included in "handy-win32src-0.95-patched" only works partially for me.
Sound is playing nicely on startup. But disabling and re-enabling sound while a game/intro is playing (2x CRTL-S) is a "roll-a-dice" game.
Sometimes the sound is going completely berserk after enabling, sometimes it's fine.
It might be a problem with the read- and writecursors of the soundbuffer.
On sound start the buffer is flushed and the readcursor is set to 0 - doesn't the buffer need to be filled eventually?
I'm by far no expert in directsound but messed around with the code nevertheless. Without digging documentation and debugging i think i have a fix that works for me:
Just change the delay in timeSetEvent from 25 to 50 like this:
DirectSoundPlayer.cpp, line 159:
if ((m_TimerID = timeSetEvent(50, 0, TimerCallBack, (DWORD)this, TIME_PERIODIC)) == NULL) // 50 was 25
Disabling and re-enabling sound now always works on my systems. I guess the new delay gives the buffer some time to fill up...
Maybe if any of the well known atariage members would kindly ask @GadgetUK about the Gates of Zendocon fix (might be more successful than a query from a noob like me),
then hopefully one day all known patches/fixes can be incorporated into a single source repository.