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