Merge tag 'v9.0.0-rc3'
[qemu/ar7.git] / include / hw / display / macfb.h
blob27cebefc9e712a55c3a05a3a362a5b0da7df1158
1 /*
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.
13 #ifndef MACFB_H
14 #define MACFB_H
16 #include "exec/memory.h"
17 #include "hw/irq.h"
18 #include "hw/nubus/nubus.h"
19 #include "hw/sysbus.h"
20 #include "ui/console.h"
21 #include "qemu/timer.h"
23 typedef enum {
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,
39 } MacfbDisplayType;
41 typedef struct MacFbMode {
42 uint8_t type;
43 uint8_t depth;
44 uint32_t mode_ctrl1;
45 uint32_t mode_ctrl2;
46 uint32_t width;
47 uint32_t height;
48 uint32_t stride;
49 uint32_t offset;
50 } 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;
58 QemuConsole *con;
60 uint8_t *vram;
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 */
65 uint8_t depth;
66 uint8_t type;
68 uint32_t regs[MACFB_NUM_REGS];
69 MacFbMode *mode;
71 QEMUTimer *vbl_timer;
72 qemu_irq irq;
73 } MacfbState;
75 #define TYPE_MACFB "sysbus-macfb"
76 OBJECT_DECLARE_SIMPLE_TYPE(MacfbSysBusState, MACFB)
78 struct MacfbSysBusState {
79 SysBusDevice busdev;
81 MacfbState macfb;
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 {
96 NubusDevice busdev;
98 MacfbState macfb;
101 #endif