A short list of instructions
qemu-system-aarch64 \ -machine raspi3b -m 1G -kernel kernel8.img -initrd initramfs8 -dtb bcm2710-rpi-3-b.dtb \ -sd 2024-10-22-raspios-bullseye-armhf.img \ -cpu cortex-a53 \ -smp 4 \ -append "root=/dev/mmcblk0p2 rootwait" \ -usb \ -serial stdio \ -usbdevice keyboard \ -usbdevice mouse \ -netdev user,id=net0,hostfwd=tcp::2222-:22 -device usb-net,netdev=net0
NB You will probably get a warning about the 'Image format was not specified…'. format=raw is meant to solve this after the filename, but it gave me an error. I ignore this warning, YMMV.
Notes
I can't remember the number of sites I went around picking bits and pieces up to make this work. Thanks to all who went before (shoulders of giants &c.). Importantly, it only works with bullseye. It might work with the 64bit version, but I needed the 32bit armhf. There are other solution on macos for 64 bit Arm operating systems. I use UTM for those, but as of May 2025 it does not support armhf.