[PATCH v3 0/5] hw/m68k: add working floppy controller for q800

Matt Jacobson posted 5 patches 3 weeks, 3 days ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20260702022927.46510-1-mhjacobson@me.com
Maintainers: Kevin Wolf <kwolf@redhat.com>, Hanna Reitz <hreitz@redhat.com>, Laurent Vivier <laurent@vivier.eu>
MAINTAINERS                        |    2 -
hw/block/meson.build               |    2 +-
hw/block/sony_superdrive.c         | 1032 ++++++++++++++++++++++++++++
hw/block/swim.c                    |  577 ----------------
hw/block/swim2.c                   |  711 +++++++++++++++++++
hw/block/trace-events              |   25 +-
hw/m68k/q800.c                     |    5 +-
hw/misc/mac_via.c                  |   16 +
include/hw/block/sony_superdrive.h |   55 ++
include/hw/block/swim.h            |   72 --
include/hw/block/swim2.h           |   58 ++
include/hw/m68k/q800.h             |    4 +-
include/hw/misc/mac_via.h          |    3 +
include/qemu/fifo32.h              |   31 +-
14 files changed, 1923 insertions(+), 670 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
[PATCH v3 0/5] hw/m68k: add working floppy controller for q800
Posted by Matt Jacobson 3 weeks, 3 days ago
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         | 1032 ++++++++++++++++++++++++++++
 hw/block/swim.c                    |  577 ----------------
 hw/block/swim2.c                   |  711 +++++++++++++++++++
 hw/block/trace-events              |   25 +-
 hw/m68k/q800.c                     |    5 +-
 hw/misc/mac_via.c                  |   16 +
 include/hw/block/sony_superdrive.h |   55 ++
 include/hw/block/swim.h            |   72 --
 include/hw/block/swim2.h           |   58 ++
 include/hw/m68k/q800.h             |    4 +-
 include/hw/misc/mac_via.h          |    3 +
 include/qemu/fifo32.h              |   31 +-
 14 files changed, 1923 insertions(+), 670 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.54.0
Re: [PATCH v3 0/5] hw/m68k: add working floppy controller for q800
Posted by BALATON Zoltan 3 weeks, 2 days ago
On Wed, 1 Jul 2026, Matt Jacobson wrote:
> 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>

Including a changelog about what's new in v3 here helps reviewers to 
remember what this version is about.

Regards,
BALATON Zoltan

> 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         | 1032 ++++++++++++++++++++++++++++
> hw/block/swim.c                    |  577 ----------------
> hw/block/swim2.c                   |  711 +++++++++++++++++++
> hw/block/trace-events              |   25 +-
> hw/m68k/q800.c                     |    5 +-
> hw/misc/mac_via.c                  |   16 +
> include/hw/block/sony_superdrive.h |   55 ++
> include/hw/block/swim.h            |   72 --
> include/hw/block/swim2.h           |   58 ++
> include/hw/m68k/q800.h             |    4 +-
> include/hw/misc/mac_via.h          |    3 +
> include/qemu/fifo32.h              |   31 +-
> 14 files changed, 1923 insertions(+), 670 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
>
>
Re: [PATCH v3 0/5] hw/m68k: add working floppy controller for q800
Posted by Matt Jacobson 3 weeks, 1 day ago

> On Jul 2, 2026, at 8:26 AM, BALATON Zoltan <balaton@eik.bme.hu> wrote:
> 
> On Wed, 1 Jul 2026, Matt Jacobson wrote:
> 
> Including a changelog about what's new in v3 here helps reviewers to remember what this version is about.

Agreed; I intended to do this but forgot.  Sorry!  Here we go…

Changes in v2..v3:

- fix cases where the guest could reach an assert/crash with invalid MMIOs; the errors are now handled gracefully
- use DEFINE_TYPES() in swim2.c
- fix SWIM2State usage in mac_via.h (by including header instead of forward-declaring)
- allow 720k MFM disk images in sony_drive_reset()
- clarify meaning of SONY_CMD_SET_MFM / SONY_CMD_SET_GCR with comments
- in fifo32_peek(), use ldl_le_p() instead of hand-assembling the word (and adjust fifo32_pop() similarly)
- various project style conformances

Matt