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 "hw/nubus/nubus.h" 19 #include "hw/sysbus.h" 20 #include "ui/console.h" 21 #include "qemu/timer.h" 22 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; 40 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; 51 52 #define MACFB_CTRL_TOPADDR 0x200 53 #define MACFB_NUM_REGS (MACFB_CTRL_TOPADDR / sizeof(uint32_t)) 54 55 typedef struct MacfbState { 56 MemoryRegion mem_vram; 57 MemoryRegion mem_ctrl; 58 QemuConsole *con; 59 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; 67 68 uint32_t regs[MACFB_NUM_REGS]; 69 MacFbMode *mode; 70 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