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