installing macos 9.2.2 in qemu

rough post, mostly screenshots, of me installing mac os 9 in qemu on a Windows 10 host, getting it working with qemu’s builtin NAT, then trying to get it bridged to a real Ethernet


here’s how it looks without any arguments

I’m using the qemu 2.11.0 w64 binaries fromĀ
as of 3/21/2018, the latest 2.12.0-rc0 provided does not work

šŸ’»desktop d/E/MacOS9> qemu-system-ppc.exe -version; and qemu-system-ppc
QEMU emulator version 2.11.0 (v2.11.0-11693-g21057c841e-dirty)
Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers

starting up

first, create a disk image

šŸ’»desktop d/E/MacOS9> qemu-img create -f qcow2 hd0.img 10G
Formatting 'hd0.img', fmt=qcow2 size=10737418240 cluster_size=65536 lazy_refcounts=off refcount_bits=16

then run the emulator (NOTE: I’m using fish-shell from Cygwin, so I need to escape the backslashes in the prom-env boot-device specification.Ā  You’ll likely need to escape the slashes on any other unixlike shell.Ā  Using a Windows cmd.exe shell will only require two backslashes.)

šŸ’»desktop d/E/MacOS9> qemu-system-ppc.exe -L pc-bios -boot c -m 256 -M mac99 -prom-env "boot-args=-v" -prom-env "auto-boot?=true" -prom-env "boot-device=cd:,\\\\:tbxi" -prom-env "vga-ndrv?=true" -sdl -netdev user,id=net0 -device sungem,netdev=net0  -device usb-mouse -device usb-kbd -drive "file=macos-922-uni/macos-922-uni.iso,format=raw,media=cdrom" -drive "file=hd0.img,format=qcow2,media=disk"

once booted

it took a little while to boot. probably about as fast as an actual Mac would

the clock is synced from the host as UTC

after the initial boot, i added -g 1024×768 to the command line for a higher resolution. but the system resized the display back to 800×600 once getting to Finder. šŸ™

Apple System Profiler

can’t seem to use cmd+w to close anything… windows+w opens up the windows ink workspace:(

i decided to try qemu with the default Gtk GUI (by removing the -sdl flag), but mouse grabbing didn’t work right after that.

need to format first

i forgot it was called Drive Setup back then

had to page through a few license agreements


You can really micromanage what gets installed…


only took four minutes to install


first boot into OS

remove the CD and boot flag

šŸ’»desktop d/E/MacOS9> qemu-system-ppc.exe -L pc-bios -boot c -m 
256 -M mac99 -prom-env "boot-args=-v" -prom-env "auto-boot?=true" -prom-env "vga-ndrv?=true" -netdev user,id=net0 -device sungem,netdev=net0  -device usb-mouse -device usb-kbd -drive "file=hd0.img,format=qcow2,media=disk" -sdl

howdy. again, boot takes probably about as long as a real Mac would

annoyingly, the resolution drops once Finder loads.

setup assistant

this is followed by network setup

the Monitors control panel wasn’t available from the setup CD, but is after install. now I have 1024×768

getting online

it wants me to use the Internet Setup Assistant, though Mac OS has a driver for the virtual Ethernet device and qemu’s internal NAT service is autoconfigured

sometimes there’s long pauses while the internet thing is running

no i don’t want this. just use DHCP

using the browser

there’s no convenient guest features like clipboard integration or drag-and drop file copy, ugh.

downloading Classilla over Gopher

this is like Mozilla but for classic Mac.

it was slow. not sure if client or server side; only got 150 KB/sec

i don’t think there’s a sound device included

Classilla had to be unstuffed. took a little while

and it took a little while to start too

let’s bing it

trying to download flash in spanish to own the libs

…but oldapps downloads are broken. so i got flash 7 from adobe and downloaded over HTTP from the host (at about 1 MB/sec)

what do i do with this plugin?

ah.. it still doesn’t work though?

also, my blog is too modern


bridge to Ethernet

tap-windows driver?

install this for bridging to system Ethernet device

this created a virtual Ethernet device:


then bridge the tap device with your LAN connection

and start qemu with TAP!

useĀ tap network backend instead of user, specifying theĀ ifname of the virtual device (Ethernet 3)

i also added theĀ -localtime flag so the virtual clock uses UTC-4

šŸ’»desktop d/E/MacOS9> qemu-system-ppc.exe -L pc-bios -boot c -m 256 -M mac99 -prom-env "boot-args=-v" -prom-env "auto-boot?=true" -prom-env "vga-ndrv?=true" -netdev 'tap,id=net0,ifname=Ethernet 3,script=no' -device sungem,netdev=net0 -device usb-mouse -device usb-kbd -drive "file=hd0.img,format=qcow2,media=disk" -sdl -localtime

DHCP lease!

and traffic is flowing! sometimes

root@LEDE:~# tcpdump -i eth0.1 host
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0.1, link-type EN10MB (Ethernet), capture size 262144 bytes
19:48:01.260506 IP powermac.lan.49152 > LEDE.lan.53: 5+ A? (31)
19:48:01.279219 IP LEDE.lan.53 > powermac.lan.49152: 5 1/0/0 A (47)
19:48:06.288435 ARP, Request who-has powermac.lan tell LEDE.lan, length 28
19:48:06.290720 ARP, Reply powermac.lan is-at xx:xx:xx:xx:xx:xx (oui Unknown), length 46

however Mac OS isn’t getting any traffic
the other Windows bridge is an Intel VLAN sub-device, so maybe it’d work if a regular Ethernet adapter was added
possibly a promisc mode/proxy arp issue

haven’t really looked into possible solutions yet, but can think of a few things to try