/* DPMI.H * * DPMI functions for protected mode MIDAS * * $Id: dpmi.h,v 1.2 1997/01/16 18:41:59 pekangas Exp $ * * Copyright 1996,1997 Housemarque Inc. * * This file is part of the MIDAS Sound System, and may only be * used, modified and distributed under the terms of the MIDAS * Sound System license, LICENSE.TXT. By continuing to use, * modify or distribute this file you indicate that you have * read the license and understand and accept it fully. */ #ifndef __DPMI_H #define __DPMI_H /* new errors: errDPMIFailure DPMI failure errInvalidDescriptor invalid segment descriptor */ /****************************************************************************\ * struct dpmiRealCallRegs * ----------------------- * Description: Real mode calling register value structure \****************************************************************************/ typedef struct { ulong rEDI; ulong rESI; ulong rEBP; ulong reserved; ulong rEBX; ulong rEDX; ulong rECX; ulong rEAX; ushort flags; ushort rES; ushort rDS; ushort rFS; ushort rGS; ushort rIP; ushort rCS; ushort rSP; /* if SS and SP are zero, DPMI will */ ushort rSS; /* provide a small (30 words) stack */ } dpmiRealCallRegs; #ifdef __cplusplus extern "C" { #endif /****************************************************************************\ * * Function: int dpmiAllocDescriptor(unsigned *descriptor); * * Description: Allocate LDT descriptor. Use dpmiFreeDescriptor to deallocate. * * Input: unsigned *descriptor pointer to descriptor number * * Returns: MIDAS error code. Descriptor number is written to *descriptor. * \****************************************************************************/ int CALLING dpmiAllocDescriptor(unsigned *descriptor); /****************************************************************************\ * * Function: int dpmiFreeDescriptor(unsigned descriptor); * * Description: Deallocates an LDT descriptor. * * Input: unsigned descriptor descriptor to deallocate * * Returns: MIDAS error code * \****************************************************************************/ int CALLING dpmiFreeDescriptor(unsigned descriptor); /****************************************************************************\ * * Function: int dpmiSetSegmentBase(unsigned selector, ulong baseAddr); * * Description: Changes the 32-bit linear base address of a selector. * * Input: unsigned selector selector number * ulong baseAddr 32-bit linear base address for * selector * * Returns: MIDAS error code. * \****************************************************************************/ int CALLING dpmiSetSegmentBase(unsigned selector, ulong baseAddr); /****************************************************************************\ * * Function: int dpmiGetSegmentBase(unsigned selector, ulong *baseAddr); * * Description: Reads the 32-bit linear base address of a selector. * * Input: unsigned selector selector number * ulong *baseAddr pointer to the 32-bit linear base * address of the selector * * Returns: MIDAS error code. Selector base address is written to * *baseAddr. * \****************************************************************************/ int CALLING dpmiGetSegmentBase(unsigned selector, ulong *baseAddr); /****************************************************************************\ * * Function: int dpmiSetSegmentLimit(unsigned selector, ulong limit); * * Description: Changes the limit of a segment selector. * * Input: unsigned selector selector number * ulong limit 32-bit segment limit * * Returns: MIDAS error code. * \****************************************************************************/ int CALLING dpmiSetSegmentLimit(unsigned selector, ulong limit); /****************************************************************************\ * * Function: int dpmiSetSegmentAccessRights(unsigned selector, * unsigned accessRights); * * Description: Changes the access rights of a selector * * Input: unsigned selector selector * unsigned accessRights new access rights for the segment * * Returns: MIDAS error code. * \****************************************************************************/ int CALLING dpmiSetSegmentAccessRights(unsigned selector, unsigned accessRights); /****************************************************************************\ * * Function: int dpmiCreateCodeAlias(unsigned codeSelector, * unsigned *selector); * * Description: Creates a data descriptor that has the same base and limit * as a code segment descriptor. Use dpmiFreeDescriptor() to * deallocate data descriptor. * * Input: unsigned codeSelector code segment selector * unsigned *selector pointer to data segment selector * * Returns: MIDAS error code. New data selector is written to *selector. * \****************************************************************************/ int CALLING dpmiCreateCodeAlias(unsigned codeSelector, unsigned *selector); /****************************************************************************\ * * Function: int dpmiAllocDOSMem(unsigned numParagraphs, unsigned *segment, * unsigned *selector); * * Description: Allocates memory from DOS free memory pool, below 1MB. Use * dpmiFreeDOSMem() to deallocate. * * Input: unsigned numParagraphs number of paragraphs to allocate * unsigned *segment pointer to real mode segment * unsigned *selector pointer to selector * * Returns: MIDAS error code. Real mode segment of allocated block is * written to *segment. Protected mode selector for block is * written to *selector. * \****************************************************************************/ int CALLING dpmiAllocDOSMem(unsigned numParagraphs, unsigned *segment, unsigned *selector); /****************************************************************************\ * * Function: dpmiFreeDOSMem(unsigned selector); * * Description: Deallocates memory allocated with dpmiAllocDOSMem(). * * Input: unsigned selector selector for allocated block * * Returns: MIDAS error code * \****************************************************************************/ int CALLING dpmiFreeDOSMem(unsigned selector); /****************************************************************************\ * * Function: int dpmiRealModeInt(unsigned intNum, * dpmiRealCallRegs *registers); * * Description: Simulates a real mode interrupt using DPMI service 0x0300. * *register MUST contain appropriate register values for * interrupt (CS:IP is ignored). * * Input: unsigned intNum interrupt number * dpmiRealCallRegs *registers DPMI real mode calling struct * * Returns: MIDAS error code. Register values returned by the interrupt * are written to *registers. * \****************************************************************************/ int CALLING dpmiRealModeInt(unsigned intNum, dpmiRealCallRegs *registers); /****************************************************************************\ * * Function: int dpmiLockMemory(ulong start, ulong numBytes); * * Description: Locks a region of memory to prevent it from being paged. The * memory can be unlocked using dpmiUnlockMemory(). * * Input: ulong start memory region start address * ulong numBytes memory region length in bytes * * Returns: MIDAS error code * \****************************************************************************/ int CALLING dpmiLockMemory(ulong start, ulong numBytes); /****************************************************************************\ * * Function: int dpmiUnlockMemory(ulong start, ulong numBytes); * * Description: Unlocks a region of memory locked with dmpiLockMemory(). * * Input: ulong start memory region start address * ulong numBytes memory region length in bytes * * Returns: MIDAS error code * \****************************************************************************/ int CALLING dpmiUnlockMemory(ulong start, ulong numBytes); #ifdef __cplusplus } #endif #endif /* * $Log: dpmi.h,v $ * Revision 1.2 1997/01/16 18:41:59 pekangas * Changed copyright messages to Housemarque * * Revision 1.1 1996/05/22 20:49:33 pekangas * Initial revision * */