Mac OS 9 in QEMU

QEMU is an open-source emulator for virtualizing computers. Unlike VMWare, it's able to both virtualize CPUs and emulate various CPU instruction sets. It's pretty powerful, free, and has a macOS port. There are alternate versions and different ways to install it. Still, in this example, I'm using Homebrew, a package manager for macOS/OSX that allows you to install software via the CLI and manage easily.

Now, this post wouldn't be very exciting if I tried this on my Mac Pro, but I decided to try it on my MacBook M1. Thus far, the community has succeeded in getting QEMU to install the ARM version Windows, so I decided to do the more silly path and get PPC and X86 working on Apple Silicon. I encountered very little resistance, which surprised me as I haven't seen/read anyone trying this route. It's surprsingly very usable but the usefulness is going to be limited. I was able to play Sim City 2000 on Mac OS 9.2 at a fairly high resolution. For the sake of brevity, I'm going to skip over installing Homebrew on an Apple M1, but you'll want to use the arch -x86_64 method, which requires prepending. I've gotten OS 10.0 and nearly gotten Windows 10 working on my M1.


Included below is the instruction for both Apple Silicon and Intel Macs.



Requirements

  • Basic understanding of the terminal in OS X/macOS
  • Apple Silicon (M1) computer (or Intel) Mac
  • Xcode
  • xcode-select (CLI Tools) xcode-select --install
  • Homebrew

Mac OS X in QEMU

Step 1: Install QEMU

This is the only step where Apple Silicon and Intel Macs differ. You'll need to install the x86 version of QEMU for the Apple silicon macs first.

Apple Silicon

    arch -x86_64 brew install qemu 

x86 Intel Macs

    brew install qemu 

Step 2: Create a disk image

The rest of the steps do not need any specification for M1 vs. Intel.

You can specify a route, but I just used the default pathing, the 2G = 2 GB below. You can get away with much less for OS X OS 9. If you'd like more space, change the size of the simulated HDD. .

    qemu-img create -f qcow2 myimage.img 2G 

Step 3: Launching the emulated computer and the tricky part: Formatting the HDD

Now that we have a blank hard disk image, we're ready to go.

qemu-system-ppc -L pc-bios -boot d -M mac99 -m 512 -hda myimage.img  -cdrom path/to/disk/image  

Let's break this down so it's not just magic. The first command is the qemu core emulator, you can use things like 64-bit x86 CPU qemu-system-x86_64 or a 32-bit CPU qemu-system-i386 , but we're using a PPC, so we are using qemu-system-ppc.

Next, we're declaring PC bios with -L pc-bios, I'm unsure if this is necessary. This seems to be the default even in Mac QEMU. After that, the -boot flag declares the boot drive. For those who remember the days of yore, C is the default drive for PCs, D is the default for the CD-Rom like a PC. It's weird, I know. -M is the model flag. It's pretty esoteric, but QEMU uses OpenBIOS, and mac99 is the model for Beige G3s. The lowercase -m is memory, expressed in megabytes, but you can use 1G or 2G for 1 or 2 gigabytes like the format utility. -hda is the image we're using. Finally, -cdrom is the installer image

Step 3.5: Special considerations between operating systems

I discovered that OS X 10.0's installer has a significant flaw: It doesn't have a disk utility. The disk images are black disks thus have no file system. If you want to run OS X 10.0, you'll need to first launch an installer that can format HFS like OS 9 or later versions of OS X, run the disk utility, format the image and then exit out of the emulator. The process would look like this:

qemu-system-ppc -L pc-bios -boot d -M mac99 -m 512 -hda myimage.img  -cdrom path/to/disk/macosx10.1 or macOS9  

Then format the drive from the utility, quit the emulator (control-c on the terminal window).

qemu-system-ppc -L pc-bios -boot d -M mac99 -m 512 -hda myimage.img  -cdrom path/to/disk/macosx10.0

Tiger and Leopard requires USB emulation so you'll need to add -device flags for a usb keyboard and a usb mouse, also both like a few extra -prom-env flags.

qemu-system-ppc -L pc-bios -boot d -M mac99  -cpu G4  -m 512 -hda myimage   -cdrom /path/to/disk  -device usb-kbd -device usb-mouse -prom-env 'auto-boot?=true' -no-reboot -prom-env 'vga-ndrv?=true'  -prom-env 'boot-args=-v'

Power PC Leopard I can get to boot but it crashed twice during installs, this could be

Step 4: after the installer fininshes

You will end up seeing a failed boot screen after the installer finishes. This is normal. Either quit the QEMU instance or use control-c in the terminal to close it. Now that it's installed, we want to boot off the internal drive.

qemu-system-ppc -L pc-bios -boot c -M mac99 -m 512 -hda myimage.img    

MacOS 9 seems to do slightly better when adding the via=pmu and specifying the graphics.

qemu-system-ppc -L pc-bios -boot c  -M mac99,via=pmu  -g 1024x768x32  -m 512 -hda os9.img  

Step 5: mounting disk images

There's not a lot to do with an OS without software. You can mount plenty of disk image formats

qemu-system-ppc -L pc-bios -boot c -M mac99 -m 512 -hda myimage.img  -cdrom path/to/disk

Sim City 2000 in QEMU on Apple Silicon

Bonus round: Trying for x86 64 Windows 10

Windows in QEMU on Apple Silicon

Step 6: Multi CD-Rom Installs or swapping Disk Images

Older applications and OS installers require mutliple disk images. This can be done from via the CLI inside QEMU.

On the QEMU window press:

  • Control-Alt-2 to bring up the console
  • change ide1-cd0 /path/to/image
  • Control-Alt-1 to bring back the GUI

Thus far my Windows 10 experiment has been a lot less successful, I've gotten through the installer (it's unbearably slow) but it seems to hand on booting. It looks very feasible. I might have better luck using the 32 bit verison of windows.

Windows in QEMU on Apple Silicon

qemu-system-x86_64  -L pc-bios -boot d -m 2048 -hda myimage.img -cdrom  Win10_20H2_v2_English_x64.iso  

</section>