]> 4ch.mooo.com Git - 16.git/blob - src/lib/16_pm.h
pm mm and ca i am working on pm started wwww
[16.git] / src / lib / 16_pm.h
1 //\r
2 //      ID_PM.H\r
3 //      Header file for Id Engine's Page Manager\r
4 //\r
5 \r
6 #include "src/lib/16_head.h"\r
7 #include "src/lib/16_hc.h"\r
8 #include "src/lib/16_mm.h"\r
9 \r
10 /*//    NOTE! PMPageSize must be an even divisor of EMSPageSize, and >= 1024\r
11 #define EMSPageSize             16384\r
12 #define EMSPageSizeSeg  (EMSPageSize >> 4)\r
13 #define EMSPageSizeKB   (EMSPageSize >> 10)\r
14 #define EMSFrameCount   4\r
15 #define PMPageSize              4096\r
16 #define PMPageSizeSeg   (PMPageSize >> 4)\r
17 #define PMPageSizeKB    (PMPageSize >> 10)\r
18 #define PMEMSSubPage    (EMSPageSize / PMPageSize)\r
19 \r
20 #define PMMinMainMem    10                      // Min acceptable # of pages from main\r
21 #define PMMaxMainMem    100                     // Max number of pages in main memory\r
22 \r
23 #define PMThrashThreshold       1       // Number of page thrashes before panic mode\r
24 #define PMUnThrashThreshold     5       // Number of non-thrashing frames before leaving panic mode\r
25 \r
26 typedef enum\r
27                 {\r
28                         pml_Unlocked,\r
29                         pml_Locked\r
30                 } PMLockType;\r
31 \r
32 typedef enum\r
33                 {\r
34                         pmba_Unused = 0,\r
35                         pmba_Used = 1,\r
36                         pmba_Allocated = 2\r
37                 } PMBlockAttr;\r
38 \r
39 typedef struct\r
40                 {\r
41                         dword   offset;         // Offset of chunk into file\r
42                         word            length;         // Length of the chunk\r
43 \r
44                         int                     xmsPage;        // If in XMS, (xmsPage * PMPageSize) gives offset into XMS handle\r
45 \r
46                         PMLockType      locked;         // If set, this page can't be purged\r
47                         int                     emsPage;        // If in EMS, logical page/offset into page\r
48                         int                     mainPage;       // If in Main, index into handle array\r
49 \r
50                         dword   lastHit;        // Last frame number of hit\r
51                 } PageListStruct;\r
52 \r
53 typedef struct\r
54                 {\r
55                         int                     baseEMSPage;    // Base EMS page for this phys frame\r
56                         dword   lastHit;                // Last frame number of hit\r
57                 } EMSListStruct;\r
58 \r
59 extern  boolean                 XMSPresent,EMSPresent;\r
60 extern  word                    XMSPagesAvail,EMSPagesAvail;\r
61 \r
62 extern  word                    ChunksInFile,\r
63                                                 PMSpriteStart,PMSoundStart;\r
64 extern  PageListStruct  far *PMPages;*///moved to src/lib/typdefst.h\r
65 \r
66 #define PM_GetSoundPage(v)      PM_GetPage(PMSoundStart + (v))\r
67 #define PM_GetSpritePage(v)     PM_GetPage(PMSpriteStart + (v))\r
68 \r
69 #define PM_LockMainMem()        PM_SetMainMemPurge(0)\r
70 #define PM_UnlockMainMem()      PM_SetMainMemPurge(3)\r
71 \r
72 \r
73 extern  char    PageFileName[13];\r
74 \r
75 \r
76 extern  void    PM_Startup(void),\r
77                                 PM_Shutdown(void),\r
78                                 PM_Reset(void),\r
79                                 PM_Preload(boolean (*update)(word current,word total)),\r
80                                 PM_NextFrame(void),\r
81                                 PM_SetPageLock(int pagenum,PMLockType lock),\r
82                                 PM_SetMainPurge(int level),\r
83                                 PM_CheckMainMem(void);\r
84 extern  memptr  PM_GetPageAddress(int pagenum),\r
85                                 PM_GetPage(int pagenum);                // Use this one to cache page\r
86 \r
87 void PM_SetMainMemPurge(int level);\r