For my last article, Retrodev, I set up an old VM to run the MS-DOS Editor and to replicate the feel of my old hard-drive-less monochrome computer on which I was editing HTML files saved on floppy discs. Along that, I set up another VM running Windows 95 in QEMU on macOS Sequoia.

I know there are other ways to run VMs instantly right in the browser these days. But I wanted to set up the OS and the apps I wanted. Besides, Windows 95 turned 30 last month! What better there is there to give the vintage OS another spin? 😅

Contents

What this page is and what it isn’t

To be clear, I will not give you a thorough walkthrough on how to set up the OS step by step. But I will provide notes and updates to complement other guides mentioned below, which I have followed, so you can do it yourself successfully.

Setting up Windows 95 in QEMU 10 on macOS Sequoia

Netscape Communicator 4 on Windows 95 in QEMU running on macOS Sequoia.

Note this will use commands in the macOS terminal and MS-DOS, and not any GUI except to run Windows 95 itself.

I am using QEMU 10.0.0 on macOS Sequoia 15.6.1.

References

I followed two guides, both retrieved on 2025-09-12:

Both guides are a bit out of date, so I had to put bits of both together until things worked.

Prerequisites

You will need the OS installation files (obviously), as well as boot disks, patches, drivers, and a proxy for Web access:

💡 To make it easier to deal with all the setup files for the VM, I recommend you create a CD image with all of them on it. For that, you open the disc images or decompress the package files you got, and just copy the files into a directory called setup:

  • win95: Setup file directory from the Windows 95 CD.
  • drivers: Drivers like the one for the Cirrus Logic video card.
  • apps: Any additional apps you wish to install, like Netscape above.

Then, in the macOS Terminal, in the directory containing the setup folder you just made, make an ISO image out of it:

hdiutil makehybrid -iso -joliet -o setup.iso "Setup"

Of course, doing all this is optional. But if you do it, instead of using the Windows 95 CD file called win95.iso below, you can use setup.iso.

Creating a new hard drive

You’ll need a blank hard drive image which will act as the C: drive on which you will install Windows. You can use an utility provided with QEMU to make one:

qemu-img create -f qcow2 c.img 700M

This will make a hard disc in a file named c.img of a capacity of 700 MB, which is more than sufficient for a comfortable installation. (Note the file won’t be 700 MB right away—it will increase as more of the hard disc is used.) Feel free to change 700M to increase the size if you wish, or even decrease it at your own risk.

Starting QEMU for setup

This is one part where I had to combine the instructions of the two guides, as some arguments in the command provided in each guide didn’t work.

Below is the command I used to start QEMU, with a virtual Pentium processor, 32 MB of RAM, a SoundBlaster sound card, a Cirrus Logic video card, Novell network card, boot from the A: floppy disc, and use the terminal as the control monitor:

qemu-system-i386 \
	-m 32 \
	-accel tcg \
	-cpu pentium \
	-netdev user,id=mynet0 \
	-drive file=c.img,format=qcow2,if=ide,index=0 \
	-drive file=patcher.img,format=raw,if=floppy \
	-drive file=win95.iso,media=cdrom,if=ide,index=2 \
	-device cirrus-vga,vgamem_mb=16 \
	-device sb16 \
	-device ne2k_isa,netdev=mynet0 \
	-rtc base=localtime \
	-boot a \
	-display cocoa,full-grab=off,full-screen=off,zoom-to-fit=off \
	-monitor stdio \

Of course, you will want to change the paths of win95.iso to the path of the Windows 95 CD image you downloaded earlier, and patcher.img to the Patcher9x boot floppy disc image. The c.img file is the hard disc image we created earlier.

💡 For later use, instead of polluting your shell history or trying to remember the command, I recommend you save it in a shell script like I have.

Initializing the hard drive

The Patcher9x bootable floppy disc uses FreeDOS as the shell, which should be familiar to MS-DOS users.

You will notice the C: drive is just not there at first even if we started QEMU with the hard drive image attached. That is normal. We need to partition it first:

fdisk

Once done, exit fdisk and restart the VM. Then, C: will be visible, but not usable. We now need to format the hard drive:

format c:

The Windows CD should be accessible as D:. To help patching and installation, and speed up the process, let’s copy the installation files to the hard drive:

mkdir c:\setup
mkdir c:\setup\win95
copy d:\win95\*.* c:\setup\win95

💡 Another tip if you made a setup.iso image earlier: use xcopy provided on the floppy disc to copy everything from it to the c:\setup directory. That way all your setup files will be on the hard drive for later use, and you won’t need the ISO image anymore. (Particularly useful when needing to update drivers or install components.)

Patch the installation files with Patcher9x:

a:
patch9x -auto c:\setup\win95

Patching the files will take several minutes while it remains quiet. That is normal—just be patient and let it do its thing.

Installing Windows 95

We need to restart the VM with the Windows 95 boot floppy disc. Shut down QEMU and edit your command to start it again with that image, here named w95boot.img:

