#pragma warn -pro\r
#pragma warn -use\r
\r
-\r
/*\r
=============================================================================\r
\r
=============================================================================\r
*/\r
\r
-//#define LOCKBIT 0x80 // if set in attributes, block cannot be moved\r
-//#define PURGEBITS 3 // 0-3 level, 0= unpurgable, 3= purge first\r
-//#define PURGEMASK 0xfffc\r
-//#define BASEATTRIBUTES 0 // unlocked, non purgable\r
+#define LOCKBIT 0x80 // if set in attributes, block cannot be moved\r
+#define PURGEBITS 3 // 0-3 level, 0= unpurgable, 3= purge first\r
+#define PURGEMASK 0xfffc\r
+#define BASEATTRIBUTES 0 // unlocked, non purgable\r
\r
//#define MAXUMBS 10\r
\r
//#define GETNEWBLOCK {if(!(mmnew=mmfree))Quit("MM_GETNEWBLOCK: No free blocks!") ;mmfree=mmfree->next;}\r
//\r
\r
-//#define GETNEWBLOCK {if(!gvar->mm.mmfree)MML_ClearBlock(gvar);gvar->mm.mmnew=gvar->mm.mmfree;gvar->mm.mmfree=gvar->mm.mmfree->next;}\r
+#define GETNEWBLOCK {if(!gvar->mm.mmfree)MML_ClearBlock(gvar);gvar->mm.mmnew=gvar->mm.mmfree;gvar->mm.mmfree=gvar->mm.mmfree->next;}\r
\r
-//#define FREEBLOCK(x) {*x->useptr=NULL;x->next=gvar->mm.mmfree;gvar->mm.mmfree=x;}\r
+#define FREEBLOCK(x) {*x->useptr=NULL;x->next=gvar->mm.mmfree;gvar->mm.mmfree=x;}\r
\r
/*\r
=============================================================================\r
}\r
#endif\r
// printf("base=%u ", base); printf("size=%u\n", size);\r
- MML_UseSpace (base,size, gvar);\r
+ MML_UseSpace(base,size, gvar);\r
gvar->mmi.XMSmem += size*16;\r
gvar->mm.UMBbase[gvar->mm.numUMBs] = base;\r
gvar->mm.numUMBs++;\r
{\r
scan->blob=segm;\r
\r
- //MML_UseSpace (segstart, seglength, gvar);\r
+ //MML_UseSpace(segstart, seglength, gvar);\r
\r
printf("MML_UseSpace: Segment spans two blocks!\n");\r
//}\r
}\r
//++++todo: linked list of segment!\r
*/\r
-void MML_UseSpace (word segstart, word seglength, global_game_variables_t *gvar)\r
+void MML_UseSpace (unsigned segstart, unsigned seglength, global_game_variables_t *gvar)\r
{\r
mmblocktype far *scan,far *last;\r
- word oldend;\r
+ unsigned oldend;\r
sdword extra;\r
//word segm=1;\r
\r
//return;\r
}\r
#else\r
- Quit ("MML_UseSpace: Segment spans two blocks!");\r
+ Quit (gvar, "MML_UseSpace: Segment spans two blocks!");\r
#endif\r
\r
if (segstart == scan->start)\r
\r
while(scan)\r
{\r
- if(!(scan->attributes&LOCKBIT) && (scan->attributes&PURGEBITS))\r
+ if(!(scan->attributes&LOCKBIT) && (scan->attributes&PURGEBITS) )\r
{\r
- MM_FreePtr(scan->useptr, gvar);\r
+ MM_FreePtr (scan->useptr, gvar);\r
return;\r
}\r
scan = scan->next;\r
int i;\r
dword length;\r
void far *start;\r
- word segstart,seglength;//,endfree;\r
+ unsigned segstart,seglength;//,endfree;\r
\r
if(gvar->mm.mmstarted)\r
MM_Shutdown (gvar);\r
\r
+ //has to be 16\r
+ if(sizeof(mmblocktype)!=16)\r
+ Quit (gvar, "mmblocktype size is not 16");\r
+\r
gvar->mm.mmstarted = true;\r
gvar->mm.bombonerror = true;\r
-\r
//\r
// set up the linked list (everything in the free list;\r
//\r
{\r
MML_SetupEMS(gvar); // allocate space\r
//16_PM: EMS4! AND EMS 3.2 MASSIVE DATA HANDLMENT!\r
- MML_UseSpace (gvar->mm.EMSPageFrame,(MAPPAGES)*0x4000lu, gvar);\r
+ MML_UseSpace(gvar->mm.EMSPageFrame,(MAPPAGES)*0x4000lu, gvar);\r
//if(gvar->pm.emm.EMSVer<0x40)\r
MM_MapEMS(gvar); // map in used pages\r
//else\r
gvar->mm.mmnew->attributes = BASEATTRIBUTES;\r
//if(gvar->mm.mmnew->useptr==NULL){\r
#ifdef __DEBUG_MM__\r
- printf("MM_GetPtr\n");\r
if(dbg_debugmm>0){\r
+ printf("===============================================================================\n");\r
+ printf(" MM_GetPtr\n");\r
+ printf("===============================================================================\n");\r
//%04x\r
- printf(" baseptr=%Fp ", baseptr); printf("useptr=%Fp\n", gvar->mm.mmnew->useptr);\r
- printf(" *baseptr=%Fp ", *baseptr); printf("*useptr=%Fp\n", *(gvar->mm.mmnew->useptr));\r
- printf(" &baseptr=%Fp ", &baseptr); printf("&useptr=%Fp\n", &(gvar->mm.mmnew->useptr));\r
+// printf(" baseptr=%Fp ", baseptr); printf("useptr=%Fp\n", gvar->mm.mmnew->useptr);\r
+// //printf(" *baseptr=%Fp ", *baseptr); printf("*useptr=%Fp\n", *(gvar->mm.mmnew->useptr));\r
+// printf(" &baseptr=%Fp ", &baseptr); printf("&useptr=%Fp\n", &(gvar->mm.mmnew->useptr));\r
+\r
+ printf(" baseptr=%04x ", baseptr); printf("useptr=%04x\n", gvar->mm.mmnew->useptr);\r
+ //printf(" *baseptr=%04x ", *baseptr); printf("*useptr=%04x\n", *(gvar->mm.mmnew->useptr));\r
+ printf(" &baseptr=%04u ", &baseptr); printf("&useptr=%04u\n", &(gvar->mm.mmnew->useptr));\r
+\r
+ printf(" size is %lu\n", size);\r
}\r
- printf(" size is %lu\n", size);\r
#endif\r
- //Quit(gvar, "gvar->mm.mmnew->useptr==NULL"); }\r
+ //Quit (gvar, "gvar->mm.mmnew->useptr==NULL"); }\r
\r
//tryagain:\r
for (search = 0; search<3; search++)\r
//heapdump();\r
#endif\r
printf(OUT_OF_MEM_MSG,(size-gvar->mmi.nearheap));\r
- Quit(gvar, "for stability reasons the program will shut down! wwww\n");\r
+ Quit (gvar, "for stability reasons the program will shut down! wwww\n");\r
}\r
else\r
gvar->mm.mmerror = true;\r
if (baseptr == gvar->mm.mmrover->useptr) // removed the last allocated block\r
gvar->mm.mmrover = gvar->mm.mmhead;\r
\r
- while(scan->useptr != baseptr && scan)\r
+ while (scan->useptr != baseptr && scan)\r
{\r
last = scan;\r
scan = scan->next;\r
}\r
\r
- if(!scan)\r
+ if (!scan)\r
Quit (gvar, "MM_FreePtr: Block not found!");\r
\r
last->next = scan->next;\r
else if (gvar->mm.mmrover == start)\r
Quit (gvar, "MM_SetPurge: Block not found!");\r
\r
- } while(1);\r
+ } while (1);\r
\r
gvar->mm.mmrover->attributes &= ~PURGEBITS;\r
gvar->mm.mmrover->attributes |= purge;\r
playing += STARTADLIBSOUNDS;\r
break;\r
}\r
- MM_SetLock((memptr *)&audiosegs[playing],true);\r
+ MM_SetLock(MEMPTRCONV audiosegs[playing],true);\r
}\r
\r
\r
SD_StopSound();*/\r
+#ifdef __WATCOMC__\r
oldborder = gvar->video.bordercolor;\r
- gvar->video.bordercolor = modexPalOverscan(15);\r
+ gvar->video.bordercolor = VL_modexPalOverscan(gvar->video.palette, 4);\r
+#endif\r
\r
- if(beforesort)\r
+ if (beforesort)\r
beforesort();\r
\r
scan = gvar->mm.mmhead;\r
\r
last = NULL; // shut up compiler warning\r
\r
- while(scan)\r
+ while (scan)\r
{\r
- if(scan->attributes & LOCKBIT)\r
+ if (scan->attributes & LOCKBIT)\r
{\r
//\r
// block is locked, so try to pile later blocks right after it\r
}\r
else\r
{\r
- if(scan->attributes & PURGEBITS)\r
+ if (scan->attributes & PURGEBITS)\r
{\r
//\r
// throw out the purgable block\r
//\r
// push the non purgable block on top of the last moved block\r
//\r
- if(scan->start != start)\r
+ if (scan->start != start)\r
{\r
length = scan->length;\r
source = scan->start;\r
dest = start;\r
- while(length > 0xf00)\r
+ while (length > 0xf00)\r
{\r
movedata(source,0,dest,0,0xf00*16);\r
length -= 0xf00;\r
\r
gvar->mm.mmrover = gvar->mm.mmhead;\r
\r
- if(aftersort)\r
+ if (aftersort)\r
aftersort();\r
\r
VL_ColorBorder (oldborder, &gvar->video);\r
}\r
#endif\r
#ifdef MMSMSCANINFO\r
+ MM_ShowMemoryDetail (x, y, w, q, end, &scaninfo, gvar);\r
+#endif\r
+\r
+\r
+ if(gvar->video.VL_Started) IN_Ack(gvar);\r
+\r
+ gvar->video.BOFS = (byte __far *)temp;\r
+}\r
+\r
+#ifdef MMSMSCANINFO\r
+void MM_ShowMemoryDetail (unsigned x, unsigned y, unsigned w, unsigned q, sdword end, mmshowmemoryinfo_t *scaninfo, global_game_variables_t *gvar)\r
{\r
byte scratch1[4];\r
unsigned maxq = q;\r
struct mmblockstruct far *next;\r
} mmblocktype;*/\r
//modexprint(page, x, y, t, tlsw, color, bgcolor, vidsw, const byte *str);\r
-#define MMSMPRINTMEMINFO modexprint(&(gvar->video.page[0]), xpos, ypos, 1, 0, ccolor, 8, gvar->video.VL_Started, global_temp_status_text); ypos+=8;\r
- if(!gvar->video.VL_Started) clrscr(); else\r
+#define MMSMPRINTMEMINFO modexprint(&(gvar->video.page[0]), xpos, ypos, 1, 1, ccolor, 8, gvar->video.VL_Started, global_temp_status_text); ypos+=8;\r
+ if(gvar->video.VL_Started)\r
{\r
VL_ShowPage(&gvar->video.page[0], 1, 0);\r
modexClearRegion(&gvar->video.page[0], 0, 0, gvar->video.page[0].width, gvar->video.page[0].height, 8);\r
- }\r
+ }else clrscr();\r
sprintf(global_temp_status_text, "block #%04u", qq); MMSMPRINTMEMINFO\r
// sprintf(global_temp_status_text, "%Fp", scaninfo[qq].scan->useptr); MMSMPRINTMEMINFO\r
- sprintf(global_temp_status_text, "%04x", (unsigned)scaninfo[qq].scan->useptr); MMSMPRINTMEMINFO\r
+ sprintf(global_temp_status_text, "start: %04x", (unsigned)scaninfo[qq].scan->start); MMSMPRINTMEMINFO\r
+ sprintf(global_temp_status_text, "useptr: %04x", (unsigned)scaninfo[qq].scan->useptr); MMSMPRINTMEMINFO\r
sprintf(global_temp_status_text, "size: %05u", (unsigned)scaninfo[qq].scan->length); MMSMPRINTMEMINFO\r
if (scaninfo[qq].scan->next && scaninfo[qq].scan->next->start > end+1)\r
{\r
if(gvar->video.VL_Started)\r
{\r
//if (scan->next && scan->next->start > end+1) free\r
- xpos = 16;\r
- ypos = 16;//(gvar->video.page[0].sh-(32));//8*4\r
+ xpos = gvar->video.page[0].dx;\r
+ ypos = gvar->video.page[0].dy;//(gvar->video.page[0].sh-(32));//8*4\r
}\r
else\r
{\r
if(qq<maxq) qq++;\r
else qq = 0;\r
break;\r
+/* case sc_UpArrow:\r
+ if(qq>0) qq-=100;\r
+ else qq = maxq;\r
+ break;\r
+ case sc_DownArrow:\r
+ if(qq<maxq) qq+=100;\r
+ else qq = 0;\r
+ break;*/\r
case sc_Escape:\r
done = true;\r
break;\r
}\r
#endif\r
\r
- if(gvar->video.VL_Started) IN_Ack(gvar);\r
-\r
- gvar->video.BOFS = (byte __far *)temp;\r
-}\r
-\r
//==========================================================================\r
\r
/*\r