]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/exmm/memory.c
wwww
[16.git] / src / lib / exmm / memory.c
old mode 100644 (file)
new mode 100755 (executable)
index 423c89e..21b213f
@@ -3,11 +3,13 @@
  *      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
  //static globals --------------------------------\r
 \r
 static int  ActiveEMList[MAXEMHANDLES];\r
-static unsigned int  EMMSeg;\r
+static unsigned long EMMSeg;\r
 \r
  //forward declarations ---------------------------------\r
-\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
@@ -80,22 +112,25 @@ EMMInstalled(void)
 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 */
+       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:
-               ret\r
-    }\r
-    RtnVal = ((unsigned long)Pages << 14);  /* Pages * 16K rtns bytes*/\r
+               mov             interr,1
+               End:
+       }
+       if(!interr)
+       RtnVal = ((unsigned long)Pages);  /* Pages * 16K rtns bytes*/ //<< 14);
 \r
-//InternalError:\r
-    return(RtnVal);\r
+       return(RtnVal);\r
 }               /* End of EMMCoreLeft() */\r
 \r
 /********************************************************************/\r
@@ -110,7 +145,7 @@ EMMalloc(int *Handle, int Pages)
         *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
@@ -131,25 +166,24 @@ EMMalloc(int *Handle, int Pages)
 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 */
+       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:
-               ret\r
-    }\r
-    RtnCode = TRUE;\r
+       }\r
 \r
 //NoGo:\r
-    return(RtnCode);\r
+       return(RtnCode);\r
 }               /* End of EMMRealloc() */\r
 \r
 /********************************************************************/\r
@@ -253,16 +287,20 @@ EMPresent(void)
 \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 */
+{
+       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:
-               ret\r
-    }\r
-    return(FALSE);\r
+               mov             EMSready,TRUE
+               End:
+       }\r
+       return(EMSready);\r
 \r
 //Ready:\r
 //    return(TRUE);\r
@@ -270,44 +308,72 @@ EMReady(void)
 \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
+//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:
-               ret\r
-    }\r
-    return(EMSegment);              /*lint !e530 */\r
+               mov     EMSegment,NOTREADY
+               End:\r
+       }\r
+       return(EMSegment);              /*lint !e530 */\r
 \r
 //NotReady:\r
 //    return(NOTREADY);\r
-}               /* End of GetEMMSeg() */\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 */
+       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:
-               ret\r
-    }\r
-    return(NewHandle);\r
+               mov             NewHandle,NO_DATA
+               End:\r
+       }\r
+       return(NewHandle);\r
 \r
 //NoHandle:\r
 //    return(NO_DATA);\r
@@ -318,40 +384,46 @@ GetEMHandle(int NumPages)
 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
+       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:
-               ret\r
-    }\r
-    RtnCode = SUCCESS;\r
+//             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
+{
+       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 */
-               ret\r
-    }\r
-    return(SUCCESS);\r
+               mov             FreeEMShandle,NO_DATA
+               End:\r
+       }\r
+       return(FreeEMShandle);\r
 \r
 //NotFreed:                           /* must retry if unsuccessful */\r
 //    return(NO_DATA);\r
@@ -362,21 +434,22 @@ FreeEMHandle(int Handle)
 static int\r
 GetNumPages(int Handle)\r
 {\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
+       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:
-               ret\r
-    }
+//             End:\r
+       }
 \r
 //BadHandle:\r
-    return(NumPages);\r
+       return(NumPages);\r
 }               /* End of GetNumPages() */\r
 \r
 /********************************************************************/\r
@@ -384,17 +457,17 @@ GetNumPages(int Handle)
 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 */
+       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:
-               ret\r
-    }\r
-    RtnCode = SUCCESS;\r
+       }\r
+//    RtnCode = SUCCESS;\r
 \r
 //Unsaved:\r
     return(RtnCode);\r