1 /* 2 * QEMU Motorola 680x0 Macintosh Video Card Emulation 3 * Copyright (c) 2012-2018 Laurent Vivier 4 * 5 * some parts from QEMU G364 framebuffer Emulator. 6 * Copyright (c) 2007-2011 Herve Poussineau 7 * 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. 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 22 typedef 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 40 typedef 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 53 typedef 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; /* in pixels */ 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" 76 OBJECT_DECLARE_SIMPLE_TYPE(MacfbSysBusState, MACFB) 77 78 struct MacfbSysBusState { 79 SysBusDevice busdev; 80 81 MacfbState macfb; 82 }; 83 84 #define TYPE_NUBUS_MACFB "nubus-macfb" 85 OBJECT_DECLARE_TYPE(MacfbNubusState, MacfbNubusDeviceClass, NUBUS_MACFB) 86 87 struct MacfbNubusDeviceClass { 88 DeviceClass parent_class; 89 90 DeviceRealize parent_realize; 91 DeviceUnrealize parent_unrealize; 92 }; 93 94 95 struct MacfbNubusState { 96 NubusDevice busdev; 97 98 MacfbState macfb; 99 }; 100 101 #endif 102