From: sparky4 Date: Fri, 15 May 2015 23:07:48 +0000 (-0500) Subject: EMS in the works ^^ X-Git-Url: http://4ch.mooo.com/gitweb/?a=commitdiff_plain;h=c00274b45c7a7ea7cc9c139f46ef97e1a02c320e;p=16.git EMS in the works ^^ modified: src/lib/exmm/EMM.EXE modified: src/lib/exmm/emm.c modified: src/lib/exmm/memory.c modified: src/lib/exmm/memory.h --- diff --git a/src/lib/exmm/EMM.EXE b/src/lib/exmm/EMM.EXE index 79b6f46b..139f1b03 100644 Binary files a/src/lib/exmm/EMM.EXE and b/src/lib/exmm/EMM.EXE differ diff --git a/src/lib/exmm/emm.c b/src/lib/exmm/emm.c index aae59fec..e3dcaa2a 100644 --- a/src/lib/exmm/emm.c +++ b/src/lib/exmm/emm.c @@ -32,50 +32,72 @@ void TransformData(char *pEmmData, unsigned int len) } } -void main(void) +void main(int argc, char *argv[]) { - char *pEmmData; - int hEData; - - if ( OpenEMM() != SUCCESS ) - { // make sure we got EMM - printf("EMM unavailable.\n"); - exit(1); - } - else - printf("Emm %x available\n", EMVer()); - printf("EMS pages available are %lu\n", EMMCoreLeft()); - - 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); + byte *pEmmData; + int hEData; + + if(OpenEMM() != SUCCESS) + { // make sure we got EMM + printf("EMM unavailable.\n"); + exit(1); + } + else + { + printf("Emm %x available\n", EMVer()); + printf("EMS pages available are %lu\n", EMMCoreLeft()); + //printf("EMM Hardware Information %lu\n", EMInfo()); + } + + printf("b4 EMS *pEmmData=%x\n", *pEmmData); + //printf("b4 EMS *pEmmData=%s\n", *pEmmData); + + pEmmData = (byte *)EMMalloc(&hEData, EMMCoreLeft(/*6*/)); // get 6 * 16K bytes - 96K + if(pEmmData == NULL/* || pEmmData0 == NULL*/) + { + printf("Not enough EMM or out of handles.\n"); + exit(2); + } + else + printf("EMM allocate OK\n"); + + printf("EMS pages available are %lu\n", EMMCoreLeft()); + + printf("Map 1st 4 pages\n"); + MapEMM(hEData, 0, EMMCoreLeft(/*4*/)-2); // load 1st 4 pages into page frame: 0-3 + //memset(pEmmData, 0x0e, 64000u); + memset(pEmmData, atoi(argv[1]), 64000u); +//---- UnmapEMM(hEData, 0, 4); // not absolutely necessary + printf("*pEmmData=%c\n", *pEmmData); + + printf("Map next 2 pages\n"); + MapEMM(hEData, EMMCoreLeft(/*4*/)-2, EMMCoreLeft(/*2*/)); // map last 2 pages: 4-5 + memset(pEmmData, 0x0e, 32768u); +// memset(pEmmData, atoi(argv[0]), 32768u); + printf("*pEmmData=%c\n", *pEmmData); +// printf("*pEmmData++=%c\n", *(pEmmData++)); + + /*MapEMM(hEData0, 0, 1); + memset(pEmmData0, (short)4, sizeof(short)); + printf("*pEmmData0=%d\n", *pEmmData0);*/ - MapEMM(hEData, 0, 4); + /*MapEMM(hEData, 0, 4); // do some stuff with the first 64K of file data. printf("Transform data\n"); - TransformData(pEmmData, 64000UL); + TransformData(pEmmData, 64000UL); + printf("*pEmmData=%lu\n", *pEmmData); 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(); + TransformData(pEmmData, 32768UL); + printf("*pEmmData=%lu\n", *pEmmData);*/ + + UnmapEMM(hEData, 0, EMMCoreLeft(/*4*/)); // should unmap before freeing + //UnmapEMM(hEData0, 0, 1); // should unmap before freeing + //printf("after EMS *pEmmData=%c\n", *pEmmData); + + printf("Close emm\n"); + EMMFree(hEData); // finished with the file data + CloseEMM(); + printf("after EMS *pEmmData=%x\n", *pEmmData); + printf("EMS pages available are %lu\n", EMMCoreLeft()); } diff --git a/src/lib/exmm/memory.c b/src/lib/exmm/memory.c index c73c7657..1f1dadbd 100644 --- a/src/lib/exmm/memory.c +++ b/src/lib/exmm/memory.c @@ -42,6 +42,21 @@ 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 @@ -57,7 +72,8 @@ EMVer(void) return(EMSver); } -/********************************************************************/ +/********************************************************************/ + int OpenEMM(void) { @@ -112,7 +128,7 @@ EMMCoreLeft(void) End: } if(!interr) - RtnVal = ((unsigned long)Pages); /* Pages * 16K rtns bytes*/ + RtnVal = ((unsigned long)Pages); /* Pages * 16K rtns bytes*/ //<< 14); return(RtnVal); } /* End of EMMCoreLeft() */ @@ -129,7 +145,7 @@ EMMalloc(int *Handle, int Pages) *Handle = NOTREADY; return(NULL); } - if ((Pages < 1) || (Pages > EMMCoreLeft())) { + if ((Pages < 1) || (Pages > EMMCoreLeft(/*1020*/))) { *Handle = VALUE_OUTF_RANGE; return (NULL); } @@ -197,7 +213,7 @@ MapEMM(int Handle, int Start, int Pages) 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)) { + if ((GetNumPages(Handle) < Pages) || (Pages < 1) || (Pages > EMMCoreLeft(/*4*/))) { return (VALUE_OUTF_RANGE); } for (i = Start; i < Start + Pages; i++) { @@ -217,7 +233,7 @@ UnmapEMM(int Handle, int Start, int Pages) for (i = 0; (i < MAXEMHANDLES) && (ActiveEMList[i] != Handle); i++) ; if (i == MAXEMHANDLES) return; j = Start + Pages; - if ((Pages < 1) || (j > 4)) return; + if ((Pages < 1) || (j > EMMCoreLeft(/*4*/))) return; for (i = Start; i < j; i++) { EMMap(Handle, NONE, i); diff --git a/src/lib/exmm/memory.h b/src/lib/exmm/memory.h index f6b49b1a..6d0ff1dc 100644 --- a/src/lib/exmm/memory.h +++ b/src/lib/exmm/memory.h @@ -16,12 +16,14 @@ #define _MEMORY_DEF 1 #include "emmret.h" -#include "emmsize.h" +#include "emmsize.h" +#include "../types.h" #define CMM 0 #define EMM 1 extern int EMVer(void); +extern unsigned long EMInfo(void); extern int OpenEMM(void); extern void CloseEMM(void); extern int EMMInstalled(void);