[PATCH v4 00/20] q800: add support for booting MacOS Classic - part 2

Mark Cave-Ayland posted 20 patches 6 months, 3 weeks ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20231004083806.757242-1-mark.cave-ayland@ilande.co.uk
Maintainers: Paolo Bonzini <pbonzini@redhat.com>, Gerd Hoffmann <kraxel@redhat.com>, Laurent Vivier <laurent@vivier.eu>, Kevin Wolf <kwolf@redhat.com>, Hanna Reitz <hreitz@redhat.com>
MAINTAINERS                 |   6 +
hw/audio/Kconfig            |   3 +
hw/audio/asc.c              | 727 ++++++++++++++++++++++++++++++++++++
hw/audio/meson.build        |   1 +
hw/audio/trace-events       |  10 +
hw/block/swim.c             | 261 ++++++++-----
hw/block/trace-events       |   8 +
hw/m68k/Kconfig             |   3 +
hw/m68k/q800-glue.c         |  18 +-
hw/m68k/q800.c              | 138 ++++++-
hw/misc/Kconfig             |   6 +
hw/misc/djmemc.c            | 135 +++++++
hw/misc/iosb.c              | 133 +++++++
hw/misc/mac_via.c           | 234 +++++++++++-
hw/misc/meson.build         |   2 +
hw/misc/trace-events        |  10 +
include/hw/audio/asc.h      |  86 +++++
include/hw/block/swim.h     |  21 +-
include/hw/m68k/q800-glue.h |   4 +-
include/hw/m68k/q800.h      |  11 +
include/hw/misc/djmemc.h    |  30 ++
include/hw/misc/iosb.h      |  25 ++
include/hw/misc/mac_via.h   |   3 +
23 files changed, 1769 insertions(+), 106 deletions(-)
create mode 100644 hw/audio/asc.c
create mode 100644 hw/misc/djmemc.c
create mode 100644 hw/misc/iosb.c
create mode 100644 include/hw/audio/asc.h
create mode 100644 include/hw/misc/djmemc.h
create mode 100644 include/hw/misc/iosb.h
[PATCH v4 00/20] q800: add support for booting MacOS Classic - part 2
Posted by Mark Cave-Ayland 6 months, 3 weeks ago
This series contains the remaining patches needed to allow QEMU's q800
machine to boot MacOS Classic when used in conjunction with a real
Quadra 800 ROM image. In fact with this series applied it is possible
to boot all of the following OSs:

  - MacOS 7.1 - 8.1, with or without virtual memory enabled
  - A/UX 3.0.1
  - NetBSD 9.3
  - Linux (via EMILE)

If you are ready to experience some 90s nostalgia then all you need is
to grab yourself a copy of the Quadra 800 ROM (checksum 0xf1acad13) and a
suitable install ISO as follows:

  # Prepare a PRAM image
  $ qemu-img create -f raw pram.img 256b

  # Launch QEMU with blank disk and install CDROM
  $ ./qemu-system-m68k \
      -M q800 \
      -m 128 \
      -bios Quadra800.rom \
      -drive file=pram.img,format=raw,if=mtd \
      -drive file=disk.img,media=disk,format=raw,if=none,id=hd \
      -device scsi-hd,scsi-id=0,drive=hd \
      -drive file=cdrom.iso,media=cdrom,if=none,id=cd \
      -device scsi-cd,scsi-id=3,drive=cd

And off you go! For more in-depth information about the installation process
I highly recommend the installation guide over at emaculation.com [1].
Compatibility is generally very good, and I'm pleased to report it is possible
to run one of the most popular productivity apps from the 90s [2].

I'd like to add a big thank you to all the people who have helped me work on
this series, including testing on real hardware, answering questions about
MacOS Classic internals and helping to diagnose and fix bugs in the 68k
emulation. In particular thanks go to Laurent Vivier, Finn Thain, Howard
Spoelstra, Volker Rümelin, Richard Henderson, Martin Husemann, Rin Okuyama,
Elliot Nunn, and SolraBizna.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>

[1] https://www.emaculation.com/doku.php/qemu
[2] https://www.youtube.com/watch?v=yI21gURQ1Ew


v4:
- Rebase onto master
- Add R-B tag from Zoltan to patch 5
- Adjust AUD_register_card() and add machine audiodev property for ASC to reflect Paolo's
  recent audiodev changes

