1 // Cut this out as emm.c
\r
4 * Module: All Modules
\r
5 * Author(s): Chris Somers
\r
6 * Date: December 1, 1992
\r
9 minor mods by Alex Russell to simplify
\r
11 Must use memory model with FAR code
13 Open Watcom patch by sparky4~
\r
24 void TransformData(char *pEmmData, unsigned int len)
\r
40 if ( OpenEMM() != SUCCESS )
\r
41 { // make sure we got EMM
\r
42 printf("EMM unavailable.\n");
\r
46 printf("Emm %x available\n", EMVer());
47 printf("EMS pages available are %lu\n", EMMCoreLeft());
\r
49 pEmmData = (char *)EMMalloc(&hEData, 6); // get 6 * 16K bytes - 96K
\r
50 if ( pEmmData == NULL )
\r
52 printf("Not enough EMM or out of handles.\n");
\r
56 printf("emm alloced OK\n");
\r
59 printf("Map 1st 4 pages\n");
\r
60 MapEMM(hEData, 0, 4); // load 1st 4 pages into page frame: 0-3
\r
62 memset(pEmmData, 0x0e, 64000u);
\r
63 UnmapEMM(hEData, 0, 4); // not absolutely necessary
\r
65 printf("Map next 2 pages\n");
\r
66 MapEMM(hEData, 4, 2); // map last 2 pages: 4-5
\r
67 memset(pEmmData, 0x0e, 32768u);
\r
69 MapEMM(hEData, 0, 4);
\r
70 // do some stuff with the first 64K of file data.
\r
71 printf("Transform data\n");
\r
72 TransformData(pEmmData, 64000UL);
\r
73 MapEMM(hEData, 4, 2); // only unmaps 1st two pages of prior 64k mapping
\r
74 // do stuff with remaining 32K of data
\r
75 TransformData(pEmmData, 32768UL);
\r
76 UnmapEMM(hEData, 0, 4); // should unmap before freeing
\r
78 printf("Close emm\n");
\r
79 EMMFree(hEData); // finished with the file data
\r