| /* | |
| * 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 "system/memory.h" | |
| #include "hw/core/irq.h" | |
| #include "hw/nubus/nubus.h" | |
| #include "hw/core/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]; | |
| const 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 |