minivdd.h
来自「用于查询PC机上的USB端口是否有设备挂接上」· C头文件 代码 · 共 1,208 行 · 第 1/3 页
H
1,208 行
//*****************************************************************************
//
// (C) Copyright MICROSOFT Corp., 1988-1993
//
// Title: minivdd.inc - VDD definitions for other VxD's and multiple VDD's
//
// Version: 4.00
//
// Date:
//
// Author: FredE for the Mini-VDD interface. Adapted from VDD.INC in
// the general include area. Added services are ONLY for the
// use of the Mini-VDD and should therefore not be documented.
//
//-----------------------------------------------------------------------------
//=============================================================================
#ifndef _MINIVDD_H_
#define _MINIVDD_H_
#ifndef Not_VxD
/*XLATOFF*/
#define VDD_Service Declare_Service
#pragma warning (disable:4003) // turn off not enough params warning
/*XLATON*/
#ifdef MINIVDD
#ifdef NEC_98
/*MACROS*/
//
// VDD protect mode services for other devices and VMM (Get_Version must be first).
// Only define these if we're assembling either the "main" VDD or one of the
// mini-VDD's. Don't define this if we're assembling a display driver or other
// caller of the MiniVDD stuff:
//
Begin_Service_Table(VDD)
VDD_Service( VDD_Get_Version ) // Get version number and ID string ptr
VDD_Service( VDD_PIF_State ) // Pass video PIF bits to VDD
VDD_Service( VDD_Get_GrabRtn ) // Get routine addr for video grab
VDD_Service( VDD_Hide_Cursor ) // Hide cursor when display is windowed
VDD_Service( VDD_Set_VMType ) // Set VM type(windowed, bckgrnd, excl)
VDD_Service( VDD_Get_ModTime ) // Return system time of last mod
VDD_Service( VDD_Set_HCurTrk ) // Track horiz cursor movement in window
VDD_Service( VDD_Msg_ClrScrn ) // Clear screen for sysmodal message
VDD_Service( VDD_Msg_ForColor ) // Set Msg_TextOut forground color
VDD_Service( VDD_Msg_BakColor ) // Set Msg_TextOut background color
VDD_Service( VDD_Msg_TextOut ) // Output a string
VDD_Service( VDD_Msg_SetCursPos ) // Set cursor position
VDD_Service( VDD_Query_Access ) // Is it OK to access video now?
VDD_Service( VDD_Check_Update_Soon ) // User action may update screen
VDD_Service( VDD_Get_Mini_Dispatch_Table) // Get addr of dispatch table to mini-VDD
VDD_Service( VDD_Register_Virtual_Port ) // Mini-VDD asks us to setup I/O trap
VDD_Service( VDD_Get_VM_Info ) // Returns CRTC owner and MemC owners
// and other special VM handles
VDD_Service( VDD_Get_Special_VM_IDs ) // returns planar & msg mode IDs
VDD_Service( VDD_Register_Extra_Screen_Selector )
// allows display driver to use second
// screen selector for block moves
VDD_Service( VDD_Takeover_VGA_Port ) // allows MiniVDD to takeover a port
// in range 3C0H through 3DFH
VDD_Service( VDD_Get_DISPLAYINFO ) // get DISPLAYINFO data structure
VDD_Service( VDD_Do_Physical_IO ) // perform physical I/O for trapped port
VDD_Service( VDD_Register_Mini_VDD )
VDD_Service( VDD_Install_IO_Handler )
VDD_Service( VDD_Install_Mult_IO_Handlers )
VDD_Service( VDD_Enable_Local_Trapping )
VDD_Service( VDD_Disable_Local_Trapping )
VDD_Service( VDD_Trap_Suspend )
VDD_Service( Test_Vid_VM_Handle )
VDD_Service( VDD_Set_Core_Graphics )
VDD_Service( VDD_Load_AccBIOS )
VDD_Service( VDD_Map_AccBIOS )
VDD_Service( VDD_Map_VRAM )
VDD_Service( VDD_EnableDevice )
End_Service_Table(VDD)
/*ENDMACROS*/
#else /*NEC_98*/
/*MACROS*/
//
// VDD protect mode services for other devices and VMM (Get_Version must be first).
// Only define these if we're assembling either the "main" VDD or one of the
// mini-VDD's. Don't define this if we're assembling a display driver or other
// caller of the MiniVDD stuff:
//
Begin_Service_Table(VDD)
VDD_Service( VDD_Get_Version )// Get version number and ID string ptr
VDD_Service( VDD_PIF_State )// Pass video PIF bits to VDD
VDD_Service( VDD_Get_GrabRtn )// Get routine addr for video grab
VDD_Service( VDD_Hide_Cursor )// Hide cursor when display is windowed
VDD_Service( VDD_Set_VMType )// Set VM type(windowed, bckgrnd, excl)
VDD_Service( VDD_Get_ModTime )// Return system time of last mod
VDD_Service( VDD_Set_HCurTrk )// Track horiz cursor movement in window
VDD_Service( VDD_Msg_ClrScrn )// Clear screen for sysmodal message
VDD_Service( VDD_Msg_ForColor )// Set Msg_TextOut forground color
VDD_Service( VDD_Msg_BakColor )// Set Msg_TextOut background color
VDD_Service( VDD_Msg_TextOut )// Output a string
VDD_Service( VDD_Msg_SetCursPos )// Set cursor position
VDD_Service( VDD_Query_Access )// Is it OK to access video now?
VDD_Service( VDD_Check_Update_Soon )// User action may update screen
VDD_Service( VDD_Get_Mini_Dispatch_Table )// Get addr of dispatch table to mini-VDD
VDD_Service( VDD_Register_Virtual_Port )// Mini-VDD asks us to setup I/O trap
VDD_Service( VDD_Get_VM_Info )// Returns CRTC owner and MemC owners
// and other special VM handles
VDD_Service( VDD_Get_Special_VM_IDs )// returns planar & msg mode IDs
VDD_Service( VDD_Register_Extra_Screen_Selector )
// allows display driver to use second
// screen selector for block moves
VDD_Service( VDD_Takeover_VGA_Port ) // allows MiniVDD to takeover a port
// in range 3C0H through 3DFH
VDD_Service( VDD_Get_DISPLAYINFO ) // get DISPLAYINFO data structure
VDD_Service( VDD_Do_Physical_IO ) // perform physical I/O for trapped port
VDD_Service( VDD_Set_Sleep_Flag_Addr ) // when display driver can't be interrupted
VDD_Service( VDD_EnableDevice )
End_Service_Table(VDD)
/*ENDMACROS*/
#endif /*NEC_98*/
#endif /*MINIVDD*/
/*XLATOFF*/
#pragma warning (default:4003) // turn off not enough params warning
/*XLATON*/
#define VDD_VerNum 0x0400 // version 4.00
#define VDD_MinVerNum 0x030A // supports down to 3.10
//***************
// PIF_State service definitions
//
// These definitions cannot change without changing the PIF editor!!!
//
#ifdef NEC_98
#define bVidTextMd 4 ; Allocate text mode mem
#define fVidTextMd (1 << 4)
#define bVidNTModeFF 0 ; NoTrap: Mode F/F
#define fVidNTModeFF (1 << 0)
#define bVidNTModeFFC16 1 ; Default is 16 color mode
#define fVidNTModeFFC16 (1 << 1)
#define bVidNTDispRW 2 ; NoTrap: Bank Register
#define fVidNTDispRW (1 << 2)
#define bVidNTPal 3 ; NoTrap: Palette
#define fVidNTPal (1 << 3)
#define bVidNTGDC 5 ; NoTrap: GDC
#define fVidNTGDC (1 << 5)
#define bVidNTGDCTON 6 ; Default Text on
#define fVidNTGDCTON (1 << 6)
#define bVidNTGDCGON 7 ; Default Grph on
#define fVidNTGDCGON (1 << 7)
#define bVidNTFont 8 ; NoTrap: KCG
#define fVidNTFont (1 << 8)
#define bVidCRTC 9 ; Use CRTC Tracer
#define fVidCRTC (1 << 9)
#define bVidDispDataXfer 10 ; Transrate mode (0:Text, 1:Text/Grph)
#define fVidDispDataXfer (1 << 10)
#define bVidXFERPlane0 11 ; Transrate plane Blue
#define fVidXFERPlane0 (1 << 11)
#define bVidXFERPlane1 12 ; Red
#define fVidXFERPlane1 (1 << 12)
#define bVidXFERPlane2 13 ; Green
#define fVidXFERPlane2 (1 << 13)
#define bVidXFERPlane3 14 ; Intensity
#define fVidXFERPlane3 (1 << 14)
#define mVidXFERPlane (fVidXFERPlane0+fVidXFERPlane1+fVidXFERPlane2+fVidXFERPlane3)
#define mVidNTH98 (fVidNTModeFF+fVidNTModeFFC16+fVidNTDispRW+fVidNTPal+fVidNTGDC+fVidNTGDCTON+fVidNTGDCGON)
#else //NEC_98
#define fVidTxtEmulate 0x0001 // Do INT 10h TTY and cursor emulation
#define fVidNoTrpTxt 0x0002 // Do not trap text mode apps
#define fVidNoTrpLRGrfx 0x0004 // Do not trap lo res graphics mode apps
#define fVidNoTrpHRGrfx 0x0008 // Do not trap hi res graphics mode apps
#define fVidTextMd 0x0010 // Allocate text mode mem
#define fVidLowRsGrfxMd 0x0020 // Allocate lo res graphics mode mem
#define fVidHghRsGrfxMd 0x0040 // Allocate hi res graphics mode mem
#define fVidRetainAllo 0x0080 // Never deallocate once allocated
#endif //NEC_98
//
// The following stuff was added for mini-VDD support:
//
// Functions that we can call in the hardware-dependent mini-VDD. Note that
// these equates are used to create the dispatch table for calling functions
// in the mini-VDD:
//
#ifdef NEC_98
#define REGISTER_DISPLAY_DRIVER 0
#define PRE_HIRES_TO_VGA 1
#define SAVE_REGISTERS 2
#define RESTORE_REGISTERS 3
#define ENABLE_TRAPS 4
#define DISABLE_TRAPS 5
#define DISPLAY_DRIVER_DISABLING 6
#define ENABLE_ACCELERATER 7
#define DISABLE_ACCELERATER 8
#define CHECK_UPDATE 9
#define CHECK_WINDOWED 10
#define ACC_VBE_PM 11
#define ACC_VBE_DDC 12
#define ACC_INT_10 13
#define ACC_GET_CAPABILITIES 14
#define ACC_GET_EXT_MODE_INFO 15
#define ACC_GET_FLAT_SELECTOR 16
#define ACC_ENABLE_BIOS 17
#define ACC_DISABLE_BIOS 18
#define ACC_SET_PALETTE 19
#define ACC_GET_PALETTE 20
#define ACC_SET_CURSOR 21
#define ACC_SHOW_CURSOR 22
#define ACC_HIDE_CURSOR 23
#define ACC_SET_CURSOR_POS 24
#define ACC_GET_CURSOR_POS 25
;
// Support for GET/SET_MONITOR_POWER_STATE
// If this is not set, the system will not hibernate
#define CM_POWERSTATE_HIBERNATE 0x00000010
#define CM_POWERSTATE_VDD_VALID (CM_POWERSTATE_BITS | CM_POWERSTATE_HIBERNATE)
// 970204 //#define NBR_MINI_VDD_FUNCTIONS 26 //REMEMBER TO RESET THIS!!!!!!
#define NBR_MINI_VDD_FUNCTIONS_40 26 //
#define GET_NUM_UNITS 26 // 970220 rev.1
#define SET_ADAPTER_POWER_STATE 27 // SetAdapterPowerState(DEVNODE, DWORD)
#define GET_ADAPTER_POWER_STATE_CAPS 28 // GetAdapterPowerStateCap(DEVNODE)
#define SET_MONITOR_POWER_STATE 29 // SetMonitorPowerState(DEVNODE, DWORD)
#define GET_MONITOR_POWER_STATE_CAPS 30 // GetMonitorPowerStateCaps(DEVNODE)
#define GET_MONITOR_INFO 31 // GetMonitorInfo(DEVNODE, UINT, EDID *)
#define I2C_OPEN 32 // OpenI2CPort(PDO, BOOL, I2CControl *)
#define I2C_ACCESS 33 // AccessI2CPort(PDO, I2CControl *);
#define GPIO_OPEN 34 // OpenGPIOPort(PDO, BOOL, GPIOControl *)
#define GPIO_ACCESS 35 // AccessGPIOPort(PDO, GPIOControl *)
#define COPYPROTECTION_ACCESS 36 // AccessCopyProtection(PDO,CPControl * )
#define NBR_MINI_VDD_FUNCTIONS_41 37
#ifdef MAINVDD
#define NBR_MINI_VDD_FUNCTIONS NBR_MINI_VDD_FUNCTIONS_41
#else
#define NBR_MINI_VDD_FUNCTIONS NBR_MINI_VDD_FUNCTIONS_40
#endif
#else //NEC_98
#define REGISTER_DISPLAY_DRIVER 0
#define GET_VDD_BANK 1
#define SET_VDD_BANK 2
#define RESET_BANK 3
#define PRE_HIRES_TO_VGA 4
#define POST_HIRES_TO_VGA 5
#define PRE_VGA_TO_HIRES 6
#define POST_VGA_TO_HIRES 7
#define SAVE_REGISTERS 8
#define RESTORE_REGISTERS 9
#define MODIFY_REGISTER_STATE 10
#define ACCESS_VGA_MEMORY_MODE 11
#define ACCESS_LINEAR_MEMORY_MODE 12
#define ENABLE_TRAPS 13
#define DISABLE_TRAPS 14
#define MAKE_HARDWARE_NOT_BUSY 15
#define VIRTUALIZE_CRTC_IN 16
#define VIRTUALIZE_CRTC_OUT 17
#define VIRTUALIZE_SEQUENCER_IN 18
#define VIRTUALIZE_SEQUENCER_OUT 19
#define VIRTUALIZE_GCR_IN 20
#define VIRTUALIZE_GCR_OUT 21
#define SET_LATCH_BANK 22
#define RESET_LATCH_BANK 23
#define SAVE_LATCHES 24
#define RESTORE_LATCHES 25
#define DISPLAY_DRIVER_DISABLING 26
#define SELECT_PLANE 27
#define PRE_CRTC_MODE_CHANGE 28
#define POST_CRTC_MODE_CHANGE 29
#define VIRTUALIZE_DAC_OUT 30
#define VIRTUALIZE_DAC_IN 31
#define GET_CURRENT_BANK_WRITE 32
#define GET_CURRENT_BANK_READ 33
#define SET_BANK 34
#define CHECK_HIRES_MODE 35
#define GET_TOTAL_VRAM_SIZE 36
#define GET_BANK_SIZE 37
#define SET_HIRES_MODE 38
#define PRE_HIRES_SAVE_RESTORE 39
#define POST_HIRES_SAVE_RESTORE 40
#define VESA_SUPPORT 41
#define GET_CHIP_ID 42
#define CHECK_SCREEN_SWITCH_OK 43
#define VIRTUALIZE_BLTER_IO 44
#define SAVE_MESSAGE_MODE_STATE 45
#define SAVE_FORCED_PLANAR_STATE 46
#define VESA_CALL_POST_PROCESSING 47
#define PRE_INT_10_MODE_SET 48
#define NBR_MINI_VDD_FUNCTIONS_40 49 //REMEMBER TO RESET THIS!!!!!!
//
// new miniVDD functions that a 4.1 miniVDD should implement
//
// Support for GET/SET_MONITOR_POWER_STATE
// If this is not set, the system will not hibernate
#define CM_POWERSTATE_HIBERNATE 0x00000010
#define CM_POWERSTATE_VDD_VALID (CM_POWERSTATE_BITS | CM_POWERSTATE_HIBERNATE)
#define GET_NUM_UNITS 49 // GetNumUnits(DEVNODE)
#define TURN_VGA_OFF 50 // TurnOffVGA(DEVNODE)
#define TURN_VGA_ON 51 // TurnOnVGA(DEVNODE)
#define SET_ADAPTER_POWER_STATE 52 // SetAdapterPowerState(DEVNODE, DWORD)
#define GET_ADAPTER_POWER_STATE_CAPS 53 // GetAdapterPowerStateCap(DEVNODE)
#define SET_MONITOR_POWER_STATE 54 // SetMonitorPowerState(DEVNODE, DWORD)
#define GET_MONITOR_POWER_STATE_CAPS 55 // GetMonitorPowerStateCaps(DEVNODE)
#define GET_MONITOR_INFO 56 // GetMonitorInfo(DEVNODE, UINT, EDID *)
#define I2C_OPEN 57 // OpenI2CPort(PDO, BOOL, I2CControl *)
#define I2C_ACCESS 58 // AccessI2CPort(PDO, I2CControl *);
#define GPIO_OPEN 59 // OpenGPIOPort(PDO, BOOL, GPIOControl *)
#define GPIO_ACCESS 60 // AccessGPIOPort(PDO, GPIOControl *)
#define COPYPROTECTION_ACCESS 61 // AccessCopyProtection(PDO,CPControl * )
#define NBR_MINI_VDD_FUNCTIONS_41 62
#ifdef MAINVDD
#define NBR_MINI_VDD_FUNCTIONS NBR_MINI_VDD_FUNCTIONS_41
#else
#define NBR_MINI_VDD_FUNCTIONS NBR_MINI_VDD_FUNCTIONS_40
#endif
#endif //NEC_98
#endif /*NotVxD*/
//
// Following are function codes that can be called via the VDD's
// API entry point. These are mainly for display driver --> VDD communication.
// Since Windows 3.0 and 3.1 VDD's may have used the sequential numbers
// (after the Grabber functions) for other VDD API services, we start our
// numbering at 80H so as to avoid ugly conflicts with old 3.1 stuff:
//
// all these entry points take as input:
//
// Entry:
// Client_EAX - function code.
// Client_EBX - device handle, or device id (1-N)
//
#define VDD_QUERY_VERSION 0
#define MINIVDD_SVC_BASE_OFFSET 0x80
#define VDD_DRIVER_REGISTER (0 + MINIVDD_SVC_BASE_OFFSET)
#define VDD_DRIVER_UNREGISTER (1 + MINIVDD_SVC_BASE_OFFSET)
#define VDD_SAVE_DRIVER_STATE (2 + MINIVDD_SVC_BASE_OFFSET)
#define VDD_REGISTER_DISPLAY_DRIVER_INFO (3 + MINIVDD_SVC_BASE_OFFSET)
#define VDD_REGISTER_SSB_FLAGS (4 + MINIVDD_SVC_BASE_OFFSET)
#define VDD_GET_DISPLAY_CONFIG (5 + MINIVDD_SVC_BASE_OFFSET)
#define VDD_PRE_MODE_CHANGE (6 + MINIVDD_SVC_BASE_OFFSET)
#define VDD_POST_MODE_CHANGE (7 + MINIVDD_SVC_BASE_OFFSET)
#define VDD_SET_USER_FLAGS (8 + MINIVDD_SVC_BASE_OFFSET)
#define VDD_SET_BUSY_FLAG_ADDR (9 + MINIVDD_SVC_BASE_OFFSET)
#define VDD_PC98_RESERVED (10 + MINIVDD_SVC_BASE_OFFSET)
#define VDD_VBE_PM (10 + MINIVDD_SVC_BASE_OFFSET)
//
// all functions >= VDD_ENABLE also take the following params:
//
// Client_ES:DI - buffer
// Client_ECX - buffer size
// Client_EDX - flags
//
// Exit:
// Client_EAX = function code if the function is not supported.
// = 0 if the function succeded.
// = -1 if the function failed.
//
#define VDD_ENABLE (11 + MINIVDD_SVC_BASE_OFFSET)
#define VDD_GETMEMBASE (12 + MINIVDD_SVC_BASE_OFFSET)
#define VDD_OPEN (13 + MINIVDD_SVC_BASE_OFFSET)
#define VDD_CLOSE (14 + MINIVDD_SVC_BASE_OFFSET)
#define VDD_OPEN_KEY (15 + MINIVDD_SVC_BASE_OFFSET)
#define VDD_SET_POWER_STATE (16 + MINIVDD_SVC_BASE_OFFSET)
#define VDD_GET_POWER_STATE_CAPS (17 + MINIVDD_SVC_BASE_OFFSET)
//
// special verion of VDD_GET_DISPLAY_CONFIG that always get the
// monitor data, even if the user has disabled using a refresh rate.
//
#define VDD_GET_DISPLAY_CONFIG2 0x8085
//
// VDD_DRIVER_REGISTER
//
// The display driver sends us some information needed to handle various
// context changes.
//
// Entry:
// Client_ES:DI Selector:Offset of callback routine used
// to reset to Windows HiRes mode upon return
// from a full screen DOS VM to the Windows VM.
// Client_ES Main code segment of display driver.
// Client_ECX contains the total nbr of bytes on-screen (excluding
// off-screen memory).
// Client_EDX contain 0 if we are to attempt to allow 4 plane VGA
// virtualization.
// Client_EDX contains -1 if we are to not allow 4 plane VGA
// virtualization.
// Client_EBX device handle, or device id (1-N)
// Exit:
// Client_EAX contains total bytes of memory used by visible screen
// AND the VDD virtualization area (ie: the start of
// off-screen memory available for use by the display
// driver as "scratch" memory).
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?