Emaculation.com

Running Qemu-system-ppc with Mac OS/OSX guests in Windows

(Guide updated July 7th, 2023)

Introduction

Qemu-system-ppc can run the PowerPC versions of Mac OS 9.0 to 9.2 and OSX 10.0 to 10.5. Qemu can also run some OSX release previews.

The status of various guests based on the latest builds available from the forum:

Guest Default build Sound-enabled build Argument(s) Remarks
Mac OS 9.0 OK OK -M mac99 Requires rom version 5.2.1 or above, mouse wiggle to boot
Mac OS 9.1 OK OK -M mac99,via=pmu
Mac OS 9.2 OK OK -M mac99,via=pmu
Mac OSX 10.0 OK Crackle, channel issue -M mac99
Mac OSX 10.1 OK Channel issue -M mac99
Mac OSX 10.2 OK OK, but channels reversed -M mac99 -device pci-ohci,id=usb1 -device usb-mouse,bus=usb1.0 -device usb-kbd,bus=usb-bus.0
Mac OSX 10.3 OK OK -M mac99,via=pmu Sound has speed drift
Mac OSX 10.4 OK OK -M mac99,via=pmu
Mac OSX 10.5 OK OK -M mac99,via=pmu

Requirements

  • Qemu program
  • Disk images for the PowerPC versions of Mac OS or OSX you want to install

Assumptions in this guide

This guide assumes you are installing Mac OS 9.2 on a 2gb file that will act as your hard disk for Mac OS.
The CD image you install from is called MacOS9.2.iso and the hard disk is called MacOS9.2.img

Installations of other versions of Mac OS or OSX (roughly) follow the same path.
See the table above for information about specific qemu parameters required to run Mac OS/OSX versions.

Qemu-system-ppc installation

  • Go to http://www.emaculation.com/forum/viewtopic.php?f=34&t=9028 and download our latest build from the official Qemu source.
  • Create a folder for Qemu-related files and unpack the download. Put your Mac OS/OSX disk images in this folder.
  • Create an empty disk image with qemu-img.exe. Open a command prompt and navigate to your Qemu folder.
qemu-img.exe create -f raw -o size=2G MacOS9.2.img 
  • Open your favorite text editor and create a file called qemu.bat in your qemu folder. (If one is contained in the download, edit that one).
  • Paste the code below into the file:

qemu-system-ppc.exe ^
-L pc-bios ^
-M mac99,via=pmu ^
-m 512 ^
-display sdl ^
-boot d ^
-drive file=MacOS9.2.iso,format=raw,media=cdrom ^
-drive file=MacOS9.2.img,format=raw,media=disk

  • Save qemu.bat

Short explanation of the content of the file:

qemu-system-ppc.exe starts qemu with all of the following as parameters:

  • -L pc-bios defines the location of bios files to be used.
  • -M mac99,via=pmu defines the mac model used(*).
  • -m 512 defines the amount of memory (in Mb) for OS9/OSX.
  • -display sdl instructs Qemu to use SDL for the graphical display
  • -boot d defines to boot from a drive entry marked as a cdrom, “-boot c” would define to boot from a drive entry marked as disk.
  • -drive file=MacOS9.2.iso,format=raw,media=cdrom defines the name, location, format, and type of image (cdrom) file to be used
  • -drive file=MacOS9.2.img,format=raw,media=disk defines the name, location, format, and type of image (disk) file to be used

(*)The mac model entry accepts 3 options for the via parameter:
mac99,via=pmu (with PMU, supporting usb mouse and keyboard)
mac99,via=pmu-adb (this allows some older Mac OS/Mac OS server builds to use a keyboard and mouse through the adb bus)
mac99,via=cuda (default, this allows use of the older adb (Apple Desktop Bus), now less supported cuda)
Note: to run Leopard, you have to use -M mac99,via=pmu

  • Double-click qemu.bat. This starts Qemu and boots the MacOS9.2.iso installation CD image.

Installation of Mac OS 9.2

After you booted from the CD you first need to partition the hard disk:

  • Go into the “Utilities” folder and start the “Drive Setup” program.
  • Select the entry “<not initialized>” and click “Initialize” and again in the next window.

