X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2F16_mm.c;h=1b52644a00447a8cc253a0369c3f02c2cde7f64f;hb=ce843d079f953717e3ffa2a27d3c088537883555;hp=edbf56e665b3f8ab6109a962213871bc16da3282;hpb=f1605e99959acfb32b36ae875601fc14dd670742;p=16.git diff --git a/src/lib/16_mm.c b/src/lib/16_mm.c index edbf56e6..1b52644a 100755 --- a/src/lib/16_mm.c +++ b/src/lib/16_mm.c @@ -563,7 +563,7 @@ void MML_ShutdownXMS(mminfo_t *mm) /*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; @@ -636,7 +636,7 @@ void MML_UseSpace(word segstart, dword seglength, mminfo_t *mm) 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 @@ -663,7 +663,7 @@ void MML_UseSpace(word segstart, dword seglength, mminfo_t *mm) // 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"); @@ -716,7 +716,8 @@ void MML_UseSpace(word segstart, dword seglength, mminfo_t *mm) 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; @@ -750,10 +751,12 @@ void MML_ClearBlock(mminfo_t *mm) 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); @@ -781,19 +784,24 @@ void MM_Startup(mminfo_t *mm, mminfotype *mmi) 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; @@ -943,8 +951,8 @@ void MM_Shutdown(mminfo_t *mm) 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; @@ -953,6 +961,11 @@ void MM_GetPtr (memptr *baseptr, dword size, mminfo_t *mm, mminfotype *mmi) 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: @@ -1053,7 +1066,8 @@ void MM_GetPtr (memptr *baseptr, dword size, mminfo_t *mm, mminfotype *mmi) 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; @@ -1091,7 +1105,8 @@ void MM_FreePtr(memptr *baseptr, mminfo_t *mm) void MM_SetPurge(memptr *baseptr, int purge, mminfo_t *mm) { - mmblocktype huge *start; + //huge mmblocktype huge *start; + mmblocktype far *start; start = mm->mmrover; @@ -1130,7 +1145,8 @@ void MM_SetPurge(memptr *baseptr, int purge, mminfo_t *mm) void MM_SetLock(memptr *baseptr, boolean locked, mminfo_t *mm) { - mmblocktype huge *start; + //huge mmblocktype huge *start; + mmblocktype far *start; start = mm->mmrover; @@ -1169,7 +1185,8 @@ void MM_SetLock(memptr *baseptr, boolean locked, mminfo_t *mm) 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; @@ -1279,13 +1296,14 @@ void MM_SortMem(mminfo_t *mm) 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); @@ -1339,22 +1357,23 @@ void MM_ShowMemory(global_game_variables_t *gvar,/*page_t *page, */mminfo_t *mm) //++++ 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=(wwww)/80;w<=((end+1)/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=%u wwww=%lu start=%04x next=%04x end=%lu\n", w/80, wwww/80, scan->start, (scan->next->start), end+1); - 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){ @@ -1390,7 +1409,7 @@ void MM_ShowMemory(global_game_variables_t *gvar,/*page_t *page, */mminfo_t *mm) 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; @@ -1405,6 +1424,21 @@ void MM_ShowMemory(global_game_variables_t *gvar,/*page_t *page, */mminfo_t *mm) 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); @@ -1425,7 +1459,8 @@ void MM_ShowMemory(global_game_variables_t *gvar,/*page_t *page, */mminfo_t *mm) 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; @@ -1447,7 +1482,7 @@ void MM_DumpData(mminfo_t *mm) scan = mm->mmhead; while (scan) { - owner = (word)scan->useptr; + owner = (unsigned)scan->useptr; if (owner && owner oldlowest) { @@ -1469,7 +1504,7 @@ void MM_DumpData(mminfo_t *mm) 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); @@ -1494,7 +1529,8 @@ void MM_DumpData(mminfo_t *mm) dword MM_UnusedMemory(mminfo_t *mm) { dword free; - mmblocktype huge *scan; + //huge mmblocktype huge *scan; + mmblocktype far *scan; free = 0; scan = mm->mmhead; @@ -1525,7 +1561,8 @@ dword MM_UnusedMemory(mminfo_t *mm) dword MM_TotalFree(mminfo_t *mm) { dword free; - mmblocktype huge *scan; + //huge mmblocktype huge *scan; + mmblocktype far *scan; free = 0; scan = mm->mmhead;