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