Windows 3.1 In My BIOS? It’s More Likely Than You Think

It might be difficult for modern audiences to believe, but at one point Microsoft Windows fit on floppy disks. This was a simpler time, with smaller hard drives, lower resolution displays, and no hacker blogs for you to leave pessimistic comments on. A nearly unrecognizable era, to be sure. But if you’re one of the people who looks back on these days fondly, you might wonder why we don’t see this tiny graphical operating system smashed into modern hardware. After all, SkiFree sure ain’t gonna play itself.

Well, wonder no more. A hacker by the name of [redsPL] thought that Microsoft’s latest and greatest circa 1992 might do well crammed into the free space remaining on a ThinkPad X200’s firmware EEPROM. It would take a little fiddling, plus the small matter of convincing the BIOS to see the EEPROM as a virtual floppy drive, but clearly those are all minor inconveniences for anyone mad enough to boot their hardware into a nearly 30 year old copy of Visual Basic for a laugh.

The adventure starts when [redsPL] helped a friend install libreboot and coreboot on a stack of old ThinkPads by using the Raspberry Pi as an SPI flasher, a pastime we’re no strangers to ourselves. Once the somewhat finicky software and hardware environment was up and running, it seemed a waste not to utilize it further. Especially given the fact most firmware replacements only fill a fraction of the X200’s 8 MB chip.

Of course, Windows 3.1 was not designed for modern hardware and no proper drivers exist for much of it. Just getting the display resolution up to 1024×768 (and still with only 256 colors) required patching the original video drivers with ones designed for VMWare. [redsPL] wasn’t able to get the sound hardware working, but at least the PC speaker makes the occasional buzz. The last piece of the puzzle was messing around the zip and xz commands until the disk image was small enough to sneak onto the chip.

Believe it or not, this isn’t the first time we’ve seen Windows from this era running on a (relatively) modern ThinkPad. For whatever reason, these two legends of the computing world seem destined to keep running into each other.

[Thanks to Renard for the tip.]

