} pan_t;\r
\r
//video\r
-#define NUMCHUNKS 3016 //keen\r
+#define NUMCHUNKS 416 //keen\r
\r
typedef struct\r
{\r
//0000word startclk; float clk, tickclk; //timer\r
} video_t;\r
\r
+//from 16_mm\r
+//==========================================================================\r
+\r
+#define MAXBLOCKS 1024\r
+#define MAXUMBS 12\r
+\r
typedef struct mmblockstruct\r
{\r
word start,length;\r
struct mmblockstruct far *next;\r
} mmblocktype;\r
\r
-//from 16_mm\r
-//==========================================================================\r
-\r
-#define MAXBLOCKS 1024\r
-#define MAXUMBS 12\r
-\r
typedef struct\r
{\r
dword nearheap,farheap,EMSmem,XMSmem,mainmem;\r
+// boolean PMStarted, MainPresent, EMSPresent, XMSPresent;\r
} mminfotype;\r
\r
typedef struct\r
#ifdef __WATCOMC__\r
void __near *nearheap;\r
#endif\r
- //byte EMS_status;\r
- unsigned totalEMSpages,freeEMSpages,EMSpageframe,EMSpagesmapped,EMShandle;\r
- unsigned int EMSVer;\r
+ unsigned int EMSVer;\r
word numUMBs,UMBbase[MAXUMBS];\r
+ word totalEMSpages, freeEMSpages, EMSpagesmapped, EMSHandle, EMSPageFrame;\r
//dword numUMBs,UMBbase[MAXUMBS];\r
//huge mmblocktype huge mmblocks[MAXBLOCKS],huge *mmhead,huge *mmfree,huge *mmrover,huge *mmnew;\r
mmblocktype far mmblocks[MAXBLOCKS],far *mmhead,far *mmfree,far *mmrover,far *mmnew;\r
\r
//==========================================================================\r
\r
+\r
+//from 16_pm\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
+ dword 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
+ dword lastHit; // Last frame number of hit\r
+ } PageListStruct;\r
+\r
+typedef struct\r
+ {\r
+ int baseEMSPage; // Base EMS page for this phys frame\r
+ dword lastHit; // Last frame number of hit\r
+ } EMSListStruct;\r
+\r
+// Main Mem specific variables\r
+typedef struct\r
+{\r
+ boolean MainPresent;\r
+ memptr MainMemPages[PMMaxMainMem];\r
+ PMBlockAttr MainMemUsed[PMMaxMainMem];\r
+ int MainPagesAvail;\r
+} pm_mmi_t;\r
+\r
+// EMS specific variables\r
+typedef struct\r
+{\r
+ boolean EMSPresent;\r
+ unsigned int EMSVer;\r
+ word EMSAvail,EMSPagesAvail,EMSHandle,\r
+ EMSPageFrame,EMSPhysicalPage;\r
+ word totalEMSpages, freeEMSpages, EMSpagesmapped;\r
+ EMSListStruct EMSList[EMSFrameCount];\r
+} pm_emmi_t;\r
+\r
+// XMS specific variables\r
+typedef struct\r
+{\r
+ boolean XMSPresent;\r
+ word XMSAvail,XMSPagesAvail,XMSHandle;//,XMSVer;\r
+ dword XMSDriver;\r
+ int XMSProtectPage;// = -1;\r
+} pm_xmmi_t;\r
+\r
+// File specific variables\r
+typedef struct\r
+{\r
+ char PageFileName[13];// = {"VSWAP."};\r
+ int PageFile;// = -1;\r
+ word ChunksInFile;\r
+ word PMSpriteStart,PMSoundStart;\r
+} pm_fi_t;\r
+\r
+// General usage variables\r
+typedef struct\r
+{\r
+ boolean PMStarted,\r
+ PMPanicMode,\r
+ PMThrashing;\r
+ word XMSPagesUsed,\r
+ EMSPagesUsed,\r
+ MainPagesUsed,\r
+ PMNumBlocks;\r
+ long PMFrameCount;\r
+ PageListStruct far *PMPages;\r
+ __SEGA *PMSegPages;\r
+ pm_mmi_t mm;\r
+ pm_emmi_t emm;\r
+ pm_xmmi_t xmm;\r
+ pm_fi_t fi;\r
+} pm_t;\r
+\r
+//==========================================================================\r
+\r
//from 16_ca\r
//==========================================================================\r
\r
#define NUMMAPS 4//39\r
#define MAPPLANES 3\r
\r
+typedef struct\r
+{\r
+ word bit0,bit1; // 0-255 is a character, > is a pointer to a node\r
+} huffnode;\r
+\r
typedef struct\r
{\r
int mapon, mapnum;\r
- __segment *mapsegs[4];\r
- __segment *mapheaderseg[NUMMAPS];\r
- __segment *tinf;\r
-} mapinfo_t;\r
+ __SEGA *mapsegs[4];\r
+ __SEGA *mapheaderseg[NUMMAPS];\r
+ __SEGA *tinf;\r
+} ca_mapinfo_t;\r
\r
typedef struct\r
{\r
int maphandle[4]; // handle to MAPTEMP / GAMEMAPS\r
-} handle_t;\r
+} ca_handle_t;\r
\r
typedef struct\r
{\r
byte ca_levelbit,ca_levelnum;\r
- handle_t file; //files to open\r
- mapinfo_t map;\r
- //_seg *grsegs[NUMCHUNKS];\r
- //byte far grneeded[NUMCHUNKS];\r
- //huffnode huffnode;\r
+ ca_handle_t file; //files to open\r
+ ca_mapinfo_t camap;\r
+ __SEGA *grsegs[NUMCHUNKS];\r
+ byte far grneeded[NUMCHUNKS];\r
+ huffnode huffnode;\r
} ca_t;\r
\r
//==========================================================================\r
{\r
video_t video; // video settings variable\r
ca_t ca; // ca stuff\r
+ pm_t pm; // pm stuff\r
byte *pee; // message for fps\r
loghandle_t handle; //handles for file logging\r
kurokku_t kurokku; //clock struct\r