NetBSD-mac68k under qemu

From Wikistix

qemu m68k emulation has come a long way, and can now boot and run NetBSD mac68k successfully, albeit with a few limitations. The below was run on a NetBSD amd64 box, with all the needed pkgsrc tools and libraries.

Clone qemu github repo fork & build[edit]

The support has not yet been upstreamed into the main qemu repository, so you need to check out the latest branch from mcayland/qemu, which as of 2023-02-11 is q800.upstream3.

git clone -b q800.upstream3 https://github.com/mcayland/qemu.git q800-upstream3
cd q800-upstream3
./configure --target-list=m68k-softmmu --enable-gtk --enable-sdl
gmake

I'm not sure why, but there are also gitlab repos with the same path, but while there appear to be more recent changes to other code, the q800.upstream3 branch is missing.

It's also required to disable PaX - I've just disabled all three flags, perhaps only a subset is required?

paxctl +agm build/qemu-system-m68k

Grab the Apple Macintosh Quadra 800 ROM image[edit]

The emulation specifically targets the Quadra 800, so you need that specific ROM. It is available in a ROM collection at macintoshrepository.org.

Configure host networking[edit]

I chose to use a tap(4) device via a bridge(4) since that is what I have been using for other various emulators. You may wish to use something else. From my /etc/ifconfig.bridge0:

ifconfig tap0 create up
brconfig bridge0 add alc0 add tap0 up

Create PRAM & disk images[edit]

PRAM must be exactly 256 bytes. Size the disk as you wish, I've opted for 1GiB raw.

dd if=/dev/zero of=pram.img bs=256 count=1
dd if=/dev/zero of=macdisk.img bs=64k count=$((16*1024))

Starting qemu[edit]

Through trial and error, I've found that the maximum memory that qemu will support for the emulated machine is 355MiB, any more and the ROM fails to initialise. Furthermore, NetBSD fails to recognise more than 256MiB.

I have also found that while graphical console output works fine, I am unable to have the NetBSD kernel recognise keystrokes (ADB issue?). However, serial console works fine, and was sufficient for completing the NetBSD installation.

Note that the mac address of the ethernet must also have the prefix 08:00:07 to be recognised - this is enforced by qemu, and anything else is overwritten.

qemu-system-m68k \
        -M q800 -cpu m68040 -m 256 -bios Quadra800.rom \
        -rtc base=localtime \
        -g 1152x870x8 \
        -boot d \
        -drive file=pram-macos.img,format=raw,if=mtd \
        -device scsi-hd,scsi-id=0,drive=hd0 \
        -drive id=hd0,file=MacHD8.1.img,media=disk,format=raw,if=none \
        -device scsi-hd,scsi-id=1,drive=hd1 \
        -drive id=hd1,file=netbsd-10.img,media=disk,format=raw,if=none \
        -device scsi-cd,scsi-id=3,drive=cd1 \
        -drive id=cd1,file=MacOS_81.toast,media=cdrom,if=none \
        -nic tap,model=dp83932,ifname=tap3,script=no,downscript=no,mac=08:00:07:12:34:56 \
        -serial mon:stdio

Install MacOS[edit]

Install MacOS 8.1. I've also tried MacOS 7.6, but it does not appear to recognise configured SCSI hard disks. I chose to create a 1GiB file to use as a raw hard disk image.

See Also[edit]


Misinformation found herein copyright Paul Ripke (aka “stix”) stixpjr@gmail.com.