Running anything Remedy/Futuremark/MadOnion/UL in 2020

There has always been a tie between Futuremark and the demoscene. It all started with the benchmark Final Reality, released by Remedy Entertainment in 1997.

Remedy Entertainment was a gaming company, founded by demosceners from the legendary Future Crew and other demo groups. Remedy developed an early 3D acceleration benchmark tool for VNU European Labs, known as Final Reality, which showed obvious links to the demoscene, both because of the demo-like design of its parts, the name “Final Reality” being a reference to the Future Crew demo Second Reality, and the fact that a variation of Second Reality’s classic city scene was included in Final Reality.

After this first benchmark, a separate company focused on benchmarking was founded, which was to become Futuremark. After releasing 3DMark99, they changed their name to MadOnion.com. Then after releasing 3DMark2001, they changed back to Futuremark Corporation. Eventually, after being acquired in 2018 by UL, they changed the name to UL Benchmarks.

With every major milestone of PC hardware and software, generally more or less coinciding with new versions of the DirectX API and/or new generations of hardware, they released a new benchmark to take advantage of the new features, and push it to the extremes.

Traditionally, each benchmark also included a demo mode, which added a soundtrack, and generally had extended versions of the test scenes, and a more demo-like storytelling/pacing/syncing to music. As a demoscener, I always loved these demos. They often had beautiful graphics and effects, and great music to boot.

But, can you still run them? UL Benchmarks was nice enough to offer all the legacy benchmarks on their website, complete with registration keys: Futuremark Legacy Benchmarks – UL Benchmarks

Or well, they put all of them up there, except for Final Reality (perhaps because it was released by Remedy, not by Futuremark/MadOnion). But I already linked that one above.

I got all of them to run on my modern system with Windows 10 Pro x64 on it. I’ll give a quick rundown of how I got them running, starting from the newest.

3DMark11, 3DMark Vantage, 3DMark06, 3DMark05 and 3DMark03 all installed and ran out-of-the-box.

3DMark2001SE installed correctly, but the demo would not play. Looking at the error log revealed that it had problems playing back sound (which explains why regular tests would work, they have no sound). But when you select the Compatibility mode for Windows 8, that fixes the sound, and the whole demo runs fine.

3DMark2000 was a bit more difficult. On my laptop it installed correctly, but on my desktop, the installer hung after unpacking. The trick is to go to Task Manager, find the setup.exe process in the Details tab, right-click it and select “Analyze wait chain”. It will tell you what the process is waiting for. In my case it was “nvcontainer.exe”. So I killed all processes by that name, and the setup continued automatically.

Now 3DMark2000 was installed properly, but it still did not work correctly. There is a check in there, to see if you have at least 4MB video memory. Apparently on a modern video card with multiple GBs of memory, the check overflows, and thinks you have less than 4MB. It then shows a popup, and immediately closes after you click on it. So I disassembled the code, found the check, and simply patched it out. Now it works fine.

If you want to patch it yourself, use a hex editor and change the following bytes in 3DMark2000.exe:

Offset 69962h: patch 7Dh to EBh
Offset 69979h: patch 7Dh to EBh

XL-R8R dates from the same era as 3DMark2000, and I ran into the same issue of setup.exe getting stuck, and having to analyze the wait chain to make it continue. It did not appear to have a check for video memory, so it ran fine after installation.

3DMark99Max was more difficult still. The installer is packaged with a 16-bit version of a WinZip self-extractor. You cannot run 16-bit Windows programs on a 64-bit version of Windows. Luckily you can just extract the files with a program like 7-Zip or WinRar, by just right-clicking on 3DMark99Max.exe and selecting the option to extract it to a folder. From there, you can just run setup.exe, and it should install properly.

Like 3DMark2000, there’s also a check in 3DMark99Max that prevents it from running on a modern system. In this case, it tries to check for DirectX 6.1 or higher, and the check somehow mistakenly thinks that the DirectX version is too low on a modern system. Again, a simple case of disassembling, finding the check, and patching it out.

If you want to patch it yourself, use a hex editor and change the following byte in 3dmark.exe:

Offset 562CCh: patch 75h to EBh

Final Reality then, the last one. Like 3DMark99Max, it has a 16-bit installer. However, in this case the trick of extracting it does not help us. You can extract the setup files, but in this case the setup.exe is still 16-bit, so it still cannot run. But not to worry, there are ways around that. Initially I just copied the files from an older installation under a 32-bit Windows XP. But an even better solution is otvdm/winevdm.

In short, x86 CPUs can generally only switch between two modes on-the-fly under Windows. So a 32-bit version of Windows can switch between 32-bit and 16-bit environments, which allows a 32-bit version of Windows to run a 16-bit “NTVDM” (NT Virtual DOS Machine) environment, in which it runs DOS and 16-bit Windows programs. For 64-bit versions of Windows, there’s a similar concept, known as Windows-on-Windows (WOW64). This allows you to run 32-bit Windows programs. The original NTVDM for DOS and Win16 programs is no longer available.

