/* * QEMU Motorola 680x0 Macintosh Video Card Emulation * Copyright (c) 2012-2018 Laurent Vivier * * some parts from QEMU G364 framebuffer Emulator. * Copyright (c) 2007-2011 Herve Poussineau * * This work is licensed under the terms of the GNU GPL, version 2 or later. * See the COPYING file in the top-level directory. * */ #ifndef MACFB_H #define MACFB_H #include "exec/memory.h" #include "hw/irq.h" #include "hw/nubus/nubus.h" #include "hw/sysbus.h" #include "ui/console.h" #include "qemu/timer.h" typedef enum { MACFB_DISPLAY_APPLE_21_COLOR = 0, MACFB_DISPLAY_APPLE_PORTRAIT = 1, MACFB_DISPLAY_APPLE_12_RGB = 2, MACFB_DISPLAY_APPLE_2PAGE_MONO = 3, MACFB_DISPLAY_NTSC_UNDERSCAN = 4, MACFB_DISPLAY_NTSC_OVERSCAN = 5, MACFB_DISPLAY_APPLE_12_MONO = 6, MACFB_DISPLAY_APPLE_13_RGB = 7, MACFB_DISPLAY_16_COLOR = 8, MACFB_DISPLAY_PAL1_UNDERSCAN = 9, MACFB_DISPLAY_PAL1_OVERSCAN = 10, MACFB_DISPLAY_PAL2_UNDERSCAN = 11, MACFB_DISPLAY_PAL2_OVERSCAN = 12, MACFB_DISPLAY_VGA = 13, MACFB_DISPLAY_SVGA = 14, } MacfbDisplayType; typedef struct MacFbMode { uint8_t type; uint8_t depth; uint32_t mode_ctrl1; uint32_t mode_ctrl2; uint32_t width; uint32_t height; uint32_t stride; uint32_t offset; } MacFbMode; #define MACFB_CTRL_TOPADDR 0x200 #define MACFB_NUM_REGS (MACFB_CTRL_TOPADDR / sizeof(uint32_t)) typedef struct MacfbState { MemoryRegion mem_vram; MemoryRegion mem_ctrl; QemuConsole *con; uint8_t *vram; uint32_t vram_bit_mask; uint32_t palette_current; uint8_t color_palette[256 * 3]; uint32_t width, height; /* in pixels */ uint8_t depth; uint8_t type; uint32_t regs[MACFB_NUM_REGS]; MacFbMode *mode; QEMUTimer *vbl_timer; qemu_irq irq; } MacfbState; #define TYPE_MACFB "sysbus-macfb" OBJECT_DECLARE_SIMPLE_TYPE(MacfbSysBusState, MACFB) struct MacfbSysBusState { SysBusDevice busdev; MacfbState macfb; }; #define TYPE_NUBUS_MACFB "nubus-macfb" OBJECT_DECLARE_TYPE(MacfbNubusState, MacfbNubusDeviceClass, NUBUS_MACFB) struct MacfbNubusDeviceClass { DeviceClass parent_class; DeviceRealize parent_realize; DeviceUnrealize parent_unrealize; }; struct MacfbNubusState { NubusDevice busdev; MacfbState macfb; }; #endif