Annotation of ntddk/src/video/miniport/wdvga/wdvga.h, revision 1.1.1.1

1.1       root        1: /*++
                      2: 
                      3: Copyright (c) 1992  Microsoft Corporation
                      4: Copyright (c) 1993  Western Digital Corporation
                      5: 
                      6: Module Name:
                      7: 
                      8:     wdvga.h
                      9: 
                     10: Abstract:
                     11: 
                     12:     This module contains the definitions for the code that implements the
                     13:     WDVGA device driver.
                     14: 
                     15: Environment:
                     16: 
                     17:     Kernel mode
                     18: 
                     19: Revision History:
                     20: 
                     21: --*/
                     22: 
                     23: #ifndef NO_INT10_MODE_SET
                     24: #define INT10_MODE_SET 1
                     25: #endif
                     26: 
                     27: //
                     28: // Do full save and restore.
                     29: //
                     30: 
                     31: // #define EXTENDED_REGISTER_SAVE_RESTORE 1
                     32: 
                     33: //
                     34: // Define type of ET4000 boards
                     35: //
                     36: 
                     37: typedef enum _BOARD_TYPE {
                     38:     WD90C00 = 1,
                     39:     WD90C30,
                     40:     SPEEDSTAR30,
                     41:     WD90C31,
                     42:     SPEEDSTAR31,
                     43:     OTHER
                     44: } BOARD_TYPE;
                     45: 
                     46: 
                     47: //
                     48: // Base address of VGA memory range.  Also used as base address of VGA
                     49: // memory when loading a font, which is done with the VGA mapped at A0000.
                     50: //
                     51: 
                     52: #define MEM_VGA      0xA0000
                     53: #define MEM_VGA_SIZE 0x20000
                     54: 
                     55: //
                     56: // Port definitions for filling the ACCSES_RANGES structure in the miniport
                     57: // information, defines the range of I/O ports the VGA spans.
                     58: // There is a break in the IO ports - a few ports are used for the parallel
                     59: // port. Those cannot be defined in the ACCESS_RANGE, but are still mapped
                     60: // so all VGA ports are in one address range.
                     61: //
                     62: 
                     63: #define VGA_BASE_IO_PORT      0x000003B0
                     64: #define VGA_START_BREAK_PORT  0x000003BB
                     65: #define VGA_END_BREAK_PORT    0x000003C0
                     66: #define VGA_MAX_IO_PORT       0x000003DF
                     67: 
                     68: #define WD_EXT_PORT_START     0x000023C0
                     69: #define WD_EXT_PORT_END       0x000023C7
                     70: 
                     71: //
                     72: // VGA port-related definitions.
                     73: //
                     74: 
                     75: //
                     76: // VGA register definitions
                     77: //
                     78:                                             // ports in monochrome mode
                     79: #define CRTC_ADDRESS_PORT_MONO      0x0004  // CRT Controller Address and
                     80: #define CRTC_DATA_PORT_MONO         0x0005  // Data registers in mono mode
                     81: #define FEAT_CTRL_WRITE_PORT_MONO   0x000A  // Feature Control write port
                     82:                                             // in mono mode
                     83: #define INPUT_STATUS_1_MONO         0x000A  // Input Status 1 register read
                     84:                                             // port in mono mode
                     85: #define ATT_INITIALIZE_PORT_MONO    INPUT_STATUS_1_MONO
                     86:                                             // Register to read to reset
                     87:                                             // Attribute Controller index/data
                     88: 
                     89: #define ATT_ADDRESS_PORT            0x0010  // Attribute Controller Address and
                     90: #define ATT_DATA_WRITE_PORT         0x0010  // Data registers share one port
                     91:                                             // for writes, but only Address is
                     92:                                             // readable at 0x3C0
                     93: #define ATT_DATA_READ_PORT          0x0011  // Attribute Controller Data reg is
                     94:                                             // readable here
                     95: #define MISC_OUTPUT_REG_WRITE_PORT  0x0012  // Miscellaneous Output reg write
                     96:                                             // port
                     97: #define INPUT_STATUS_0_PORT         0x0012  // Input Status 0 register read
                     98:                                             // port
                     99: #define VIDEO_SUBSYSTEM_ENABLE_PORT 0x0013  // Bit 0 enables/disables the
                    100:                                             // entire VGA subsystem
                    101: #define SEQ_ADDRESS_PORT            0x0014  // Sequence Controller Address and
                    102: #define SEQ_DATA_PORT               0x0015  // Data registers
                    103: #define DAC_PIXEL_MASK_PORT         0x0016  // DAC pixel mask reg
                    104: #define DAC_ADDRESS_READ_PORT       0x0017  // DAC register read index reg,
                    105:                                             // write-only
                    106: #define DAC_STATE_PORT              0x0017  // DAC state (read/write),
                    107:                                             // read-only
                    108: #define DAC_ADDRESS_WRITE_PORT      0x0018  // DAC register write index reg
                    109: #define DAC_DATA_REG_PORT           0x0019  // DAC data transfer reg
                    110: #define FEAT_CTRL_READ_PORT         0x001A  // Feature Control read port
                    111: #define MISC_OUTPUT_REG_READ_PORT   0x001C  // Miscellaneous Output reg read
                    112:                                             // port
                    113: #define GRAPH_ADDRESS_PORT          0x001E  // Graphics Controller Address
                    114: #define GRAPH_DATA_PORT             0x001F  // and Data registers
                    115: 
                    116: #define CRTC_ADDRESS_PORT_COLOR     0x0024  // CRT Controller Address and
                    117: #define CRTC_DATA_PORT_COLOR        0x0025  // Data registers in color mode
                    118: #define FEAT_CTRL_WRITE_PORT_COLOR  0x002A  // Feature Control write port
                    119: #define INPUT_STATUS_1_COLOR        0x002A  // Input Status 1 register read
                    120:                                             // port in color mode
                    121: #define ATT_INITIALIZE_PORT_COLOR   INPUT_STATUS_1_COLOR
                    122:                                             // Register to read to reset
                    123:                                             // Attribute Controller index/data
                    124:                                             // toggle in color mode
                    125: 
                    126: //
                    127: // Offsets in HardwareStateHeader->PortValue[] of save areas for non-indexed
                    128: // VGA registers.
                    129: //
                    130: 
                    131: #define CRTC_ADDRESS_MONO_OFFSET      0x04
                    132: #define FEAT_CTRL_WRITE_MONO_OFFSET   0x0A
                    133: #define ATT_ADDRESS_OFFSET            0x10
                    134: #define MISC_OUTPUT_REG_WRITE_OFFSET  0x12
                    135: #define VIDEO_SUBSYSTEM_ENABLE_OFFSET 0x13
                    136: #define SEQ_ADDRESS_OFFSET            0x14
                    137: #define DAC_PIXEL_MASK_OFFSET         0x16
                    138: #define DAC_STATE_OFFSET              0x17
                    139: #define DAC_ADDRESS_WRITE_OFFSET      0x18
                    140: #define GRAPH_ADDRESS_OFFSET          0x1E
                    141: #define CRTC_ADDRESS_COLOR_OFFSET     0x24
                    142: #define FEAT_CTRL_WRITE_COLOR_OFFSET  0x2A
                    143: 
                    144: //
                    145: // VGA indexed register indexes.
                    146: //
                    147: 
                    148: #define IND_CURSOR_START        0x0A    // index in CRTC of the Cursor Start
                    149: #define IND_CURSOR_END          0x0B    //  and End registers
                    150: #define IND_CURSOR_HIGH_LOC     0x0E    // index in CRTC of the Cursor Location
                    151: #define IND_CURSOR_LOW_LOC      0x0F    //  High and Low Registers
                    152: #define IND_VSYNC_END           0x11    // index in CRTC of the Vertical Sync
                    153:                                         //  End register, which has the bit
                    154:                                         //  that protects/unprotects CRTC
                    155:                                         //  index registers 0-7
                    156: #define IND_SET_RESET_ENABLE    0x01    // index of Set/Reset Enable reg in GC
                    157: #define IND_DATA_ROTATE         0x03    // index of Data Rotate reg in GC
                    158: #define IND_READ_MAP            0x04    // index of Read Map reg in Graph Ctlr
                    159: #define IND_GRAPH_MODE          0x05    // index of Mode reg in Graph Ctlr
                    160: #define IND_GRAPH_MISC          0x06    // index of Misc reg in Graph Ctlr
                    161: #define IND_BIT_MASK            0x08    // index of Bit Mask reg in Graph Ctlr
                    162: #define IND_SYNC_RESET          0x00    // index of Sync Reset reg in Seq
                    163: #define IND_MAP_MASK            0x02    // index of Map Mask in Sequencer
                    164: #define IND_MEMORY_MODE         0x04    // index of Memory Mode reg in Seq
                    165: #define IND_CRTC_PROTECT        0x11    // index of reg containing regs 0-7 in
                    166:                                         //  CRTC
                    167: 
                    168: #define START_SYNC_RESET_VALUE  0x01    // value for Sync Reset reg to start
                    169:                                         //  synchronous reset
                    170: #define END_SYNC_RESET_VALUE    0x03    // value for Sync Reset reg to end
                    171:                                         //  synchronous reset
                    172: 
                    173: //
                    174: // Values for Attribute Controller Index register to turn video off
                    175: // and on, by setting bit 5 to 0 (off) or 1 (on).
                    176: //
                    177: 
                    178: #define VIDEO_DISABLE 0
                    179: #define VIDEO_ENABLE  0x20
                    180: 
                    181: //
                    182: // Value written to the Read Map register when identifying the existence of
                    183: // a VGA in VgaInitialize. This value must be different from the final test
                    184: // value written to the Bit Mask in that routine.
                    185: //
                    186: 
                    187: #define READ_MAP_TEST_SETTING 0x03
                    188: 
                    189: //
                    190: // Masks to keep only the significant bits of the Graphics Controller and
                    191: // Sequencer Address registers. Masking is necessary because some VGAs, such
                    192: // as S3-based ones, don't return unused bits set to 0, and some SVGAs use
                    193: // these bits if extensions are enabled.
                    194: //
                    195: 
                    196: #define GRAPH_ADDR_MASK 0x0F
                    197: #define SEQ_ADDR_MASK   0x07
                    198: 
                    199: //
                    200: // Mask used to toggle Chain4 bit in the Sequencer's Memory Mode register.
                    201: //
                    202: 
                    203: #define CHAIN4_MASK 0x08
                    204: 
                    205: //
                    206: // Default text mode setting for various registers, used to restore their
                    207: // states if VGA detection fails after they've been modified.
                    208: //
                    209: 
                    210: #define MEMORY_MODE_TEXT_DEFAULT 0x02
                    211: #define BIT_MASK_DEFAULT 0xFF
                    212: #define READ_MAP_DEFAULT 0x00
                    213: 
                    214: //
                    215: // Palette-related info.
                    216: //
                    217: 
                    218: //
                    219: // Highest valid DAC color register index.
                    220: //
                    221: 
                    222: #define VIDEO_MAX_COLOR_REGISTER  0xFF
                    223: 
                    224: //
                    225: // Highest valid palette register index
                    226: //
                    227: 
                    228: #define VIDEO_MAX_PALETTE_REGISTER 0x0F
                    229: 
                    230: //
                    231: // Indices for type of memory mapping; used in ModesVGA[], must match
                    232: // MemoryMap[].
                    233: //
                    234: 
                    235: typedef enum _VIDEO_MEMORY_MAP {
                    236:     MemMap_Mono,
                    237:     MemMap_CGA,
                    238:     MemMap_VGA
                    239: } VIDEO_MEMORY_MAP, *PVIDEO_MEMORY_MAP;
                    240: 
                    241: //
                    242: // For a mode, the type of banking supported. Controls the information
                    243: // returned in VIDEO_BANK_SELECT. PlanarHCBanking includes NormalBanking.
                    244: //
                    245: 
                    246: typedef enum _BANK_TYPE {
                    247:     NoBanking = 0,
                    248:     NormalBanking,
                    249:     PlanarHCBanking
                    250: } BANK_TYPE, *PBANK_TYPE;
                    251: 
                    252: //
                    253: // Structure used to describe each video mode in ModesVGA[].
                    254: //
                    255: 
                    256: typedef struct {
                    257:     USHORT  fbType; // color or monochrome, text or graphics, via
                    258:                     //  VIDEO_MODE_COLOR and VIDEO_MODE_GRAPHICS
                    259:     USHORT  numPlanes;    // # of video memory planes
                    260:     USHORT  bitsPerPlane; // # of bits of color in each plane
                    261:     SHORT   col;    // # of text columns across screen with default font
                    262:     SHORT   row;    // # of text rows down screen with default font
                    263:     USHORT  hres;   // # of pixels across screen
                    264:     USHORT  vres;   // # of scan lines down screen
                    265:     USHORT  wbytes; // # of bytes from start of one scan line to start of next
                    266:     ULONG   sbytes; // total size of addressable display memory in bytes
                    267:     ULONG   Frequency;  // Vertical Frequency
                    268:     ULONG   Interlaced; // Determines if the mode is interlaced or not
                    269:     BANK_TYPE banktype; // NoBanking, NormalBanking, PlanarHCBanking
                    270:     VIDEO_MEMORY_MAP   MemMap; // index from VIDEO_MEMORY_MAP of memory
                    271:                                //  mapping used by this mode
                    272:     BOOLEAN ValidMode;         //Determines which modes are valid.
                    273: #ifdef INT10_MODE_SET
                    274:     UCHAR   FrequencyMask;     // value used to mask the mode frequency
                    275:     UCHAR   FrequencySetting;  // value used to set the mode frequency
                    276:     ULONG   Int10ModeNumber;   // Mode number via Int 10
                    277: #endif
                    278:     PUSHORT CmdStrings;   // pointer to array of register-setting commands
                    279: } VIDEOMODE, *PVIDEOMODE;
                    280: 
                    281: 
                    282: //
                    283: // Mode into which to put the VGA before starting a VDM, so it's a plain
                    284: // vanilla VGA.  (This is the mode's index in ModesVGA[], currently standard
                    285: // 80x25 text mode.)
                    286: //
                    287: 
                    288: #define DEFAULT_MODE 0
                    289: 
                    290: 
                    291: //
                    292: // Info for the validator functions.
                    293: //
                    294: 
                    295: //
                    296: // Number of each type of indexed register in a standard VGA, used by
                    297: // validator and state save/restore functions.
                    298: //
                    299: // Note: VDMs currently only support basic VGAs only.
                    300: //
                    301: 
                    302: #define VGA_NUM_SEQUENCER_PORTS     5
                    303: #define VGA_NUM_CRTC_PORTS         25
                    304: #define VGA_NUM_GRAPH_CONT_PORTS    9
                    305: #define VGA_NUM_ATTRIB_CONT_PORTS  21
                    306: #define VGA_NUM_DAC_ENTRIES       256
                    307: 
                    308: #ifdef EXTENDED_REGISTER_SAVE_RESTORE
                    309: 
                    310: //
                    311: // Indices to start save/restore in extension registers:
                    312: // For both chip types
                    313: 
                    314: #define WD_GRAPH_EXT_START         0x09
                    315: #define WD_GRAPH_EXT_END           0x0E
                    316: 
                    317: #define WD_SEQUENCER_EXT_START     0x07
                    318: #define WD_SEQUENCER_EXT_END       0x09
                    319: #define WD_SEQUENCER_1_EXT_START   0x10
                    320: #define WD_SEQUENCER_1_EXT_END     0x14
                    321: 
                    322: #define WD_CRTC_EXT_START          0x2A
                    323: #define WD_CRTC_EXT_END            0x30
                    324: #define WD_CRTC_1_EXT_START        0x3E
                    325: #define WD_CRTC_1_EXT_END          0x3E
                    326: 
                    327: //
                    328: // Number of extended regs for both chip types.
                    329: //
                    330: 
                    331: #define WD_NUM_GRAPH_EXT_PORTS     (WD_GRAPH_EXT_END - WD_GRAPH_EXT_START + 1)
                    332: #define WD_NUM_SEQUENCER_EXT_PORTS (WD_SEQUENCER_EXT_END - WD_SEQUENCER_EXT_START + 1) + \
                    333:                                    (WD_SEQUENCER_1_EXT_END - WD_SEQUENCER_1_EXT_START + 1)
                    334: #define WD_NUM_CRTC_EXT_PORTS      (WD_CRTC_EXT_END - WD_CRTC_EXT_START + 1) + \
                    335:                                    (WD_CRTC_1_EXT_END - WD_CRTC_1_EXT_START + 1)
                    336: 
                    337: //
                    338: // set values for save/restore area based on largest value for a chipset.
                    339: //
                    340: 
                    341: #define EXT_NUM_GRAPH_CONT_PORTS    WD_NUM_GRAPH_EXT_PORTS
                    342: #define EXT_NUM_SEQUENCER_PORTS     WD_NUM_SEQUENCER_EXT_PORTS
                    343: #define EXT_NUM_CRTC_PORTS          WD_NUM_CRTC_EXT_PORTS
                    344: #define EXT_NUM_ATTRIB_CONT_PORTS   0
                    345: #define EXT_NUM_DAC_ENTRIES         0
                    346: 
                    347: #else 
                    348: 
                    349: #define EXT_NUM_GRAPH_CONT_PORTS    0
                    350: #define EXT_NUM_SEQUENCER_PORTS     0
                    351: #define EXT_NUM_CRTC_PORTS          0
                    352: #define EXT_NUM_ATTRIB_CONT_PORTS   0
                    353: #define EXT_NUM_DAC_ENTRIES         0
                    354: 
                    355: #endif        
                    356: 
                    357: //
                    358: // Info used by the Validator functions and save/restore code.
                    359: // Structure used to trap register accesses that must be done atomically.
                    360: //
                    361: 
                    362: #define VGA_MAX_VALIDATOR_DATA             100
                    363: 
                    364: #define VGA_VALIDATOR_UCHAR_ACCESS   1
                    365: #define VGA_VALIDATOR_USHORT_ACCESS  2
                    366: #define VGA_VALIDATOR_ULONG_ACCESS   3
                    367: 
                    368: typedef struct _VGA_VALIDATOR_DATA {
                    369:    ULONG Port;
                    370:    UCHAR AccessType;
                    371:    ULONG Data;
                    372: } VGA_VALIDATOR_DATA, *PVGA_VALIDATOR_DATA;
                    373: 
                    374: 
                    375: //
                    376: // Info for the save and restore state functions.
                    377: //
                    378: 
                    379: //
                    380: // Number of bytes to save in each plane.
                    381: //
                    382: 
                    383: #define VGA_PLANE_SIZE 0x10000
                    384: 
                    385: //
                    386: // These constants determine the offsets within the
                    387: // VIDEO_HARDWARE_STATE_HEADER structure that are used to save and
                    388: // restore the VGA's state.
                    389: //
                    390: 
                    391: #define VGA_HARDWARE_STATE_SIZE sizeof(VIDEO_HARDWARE_STATE_HEADER)
                    392: 
                    393: #define VGA_BASIC_SEQUENCER_OFFSET (VGA_HARDWARE_STATE_SIZE + 0)
                    394: #define VGA_BASIC_CRTC_OFFSET (VGA_BASIC_SEQUENCER_OFFSET + \
                    395:          VGA_NUM_SEQUENCER_PORTS)
                    396: #define VGA_BASIC_GRAPH_CONT_OFFSET (VGA_BASIC_CRTC_OFFSET + \
                    397:          VGA_NUM_CRTC_PORTS)
                    398: #define VGA_BASIC_ATTRIB_CONT_OFFSET (VGA_BASIC_GRAPH_CONT_OFFSET + \
                    399:          VGA_NUM_GRAPH_CONT_PORTS)
                    400: #define VGA_BASIC_DAC_OFFSET (VGA_BASIC_ATTRIB_CONT_OFFSET + \
                    401:          VGA_NUM_ATTRIB_CONT_PORTS)
                    402: #define VGA_BASIC_LATCHES_OFFSET (VGA_BASIC_DAC_OFFSET + \
                    403:          (3 * VGA_NUM_DAC_ENTRIES))
                    404: 
                    405: #define VGA_EXT_SEQUENCER_OFFSET (VGA_BASIC_LATCHES_OFFSET + 4)
                    406: #define VGA_EXT_CRTC_OFFSET (VGA_EXT_SEQUENCER_OFFSET + \
                    407:          EXT_NUM_SEQUENCER_PORTS)
                    408: #define VGA_EXT_GRAPH_CONT_OFFSET (VGA_EXT_CRTC_OFFSET + \
                    409:          EXT_NUM_CRTC_PORTS)
                    410: #define VGA_EXT_ATTRIB_CONT_OFFSET (VGA_EXT_GRAPH_CONT_OFFSET + \
                    411:          EXT_NUM_GRAPH_CONT_PORTS)
                    412: #define VGA_EXT_DAC_OFFSET (VGA_EXT_ATTRIB_CONT_OFFSET + \
                    413:          EXT_NUM_ATTRIB_CONT_PORTS)
                    414: 
                    415: #define VGA_VALIDATOR_OFFSET (VGA_EXT_DAC_OFFSET + 4 * EXT_NUM_DAC_ENTRIES)
                    416: 
                    417: #define VGA_VALIDATOR_AREA_SIZE  sizeof (ULONG) + (VGA_MAX_VALIDATOR_DATA * \
                    418:                                  sizeof (VGA_VALIDATOR_DATA)) +             \
                    419:                                  sizeof (ULONG) +                           \
                    420:                                  sizeof (ULONG) +                           \
                    421:                                  sizeof (PVIDEO_ACCESS_RANGE)
                    422: 
                    423: #define VGA_MISC_DATA_AREA_OFFSET VGA_VALIDATOR_OFFSET + VGA_VALIDATOR_AREA_SIZE
                    424: 
                    425: #define VGA_MISC_DATA_AREA_SIZE  0
                    426: 
                    427: #define VGA_PLANE_0_OFFSET VGA_MISC_DATA_AREA_OFFSET + VGA_MISC_DATA_AREA_SIZE
                    428: 
                    429: #define VGA_PLANE_1_OFFSET VGA_PLANE_0_OFFSET + VGA_PLANE_SIZE
                    430: #define VGA_PLANE_2_OFFSET VGA_PLANE_1_OFFSET + VGA_PLANE_SIZE
                    431: #define VGA_PLANE_3_OFFSET VGA_PLANE_2_OFFSET + VGA_PLANE_SIZE
                    432: 
                    433: //
                    434: // Space needed to store all state data.
                    435: //
                    436: 
                    437: #define VGA_TOTAL_STATE_SIZE VGA_PLANE_3_OFFSET + VGA_PLANE_SIZE
                    438: 
                    439: 
                    440: //
                    441: // Device extension for the driver object.  This data is only used
                    442: // locally, so this structure can be added to as needed.
                    443: //
                    444: 
                    445: typedef struct _HW_DEVICE_EXTENSION {
                    446: 
                    447:     PUCHAR  IOAddress;             // base I/O address of VGA ports
                    448:     PVOID   VideoMemoryAddress;    // base virtual memory address of VGA memory
                    449:     ULONG   AdapterMemorySize;     // size, in bytes, of the memory on the
                    450:                                    // board.
                    451:     ULONG   ModeIndex;             // index of current mode in ModesVGA[]
                    452:     ULONG   NumAvailableModes;     // number of valid modes on this device
                    453:     PVIDEOMODE CurrentMode;        // pointer to VIDEOMODE structure for
                    454:                                    // current mode
                    455: 
                    456:     USHORT  FontPelColumns;        // Width of the font in pels
                    457:     USHORT  FontPelRows;           // height of the font in pels
                    458: 
                    459:     VIDEO_CURSOR_POSITION CursorPosition;     // current cursor position
                    460: 
                    461:     UCHAR CursorEnable;            // whether cursor is enabled or not
                    462:     UCHAR CursorTopScanLine;       // Cursor Start register setting (top scan)
                    463:     UCHAR CursorBottomScanLine;    // Cursor End register setting (bottom scan)
                    464: 
                    465:     UCHAR BoardID;                 // Used to identify different boards
                    466:                                    // supported.
                    467: 
                    468:     BOOLEAN ExtendedRegisters;     // Determines if extended registers have
                    469:                                    // been claimed.
                    470: 
                    471:     PHYSICAL_ADDRESS PhysicalVideoMemoryBase; // physical memory address and
                    472:     ULONG PhysicalVideoMemoryLength;          // length of display memory
                    473:     PHYSICAL_ADDRESS PhysicalFrameBase;       // physical memory address and
                    474:     ULONG PhysicalFrameLength;                // length of display memory for
                    475:                                               // the current mode.
                    476: 
                    477:     //
                    478:     // These 4 fields must be at the end of the device extension and must be
                    479:     // kept in this order since this data will be copied to and from the save
                    480:     // state buffer that is passed to and from the VDM.
                    481:     //
                    482: 
                    483:     ULONG TrappedValidatorCount;   // number of entries in the Trapped
                    484:                                    // validator data Array.
                    485:     VGA_VALIDATOR_DATA TrappedValidatorData[VGA_MAX_VALIDATOR_DATA];
                    486:                                    // Data trapped by the validator routines
                    487:                                    // but not yet played back into the VGA
                    488:                                    // register.
                    489: 
                    490:     ULONG SequencerAddressValue;   // Determines if the Sequencer Address Port
                    491:                                    // is currently selecting the SyncReset data
                    492:                                    // register.
                    493: 
                    494:     ULONG CurrentNumVdmAccessRanges;           // Number of access ranges in
                    495:                                                // the access range array pointed
                    496:                                                // to by the next field
                    497:     PVIDEO_ACCESS_RANGE CurrentVdmAccessRange; // Access range currently
                    498:                                                // associated to the VDM
                    499: 
                    500: 
                    501: } HW_DEVICE_EXTENSION, *PHW_DEVICE_EXTENSION;
                    502: 
                    503: 
                    504: //
                    505: // Function prototypes.
                    506: //
                    507: 
                    508: //
                    509: // Entry points for the VGA validator. Used in VgaEmulatorAccessEntries[].
                    510: //
                    511: 
                    512: VP_STATUS
                    513: VgaValidatorUcharEntry (
                    514:     ULONG Context,
                    515:     ULONG Port,
                    516:     UCHAR AccessMode,
                    517:     PUCHAR Data
                    518:     );
                    519: 
                    520: VP_STATUS
                    521: VgaValidatorUshortEntry (
                    522:     ULONG Context,
                    523:     ULONG Port,
                    524:     UCHAR AccessMode,
                    525:     PUSHORT Data
                    526:     );
                    527: 
                    528: VP_STATUS
                    529: VgaValidatorUlongEntry (
                    530:     ULONG Context,
                    531:     ULONG Port,
                    532:     UCHAR AccessMode,
                    533:     PULONG Data
                    534:     );
                    535: 
                    536: BOOLEAN
                    537: VgaPlaybackValidatorData (
                    538:     PVOID Context
                    539:     );
                    540: 
                    541: //
                    542: // Bank switch code start and end labels, define in HARDWARE.ASM
                    543: //
                    544: 
                    545: extern UCHAR BankSwitchStart;
                    546: extern UCHAR BankSwitchEnd;
                    547: 
                    548: //
                    549: // Vga init scripts for font loading
                    550: //
                    551: 
                    552: extern USHORT EnableA000Data[];
                    553: extern USHORT DisableA000Color[];

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.