After initialization has finished and a disk icon has appeared on the desktop, quit the program.
You can then start the installation of Mac OS. Shut down Mac OS after the installation has finished.
Please note that the initialization step has to be repeated for any NEW disk added to Mac OS.

Booting the installed Mac OS

To boot the installed Mac OS, you need to edit the qemu.bat file:

  • Change the -boot d argument to -boot c.
  • Reverse the order in which your disk and cdrom entry are listed in qemu.bat.

When booting with -boot c, make sure your hard disk image file is listed first. Save the file. Double-click qemu.bat and Mac OS will boot from the hard disk.

Done.

Connecting other CDs or disk images

If you want to install software, make an image of the CD-Rom and attach it to Qemu. Add a disk after the hard disk entry to qemu.bat:

"-drive file=Name-of-CD-image.iso,format=raw,media=cdrom" (without the quotes!)

or for a second hard disk:

"-drive file=Name-of-hard-disk-image.img,format=raw,media=disk" (without the quotes!)

And save the file. Start qemu.bat. The CD image (if readable by Mac OS) will appear on the desktop for you to use.
A new hard disk needs to be partitioned as described above.

Changing the graphics settings

You can set the initial size and colour depth of the boot window, using the -g parameter like this:

"-g 1024x768x32"  (Without the quotes!) 

Subsequent changes to the resolution can be made with default OS tools. (e.g., the Monitors control panel in MacOS or equivalent in OSX).

Opening a serial connection to the host

You can open a connection to a com port on the windows host by adding:

"-device usb-serial,chardev=com -chardev serial,path=com1,id=com"

to your command line. chardev=“” and id=“” have to match, but you can open a different com port by changing the path= parameter.
When you start Qemu, a window will open in which you can set the serial communication parameters.

Inside your Mac OS 9.x guest a FTDI driver is needed from: https://www.ftdichip.com/Drivers/VCP.htm (download the 1.0f4 version)
Once installed you can open a modem connection through the “USBHighSpeedSerialConverter”, or use a terminal emulator such as zterm.

Sharing devices with the Guest--GUIDE IN PROGRESS

You can attempt to pass-through devices attached to the host to the guest. For USB devices in general this takes the form of:

"-device usb-host,vendorid=0x0000,productid=0x0000"

On a Windows host, you can find the required USB vendorid and productid by checking the USB device in the Device Manager. Mac OS up to 10.2.8 will only support USB 1.1. If your device uses USB 2, you can attach it to an USB 1.1 hub to force it into USB 1.1 mode.

To allow Qemu to take control of the device you might have to use a utility such as the USBDriverTool to load a different driver for the device.

Mac OS 9.0 to 10.2

Sharing an USB device with Mac OS 9.0 up to Mac OSX 10.2 is restricted to using USB 1.1 devices. A way to push a USB 2.0 device into USB 1.1 mode is to attach it to a strictly USB 1.1 hub (as found in older Apple keyboards or regular 1.1 hubs).

  "-device usb-host,vendorid=0x058f,productid=0x6387" to the command line (replace product and vendor id with what you found)

Mac OS 10.3 and above

Mac OS 10.3 and above support USB 2. To add an USB 2 device, first add a USB 2 controller and then attach you device to that controller:

  "-device usb-ehci,id=ehci"
  "-device usb-host,bus=ehci.0,vendorid=0x058f,productid=0x6387" to the command line (replace product and vendor id with what you found)

Networking

The latest Qemu-system-ppc for Windows builds emulate a network device that is supported out of the box for Mac OS 9.0 up to OSX 10.5

There are several ways to get networking going in Windows:

Slirp-based networking

Note: this is activated by default on Qemu-system-ppc, so doesn't need to be mentioned explicitly on the command line:

  • -device sungem,netdev=network01 -netdev user,id=network01
Running two Qemu-system-ppc instances with networking

If you want to run two instances of Mac OS/OSX simultaneously, Qemu needs to be able to tell the network devices apart. You can add a mac address to the networking device:

  • -device sungem,netdev=network01,mac=52:54:00:12:34:56 -netdev user,id=network01 (this is the default mac address)

and make sure you add a different mac address to the second instance:

  • -device sungem,netdev=network01,mac=52:54:00:12:34:66 -netdev user,id=network01

