RELIES ON
---------
-Quit (char *error) function
+Quit (global_game_variables_t *gvar, char *error) function
WORK TO DO
*/
#include "src/lib/16_mm.h"
#include "src/lib/16_ca.h"
+#include <malloc.h>
#pragma hdrstop
#pragma warn -pro
=============================================================================
*/
-
+#ifndef __16_PM__
static char *ParmStringsexmm[] = {"noems","noxms",""};
-
+#endif
/*
======================
=
boolean MML_CheckForEMS(void)
{
- boolean emmcfems;
+ boolean emmcfems=0;
static char emmname[] = "EMMXXXX0"; //fix by andrius4669
__asm {
mov dx,OFFSET emmname //fix by andrius4669
}
#endif
if(errorflag==true)
- Quit("MML_ShutdownEMS: Error freeing EMS!\n"); //++++ add something
+ Quit (gvar, "MML_ShutdownEMS: Error freeing EMS!\n"); //++++ add something
}
/*
boolean MML_CheckForXMS(void)
{
+ //numUMBs = 0;
boolean errorflag=false;
__asm {
/*void MML_UseSpace(word segstart, dword seglength, global_game_variables_t *gvar)
{
- //huge mmblocktype huge *scan,huge *last;
+ mmblocktype far *scan,far *last;
word segm=1;
word oldend;
dword segmlen;
void MML_ClearBlock(global_game_variables_t *gvar)
{
- //huge mmblocktype huge *scan,huge *last;
- mmblocktype far *scan,far *last;
+ mmblocktype far *scan;//,far *last;
scan = gvar->mm.mmhead->next;
int i;
//dword length,seglength;
dword length; word seglength;
- //huge void huge *start;
void far *start;
word segstart;//,endfree;
- //memptr *peeonself;
if(gvar->mm.mmstarted)
MM_Shutdown(gvar);
gvar->mm.mmhead = NULL;
gvar->mm.mmfree = &(gvar->mm.mmblocks[0]);
for(i=0;i<MAXBLOCKS-1;i++)
- {
gvar->mm.mmblocks[i].next = &(gvar->mm.mmblocks[i+1]);
- }
gvar->mm.mmblocks[i].next = NULL;
//
gvar->mm.mmnew->length = 0xffff;
gvar->mm.mmnew->attributes = LOCKBIT;
gvar->mm.mmnew->next = NULL;
- //gvar->mm.mmnew->useptr = peeonself;
gvar->mm.mmrover = gvar->mm.mmhead;
- //printf(" %x\n", peeonself);
- //printf(" %x\n", *peeonself);
//
// get all available near conventional memory segments
//
#ifdef __WATCOMC__
_nheapgrow();
- length=(dword)_memavl();//(dword)GetFreeSize();
- //huge start = (void huge *)(gvar->mm.nearheap = _nmalloc(length));
- start = (void far *)(gvar->mm.nearheap = _nmalloc(length));
+#endif
+
+ length=(word)_memavl();//(word)coreleft();//(dword)GetFreeSize();
+
+#ifdef __WATCOMC__
+ start = (void __far *)(gvar->mm.nearheap = _nmalloc(length));
#endif
#ifdef __BORLANDC__
- length=coreleft();
- //huge start = (void huge *)(gvar->mm.nearheap = malloc(length));
start = (void far *)(gvar->mm.nearheap = malloc(length));
#endif
length -= 16-(FP_OFF(start)&15);
segstart = FP_SEG(start)+(FP_OFF(start)+15)/16;
MML_UseSpace(segstart,seglength, gvar);
gvar->mmi.nearheap = length;
- //printf("start=%Fp segstart=%x seglen=%lu len=%lu\n", start, segstart, seglength, length);
+ //0000printf("near: start=%Fp segstart=%x seglen=%lu len=%lu\n", start, segstart, (dword)seglength, length);
//
// get all available far conventional memory segments
length=_FCORELEFT;//_fcoreleft();//(dword)GetFarFreeSize();//0xffffUL*4UL;
#endif
#ifdef __BORLANDC__
- printf("farcoreleft() %lu\n", farcoreleft());
- printf("(farcoreleft()+32)-_FCORELEFT %d\n", (sword)((farcoreleft()+32)-_FCORELEFT));
+//0000 printf("farcoreleft() %lu\n", farcoreleft());
+//0000 printf("(farcoreleft()+32)-_FCORELEFT %d\n", (sword)((farcoreleft()+32)-_FCORELEFT));
length=farcoreleft();//_fcoreleft();//(dword)GetFarFreeSize();//0xffffUL*4UL;
#endif
start = gvar->mm.farheap = _fmalloc(length);
segstart = FP_SEG(start)+(FP_OFF(start)+15)/16;
MML_UseSpace(segstart,seglength, gvar);
gvar->mmi.farheap = length;
- //printf("start=%Fp segstart=%x seglen=%lu len=%lu\n", start, segstart, seglength, length);
+ //0000printf("far: start=%Fp segstart=%x seglen=%lu len=%lu\n", start, segstart, (dword)seglength, length);
gvar->mmi.mainmem = gvar->mmi.nearheap + gvar->mmi.farheap;
-#ifndef __16_PM__
+#if !defined(__16_PM__)// && defined(__WATCOMC__)
if(!dbg_debugpm) {
//
// detect EMS and allocate up to 64K at page frame
//
gvar->mmi.EMSmem = 0;
//goto emsskip; //0000
- for(i = 1;i <
-#ifdef __WATCOMC__
- __argc
-#endif
-#ifdef __BORLANDC__
- _argc
-#endif
- ;i++)
+ for(i = 1;i < _argc;i++)
{
- if(US_CheckParm(
-#ifdef __WATCOMC__
- __argv[i]
-#endif
-#ifdef __BORLANDC__
- _argv[i]
-#endif
- ,ParmStringsexmm) == 0)
+ if(US_CheckParm(_argv[i],ParmStringsexmm) == 0)
goto emsskip; // param NOEMS
}
if(MML_CheckForEMS())
emsskip:
gvar->mmi.XMSmem = 0;
goto xmsskip;//0000
- for(i = 1;i <
-#ifdef __WATCOMC__
- __argc
-#endif
-#ifdef __BORLANDC__
- _argc
-#endif
- ;i++)
+ for(i = 1;i < _argc;i++)
{
- if(US_CheckParm(
-#ifdef __WATCOMC__
- __argv[i]
-#endif
-#ifdef __BORLANDC__
- _argv[i]
-#endif
- ,ParmStringsexmm) == 0)
+ if(US_CheckParm( _argv[i],ParmStringsexmm) == 0)
goto xmsskip; // param NOXMS
}
if(MML_CheckForXMS())
}
}
+xmsskip:
#endif
//
// allocate the misc buffer
//
-xmsskip:
gvar->mm.mmrover = gvar->mm.mmhead; // start looking for space after low block
MM_GetPtr(&(gvar->mm.bufferseg),BUFFERSIZE, gvar);
#ifdef __BORLANDC__
free(gvar->mm.nearheap);// printf(" near freed\n");
#endif
+#ifndef __16_PM__
#ifdef __DEBUG__
if(!dbg_debugpm) {
#endif
#ifdef __DEBUG__
}
#endif
+#endif
}
//==========================================================================
void MM_GetPtr (memptr *baseptr, dword size, global_game_variables_t *gvar)
{
- //huge mmblocktype huge *scan,huge *lastscan,huge *endscan,huge *purge,huge *next;
mmblocktype far *scan,far *lastscan,far *endscan,far *purge,far *next;
int search;
unsigned needed,startseg;
printf(" *baseptr=%Fp ", *baseptr); printf("*useptr=%Fp\n", *(gvar->mm.mmnew->useptr));
printf(" &baseptr=%Fp ", &baseptr); printf("&useptr=%Fp\n", &(gvar->mm.mmnew->useptr));
#endif
- //exit(-5); }
+ //Quit(gvar, "gvar->mm.mmnew->useptr==NULL"); }
gvar->mm.mmnew->attributes = BASEATTRIBUTES;
//tryagain:
//heapdump();
#endif
printf(OUT_OF_MEM_MSG,(size-gvar->mmi.nearheap));
- printf("for stability reasons the program will shut down! wwww\n");
- MM_Shutdown(gvar);
- exit(-1);
+ Quit(gvar, "for stability reasons the program will shut down! wwww\n");
}
else
gvar->mm.mmerror = true;
void MM_FreePtr(memptr *baseptr, global_game_variables_t *gvar)
{
- //huge mmblocktype huge *scan,huge *last;
mmblocktype far *scan,far *last;
last = gvar->mm.mmhead;
void MM_SetPurge(memptr *baseptr, int purge, global_game_variables_t *gvar)
{
- //huge mmblocktype huge *start;
mmblocktype far *start;
start = gvar->mm.mmrover;
gvar->mm.mmrover = gvar->mm.mmhead;
else if(gvar->mm.mmrover == start)
{
- Quit("MM_SetPurge: Block not found!");
+ Quit (gvar, "MM_SetPurge: Block not found!");
//return;
}
void MM_SetLock(memptr *baseptr, boolean locked, global_game_variables_t *gvar)
{
- //huge mmblocktype huge *start;
mmblocktype far *start;
start = gvar->mm.mmrover;
gvar->mm.mmrover = gvar->mm.mmhead;
else if(gvar->mm.mmrover == start)
{
- Quit("MM_SetLock: Block not found!");
+ Quit (gvar, "MM_SetLock: Block not found!");
//return;
}
void MM_SortMem(global_game_variables_t *gvar)
{
- //huge mmblocktype huge *scan,huge *last,huge *next;
mmblocktype far *scan,far *last,far *next;
- unsigned start,length,source,dest,oldborder;
- int playing;
+ unsigned start,length,source,dest;//++++,oldborder;
+ //++++int playing;
//
// lock down a currently playing sound
void MM_ShowMemory(global_game_variables_t *gvar)
{
- //huge mmblocktype huge *scan;
mmblocktype far *scan;
- word temp;
+ //word temp;
sdword end,owner;
//word chx,chy;
word w;
//dword wwww;
- byte scratch[160],scratch0[4096],scratch1[160],str[16];
+ byte scratch[160],scratch0[4096],str[16];//[[[[scratch1[160],
//byte d = '#';
-//**** VW_SetDefaultColors();
-//**** VW_SetLineWidth(40);
+//[[[[ VW_SetDefaultColors();
+//[[[[ VW_SetLineWidth(40);
//++++mh temp = bufferofs;
//++++mh bufferofs = 0;
-//**** VW_SetScreen (0,0);
+//[[[[ VW_SetScreen (0,0);
scan = gvar->mm.mmhead;
end = -1;
void MM_DumpData(global_game_variables_t *gvar)
{
- //huge mmblocktype huge *scan,huge *best;
mmblocktype far *scan,far *best;
long lowest,oldlowest;
word owner;
dword MM_UnusedMemory(global_game_variables_t *gvar)
{
dword free;
- //huge mmblocktype huge *scan;
mmblocktype far *scan;
free = 0;
dword MM_TotalFree(global_game_variables_t *gvar)
{
dword free;
- //huge mmblocktype huge *scan;
mmblocktype far *scan;
free = 0;
printf("========================================\n");
if(MML_CheckForEMS())
{
- printf(" LIMEMS\n");
- printf(" EMM v%x.%x available\n", gvar->pm.emm.EMSVer>>4,gvar->pm.emm.EMSVer&0x0F);
- printf(" totalEMSpages: %u ", gvar->pm.emm.totalEMSpages); printf("freeEMSpages: %u\n", gvar->pm.emm.freeEMSpages);
- printf(" EMSPageFrame: %x\n", gvar->pm.emm.EMSPageFrame);
+ printf(" %cLIMEMS %u\n", 0xC9, gvar->pm.emm.EMSPresent);
+ printf(" %c%cEMM v%x.%x available\n", 0xC7, 0xC4, gvar->pm.emm.EMSVer>>4,gvar->pm.emm.EMSVer&0x0F);
+ printf(" %c%ctotalEMSpages: %u ", 0xC7, 0xC4, gvar->pm.emm.totalEMSpages); printf("freeEMSpages: %u\n", gvar->pm.emm.freeEMSpages);
+ printf(" %c%cEMSPageFrame: %04x\n", 0xC7, 0xC4, gvar->pm.emm.EMSPageFrame);
+ printf(" %c%cEMSmem: %lu\n", 0xD3, 0xC4, gvar->mmi.EMSmem);
}
if(MML_CheckForXMS())
{
- printf(" XMS\n");
- printf(" XMSDriver: %X\n", gvar->pm.xmm.XMSDriver);
+ printf(" %cXMS %u\n", 0xC9, gvar->pm.xmm.XMSPresent);
+ printf(" %c%cXMS v%x.%x available\n", 0xC7, 0xC4, XMSVer>>8,XMSVer&0x0F);
+ printf(" %c%cXMSDriver: %Fp\n", 0xC7, 0xC4, XMSDriver);
+ printf(" %c%cXMSHandle: %04x\n", 0xC7, 0xC4, gvar->pm.xmm.XMSHandle);
+ printf(" %c%cXMSmem: %lu\n", 0xD3, 0xC4, gvar->mmi.XMSmem);
}
- printf("nearheap: %lu ", gvar->mmi.nearheap); printf("farheap: %lu\n", gvar->mmi.farheap);
- if(MML_CheckForEMS()) printf("EMSmem: %lu ", gvar->mmi.EMSmem); if(MML_CheckForXMS()) printf("XMSmem: %lu", gvar->mmi.XMSmem); printf("\n");
- printf("convmem:\n"); DebugMemory_(gvar, 0);
+ printf(" %cConv. %u\n", 0xC9, gvar->pm.mm.MainPresent); DebugMemory_(gvar, 0);
//printf("mainmem: %lu\n", gvar->mmi.mainmem);
//printf("Total convmem: %lu ", gvar->mmi.mainmem); printf("TotalFree: %lu ", MM_TotalFree(gvar)+gvar->mmi.EMSmem+gvar->mmi.XMSmem+gvar->mmi.XMSmem); printf("TotalUsed: %lu\n", gvar->mmi.mainmem);
//printf(" UnusedMemory: %lu\n", MM_UnusedMemory(gvar));
-
+ printf("nearheap: %lu ", gvar->mmi.nearheap); printf("farheap: %lu\n", gvar->mmi.farheap);
}
//==========================================================================