Otvdm works around this by using software emulation for a 16-bit x86 CPU, and then uses part of the Wine codebase to translate the calls from 16-bit to 32-bit. This gives you very similar functionality to the real NTVDM environment on a 32-bit system, and allows you to run DOS and Win16 applications on your 64-bit Windows system, albeit with limited performance, since the CPU emulation is not very fast. Because it’s not a sandbox environment like most emulators, but it actually integrates with the host OS via 32-bit calls.

In our case, we can simply run the Final Reality installer via otvdm. Just download the latest stable release from the otvdm Github page, and extract it to a local folder. Then start odvdmw.exe, and browse to your fr101.exe installer file. It will then install correctly, directly onto the host system.

There appear to be no compatibility problems with this oldest benchmark of them all, funny enough, so that rounds it all up.

Here is a video showing all the 3DMark demos:

And here is the XL-R8R demo:

And finally the Final Reality demo:

This entry was posted in Direct3D, Oldskool/retro programming, Software development and tagged , , , , , , , , , , , , , , , , , , , , , , , , , . Bookmark the permalink.

5 Responses to Running anything Remedy/Futuremark/MadOnion/UL in 2020

  1. nickysn says:

    “In short, x86 CPUs can generally only switch between two modes on-the-fly.”

    This is only partially true. 64-bit x86 CPUs, running a 64-bit operating system can execute 16-bit protected mode programs, which is what’s usually needed for Win16 applications. What’s missing is virtual 8086 mode, which is used for running DOS programs. The decision to drop support for Win16 applications in 64-bit versions of Windows was made by Microsoft, but Wine supports and runs win16 applications just fine in 64-bit linux, without emulating the CPU. There was even a case, where the Linux kernel broke the 16-bit Wine support, and this was reported as bug and fixed:

    https://bugs.winehq.org/show_bug.cgi?id=36664

    In newer versions of Linux, you need to specifically enable this feature, as it is disabled by default, for security reasons (most people don’t need Win16 application support):

    https://wiki.winehq.org/FAQ#16-bit_applications_fail_to_start

  2. Scali says:

    You’re right. I added “under Windows” after that sentence, to clarify.

  3. Klimax says:

    Quick notes: For 3DMark99 setting compatibility mode to Windows 95 will fix it too. 3DMark 2001 freaks out if too much RAM is present, compatibility mode will fix that too (Depending on overflow, compatibility mode is XP SP3 or Windows 98).
    03 and 06 require OpenAL runtime.
    ===
    Since I am already posting comment, anybody got following benchmarks?
    Render Blade / EVA-Bench
    Passmark PerformanceTester 2.0 (pt_v2_0.zip)
    N-Bench 1.0 + 1.2

    All links for them are dead and not even Archive.org is of any help.

    Also most of PowerVR downloads are dead and missing from archive.org – drivers survived but not SDK:
    (oglestrilinear.zip, D3DTools.zip, OGLTools.zip, D3DShell.zip, OGLShell.zip, D3DFire.zip, D3DITC.zip, D3DShadowLand.zip, D3DBlend.zip,
    OGLBlend.zip, D3DScanner.zip, OGLScanner.zip , D3DTutorial.zip, OGLTutorial.zip, D3DLight.zip, D3DLight.zip , D3DNefertitiIsland.zip
    OGLNefertitiIsland.zip, OGLSoftShadow.zip, D3DSoftShadow.zip, D3DMultiTexture.zip, OGLMultitexture.zip, D3DTrilinear.zip, OGLTrilinear.zip
    D3DTubes.zip, D3DFur.zip, D3DShady.zip, D3DMirrorZ.zip, D3DOcean.zip D3DBumpComp.zip D3DCubeMaze.zip D3DMipmap.zip D3DPane.zip D3DMisty.zip D3DCartoonHalo.zip D3DFilmTV.zip D3DDragonFly.zip
    D3DPaperStorm.zip D3DTextureTiling.zip D3DTree.zip D3DBalloon.zip D3DDuck.zip D3DGun.zip D3DHouse.zip D3DSparkle.zip D3DStar.zip D3DBikeFrame.zip D3DMaterials.zip D3DParticles.zip D3DVase.zip
    D3DFableMark.zip D3DFortune.zip KyroToon.zip D3Dmarble.zip D3DNautilus.zip D3DStripsView.zip D3DTextureFormats.zip D3DWheel.zip StillLife.zip)

    Thanks.

    • Scali says:

      Thanks for the info.

      Quick notes: For 3DMark99 setting compatibility mode to Windows 95 will fix it too.

      On my machine (Windows 10 Pro x64 20H2) that doesn’t work for some reason. In Windows 95/98 mode it says “Could not find file 3dmark.ras”.
      In all other compatibility modes, the DX version check fails.

      • Klimax says:

        Weird. Can’t replicate at all (be it 2004 or 20H2 x64 CZE or ENG). The only idea I have, something is mucking with CreateFile/IRP and it doesn’t play well with Compatibility mode.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s