/*
* 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.
*
* Definitions for the video controller module.
*
* Version: @(#)video.h 1.0.35 2018/09/19
*
* Authors: Sarah Walker,
* Miran Grca,
* Fred N. van Kempen,
*
* Copyright 2008-2018 Sarah Walker.
* Copyright 2016-2018 Miran Grca.
* Copyright 2017,2018 Fred N. van Kempen.
*/
#ifndef EMU_VIDEO_H
# define EMU_VIDEO_H
#define makecol(r, g, b) ((b) | ((g) << 8) | ((r) << 16))
#define makecol32(r, g, b) ((b) | ((g) << 8) | ((r) << 16))
enum {
VID_NONE = 0,
VID_INTERNAL,
VID_CGA,
VID_COMPAQ_CGA, /* Compaq CGA */
VID_COMPAQ_CGA_2, /* Compaq CGA 2 */
VID_COLORPLUS, /* Plantronics ColorPlus */
VID_WY700, /* Wyse 700 */
VID_MDA,
VID_GENIUS, /* MDSI Genius */
VID_HERCULES,
VID_HERCULESPLUS,
VID_INCOLOR, /* Hercules InColor */
VID_EGA, /* Using IBM EGA BIOS */
VID_COMPAQ_EGA, /* Compaq EGA */
VID_SUPER_EGA, /* Using Chips & Technologies SuperEGA BIOS */
VID_VGA, /* IBM VGA */
VID_TVGA, /* Using Trident TVGA8900D BIOS */
VID_ET4000_ISA, /* Tseng ET4000 */
VID_ET4000_MCA, /* Tseng ET4000 */
VID_TGKOREANVGA, /*Trigem Korean VGA(Tseng ET4000AX)*/
VID_ET4000W32_CARDEX_VLB, /* Tseng ET4000/W32p (Cardex) VLB */
VID_ET4000W32_CARDEX_PCI, /* Tseng ET4000/W32p (Cardex) PCI */
#if defined(DEV_BRANCH) && defined(USE_STEALTH32)
VID_ET4000W32_VLB, /* Tseng ET4000/W32p (Diamond Stealth 32) VLB */
VID_ET4000W32_PCI, /* Tseng ET4000/W32p (Diamond Stealth 32) PCI */
#endif
VID_BAHAMAS64_VLB, /* S3 Vision864 (Paradise Bahamas 64) VLB */
VID_BAHAMAS64_PCI, /* S3 Vision864 (Paradise Bahamas 64) PCI */
VID_N9_9FX_VLB, /* S3 764/Trio64 (Number Nine 9FX) VLB */
VID_N9_9FX_PCI, /* S3 764/Trio64 (Number Nine 9FX) PCI */
VID_TGUI9400CXI, /* Trident TGUI9400CXi VLB */
VID_TGUI9440_VLB, /* Trident TGUI9440AGi VLB */
VID_TGUI9440_PCI, /* Trident TGUI9440AGi PCI */
VID_ATIKOREANVGA, /*ATI Korean VGA (28800-5)*/
VID_VGA88, /* ATI VGA-88 (18800-1) */
VID_VGAEDGE16, /* ATI VGA Edge-16 (18800-1) */
VID_VGACHARGER, /* ATI VGA Charger (28800-5) */
#if defined(DEV_BRANCH) && defined(USE_VGAWONDER)
VID_VGAWONDER, /* Compaq ATI VGA Wonder (18800) */
#endif
VID_VGAWONDERXL, /* Compaq ATI VGA Wonder XL (28800-5) */
#if defined(DEV_BRANCH) && defined(USE_XL24)
VID_VGAWONDERXL24, /* Compaq ATI VGA Wonder XL24 (28800-6) */
#endif
VID_MACH64GX_ISA, /* ATI Graphics Pro Turbo (Mach64) ISA */
VID_MACH64GX_VLB, /* ATI Graphics Pro Turbo (Mach64) VLB */
VID_MACH64GX_PCI, /* ATI Graphics Pro Turbo (Mach64) PCI */
VID_MACH64VT2, /* ATI Mach64 VT2 */
VID_CL_GD5424_ISA, /* Cirrus Logic CL-GD 5424 ISA */
VID_CL_GD5424_VLB, /* Cirrus Logic CL-GD 5424 VLB */
VID_CL_GD5426_VLB, /* Diamond SpeedStar PRO (Cirrus Logic CL-GD 5426) VLB */
VID_CL_GD5428_ISA, /* Cirrus Logic CL-GD 5428 ISA */
VID_CL_GD5428_VLB, /* Cirrus Logic CL-GD 5428 VLB */
VID_CL_GD5429_ISA, /* Cirrus Logic CL-GD 5429 ISA */
VID_CL_GD5429_VLB, /* Cirrus Logic CL-GD 5429 VLB */
VID_CL_GD5430_VLB, /* Diamond SpeedStar PRO SE (Cirrus Logic CL-GD 5430) VLB */
VID_CL_GD5430_PCI, /* Cirrus Logic CL-GD 5430 PCI */
VID_CL_GD5434_ISA, /* Cirrus Logic CL-GD 5434 ISA */
VID_CL_GD5434_VLB, /* Cirrus Logic CL-GD 5434 VLB */
VID_CL_GD5434_PCI, /* Cirrus Logic CL-GD 5434 PCI */
VID_CL_GD5436_PCI, /* Cirrus Logic CL-GD 5436 PCI */
VID_CL_GD5440_PCI, /* Cirrus Logic CL-GD 5440 PCI */
VID_CL_GD5446_PCI, /* Cirrus Logic CL-GD 5446 PCI */
VID_CL_GD5446_STB_PCI, /* STB Nitro 64V (Cirrus Logic CL-GD 5446) PCI */
VID_CL_GD5480_PCI, /* Cirrus Logic CL-GD 5480 PCI */
VID_EXPERTCOLOR_VLB, /* S3 Vision868 (ExpertColor DSV3868P CF55) VLB */
VID_EXPERTCOLOR_PCI, /* S3 Vision868 (ExpertColor DSV3868P CF55) PCI */
VID_OTI037C, /* Oak OTI-037C */
VID_OTI067, /* Oak OTI-067 */
VID_OTI077, /* Oak OTI-077 */
VID_PVGA1A, /* Paradise PVGA1A Standalone */
VID_WD90C11, /* Paradise WD90C11-LR Standalone */
VID_WD90C30, /* Paradise WD90C30-LR Standalone */
VID_PHOENIX_VISION864_VLB, /* S3 Vision864 (Phoenix) VLB */
VID_PHOENIX_VISION864_PCI, /* S3 Vision864 (Phoenix) PCI */
VID_PHOENIX_TRIO32_VLB, /* S3 732/Trio32 (Phoenix) VLB */
VID_PHOENIX_TRIO32_PCI, /* S3 732/Trio32 (Phoenix) PCI */
VID_PHOENIX_TRIO64_VLB, /* S3 764/Trio64 (Phoenix) VLB */
VID_PHOENIX_TRIO64_PCI, /* S3 764/Trio64 (Phoenix) PCI */
VID_STEALTH64_VLB, /* S3 Trio64 (Diamond Stealth 64) VLB */
VID_STEALTH64_PCI, /* S3 Trio64 (Diamond Stealth 64) PCI */
#if defined(DEV_BRANCH) && defined(USE_TI)
VID_TICF62011, /* TI CF62011 */
#endif
VID_VIRGE_VLB, /* S3 Virge VLB */
VID_VIRGE_PCI, /* S3 Virge PCI */
VID_VIRGEDX_VLB, /* S3 Virge/DX VLB */
VID_VIRGEDX_PCI, /* S3 Virge/DX PCI */
VID_VIRGEDX4_VLB, /* S3 Virge/DX (VBE 2.0) VLB */
VID_VIRGEDX4_PCI, /* S3 Virge/DX (VBE 2.0) PCI */
VID_VIRGEVX_VLB, /* S3 Virge/VX VLB */
VID_VIRGEVX_PCI, /* S3 Virge/VX PCI */
VID_MAX
};
enum {
FULLSCR_SCALE_FULL = 0,
FULLSCR_SCALE_43,
FULLSCR_SCALE_SQ,
FULLSCR_SCALE_INT,
FULLSCR_SCALE_KEEPRATIO
};
#ifdef __cplusplus
extern "C" {
#endif
enum {
VIDEO_ISA = 0,
VIDEO_MCA,
VIDEO_BUS
};
#define VIDEO_FLAG_TYPE_CGA 0
#define VIDEO_FLAG_TYPE_MDA 1
#define VIDEO_FLAG_TYPE_SPECIAL 2
#define VIDEO_FLAG_TYPE_MASK 3
typedef struct {
int type;
int write_b, write_w, write_l;
int read_b, read_w, read_l;
} video_timings_t;
typedef struct {
int w, h;
uint8_t *dat;
uint8_t *line[2048];
} bitmap_t;
typedef struct {
uint8_t r, g, b;
} rgb_t;
typedef struct {
uint8_t chr[32];
} dbcs_font_t;
typedef rgb_t PALETTE[256];
extern int gfx_present[VID_MAX];
extern int egareads,
egawrites;
extern int changeframecount;
extern bitmap_t *screen,
*buffer,
*buffer32;
extern PALETTE cgapal,
cgapal_mono[6];
extern uint32_t pal_lookup[256];
extern int video_fullscreen,
video_fullscreen_scale,
video_fullscreen_first;
extern int fullchange;
extern uint8_t fontdat[2048][8];
extern uint8_t fontdatm[2048][16];
extern dbcs_font_t *fontdatksc5601;
extern dbcs_font_t *fontdatksc5601_user;
extern uint32_t *video_6to8,
*video_15to32,
*video_16to32;
extern int xsize,ysize;
extern int enable_overscan;
extern int overscan_x,
overscan_y;
extern int force_43;
extern int video_timing_read_b,
video_timing_read_w,
video_timing_read_l;
extern int video_timing_write_b,
video_timing_write_w,
video_timing_write_l;
extern int video_res_x,
video_res_y,
video_bpp;
extern int vid_resize;
extern int cga_palette;
extern int vid_cga_contrast;
extern int video_grayscale;
extern int video_graytype;
extern float cpuclock;
extern int emu_fps,
frames;
extern int readflash;
/* Function handler pointers. */
extern void (*video_recalctimings)(void);
/* Table functions. */
extern int video_card_available(int card);
extern char *video_card_getname(int card);
#ifdef EMU_DEVICE_H
extern const device_t *video_card_getdevice(int card);
#endif
extern int video_card_has_config(int card);
extern int video_card_getid(char *s);
extern int video_old_to_new(int card);
extern int video_new_to_old(int card);
extern char *video_get_internal_name(int card);
extern int video_get_video_from_internal_name(char *s);
extern int video_is_mda(void);
extern int video_is_cga(void);
extern int video_is_ega_vga(void);
extern void video_inform(int type, const video_timings_t *ptr);
extern int video_get_type(void);
extern void video_setblit(void(*blit)(int,int,int,int,int,int));
extern void video_blit_memtoscreen(int x, int y, int y1, int y2, int w, int h);
extern void video_blit_memtoscreen_8(int x, int y, int y1, int y2, int w, int h);
extern void video_blit_complete(void);
extern void video_wait_for_blit(void);
extern void video_wait_for_buffer(void);
extern bitmap_t *create_bitmap(int w, int h);
extern void destroy_bitmap(bitmap_t *b);
extern void cgapal_rebuild(void);
extern void hline(bitmap_t *b, int x1, int y, int x2, uint32_t col);
extern void updatewindowsize(int x, int y);
extern void video_init(void);
extern void video_close(void);
extern void video_reset(int card);
extern uint8_t video_force_resize_get(void);
extern void video_force_resize_set(uint8_t res);
extern void video_update_timing(void);
extern void loadfont(wchar_t *s, int format);
extern int get_actual_size_x(void);
extern int get_actual_size_y(void);
#ifdef ENABLE_VRAM_DUMP
extern void svga_dump_vram(void);
#endif
extern uint32_t video_color_transform(uint32_t color);
extern void video_transform_copy(uint32_t *dst, uint32_t *src, int len);
#ifdef __cplusplus
}
#endif
#endif /*EMU_VIDEO_H*/