62 thoughts on “Windows 3.1 In My BIOS? It’s More Likely Than You Think

    1. That brings back some memories. I was a Radio Shack employee during that time period, and I bought the last 100HX off the sales floor for a lot less than they normally sold for (or I wouldn’t have bought it).
      I was never able to do much with it, so it got junked about a year later (I had a 386 by then). Sorry to all of the retro-computing folks, but sometimes the “good old days” weren’t really that good.

      1. Yes, it was on the computer my high school library had for looking up books in the early 90s. It sat right next to an Apple IIGS everyone used to play Oregon Trail and Ultima IV.

    1. The AMI Winbios had to fit in a 128kiB to 256kiB eeprom, so it was still looking rough (mouse support, but 16 colors, no HDD/floppy access, no diag tools and minimal to no window management capabilities).
      There were also custom BIOSes based on Windows 3.x on some Compaq Deskpros from 95-2000. I remember the computer would not access the BIOS setup unless you have an HDD with its hidden setup partition or you boot the setup utility on a bunch of floppy disks.

      But that’s a lot of stuff you can do with 3 to 10MB.

      1. Yes! I couldn’t remember the computer since it was 20+ years ago and it wasn’t mine… Here’s someone’s very shaky cam of such a bios:
        Compared to modern systems, Windows 3.1 was tiny and I’m sure this was the bare minimum to run since you didn’t need file manager or any of the accessories in the bios.
        Some other things used a minimal version of it as well. I think Prodigy for DOS was a gui program running in a stripped down Windows 3.1 shell.

  1. I remember when there weren’t so many pessimistic comments. Ah, those were the days! In all seriousness, it’s a shame that this is a running gag that even newer writers are shoehorning. Maybe stop putting up garbage articles? You can’t blame your readers. Hackaday used to be a hack, every day. Now it’s Techarticleperhour. Come on guys. This now–this is a great article, we need more like it.

    1. For something as critical to the system functioning and dependent on the OEM if something goes wrong, I would be very uncomfortable with writing something like that to the BIOS flash part, especially since the flash part is shared with a couple other pieces of system firmware these days.
      The compromise a previous employer had was to have an internal USB port and SD card slots in the system. From a BIOS point of view, it was trivial to be instructed to boot from these devices because they were always at a fixed location.

  2. Back in the early 90’s when I worked for th AF we ran Windows 3.1 on diskless pc’s – mostly early 386’s with 1 or 2 megs of RAM. Same with the applications.

    You aren’t going to do it with todays bloatware.

    1. You might get something like a pared down VXworks to run in 2MB, but any reasonably usable modern network stack needs a lot more. 32MB seems to be the practical minimum to boot a recent Linux kernel and be able to actually run anything.

      (ISTR in the early 90s, EMACS stood for “Eight Megs And Constantly Swapping”.)

    2. One thing to keep in mind is that in the ’90s you were indeed running Win 3.1. What I mean is it’s cool that you remember the upsides – low HW requirements and all that – but don’t forget that there is a very good reason why you could run on such low specs – you were missing a ton of features (real ones). So bloatware is not the (only) reason for that. If I remember correctly it didn’t even ship with a network driver for example.

      You can’t get something for nothing. You can still go to solutions that need very little resources but you won’t like it ;).

      Chalk that off to nostalgia goggles. Every time it hits me and I whip out an emulator to play with some really old piece of memorabilia I remember just how backwards it feels now. :)

  3. I wonder if the firmware stack they are suing could have been modified to run a ramdisk.
    Hooking the appropriate ISRs and trapping on the necessary IO port accesses seems like it would be a bit of work unless there is already some IDE emulation in coreboot and seaBIOS as a starting point.
    That would allow for OSes bigger than a floppy that still fit on the flash.

  4. Incidentally, if you want to play SkiFree, the original author of SkiFree has recompiled for 32-bit Windows so now you can play on something more modern:

    He was working for Microsoft at the time, had written it to teach himself Windows programming, and while playing it at work one day the program manager for the Microsoft Entertainment Pack decided he had to have it.

  5. I can understand that libreboot is still a thinkpad-centric thing, but why haven´t they built a program to simplify updating the bios ? IBM/Lenovo´s utilities can do that, even the boot block, so it is possible.

    Always having to disassemble the whole machine and doing some finicky procedures ( as the guy said, the information in their page is outdated or incomplete ) discourages people.

    1. Libreboot/Librecore are forks of coreboot, and coreboot intentionally cannot flash itself. As the creator of the project explained on the mailing list recently, he was fed up with bioses that had built-in flashing routines that routinely broke. The only way to flash coreboot is with the flashrom utility, either from linux on the machine itself or using an external programming tool.

  6. MS Windows of some 3.x variety was apparently the original selected GUI for the Atari ST, intended to be running from ROM… however, MS couldn’t apparently get it to fit in less than a couple of megabytes, hex dumps of the code would show a hell of a lot of redundant x86 stuff in there, like references to hercules drivers and all manner of bloat that they couldn’t strip. They seemed to be disassembling the binaries to translate to 680×0 assembly and kludging it that way rather than from source, which was always rumoured to be a complete mess for the early windows versions. Anyhoo, apparently Trammiel got pissed at MS for lack of progress on shrinking and refining it and went with a version of GEM instead.

    Also back in the day, when you could browse most of the WWW in one afternoon, you could dig around some ftp and gopher servers and find homebrewed 1 disk distributions of win 3.1 in standard mode that would run on 286/1MB and also 1 disk versions of an old version of works for windows that would run on it. Be cool to turn those up, there’s a few BIOSes that are 2MB on a 4MB ROM etc, might squeeze that on.

    However, for myself, I think I’d just want freeDOS or Novel DOS 7 filesystem with some kind of norton commander clone, and probably memtest. USB storage drivers and a mscdex that mounts ISOs

    1. Windows 2.1 for 286 was able to boot on an 8088 with only 512k of ram, although as-is it required a hard drive to install on.
      Windows 1.0something had a 286 version too that ran in even less memory, I think 384k, and could run off floppies. Since 1.0 didn’t have 3.5″ disk support at all, at most that would be 720k, or twice that to have some application on a second floppy.

      1. Windows 2.0.3 for the 286 would run in Real mode x86, and did not require tie 286’s brain dead real mode-286
        Windows 1.0.x ran on 286s, but in Real Mode x86, and did not take advantage of more than 640k. It could not run off of floppies, since a floppy would be 1.2MB.
        No windows before Windows NT, had floppy support since the underlying OS was providing that support. ( You could format a 1.44MB floppy from DOS 1.0.3 command line if the MS-DOS version was 3.3, and you could do it from a batch file, so technically yes, Windows 1.0.3 could format a 1.44MB floppy. and if you used a non-microsoft program xformat, or eformat, you could do the same thing under DOS 2.1 )

  7. Windows 3.1 was quite good for its time, although by today’s standards you can’t do much with it.
    It’s funny, after Windows 98 came out and the web started becoming a thing, the computers grew
    more powerful, had more ram etc. yet it seems a lot of people mostly use their computer for
    email and browsing the web. As another poster said, windows 3.1 doesn’t have drivers for a lot of
    the modern hardware we use today but even back then it was great for some of the early email
    and web. I wish I had a spare computer, it would be interesting to load Windows 3.1 just to see how
    insanely fast it could go.

  8. I did something similar a while ago with freedos and zork. I had an old acer c710 running coreboot and seabios, and i saw there was a lot of unused space. the original goal was doom, but i couldnt make it fit, so i just put zork in there. and thanks to a line in autostart.bat, the laptop will boot straight to zork if theres no user input during boot. (for some reason the floppyimg ended up at the top of the bootorder, and i though it was to great to fix)

    1. It’s using a shell replacement or enhancement (depending on preference) called Calmira. This adds quite a lot of Windows 9x shell features to Win3x, including a very Explorer-like interface, copy/paste file management, and desktop icons. You lose some of the “classic fun” feel but it’s a lot more usable for actual use.

  9. I sure I still got the disk somewhere but I certainly had a un-bloated windows 3.1 and a set of disk utilities running off a single 1.44meg 3.5″ floppy back in the day :-)

  10. Back in the mid 90s, one of HPs first laptops (The OmniBook 300) had a portion of Windows in ROM to maximize the hard drive space available, since IIRC the storage options were a 40MB flash disk or a 100 or so MB hard drive (IIRC the flash disk version had a larger ROM pack that had more of the OS in ROM than the hard drive version did, but it’s been a long time since I’ve messed with one)

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.