Please note that adding a mac address other than the default to the network device leads to the discovery of a new network card in OSX. You need to configure that card through the network preferences.

Tap-based: Bridging one or more tap device (enabling Appletalk networking)

Install an OpenVPN tap device and bridge it with your normal ethernet connection. Then use the following on the Qemu-system-ppc command line:

  • -device sungem,netdev=network01 -netdev tap,ifname=TapEthernet1,id=network01 (and replace “TapEthernet1” with the name of the tap device network connection)

To allow two Qemu-system-ppc instances to “see” each other on the network and also have internet access, install a second tap device and bridge both tap devices with your default network connection. You must then also use different mac addresses for each connection. Note that the tap devices should have different names too.

  • -device sungem,netdev=network01,mac=52:54:00:12:34:56 -netdev tap,ifname=TapEthernet1,id=network01
  • -device sungem,netdev=network01,mac=52:54:00:12:34:66 -netdev tap,ifname=TapEthernet2,id=network01

Peer to peer networking between two Qemu instances

Qemu can use socket networking to connect two peers. The peers will have no internet access, but can exchange data between each other.
Set one guest to be a listener for network traffic:

  • -device sungem,netdev=network01,mac=52:54:00:12:34:56 -netdev socket,id=network01,listen=:1234

Set the other guest to connect to the listener:

  • -device sungem,netdev=network01,mac=52:54:00:12:34:66 -netdev socket,id=network01,connect=127.0.0.1:1234

For both instances, set the TCP/IP settings manually to a free ip address in your IP range and set the subnetmask to 255.255.255.0. No other settings have to be made.

Forwarding (multiple) ports to the host (only needed when using the slirp network option)

You can provide services running on the guest to the host by forwarding ports to the host.

Running a webserver
  • -device sungem,netdev=network01 -netdev user,id=network01,hostfwd=tcp::8080-:80

The webserver running on the guest is then accessible through http://name-or-ip-adress-of-host:8080 from other machines running on your network.

Getting files in and out of the guest with FTP
  • -device sungem,netdev=network01 -netdev user,id=network01,hostfwd=tcp::2121-:21

Forwarding port 21 to the host allows running an ftp server (such as Netpresenz, available from the macintosh garden site) on an Mac OS 9.x guest and read/write access to the file system of the guest. Make sure to use an FTP client capable of active transfer mode on the host (such as Filezilla, we are dealing with an old guest system after all.) For access to a Mac OS X guest, enable the ftp service.
You can access the guest by connecting to ftp://name-or-ip-adress-of-host:2121 from other machines running on your network.

-On the Mac OS side: Enable file sharing through the control panel: Enter a Owner name, password and computer name and click Start under File Sharing. Then, at the Users & Groups pane open your user. At Show, select Sharing and set allow user to connect and select see all disks.
Next, share your hard drive: select the drive icon, use File/Get info/Sharing to set Share this item and…
Start Netpresenz setup, configure the ftp service and user: At ftp setup, Owner need full access. Then check the Summary for any additional configuration hints, then start Netpresenz.

-On the Windows/Filezilla side:
Start Filezilla, open Settings.
At FTP set transfer mode to active.
At FTP active mode/Active mode IP set “Use the following IP address” to your host ip address.
On the same page disable Don't use external IP address…..

In the connection bar, enter localhost and your Mac OS user name and port 2121, then click connect. Filezilla will ask for your Mac OS password.

Multiple port forwarding

You can forward multiple ports:

  • -device sungem,netdev=network01 -netdev user,id=network01,hostfwd=tcp::2121-:21,hostfwd=tcp::8080-:80

You can also forward ports for appletalk over tcp/ip:

  • -device sungem,netdev=network01 -netdev user,id=network01,hostfwd=tcp::548-:548,hostfwd=tcp::387-:387

Accessing a Windows 10 share from Mac OS 9.2 running in Qemu, using Dave 6.2.1

In Windows:
-Make sure you have some folder shared
-Bridge your tap device with your default network interface (see above)
-Start Mac OS 9 through Qemu with tap networking
-Use DHCP on the Mac side.

