]> 4ch.mooo.com Git - 16.git/blob - src/lib/exmm/emm.c
aae59feca8f977015dbbca4a974375046684a9d5
[16.git] / src / lib / exmm / emm.c
1 // Cut this out as emm.c\r
2 \r
3 /*      File:       emm.c\r
4  *      Module:     All Modules\r
5  *      Author(s):  Chris Somers\r
6  *      Date:       December 1, 1992\r
7  *      Version:    V.1.1w\r
8 \r
9         minor mods by Alex Russell to simplify\r
10 \r
11         Must use memory model with FAR code
12
13                 Open Watcom patch by sparky4~\r
14 \r
15  */\r
16 \r
17 \r
18 #include <stdio.h>\r
19 #include <stdlib.h>\r
20 #include <mem.h>\r
21 \r
22 #include "memory.h"\r
23 \r
24 void TransformData(char *pEmmData, unsigned int len)\r
25 {\r
26    while ( len )\r
27       {\r
28       (*pEmmData)++;\r
29       pEmmData++;\r
30 \r
31       len--;\r
32       }\r
33 }\r
34 \r
35 void main(void)\r
36 {\r
37    char    *pEmmData;\r
38    int     hEData;\r
39 \r
40    if ( OpenEMM() != SUCCESS )\r
41       {     // make sure we got EMM\r
42       printf("EMM unavailable.\n");\r
43       exit(1);\r
44       }\r
45    else\r
46       printf("Emm %x available\n", EMVer());
47       printf("EMS pages available are %lu\n", EMMCoreLeft());\r
48 \r
49    pEmmData = (char *)EMMalloc(&hEData, 6);  // get 6 * 16K bytes - 96K\r
50    if ( pEmmData == NULL )\r
51       {\r
52       printf("Not enough EMM or out of handles.\n");\r
53       exit(2);\r
54       }\r
55    else\r
56       printf("emm alloced OK\n");\r
57 \r
58 \r
59    printf("Map 1st 4 pages\n");\r
60    MapEMM(hEData, 0, 4);   // load 1st 4 pages into page frame: 0-3\r
61 \r
62    memset(pEmmData, 0x0e, 64000u);\r
63    UnmapEMM(hEData, 0, 4);          // not absolutely necessary\r
64    \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
68 \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
77 \r
78    printf("Close emm\n");\r
79    EMMFree(hEData);     // finished with the file data\r
80    CloseEMM();\r
81 }\r