ifndef _MINIVDD_H_ _MINIVDD_H_ EQU 1 ifndef Not_VxD ifdef MINIVDD ifdef NEC_98 Begin_Service_Table VDD VDD_Service VDD_Get_Version VDD_Service VDD_PIF_State VDD_Service VDD_Get_GrabRtn VDD_Service VDD_Hide_Cursor VDD_Service VDD_Set_VMType VDD_Service VDD_Get_ModTime VDD_Service VDD_Set_HCurTrk VDD_Service VDD_Msg_ClrScrn VDD_Service VDD_Msg_ForColor VDD_Service VDD_Msg_BakColor VDD_Service VDD_Msg_TextOut VDD_Service VDD_Msg_SetCursPos VDD_Service VDD_Query_Access VDD_Service VDD_Check_Update_Soon VDD_Service VDD_Get_Mini_Dispatch_Table VDD_Service VDD_Register_Virtual_Port VDD_Service VDD_Get_VM_Info VDD_Service VDD_Get_Special_VM_IDs VDD_Service VDD_Register_Extra_Screen_Selector VDD_Service VDD_Takeover_VGA_Port VDD_Service VDD_Get_DISPLAYINFO VDD_Service VDD_Do_Physical_IO 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 else Begin_Service_Table VDD VDD_Service VDD_Get_Version VDD_Service VDD_PIF_State VDD_Service VDD_Get_GrabRtn VDD_Service VDD_Hide_Cursor VDD_Service VDD_Set_VMType VDD_Service VDD_Get_ModTime VDD_Service VDD_Set_HCurTrk VDD_Service VDD_Msg_ClrScrn VDD_Service VDD_Msg_ForColor VDD_Service VDD_Msg_BakColor VDD_Service VDD_Msg_TextOut VDD_Service VDD_Msg_SetCursPos VDD_Service VDD_Query_Access VDD_Service VDD_Check_Update_Soon VDD_Service VDD_Get_Mini_Dispatch_Table VDD_Service VDD_Register_Virtual_Port VDD_Service VDD_Get_VM_Info VDD_Service VDD_Get_Special_VM_IDs VDD_Service VDD_Register_Extra_Screen_Selector VDD_Service VDD_Takeover_VGA_Port VDD_Service VDD_Get_DISPLAYINFO VDD_Service VDD_Do_Physical_IO VDD_Service VDD_Set_Sleep_Flag_Addr VDD_Service VDD_EnableDevice End_Service_Table VDD endif endif VDD_VerNum EQU 0400H VDD_MinVerNum EQU 030AH ifdef NEC_98 bVidTextMd EQU 4 fVidTextMd EQU (1 SHL 4) bVidNTModeFF EQU 0 fVidNTModeFF EQU (1 SHL 0) bVidNTModeFFC16 EQU 1 fVidNTModeFFC16 EQU (1 SHL 1) bVidNTDispRW EQU 2 fVidNTDispRW EQU (1 SHL 2) bVidNTPal EQU 3 fVidNTPal EQU (1 SHL 3) bVidNTGDC EQU 5 fVidNTGDC EQU (1 SHL 5) bVidNTGDCTON EQU 6 fVidNTGDCTON EQU (1 SHL 6) bVidNTGDCGON EQU 7 fVidNTGDCGON EQU (1 SHL 7) bVidNTFont EQU 8 fVidNTFont EQU (1 SHL 8) bVidCRTC EQU 9 fVidCRTC EQU (1 SHL 9) bVidDispDataXfer EQU 10 fVidDispDataXfer EQU (1 SHL 10) bVidXFERPlane0 EQU 11 fVidXFERPlane0 EQU (1 SHL 11) bVidXFERPlane1 EQU 12 fVidXFERPlane1 EQU (1 SHL 12) bVidXFERPlane2 EQU 13 fVidXFERPlane2 EQU (1 SHL 13) bVidXFERPlane3 EQU 14 fVidXFERPlane3 EQU (1 SHL 14) mVidXFERPlane EQU (fVidXFERPlane0+fVidXFERPlane1+fVidXFERPlane2+fVidXFERPlane3) mVidNTH98 EQU (fVidNTModeFF+fVidNTModeFFC16+fVidNTDispRW+fVidNTPal+fVidNTGDC+fVidNTGDCTON+fVidNTGDCGON) else fVidTxtEmulate EQU 0001H fVidNoTrpTxt EQU 0002H fVidNoTrpLRGrfx EQU 0004H fVidNoTrpHRGrfx EQU 0008H fVidTextMd EQU 0010H fVidLowRsGrfxMd EQU 0020H fVidHghRsGrfxMd EQU 0040H fVidRetainAllo EQU 0080H endif ifdef NEC_98 REGISTER_DISPLAY_DRIVER EQU 0 PRE_HIRES_TO_VGA EQU 1 SAVE_REGISTERS EQU 2 RESTORE_REGISTERS EQU 3 ENABLE_TRAPS EQU 4 DISABLE_TRAPS EQU 5 DISPLAY_DRIVER_DISABLING EQU 6 ENABLE_ACCELERATER EQU 7 DISABLE_ACCELERATER EQU 8 CHECK_UPDATE EQU 9 CHECK_WINDOWED EQU 10 ACC_VBE_PM EQU 11 ACC_VBE_DDC EQU 12 ACC_INT_10 EQU 13 ACC_GET_CAPABILITIES EQU 14 ACC_GET_EXT_MODE_INFO EQU 15 ACC_GET_FLAT_SELECTOR EQU 16 ACC_ENABLE_BIOS EQU 17 ACC_DISABLE_BIOS EQU 18 ACC_SET_PALETTE EQU 19 ACC_GET_PALETTE EQU 20 ACC_SET_CURSOR EQU 21 ACC_SHOW_CURSOR EQU 22 ACC_HIDE_CURSOR EQU 23 ACC_SET_CURSOR_POS EQU 24 ACC_GET_CURSOR_POS EQU 25 CM_POWERSTATE_HIBERNATE EQU 00000010H CM_POWERSTATE_VDD_VALID EQU <(CM_POWERSTATE_BITS OR CM_POWERSTATE_HIBERNATE)> NBR_MINI_VDD_FUNCTIONS_40 EQU 26 GET_NUM_UNITS EQU 26 SET_ADAPTER_POWER_STATE EQU 27 GET_ADAPTER_POWER_STATE_CAPS EQU 28 SET_MONITOR_POWER_STATE EQU 29 GET_MONITOR_POWER_STATE_CAPS EQU 30 GET_MONITOR_INFO EQU 31 I2C_OPEN EQU 32 I2C_ACCESS EQU 33 GPIO_OPEN EQU 34 GPIO_ACCESS EQU 35 COPYPROTECTION_ACCESS EQU 36 NBR_MINI_VDD_FUNCTIONS_41 EQU 37 ifdef MAINVDD NBR_MINI_VDD_FUNCTIONS EQU NBR_MINI_VDD_FUNCTIONS_41 else NBR_MINI_VDD_FUNCTIONS EQU NBR_MINI_VDD_FUNCTIONS_40 endif else REGISTER_DISPLAY_DRIVER EQU 0 GET_VDD_BANK EQU 1 SET_VDD_BANK EQU 2 RESET_BANK EQU 3 PRE_HIRES_TO_VGA EQU 4 POST_HIRES_TO_VGA EQU 5 PRE_VGA_TO_HIRES EQU 6 POST_VGA_TO_HIRES EQU 7 SAVE_REGISTERS EQU 8 RESTORE_REGISTERS EQU 9 MODIFY_REGISTER_STATE EQU 10 ACCESS_VGA_MEMORY_MODE EQU 11 ACCESS_LINEAR_MEMORY_MODE EQU 12 ENABLE_TRAPS EQU 13 DISABLE_TRAPS EQU 14 MAKE_HARDWARE_NOT_BUSY EQU 15 VIRTUALIZE_CRTC_IN EQU 16 VIRTUALIZE_CRTC_OUT EQU 17 VIRTUALIZE_SEQUENCER_IN EQU 18 VIRTUALIZE_SEQUENCER_OUT EQU 19 VIRTUALIZE_GCR_IN EQU 20 VIRTUALIZE_GCR_OUT EQU 21 SET_LATCH_BANK EQU 22 RESET_LATCH_BANK EQU 23 SAVE_LATCHES EQU 24 RESTORE_LATCHES EQU 25 DISPLAY_DRIVER_DISABLING EQU 26 SELECT_PLANE EQU 27 PRE_CRTC_MODE_CHANGE EQU 28 POST_CRTC_MODE_CHANGE EQU 29 VIRTUALIZE_DAC_OUT EQU 30 VIRTUALIZE_DAC_IN EQU 31 GET_CURRENT_BANK_WRITE EQU 32 GET_CURRENT_BANK_READ EQU 33 SET_BANK EQU 34 CHECK_HIRES_MODE EQU 35 GET_TOTAL_VRAM_SIZE EQU 36 GET_BANK_SIZE EQU 37 SET_HIRES_MODE EQU 38 PRE_HIRES_SAVE_RESTORE EQU 39 POST_HIRES_SAVE_RESTORE EQU 40 VESA_SUPPORT EQU 41 GET_CHIP_ID EQU 42 CHECK_SCREEN_SWITCH_OK EQU 43 VIRTUALIZE_BLTER_IO EQU 44 SAVE_MESSAGE_MODE_STATE EQU 45 SAVE_FORCED_PLANAR_STATE EQU 46 VESA_CALL_POST_PROCESSING EQU 47 PRE_INT_10_MODE_SET EQU 48 NBR_MINI_VDD_FUNCTIONS_40 EQU 49 CM_POWERSTATE_HIBERNATE EQU 00000010H CM_POWERSTATE_VDD_VALID EQU <(CM_POWERSTATE_BITS OR CM_POWERSTATE_HIBERNATE)> GET_NUM_UNITS EQU 49 TURN_VGA_OFF EQU 50 TURN_VGA_ON EQU 51 SET_ADAPTER_POWER_STATE EQU 52 GET_ADAPTER_POWER_STATE_CAPS EQU 53 SET_MONITOR_POWER_STATE EQU 54 GET_MONITOR_POWER_STATE_CAPS EQU 55 GET_MONITOR_INFO EQU 56 I2C_OPEN EQU 57 I2C_ACCESS EQU 58 GPIO_OPEN EQU 59 GPIO_ACCESS EQU 60 COPYPROTECTION_ACCESS EQU 61 NBR_MINI_VDD_FUNCTIONS_41 EQU 62 ifdef MAINVDD NBR_MINI_VDD_FUNCTIONS EQU NBR_MINI_VDD_FUNCTIONS_41 else NBR_MINI_VDD_FUNCTIONS EQU NBR_MINI_VDD_FUNCTIONS_40 endif endif endif VDD_QUERY_VERSION EQU 0 MINIVDD_SVC_BASE_OFFSET EQU 80H VDD_DRIVER_REGISTER EQU (0+MINIVDD_SVC_BASE_OFFSET) VDD_DRIVER_UNREGISTER EQU (1+MINIVDD_SVC_BASE_OFFSET) VDD_SAVE_DRIVER_STATE EQU (2+MINIVDD_SVC_BASE_OFFSET) VDD_REGISTER_DISPLAY_DRIVER_INFO EQU (3+MINIVDD_SVC_BASE_OFFSET) VDD_REGISTER_SSB_FLAGS EQU (4+MINIVDD_SVC_BASE_OFFSET) VDD_GET_DISPLAY_CONFIG EQU (5+MINIVDD_SVC_BASE_OFFSET) VDD_PRE_MODE_CHANGE EQU (6+MINIVDD_SVC_BASE_OFFSET) VDD_POST_MODE_CHANGE EQU (7+MINIVDD_SVC_BASE_OFFSET) VDD_SET_USER_FLAGS EQU (8+MINIVDD_SVC_BASE_OFFSET) VDD_SET_BUSY_FLAG_ADDR EQU (9+MINIVDD_SVC_BASE_OFFSET) VDD_PC98_RESERVED EQU (10+MINIVDD_SVC_BASE_OFFSET) VDD_VBE_PM EQU (10+MINIVDD_SVC_BASE_OFFSET) VDD_ENABLE EQU (11+MINIVDD_SVC_BASE_OFFSET) VDD_GETMEMBASE EQU (12+MINIVDD_SVC_BASE_OFFSET) VDD_OPEN EQU (13+MINIVDD_SVC_BASE_OFFSET) VDD_CLOSE EQU (14+MINIVDD_SVC_BASE_OFFSET) VDD_OPEN_KEY EQU (15+MINIVDD_SVC_BASE_OFFSET) VDD_SET_POWER_STATE EQU (16+MINIVDD_SVC_BASE_OFFSET) VDD_GET_POWER_STATE_CAPS EQU (17+MINIVDD_SVC_BASE_OFFSET) VDD_GET_DISPLAY_CONFIG2 EQU 8085H ENABLE_IO EQU 00000001H ENABLE_MEM EQU 00000002H ENABLE_VGA EQU 00000030H ENABLE_ROM EQU 00000080H ENABLE_ALL EQU 000000FFH ENABLE_NONE EQU 00000000H ENABLE_VALID EQU 000000FFH ENABLE_ERROR EQU 0FFFFFFFFH VDD_OPEN_EXIST EQU 00000001H VDD_OPEN_ENUM EQU 00000002H VDD_OPEN_LOCK EQU 00000000H VDD_OPEN_TEST EQU VDD_OPEN_EXIST VDD_OPEN_KEY_WRITE EQU 00000001H VDD_OPEN_KEY_READ EQU 00000002H VDD_OPEN_KEY_USER EQU 00000010H VDD_OPEN_KEY_GLOBAL EQU 00000020H VDD_IOCTL_SET_NOTIFY EQU 10000001H VDD_IOCTL_GET_DDHAL EQU 10000002H VDD_IOCTL_COPY_PROTECTION EQU 10000003H VDD_IOCTL_I2C_OPEN EQU 10000004H VDD_IOCTL_I2C_ACCESS EQU 10000005H tagVDD_IOCTL_SET_NOTIFY_INPUT STRUC NotifyMask DD ? NotifyType DD ? NotifyProc DD ? NotifyData DD ? tagVDD_IOCTL_SET_NOTIFY_INPUT ENDS VDD_NOTIFY_START_MODE_CHANGE EQU 00000001H VDD_NOTIFY_END_MODE_CHANGE EQU 00000002H VDD_NOTIFY_ENABLE EQU 00000004H VDD_NOTIFY_DISABLE EQU 00000008H VDD_NOTIFY_TYPE_CALLBACK EQU 1 BYTE_LENGTHED EQU 1 WORD_LENGTHED EQU 2 GOING_TO_WINDOWS_MODE EQU 1 GOING_TO_VGA_MODE EQU 2 DISPLAY_DRIVER_DISABLED EQU 4 IN_WINDOWS_HIRES_MODE EQU 8 BLOCK_INT10 EQU 16 DISPLAYINFO STRUC diHdrSize DW ? diInfoFlags DW ? diDevNodeHandle DD ? diDriverName DB 16 DUP (?) diXRes DW ? diYRes DW ? diDPI DW ? diPlanes DB ? diBpp DB ? diRefreshRateMax DW ? diRefreshRateMin DW ? diLowHorz DW ? diHighHorz DW ? diLowVert DW ? diHighVert DW ? diMonitorDevNodeHandle DD ? diHorzSyncPolarity DB ? diVertSyncPolarity DB ? diUnitNumber DD ? diDisplayFlags DD ? diXDesktopPos DD ? diYDesktopPos DD ? diXDesktopSize DD ? diYDesktopSize DD ? DISPLAYINFO ENDS DISPLAYINFO_SIZE equ diRefreshRateMax+2-diHdrSize DISPLAYINFO_SIZE1 equ diBpp+1-diHdrSize DISPLAYINFO_SIZE2 equ diVertSyncPolarity+1-diHdrSize DISPLAYINFO_SIZE3 equ diMemorySize+4-diHdrSize RETURNED_DATA_IS_STALE EQU 0001H MINIVDD_FAILED_TO_LOAD EQU 0002H MINIVDD_CHIP_ID_DIDNT_MATCH EQU 0004H REGISTRY_BPP_NOT_VALID EQU 0008H REGISTRY_RESOLUTION_NOT_VALID EQU 0010H REGISTRY_DPI_NOT_VALID EQU 0020H MONITOR_DEVNODE_NOT_ACTIVE EQU 0040H MONITOR_INFO_NOT_VALID EQU 0080H MONITOR_INFO_DISABLED_BY_USER EQU 0100H REFRESH_RATE_MAX_ONLY EQU 0200H CARD_VDD_LOADED_OK EQU 0400H DEVICE_IS_NOT_VGA EQU 0800H NoTrace_VIRTUALIZE_CRTC_IN EQU 1 NoTrace_VIRTUALIZE_CRTC_OUT EQU 1 NoTrace_VIRTUALIZE_SEQUENCER_IN EQU 1 NoTrace_VIRTUALIZE_SEQUENCER_OUT EQU 1 NoTrace_VIRTUALIZE_GCR_IN EQU 1 NoTrace_VIRTUALIZE_GCR_OUT EQU 1 NoTrace_VIRTUALIZE_DAC_OUT EQU 1 NoTrace_VIRTUALIZE_DAC_IN EQU 1 NoTrace_CHECK_HIRES_MODE EQU 1 ifdef NEC_98 vFlg_Machine_Std equ 00000001b vFlg_Machine_Multi equ 00000010b vFlg_Machine_Mate equ 00000100b vFlg_Machine_H98 equ 00001000b vFlg_CRT_New equ 00010000b vFlg_CRT_NonInter equ 00100000b vFlg_GDC_5MHz equ 01000000b vFlg_GDC_Emulate equ 10000000b vFlg_Acc_Internal equ 0000000100000000b vFlg_Acc_External equ 0000001000000000b vFlg_Acc_PCI equ 0000010000000000b vFlg_Acc_ML equ 0000100000000000b vFlg_Acc_PVD equ 0001000000000000b vFlg_Mode_NH equ 0010000000000000b vFlg_Mode_H equ 0100000000000000b vFlg_Initialized equ 1000000000000000b vFlg_Opt_MFR equ 000000010000000000000000b vFlg_Opt_NewMFR equ 000000100000000000000000b vFlg_Opt_VDP equ 000001000000000000000000b vFlg_Opt_NewVDP equ 000010000000000000000000b vFlg_Local equ 000000000100000010000000b MaxMiniVDD equ 16 MaxMiniTrap equ 32 MaxMultiTrap equ 3 MaxMultiFunc equ MaxMiniVDD LT_Enable equ 00000001b LT_Enable_bit equ 0 LT_Initialized equ 10000000b LT_Initialized_bit equ 7 Vids_struct struc Vids_SFlags dd ? Vids_CB_Offset dd ? Vids_Msg_Pseudo_VM dd ? VDD_TGDC_Draw_Off dd ? VDD_TGDC_Sync_Off dd ? VDD_TGDC_Sync_On dd ? VDD_TGDC_FIFO_Empty dd ? VDD_GGDC_Draw_Off dd ? VDD_GGDC_Sync_Off dd ? VDD_GGDC_Sync_On dd ? VDD_GGDC_FIFO_Empty dd ? VDD_GGDC_MOD_Emulate dd ? H98_FLORA_Change dd ? H98_Clear_Text dd ? H98_Rest_GCs dd ? H98_Rest_etc dd ? H98_Save_ModeFF dd ? Vids_struct ends Vid_SFlags equ VDD_CB_Offset equ VDD_Msg_Pseudo_VM equ TGDC_Draw_Off equ GGDC_Draw_Off equ TGDC_Sync_On equ TGDC_Sync_Off equ TGDC_FIFO_Empty equ GGDC_FIFO_Empty equ MiniFuncStruct STRUC MF_ProcAddr dd ? MiniFuncStruct ENDS MiniVDD_Proc_Struct STRUC Proc_Address dd ? Proc_Order dw ? Proc_MiniID db ? Proc_Flags db ? MiniVDD_Proc_Struct ENDS .errnz (size MiniVDD_Proc_Struct) mod 4 MiniVDD_GTrap_Struct STRUC GTrap_ProcAddr dd ? GTrap_PortAddr dw ? GTrap_NumMini dw ? GTrap_ProcTable db ((size MiniVDD_Proc_Struct) * MaxMultiTrap) dup (?) MiniVDD_GTrap_Struct ENDS MiniVDD_LTrap_Struct STRUC LTrap_ProcAddr dd ? LTrap_Status db ? LTrap_Flags db MaxMultiTrap dup (?) MiniVDD_LTrap_Struct ENDS EndMiniFunc_ MACRO n ifdef MiniFunc&n dd OFFSET32 MiniFunc&n else dd 0 endif ENDM MiniFunc_ MACRO FuncID, FuncName MiniFunc&FuncID equ ENDM BeginMiniFunc MACRO TableName public TableName TableName label near ENDM if 1 EndMiniFunc MACRO TableName x = 0 REPT NBR_MINI_VDD_FUNCTIONS_41 EndMiniFunc_ %x x = x + 1 ENDM ENDM else EndMiniFunc MACRO TableName x = 0 REPT NBR_MINI_VDD_FUNCTIONS EndMiniFunc_ %x x = x + 1 ENDM ENDM endif MiniFunc MACRO FuncID, FuncName MiniFunc_ %(FuncID), ENDM MiniVDDCall MACRO FuncID, SetCarry local MiniCall_Loop local MiniCall_Exit push ecx push esi lea esi, [MiniVDD_Func_Table][(size MiniVDD_Proc_Struct) * MaxMultiFunc * FuncID] mov ecx, [MiniVDD_NumMini] MiniCall_Loop: cmp dword ptr [esi.Proc_Address], 0 jz MiniCall_Exit pushad ifnb stc endif call dword ptr [esi.Proc_Address] popad jc MiniCall_Exit add esi, size MiniVDD_Proc_Struct loop MiniCall_Loop MiniCall_Exit: pop esi pop ecx ENDM MiniVDDCall2 MACRO FuncID, SetCarry local MiniCall_Exit local MiniCall_Proc push ecx push esi lea esi, [MiniVDD_Func_Table][(size MiniVDD_Proc_Struct) * MaxMultiFunc * FuncID] MiniCall_Proc: cmp dword ptr [esi.Proc_Address], 0 jz MiniCall_Exit pushad ifnb stc endif call dword ptr [esi.Proc_Address] popad MiniCall_Exit: pop esi pop ecx ENDM MiniVDDCall3 MACRO FuncID, MiniID, SetCarry local MiniCall_Exit local MiniCall_Loop local MiniCall_Proc push ecx push esi lea esi, [MiniVDD_Func_Table][(size MiniVDD_Proc_Struct) * MaxMultiFunc * FuncID] movzx ecx, MiniID MiniCall_Loop: cmp ecx, 0 jz MiniCall_Proc add esi, size MiniVDD_Proc_Struct dec ecx jmp MiniCall_Loop MiniCall_Proc: cmp dword ptr [esi.Proc_Address], 0 jz MiniCall_Exit pushad ifnb stc endif call dword ptr [esi.Proc_Address] popad MiniCall_Exit: pop esi pop ecx ENDM MiniVDDFunc MACRO TmpReg, FuncID mov TmpReg, [MiniVDD_Func_Table.Proc_Address][(size MiniVDD_Proc_Struct) * MaxMultiFunc * FuncID] ENDM ExecModeLL macro Num ExecMode_L&Num: endm ExecModeLE macro Num ExecMode_E&Num: endm ExecModeJE macro Num jmp ExecMode_E&Num endm ExecModeJZ macro Num jz ExecMode_L&Num endm ExecModeJNZ macro Num jnz ExecMode_L&Num endm ExecModeJEZ macro Num jz ExecMode_E&Num endm ExecModeJENZ macro Num jnz ExecMode_E&Num endm ExecModeTest macro ModeFlag, CB_Reg if ModeFlag and vFlg_Local ifidni , push ebx mov ebx, [Vid_VM_Handle] add ebx, [VDD_CB_Offset] test [ebx.VDD_SFlags], ModeFlag pop ebx else ifidni , push ebx VMMCall Get_Cur_VM_Handle add ebx, [VDD_CB_Offset] test [ebx.VDD_SFlags], ModeFlag pop ebx else ifb push ebx add ebx, [VDD_CB_Offset] test [ebx.VDD_SFlags], ModeFlag pop ebx else test [CB_Reg.VDD_SFlags], ModeFlag endif endif endif else test [Vid_SFlags], ModeFlag endif endm ExecModeChk macro HdrFlag, JmpFlag, JmpLabel, ModeFlag, CB_Reg ifidni , .erre FlgExecMode ExecModeJE %EndExecMode endif ExecModeLL %NumExecMode NumExecMode = NumExecMode + 1 FlgExecMode = 1 ifnb ExecModeTest , ifidni , ifidni , ExecModeJENZ %EndExecMode else ExecModeJEZ %EndExecMode endif else ifidni , ExecModeJNZ %NumExecMode else ExecModeJZ %NumExecMode endif endif endif endm ExecModeEnd macro ExecModeLL %NumExecMode ExecModeLE %EndExecMode NumExecMode = NumExecMode + 1 EndExecMode = EndExecMode + 1 FlgExecMode = 0 endm ExecModeJmp macro JmpLabel, ModeFlag, CB_Reg ExecModeTest %ModeFlag, jnz JmpLabel endm ExecModeJmpNot macro JmpLabel, ModeFlag, CB_Reg ExecModeTest %ModeFlag, jz JmpLabel endm ExecMode macro ModeFlag, CB_Reg ExecModeChk Top, Equ, Next, %ModeFlag, CB_Reg endm ExecModeNot macro ModeFlag, CB_Reg ExecModeChk Top, Not, Next, %ModeFlag, CB_Reg endm ExecModeOnly macro ModeFlag, CB_Reg ExecModeChk Top, Equ, End, %ModeFlag, CB_Reg endm ExecModeOnlyNot macro ModeFlag, CB_Reg ExecModeChk Top, Not, End, %ModeFlag, CB_Reg endm ExecModeElse macro ModeFlag, CB_Reg ExecModeChk Jmp, Equ, Next, %ModeFlag, CB_Reg endm ExecModeElseNot macro ModeFlag, CB_Reg ExecModeChk Jmp, Not, Next, %ModeFlag, CB_Reg endm ExecModeThru macro ModeFlag, CB_Reg ExecModeChk Thru, Equ, Next, %ModeFlag, CB_Reg endm ExecModeThruNot macro ModeFlag, CB_Reg ExecModeChk Thru, Not, Next, %ModeFlag, CB_Reg endm NumExecMode = 1 EndExecMode = 1 FlgExecMode = 0 else ifdef MAINVDD externdef MiniVDDDispatchTable:dword endif MiniVDDDispatch macro FunctionCode, HandlerAddr mov [edi+(FunctionCode*4)],OFFSET32 MiniVDD_&HandlerAddr endm CardVDDDispatch macro FunctionCode, HandlerAddr mov [edi+(FunctionCode*4)],OFFSET32 CardVDD_&HandlerAddr endm MiniVDDCall macro FunctionCode, SaveFlags local MiniVDDCallExit, MiniVDDCallLeave ifdef MAXDEBUG ifndef NoTrace_&FunctionCode& Trace_Out "MiniVDDCall: &FunctionCode&" endif endif push edi ifnb pushfd endif mov edi,OFFSET32 MiniVDDDispatchTable cmp dword ptr [edi+(FunctionCode*4)],0 je MiniVDDCallLeave ifnb popfd endif call dword ptr [edi+(FunctionCode*4)] ifnb jmp MiniVDDCallExit endif MiniVDDCallLeave: ifnb popfd endif MiniVDDCallExit: pop edi endm endif endif