home *** CD-ROM | disk | FTP | other *** search
- ; SCCSID = @(#)v8086.inc 6.1 92/03/25
- ;*** V8086.INC
- ;
- ;
- ; Title:v8086.inc
- ;
- ; Copyright (c) IBM Corporation 1987, 1992
- ;
- ; All Rights Reserved
- ; For include file hierarchy, see MVDM.INC
- ; 8086 Emulation Export Include File
- ;
- ; Description:
- ;
- ; Contains the exported structures, defines and VDH
- ; function prototypes for 8086 emulation.
- ;
-
-
-
-
- ;*** Low memory defines - used by VBIOS
-
- IVT_START EQU 0 ;Interrupt vector table start
- IVT_LEN EQU 0400h ; " " " length
-
-
- ;*** flVdmStatus flags
-
- VDM_STATUS_VPM_32 EQU 000000001h ;32 bit DPMI app
- VDM_STATUS_VPM_32_BIT EQU 0
- VDM_STATUS_VPM_APP EQU 000000002h ;DPMI app started
- VDM_STATUS_VPM_APP_BIT EQU 1
- VDM_STATUS_VPM_EXEC EQU 000000004h ;in VDM protected mode
- VDM_STATUS_VPM_EXEC_BIT EQU 2
- VDM_STATUS_VPM_TRAPMODE EQU 000000008h ;V86 mode at kernel entry?
- VDM_STATUS_VPM_TRAP_BIT EQU 3
- VDM_STATUS_VPM_IF_FLAG EQU 000000010h ;Virtual IF flag
- VDM_STATUS_VPM_IF_BIT EQU 4
- VDM_STATUS_VPM_08_HOOK EQU 000000020h ;protect 08h hooked?
- VDM_STATUS_VPM_08_BIT EQU 5
- VDM_STATUS_VPM_1C_HOOK EQU 000000040h ;protect 1Ch hooked?
- VDM_STATUS_VPM_1C_BIT EQU 6
- VDM_STATUS_VPM_PERM EQU 000000080h ;protected mode allowed?
- VDM_STATUS_VPM_PERM_BIT EQU 7
- VDM_STATUS_VPM_XDOS EQU 000000100h ;DOS API Extension active?
- VDM_STATUS_VPM_XDOS_BIT EQU 8
- VDM_STATUS_VPM_TERM EQU 000000200h ;VDM terminating?
- VDM_STATUS_VPM_TERM_BIT EQU 9
-
-
- ;*** VDHInstallIntHook options
-
- VDH_ASM_HOOK EQU 000000001h
-
-
- ;*** VDHInstallIOHook options
-
- VDHIIH_ASM_HOOK EQU <VDH_ASM_HOOK>
- VDHIIH_ALWAYS_TRAP EQU 000000002h
- VDHIIH_NO_SIMULATE EQU 000000004h
- VDHIIH_IGNORE EQU 000000010h
-
-
- ;*** VDHSetIOHookState options
-
- SETIO_TRAP EQU <TRUE>
- SETIO_NOTRAP EQU <FALSE>
-
-
- ;*** I/O type flags - VDHInstallIOPort pfnOther handler
-
- IO_TYPE_SHIFT EQU 8
- IO_TYPE_MASK EQU 000000F00h
- IO_TYPE_INPUT EQU 000000100h
- IO_TYPE_OUTPUT EQU 000000000h
- IO_TYPE_STRING EQU 000000200h
- IO_TYPE_BYTE EQU 000000400h
- IO_TYPE_WORD EQU 000000000h
- IO_TYPE_DWORD EQU 000000800h
-
- IO_TYPE_ADDR32 EQU 000001000h
- IO_TYPE_REP EQU 000002000h
- IO_TYPE_REVERSE EQU 000008000h
-
- IO_SEG_SHIFT EQU 16
- IO_SEG_MASK EQU 0000f0000h
- IO_SEG_ES EQU 000000000h
- IO_SEG_CS EQU 000010000h
- IO_SEG_SS EQU 000020000h
- IO_SEG_DS EQU 000030000h
- IO_SEG_FS EQU 000040000h
- IO_SEG_GS EQU 000050000h
-
-
- ;*** VDHCheckPagePerm and private DPMI options
-
- VPMPG_W EQU 000000002h ;Writable
- VPMPG_U EQU 000000004h ;user mode accessible
- VPMPG_X EQU 000000008h ;eXecutable
- VPMPG_R EQU 000000010h ;Readable
-
-
-
- ;*** VDHAllocHook options
-
- VDH_CONTEXT_HOOK EQU 0
- VDH_STI_HOOK EQU 1
- VDH_RETURN_HOOK EQU 2
- VDH_TIMER_HOOK EQU 3
- VDH_BP_HOOK EQU 4
-
-
- ;*** VDHArmContextHook options
-
- GLOBAL_CONTEXT_HOOK EQU ( -1)
-
-
- ;*** VDHArmReturnHook options
-
- VDHARH_NORMAL_RET EQU 0
- VDHARH_NORMAL_IRET EQU 1
- VDHARH_RECURSIVE_RET EQU 2
- VDHARH_RECURSIVE_IRET EQU 3
- VDHARH_CSEIP_HOOK EQU 4
- VDHARH_RECURSIVE_CSEIP_HOOK EQU 5
- VDHARH_ALWAYS_ARM_HOOK EQU 080000000h
-
-
- ;*** VDHArmReturnHook recursive user stack usage
- ;
- ; VDHARH_RECURSIVE_CSEIP_HOOK stack usage will vary depend
- ; on the VDM protected mode "bitness". If 32 bit, there
- ; will be 8 bytes on the stack otherwise, 4 bytes.
- ;
-
- VDHARH_RECURSIVE_STACK_USAGE EQU 4
-
-
- ;*** VDHPushFarCall user stack usage
-
- VDHPFC_STACK_USAGE EQU 4
-
-
- ;*** VDHPushInt user stack usage
-
- VDHPI_STACK_USAGE EQU 6
-
-
- ;*** VDHPushRegs/VDHPopRegs flags
-
- VDHREG_AX EQU 000000001h
- VDHREG_BX EQU 000000002h
- VDHREG_CX EQU 000000004h
- VDHREG_DX EQU 000000008h
- VDHREG_SI EQU 000000010h
- VDHREG_DI EQU 000000020h
- VDHREG_BP EQU 000000040h
- VDHREG_SP EQU 000000080h
- VDHREG_DS EQU 000000100h
- VDHREG_ES EQU 000000200h
- VDHREG_SS EQU 000000400h
- VDHREG_FLAG EQU 000000800h
- VDHREG_EREGS EQU 010000000h ;Push/Pop 32 bit values
- VDHREG_ALL EQU (VDHREG_AX OR VDHREG_BX OR \
- VDHREG_CX OR VDHREG_DX OR \
- VDHREG_SI OR VDHREG_DI OR \
- VDHREG_BP OR VDHREG_SP OR \
- VDHREG_DS OR VDHREG_ES OR \
- VDHREG_SS OR VDHREG_FLAG)
- VDHREG_GENERAL EQU (VDHREG_AX OR VDHREG_BX OR \
- VDHREG_CX OR VDHREG_DX OR \
- VDHREG_SI OR VDHREG_DI OR \
- VDHREG_BP OR VDHREG_DS OR \
- VDHREG_ES OR VDHREG_FLAG)
-
-
- ;*** CRF - Client Register Frame
- ;
- ; The EBX register points to the CRF structure on entry
- ; to I/O port handlers and VDD interrupt handlers. VDDs
- ; can retrieve or modify the client's registers with this
- ; interface.
- ;
-
- DefStruc ,crf_s
- ULONG crf_edi
- ULONG crf_esi
- ULONG crf_ebp
- ULONG crf_padesp
- ULONG crf_ebx
- ULONG crf_edx
- ULONG crf_ecx
- ULONG crf_eax
- ULONG crf_pad2,,2
- ULONG crf_eip
- USHORT crf_cs
- USHORT crf_padcs
- ULONG crf_eflag
- ULONG crf_esp
- USHORT crf_ss
- USHORT crf_padss
- USHORT crf_es
- USHORT crf_pades
- USHORT crf_ds
- USHORT crf_padds
- USHORT crf_fs
- USHORT crf_padfs
- USHORT crf_gs
- USHORT crf_padgs
- ULONG crf_alteip ;other modes register set
- USHORT crf_altcs
- USHORT crf_altpadcs
- ULONG crf_alteflag
- ULONG crf_altesp
- USHORT crf_altss
- USHORT crf_altpadss
- USHORT crf_altes
- USHORT crf_altpades
- USHORT crf_altds
- USHORT crf_altpadds
- USHORT crf_altfs
- USHORT crf_altpadfs
- USHORT crf_altgs
- USHORT crf_altpadgs
- EndStruc CRF
-
- DefType PCRF,dd
-
-
-
-
- ; VDHReadUBuf and VDHWriteUBuf flags
-
- VPM_FAULT_IF_RW_SET EQU 001h
- VPM_FAULT_IF_SU_SET EQU 002h
- VPM_SEL_PRESENT EQU 004h
- VPM_SEL_WRITEABLE EQU 008h
- VPM_FAULT_IF_RO EQU 010h
- VPM_SEL_IS_SS EQU 020h
- VPM_PROT_READ EQU 040h
- VPM_PROT_WRITE EQU 080h
- VPM_XCPTRET_ALT EQU 0100h
-
- ;*** Hook routine typedefs
-
- HOOKENTRY BIH <ULONG, PCRF> ;I/O hook routines
- HOOKENTRY BOH <_BYTE, ULONG, PCRF>
- HOOKENTRY WIH <ULONG, PCRF>
- HOOKENTRY WOH <_WORD, ULONG, PCRF>
- HOOKENTRY OTH <ULONG, PULONG, ULONG, ULONG, PCRF>
-
- DefType PBIH,dd ;pointers to I/O hook routines
- DefType PBOH,dd
- DefType PWIH,dd
- DefType PWOH,dd
- DefType POTH,dd
-
- HOOKENTRY FNHOOK <PCRF> ;hook routine
- DefType PFNHOOK,dd ;pointer to hook routine
-
- HOOKENTRY FNARM <> ;arm hook routine
- DefType PFNARM,dd ;pointer to arm hook routine
-
-
- ;*** IOH - I/O Port Hook Entry
- ;
- ; This is the structure for the parameter to the VDHInstallIOHook
- ; service. Only the byte input and output handlers are required.
- ; A null (0) entry indicates that the type of I/O should be
- ; simulated. The structure passed by VDHInstallIOHook is
- ; copied and saved away after the NULLs are replaced with the
- ; addresses of the simulation routines.
- ;
-
- DefStruc ,ioh_s
- PBIH ioh_pbihByteInput ;byte input handler
- PBOH ioh_pbohByteOutput ;byte output handler
- PWIH ioh_pwihWordInput ;word input handler
- PWOH ioh_pwohWordOutput ;word output handler
- POTH ioh_pothOther ;dword and string I/O handler
- EndStruc IOH
-
- DefType PIOH,dd ;pointer to IOH entry
-
-
-
- ; 8086 emulation VDH services
-
- VDHENTRY VDHInstallIOHook <HVDM, PORT, ULONG, PIOH, FLAGS>
- VDHENTRY VDHRemoveIOHook <HVDM, PORT, ULONG, PIOH>
- VDHENTRY VDHSetIOHookState <HVDM, PORT, ULONG, PIOH, BOOL>
- VDHENTRY VDHInstallIntHook <HVDM, ULONG, PFNHOOK, FLAGS>
- VDHENTRY VDHAllocHook <ULONG, PFNARM, ULONG>
- VDHENTRY VDHQueryHookData <HHOOK>
- VDHENTRY VDHFreeHook <HHOOK>
- VDHENTRY VDHArmContextHook <HHOOK, HVDM>
- VDHENTRY VDHArmSTIHook <HHOOK, HVDM>
- VDHENTRY VDHArmReturnHook <HHOOK, ULONG>
- VDHENTRY VDHArmBPHook <HHOOK>
- VDHENTRY VDHPushInt <ULONG>
- VDHENTRY VDHPopInt <VOID>
- VDHENTRY VDHPushRegs <FLAGS>
- VDHENTRY VDHPopRegs <FLAGS>
- VDHENTRY VDHPushStack <ULONG,PVOID>
- VDHENTRY VDHPopStack <ULONG,PVOID>
- VDHENTRY VDHSetA20 <BOOL>
- VDHENTRY VDHQueryA20 <VOID>
- VDHENTRY VDHSetFlags <ULONG>
- VDHENTRY VDHSwitchToV86 <VOID>
- VDHENTRY VDHSwitchToVPM <VOID>
- VDHENTRY VDHCheckVPMIntVector <ULONG>
- VDHENTRY VDHGetVPMIntVector <ULONG,PFPFN>
- VDHENTRY VDHGetSelBase <SEL,PULONG>
- VDHENTRY VDHChangeVPMIF <BOOL>
- VDHENTRY VDHReadUBuf <PVOID,ULONG,SEL,PULONG,ULONG>
- VDHENTRY VDHWriteUBuf <PVOID,ULONG,SEL,PULONG,ULONG>
- VDHENTRY VDHCheckPagePerm <ULONG,PVOID,ULONG,ULONG>
- VDHENTRY VDHRaiseException <ULONG,ULONG,ULONG>
- VDHENTRY VDHStartHWInt <BOOL>
- VDHENTRY VDHGetVPMExcept <ULONG,PFPFN,PBYTE>
- VDHENTRY VDHProbeUBuf <SEL,ULONG,ULONG,ULONG>
- VDHENTRY VDHPrepVPMIret <HHOOK>
- VDHENTRY VDHPopVPMFarRet <VOID>
-
- VDHENTRY VDHSetVPMIntVector <ULONG, ULONG, ULONG>
- VDHENTRY VDHSetVPMExcept <ULONG, ULONG, ULONG, _BYTE>
- VDHENTRY VDHPushFarCall <ULONG, ULONG>
- VDHENTRY VDHArmVPMBPHook <HHOOK>
- VDHENTRY VDHEndUseVPMStack <VOID>
- VDHENTRY VDHBeginUseVPMStack <VOID>
-