/*void MML_UseSpace(word segstart, dword seglength, mminfo_t *mm)
{
- mmblocktype huge *scan,huge *last;
+ //huge mmblocktype huge *scan,huge *last;
word segm=1;
word oldend;
dword segmlen;
mmblocktype far *scan,far *last;
word oldend;
sdword extra;
- word segm=1;
+ //word segm=1;
scan = last = mm->mmhead;
mm->mmrover = mm->mmhead; // reset rover to start of memory
// take the given range out of the block
//
oldend = scan->start + scan->length;
- extra = oldend - (segstart+((word)seglength));
+ extra = oldend - (segstart+((unsigned)seglength));
if (extra < 0)
{
printf("========================================\n");
void MML_ClearBlock(mminfo_t *mm)
{
- mmblocktype huge *scan,huge *last;
+ //huge mmblocktype huge *scan,huge *last;
+ mmblocktype far *scan,far *last;
scan = mm->mmhead->next;
void MM_Startup(mminfo_t *mm, mminfotype *mmi)
{
int i;
- dword length,seglength;
- //dword length; word seglength;
- void huge *start;
+ //dword length,seglength;
+ dword length; word seglength;
+ //huge void huge *start;
+ void far *start;
word segstart;//,endfree;
+ //memptr *peeonself;
// if(mm->mmstarted)
// MM_Shutdown(mm);
mm->mmnew->length = 0xffff;
mm->mmnew->attributes = LOCKBIT;
mm->mmnew->next = NULL;
+ //mm->mmnew->useptr = peeonself;
mm->mmrover = 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();
- start = (void huge *)(mm->nearheap = _nmalloc(length));
+ //huge start = (void huge *)(mm->nearheap = _nmalloc(length));
+ start = (void far *)(mm->nearheap = _nmalloc(length));
#endif
#ifdef __BORLANDC__
length=coreleft();
- start = (void huge *)(mm->nearheap = malloc(length));
+ //huge start = (void huge *)(mm->nearheap = malloc(length));
+ start = (void far *)(mm->nearheap = malloc(length));
#endif
length -= 16-(FP_OFF(start)&15);
length -= SAVENEARHEAP;
void MM_GetPtr (memptr *baseptr, dword size, mminfo_t *mm, mminfotype *mmi)
{
- mmblocktype huge *scan,huge *lastscan,huge *endscan
- ,huge *purge,huge *next;
+ //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;
GETNEWBLOCK; // fill in start and next after a spot is found
mm->mmnew->length = needed;
mm->mmnew->useptr = baseptr;
+ //if(mm->mmnew->useptr==NULL){
+ printf("baseptr=%04x ", baseptr); printf("useptr=%04x\n", mm->mmnew->useptr);
+ printf("*baseptr=%04x ", *baseptr); printf("*useptr=%04x\n", *(mm->mmnew->useptr));
+ //printf("*baseptr=%Fp ", *baseptr); printf("*useptr=%Fp\n", *(mm->mmnew->useptr));
+ //exit(-5); }
mm->mmnew->attributes = BASEATTRIBUTES;
//tryagain:
void MM_FreePtr(memptr *baseptr, mminfo_t *mm)
{
- mmblocktype huge *scan,huge *last;
+ //huge mmblocktype huge *scan,huge *last;
+ mmblocktype far *scan,far *last;
last = mm->mmhead;
scan = last->next;
void MM_SetPurge(memptr *baseptr, int purge, mminfo_t *mm)
{
- mmblocktype huge *start;
+ //huge mmblocktype huge *start;
+ mmblocktype far *start;
start = mm->mmrover;
void MM_SetLock(memptr *baseptr, boolean locked, mminfo_t *mm)
{
- mmblocktype huge *start;
+ //huge mmblocktype huge *start;
+ mmblocktype far *start;
start = mm->mmrover;
void MM_SortMem(mminfo_t *mm)
{
- mmblocktype huge *scan,huge *last,huge *next;
+ //huge mmblocktype huge *scan,huge *last,huge *next;
+ mmblocktype far *scan,far *last,far *next;
unsigned start,length,source,dest,oldborder;
int playing;
void MM_ShowMemory(global_game_variables_t *gvar,/*page_t *page, */mminfo_t *mm)
{
- mmblocktype huge *scan;
+ //huge mmblocktype huge *scan;
+ mmblocktype far *scan;
word temp;
sdword end,owner;
//word chx,chy;
word w;
- dword wwww;
- byte scratch[160],scratch0[4096],str[16];
+ //dword wwww;
+ byte scratch[160],scratch0[4096],scratch1[160],str[16];
//byte d = '#';
//**** VW_SetDefaultColors();
//**** VW_SetLineWidth(40);
//++++ modexClearRegion(page, chx, chy, 4, 4, 15);
//++++ VW_Hlin(end+1,scan->next->start,0,0); // black = free
- wwww=(dword)(scan->next->start)-(dword)scan->start;
+ //wwww=(dword)(scan->next->start)-(dword)scan->start;
//wwww=(dword)scan->start+(dword)(scan->next->start);
if (scan->next && scan->next->start >= end+1)
{
strcat(scratch0, AARESET);
strcat(scratch0, "\n");
strcat(scratch0,AAGREEN);
- for(w=(end+1)/80;w<=(wwww/80);w++)
+ for(w=(end+1)/80;w<=((scan->next->start-scan->start)/80);w++)
+ //for(w=(wwww)/80;w<=((end+1)/80);w++)
+ //for(w=(end+1)/80;w<=((wwww)/80);w++)
{
//printf("0 %x %u %lu\n", scan->next->start, w, scan->length);
strcat(scratch0,"0");
}
- printf("==================\n");
- printf("w=%x start=%x next=%x end=%u %lu\n", w, scan->start, (scan->next->start), end+1, wwww);
- printf("==================\n");
+ //printf("==================\n");
+ //printf("w=%u wwww=%lu start=%04x next=%04x end=%lu\n", w/80, wwww/80, scan->start, (scan->next->start), end+1);
+ //printf("==================\n");
strcat(scratch0, "\n");
+ //getch();
}/*else {//if(scan->next->start <= scan->start){
scan->next->start=scan->start+0x1000;
wwww=(dword)(scan->next->start)-(dword)scan->start;
printf("================\n");
printf("w=%x start=%x next=%x end=%u %lu\n", w, scan->start, (scan->next->start), end+1, wwww);
printf("================\n");
-// getch();
+ getch();
}*/
strcat(scratch0, AARESET);
//strcat(scratch0,"\n");
ultoa (scan->start,str,16);
strcat (scratch,str);
strcat (scratch,"\tSize:");
- ultoa ((word)scan->length,str,10);
+ ultoa ((unsigned)scan->length,str,10);
strcat (scratch,str);
strcat (scratch,"\tOwner:0x");
owner = (unsigned)scan->useptr;
scan = scan->next;
}
+ /*strcpy(scratch1, AARESET);
+ strcat(scratch1, "========================================\n");
+ strcat(scratch1, "near= ");
+ ultoa (*(mm->nearheap),str,10);
+ strcat (scratch1,str);
+ strcat(scratch1, " far= ");
+ ultoa (*(mm->farheap),str,10);
+ strcat (scratch1,str);
+ strcat(scratch1, "\n");
+ //strcat(scratch1, "&near= %Fp ", &(mm->nearheap));
+ //strcat(scratch1, "&far= %Fp", &(mm->farheap));
+ //strcat(scratch1, "\n");
+ strcat(scratch1, "========================================\n");
+ write(gvar->handle.debughandle,scratch1,strlen(scratch1));*/
+
CA_CloseDebug (gvar);
void MM_DumpData(mminfo_t *mm)
{
- mmblocktype huge *scan,huge *best;
+ //huge mmblocktype huge *scan,huge *best;
+ mmblocktype far *scan,far *best;
long lowest,oldlowest;
word owner;
byte lock,purge;
FILE *dumpfile;
free(mm->nearheap);
- dumpfile = fopen ("mmdump.16","w");
+#ifdef __BORLANDC__
+ dumpfile = fopen ("mmdump.16b","w");
+#endif
+#ifdef __WATCOMC__
+ dumpfile = fopen ("mmdump.16w","w");
+#endif
if (!dumpfile){
printf("MM_DumpData: Couldn't open MMDUMP.16!\n");
return;
scan = mm->mmhead;
while (scan)
{
- owner = (word)scan->useptr;
+ owner = (unsigned)scan->useptr;
if (owner && owner<lowest && owner > oldlowest)
{
else
lock = '-';
fprintf (dumpfile,"0x%p (%c%c) = %u\n"
- ,(word)lowest,lock,purge,best->length);
+ ,(unsigned)lowest,lock,purge,best->length);
}
} while (lowest != 0xffff);
dword MM_UnusedMemory(mminfo_t *mm)
{
dword free;
- mmblocktype huge *scan;
+ //huge mmblocktype huge *scan;
+ mmblocktype far *scan;
free = 0;
scan = mm->mmhead;
dword MM_TotalFree(mminfo_t *mm)
{
dword free;
- mmblocktype huge *scan;
+ //huge mmblocktype huge *scan;
+ mmblocktype far *scan;
free = 0;
scan = mm->mmhead;