*/
#include "src/lib/16_mm.h"
+#include "src/lib/16_ca.h"
#pragma hdrstop
#pragma warn -pro
{
last = scan;
scan = scan->next;
+ //printf(" start=%x",scan->start);
+ //printf(" seglen=%lu\n", scan->length);
}
//find out how many blocks it spans!
//
- for(;seglength>0x10000;seglength-=0xffff)
+ for(;segmlen>0x10000;segmlen-=0x10000)
{
- printf(" seglen=%lu\n", seglength);
+ //printf(" seglen=%lu\n", segmlen);
segm++;
}
oldend = scan->start + scan->length;
extra = oldend - (segstart+(word)seglength);
//++++emsver stuff!
- if(segm>1 || extra>0x10000lu)
+ if(segm>1 || extra>=0x10000lu)
//if(extra>0xfffflu)
{
scan->blob=segm;
// detect EMS and allocate up to 64K at page frame
//
mmi->EMSmem = 0;
+//goto emsskip; //0000
for(i = 1;i <
#ifdef __WATCOMC__
__argc
word startseg;
needed = (size+15)/16; // convert size from bytes to paragraphs
-printf("."); //0000
+//printf("."); //0000
GETNEWBLOCK; // fill in start and next after a spot is found
mm->mmnew->length = needed;
mm->mmnew->useptr = baseptr;
mm->mmnew->attributes = BASEATTRIBUTES;
-printf("."); //0000
+//printf("."); //0000
for(search = 0; search<mm->endid; search++)
{
-printf(" [case]"); //0000
+printf("\n [case]"); //0000
//
// first search: try to allocate right after the rover, then on up
// second search: search from the head pointer up to the rover
break;
}
- startseg = lastscan->start + (word)lastscan->length;
-
+ startseg = lastscan->start + lastscan->length;
+printf(" %x\n", startseg);
while(scan != endscan)
{
-//printf(","); //0000
+printf(","); //0000
if(scan->start - startseg >= needed)
{
printf("."); //0000
printf(" freeing block~\n"); //0000
next = purge->next;
FREEBLOCK(purge);
- //MM_FreeBlock(purge, mm);
purge = next; // purge another if not at scan
}
mm->mmrover = mm->mmnew;
|| !(scan->attributes & PURGEBITS) )
{
printf(" [lock] "); //0000
-printf("len=%lu ", scan->length);
lastscan = scan;
- startseg = lastscan->start + (word)lastscan->length;
+printf("start=%x ", lastscan->start);
+printf("len=%x ", lastscan->length);
+printf("\n"); //0000
+printf(" %x", lastscan->start + lastscan->length); //0000
+printf(" %x", lastscan->start + (word)lastscan->length); //0000
+printf(" %x", (word)lastscan->start + (word)lastscan->length); //0000
+printf("\n"); //0000
+ startseg = (word)lastscan->start + (word)lastscan->length+1;
+printf("startseg =%x ok", startseg); //0000
}
-printf("\n");
+printf(" end\n");
scan=scan->next; // look at next line
+printf("boop\n");//0000
}
}
sdword end,owner;
//word chx,chy;
word w;
+ dword wwww;
byte scratch[160],scratch0[4096],str[16];
//byte d = '#';
//**** VW_SetDefaultColors();
//modexprint(&page, chx, chy, 1, 0, 24, "\nMM_ShowMemory: Memory block order currupted!\n");
break;
}
- //for(;scan->length>0xfffflu;scan->length-=0xfffflu);
end = scan->start+(scan->length)-1;
//++++ chy = scan->start/320;
//++++ chx = scan->start%320;
//++++ VW_Plot(scan->start,0,15);
//++++ modexClearRegion(page, chx, chy, 4, 4, 15);
//++++ VW_Hlin(end+1,scan->next->start,0,0); // black = free
- if((scan->next->start != 0xe000) > end)
+
+ 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=0;w<=((scan->length+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");
}
- }else{
+ //printf("==================\n");
+ //printf("w=%x start=%x next=%x end=%u %lu\n", w, scan->start, (scan->next->start), end+1, wwww);
+ //printf("==================\n");
+ }/*else {//if(scan->next->start <= scan->start){
+ scan->next->start=scan->start+0x1000;
+ wwww=(dword)(scan->next->start)-(dword)scan->start;
strcat(scratch0, AARESET);
+ strcat(scratch0, "\n");
strcat(scratch0,AAGREEN);
- for(w=0;w<=((scan->length+1)/80);w++)
+ for(w=(end+1);w<=(0x1000/80);w++)
{
- //printf("0 %x %u %lu\n", scan->next->start, w, scan->length);
+ //printf("0 %x %x %u\n", scan->start, w);
strcat(scratch0,"0");
}
- printf("================\nstart=%x length==%lu\n next=%x end=%x\nscan->start+(scan->length)==%x\n================\n", scan->start, scan->length, scan->next->start, end, scan->start+(scan->length));
- printf("w=%u (scan->length+1)/80)=%lu\n\n", w, (scan->length+1)/80);
- //getch();
- }
+ 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();
+ }*/
strcat(scratch0, AARESET);
strcat(scratch0,"\n");
//for(chx=scan->next->start;chx+4>=(word)end+1;chx+=4)