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
}
/*
/*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
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;