236 lines
5.2 KiB
C
236 lines
5.2 KiB
C
/*
|
|
* 86Box A hypervisor and IBM PC system emulator that specializes in
|
|
* running old operating systems and software designed for IBM
|
|
* PC systems and compatibles from 1981 through fairly recent
|
|
* system designs based on the PCI bus.
|
|
*
|
|
* This file is part of the 86Box distribution.
|
|
*
|
|
* IBM XGA emulation.
|
|
*
|
|
*
|
|
*
|
|
* Authors: TheCollector1995.
|
|
*
|
|
* Copyright 2022 TheCollector1995.
|
|
*/
|
|
#ifndef VIDEO_XGA_H
|
|
#define VIDEO_XGA_H
|
|
|
|
#include <86box/rom.h>
|
|
|
|
typedef struct xga_hwcursor_t {
|
|
int ena;
|
|
int x;
|
|
int y;
|
|
int xoff;
|
|
int yoff;
|
|
int cur_xsize;
|
|
int cur_ysize;
|
|
uint32_t addr;
|
|
} xga_hwcursor_t;
|
|
|
|
typedef struct xga_t {
|
|
mem_mapping_t memio_mapping;
|
|
mem_mapping_t linear_mapping;
|
|
mem_mapping_t video_mapping;
|
|
rom_t bios_rom;
|
|
rom_t vga_bios_rom;
|
|
xga_hwcursor_t hwcursor;
|
|
xga_hwcursor_t hwcursor_latch;
|
|
PALETTE extpal;
|
|
|
|
uint8_t test;
|
|
uint8_t test2;
|
|
uint8_t atest[2];
|
|
uint8_t testpixel;
|
|
|
|
uint8_t pos_regs[8];
|
|
uint8_t disp_addr;
|
|
uint8_t cfg_reg;
|
|
uint8_t instance;
|
|
uint8_t op_mode;
|
|
uint8_t aperture_cntl;
|
|
uint8_t ap_idx;
|
|
uint8_t access_mode;
|
|
uint8_t regs[0x100];
|
|
uint8_t regs_idx;
|
|
uint8_t hwc_hotspot_x;
|
|
uint8_t hwc_hotspot_y;
|
|
uint8_t disp_cntl_1;
|
|
uint8_t disp_cntl_2;
|
|
uint8_t clk_sel_1;
|
|
uint8_t clk_sel_2;
|
|
uint8_t hwc_control;
|
|
uint8_t bus_arb;
|
|
uint8_t isa_pos_enable;
|
|
uint8_t hwcursor_oddeven;
|
|
uint8_t cfg_reg_instance;
|
|
uint8_t rowcount;
|
|
uint8_t pal_idx;
|
|
uint8_t pal_idx_prefetch;
|
|
uint8_t pal_seq;
|
|
uint8_t pal_mask;
|
|
uint8_t pal_r;
|
|
uint8_t pal_r_prefetch;
|
|
uint8_t pal_g;
|
|
uint8_t pal_g_prefetch;
|
|
uint8_t pal_b;
|
|
uint8_t pal_b_prefetch;
|
|
uint8_t sprite_data[1024];
|
|
uint8_t scrollcache;
|
|
uint8_t border_color;
|
|
uint8_t direct_color;
|
|
uint8_t dma_channel;
|
|
uint8_t instance_isa;
|
|
uint8_t instance_num;
|
|
uint8_t ext_mem_addr;
|
|
uint8_t *vram;
|
|
uint8_t *changedvram;
|
|
|
|
int16_t hwc_pos_x;
|
|
int16_t hwc_pos_y;
|
|
|
|
uint16_t pos_idx;
|
|
uint16_t htotal;
|
|
uint16_t sprite_idx;
|
|
uint16_t sprite_idx_prefetch;
|
|
uint16_t hdisp;
|
|
uint16_t vtotal;
|
|
uint16_t vdispend;
|
|
uint16_t vblankstart;
|
|
uint16_t vsyncstart;
|
|
uint16_t linecmp;
|
|
uint16_t pix_map_width;
|
|
uint16_t sprite_pal_addr_idx;
|
|
uint16_t old_pal_addr_idx;
|
|
uint16_t sprite_pal_addr_idx_prefetch;
|
|
|
|
int v_total;
|
|
int dispend;
|
|
int v_syncstart;
|
|
int split;
|
|
int v_blankstart;
|
|
int h_disp;
|
|
int h_disp_old;
|
|
int h_total;
|
|
int h_disp_time;
|
|
int rowoffset;
|
|
int dispon;
|
|
int h_disp_on;
|
|
int vc;
|
|
int sc;
|
|
int linepos;
|
|
int oddeven;
|
|
int firstline;
|
|
int lastline;
|
|
int firstline_draw;
|
|
int lastline_draw;
|
|
int displine;
|
|
int fullchange;
|
|
int interlace;
|
|
int char_width;
|
|
int hwcursor_on;
|
|
int pal_pos;
|
|
int pal_pos_prefetch;
|
|
int on;
|
|
int op_mode_reset;
|
|
int linear_endian_reverse;
|
|
int sprite_pos;
|
|
int sprite_pos_prefetch;
|
|
int cursor_data_on;
|
|
int pal_test;
|
|
int a5_test;
|
|
int type;
|
|
int bus;
|
|
|
|
uint32_t linear_base;
|
|
uint32_t linear_size;
|
|
uint32_t banked_mask;
|
|
uint32_t base_addr_1mb;
|
|
uint32_t hwc_color0;
|
|
uint32_t hwc_color1;
|
|
uint32_t disp_start_addr;
|
|
uint32_t ma_latch;
|
|
uint32_t vram_size;
|
|
uint32_t vram_mask;
|
|
uint32_t rom_addr;
|
|
uint32_t ma;
|
|
uint32_t maback;
|
|
uint32_t read_bank;
|
|
uint32_t write_bank;
|
|
uint32_t px_map_base;
|
|
uint32_t pallook[512];
|
|
|
|
uint64_t dispontime;
|
|
uint64_t dispofftime;
|
|
|
|
struct {
|
|
uint8_t control;
|
|
uint8_t px_map_idx;
|
|
uint8_t frgd_mix;
|
|
uint8_t bkgd_mix;
|
|
uint8_t cc_cond;
|
|
uint8_t octant;
|
|
uint8_t draw_mode;
|
|
uint8_t mask_mode;
|
|
uint8_t short_stroke_vector1;
|
|
uint8_t short_stroke_vector2;
|
|
uint8_t short_stroke_vector3;
|
|
uint8_t short_stroke_vector4;
|
|
|
|
int16_t bres_err_term;
|
|
int16_t bres_k1;
|
|
int16_t bres_k2;
|
|
|
|
uint16_t blt_width;
|
|
uint16_t blt_height;
|
|
uint16_t mask_map_origin_x_off;
|
|
uint16_t mask_map_origin_y_off;
|
|
uint16_t src_map_x;
|
|
uint16_t src_map_y;
|
|
uint16_t dst_map_x;
|
|
uint16_t dst_map_y;
|
|
uint16_t pat_map_x;
|
|
uint16_t pat_map_y;
|
|
|
|
int ssv_state;
|
|
int pat_src;
|
|
int src_map;
|
|
int dst_map;
|
|
int bkgd_src;
|
|
int fore_src;
|
|
int oldx;
|
|
int oldy;
|
|
int x;
|
|
int y;
|
|
int sx;
|
|
int sy;
|
|
int dx;
|
|
int dy;
|
|
int px;
|
|
int py;
|
|
int pattern;
|
|
int command_len;
|
|
int filling;
|
|
|
|
uint32_t short_stroke;
|
|
uint32_t color_cmp;
|
|
uint32_t carry_chain;
|
|
uint32_t plane_mask;
|
|
uint32_t frgd_color;
|
|
uint32_t bkgd_color;
|
|
uint32_t command;
|
|
uint32_t dir_cmd;
|
|
|
|
uint8_t px_map_format[4];
|
|
uint16_t px_map_width[4];
|
|
uint16_t px_map_height[4];
|
|
uint32_t px_map_base[4];
|
|
} accel;
|
|
|
|
int big_endian_linear;
|
|
} xga_t;
|
|
|
|
#endif /*VIDEO_XGA_H*/
|