/* SCCS Id: @(#)pcvideo.h 3.3 94/06/07 */ /* 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 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 0 #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 0 #define ATTRIB_VGA_NORMAL CLR_GRAY /* Normal attribute */ #define ATTRIB_VGA_INTENSE 13 /* Intense White 94/06/07 palette chg*/ # endif /*SCREEN_VGA || SCREEN_8514*/ # 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 * */ #define E extern /* ### video.c ### */ # ifdef SIMULATE_CURSOR E void NDECL(DrawCursor); E void NDECL(HideCursor); # endif /* ### vidtxt.c ### */ # ifdef NO_TERMS E void NDECL(txt_backsp); E void NDECL(txt_clear_screen); E void FDECL(txt_cl_end,(int,int)); E void NDECL(txt_cl_eos); E void NDECL(txt_get_scr_size); E void FDECL(txt_gotoxy,(int,int)); E int NDECL(txt_monoadapt_check); E void NDECL(txt_nhbell); E void FDECL(txt_startup,(int*,int*)); E void FDECL(txt_xputs, (const char *, int, int)); E void FDECL(txt_xputc, (CHAR_P, int)); /* ### vidvga.c ### */ # ifdef SCREEN_VGA E void NDECL(vga_backsp); E void FDECL(vga_clear_screen,(int)); E void FDECL(vga_cl_end,(int,int)); E void FDECL(vga_cl_eos,(int)); E int NDECL(vga_detect); # ifdef SIMULATE_CURSOR E void NDECL(vga_DrawCursor); # endif E void FDECL(vga_DisplayCell, (struct planar_cell_struct *, int, int)); E void FDECL(vga_DisplayCell_O, (struct overview_planar_cell_struct *, int, int)); E void NDECL(vga_Finish); E char __far *NDECL(vga_FontPtrs); E void NDECL(vga_get_scr_size); E void FDECL(vga_gotoloc,(int,int)); # ifdef POSITIONBAR E void FDECL(vga_update_positionbar, (char *)); # endif # ifdef SIMULATE_CURSOR E void NDECL(vga_HideCursor); # endif E void NDECL(vga_Init); E void FDECL(vga_SwitchMode, (unsigned int)); E void FDECL(vga_SetPalette, (char *)); E void NDECL(vga_tty_end_screen); E void FDECL(vga_tty_startup,(int*,int*)); E void FDECL(vga_WriteChar, (int, int, int, int)); E void FDECL(vga_WriteStr, (char *, int, int, int, int)); E void FDECL(vga_xputs, (const char *, int, int)); E void FDECL(vga_xputc, (CHAR_P, int)); E void FDECL(vga_xputg, (int, int)); E void FDECL(vga_userpan, (BOOLEAN_P)); E void FDECL(vga_overview, (BOOLEAN_P)); E void FDECL(vga_traditional, (BOOLEAN_P)); E void NDECL(vga_refresh); # endif /* SCREEN_VGA */ # endif /* NO_TERMS */ #undef E #endif /* PCVIDEO_H */ /* pcvideo.h */