v3:
- Rebase onto master
- Add R-B tags from Laurent
- Squash fixes from Volker into patch 7 ("audio: add Apple Sound Chip (ASC) emulation")
- Change iwmregs from uint16_t to uint8_t in patch 12 ("swim: split into separate IWM
  and ISM register blocks")

v2:
- Rebase onto master
- Add R-B tags from Phil and Laurent
- Improve ASC logic for generating interrupts when FIFO underflow occurs
- Rework ASC silence generation logic similar to Volker's original proposal
- Update A/UX timer calibration hack to reflect the change of accesses now that
  #360 is resolved


Mark Cave-Ayland (20):
  q800-glue.c: convert to Resettable interface
  q800: add djMEMC memory controller
  q800: add machine id register
  q800: implement additional machine id bits on VIA1 port A
  q800: add IOSB subsystem
  q800: allow accesses to RAM area even if less memory is available
  audio: add Apple Sound Chip (ASC) emulation
  asc: generate silence if FIFO empty but engine still running
  q800: add Apple Sound Chip (ASC) audio to machine
  q800: add easc bool machine class property to switch between ASC and
    EASC
  swim: add trace events for IWM and ISM registers
  swim: split into separate IWM and ISM register blocks
  swim: update IWM/ISM register block decoding
  mac_via: work around underflow in TimeDBRA timing loop in SETUPTIMEK
  mac_via: workaround NetBSD ADB bus enumeration issue
  mac_via: implement ADB_STATE_IDLE state if shift register in input
    mode
  mac_via: always clear ADB interrupt when switching to A/UX mode
  q800: add ESCC alias at 0xc000
  q800: add alias for MacOS toolbox ROM at 0x40000000
  mac_via: extend timer calibration hack to work with A/UX

 MAINTAINERS                 |   6 +
 hw/audio/Kconfig            |   3 +
 hw/audio/asc.c              | 727 ++++++++++++++++++++++++++++++++++++
 hw/audio/meson.build        |   1 +
 hw/audio/trace-events       |  10 +
 hw/block/swim.c             | 261 ++++++++-----
 hw/block/trace-events       |   8 +
 hw/m68k/Kconfig             |   3 +
 hw/m68k/q800-glue.c         |  18 +-
 hw/m68k/q800.c              | 138 ++++++-
 hw/misc/Kconfig             |   6 +
 hw/misc/djmemc.c            | 135 +++++++
 hw/misc/iosb.c              | 133 +++++++
 hw/misc/mac_via.c           | 234 +++++++++++-
 hw/misc/meson.build         |   2 +
 hw/misc/trace-events        |  10 +
 include/hw/audio/asc.h      |  86 +++++
 include/hw/block/swim.h     |  21 +-
 include/hw/m68k/q800-glue.h |   4 +-
 include/hw/m68k/q800.h      |  11 +
 include/hw/misc/djmemc.h    |  30 ++
 include/hw/misc/iosb.h      |  25 ++
 include/hw/misc/mac_via.h   |   3 +
 23 files changed, 1769 insertions(+), 106 deletions(-)
 create mode 100644 hw/audio/asc.c
 create mode 100644 hw/misc/djmemc.c
 create mode 100644 hw/misc/iosb.c
 create mode 100644 include/hw/audio/asc.h
 create mode 100644 include/hw/misc/djmemc.h
 create mode 100644 include/hw/misc/iosb.h

-- 
2.39.2


Re: [PATCH v4 00/20] q800: add support for booting MacOS Classic - part 2
Posted by Laurent Vivier 6 months, 3 weeks ago
Le 04/10/2023 à 10:37, Mark Cave-Ayland a écrit :
> This series contains the remaining patches needed to allow QEMU's q800
> machine to boot MacOS Classic when used in conjunction with a real
> Quadra 800 ROM image. In fact with this series applied it is possible
> to boot all of the following OSs:
> 
>    - MacOS 7.1 - 8.1, with or without virtual memory enabled
>    - A/UX 3.0.1
>    - NetBSD 9.3
>    - Linux (via EMILE)
> 
> If you are ready to experience some 90s nostalgia then all you need is
> to grab yourself a copy of the Quadra 800 ROM (checksum 0xf1acad13) and a
> suitable install ISO as follows:
> 
>    # Prepare a PRAM image
>    $ qemu-img create -f raw pram.img 256b
> 
>    # Launch QEMU with blank disk and install CDROM
>    $ ./qemu-system-m68k \
>        -M q800 \
>        -m 128 \
>        -bios Quadra800.rom \
>        -drive file=pram.img,format=raw,if=mtd \
>        -drive file=disk.img,media=disk,format=raw,if=none,id=hd \
>        -device scsi-hd,scsi-id=0,drive=hd \
>        -drive file=cdrom.iso,media=cdrom,if=none,id=cd \
>        -device scsi-cd,scsi-id=3,drive=cd
> 
> And off you go! For more in-depth information about the installation process
> I highly recommend the installation guide over at emaculation.com [1].
> Compatibility is generally very good, and I'm pleased to report it is possible
> to run one of the most popular productivity apps from the 90s [2].
> 
> I'd like to add a big thank you to all the people who have helped me work on
> this series, including testing on real hardware, answering questions about
> MacOS Classic internals and helping to diagnose and fix bugs in the 68k
> emulation. In particular thanks go to Laurent Vivier, Finn Thain, Howard
> Spoelstra, Volker Rümelin, Richard Henderson, Martin Husemann, Rin Okuyama,
> Elliot Nunn, and SolraBizna.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> 
> [1] https://www.emaculation.com/doku.php/qemu
> [2] https://www.youtube.com/watch?v=yI21gURQ1Ew
> 
> 
> v4:
> - Rebase onto master
> - Add R-B tag from Zoltan to patch 5
> - Adjust AUD_register_card() and add machine audiodev property for ASC to reflect Paolo's
>    recent audiodev changes
> 
> v3:
> - Rebase onto master
> - Add R-B tags from Laurent
> - Squash fixes from Volker into patch 7 ("audio: add Apple Sound Chip (ASC) emulation")
> - Change iwmregs from uint16_t to uint8_t in patch 12 ("swim: split into separate IWM
>    and ISM register blocks")
> 
> v2:
> - Rebase onto master
> - Add R-B tags from Phil and Laurent
> - Improve ASC logic for generating interrupts when FIFO underflow occurs
> - Rework ASC silence generation logic similar to Volker's original proposal
> - Update A/UX timer calibration hack to reflect the change of accesses now that
>    #360 is resolved
> 
> 
> Mark Cave-Ayland (20):
>    q800-glue.c: convert to Resettable interface
>    q800: add djMEMC memory controller
>    q800: add machine id register
>    q800: implement additional machine id bits on VIA1 port A
>    q800: add IOSB subsystem
>    q800: allow accesses to RAM area even if less memory is available
>    audio: add Apple Sound Chip (ASC) emulation
>    asc: generate silence if FIFO empty but engine still running
>    q800: add Apple Sound Chip (ASC) audio to machine
>    q800: add easc bool machine class property to switch between ASC and
>      EASC
>    swim: add trace events for IWM and ISM registers
>    swim: split into separate IWM and ISM register blocks
>    swim: update IWM/ISM register block decoding
>    mac_via: work around underflow in TimeDBRA timing loop in SETUPTIMEK
>    mac_via: workaround NetBSD ADB bus enumeration issue
>    mac_via: implement ADB_STATE_IDLE state if shift register in input
>      mode
>    mac_via: always clear ADB interrupt when switching to A/UX mode
>    q800: add ESCC alias at 0xc000
>    q800: add alias for MacOS toolbox ROM at 0x40000000
>    mac_via: extend timer calibration hack to work with A/UX
> 
>   MAINTAINERS                 |   6 +
>   hw/audio/Kconfig            |   3 +
>   hw/audio/asc.c              | 727 ++++++++++++++++++++++++++++++++++++
>   hw/audio/meson.build        |   1 +
>   hw/audio/trace-events       |  10 +
>   hw/block/swim.c             | 261 ++++++++-----
>   hw/block/trace-events       |   8 +
>   hw/m68k/Kconfig             |   3 +
>   hw/m68k/q800-glue.c         |  18 +-
>   hw/m68k/q800.c              | 138 ++++++-
>   hw/misc/Kconfig             |   6 +
>   hw/misc/djmemc.c            | 135 +++++++
>   hw/misc/iosb.c              | 133 +++++++
>   hw/misc/mac_via.c           | 234 +++++++++++-
>   hw/misc/meson.build         |   2 +
>   hw/misc/trace-events        |  10 +
>   include/hw/audio/asc.h      |  86 +++++
>   include/hw/block/swim.h     |  21 +-
>   include/hw/m68k/q800-glue.h |   4 +-
>   include/hw/m68k/q800.h      |  11 +
>   include/hw/misc/djmemc.h    |  30 ++
>   include/hw/misc/iosb.h      |  25 ++
>   include/hw/misc/mac_via.h   |   3 +
>   23 files changed, 1769 insertions(+), 106 deletions(-)
>   create mode 100644 hw/audio/asc.c
>   create mode 100644 hw/misc/djmemc.c
>   create mode 100644 hw/misc/iosb.c
>   create mode 100644 include/hw/audio/asc.h
>   create mode 100644 include/hw/misc/djmemc.h
>   create mode 100644 include/hw/misc/iosb.h
> 

Applied to my q800-for-8.2 branch.

Thanks,
LAurent