qemu-system-i386 \
	-m 32 \
	-accel tcg \
	-cpu pentium \
	-netdev user,id=mynet0 \
	-drive file=c.img,format=qcow2,if=ide,index=0 \
	-drive file=w95boot.img,format=raw,if=floppy \
	-drive file=win95.iso,media=cdrom,if=ide,index=2 \
	-device cirrus-vga,vgamem_mb=16 \
	-device sb16 \
	-device ne2k_isa,netdev=mynet0 \
	-rtc base=localtime \
	-boot a \
	-display cocoa,full-grab=off,full-screen=off,zoom-to-fit=off \
	-monitor stdio \

This will start MS-DOS.

Unlock the drive so the Windows 95 setup can access the hard drive directly:

lock c:

(Yup, you unlock with lock. Sounds counterintuitive, I know.)

Then start Windows setup from C:—not the CD—and skip its ScanDisk check:

c:
cd \setup\win95
setup /is

Go ahead and proceed with the setup. It shouldn’t take long. However, like Computernewb mentioned, don’t let it automatically detect your hardware. Also don’t install all the Windows components for now—you can do that later.

From this point, you can continue with the guide by Computernewb. Although, like I mentioned, I didn’t need to install anything for DMA.

Setting up the video card

When setting up the video card, as described in the Computernewb guide, you will have to look for the directory of your Cirrus Logic board. You will get two .inf files: use 5446.inf. When prompted for which driver to use among those found by Windows, pick the one mentioning “5446”. There might be more than one, but choosing either one might make no difference.

Once the card is setup, you’ll be able to increase the colour depth and raise the resolution above 640x480. However, there are some resolutions I tried which had some issues. Windows normally lets you test a resolution for 15 seconds and then revert to the original one if you don’t give any response during the check.

Setting up the network card

For this, following the instructions by the QEMU Wiki guide worked.

In the Control Panel, open “Add New Hardware,” then let it scan for hardware. Go ahead and let it install what it needs. If it asks you to keep files that are newer, please do so.

This will install the drivers for the “Novell NE2000 PCI&ISA compatible” network card, sometimes shown as “NE2000 Compatible.” You’ll need to restart.

Once you have restarted, you will need to make the changes to the IRQ for the network card, as described in the QEMU Wiki guide. Please do so. You will need to restart again.

After that, most of the network stack will be installed already, except TCP/IP, which is required to access the Internet. To install it:

  • Go to Start > Settings > Control Panel > Network.
  • Under Configuration, click Add….
  • Select Protocol, then Add….
  • Under Manufacturers, select Microsoft.
  • Under Network Protocols, select TCP/IP.
  • Click OK.

This will update the drivers once more, and yep, you’ll have to restart again. (Just be grateful it’s a VM that runs fast and not an actual Pentium computer that took forever to restart back in its days!)

After Windows starts again, it should have Internet access and get an IP in a virtual LAN made by QEMU. You can check for the IP addresses of the “Default Gateway”—your physical host computer—and the VM by going to Start > Run…, type winipcfg and clicking OK. That will open IP Configuration and show those IP addresses to you. You will need the “Default Gateway” IP address, for example 10.0.2.2, to setup the proxy in the VM later.

Connecting to the Web

Under Prerequisites earlier, you downloaded WebOne and its required .NET Runtime. Install them if you haven’t already. (If somehow WebOne was updated and requires a newer version of the .NET Runtime, it will tell you and where to get it.)

WebOne is needed for the VM to access HTTPS websites, as the SSL version used today is too new for Windows 95 to understand. It runs in the terminal and has no GUI.

Because of the security features of macOS Sequoia, it is likely running webone from the terminal will cause it to exit immediately. See the GitHub issue webone does not launch on macOS. To work around this, you will have to sign the binary before you can run this, with the command below or something similar:

codesign --sign - --force webone

WebOne runs on port 8080 by default.

Then, in the Windows 95 VM:

  • Go to Start > Settings > Control Panel > Internet.
  • Under Connection, in Proxy server:
    • Check Access the Internet using a proxy server.
    • Input the “Default Gateway” IP address you noted earlier next to Address.
    • Next to Port, input 8080.
  • Click OK.

⚠️ Note the first time you open the Internet Options or Internet Explorer, Windows may ask you to set up a connection. Just pick the last option saying you’re on a LAN and you want to set up the connection yourself, and it will stop bothering you.

This should take care of accessing HTTPS sites in Internet Explorer and throughout the system. If it doesn’t affect other apps or browsers you may want to use, those normally have settings to let you setup the proxy access if you need it.

That’s it!

Now go and experience using a 30-year-old OS. 🤌

(Then when macOS Tahoe is released Monday, maybe all the instructions here will be broken. 😅)

👋 Hi! I'm Rem, a Web developer since 1998, in Japan since 2006. I'm the author of dress.css and Scrollerful. As you can imagine, my experience is varied, including the early days of the Web being a webmaster writing HTML files and scripts in Perl, saved on floppy disks using Notepad, to now being a tech lead for a team, writing CSS with Tailwind or JavaScript for both the backend and frontend in Neovim. I love photography, typography, and colour theory. Strangely enough, my love for print graphic design was what got me into web development. So, yes, I have a few stories to tell and tips to give, and I'm writing some of them, sometimes, here, on RÉMINO Bits.