qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 06/12] macfb: implement mode sense to allow display type to b


From: Laurent Vivier
Subject: Re: [PATCH 06/12] macfb: implement mode sense to allow display type to be detected
Date: Mon, 4 Oct 2021 11:20:52 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0

Le 02/10/2021 à 13:00, Mark Cave-Ayland a écrit :
> The MacOS toolbox ROM uses the monitor sense to detect the display type and 
> then
> offer a fixed set of resolutions and colour depths accordingly. Implement the
> monitor sense using information found in Apple Technical Note HW26: "Macintosh
> Quadra Built-In Video" along with some local experiments.
> 
> Since the default configuration is 640 x 480 with 8-bit colour then hardcode
> the sense register to return MACFB_DISPLAY_VGA for now.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
>  hw/display/macfb.c         | 117 ++++++++++++++++++++++++++++++++++++-
>  hw/display/trace-events    |   2 +
>  include/hw/display/macfb.h |  20 +++++++
>  3 files changed, 137 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/display/macfb.c b/hw/display/macfb.c
> index 62c2727a5b..5c95aa4a11 100644
> --- a/hw/display/macfb.c
> +++ b/hw/display/macfb.c
> @@ -28,8 +28,66 @@
>  #define MACFB_PAGE_SIZE 4096
>  #define MACFB_VRAM_SIZE (4 * MiB)
>  
> -#define DAFB_RESET      0x200
> -#define DAFB_LUT        0x213
> +#define DAFB_MODE_SENSE     0x1c
> +#define DAFB_RESET          0x200
> +#define DAFB_LUT            0x213
> +
> +
> +/*
> + * Quadra sense codes taken from Apple Technical Note HW26:
> + * "Macintosh Quadra Built-In Video". The sense codes and

https://developer.apple.com/library/archive/technotes/hw/hw_26.html

> + * extended sense codes have different meanings:
> + *
> + * Sense:
> + *    bit 2: SENSE2 (pin 10)
> + *    bit 1: SENSE1 (pin 7)
> + *    bit 0: SENSE0 (pin 4)
> + *
> + * 0 = pin tied to ground
> + * 1 = pin unconnected
> + *
> + * Extended Sense:
> + *    bit 2: pins 4-10
> + *    bit 1: pins 10-7
> + *    bit 0: pins 7-4
> + *
> + * 0 = pins tied together
> + * 1 = pins unconnected
> + *
> + * Reads from the sense register appear to be active low, i.e. a 1 indicates
> + * that the pin is tied to ground, a 0 indicates the pin is disconnected.
> + *
> + * Writes to the sense register appear to activate pulldowns i.e. a 1 enables
> + * a pulldown on a particular pin.
> + *
> + * The MacOS toolbox appears to use a series of reads and writes to first
> + * determine if extended sense is to be used, and then check which pins are
> + * tied together in order to determine the display type.
> + */
> +
> +typedef struct MacFbSense {
> +    uint8_t type;
> +    uint8_t sense;
> +    uint8_t ext_sense;
> +} MacFbSense;
> +
> +static MacFbSense macfb_sense_table[] = {
> +    { MACFB_DISPLAY_APPLE_21_COLOR, 0x0, 0 },
> +    { MACFB_DISPLAY_APPLE_PORTRAIT, 0x1, 0 },
> +    { MACFB_DISPLAY_APPLE_12_RGB, 0x2, 0 },
> +    { MACFB_DISPLAY_APPLE_2PAGE_MONO, 0x3, 0 },
> +    { MACFB_DISPLAY_NTSC_UNDERSCAN, 0x4, 0 },
> +    { MACFB_DISPLAY_NTSC_OVERSCAN, 0x4, 0 },
> +    { MACFB_DISPLAY_APPLE_12_MONO, 0x6, 0 },
> +    { MACFB_DISPLAY_APPLE_13_RGB, 0x6, 0 },
> +    { MACFB_DISPLAY_16_COLOR, 0x7, 0x3 },
> +    { MACFB_DISPLAY_PAL1_UNDERSCAN, 0x7, 0x0 },
> +    { MACFB_DISPLAY_PAL1_OVERSCAN, 0x7, 0x0 },
> +    { MACFB_DISPLAY_PAL2_UNDERSCAN, 0x7, 0x6 },
> +    { MACFB_DISPLAY_PAL2_OVERSCAN, 0x7, 0x6 },
> +    { MACFB_DISPLAY_VGA, 0x7, 0x5 },
> +    { MACFB_DISPLAY_SVGA, 0x7, 0x5 },

Perhaps it could be interesting to also have the "no external monitor" entry?
But generally not to have monitor prevents the boot of MacOS.

...

Reviewed-by: Laurent Vivier <laurent@vivier.eu>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]