You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
217 lines
7.5 KiB
217 lines
7.5 KiB
page ,132
|
|
;-----------------------------Module-Header-----------------------------;
|
|
; Module Name: EGAVGA.INC
|
|
;
|
|
; This file contains the external definitions of the EGA/VGA specific
|
|
; locations which driver output routines need to reference.
|
|
;
|
|
; Copyright (c) 1992 Microsoft Corporation
|
|
;-----------------------------------------------------------------------;
|
|
; Restrictions:
|
|
;
|
|
; The following rules apply to the use of the EGA/VGA registers
|
|
; for the drivers (excluding pointer code and state detection
|
|
; code):
|
|
;
|
|
;
|
|
; 1) Routines are allowed to alter the following registers:
|
|
;
|
|
; Sequencer:
|
|
;
|
|
; SEQ_DATA SEQ_MAP_MASK
|
|
;
|
|
; Graphics Controller:
|
|
;
|
|
; GRAF_ADDR
|
|
; GRAF_DATA GRAF_DATA_ROT
|
|
; GRAF_SET_RESET GRAF_READ_MAP
|
|
; GRAF_ENAB_SR GRAF_MODE
|
|
; GRAF_COL_COMP GRAF_BIT_MASK
|
|
;
|
|
;
|
|
; 2) The following registers will always contain the indicated
|
|
; value. Routines are not allowed to alter them:
|
|
;
|
|
; Sequencer:
|
|
;
|
|
; SEQ_ADDR set to point SEQ_MAP_MASK
|
|
;
|
|
; Graphics Controller:
|
|
;
|
|
; GRAF_CDC set appropriately for color model
|
|
;
|
|
;
|
|
; 3) Rotation counts for GRAF_DATA_ROT are not allowed.
|
|
;
|
|
;
|
|
; 4) The following EGA/VGA registers will contain the indicated
|
|
; value upon entry to a routine. Any routine which alters
|
|
; them must restore them to the indicated state.
|
|
;
|
|
; Map Mask all planes enabled
|
|
; Enable Set/Reset all planes disabled
|
|
; Data Rotate Set, no rotation
|
|
; Mode Processor write, data read
|
|
; Bit Mask all bits enabled
|
|
;
|
|
;
|
|
; 5) The Mode Register is always shadowed in EGA/VGA memory for
|
|
; the state detection code. At interrupt time, the mode
|
|
; will be restored from the structure "shadowed_graf_mode".
|
|
; Any routine altering the Mode Register must keep this location
|
|
; current. This is the only EGA/VGA register which requires
|
|
; shadowing.
|
|
;
|
|
;
|
|
; 6) Pointer drawing will save and restore the contents of
|
|
; the processor latches.
|
|
;
|
|
;
|
|
; 7) Pointer drawing will leave GRAF_ADDR set to GRAF_BIT_MASK.
|
|
;
|
|
;-----------------------------------------------------------------------;
|
|
|
|
; Miscellaneous Registers used only at EGA/VGA initialization time
|
|
|
|
MISC_OUTPUT EQU 0C2h ;Miscellaneous Output Register
|
|
CRTC_ADDR EQU 0D4h ;CRTC Address Register for color mode
|
|
CRTC_DATA EQU 0D5h ;CRTC Data Register for color mode
|
|
GRAF_1_POS EQU 0CCh ;Graphics 1 Address Register
|
|
GRAF_2_POS EQU 0CAh ;Graphics 2 Address Register
|
|
ATTR_READ EQU 0DAh ;Attribute Controler Read Address
|
|
ATTR_WRITE EQU 0C0h ;Attribute Controler Write Address
|
|
IN_STAT_0 EQU 0C2h ;Input Status Register 0
|
|
IN_STAT_1 EQU 0DAh ;Input Status Register 1
|
|
|
|
|
|
|
|
; EGA/VGA Register Definitions.
|
|
;
|
|
; The following definitions are the EGA/VGA registers and values
|
|
; used by this driver. All other registers are set up at
|
|
; when the EGA/VGA is placed into graphics mode and never altered
|
|
; afterwards.
|
|
;
|
|
; All unspecified bits in the following registers must be 0.
|
|
|
|
|
|
EGA_BASE EQU 300h ;Base address of the EGA (3xx)
|
|
VGA_BASE EQU 300h ;Base address of the VGA (3xx)
|
|
|
|
|
|
|
|
; EGA/VGA Register Definitions.
|
|
|
|
EGA_BASE EQU 300h ;Base address of the EGA (3xx)
|
|
VGA_BASE EQU 300h ;Base address of the VGA (3xx)
|
|
|
|
; SEQUencer Registers Used
|
|
|
|
SEQ_ADDR EQU 0C4h ;SEQUencer Address Register
|
|
SEQ_DATA EQU 0C5h ;SEQUencer Data Register
|
|
|
|
SEQ_MAP_MASK EQU 02h ;Write Plane Enable Mask
|
|
MM_C0 EQU 00000001b ; C0 plane enable
|
|
MM_C1 EQU 00000010b ; C1 plane enable
|
|
MM_C2 EQU 00000100b ; C2 plane enable
|
|
MM_C3 EQU 00001000b ; C3 plane enable
|
|
MM_ALL EQU 00001111b ; All planes
|
|
|
|
SEQ_MODE EQU 04h ;Memory Mode
|
|
SM_ALPHA EQU 00000001b ; Char map select enable
|
|
SM_EXTENDED EQU 00000010b ; Extended memory present
|
|
SM_ODD_PLANE EQU 00000100b ; Odd/even bytes to same plane
|
|
|
|
|
|
; Graphics Controller Registers Used
|
|
|
|
GRAF_ADDR EQU 0CEh ;Graphics Controller Address Register
|
|
GRAF_DATA EQU 0CFh ;Graphics Controller Data Register
|
|
|
|
GRAF_SET_RESET EQU 00h ; Set/Reset Plane Color
|
|
GRAF_ENAB_SR EQU 01h ; Set/Reset Enable
|
|
GRAF_COL_COMP EQU 02h ; Color Compare Register
|
|
|
|
GRAF_DATA_ROT EQU 03h ; Data Rotate Register
|
|
DR_ROT_CNT EQU 00000111b ; Data Rotate Count
|
|
DR_SET EQU 00000000b ; Data Unmodified
|
|
DR_AND EQU 00001000b ; Data ANDed with latches
|
|
DR_OR EQU 00010000b ; Data ORed with latches
|
|
DR_XOR EQU 00011000b ; Data XORed with latches
|
|
|
|
GRAF_READ_MAP EQU 04h ; Read Map Select Register
|
|
RM_C0 EQU 00000000b ; Read C0 plane
|
|
RM_C1 EQU 00000001b ; Read C1 plane
|
|
RM_C2 EQU 00000010b ; Read C2 plane
|
|
RM_C3 EQU 00000011b ; Read C3 plane
|
|
|
|
GRAF_MODE EQU 05h ; Mode Register
|
|
M_PROC_WRITE EQU 00000000b ; Write processor data rotated
|
|
M_LATCH_WRITE EQU 00000001b ; Write latched data
|
|
M_COLOR_WRITE EQU 00000010b ; Write processor data as color
|
|
M_AND_WRITE EQU 00000011b ; Write (procdata AND bitmask)
|
|
M_DATA_READ EQU 00000000b ; Read selected plane
|
|
M_COLOR_READ EQU 00001000b ; Read color compare
|
|
|
|
GRAF_MISC EQU 06h ; Miscellaneous Register
|
|
MS_NON_ALPHA EQU 00000001b ; Char generator disabled
|
|
MS_ODD_EVEN EQU 00000010b ; Map odd addresses to even
|
|
MS_A0000_128K EQU 00000000b ; Memory present at A0000, 128kb
|
|
MS_A0000_64K EQU 00000100b ; Memory present at A0000, 64kb
|
|
MS_B0000_32K EQU 00001000b ; Memory present at B0000, 32kb
|
|
MS_B8000_32K EQU 00001100b ; Memory present at B8000, 32kb
|
|
MS_ADDR_MASK EQU 00001100b
|
|
|
|
GRAF_CDC EQU 07h ; Color Don't Care Register
|
|
GRAF_BIT_MASK EQU 08h ; Bit Mask Register
|
|
|
|
|
|
; Various sizes for EGA/VGA data structures
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; On the EGA/VGA, the number of bits/pel is 4
|
|
; The number of bytes per scan is 80
|
|
;-----------------------------------------------------------------------;
|
|
|
|
BITS_PEL EQU 4
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; Helper flags for the xyCreateMasks call
|
|
;-----------------------------------------------------------------------;
|
|
|
|
PTRI_INVERT EQU 1 ; !!! In WINGDIP.H when H2INC works
|
|
PTRI_ANIMATE EQU 2 ; !!! In WINGDIP.H when H2INC works
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; The pointer parameters are the size of the pointer as received from
|
|
; DeviceSetCursor.
|
|
;-----------------------------------------------------------------------;
|
|
|
|
PTR_HEIGHT EQU 32
|
|
PTR_WIDTH EQU 4 ;Width in bytes of pointer
|
|
PTR_WIDTH_BITS EQU PTR_WIDTH*8 ;Width in bits of pointer
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; The work width/height is the size of a pointer as manipulated by
|
|
; the pointer drawing code.
|
|
;-----------------------------------------------------------------------;
|
|
|
|
WORK_WIDTH EQU PTR_WIDTH+1 ;Width of mask, work area
|
|
WORK_HEIGHT EQU PTR_HEIGHT+0 ;Height of mask, work area
|
|
MASK_LENGTH EQU WORK_WIDTH*WORK_HEIGHT ;#bytes in mask, work area
|
|
CLR_MASK_LENGTH EQU WORK_WIDTH*WORK_HEIGHT*BITS_PEL ;#bytes in color mask
|
|
.errnz BITS_PEL-4
|
|
|
|
;-----------------------------------------------------------------------;
|
|
; The save area parameters control the size of the buffer used for
|
|
; saveing the bits underneath the pointer image. It should be a
|
|
; power of two to allow for easy wrap calculations.
|
|
;-----------------------------------------------------------------------;
|
|
|
|
SAVE_BUFFER_WIDTH EQU 8 ;Width of the save area
|
|
SAVE_BUFFER_HEIGHT EQU 32 ;Height of the save area
|
|
.errnz PTR_WIDTH GT SAVE_BUFFER_WIDTH
|
|
.errnz PTR_HEIGHT GT SAVE_BUFFER_HEIGHT
|
|
|
|
|
|
|