/* NetHack 3.7 pcvideo.h $NHDT-Date: 1596498273 2020/08/03 23:44:33 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.11 $ */ /* Copyright (c) NetHack PC Development Team 1993, 1994 */ /* NetHack may be freely redistributed. See license for details. */ /* */ /* * pcvideo.h - Hardware video support definitions and prototypes * *Edit History: * Initial Creation M. Allison 93/10/30 * */ #ifndef PCVIDEO_H #define PCVIDEO_H #include "portio.h" #ifdef SCREEN_BIOS #if !defined(PC9800) #define MONO_CHECK /* Video BIOS can do the check */ #endif #endif #ifdef SCREEN_DJGPPFAST /*# define MONO_CHECK */ /* djgpp should be able to do check */ #endif /* * PC interrupts */ #ifdef PC9800 #define CRT_BIOS 0x18 #define DOS_EXT_FUNC 0xdc #define DIRECT_CON_IO 0x10 #else #define VIDEO_BIOS 0x10 #endif #define DOSCALL 0x21 /* * Video BIOS functions */ #if defined(PC9800) #define SENSEMODE 0x0b /* Sense CRT Mode */ #define PUTCHAR 0x00 /* Put Character */ #define SETATT 0x02 /* Set Attribute */ #define SETCURPOS 0x03 /* Set Cursor Position */ #define CURSOR_RIGHT 0x08 /* Move Cursor Right */ #define CURSOR_LEFT 0x09 /* Move Cursor Left */ #define SCREEN_CLEAR 0x0a /* Clear Screen */ #define LINE_CLEAR 0x0b /* Clear Line */ #else #define SETCURPOS 0x02 /* Set Cursor Position */ #endif #define GETCURPOS 0x03 /* Get Cursor Position */ #define SETCURTYP 0x01 /* Set Cursor Type */ #define GETMODE 0x0f /* Get Video Mode */ #define SETMODE 0x00 /* Set Video Mode */ #define SETPAGE 0x05 /* Set Video Page */ #define FONTINFO 0x1130 /* Get Font Info */ #define SCROLL 0x06 /* Scroll or initialize window */ #define PUTCHARATT 0x09 /* Write attribute & char at cursor */ /* * VGA Specific Stuff */ #ifdef SCREEN_VGA /* #define HW_PANNING */ /* Hardware panning enabled */ #define USHORT unsigned short #define MODE640x480 0x0012 /* Switch to VGA 640 x 480 Graphics mode */ #define MODETEXT 0x0003 /* Switch to Text mode 3 */ #ifdef HW_PANNING #define PIXELINC 16 /* How much to increment by when panning */ /*#define PIXELINC 1 */ /* How much to increment by when panning */ #define SCREENBYTES 128 #define CharRows 30 #define VERT_RETRACE \ { \ while (!(inportb(crt_status) & 0x08)) \ ; \ } #define VERT_RETRACE_END \ { \ while ((inportb(crt_status) & 0x08)) \ ; \ } #else #define SCREENBYTES 80 #endif #define CharacterWidth 8 #define SCREENHEIGHT 480 #define SCREENWIDTH (SCREENBYTES * CharacterWidth) #define VIDEOSEG 0xa000 #define FONT_PTR_SEGMENT 0x0000 #define FONT_PTR_OFFSET 0x010C #define SCREENPLANES 4 #define COLORDEPTH 16 #define egawriteplane(n) \ { \ outportb(0x3c4, 2); \ outportb(0x3c5, n); \ } #define egareadplane(n) \ { \ outportb(0x3ce, 4); \ outportb(0x3cf, n); \ } #define col2x8(c) ((c) *8) #define col2x16(c) ((c) *16) #define col2x(c) ((c) *2) #define row2y(c) ((c) *16) #define MAX_ROWS_PER_CELL 16 #define MAX_COLS_PER_CELL 16 #define MAX_BYTES_PER_CELL 2 /* MAX_COLS_PER_CELL/8 */ #define ROWS_PER_CELL MAX_ROWS_PER_CELL #define COLS_PER_CELL MAX_COLS_PER_CELL #define BYTES_PER_CELL MAX_BYTES_PER_CELL struct cellplane { char image[MAX_ROWS_PER_CELL][MAX_BYTES_PER_CELL]; }; struct planar_cell_struct { struct cellplane plane[SCREENPLANES]; }; struct overview_cellplane { char image[MAX_ROWS_PER_CELL][1]; }; struct overview_planar_cell_struct { struct overview_cellplane plane[SCREENPLANES]; }; #endif /* SCREEN_VGA */ /* * Default color Indexes for hardware palettes * * Do not change the values below. * These are the color mappings defined by the particular video * hardware/mode. You can rearrange the NetHack color mappings at * run-time via the defaults.nh "videocolors" and "videoshades" * settings. * */ #if defined(SCREEN_BIOS) || defined(SCREEN_DJGPPFAST) #define M_BLACK 8 #define M_WHITE 15 #define M_GRAY 7 /* low-intensity white */ #define M_RED 4 #define M_GREEN 2 #define M_BROWN 6 /* low-intensity yellow */ #define M_BLUE 1 #define M_MAGENTA 5 #define M_CYAN 3 #define M_ORANGE 12 #define M_BRIGHTGREEN 10 #define M_YELLOW 14 #define M_BRIGHTBLUE 9 #define M_BRIGHTMAGENTA 13 #define M_BRIGHTCYAN 11 #define M_TEXT M_GRAY #define BACKGROUND_COLOR 1 #define ATTRIB_NORMAL M_TEXT /* Normal attribute */ #define ATTRIB_INTENSE M_WHITE /* Intense White */ #define ATTRIB_MONO_NORMAL 0x01 /* Underlined,white */ #define ATTRIB_MONO_UNDERLINE 0x01 /* Underlined,white */ #define ATTRIB_MONO_BLINK 0x87 /* Flash bit, white */ #define ATTRIB_MONO_REVERSE 0x70 /* Black on white */ #endif /*SCREEN_BIOS || SCREEN_DJGPPFAST */ #if defined(SCREEN_VGA) || defined(SCREEN_8514) #define BACKGROUND_VGA_COLOR 1 #define ATTRIB_VGA_NORMAL CLR_GRAY /* Normal attribute */ #define ATTRIB_VGA_INTENSE 14 /* Intense White 94/06/07 palette chg*/ #endif /*SCREEN_VGA || SCREEN_8514*/ #if defined(SCREEN_VESA) #define BACKGROUND_VESA_COLOR 240 #endif /*SCREEN_VESA*/ #if defined(PC9800) static unsigned char attr98[CLR_MAX] = { 0xe1, /* 0 white */ 0x21, /* 1 blue */ 0x81, /* 2 green */ 0xa1, /* 3 cyan */ 0x41, /* 4 red */ 0x61, /* 5 magenta */ 0xc1, /* 6 yellow */ 0xe1, /* 7 white */ 0xe1, /* 8 white */ 0x25, /* 9 reversed blue */ 0x85, /* 10 reversed green */ 0xa5, /* 11 reversed cyan */ 0x45, /* 12 reversed red */ 0x65, /* 13 reversed magenta */ 0xc5, /* 14 reversed yellow */ 0xe5, /* 15 reversed white */ }; #endif #ifdef SIMULATE_CURSOR #define CURSOR_HEIGHT 3 /* this should go - MJA */ /* cursor styles */ #define CURSOR_INVIS 0 /* cursor not visible at all */ #define CURSOR_FRAME 1 /* block around the current tile */ #define CURSOR_UNDERLINE 2 /* thin line at bottom of the tile */ #define CURSOR_CORNER 3 /* cursor visible at the 4 tile corners */ #define NUM_CURSOR_TYPES 4 /* number of different cursor types */ #define CURSOR_DEFAULT_STYLE CURSOR_CORNER #define CURSOR_DEFAULT_COLOR M_GRAY /* global variables for cursor */ extern int cursor_type; extern int cursor_flag; extern int cursor_color; #endif /* * Function Prototypes * */ /* ### video.c ### */ #ifdef SIMULATE_CURSOR extern void DrawCursor(void); extern void HideCursor(void); #endif /* ### vidtxt.c ### */ #ifdef NO_TERMS extern void txt_backsp(void); extern void txt_clear_screen(void); extern void txt_cl_end(int, int); extern void txt_cl_eos(void); extern void txt_get_scr_size(void); extern void txt_gotoxy(int, int); extern int txt_monoadapt_check(void); extern void txt_nhbell(void); extern void txt_startup(int *, int *); extern void txt_xputs(const char *, int, int); extern void txt_xputc(char, int); extern void txt_hide_cursor(void); extern void txt_show_cursor(void); /* ### vidvga.c ### */ enum vga_pan_direction { pan_left, pan_up, pan_right, pan_down }; #ifdef SCREEN_VGA extern void vga_backsp(void); extern void vga_clear_screen(int); extern void vga_cl_end(int, int); extern void vga_cl_eos(int); extern int vga_detect(void); extern void vga_hide_cursor(void); extern void vga_show_cursor(void); #ifdef SIMULATE_CURSOR extern void vga_DrawCursor(void); #endif extern void vga_Finish(void); extern char __far *vga_FontPtrs(void); extern void vga_get_scr_size(void); extern void vga_gotoloc(int, int); #ifdef POSITIONBAR extern void vga_update_positionbar(char *); #endif #ifdef SIMULATE_CURSOR extern void vga_HideCursor(void); #endif extern void vga_Init(void); extern void vga_term_end_screen(void); extern void vga_term_startup(int *, int *); extern void vga_xputs(const char *, int, int); extern void vga_xputc(char, int); extern void vga_xputg(const glyph_info *, const glyph_info *); extern void vga_userpan(enum vga_pan_direction); extern void vga_overview(boolean); extern void vga_traditional(boolean); extern void vga_refresh(void); #endif /* SCREEN_VGA */ #ifdef SCREEN_VESA extern void vesa_backsp(void); extern void vesa_clear_screen(int); extern void vesa_cl_end(int, int); extern void vesa_cl_eos(int); extern int vesa_detect(void); extern void vesa_hide_cursor(void); extern void vesa_show_cursor(void); #ifdef SIMULATE_CURSOR extern void vesa_DrawCursor(void); #endif extern void vesa_Finish(void); extern void vesa_get_scr_size(void); extern void vesa_gotoloc(int, int); #ifdef POSITIONBAR extern void vesa_update_positionbar(char *); #endif #ifdef SIMULATE_CURSOR extern void vesa_HideCursor(void); #endif extern void vesa_Init(void); extern void vesa_term_end_screen(void); extern void vesa_term_startup(int *, int *); extern void vesa_xputs(const char *, int, int); extern void vesa_xputc(char, int); extern void vesa_xputg(const glyph_info *, const glyph_info *); extern void vesa_userpan(enum vga_pan_direction); extern void vesa_overview(boolean); extern void vesa_traditional(boolean); extern void vesa_refresh(void); extern void vesa_flush_text(void); #endif /* SCREEN_VESA */ #endif /* NO_TERMS */ #endif /* PCVIDEO_H */ /* pcvideo.h */