X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fexmm%2Fmemory.c;h=21b213f854d2ee7858c286094ef867dbd1f78de6;hb=b75a9280f3eb85ab5739a63a79404141fdbc28d7;hp=ce58c3e4a6cbfdbd10019dafad5c9d1d8fe3887e;hpb=d3f8280463ec0bc9aede20aa5a2c38d8f0bd0fd7;p=16.git diff --git a/src/lib/exmm/memory.c b/src/lib/exmm/memory.c old mode 100644 new mode 100755 index ce58c3e4..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~ */ @@ -23,25 +25,55 @@ #include "memory.h" -// static globals -------------------------------- + //static globals -------------------------------- static int ActiveEMList[MAXEMHANDLES]; -static unsigned int EMMSeg; - -// forward declarations --------------------------------- +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,21 +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() */ /********************************************************************/ @@ -109,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); } @@ -130,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; + 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); + return(RtnCode); } /* End of EMMRealloc() */ /********************************************************************/ @@ -251,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); +{ + 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); +// return(TRUE); } /* End of EMReady() */ /********************************************************************/ -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 - } - return(EMSegment); /*lint !e530 */ +//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 GetEMMSeg() */ +// 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); + 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); +// return(NO_DATA); } /* End of GetEMHandle() */ /********************************************************************/ @@ -310,39 +384,49 @@ 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 - } - RtnCode = SUCCESS; + 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); + 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); +{ + 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); +// return(NO_DATA); } /* End of FreeEMHandle() */ /********************************************************************/ @@ -350,19 +434,22 @@ FreeEMHandle(int Handle) static int GetNumPages(int Handle) { - int NumPages = 0; + 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: + } - _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); + return(NumPages); } /* End of GetNumPages() */ /********************************************************************/ @@ -370,15 +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 */ - } - RtnCode = SUCCESS; + 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);