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-ayl...@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 <laur...@vivier.eu>