X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fexmm%2Fmemory.c;h=21b213f854d2ee7858c286094ef867dbd1f78de6;hb=e23d20f4598ac33c31059e126590b63bffd57235;hp=519ec6cb2812d7478ff9665619a51837c011c074;hpb=0ac6aa1567e8c251272cd9d52485a1bf9fd32240;p=16.git diff --git a/src/lib/exmm/memory.c b/src/lib/exmm/memory.c old mode 100644 new mode 100755 index 519ec6cb..21b213f8 --- a/src/lib/exmm/memory.c +++ b/src/lib/exmm/memory.c @@ -3,11 +3,13 @@ * Module: All Modules * Author(s): Chris Somers * Date: December 1, 1992 - * Version: V.1.1 + * Version: V.1.1w minor mods by Alex Russell to simplify Must use memory model with FAR code + + Open Watcom patch by sparky4~ */ @@ -26,22 +28,52 @@ //static globals -------------------------------- static int ActiveEMList[MAXEMHANDLES]; -static unsigned int EMMSeg; +static unsigned long EMMSeg; //forward declarations --------------------------------- - + static int EMPresent(void); static int EMReady(void); -static unsigned int GetEMMSeg(void); +static unsigned long GetEMMSeg(void); static int GetEMHandle(int NumPages); static int EMMap(int Handle, int LogPg, int PhyPg); static int FreeEMHandle(int Handle); static int GetNumPages(int Handle); static int EMStateSave(int Handle); static void EMStateRestore(int Handle); + +/********************************************************************/ +//beta +unsigned long +EMInfo(void) +{ + int EMSinfo; + _asm + { + mov ah,0x58 + int 0x67 + mov EMSinfo,ax + } + return((unsigned long)EMSinfo); +} + +/********************************************************************/ + +int +EMVer(void) +{ + int EMSver; + _asm + { + mov ah,0x46 + int 0x67 + mov EMSver,ax + } + return(EMSver); +} + +/********************************************************************/ - -/********************************************************************/ int OpenEMM(void) { @@ -80,20 +112,25 @@ EMMInstalled(void) unsigned long EMMCoreLeft(void) { - unsigned Pages; - unsigned long RtnVal = 0UL; - - _asm { - mov ah,0x42 /* get EMM free page count */ - int 0x67 - or ah,ah - js InternalError /* returns 80, 81, or 84 hex on error */ - mov Pages,bx /* number of unallocated 16K pages */ - } - RtnVal = ((unsigned long)Pages << 14); /* Pages * 16K rtns bytes*/ - -InternalError: - return(RtnVal); + unsigned Pages; + unsigned long RtnVal = 0UL; + unsigned short interr=0; + + _asm { + mov ah,0x42 /* get EMM free page count */ + int 0x67 + or ah,ah + js InternalError /* returns 80, 81, or 84 hex on error */ + 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); + + return(RtnVal); } /* End of EMMCoreLeft() */ /********************************************************************/ @@ -108,7 +145,7 @@ EMMalloc(int *Handle, int Pages) *Handle = NOTREADY; return(NULL); } - if ((Pages < 1) || (Pages > 1020)) { + if ((Pages < 1) || (Pages > EMMCoreLeft(/*1020*/))) { *Handle = VALUE_OUTF_RANGE; return (NULL); } @@ -129,24 +166,24 @@ EMMalloc(int *Handle, int Pages) int EMMRealloc(int Handle, int Pages) { - int RtnCode = FALSE; - - if (!EMMSeg || (Pages < 0) || (Pages > 1020)) { - return (FALSE); - } - _asm { - mov ah,0x51 /* change # of pages */ - mov bx,Pages - mov dx,Handle - int 0x67 - or ah,ah - js NoGo /* returns 80 to 88 hex on error */ - } - RtnCode = TRUE; - -NoGo: - - return(RtnCode); + int RtnCode = FALSE; + + if (!EMMSeg || (Pages < 0) || (Pages > EMMCoreLeft(/*1020*/))) { + return (FALSE); + } + _asm { + mov ah,0x51 /* change # of pages */ + mov bx,Pages + mov dx,Handle + int 0x67 + or ah,ah + js NoGo /* returns 80 to 88 hex on error */ + mov RtnCode,TRUE + NoGo: + } + +//NoGo: + return(RtnCode); } /* End of EMMRealloc() */ /********************************************************************/ @@ -250,58 +287,96 @@ EMPresent(void) static int EMReady(void) -{ - _asm { - mov ah,0x40 /* get EM Manager Status */ - int 0x67 - or ah,ah - jns Ready /* returns 80, 81, or 84 hex on error */ - } - return(FALSE); - -Ready: - return(TRUE); +{ + int EMSready; + _asm { + mov ah,0x40 /* get EM Manager Status */ + int 0x67 + or ah,ah + jns Ready /* returns 80, 81, or 84 hex on error */ + mov EMSready,FALSE + jmp End + Ready: + mov EMSready,TRUE + End: + } + return(EMSready); + +//Ready: +// return(TRUE); } /* End of EMReady() */ /********************************************************************/ -static unsigned int +static unsigned long GetEMMSeg(void) { - unsigned int EMSegment; - - _asm { - mov ah,0x41 /* get EMM page frame segment */ - int 0x67 - or ah,ah - js NotReady /* returns 80, 81, or 84 hex on error */ - mov EMSegment,bx - } - return(EMSegment); /*lint !e530 */ + unsigned int EMSegment; + + _asm { + mov ah,0x41 /* get EMM page frame segment */ + int 0x67 + or ah,ah + js NotReady /* returns 80, 81, or 84 hex on error */ + mov EMSegment,bx + jmp End + NotReady: + mov EMSegment,NOTREADY + End: + } + return(EMSegment); /*lint !e530 */ + +//NotReady: +// return(NOTREADY); +} /* End of GetEMMSeg() */ + +/********************************************************************/ -NotReady: - return(NOTREADY); -} /* End of GetEMMSeg() */ +unsigned long +GetEMMSeg0(void) +{ + unsigned int EMSegment; + + _asm { + mov ah,0x41 /* get EMM page frame segment */ + int 0x67 + or ah,ah + js NotReady /* returns 80, 81, or 84 hex on error */ + mov EMSegment,bx + jmp End + NotReady: + mov EMSegment,NOTREADY + End: + } + return(EMSegment); /*lint !e530 */ + +//NotReady: +// return(NOTREADY); +} /* End of GetEMMSeg0() */ /********************************************************************/ static int GetEMHandle(int NumPages) { - int NewHandle; - - _asm { - mov ah,0x43 /* get handle and allocate EM */ - mov bx,NumPages /* number of 16K pages to allocate */ - int 0x67 - or ah,ah /* returns 80 to 89 hex on error */ - js NoHandle - mov NewHandle,dx /* retrieve handle */ - } - return(NewHandle); - -NoHandle: - return(NO_DATA); + int NewHandle; + + _asm { + mov ah,0x43 /* get handle and allocate EM */ + mov bx,NumPages /* number of 16K pages to allocate */ + int 0x67 + or ah,ah /* returns 80 to 89 hex on error */ + js NoHandle + mov NewHandle,dx /* retrieve handle */ + jmp End + NoHandle: + mov NewHandle,NO_DATA + End: + } + return(NewHandle); + +//NoHandle: +// return(NO_DATA); } /* End of GetEMHandle() */ /********************************************************************/ @@ -309,39 +384,49 @@ NoHandle: static int EMMap(int Handle, int LogPg, int PhyPg) { - int RtnCode = NO_DATA; - - _asm { - mov ax,PhyPg /* physical page: 0 - 3 in AL only */ - mov ah,0x44 /* map logical to physical page */ - mov bx,LogPg /* logical page: 0 - 1020 */ - mov dx,Handle - int 0x67 - or ah,ah /* returns 80 to 8B hex on error */ - js NoMapping - } - RtnCode = SUCCESS; - -NoMapping: - return(RtnCode); + int RtnCode = NO_DATA; + + _asm { + mov ax,PhyPg /* physical page: 0 - 3 in AL only */ + mov ah,0x44 /* map logical to physical page */ + mov bx,LogPg /* logical page: 0 - 1020 */ + mov dx,Handle + int 0x67 + or ah,ah /* returns 80 to 8B hex on error */ + js NoMapping + mov RtnCode,SUCCESS +// jmp End + NoMapping: +// End: + } +// RtnCode = SUCCESS; + +//NoMapping: + return(RtnCode); } /* End of EMMap() */ /********************************************************************/ static int FreeEMHandle(int Handle) -{ - _asm { - mov ah,0x45 /* free handle and deallocate EM */ - mov dx,Handle - int 0x67 - or ah,ah /* returns 80 to 86 hex on error */ - js NotFreed - } - return(SUCCESS); - -NotFreed: /* must retry if unsuccessful */ - return(NO_DATA); +{ + int FreeEMShandle; + _asm { + mov ah,0x45 /* free handle and deallocate EM */ + mov dx,Handle + int 0x67 + or ah,ah /* returns 80 to 86 hex on error */ + js NotFreed + mov FreeEMShandle,SUCCESS + jmp End + NotFreed: /* must retry if unsuccessful */ + mov FreeEMShandle,NO_DATA + End: + } + return(FreeEMShandle); + +//NotFreed: /* must retry if unsuccessful */ +// return(NO_DATA); } /* End of FreeEMHandle() */ /********************************************************************/ @@ -349,19 +434,22 @@ NotFreed: /* must retry if unsuccessful */ static int GetNumPages(int Handle) { - int NumPages = 0; - - _asm { - mov ah,0x4C /* get allocated pages for Handle */ - mov dx,Handle - int 0x67 - or ah,ah /* returns 80 to 84 hex on error */ - js BadHandle - mov NumPages,bx - } -BadHandle: - - return(NumPages); + int NumPages = 0; + + _asm { + mov ah,0x4C /* get allocated pages for Handle */ + mov dx,Handle + int 0x67 + or ah,ah /* returns 80 to 84 hex on error */ + js BadHandle + mov NumPages,bx +// jmp End + BadHandle: +// End: + } + +//BadHandle: + return(NumPages); } /* End of GetNumPages() */ /********************************************************************/ @@ -369,17 +457,19 @@ BadHandle: static int EMStateSave(int Handle) { - int RtnCode = NO_MEMORY; - _asm { - mov ah,0x47 /* save page map under Handle */ - mov dx,Handle - int 0x67 - or ah,ah - js Unsaved /* out of save space error */ - } - RtnCode = SUCCESS; - -Unsaved: + int RtnCode = NO_MEMORY; + _asm { + mov ah,0x47 /* save page map under Handle */ + mov dx,Handle + int 0x67 + or ah,ah + js Unsaved /* out of save space error */ + mov RtnCode,SUCCESS + Unsaved: + } +// RtnCode = SUCCESS; + +//Unsaved: return(RtnCode); } /* End of EMStateSave() */