January 6th, 2022

Filling in some gaps in the story of Space Cadet Pinball on 64-bit Windows

Space Cadet Pinball has a special place in the hearts of many Windows enthusiasts. A customer used their support contract to ask how to change among the three levels of play in Space Cadet Pinball. My proudest achievement of Windows XP was fixing the game so it didn’t consume 100% CPU. People keep asking if it can be brought back.

One point of contention is over my claim that I removed Pinball from Windows because I couldn’t get the 64-bit version to work. Retrocomputing enthusiast NCommander even undertook a Zapruder-level analysis of all of the 64-bit versions of Windows he could find to prove or disprove my story.

I was amazed at the level of thoroughness (and the fortitude it required to get those Itanium systems up and running, much less debug them), but there’s one version of 64-bit Windows that NCommander didn’t try out, and that’s the one that’s relevant to the story.

When the 64-bit Windows project started, there was no Itanium hardware yet. The only way you could run any Itanium code was to run it in a simulator. Booting Windows on an Itanium simulator took forever. Clearly not the development environment you wanted when porting millions of lines of code.

On the other hand, the Windows team did have access to a lot of copies of another 64-bit processor: The Alpha AXP.

In 1999, Compaq announced that it would no longer support Windows on the Alpha AXP, which left a lot of Windows team members with cumbersome paperweights on their desks.

Let’s see what we’ve got here.

  • A lot of Alpha AXP machines sitting around with nothing to do.
  • A bunch of developers who have experience with the Alpha AXP.
  • A 32-bit version of Windows that runs on the Alpha AXP.
  • No Itanium hardware on the immediate horizon.
  • A ticking clock.

The Alpha AXP is internally a 64-bit processor. It’s just that 32-bit Windows used only the 32-bit subset.

Solution: Port the Alpha AXP version of 32-bit Windows to 64-bit Windows.

Now, 64-bit Windows on the Alpha AXP would never ship. But the Alpha AXP did have the advantage of existing in physical form, so the system could finish booting before the heat death of the universe. The assumption is that most of the effort in porting Windows to the Itanium is in the 32-bit to 64-bit transition, and not in dealing with quirks of the specific 64-bit processor you are porting to.

The assumption was somewhat validated by experience: The 32-bit Windows code base had been ported to many 32-bit processors, with relatively few architecture-specific issues. Once you got a 64-bit version of Windows working for the Alpha AXP, it should be a comparatively small amount of additional work to port it to Itanium. The hard part was going from 32-bit to 64-bit.

The team set to work, and we had 64-bit Windows running on physical Alpha AXP hardware long before we had any physical Itanium hardware. I could test my 64-bit port on a physical Alpha AXP system to validate that it was successful. And that’s the system that had the broken collision detector.

NCommander did find a collision detection bug on the Itanium, although that bug was nowhere as severe as the one that existed on the Alpha AXP. My guess is that it had to do with the default rounding mode established by the C runtime library.

My theory as to what happened is that some time after I removed Pinball from the product, the C runtime team realized that they had a compatibility bug in the way they set the default rounding mode, and they fixed it. Or maybe there was a compiler bug, and the compiler team fixed that. Whatever the problem was, somebody fixed it, and then they went back and re-tested Pinball with this fix, and everything worked great, so they put Pinball back.

I’m just guessing about what happened afterward because nobody informed me that they had gotten Pinball working and added it back. I just assumed that it was gone forever.

Topics
History

Author

Raymond has been involved in the evolution of Windows for more than 30 years. In 2003, he began a Web site known as The Old New Thing which has grown in popularity far beyond his wildest imagination, a development which still gives him the heebie-jeebies. The Web site spawned a book, coincidentally also titled The Old New Thing (Addison Wesley 2007). He occasionally appears on the Windows Dev Docs Twitter account to tell stories which convey no useful information.

17 comments

