]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/exmm/memory.c
cleanup~ emm is ..... WORKING!!! wwww i just gotta utilize it fully!
[16.git] / src / lib / exmm / memory.c
index 519ec6cb2812d7478ff9665619a51837c011c074..38b12255b41e45e2ef7c269f6fe9e64a4e793f13 100644 (file)
@@ -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
@@ -29,7 +31,7 @@ static int  ActiveEMList[MAXEMHANDLES];
 static unsigned int  EMMSeg;\r
 \r
  //forward declarations ---------------------------------\r
 static unsigned int  EMMSeg;\r
 \r
  //forward declarations ---------------------------------\r
-\r
+
 static int  EMPresent(void);\r
 static int  EMReady(void);\r
 static unsigned int  GetEMMSeg(void);\r
 static int  EMPresent(void);\r
 static int  EMReady(void);\r
 static unsigned int  GetEMMSeg(void);\r
@@ -39,9 +41,39 @@ static int  FreeEMHandle(int Handle);
 static int  GetNumPages(int Handle);\r
 static int  EMStateSave(int Handle);\r
 static void EMStateRestore(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,20 +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
-    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
@@ -108,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
@@ -129,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
-\r
-NoGo:\r
-\r
-    return(RtnCode);\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
+       return(RtnCode);\r
 }               /* End of EMMRealloc() */\r
 \r
 /********************************************************************/\r
 }               /* End of EMMRealloc() */\r
 \r
 /********************************************************************/\r
@@ -250,17 +287,23 @@ 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
-\r
-Ready:\r
-    return(TRUE);\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
 }               /* End of EMReady() */\r
 \r
 /********************************************************************/\r
 }               /* End of EMReady() */\r
 \r
 /********************************************************************/\r
@@ -268,19 +311,23 @@ Ready:
 static unsigned int\r
 GetEMMSeg(void)\r
 {\r
 static unsigned int\r
 GetEMMSeg(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\r
-    }\r
-    return(EMSegment);              /*lint !e530 */\r
-\r
-NotReady:\r
-    return(NOTREADY);\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
 \r
 /********************************************************************/\r
 }               /* End of GetEMMSeg() */\r
 \r
 /********************************************************************/\r
@@ -288,20 +335,24 @@ NotReady:
 static int\r
 GetEMHandle(int NumPages)\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
-\r
-NoHandle:\r
-    return(NO_DATA);\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
 }               /* End of GetEMHandle() */\r
 \r
 /********************************************************************/\r
 }               /* End of GetEMHandle() */\r
 \r
 /********************************************************************/\r
@@ -309,39 +360,49 @@ NoHandle:
 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
-\r
-NoMapping:\r
-    return(RtnCode);\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
 }               /* 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
-\r
-NotFreed:                           /* must retry if unsuccessful */\r
-    return(NO_DATA);\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
 }               /* End of FreeEMHandle() */\r
 \r
 /********************************************************************/\r
 }               /* End of FreeEMHandle() */\r
 \r
 /********************************************************************/\r
@@ -349,19 +410,22 @@ NotFreed:                           /* must retry if unsuccessful */
 static int\r
 GetNumPages(int Handle)\r
 {\r
 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\r
-    }\r
-BadHandle:\r
-\r
-    return(NumPages);\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
+//BadHandle:\r
+       return(NumPages);\r
 }               /* End of GetNumPages() */\r
 \r
 /********************************************************************/\r
 }               /* End of GetNumPages() */\r
 \r
 /********************************************************************/\r
@@ -369,17 +433,19 @@ BadHandle:
 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
-\r
-Unsaved:\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
 }               /* End of EMStateSave() */\r
 \r
     return(RtnCode);\r
 }               /* End of EMStateSave() */\r
 \r