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