X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fexmm%2Fmemory.c;h=21b213f854d2ee7858c286094ef867dbd1f78de6;hb=b6dd51c3b756f09551ea2c731b7aaf370676617a;hp=423c89ef8c1d191f182311b5ebbe63a9fa998ca7;hpb=bd2713e5e316c67f08532a601349178d24d8067f;p=16.git diff --git a/src/lib/exmm/memory.c b/src/lib/exmm/memory.c old mode 100644 new mode 100755 index 423c89ef..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,22 +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 */ + 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: - ret - } - RtnVal = ((unsigned long)Pages << 14); /* Pages * 16K rtns bytes*/ + mov interr,1 + End: + } + if(!interr) + RtnVal = ((unsigned long)Pages); /* Pages * 16K rtns bytes*/ //<< 14); -//InternalError: - return(RtnVal); + return(RtnVal); } /* End of EMMCoreLeft() */ /********************************************************************/ @@ -110,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); } @@ -131,25 +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 */ + 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: - ret - } - RtnCode = TRUE; + } //NoGo: - return(RtnCode); + return(RtnCode); } /* End of EMMRealloc() */ /********************************************************************/ @@ -253,16 +287,20 @@ 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 */ +{ + 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: - ret - } - return(FALSE); + mov EMSready,TRUE + End: + } + return(EMSready); //Ready: // return(TRUE); @@ -270,44 +308,72 @@ EMReady(void) /********************************************************************/ -static unsigned int +static unsigned long GetEMMSeg(void) { - unsigned int EMSegment; + 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 */ - _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 +//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: - ret - } - return(EMSegment); /*lint !e530 */ + mov EMSegment,NOTREADY + End: + } + return(EMSegment); /*lint !e530 */ //NotReady: // return(NOTREADY); -} /* End of GetEMMSeg() */ +} /* 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 */ + 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: - ret - } - return(NewHandle); + mov NewHandle,NO_DATA + End: + } + return(NewHandle); //NoHandle: // return(NO_DATA); @@ -318,40 +384,46 @@ GetEMHandle(int NumPages) 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 + 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: - ret - } - RtnCode = SUCCESS; +// End: + } +// RtnCode = SUCCESS; //NoMapping: - return(RtnCode); + 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 +{ + 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 */ - ret - } - return(SUCCESS); + mov FreeEMShandle,NO_DATA + End: + } + return(FreeEMShandle); //NotFreed: /* must retry if unsuccessful */ // return(NO_DATA); @@ -362,21 +434,22 @@ FreeEMHandle(int Handle) 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 + 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: - ret - } +// End: + } //BadHandle: - return(NumPages); + return(NumPages); } /* End of GetNumPages() */ /********************************************************************/ @@ -384,17 +457,17 @@ GetNumPages(int Handle) 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 */ + 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: - ret - } - RtnCode = SUCCESS; + } +// RtnCode = SUCCESS; //Unsaved: return(RtnCode);