wolf3d

The original open source release of Wolfenstein 3D
Log | Files | Refs

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);