[PATCH v3 00/13] macfb: fixes for booting MacOS

Mark Cave-Ayland posted 13 patches 2 years, 6 months ago
Test checkpatch passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20211007093407.3329-1-mark.cave-ayland@ilande.co.uk
Maintainers: Laurent Vivier <laurent@vivier.eu>
There is a newer version of this series
hw/display/macfb.c         | 386 ++++++++++++++++++++++++++++++++++---
hw/display/trace-events    |   7 +
hw/m68k/q800.c             |  23 ++-
include/hw/display/macfb.h |  43 +++++
4 files changed, 429 insertions(+), 30 deletions(-)
[PATCH v3 00/13] macfb: fixes for booting MacOS
Posted by Mark Cave-Ayland 2 years, 6 months ago
This is the next set of patches to allow users to boot MacOS in QEMU's
q800 machine.

Patches 1 to 4 are fixes for existing bugs that I discovered whilst
developing the remainder of the patchset whilst patch 5 simplifies the
registration of the framebuffer RAM.

Patch 6 adds trace events to the framebuffer register accesses. The
framebuffer registers are not officially documented, so the macfb
device changes here are based upon reading of Linux/NetBSD source code,
using gdbstub during the MacOS toolbox ROM initialisation, and changing
the framebuffer size/depth within MacOS itself with these trace events
enabled.

Patches 7 and 8 implement the mode sense logic documented in Apple
Technical Note HW26 "Macintosh Quadra Built-In Video" and configure the
default display type to be VGA.

Patch 9 implements the common monitor modes used for VGA at 640x480 and
800x600 for 1, 2, 4, 8 and 24-bit depths and also the Apple 21" color
monitor at 1152x870 with 8-bit depth.

Patches 10 and 11 fix up errors in the 1-bit and 24-bit pixel encodings
discovered when testing these color depths in MacOS.

Patch 12 adds a timer to implement the 60.15Hz VBL interrupt which is
required for MacOS to process mouse movements, whilst patch 13 wires the
same interrupt to a dedicated pin on VIA2 reserved for the video
interrupt on the Quadra 800.

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


v3:
- Rebase onto master
- Add Laurent's code for displaying supported display modes as an error hint in patch 9
  and update the patch description
- Fix typo in patch 8 description: 32-bit -> 24-bit
- Split Error API changes from patch 1 into a new patch 2

v2:
- Rebase onto master
- Add R-B tags from Zoltan, Philippe and Laurent
- Rework macfb_common_realize() to return a bool in patch 1
- Add Fixes tag to patch 2
- Use Laurent's suggested change for s->current_palette (slightly modified) in patch 3
- Change size trace-events parameter to unsigned int in patch 5
- Add assert() as suggested by Philippe in patch 7
- Move calculation of next VBL time into a separate macfb_next_vbl() function in patch 11

Mark Cave-Ayland (13):
  macfb: handle errors that occur during realize
  macfb: update macfb.c to use the Error API best practices
  macfb: fix invalid object reference in macfb_common_realize()
  macfb: fix overflow of color_palette array
  macfb: use memory_region_init_ram() in macfb_common_realize() for the
    framebuffer
  macfb: add trace events for reading and writing the control registers
  macfb: implement mode sense to allow display type to be detected
  macfb: add qdev property to specify display type
  macfb: add common monitor modes supported by the MacOS toolbox ROM
  macfb: fix up 1-bit pixel encoding
  macfb: fix 24-bit RGB pixel encoding
  macfb: add vertical blank interrupt
  q800: wire macfb IRQ to separate video interrupt on VIA2

 hw/display/macfb.c         | 386 ++++++++++++++++++++++++++++++++++---
 hw/display/trace-events    |   7 +
 hw/m68k/q800.c             |  23 ++-
 include/hw/display/macfb.h |  43 +++++
 4 files changed, 429 insertions(+), 30 deletions(-)

-- 
2.20.1