1
2
3
4
5
6
7
8
9
10
11
12
13#ifndef MACFB_H
14#define MACFB_H
15
16#include "exec/memory.h"
17#include "hw/irq.h"
18#include "ui/console.h"
19#include "qemu/timer.h"
20#include "qom/object.h"
21
22typedef enum {
23 MACFB_DISPLAY_APPLE_21_COLOR = 0,
24 MACFB_DISPLAY_APPLE_PORTRAIT = 1,
25 MACFB_DISPLAY_APPLE_12_RGB = 2,
26 MACFB_DISPLAY_APPLE_2PAGE_MONO = 3,
27 MACFB_DISPLAY_NTSC_UNDERSCAN = 4,
28 MACFB_DISPLAY_NTSC_OVERSCAN = 5,
29 MACFB_DISPLAY_APPLE_12_MONO = 6,
30 MACFB_DISPLAY_APPLE_13_RGB = 7,
31 MACFB_DISPLAY_16_COLOR = 8,
32 MACFB_DISPLAY_PAL1_UNDERSCAN = 9,
33 MACFB_DISPLAY_PAL1_OVERSCAN = 10,
34 MACFB_DISPLAY_PAL2_UNDERSCAN = 11,
35 MACFB_DISPLAY_PAL2_OVERSCAN = 12,
36 MACFB_DISPLAY_VGA = 13,
37 MACFB_DISPLAY_SVGA = 14,
38} MacfbDisplayType;
39
40typedef struct MacFbMode {
41 uint8_t type;
42 uint8_t depth;
43 uint32_t mode_ctrl1;
44 uint32_t mode_ctrl2;
45 uint32_t width;
46 uint32_t height;
47 uint32_t stride;
48 uint32_t offset;
49} MacFbMode;
50
51#define MACFB_NUM_REGS 8
52
53typedef struct MacfbState {
54 MemoryRegion mem_vram;
55 MemoryRegion mem_ctrl;
56 QemuConsole *con;
57
58 uint8_t *vram;
59 uint32_t vram_bit_mask;
60 uint32_t palette_current;
61 uint8_t color_palette[256 * 3];
62 uint32_t width, height;
63 uint8_t depth;
64 uint8_t type;
65
66 uint32_t regs[MACFB_NUM_REGS];
67 MacFbMode *mode;
68
69 uint32_t irq_state;
70 uint32_t irq_mask;
71 QEMUTimer *vbl_timer;
72 qemu_irq irq;
73} MacfbState;
74
75#define TYPE_MACFB "sysbus-macfb"
76OBJECT_DECLARE_SIMPLE_TYPE(MacfbSysBusState, MACFB)
77
78struct MacfbSysBusState {
79 SysBusDevice busdev;
80
81 MacfbState macfb;
82};
83
84#define TYPE_NUBUS_MACFB "nubus-macfb"
85OBJECT_DECLARE_TYPE(MacfbNubusState, MacfbNubusDeviceClass, NUBUS_MACFB)
86
87struct MacfbNubusDeviceClass {
88 DeviceClass parent_class;
89
90 DeviceRealize parent_realize;
91 DeviceUnrealize parent_unrealize;
92};
93
94
95struct MacfbNubusState {
96 NubusDevice busdev;
97
98 MacfbState macfb;
99};
100
101#endif
102