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