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_CTRL_TOPADDR 0x200
52#define MACFB_NUM_REGS (MACFB_CTRL_TOPADDR / sizeof(uint32_t))
53
54typedef struct MacfbState {
55 MemoryRegion mem_vram;
56 MemoryRegion mem_ctrl;
57 QemuConsole *con;
58
59 uint8_t *vram;
60 uint32_t vram_bit_mask;
61 uint32_t palette_current;
62 uint8_t color_palette[256 * 3];
63 uint32_t width, height;
64 uint8_t depth;
65 uint8_t type;
66
67 uint32_t regs[MACFB_NUM_REGS];
68 MacFbMode *mode;
69
70 QEMUTimer *vbl_timer;
71 qemu_irq irq;
72} MacfbState;
73
74#define TYPE_MACFB "sysbus-macfb"
75OBJECT_DECLARE_SIMPLE_TYPE(MacfbSysBusState, MACFB)
76
77struct MacfbSysBusState {
78 SysBusDevice busdev;
79
80 MacfbState macfb;
81};
82
83#define TYPE_NUBUS_MACFB "nubus-macfb"
84OBJECT_DECLARE_TYPE(MacfbNubusState, MacfbNubusDeviceClass, NUBUS_MACFB)
85
86struct MacfbNubusDeviceClass {
87 DeviceClass parent_class;
88
89 DeviceRealize parent_realize;
90 DeviceUnrealize parent_unrealize;
91};
92
93
94struct MacfbNubusState {
95 NubusDevice busdev;
96
97 MacfbState macfb;
98};
99
100#endif
101