X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=16%2Fwf3d8086%2Fid_pm.h;fp=16%2Fwf3d8086%2Fid_pm.h;h=b3e74914de98486de7504015d829bb0af43686f4;hb=d564176a4080e188751df2ae2363f272c62bf452;hp=0000000000000000000000000000000000000000;hpb=e3dc8b5d9b956b94d22e8e1d8dd13ab4dd912f3a;p=16.git diff --git a/16/wf3d8086/id_pm.h b/16/wf3d8086/id_pm.h new file mode 100755 index 00000000..b3e74914 --- /dev/null +++ b/16/wf3d8086/id_pm.h @@ -0,0 +1,83 @@ +// +// ID_PM.H +// Header file for Id Engine's Page Manager +// + +// NOTE! PMPageSize must be an even divisor of EMSPageSize, and >= 1024 +#define EMSPageSize 16384 +#define EMSPageSizeSeg (EMSPageSize >> 4) +#define EMSPageSizeKB (EMSPageSize >> 10) +#define EMSFrameCount 4 +#define PMPageSize 4096 +#define PMPageSizeSeg (PMPageSize >> 4) +#define PMPageSizeKB (PMPageSize >> 10) +#define PMEMSSubPage (EMSPageSize / PMPageSize) + +#define PMMinMainMem 10 // Min acceptable # of pages from main +#define PMMaxMainMem 100 // Max number of pages in main memory + +#define PMThrashThreshold 1 // Number of page thrashes before panic mode +#define PMUnThrashThreshold 5 // Number of non-thrashing frames before leaving panic mode + +typedef enum + { + pml_Unlocked, + pml_Locked + } PMLockType; + +typedef enum + { + pmba_Unused = 0, + pmba_Used = 1, + pmba_Allocated = 2 + } PMBlockAttr; + +typedef struct + { + longword offset; // Offset of chunk into file + word length; // Length of the chunk + + int xmsPage; // If in XMS, (xmsPage * PMPageSize) gives offset into XMS handle + + PMLockType locked; // If set, this page can't be purged + int emsPage; // If in EMS, logical page/offset into page + int mainPage; // If in Main, index into handle array + + longword lastHit; // Last frame number of hit + } PageListStruct; + +typedef struct + { + int baseEMSPage; // Base EMS page for this phys frame + longword lastHit; // Last frame number of hit + } EMSListStruct; + +extern boolean XMSPresent,EMSPresent; +extern word XMSPagesAvail,EMSPagesAvail; + +extern word ChunksInFile, + PMSpriteStart,PMSoundStart; +extern PageListStruct far *PMPages; + +#define PM_GetSoundPage(v) PM_GetPage(PMSoundStart + (v)) +#define PM_GetSpritePage(v) PM_GetPage(PMSpriteStart + (v)) + +#define PM_LockMainMem() PM_SetMainMemPurge(0) +#define PM_UnlockMainMem() PM_SetMainMemPurge(3) + + +extern char PageFileName[13]; + + +extern void PM_Startup(void), + PM_Shutdown(void), + PM_Reset(void), + PM_Preload(boolean (*update)(word current,word total)), + PM_NextFrame(void), + PM_SetPageLock(int pagenum,PMLockType lock), + PM_SetMainPurge(int level), + PM_CheckMainMem(void); +extern memptr PM_GetPageAddress(int pagenum), + PM_GetPage(int pagenum); // Use this one to cache page + +void PM_SetMainMemPurge(int level);