Did you know this site is now 7 years old? Time sure flies. GDEMU itself is older yet by about 2 years, the first version that I’ve made was based on Altera Cyclone II dev kit and mostly worked but had some timing issues. Initially I had no serious intentions of selling it – though a year later I figured maybe a small self-contained PCB would sell two dozen or so units, and would help me raise some money for other projects. Little did I know how it’s going to snowball. Well, at least I can say the project goal was achieved – even if I don’t like how ODEs became the new modchips and everybody expects to get one for a couple bucks to play “free games” (and I’m the bad guy for not mass-producing ODEs to flood the market, forcing low prices).
Anyway, obviously the last post was an April Fools’ effort. The photo was of a dirty 5.25″ double-density TEAC floppy drive, I deal with those only in personal projects and that particular one is now clean and working. Testing it revealed issues with two of my 386 mobos – the one on which I’ve replaced a broken crystal resonator with a tad bit faster device, and is now overclocked, which is nice but also screws up system timers. I need to undo this, the extra 1.x MHz is not worth these issues. Another mobo, and this one was badly corroded from NiCd battery spill, is now acting up – randomly hangs on DMA transfers (so mostly in games that use SoundBlaster voice playback and while using floppy drives). I suspect there is a corroded via under the 82C206 chip but there is no guarantee the mobo will survive desoldering it – there’s already pad damage and wires around to fix affected traces. This mobo was, until now, my “daily driver” for testing 386/486 code but I think I will replace it with a P200 MMX and maybe attempt the fix later. It served its purpose and I have a few other mobos for quick code testing if I need a true 386 system for that.
And speaking of testing 386/486 code, I have collected some performance data from various FM Towns machines using my own benchmark program. Frankly there’s tons of that data but in order to show some of it in a simple, easy to digest way I’ve made one chart that I think best reflects the actual overall CPU performance.
First, let me introduce the machines present on the chart:
- A – gen1 (MODEL 1), 16MHz 386DX
- B – gen2 (2F?), ~18MHz 486DLC
- B1 – B with cache enabled
- C – gen3 (40H), 16MHz 486SXL
- C1 – C with cache enabled
- C2 – C with cache enabled, clock x2
- C3 – C without cache, clock x2
- D – gen4 (CX), 16MHz 386DX
- E – gen4 (CX), 16MHz 486SXL
- E1 – E with cache enabled
- E2 – E with cache enabled, clock x2
- F – gen2 (2F?), 16MHz 486DLC (*)
- F1 – F with cache enabled (*)
- G – gen2 (2H), 16MHz 486SXL
- G1 – G with cache enabled
- G2 – G with cache enabled, clock x2
- G3 – G without cache, clock x2
- H – Marty, 16MHz 486SXLC
- H1 – H with cache enabled
- X – Fresh-ET, 66MHz 486DX2
(*) The F machine used a slightly different version of the benchmark executable and 386/486 CPUs are really sensitive to code position, so over many loops the result can be a few % off (faster or slower, depending how the code changed).
I’ve also added some colors to try and make this more readable. Black is 100% standard machines, blue is 386 CPU replaced with 486 DLC class. Orange is same as blue but with CPU clock resonator replaced as well (there are some serious limitations to this technique and even small overclock can cause issues in these systems). Violet is SXL/SXLC CPU with clock doubler enabled.
So, what can we see here? First of all, the black bars – the gen1 and gen4 machines have identical performance in default settings. The Fresh-ET is a bit faster in the compatibility mode but not by much – it mostly equals a CPU swap to a 486DLC (which all of the towers can do, except generations 3 and 4 require desoldering the old one first). I guess it’s not really possible to perfectly match a 386 performance with a 486 chip on a twice faster system bus. That being said, based on my tests with DLC chips, this is not enough to make a difference if the game doesn’t support FAST mode.
The “fast” in the chart is either FAST mode (for machines that support it) or reduced RAM wait states (as much as it was possible). This offers a decent speedup, in general reducing WS on 386 tower machines gives comparable results to replacing the CPU with 486 DLC – though obviously if you can replace the CPU and then also reduce WS, it’s even better. But if you want to keep your machine 100% original then WS reduction (with ODE) is probably the way to go if you need some extra performance. Even gen1 tower, which can only reduce the WS by 1, shows some speedup.
A 486 DLC with WS reduction or FAST mode can cut the benchmark time almost in half, and keep in mind this offers pretty much perfect game compatibility. You can get even better results by enabling the CPU cache (also via ODE) but that will break some games – some will work fine, some might have audio or video glitches, or even unresponsive controls. It looks nice on the chart but in reality can be quite a lot of trouble. This also goes for any overclocking, as mentioned above. And then there is clock doubling on SXL chips, this has some effect even with no cache and just WS reduction – which is nice, considering the issues with cache, but without having cache enabled you gain maybe a few extra % and that’s it. So it’s not really worth paying extra for a 486 SXL over DLC, unless the price is similar.
I didn’t test x2 clock on Marty because it breaks a lot of things for some reason (tower models don’t suffer from these issues). For example it can completly screw up mouse emulation on gamepad, something that Marty does by default via its BIOS. Not sure about other 386SX based systems, maybe UG series would benefit more thanks to having a native 20MHz clock in FAST mode. Then there is the proper x2 clock doubler in Fresh-ET, with built-in cache coherency protocols, burst mode and faster system bus. A true DX2 class CPU is more than twice faster than SXL and has none of the issues – so if you really need a fast Towns machine for some reason, get a late Fresh (or at least a true 486 desktop).
To sum this up, with Towns the 486 is faster than 386 but only in FAST mode (and most games don’t use it). Even older machines can be “tuned up”, either by swapping the CPU or forcing FAST/WS reduction via ODE. Or both. This is often enough to make Street Fighter 2 playable without major slowdowns for example.