From: sparky4 Date: Fri, 15 May 2015 18:33:19 +0000 (-0500) Subject: We actually have a working EMS library now~ yay! I am going to experiment and play... X-Git-Url: http://4ch.mooo.com/gitweb/?a=commitdiff_plain;h=de4d33a05ca28e5332570749f3a1c1648db896a3;p=16.git We actually have a working EMS library now~ yay! I am going to experiment and play with it a whole bunch.... wwww new file: src/lib/exmm/BAKAPEE.EXE modified: src/lib/exmm/EMM.EXE deleted: src/lib/exmm/MEMORY.MAP new file: src/lib/exmm/bakapee.c modified: src/lib/exmm/emm.c modified: src/lib/exmm/memory.c modified: src/lib/exmm/memory.h modified: src/lib/exmm/x.bat --- diff --git a/src/lib/exmm/BAKAPEE.EXE b/src/lib/exmm/BAKAPEE.EXE new file mode 100644 index 00000000..26069593 Binary files /dev/null and b/src/lib/exmm/BAKAPEE.EXE differ diff --git a/src/lib/exmm/EMM.EXE b/src/lib/exmm/EMM.EXE index 2232acee..b9f72c3a 100644 Binary files a/src/lib/exmm/EMM.EXE and b/src/lib/exmm/EMM.EXE differ diff --git a/src/lib/exmm/MEMORY.MAP b/src/lib/exmm/MEMORY.MAP deleted file mode 100644 index 7c39ab42..00000000 --- a/src/lib/exmm/MEMORY.MAP +++ /dev/null @@ -1,35 +0,0 @@ -Error: Segment _TEXT exceeds 64K - - Start Stop Length Name Class - - 00000H 004F2H 004F3H MEMORY_TEXT CODE - 004F3H 40507H 40015H _TEXT CODE - 504F2H 5057DH 0008CH MEMORY_DATA FAR_DATA - 50580H 50581H 00002H FSBDTR5_FAR FAR_DATA - 50590H 50590H 00000H IOSTSTD5_FAR FAR_DATA - 50590H 505C3H 00034H IOSTSTD6_FAR FAR_DATA - 505D0H 505D0H 00000H IOSTSTD7_FAR FAR_DATA - 505D0H 50601H 00032H IOSTSTD8_FAR FAR_DATA - 50610H 50610H 00000H IOSTSTD9_FAR FAR_DATA - 50610H 50641H 00032H IOSTSTD10_FAR FAR_DATA - 50650H 50650H 00000H IOSTSTD11_FAR FAR_DATA - 50650H 50681H 00032H IOSTSTD12_FAR FAR_DATA - 50690H 50693H 00004H IOSTSTD13_FAR FAR_DATA - 506A0H 506A3H 00004H IOSTSTD14_FAR FAR_DATA - 506B0H 506B3H 00004H IOSTSTD15_FAR FAR_DATA - 506C0H 506C3H 00004H STDTR5_FAR FAR_DATA - 506D0H 506D3H 00004H STDTR6_FAR FAR_DATA - 506E0H 506E3H 00004H STDTR7_FAR FAR_DATA - 506F0H 506F3H 00004H STDTR8_FAR FAR_DATA - 50700H 50701H 00002H STDTR9_FAR FAR_DATA - 50710H 50713H 00004H STSYNC5_FAR FAR_DATA - 50720H 50723H 00004H STSYNC6_FAR FAR_DATA - 50730H 50733H 00004H STSYNC7_FAR FAR_DATA - 50734H 5161BH 00EE8H _DATA DATA - 5161CH 5161DH 00002H _CVTSEG DATA - 5161EH 51623H 00006H _SCNSEG DATA - 51624H 5164DH 0002AH _INIT_ INITDATA - 5164EH 51651H 00004H _BSS BSS - 51652H 5165DH 0000CH _EXIT_ EXITDATA - - diff --git a/src/lib/exmm/bakapee.c b/src/lib/exmm/bakapee.c new file mode 100644 index 00000000..36fd1e15 --- /dev/null +++ b/src/lib/exmm/bakapee.c @@ -0,0 +1,53 @@ +#include +#include +#include + +#include "emmret.h" +#include "emmsize.h" + +#define CMM 0 +#define EMM 1 + +static int +EMReady(void) +{ + 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 int +EMVer(void) +{ + int EMSver; + _asm { + mov ah,0x46 + int 0x67 + mov EMSver,ax + } + return(EMSver); +} + +int main() +{ + int pee; + int rpee; + pee=EMVer(); + rpee=EMReady(); + printf("%x\n", pee); + printf("%x\n", rpee); + return 0; +} diff --git a/src/lib/exmm/emm.c b/src/lib/exmm/emm.c index f76a59e1..60238150 100644 --- a/src/lib/exmm/emm.c +++ b/src/lib/exmm/emm.c @@ -41,7 +41,7 @@ void main(void) exit(1); } else - printf("Emm available\n"); + printf("Emm %x available\n", EMVer()); pEmmData = (char *)EMMalloc(&hEData, 6); // get 6 * 16K bytes - 96K if ( pEmmData == NULL ) diff --git a/src/lib/exmm/memory.c b/src/lib/exmm/memory.c index 423c89ef..75b86646 100644 --- 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~ */ @@ -29,7 +31,7 @@ static int ActiveEMList[MAXEMHANDLES]; static unsigned int EMMSeg; //forward declarations --------------------------------- - + static int EMPresent(void); static int EMReady(void); static unsigned int GetEMMSeg(void); @@ -39,7 +41,21 @@ static int FreeEMHandle(int Handle); static int GetNumPages(int Handle); static int EMStateSave(int Handle); static void EMStateRestore(int Handle); - + +/********************************************************************/ + +int +EMVer(void) +{ + int EMSver; + _asm + { + mov ah,0x46 + int 0x67 + mov EMSver,ax + } + return(EMSver); +} /********************************************************************/ int @@ -80,22 +96,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 << 14); /* Pages * 16K rtns bytes*/ -//InternalError: - return(RtnVal); + return(RtnVal); } /* End of EMMCoreLeft() */ /********************************************************************/ @@ -131,25 +150,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 > 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 +271,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); @@ -273,18 +295,20 @@ EMReady(void) static unsigned int 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 + 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); @@ -295,19 +319,21 @@ GetEMMSeg(void) 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 +344,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 +394,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 +417,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); diff --git a/src/lib/exmm/memory.h b/src/lib/exmm/memory.h index 8abc7d6b..9cd266b2 100644 --- a/src/lib/exmm/memory.h +++ b/src/lib/exmm/memory.h @@ -18,7 +18,8 @@ #define CMM 0 #define EMM 1 - + +extern int EMVer(void); extern int OpenEMM(void); extern void CloseEMM(void); extern int EMMInstalled(void); diff --git a/src/lib/exmm/x.bat b/src/lib/exmm/x.bat index 81079d7c..ca0abb37 100644 --- a/src/lib/exmm/x.bat +++ b/src/lib/exmm/x.bat @@ -1,7 +1,9 @@ -bcc -mh -c memory.c -bcc -mh emm.c memory.obj -move emm.exe em0.exe -move memory.obj memory.ob -wdis -a memory.ob > memory.asm -wasm -c -mh -0 memory.asm -wcp -ecc -mh emm.c memory.obj \z\borlandc\lib\ch.lib \ No newline at end of file +rem bcc -mh -c memory.c +rem bcc -mh emm.c memory.obj +rem move emm.exe em0.exe +rem move memory.obj memory.ob +rem wdis -a memory.ob > memory.asm +rem wasm -c -mh -0 memory.asm +rem wcp -ecc -mh emm.c memory.obj \z\borlandc\lib\ch.lib +wcc -0 -mh memory.c +wcp -mh emm.c memory.obj