2 * QEMU Motorola 680x0 Macintosh Video Card Emulation
3 * Copyright (c) 2012-2018 Laurent Vivier
5 * some parts from QEMU G364 framebuffer Emulator.
6 * Copyright (c) 2007-2011 Herve Poussineau
8 * This work is licensed under the terms of the GNU GPL, version 2 or later.
9 * See the COPYING file in the top-level directory.
16 #include "exec/memory.h"
18 #include "hw/nubus/nubus.h"
19 #include "hw/sysbus.h"
20 #include "ui/console.h"
21 #include "qemu/timer.h"
24 MACFB_DISPLAY_APPLE_21_COLOR
= 0,
25 MACFB_DISPLAY_APPLE_PORTRAIT
= 1,
26 MACFB_DISPLAY_APPLE_12_RGB
= 2,
27 MACFB_DISPLAY_APPLE_2PAGE_MONO
= 3,
28 MACFB_DISPLAY_NTSC_UNDERSCAN
= 4,
29 MACFB_DISPLAY_NTSC_OVERSCAN
= 5,
30 MACFB_DISPLAY_APPLE_12_MONO
= 6,
31 MACFB_DISPLAY_APPLE_13_RGB
= 7,
32 MACFB_DISPLAY_16_COLOR
= 8,
33 MACFB_DISPLAY_PAL1_UNDERSCAN
= 9,
34 MACFB_DISPLAY_PAL1_OVERSCAN
= 10,
35 MACFB_DISPLAY_PAL2_UNDERSCAN
= 11,
36 MACFB_DISPLAY_PAL2_OVERSCAN
= 12,
37 MACFB_DISPLAY_VGA
= 13,
38 MACFB_DISPLAY_SVGA
= 14,
41 typedef struct MacFbMode
{
52 #define MACFB_CTRL_TOPADDR 0x200
53 #define MACFB_NUM_REGS (MACFB_CTRL_TOPADDR / sizeof(uint32_t))
55 typedef struct MacfbState
{
56 MemoryRegion mem_vram
;
57 MemoryRegion mem_ctrl
;
61 uint32_t vram_bit_mask
;
62 uint32_t palette_current
;
63 uint8_t color_palette
[256 * 3];
64 uint32_t width
, height
; /* in pixels */
68 uint32_t regs
[MACFB_NUM_REGS
];
75 #define TYPE_MACFB "sysbus-macfb"
76 OBJECT_DECLARE_SIMPLE_TYPE(MacfbSysBusState
, MACFB
)
78 struct MacfbSysBusState
{
84 #define TYPE_NUBUS_MACFB "nubus-macfb"
85 OBJECT_DECLARE_TYPE(MacfbNubusState
, MacfbNubusDeviceClass
, NUBUS_MACFB
)
87 struct MacfbNubusDeviceClass
{
88 DeviceClass parent_class
;
90 DeviceRealize parent_realize
;
91 DeviceUnrealize parent_unrealize
;
95 struct MacfbNubusState
{