X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2F16_mm.c;h=7cf59d3dfa3033db30a596e6c627ce33b3d2feb9;hb=781dba2e4095d0e72af3f0c38d2de7bafc21c57d;hp=11897608930c4cadff5b1644a402d6ad3a43eb5c;hpb=2150a9b940cd5993d0593f357049657577cc702e;p=16.git diff --git a/src/lib/16_mm.c b/src/lib/16_mm.c old mode 100644 new mode 100755 index 11897608..7cf59d3d --- 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,25 @@ 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=(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; @@ -1369,7 +1390,7 @@ void MM_ShowMemory(global_game_variables_t *gvar,/*page_t *page, */mminfo_t *mm) 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"); @@ -1388,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; @@ -1403,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); @@ -1423,14 +1459,20 @@ 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; 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; @@ -1445,7 +1487,7 @@ void MM_DumpData(mminfo_t *mm) scan = mm->mmhead; while (scan) { - owner = (word)scan->useptr; + owner = (unsigned)scan->useptr; if (owner && owner oldlowest) { @@ -1467,7 +1509,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); @@ -1492,7 +1534,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; @@ -1523,7 +1566,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;