]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/exmm/memory.c
notime
[16.git] / src / lib / exmm / memory.c
old mode 100644 (file)
new mode 100755 (executable)
index ce58c3e..21b213f
@@ -3,11 +3,13 @@
  *      Module:     All Modules\r
  *      Author(s):  Chris Somers\r
  *      Date:       December 1, 1992\r
  *      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
 \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
  */\r
 \r
 \r
 #include "memory.h"\r
 \r
 \r
 #include "memory.h"\r
 \r
-// static globals --------------------------------\r
+ //static globals --------------------------------\r
 \r
 static int  ActiveEMList[MAXEMHANDLES];\r
 \r
 static int  ActiveEMList[MAXEMHANDLES];\r
-static unsigned int  EMMSeg;\r
-\r
-// forward declarations ---------------------------------\r
+static unsigned long EMMSeg;\r
 \r
 \r
+ //forward declarations ---------------------------------\r
+
 static int  EMPresent(void);\r
 static int  EMReady(void);\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
 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
-/********************************************************************/\r
 int\r
 OpenEMM(void)\r
 {\r
 int\r
 OpenEMM(void)\r
 {\r
@@ -80,21 +112,25 @@ EMMInstalled(void)
 unsigned long\r
 EMMCoreLeft(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
 }               /* End of EMMCoreLeft() */\r
 \r
 /********************************************************************/\r
@@ -109,7 +145,7 @@ EMMalloc(int *Handle, int Pages)
         *Handle = NOTREADY;\r
         return(NULL);\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
         *Handle = VALUE_OUTF_RANGE;\r
         return (NULL);\r
     }\r
@@ -130,24 +166,24 @@ EMMalloc(int *Handle, int Pages)
 int\r
 EMMRealloc(int Handle, int Pages)\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
 //NoGo:\r
-\r
-    return(RtnCode);\r
+       return(RtnCode);\r
 }               /* End of EMMRealloc() */\r
 \r
 /********************************************************************/\r
 }               /* End of EMMRealloc() */\r
 \r
 /********************************************************************/\r
@@ -251,58 +287,96 @@ EMPresent(void)
 \r
 static int\r
 EMReady(void)\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
 \r
 //Ready:\r
-    return(TRUE);\r
+//    return(TRUE);\r
 }               /* End of EMReady() */\r
 \r
 /********************************************************************/\r
 \r
 }               /* End of EMReady() */\r
 \r
 /********************************************************************/\r
 \r
-static unsigned int\r
+static unsigned long\r
 GetEMMSeg(void)\r
 {\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
 \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
 \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
 \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
 \r
 //NoHandle:\r
-    return(NO_DATA);\r
+//    return(NO_DATA);\r
 }               /* End of GetEMHandle() */\r
 \r
 /********************************************************************/\r
 }               /* End of GetEMHandle() */\r
 \r
 /********************************************************************/\r
@@ -310,39 +384,49 @@ GetEMHandle(int NumPages)
 static int\r
 EMMap(int Handle, int LogPg, int PhyPg)\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
 \r
 //NoMapping:\r
-    return(RtnCode);\r
+       return(RtnCode);\r
 }               /* End of EMMap() */\r
 \r
 /********************************************************************/\r
 \r
 static int\r
 FreeEMHandle(int Handle)\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
 \r
 //NotFreed:                           /* must retry if unsuccessful */\r
-    return(NO_DATA);\r
+//    return(NO_DATA);\r
 }               /* End of FreeEMHandle() */\r
 \r
 /********************************************************************/\r
 }               /* End of FreeEMHandle() */\r
 \r
 /********************************************************************/\r
@@ -350,19 +434,22 @@ FreeEMHandle(int Handle)
 static int\r
 GetNumPages(int Handle)\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
 \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
 //BadHandle:\r
-\r
-    return(NumPages);\r
+       return(NumPages);\r
 }               /* End of GetNumPages() */\r
 \r
 /********************************************************************/\r
 }               /* End of GetNumPages() */\r
 \r
 /********************************************************************/\r
@@ -370,15 +457,17 @@ GetNumPages(int Handle)
 static int\r
 EMStateSave(int Handle)\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
 \r
 //Unsaved:\r
     return(RtnCode);\r