Has this been the case for you?
Also, 8088mph is super cool; great job on it!
My "cooperative threading" consists of just having a "wait(n)" function which is called from the CPU Execution Unit emulator to emulate everything else for n cycles (i.e. the CPU Bus Interface Unit, the bus itself and everything else connected to it including the DMA controller and interrupt controller). That wait() function is the major bottleneck according to profiling, so if I modify it to do as little as possible (most of the time do very little other than increment a counter and compare to the top item in a priority queue) that would probably help a lot.
It’s a cycle-counting effect, as there is simply no time to monitor for horizontal retrace. To ensure the cycle counting was consistent, several things were done including changing the system default DRAM refresh from it’s default interval of 18 to 19, to get the DRAM refresh periods to line up with CRTC accesses.
(previous HN discussion: https://news.ycombinator.com/item?id=9338944)
It was pretty cool seeing it run. That PC was what I used from 1987-1993 and it was mostly obsolete during that time but I tried to get everything I could out of it. There was nothing that approached what this demo was able to do graphically. (There were a lot of cool music programs even for the PC speaker back then though.) Although, I get a memory parity error partway through the demo because I don't have the full 640k due to some bad memory chips on the memory expansion card.
It helps that they designed it for composite output, since I no longer have a CGA monitor, but you can still hook it up to TVs.
I don't have a CGA but some ati clone (forgot name, it can emulate a bunch of modes including hercules), so I couldn't get colors to work in their new 1k mode. The color burst was either not recognized at all or the picture wasn't stable. But that might have been an issue with the modern TV, or both.
Most effects worked really well with that card surprisingly. Kefrens bars started halfway through the screen for some reason but otherwise were fine too.
This demo has various effects that depend on the exact speed of the CPU and hardware. No PC emulator is anywhere near that accurate, leading to effects not working correctly, or just hanging altogether (eg the end-tune depends on instructions being in the prefetch-buffer at a specific time).
Another issue was the 1k colour effect, which exploits the way the NTSC signal is generated. Most emulators didn't emulate NTSC composite very accurately (just treating it as a 16-colour mode).
The timing in this demo is so critical, that even most clones with an 8088 at 4.77 MHz and a CGA-compatible clone card do not play the demo correctly.
And an interesting stack exchange question:
Edit: very interestingly, if I copy/paste your exact question on Google, it gives me the Ars link as a first result (in incognito mode). I don't think my comment had any influence (too short time to update the index), Google is truly magical.
About the sound, I remember playing an mp3 through PC speaker on a 386 computer, as well as having a special config for wolf3D that made it play its soundblaster sound effects through the PC speaker, so its single voice square wave can produce arbitrary sound.
Good ending music nonetheless!