In Mac OS 9:
-Install DAVE 6.2.1 (find it at Macintoshrepository.org)
-Shut down and start Mac OS
Follow the setup assistant.
-name, company, serial number
-Netbios name: (f.i., QemuOS92)
-Workgroup: WORKGROUP (should be found automatically)
-Description: (f.i., QemuOS92)
-Login at startup: unchecked
Overview:
Computer Name: QEMUOS92
Workgroup Name: WORKGROUP
Description: QemuOS92
Use DHCP to make additional settings
-Sharing local files: check I don’t want to share my local files

(if “Use DHCP to make additional settings” is not shown, check DHCP in the NetBIOS Control Panel)

-Start the Chooser, select your host as server. Enter username, password, leave domain as is.
-You will get an unknown error….
-In the SERVER box, click Add Share. At Share enter a share name on your host. Click OK, and OK.

The share appears on your desktop, you can now exchange files through the share.

Advanced usage

Printing

There are multiple way to print from the guest operating system to the host:

Print directly to a networked printer you have Mac OS/OSX drivers for. This assumes you have set up tap networking so Mac OS can see the windows network and networked printer.

Print to a file that is moved to the host to print. How to print to e.g., a pdf file depends on the guest operating system.

Changing the mounted cdrom image

In Mac OS: First drag any mounted CD from the desktop into the trash

  • Open the Qemu Monitor by pressing Ctrl-Alt-2
  • Type “info block” to find the name of the CD drive in Qemu (most likely: ide1-cd0)
  • Type “eject ide1-cd0”
  • Type “change ide1-cd0 Driveletter:/path/name-of-cd-image.iso” (note the forward slashes!)
  • Close the Qemu Monitor by pressing Ctrl-Alt-2 again (do not close the window by clicking the close button)

Also see the qemu documentation here: https://www.linux-kvm.org/page/Change_cdrom

Mounting a real cd

NOTE: You cannot mount Mac formatted CD's, but other formats work

  • Open the Qemu Monitor by pressing Ctrl-Alt-2
  • Type “info block” to find the name of the CD drive in Qemu (most likely: ide1-cd0)
  • Type “change ide1-cd0 /dev/cdrom” (note the forward slashes!)
  • Close the Qemu Monitor by pressing Ctrl-Alt-2 again (do not close the window by clicking the close button)

Using a virtual usb drive to exchange files with the host

NOTE: This option is not error-free

Create an empty folder to be used to exchange files. In the example below, the folder c:\QemuVVFAT is used.
Add the following to your command line:
-device usb-storage,drive=fat32 -drive file=fat:rw:c:\QemuVVFAT,id=fat32,format=raw,if=none

An USB drive called Qemu-VVFAT will appear on your desktop. You can use it to exchange files with the host.

Experimental builds and features

Qemu is being actively developed. This means that some new features can become available that are not yet incorporated into the official source code. Currently there are several such developments, in various states of reliability:

-Sound support.

You can download some of these experimental builds for our forum under Experimental builds : http://www.emaculation.com/forum/viewtopic.php?f=34&t=9028

-File sharing with the host
-Mouse tablet driver

You can download drivers enabling these features here: https://www.emaculation.com/forum/viewtopic.php?t=11973

Issues

  • Restart doesn't work in Mac OS. Use Shut Down and restart Qemu.
  • Qemu will not boot Mac OS when memory is set to 64Mb or less.
  • Sound only works reasonably well in Mac OS 9 guests.
  • Sound will not work in, or crash Mac OS guests with memory set to 1024Mb or more.

Useful additional command line arguments

  • -k en-us sets the keyboard language (see below for possible languages)

The language codes available are:
ar de-ch es fo fr-ca hu ja mk no pt-br sv
da en-gb et fr fr-ch is lt nl pl ru th
de en-us fi fr-be hr it lv nl-be pt sl tr

  • -rtc base=localtime sets the guest time to the local machine time
  • -full-screen sets the guest to run full screen
  • -prom-env “auto-boot?=false” stops boot at the openbios prompt
  • -prom-env “boot-args=-v” shows verbose boot messages with OSX guests
  • -prom-env “vga-ndrv?=false” disables loading the default VGA driver
ppc-osx-on-qemu-for-windows.txt · Last modified: 2024/02/05 12:54