Discussion is closed. Login to edit/delete existing comments.

  • Marcus Johnson · Edited

    "Sadly, the license agreement does not permit releasing the game as an independent entity. The agreement was for including Space Cadet Pinball in Windows 95, with options to include it in the Microsoft Plus! pack for Windows 95, as well as extending the distribution rights to successor products of Windows and the Plus! pack.Your 2018 post about Pinball"

    The solution is obvious, release the Plus! pack on the Windows Store including a new, 64 bit version...

    Read more
    • Paul Sellers

      Wouldn’t even have to be the old Plus! pack if it’s allowed in successors.

  • Jeffrey4 Home

    Raymond,

    I noticed that, at least for the past few weeks, about half of the DevBlogs are your blogs. If you remembered, I notified you a few months ago that one of your blog has nothing to do with development. You said it was some kind of routing error that make the blog appear in DevBlogs. I think the same thing might have happened. My guess is that most of your...

    Read more
    • Raymond ChenMicrosoft employee Author

      I have to manually flag posts as “do not show on the DevBlogs main page”. Sometimes I forget. Sorry.

  • Brian Boorman

    A little bonus treat if you go to the comments section of the linked NCommander’s video, two of the original authors of Space Cadet Pinball show up and talk about what/how it was given to Microsoft.

  • Michael Casadevall · Edited

    So, I didn't expect to ever see a follow-up to my video from Raymond himself, and honestly, I apologize for not reaching out to you directly. I want to write a quick note before this gets buried, so I apologize if this is more stream of consciousness. There were some points I actually left out of my research because the video was getting extensively long, but I'll try to summarize my notes here. I have...

    Read more
  • Yuhong Bao

    I wonder if there is any chance DEC/Compaq/HP can pull off what Apple is doing with the M1 today back then.

  • Yuhong Bao

    This reminds me of when Jet 4.0 updates for Windows 7 were compiled with /arch:sse2.

  • Yuhong Bao

    I believe Windows NT 4.0 for Alpha had Pinball. Do you know why that version did not have the same problem?

    • Chris Iverson

      Unless I'm misunderstanding, I think this is the answer:

      "Now, 64-bit Windows on the Alpha AXP would never ship."

      They created the 64-bit port of Windows to Alpha AXP to just have something to test on, but it was never publicly shipped.

      The 32-bit version(which I'm assuming is what was publicly released, based on what's said in this post) never had that problem in the first place, and Raymond's first post on the issue specifically made it clear...

      Read more
  • Brian Boorman

    Dave Plummer’s popular Youtube channel (Dave’s Garage) has a video “Windows 11 Pinball: by the original Microsoft programmer of the XP Game” where he give a lot of the history and attempts to get it running on Windows 11 (watch the video to see if he succeeds or not).

    On a related note – when is Raymond going to do a livestream with Dave? It could be an AMA.

  • MGetz · Edited

    While I understand the economics of why the Alpha situation happened (and would always have happened for the same reason MIPs and PPC went away) there will always be a part of me that wonders "what could have been" if the 64bit version of NT had hit the market instead of the 32bit version and the benchmarks really did justify the expense.

    That said MIPS, PPC, Alpha AXP, and even to an extent ARM/ARM64 all face...

    Read more
    • John Dallman

      IA-64 had no second source: that was part of the reason for its existence. That meant AMD had to create a new architecture, did a decent job, and that's where x86-64 came from. Intel could use it because of their cross-licensing agreement on x86, and they did. According to an AMD senior engineer who visited my employer, Intel originally wanted to make their version of x86-64 deliberately and thoroughly incompatible with AMD's, hoping to crush...

      Read more
      • MGetz

        Yeah Intel was quite explicit in their monopolistic intent with IA-64 to drive AMD and any other licensees out of the market. But much like IBM and MicroChannel it worked just as well because the market just ignored it. There is a long discussion that can be had comparing AMD64 design decisions to ARM64. But I think that's for Raymond to pick up at his leisure at another date.

        As for Compaq stopping their investment in...

        Read more
    • Sunil Joshi

      ARM64 has multiple sources - which is part of why I think it might be a runner. In addition to ARM’s designs, Apple and others have invested heavily. At the same time, the low power background of ARM is really proving to be an advantage for performance on these new process nodes. ARM is also the dominant offering in a mass market sector of mobile devices while PPC never really had that given it was...

      Read more
      • MGetz

        Not in the same way x86 did at the start. I don't think x86 could get going today with the way hardware works as easily. The fact that AMD/Intel/Cyrix/IBM CPUs were all relatively interchangeable until the death of Socket 7 was a huge boon to market penetration. Whereas far as I know there is no socketed ARM64 solution much less one with a compatible UEFI that I can just install Windows on. Every single ARM64...

        Read more
      • Sunil Joshi

        The economics of a lot of things are different now. AWS has a custom ARM chip available now. There are ARM servers available from various companies. In many markets that didn’t really exist in the 1980s like web applications etc. recompiling isn’t really that much of a burden if that’s even necessary given that most will be targeting a runtime like JVM, CLR or Node, which only needs to be ported once. Even computational applications...

        Read more