From d3f8280463ec0bc9aede20aa5a2c38d8f0bd0fd7 Mon Sep 17 00:00:00 2001 From: sparky4 Date: Thu, 12 Feb 2015 13:02:05 -0600 Subject: [PATCH] added a EMS & XMS library modified: Project 16.bfproject new file: src/lib/exmm/EMM.EXE new file: src/lib/exmm/emm.c new file: src/lib/exmm/emmret.h new file: src/lib/exmm/emmsize.h new file: src/lib/exmm/memory.c new file: src/lib/exmm/memory.h new file: src/lib/exmm/x.bat renamed: src/lib/xmem/xmem.asm -> src/lib/exmm/xmem.asm new file: src/lib/exmm/xmem.c renamed: src/lib/xmem/xmem.h -> src/lib/exmm/xmem.h renamed: src/lib/xmem/xmem.txt -> src/lib/exmm/xmem.txt renamed: src/lib/xmem/xmemc.c -> src/lib/exmm/xmemc.c --- Project 16.bfproject | 32 ++- src/lib/exmm/EMM.EXE | Bin 0 -> 17182 bytes src/lib/exmm/emm.c | 78 +++++++ src/lib/exmm/emmret.h | 84 +++++++ src/lib/exmm/emmsize.h | 97 ++++++++ src/lib/exmm/memory.c | 397 ++++++++++++++++++++++++++++++++ src/lib/exmm/memory.h | 34 +++ src/lib/exmm/x.bat | 1 + src/lib/{xmem => exmm}/xmem.asm | 0 src/lib/exmm/xmem.c | 314 +++++++++++++++++++++++++ src/lib/{xmem => exmm}/xmem.h | 0 src/lib/{xmem => exmm}/xmem.txt | 0 src/lib/{xmem => exmm}/xmemc.c | 0 13 files changed, 1034 insertions(+), 3 deletions(-) create mode 100644 src/lib/exmm/EMM.EXE create mode 100644 src/lib/exmm/emm.c create mode 100644 src/lib/exmm/emmret.h create mode 100644 src/lib/exmm/emmsize.h create mode 100644 src/lib/exmm/memory.c create mode 100644 src/lib/exmm/memory.h create mode 100644 src/lib/exmm/x.bat rename src/lib/{xmem => exmm}/xmem.asm (100%) create mode 100644 src/lib/exmm/xmem.c rename src/lib/{xmem => exmm}/xmem.h (100%) rename src/lib/{xmem => exmm}/xmem.txt (100%) rename src/lib/{xmem => exmm}/xmemc.c (100%) diff --git a/Project 16.bfproject b/Project 16.bfproject index be3520aa..63ddf998 100644 --- a/Project 16.bfproject +++ b/Project 16.bfproject @@ -1,6 +1,6 @@ c2e.convert_special: 0 e2c.convert_num: 0 -openfiles: /dos/z/16/doc/project.txt:0:0:1: +openfiles: /dos/z/16/doc/project.txt:138:0:0: openfiles: /dos/z/16/src/palettec.c:0:0:0: openfiles: /dos/z/16/src/pcxtest.c:0:0:0: openfiles: /dos/z/16/src/scroll.c:0:0:0: @@ -12,6 +12,18 @@ openfiles: /dos/z/16/src/lib/ems.c:0:0:0: openfiles: /dos/z/16/src/lib/ems1.c:0:0:0: openfiles: /dos/z/16/src/lib/planar.h:0:0:0: openfiles: /dos/z/16/src/lib/PLANAR.C:0:0:0: +openfiles: /dos/z/16/src/lib/bitmap.c:0:0:0: +openfiles: /dos/z/16/src/lib/bitmap.h:0:0:0: +openfiles: /dos/z/16/src/lib/dos_kb.c:0:0:0: +openfiles: /dos/z/16/src/lib/dos_kb.h:0:0:0: +openfiles: /dos/z/16/src/lib/lib_head.cpp:0:0:0: +openfiles: /dos/z/16/src/lib/lib_head.h:0:0:0: +openfiles: /dos/z/16/src/lib/modex16.c:444:0:0: +openfiles: /dos/z/16/src/lib/modex16.h:0:0:0: +openfiles: /dos/z/16/src/lib/scroll.c:0:0:0: +openfiles: /dos/z/16/src/lib/scroll.h:0:0:0: +openfiles: /dos/z/16/src/lib/types.h:0:0:0: +openfiles: /dos/z/bakac.c:0:0:1: snr_recursion_level: 0 convertcolumn_horizontally: 0 adv_open_matchname: 0 @@ -23,7 +35,7 @@ view_left_panel: 0 default_mime_type: text/plain e2c.convert_xml: 1 c2e.convert_iso: 0 -opendir: file:///dos/z/16/doc +opendir: file:///dos/z wrap_text_default: 0 bookmarks_filename_mode: 1 snr_casesens: 0 @@ -55,8 +67,22 @@ recent_files: file:///dos/z/16/src/lib/ems1.c recent_files: file:///dos/z/16/src/lib/planar.h recent_files: file:///dos/z/16/src/lib/PLANAR.C recent_files: file:///dos/z/16/doc/project.txt +recent_files: file:///dos/z/16/src/lib/bitmap.c +recent_files: file:///dos/z/16/src/lib/bitmap.h +recent_files: file:///dos/z/16/src/lib/dos_kb.c +recent_files: file:///dos/z/16/src/lib/dos_kb.h +recent_files: file:///dos/z/16/src/lib/lib_head.cpp +recent_files: file:///dos/z/16/src/lib/lib_head.h +recent_files: file:///dos/z/16/src/lib/modex16.h +recent_files: file:///dos/z/16/src/lib/modex16.c +recent_files: file:///dos/z/16/src/lib/scroll.c +recent_files: file:///dos/z/16/src/lib/scroll.h +recent_files: file:///dos/z/16/src/lib/types.h +recent_files: file:///dos/z/rbaka.c +recent_files: file:///dos/z/baka.c +recent_files: file:///dos/z/bakac.c snr_replacetype: 0 -savedir: file:///dos/z/16/src +savedir: file:///dos/z spell_check_default: 1 spell_insert_entities: 0 last_filefilter: diff --git a/src/lib/exmm/EMM.EXE b/src/lib/exmm/EMM.EXE new file mode 100644 index 0000000000000000000000000000000000000000..a08435355566ec62c6dcd97d8dc341d0ceb58f08 GIT binary patch literal 17182 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 QL2~{Qvn1y^{0|iW7xp9(J^%m! literal 0 HcmV?d00001 diff --git a/src/lib/exmm/emm.c b/src/lib/exmm/emm.c new file mode 100644 index 00000000..f642fada --- /dev/null +++ b/src/lib/exmm/emm.c @@ -0,0 +1,78 @@ +// Cut this out as emm.c + +/* File: emm.c + * Module: All Modules + * Author(s): Chris Somers + * Date: December 1, 1992 + * Version: V.1.1 + + minor mods by Alex Russell to simplify + + Must use memory model with FAR code + + */ + + +#include +#include +#include + +#include "memory.c" + +void TransformData(char *pEmmData, unsigned int len) +{ + while ( len ) + { + (*pEmmData)++; + pEmmData++; + + len--; + } +} + +void main(void) +{ + char *pEmmData; + int hEData; + + if ( OpenEMM() != SUCCESS ) + { // make sure we got EMM + printf("EMM unavailable.\n"); + exit(1); + } + else + printf("Emm available\n"); + + pEmmData = (char *)EMMalloc(&hEData, 6); // get 6 * 16K bytes - 96K + if ( pEmmData == NULL ) + { + printf("Not enough EMM or out of handles.\n"); + exit(2); + } + else + printf("emm alloced OK\n"); + + + printf("Map 1st 4 pages\n"); + MapEMM(hEData, 0, 4); // load 1st 4 pages into page frame: 0-3 + + memset(pEmmData, 0x0e, 64000u); + UnmapEMM(hEData, 0, 4); // not absolutely necessary + + printf("Map next 2 pages\n"); + MapEMM(hEData, 4, 2); // map last 2 pages: 4-5 + memset(pEmmData, 0x0e, 32768u); + + MapEMM(hEData, 0, 4); + // do some stuff with the first 64K of file data. + printf("Transform data\n"); + TransformData(pEmmData, 64000UL); + MapEMM(hEData, 4, 2); // only unmaps 1st two pages of prior 64k mapping + // do stuff with remaining 32K of data + TransformData(pEmmData, 32768UL); + UnmapEMM(hEData, 0, 4); // should unmap before freeing + + printf("Close emm\n"); + EMMFree(hEData); // finished with the file data + CloseEMM(); +} diff --git a/src/lib/exmm/emmret.h b/src/lib/exmm/emmret.h new file mode 100644 index 00000000..1ef3e670 --- /dev/null +++ b/src/lib/exmm/emmret.h @@ -0,0 +1,84 @@ +// AJR notes: some of these are not used by the emm code + +// Cut this out as emmret.h + +/* File: EmmRet.h + * Module: All Modules + * Author(s): Chris Somers + * Date: May 8, 1992 + * Version: V.1.0 + */ + +#ifndef _EMM_RETURNS_DEF +#define _EMM_RETURNS_DEF 1 + +/* Module return values */ + +/* Return Values */ + +#define START 8 +#define END 7 +#define MOVABORT 6 +#define PRN_COMPLETE 5 +#define PRN_PROGRESS 4 +#define INCOMPLETE 3 +#define HAVEROOM 2 +#define SUCCESS 1 +#define TRUE 1 +#define YES 1 +#define FALSE 0 +#define NO 0 +#define NOTREADY 0 +#define NO_DATA 0 +#define NONE -1 + +/* Start of Recoverable error codes */ + +#define NO_SPACE -1001 +#define NOTPOLLING -1002 +#define ALREADYDONE -1003 +#define NO_PRN_DEV -1004 +#define OUTF_PAPER -1005 +#define NO_VIDEO -1006 +#define TIMEOUT -1007 +#define FILENOPEN -1008 +#define ABORT_REQ -1009 +#define DEV_IOERR -1010 + +#define MAXRERR 10 +#define RECOVERABLE -1999 /* all above errors are recoverable */ + +/* Start of Threadfatal error codes */ + +#define NOT_OPEN -2001 +#define NOT_ATTACHED -2002 +#define NO_CONNECTION -2003 +#define INSUFF_MEM -2004 +#define NR_TIMEOUT -2005 + +#define MAXTERR 5 +#define THREADFATAL -2999 /* above errors force task to cancel */ + +/* Start of Systemfatal error codes */ + +#define BAD_TASKNUM -3001 +#define BAD_HANDLE -3002 +#define BAD_HARDWARE -3003 +#define INVALIDACTION -3004 +#define NOFREEITEMS -3005 +#define NO_MEMORY -3006 +#define NO_EMS -3007 +#define VALUE_OUTF_RANGE -3008 +#define BAD_MODE -3009 +#define NO_PALETTE -3010 +#define BAD_DISPPAGE -3011 +#define NO_TSR -3012 +#define BUFTOOSMALL -3013 +#define BAD_NAME -3014 +#define BAD_DISPHW -3015 +#define NO_FLOPPY -3016 + +#define MAXSERR 16 +#define SYSTEMFATAL -3999 /* above errors are fatal to system */ + +#endif diff --git a/src/lib/exmm/emmsize.h b/src/lib/exmm/emmsize.h new file mode 100644 index 00000000..8570875d --- /dev/null +++ b/src/lib/exmm/emmsize.h @@ -0,0 +1,97 @@ +// Cut this out as emmsize.h + +/* File: EmmSize.h + * Module: All Modules + * Author(s): Chris Somers + * Date: May 8, 1992 + * Version: V.1.0 + */ + +#ifndef _EMMSIZES_DEF +#define _EMMSIZES_DEF 1 + + +/* Module size constants */ + +#define MAXACTIONS 29 +#define MAXCHANNELS 4 +#define MAXFOCUS 3 +#define MAXBUFTYPES 64 +#define MAXEMHANDLES 64 /* up to a max of 255 */ +#define MAXTIMERS 32 +#define MAXTITEMS 128 +#define MAXQUEUES 24 +#ifdef PRINTER +#define MAXPRNS 4 +#else +#define MAXPRNS 0 +#endif +#ifdef UTSCOM +#define MAXUTSSCRNS 2 +#else +#define MAXUTSSCRNS 0 +#endif +#ifdef CAPTURE +#define MAXCAPTURE 1 +#else +#define MAXCAPTURE 0 +#endif +#define MAXIRQS 10 +#define MAXTCPDSCPTITEMS 16 /*max # of TCP connections*/ + +#define FREEBUFF 1 /* CallIODevice flag for BuffSize arrays */ +#define DSCONLY 2 /* allocate a BufDscpt, only - no buffer */ + +#define EMMPAGESIZE 0x4000 /* 16K EMM page size */ +#define SETUPLEN 32 +#define NAMELEN 40 +#define UNIXLEN 32 +#define ADDRLEN 16 +#define TITLELEN 128 +#define TSLEN 80 +#define COMMENTLEN 65 +#define PALSIZE 768 +#define QSTRLEN 254 +#define PRNBUFSIZ 2048 +#define TXTSCRNSIZE 4096 +#define UTSBUFSIZ 4096 +#define UTSSCRNSIZ 1920 +#define QMEMSIZE 15 +#define KBUFLEN 16 +#define GXBUFFSIZE 0x4000 +#define TCPNDBUFFSIZE 0x1000 /*router auto-allocation buff size*/ + /* graphics printing scale values */ +#define SCALE_HALF 1 /* value must not change */ +#define SCALE_ONE 2 +#define SCALE_QUART 3 /* value must not change */ + +#define SIXTH_SECOND 3L /* shade over 1/6 of a second*/ +#define HALF_SECOND 9L +#define ONE_SECOND 18L +#define TWO_SECONDS 36L +#define FIVE_SECONDS 91L +#define TEN_SECONDS 182L +#define HALF_MINUTE 182*3L /* same as 18.2*30, right? */ +#define ONE_MINUTE 182*6L /* same as 18.2*60, right? */ +#define TWO_MINUTES 182*12L /* same as 18.2*120, right? */ +#define FIVE_MINUTES 182*30L /* same as 18.2*300, right? */ +#define TEN_MINUTES 182*60L /* same as 18.2*600, right? */ +#define HALF_HOUR 182*180L /* same as 18.2*1800, right? */ +#define ONE_HOUR 182*360L /* same as 18.2*3600, right? */ + +#define MAXROUTMOVES 24 /*max # of routing moves at one time*/ + /*also max # of Move Complete Events*/ +/* Event Channel Defines */ + +#define MAXRECALLEVENTS 1 /*max nm of Recall Event Channels*/ +#define MAXKBDEVENTS 1 /*max nm of Kbd Event Channels*/ +#define MAXPRNEVENTS 4 /*max nm of Prt Prog & Prt Cmplte Event Chan*/ +#define MAXUTSRCVEVENTS MAXUTSSCRNS /*max nm of Uts Rx Event Chans*/ +#define MAXUTSXMTEVENTS MAXUTSSCRNS /*max nm of Uts Tx Event Chans*/ +#define MAXCAPEVENTS 2 /* max number of capture event channels */ +#define MAXOP1CMPLTEVENTS 1 /*max nm of Operation 1 Cmplt Event Channels*/ +#define MAXOP2CMPLTEVENTS 1 /*max nm of Operation 2 Cmplt Event Channels*/ +#define MAXOP3CMPLTEVENTS MAXTCPDSCPTITEMS /*max nm of Op 3 Event Chans*/ +#define MAXTCPEVENTS MAXTCPDSCPTITEMS /* max nm of TCP Event types */ + +#endif diff --git a/src/lib/exmm/memory.c b/src/lib/exmm/memory.c new file mode 100644 index 00000000..ce58c3e4 --- /dev/null +++ b/src/lib/exmm/memory.c @@ -0,0 +1,397 @@ + +/* File: Memory.c + * Module: All Modules + * Author(s): Chris Somers + * Date: December 1, 1992 + * Version: V.1.1 + + minor mods by Alex Russell to simplify + + Must use memory model with FAR code + + */ + + + +#if !defined(__LARGE__) && !defined(__COMPACT__) && !defined(__HUGE__) +#error Invalid memory model for compiling MEMORY.C +#endif + +#include +#include +#include + +#include "memory.h" + +// static globals -------------------------------- + +static int ActiveEMList[MAXEMHANDLES]; +static unsigned int EMMSeg; + +// forward declarations --------------------------------- + +static int EMPresent(void); +static int EMReady(void); +static unsigned int 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); + + +/********************************************************************/ +int +OpenEMM(void) +{ + if (!EMPresent() || !EMReady()) return(NOTREADY); + if (!(EMMSeg = GetEMMSeg())) return(NOTREADY); /*lint !e720 */ + return(SUCCESS); +} /* End of OpenEMM() */ + +/********************************************************************/ + +void +CloseEMM(void) +{ + int i; + + if (!EMMSeg) return; + for (i = 0; i < MAXEMHANDLES; i++) { + if (ActiveEMList[i]) { + FreeEMHandle(ActiveEMList[i]); + ActiveEMList[i] = 0; + } + } + EMMSeg = 0; +} /* End of CloseEMM() */ + +/********************************************************************/ + +int +EMMInstalled(void) +{ + return((EMMSeg) ? TRUE : FALSE); /* successfully opened? */ +} /* End of EMMInstalled() */ + +/********************************************************************/ + +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); +} /* End of EMMCoreLeft() */ + +/********************************************************************/ + +void far * +EMMalloc(int *Handle, int Pages) +{ + int i; + char *RtnPtr = NULL; + + if (!EMMSeg) { + *Handle = NOTREADY; + return(NULL); + } + if ((Pages < 1) || (Pages > 1020)) { + *Handle = VALUE_OUTF_RANGE; + return (NULL); + } + for (i = 0; (i < MAXEMHANDLES) && (ActiveEMList[i]); i++) ; + if (i == MAXEMHANDLES) { + *Handle = NOFREEITEMS; + return (NULL); + } + if ((ActiveEMList[i] = GetEMHandle(Pages)) > 0) { + RtnPtr = MK_FP(EMMSeg, 0); + } + *Handle = ActiveEMList[i]; + return((void far *)RtnPtr); +} /* End of EMMalloc() */ + +/********************************************************************/ + +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); +} /* End of EMMRealloc() */ + +/********************************************************************/ + +void +EMMFree(int Handle) +{ + int i, j; + + if (!EMMSeg) return; + for (i = 0; (i < MAXEMHANDLES) && (ActiveEMList[i] != Handle); i++) ; + if (i >= MAXEMHANDLES) return; + j = 16; + while (j--) { + if (FreeEMHandle(ActiveEMList[i])) break; + } + ActiveEMList[i] = 0; +} /* End of EMMFree() */ + +/********************************************************************/ + +int /* EMM map for application */ +MapEMM(int Handle, int Start, int Pages) +{ + int i; + + if (!EMMSeg) return(NOTREADY); + for (i = 0; (i < MAXEMHANDLES) && (ActiveEMList[i] != Handle); i++) ; + if (i == MAXEMHANDLES) return (NO_DATA); + if ((GetNumPages(Handle) < Pages) || (Pages < 1) || (Pages > 4)) { + return (VALUE_OUTF_RANGE); + } + for (i = Start; i < Start + Pages; i++) { + if (!EMMap(Handle, i, i - Start)) return(NO_DATA); + } + return(SUCCESS); +} /* End of MapEMM() */ + +/********************************************************************/ + +void /* EMM unmap for application */ +UnmapEMM(int Handle, int Start, int Pages) +{ + int i, j; + + if (!EMMSeg) return; + for (i = 0; (i < MAXEMHANDLES) && (ActiveEMList[i] != Handle); i++) ; + if (i == MAXEMHANDLES) return; + j = Start + Pages; + if ((Pages < 1) || (j > 4)) return; + + for (i = Start; i < j; i++) { + EMMap(Handle, NONE, i); + } +} /* End of UnmapEMM() */ + +/********************************************************************/ + +int /* EMM map for devices - saves EMM state */ +UseEMM(int Handle, int Start, int Pages) +{ + EMStateSave(Handle); + return(MapEMM(Handle, Start, Pages)); +} /* End of UseEMM() */ + +/********************************************************************/ + +void /* EMM unmap for devices - restores EMM state */ +SaveEMM(int Handle, int Start, int Pages) +{ + UnmapEMM(Handle, Start, Pages); + EMStateRestore(Handle); +} /* End of SaveEMM() */ + +/********************************************************************/ + +static int +EMPresent(void) +{ + int i, Segment; + char EMName[] = "EMMXXXX0"; + char *s, *t; + + _asm { /* can be replaced with getvect() */ + push es + mov ax,0x3567 /* get vector for int 67h */ + int 0x21 + mov ax,es + mov Segment,ax + pop es + } + t = MK_FP(Segment, 0x0A); /* point to driver name */ + s = EMName; + for (i = 0; (i < 8) && (*s++ == *t++); i++) ; /* strncmp equivalent */ + + if (i == 8) return(TRUE); + return(FALSE); +} /*End of EMPresent() */ + +/********************************************************************/ + +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); +} /* End of EMReady() */ + +/********************************************************************/ + +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 + } + return(EMSegment); /*lint !e530 */ + +//NotReady: + return(NOTREADY); +} /* End of GetEMMSeg() */ + +/********************************************************************/ + +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); +} /* End of GetEMHandle() */ + +/********************************************************************/ + +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); +} /* 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); +} /* End of FreeEMHandle() */ + +/********************************************************************/ + +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); +} /* End of GetNumPages() */ + +/********************************************************************/ + +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: + return(RtnCode); +} /* End of EMStateSave() */ + +/********************************************************************/ + +static void +EMStateRestore(int Handle) +{ + _asm { + mov ah,0x48 /* restore page map for Handle */ + mov dx,Handle + int 0x67 /* ignore error */ + } +} /* End of EMStateRestore() */ diff --git a/src/lib/exmm/memory.h b/src/lib/exmm/memory.h new file mode 100644 index 00000000..7571ff3f --- /dev/null +++ b/src/lib/exmm/memory.h @@ -0,0 +1,34 @@ +// Cut this out as memory.h + +/* File: Memory.h + * Module: All Modules + * Author(s): Chris Somers + * Date: August 5, 1993 + * Version: V.1.1 + + modified by Alex Russell to simplify. + */ + + +#ifndef _MEMORY_DEF +#define _MEMORY_DEF 1 + +#include "emmret.h" +#include "emmsize.h" + +#define CMM 0 +#define EMM 1 + +extern int OpenEMM(void); +extern void CloseEMM(void); +extern int EMMInstalled(void); +extern void far *EMMalloc(int *Handle, int Pages); +extern int EMMRealloc(int Handle, int Pages); +extern void EMMFree(int Handle); +extern int MapEMM(int Handle, int Start, int Pages); +extern void UnmapEMM(int Handle, int Start, int Pages); +extern int UseEMM(int Handle, int Start, int Pages); +extern void SaveEMM(int Handle, int Start, int Pages); +extern unsigned long EMMCoreLeft(void); + +#endif diff --git a/src/lib/exmm/x.bat b/src/lib/exmm/x.bat new file mode 100644 index 00000000..5e8a8bfa --- /dev/null +++ b/src/lib/exmm/x.bat @@ -0,0 +1 @@ +"wcp -mh emm.c" at diff --git a/src/lib/xmem/xmem.asm b/src/lib/exmm/xmem.asm similarity index 100% rename from src/lib/xmem/xmem.asm rename to src/lib/exmm/xmem.asm diff --git a/src/lib/exmm/xmem.c b/src/lib/exmm/xmem.c new file mode 100644 index 00000000..ff15d1ec --- /dev/null +++ b/src/lib/exmm/xmem.c @@ -0,0 +1,314 @@ + +/* + + Copyright 1994 Alec Russell, ALL rights reserved + Permission granted to use as you wish. + + Slightly higher level xms calls than xmem.asm + +*/ + +#include +#include +#include +#include + +#include + +xms_head_t xms_head={0}; // set handle to zero + + +/* ---------------------- alloc_xms() ----------------- February 19,1994 */ +short alloc_xms(unsigned short far *size) // size in 16k blocks +{ + return(XMS_alloc(0, size)); +} + +/* ---------------------- xms_to_mem() ---------------- February 19,1994 */ +short xms_to_mem(unsigned short handle, void far *p, unsigned long off, unsigned short n) +{ + unsigned short block, boff; + + block=off >> XMSBLOCKSHIFT; + boff=off - (block << XMSBLOCKSHIFT); + + return(XMStoMem(handle, block, boff, n, p)); +} + +/* ---------------------- mem_to_xms() ---------------- February 19,1994 */ +short mem_to_xms(unsigned short handle, void far *p, unsigned long off, unsigned short n) +{ + unsigned short block, boff; + + block=off >> XMSBLOCKSHIFT; + boff=off - (block << XMSBLOCKSHIFT); + + return(MemToXMS(handle, block, boff, n, p)); +} + +/* ---------------------- qalloc_xms() -------------------- March 8,1994 */ +xms_node_t *qalloc_xms(unsigned long size) +{ + xms_node_t *node=NULL; + xms_node_t *t1; + + if ( size <= xms_head.avail ) + { + // look for existing node + t1=xms_head.next; + while ( t1 ) + { + if ( t1->used == 0 && t1->size >= size ) + { + t1->off=0; + t1->used=1; + node=t1; + break; + } + else + t1=t1->next; + } + + if ( node == NULL ) // didn't find existing node + { + node=malloc(sizeof(xms_node_t)); + if ( node ) + { + node->off=0; + node->used=1; + node->size=size; + node->next=NULL; + node->start=xms_head.next_off; + xms_head.avail-=size; + xms_head.next_off+=size; + if ( xms_head.next == NULL ) + { + xms_head.next=node; + } + else + { + t1=xms_head.next; + while ( t1->next ) + t1=t1->next; + t1->next=node; + } + } + else + pr2("out of near mem in qalloc_xms"); + } + } + else + pr2("out of xms mem in qalloc size %lu avail %lu", size, xms_head.avail); + + return(node); +} + +/* ---------------------- qfree_xms() --------------------- March 8,1994 */ +void qfree_xms(xms_node_t *node) +{ + xms_node_t *t1; + + if ( xms_head.next ) + { + t1=xms_head.next; + while ( t1 != node && t1 ) + t1=t1->next; + + if ( t1 ) + { + t1->used=0; + } + else + pr2("ERROR didn't find node qfree"); + } + else + { + pr2("ATTEMPTED to qfree empty list"); + } +} + +/* ---------------------- xms_open() ---------------------- March 8,1994 */ +xms_node_t *xms_open(char *file) +{ + int i; + xms_node_t *node=NULL; + FILE *fp; + char *buffer; + unsigned long off; + + fp=fopen(file, "rb"); + if ( fp ) + { + node=qalloc_xms(filelength(fileno(fp))); + if ( node ) + { + buffer=malloc(4096); + if ( buffer ) + { + off=0l; + while ( (i=fread(buffer, 1, 4096, fp)) ) + { + mem_to_xms(xms_head.handle, (char far *)buffer, off+node->start, i); + off+=i; + } + + free(buffer); + } + else + pr2("out of mem in xms_open 1"); + } + + fclose(fp); + } + else + pr2("ERROR opening %s in xms_open", file); + + return(node); +} + +/* ---------------------- xms_read() ---------------------- March 8,1994 */ +short xms_read(void far *buffer, unsigned short n, xms_node_t *node) +{ + + if ( node->off >= node->size ) + return 0; + + if ( n+node->off > node->size ) + n=node->size - node->off; + + xms_to_mem(xms_head.handle, buffer, node->start+node->off, n); + node->off+=n; + + return(n); +} + +/* ---------------------- xms_write() ---------------------- March 8,1994 */ +short xms_write(void far *buffer, unsigned short n, xms_node_t *node) +{ + + if ( node->off >= node->size ) + return 0; + + if ( n+node->off > node->size ) + n=node->size - node->off; + + mem_to_xms(xms_head.handle, buffer, node->start+node->off, n); + node->off+=n; + + return(n); +} + + +/* ---------------------- xms_tell() ---------------------- March 8,1994 */ +long xms_tell(xms_node_t *node) +{ + return node->off; +} + +/* ---------------------- xms_seek() ---------------------- March 8,1994 */ +short xms_seek(xms_node_t *node, long off, short whence) +{ + short err=0; + + switch ( whence ) + { + case SEEK_SET: + if ( off < 0l || off > node->size ) + err=1; + else + node->off=off; + break; + + case SEEK_END: + if ( off > 0l || (node->size + off) < 0l ) + err=1; + else + node->off=node->size + off; + break; + + case SEEK_CUR: + if ( node->off + off < 0l || node->off + off > node->size ) + err=1; + else + node->off+=off; + break; + } + + return(err); +} + +/* ---------------------- xms_close() --------------------- March 8,1994 */ +void xms_close(xms_node_t *node) +{ + qfree_xms(node); +} + +/* ---------------------- init_xms() ---------------------- March 8,1994 */ +short init_xms(unsigned short min_blocks) +{ + unsigned short blocks; + + blocks=XMSblk_available(); + if ( blocks >= min_blocks ) + { + memset(&xms_head, 0, sizeof(xms_head_t)); + if ( (xms_head.handle=alloc_xms(&blocks)) ) + { + pr2("blocks minus by = %u", blocks); + min_blocks-=blocks; + xms_head.avail=xms_head.total=(unsigned long)min_blocks*XMSBLOCK; + blocks=min_blocks; + } + else + blocks=0; + } + else + blocks=0; + + return(blocks); +} + +/* ---------------------- deinit_xms() -------------------- March 8,1994 */ +void deinit_xms(void) +{ + xms_node_t *t1, *t2; + + if ( xms_head.handle ) + { + XMS_dealloc(xms_head.handle); + if ( xms_head.next ) + { + t1=xms_head.next; + t2=t1->next; + while ( t1 ) + { + free(t1); + t1=t2; + t2=t1->next; + } + } + + memset(&xms_head, 0, sizeof(xms_head_t)); + } +} +/* --------------------------- end of file ------------------------- */ + +/* + +Not sure how to use this? + +call init_xms(x) to allocate a big chunk of xms. +x is in 'blocks' of 16Kb. Pick X big enough to buffer all the files +you want to place in xms. + +call xms_open("filename); for each file to be buffered. This copies the file +int xms. + +then use xms_read(), xms_write(), and xms_seek() to read the file from +xms instead of disk. + +call deinit_xms() just before exit to clean up. + +You can also use the lower level calls directly. + +*/ diff --git a/src/lib/xmem/xmem.h b/src/lib/exmm/xmem.h similarity index 100% rename from src/lib/xmem/xmem.h rename to src/lib/exmm/xmem.h diff --git a/src/lib/xmem/xmem.txt b/src/lib/exmm/xmem.txt similarity index 100% rename from src/lib/xmem/xmem.txt rename to src/lib/exmm/xmem.txt diff --git a/src/lib/xmem/xmemc.c b/src/lib/exmm/xmemc.c similarity index 100% rename from src/lib/xmem/xmemc.c rename to src/lib/exmm/xmemc.c -- 2.39.5