Implement the SWIM2 floppy controller and SuperDrive for the q800 machine.
Reading and writing work, and booting a system disk works.
Both GCR and MFM paths work.
Tested with the Quadra 800 ROM running System 7 and A/UX 3.x.
Whole-disk formatting/duplication does not yet work.
Example usage:
$ qemu-system-m68k \
-machine q800 \
-m 128 \
-bios "Quadra800.ROM" \
-nodefaults \
-drive if=mtd,file="pram.img",format=raw \
-drive if=floppy \
-drive if=floppy \
-drive if=scsi,media=disk,file="harddisk.img",format=raw \
-drive if=scsi,media=cdrom \
-nic user,model=dp83932 \
-audio none \
-display cocoa \
-name "Macintosh Quadra 800"
(To populate the floppy drive at boot, use
`-drive if=floppy,file="floppy.img",format=raw`. However, note that the
Macintosh ROM will eject non-bootable floppies on boot.)
The Sony drive emulator takes raw images and will generate the GCR/MFM
encoding on the fly. Here are a couple sample images (HFS) to play with:
<https://mjacobson.net/files/mac-disks/floppy-800.img>
<https://mjacobson.net/files/mac-disks/floppy-1440.img>
Matt Jacobson (5):
hw/block: add Sony/Apple "SuperDrive" diskette drive
fifo32: add fifo32_peek()
hw/block: add SWIM2 floppy controller for q800
hw/m68k: add working floppy controller for q800
hw/block: remove unused SWIM1 floppy controller stub
MAINTAINERS | 2 -
hw/block/meson.build | 2 +-
hw/block/sony_superdrive.c | 994 +++++++++++++++++++++++++++++
hw/block/swim.c | 577 -----------------
hw/block/swim2.c | 722 +++++++++++++++++++++
hw/block/trace-events | 25 +-
hw/m68k/q800.c | 5 +-
hw/misc/mac_via.c | 16 +
include/hw/block/sony_superdrive.h | 56 ++
include/hw/block/swim.h | 72 ---
include/hw/block/swim2.h | 60 ++
include/hw/m68k/q800.h | 4 +-
include/hw/misc/mac_via.h | 4 +
include/qemu/fifo32.h | 25 +
14 files changed, 1901 insertions(+), 663 deletions(-)
create mode 100644 hw/block/sony_superdrive.c
delete mode 100644 hw/block/swim.c
create mode 100644 hw/block/swim2.c
create mode 100644 include/hw/block/sony_superdrive.h
delete mode 100644 include/hw/block/swim.h
create mode 100644 include/hw/block/swim2.h
--
2.53.0