* Module: All Modules\r
* Author(s): Chris Somers\r
* Date: December 1, 1992\r
- * Version: V.1.1\r
+ * Version: V.1.1w\r
\r
minor mods by Alex Russell to simplify\r
\r
Must use memory model with FAR code\r
+
+ Open Watcom patch by sparky4~
\r
*/\r
\r
\r
#include "memory.h"\r
\r
-// static globals --------------------------------\r
+ //static globals --------------------------------\r
\r
static int ActiveEMList[MAXEMHANDLES];\r
-static unsigned int EMMSeg;\r
-\r
-// forward declarations ---------------------------------\r
+static unsigned long EMMSeg;\r
\r
+ //forward declarations ---------------------------------\r
+
static int EMPresent(void);\r
static int EMReady(void);\r
-static unsigned int GetEMMSeg(void);\r
+static unsigned long GetEMMSeg(void);\r
static int GetEMHandle(int NumPages);\r
static int EMMap(int Handle, int LogPg, int PhyPg);\r
static int FreeEMHandle(int Handle);\r
static int GetNumPages(int Handle);\r
static int EMStateSave(int Handle);\r
static void EMStateRestore(int Handle);\r
+
+/********************************************************************/
+//beta
+unsigned long\r
+EMInfo(void)\r
+{
+ int EMSinfo;\r
+ _asm
+ {
+ mov ah,0x58\r
+ int 0x67
+ mov EMSinfo,ax\r
+ }
+ return((unsigned long)EMSinfo);\r
+}
+
+/********************************************************************/
+
+int\r
+EMVer(void)\r
+{
+ int EMSver;\r
+ _asm
+ {
+ mov ah,0x46\r
+ int 0x67
+ mov EMSver,ax\r
+ }
+ return(EMSver);\r
+}\r
+\r
+/********************************************************************/
\r
-\r
-/********************************************************************/\r
int\r
OpenEMM(void)\r
{\r
unsigned long\r
EMMCoreLeft(void)\r
{\r
- unsigned Pages;\r
- unsigned long RtnVal = 0UL;\r
-\r
- _asm {\r
- mov ah,0x42 /* get EMM free page count */\r
- int 0x67\r
- or ah,ah\r
- //js InternalError /* returns 80, 81, or 84 hex on error */\r
- mov Pages,bx /* number of unallocated 16K pages */\r
- }\r
- RtnVal = ((unsigned long)Pages << 14); /* Pages * 16K rtns bytes*/\r
-\r
-//InternalError:\r
-\r
- return(RtnVal);\r
+ unsigned Pages;\r
+ unsigned long RtnVal = 0UL;
+ unsigned short interr=0;\r
+\r
+ _asm {\r
+ mov ah,0x42 /* get EMM free page count */\r
+ int 0x67\r
+ or ah,ah\r
+ js InternalError /* returns 80, 81, or 84 hex on error */\r
+ mov Pages,bx /* number of unallocated 16K pages */
+ jmp End
+ InternalError:
+ mov interr,1
+ End:
+ }
+ if(!interr)
+ RtnVal = ((unsigned long)Pages); /* Pages * 16K rtns bytes*/ //<< 14);
+\r
+ return(RtnVal);\r
} /* End of EMMCoreLeft() */\r
\r
/********************************************************************/\r
*Handle = NOTREADY;\r
return(NULL);\r
}\r
- if ((Pages < 1) || (Pages > 1020)) {\r
+ if ((Pages < 1) || (Pages > EMMCoreLeft(/*1020*/))) {\r
*Handle = VALUE_OUTF_RANGE;\r
return (NULL);\r
}\r
int\r
EMMRealloc(int Handle, int Pages)\r
{\r
- int RtnCode = FALSE;\r
-\r
- if (!EMMSeg || (Pages < 0) || (Pages > 1020)) {\r
- return (FALSE);\r
- }\r
- _asm {\r
- mov ah,0x51 /* change # of pages */\r
- mov bx,Pages\r
- mov dx,Handle\r
- int 0x67\r
- or ah,ah\r
- //js NoGo /* returns 80 to 88 hex on error */\r
- }\r
- RtnCode = TRUE;\r
+ int RtnCode = FALSE;\r
+\r
+ if (!EMMSeg || (Pages < 0) || (Pages > EMMCoreLeft(/*1020*/))) {\r
+ return (FALSE);\r
+ }\r
+ _asm {\r
+ mov ah,0x51 /* change # of pages */\r
+ mov bx,Pages\r
+ mov dx,Handle\r
+ int 0x67\r
+ or ah,ah\r
+ js NoGo /* returns 80 to 88 hex on error */
+ mov RtnCode,TRUE
+ NoGo:
+ }\r
\r
//NoGo:\r
-\r
- return(RtnCode);\r
+ return(RtnCode);\r
} /* End of EMMRealloc() */\r
\r
/********************************************************************/\r
\r
static int\r
EMReady(void)\r
-{\r
- _asm {\r
- mov ah,0x40 /* get EM Manager Status */\r
- int 0x67\r
- or ah,ah\r
- //jns Ready /* returns 80, 81, or 84 hex on error */\r
- }\r
- return(FALSE);\r
+{
+ int EMSready;\r
+ _asm {\r
+ mov ah,0x40 /* get EM Manager Status */\r
+ int 0x67
+ or ah,ah\r
+ jns Ready /* returns 80, 81, or 84 hex on error */
+ mov EMSready,FALSE
+ jmp End
+ Ready:
+ mov EMSready,TRUE
+ End:
+ }\r
+ return(EMSready);\r
\r
//Ready:\r
- return(TRUE);\r
+// return(TRUE);\r
} /* End of EMReady() */\r
\r
/********************************************************************/\r
\r
-static unsigned int\r
+static unsigned long\r
GetEMMSeg(void)\r
{\r
- unsigned int EMSegment;\r
+ unsigned int EMSegment;\r
+\r
+ _asm {\r
+ mov ah,0x41 /* get EMM page frame segment */\r
+ int 0x67\r
+ or ah,ah\r
+ js NotReady /* returns 80, 81, or 84 hex on error */\r
+ mov EMSegment,bx
+ jmp End
+ NotReady:
+ mov EMSegment,NOTREADY
+ End:\r
+ }\r
+ return(EMSegment); /*lint !e530 */\r
\r
- _asm {\r
- mov ah,0x41 /* get EMM page frame segment */\r
- int 0x67\r
- or ah,ah\r
- //js NotReady /* returns 80, 81, or 84 hex on error */\r
- mov EMSegment,bx\r
- }\r
- return(EMSegment); /*lint !e530 */\r
+//NotReady:\r
+// return(NOTREADY);\r
+} /* End of GetEMMSeg() */
+
+/********************************************************************/\r
+\r
+unsigned long\r
+GetEMMSeg0(void)\r
+{\r
+ unsigned int EMSegment;\r
+\r
+ _asm {\r
+ mov ah,0x41 /* get EMM page frame segment */\r
+ int 0x67\r
+ or ah,ah\r
+ js NotReady /* returns 80, 81, or 84 hex on error */\r
+ mov EMSegment,bx
+ jmp End
+ NotReady:
+ mov EMSegment,NOTREADY
+ End:\r
+ }\r
+ return(EMSegment); /*lint !e530 */\r
\r
//NotReady:\r
- return(NOTREADY);\r
-} /* End of GetEMMSeg() */\r
+// return(NOTREADY);\r
+} /* End of GetEMMSeg0() */\r
\r
/********************************************************************/\r
\r
static int\r
GetEMHandle(int NumPages)\r
{\r
- int NewHandle;\r
-\r
- _asm {\r
- mov ah,0x43 /* get handle and allocate EM */\r
- mov bx,NumPages /* number of 16K pages to allocate */\r
- int 0x67\r
- or ah,ah /* returns 80 to 89 hex on error */\r
- //js NoHandle\r
- mov NewHandle,dx /* retrieve handle */\r
- }\r
- return(NewHandle);\r
+ int NewHandle;\r
+\r
+ _asm {\r
+ mov ah,0x43 /* get handle and allocate EM */\r
+ mov bx,NumPages /* number of 16K pages to allocate */\r
+ int 0x67\r
+ or ah,ah /* returns 80 to 89 hex on error */\r
+ js NoHandle\r
+ mov NewHandle,dx /* retrieve handle */
+ jmp End
+ NoHandle:
+ mov NewHandle,NO_DATA
+ End:\r
+ }\r
+ return(NewHandle);\r
\r
//NoHandle:\r
- return(NO_DATA);\r
+// return(NO_DATA);\r
} /* End of GetEMHandle() */\r
\r
/********************************************************************/\r
static int\r
EMMap(int Handle, int LogPg, int PhyPg)\r
{\r
- int RtnCode = NO_DATA;\r
-\r
- _asm {\r
- mov ax,PhyPg /* physical page: 0 - 3 in AL only */\r
- mov ah,0x44 /* map logical to physical page */\r
- mov bx,LogPg /* logical page: 0 - 1020 */\r
- mov dx,Handle\r
- int 0x67\r
- or ah,ah /* returns 80 to 8B hex on error */\r
- //js NoMapping\r
- }\r
- RtnCode = SUCCESS;\r
+ int RtnCode = NO_DATA;\r
+\r
+ _asm {\r
+ mov ax,PhyPg /* physical page: 0 - 3 in AL only */\r
+ mov ah,0x44 /* map logical to physical page */\r
+ mov bx,LogPg /* logical page: 0 - 1020 */\r
+ mov dx,Handle\r
+ int 0x67\r
+ or ah,ah /* returns 80 to 8B hex on error */\r
+ js NoMapping
+ mov RtnCode,SUCCESS
+// jmp End
+ NoMapping:
+// End:\r
+ }\r
+// RtnCode = SUCCESS;\r
\r
//NoMapping:\r
- return(RtnCode);\r
+ return(RtnCode);\r
} /* End of EMMap() */\r
\r
/********************************************************************/\r
\r
static int\r
FreeEMHandle(int Handle)\r
-{\r
- _asm {\r
- mov ah,0x45 /* free handle and deallocate EM */\r
- mov dx,Handle\r
- int 0x67\r
- or ah,ah /* returns 80 to 86 hex on error */\r
- //js NotFreed\r
- }\r
- return(SUCCESS);\r
+{
+ int FreeEMShandle;\r
+ _asm {\r
+ mov ah,0x45 /* free handle and deallocate EM */\r
+ mov dx,Handle\r
+ int 0x67\r
+ or ah,ah /* returns 80 to 86 hex on error */\r
+ js NotFreed
+ mov FreeEMShandle,SUCCESS
+ jmp End
+ NotFreed: /* must retry if unsuccessful */
+ mov FreeEMShandle,NO_DATA
+ End:\r
+ }\r
+ return(FreeEMShandle);\r
\r
//NotFreed: /* must retry if unsuccessful */\r
- return(NO_DATA);\r
+// return(NO_DATA);\r
} /* End of FreeEMHandle() */\r
\r
/********************************************************************/\r
static int\r
GetNumPages(int Handle)\r
{\r
- int NumPages = 0;\r
+ int NumPages = 0;\r
+\r
+ _asm {\r
+ mov ah,0x4C /* get allocated pages for Handle */\r
+ mov dx,Handle\r
+ int 0x67\r
+ or ah,ah /* returns 80 to 84 hex on error */\r
+ js BadHandle\r
+ mov NumPages,bx
+// jmp End
+ BadHandle:
+// End:\r
+ }
\r
- _asm {\r
- mov ah,0x4C /* get allocated pages for Handle */\r
- mov dx,Handle\r
- int 0x67\r
- or ah,ah /* returns 80 to 84 hex on error */\r
- //js BadHandle\r
- mov NumPages,bx\r
- }\r
//BadHandle:\r
-\r
- return(NumPages);\r
+ return(NumPages);\r
} /* End of GetNumPages() */\r
\r
/********************************************************************/\r
static int\r
EMStateSave(int Handle)\r
{\r
- int RtnCode = NO_MEMORY;\r
- _asm {\r
- mov ah,0x47 /* save page map under Handle */\r
- mov dx,Handle\r
- int 0x67\r
- or ah,ah\r
- //js Unsaved /* out of save space error */\r
- }\r
- RtnCode = SUCCESS;\r
+ int RtnCode = NO_MEMORY;\r
+ _asm {\r
+ mov ah,0x47 /* save page map under Handle */\r
+ mov dx,Handle\r
+ int 0x67\r
+ or ah,ah\r
+ js Unsaved /* out of save space error */
+ mov RtnCode,SUCCESS
+ Unsaved:
+ }\r
+// RtnCode = SUCCESS;\r
\r
//Unsaved:\r
return(RtnCode);\r