X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2F16_mm.c;h=38754e10cbbae0f570cec38df1908ae75bc09c69;hb=96e05db3b16f8e7ea67df81250163e0b590c4195;hp=e61b2deb9610ba80b761ae99425b8fa2cf4d6a5f;hpb=99fae0e9cff0b5609ca955a238ff22804c7fb2dc;p=16.git diff --git a/src/lib/16_mm.c b/src/lib/16_mm.c index e61b2deb..38754e10 100644 --- a/src/lib/16_mm.c +++ b/src/lib/16_mm.c @@ -47,6 +47,10 @@ Open Watcom port by sparky4 */ #include "src/lib/16_mm.h" +#pragma hdrstop + +#pragma warn -pro +#pragma warn -use /* ============================================================================= @@ -629,19 +633,21 @@ void MML_ClearBlock(mminfo_t *mm) void MM_Startup(mminfo_t *mm, mminfotype *mmi) { int i; - dword length; + dword length,seglength; + //dword length; word seglength; void huge *start; - unsigned segstart,seglength,endfree; + word segstart;//,endfree; if(mm->mmstarted) MM_Shutdown(mm); mm->mmstarted = true; mm->bombonerror = true; + // // set up the linked list (everything in the free list; // -// printf(" linked list making!\n"); + //printf(" linked list making!\n"); mm->mmhead = NULL; mm->mmfree = &(mm->mmblocks[0]); for(i=0;immhead = mm->mmnew; // this will allways be the first node mm->mmnew->start = 0; @@ -665,33 +671,19 @@ void MM_Startup(mminfo_t *mm, mminfotype *mmi) // // get all available near conventional memory segments // - printf(" nearheap making!\n"); //---- length=coreleft(); - //_nheapgrow(); - length=_memmax(); - //printf(" %u\n", length); - start = (void huge *)(mm->nearheap = _nmalloc(length)); + printf(" nearheap making!\n"); + _heapgrow(); + length=_memmax();//(dword)GetFreeSize(); + start = (void huge *)(mm->nearheap = malloc(length)); length -= 16-(FP_OFF(start)&15); length -= SAVENEARHEAP; seglength = length / 16; // now in paragraphs segstart = FP_SEG(start)+(FP_OFF(start)+15)/16; MML_UseSpace(segstart,seglength, mm); mmi->nearheap = length; - /*switch( _nheapchk() ) { - case _HEAPOK: - printf( "OK - nearheap is good\n" ); - break; - case _HEAPEMPTY: - printf( "OK - nearheap is empty\n" ); - break; - case _HEAPBADBEGIN: - printf( "ERROR - nearheap is damaged\n" ); - break; - case _HEAPBADNODE: - printf( "ERROR - bad node in nearheap\n" ); - break; - }*/ -// printf(" near heap ok!\n"); + printf("start=%FP segstart=%X seglen=%lu len=%lu\n", start, segstart, seglength, length); + printf(" near heap ok!\n"); // // get all available far conventional memory segments @@ -699,31 +691,21 @@ void MM_Startup(mminfo_t *mm, mminfotype *mmi) //---- length=farcoreleft(); printf(" farheap making!\n"); _fheapgrow(); - length=0xffffUL*4UL;//_memavl(); - start = mm->farheap = halloc(length, sizeof(byte)); - //start = mm->farheap = _fmalloc(length); + length=(dword)GetFarFreeSize();//0xffffUL*4UL; + //start = mm->farheap = halloc(length, 1); + start = mm->farheap = _fmalloc(length); length -= 16-(FP_OFF(start)&15); length -= SAVEFARHEAP; seglength = length / 16; // now in paragraphs segstart = FP_SEG(start)+(FP_OFF(start)+15)/16; MML_UseSpace(segstart,seglength, mm); mmi->farheap = length; + printf("start=%FP segstart=%X seglen=%lu len=%lu\n", start, segstart, seglength, length); + printf(" far heap ok!\n"); + mmi->mainmem = mmi->nearheap + mmi->farheap; - /*switch( _fheapchk() ) { - case _HEAPOK: - printf( "OK - farheap is good\n" ); - break; - case _HEAPEMPTY: - printf( "OK - farheap is empty\n" ); - break; - case _HEAPBADBEGIN: - printf( "ERROR - farheap is damaged\n" ); - break; - case _HEAPBADNODE: - printf( "ERROR - bad node in farheap\n" ); - break; - }*/ - //printf(" far heap ok!\n"); + + getch(); // // detect EMS and allocate up to 64K at page frame @@ -769,7 +751,7 @@ printf("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 { printf("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); //bug! printf(" XMS!\n"); - //++++ MML_SetupXMS(mm, mmi); // allocate as many UMBs as possible + MML_SetupXMS(mm, mmi); // allocate as many UMBs as possible } // @@ -798,12 +780,8 @@ void MM_Shutdown(mminfo_t *mm) if(!(mm->mmstarted)) return; - _ffree(mm->farheap); - printf(" far freed\n"); - free(mm->nearheap); - printf(" near freed\n"); - //hfree(mm->hugeheap); - //printf("huge freed\n"); + _ffree(mm->farheap); printf(" far freed\n"); + free(mm->nearheap); printf(" near freed\n"); if(MML_CheckForEMS()){ MML_ShutdownEMS(mm); printf(" EMS freed\n"); } if(MML_CheckForXMS(mm)){ MML_ShutdownXMS(mm); printf(" XMS freed\n"); } } @@ -903,7 +881,10 @@ void MM_GetPtr(memptr *baseptr,dword size, mminfo_t *mm, mminfotype *mmi) } if (mm->bombonerror) + { printf(OUT_OF_MEM_MSG,(size-mmi->nearheap)); + exit(-5); + } else mm->mmerror = true; } @@ -1147,7 +1128,7 @@ void MM_SortMem(mminfo_t *mm) ===================== */ -void MM_ShowMemory(page_t *page, mminfo_t *mm) +void MM_ShowMemory(/*page_t *page, */mminfo_t *mm) { mmblocktype huge *scan; word color,temp; @@ -1191,19 +1172,19 @@ CA_OpenDebug (); //modexhlin(page, scan->start, (unsigned)end, chy, color); //for(chx=scan->start;chx+4>=(word)end;chx+=4) //{ - modexClearRegion(page, chx, chy, 4, 4, color); +//++++ modexClearRegion(page, chx, chy, 4, 4, color); //} //++++ VW_Hlin(scan->start,(unsigned)end,0,color); //++++ VW_Plot(scan->start,0,15); - modexClearRegion(page, chx, chy, 4, 4, 15); +//++++ modexClearRegion(page, chx, chy, 4, 4, 15); if(scan->next->start > end+1) //++++ VW_Hlin(end+1,scan->next->start,0,0); // black = free //for(chx=scan->next->start;chx+4>=(word)end+1;chx+=4) //{ - chx+=scan->next->start; - modexClearRegion(page, chx, chy, 4, 4, 2); +//++++ chx+=scan->next->start; +//++++ modexClearRegion(page, chx, chy, 4, 4, 2); //} //modexhlin(page, end+1,scan->next->start, chy, 0); @@ -1223,7 +1204,7 @@ strcpy(scratch,"Seg:"); ultoa (scan->start,str,16); strcat (scratch,str); strcat (scratch,"\tSize:"); -ltoa ((dword)scan->length*16,str,10); +ultoa ((dword)scan->length,str,10); strcat (scratch,str); strcat (scratch,"\tOwner:0x"); owner = (unsigned)scan->useptr; @@ -1232,7 +1213,7 @@ strcat (scratch,str); strcat (scratch,"\n"); write(debughandle,scratch,strlen(scratch)); //modexprint(page, chx, chy, 1, 0, 24, &scratch); -chy+=4; +//++++chy+=4; //fprintf(stdout, "%s", scratch); //****#endif @@ -1267,9 +1248,9 @@ void MM_DumpData(mminfo_t *mm) //++++free(mm->nearheap); - dumpfile = fopen ("mmdump.txt","w"); + dumpfile = fopen ("mmdump.16","w"); if (!dumpfile){ - printf("MM_DumpData: Couldn't open MMDUMP.TXT!\n"); + printf("MM_DumpData: Couldn't open MMDUMP.16!\n"); return; } @@ -1310,7 +1291,7 @@ void MM_DumpData(mminfo_t *mm) } while (lowest != 0xffff); fclose(dumpfile); - printf("MMDUMP.TXT created.\n"); + printf("MMDUMP.16 created.\n"); } //========================================================================== @@ -1340,8 +1321,8 @@ dword MM_UnusedMemory(mminfo_t *mm) scan = scan->next; } - return free*16l; -// return free; +// return free*16l; + return free; } //========================================================================== @@ -1373,8 +1354,8 @@ dword MM_TotalFree(mminfo_t *mm) scan = scan->next; } - return free*16l; -// return free; +// return free*16l; + return free; } //========================================================================== @@ -1387,7 +1368,7 @@ dword MM_TotalFree(mminfo_t *mm) ===================== */ -void MM_Report(page_t *page, mminfo_t *mm, mminfotype *mmi) +void MM_Report(/*page_t *page, */mminfo_t *mm, mminfotype *mmi) { if(MML_CheckForEMS()) { @@ -1396,7 +1377,7 @@ void MM_Report(page_t *page, mminfo_t *mm, mminfotype *mmi) printf("freeEMSpages=%u\n", mm->freeEMSpages); printf("EMSpageframe=%x\n", mm->EMSpageframe); } - if(MML_CheckForXMS(mm)) printf("XMSaddr=%Fp\n", *XMSaddr); + if(MML_CheckForXMS(mm)) printf("XMSaddr=%X\n", *XMSaddr); printf("near=%lu\n", mmi->nearheap); printf("far=%lu\n", mmi->farheap); printf("EMSmem=%lu\n", mmi->EMSmem); @@ -1404,6 +1385,8 @@ void MM_Report(page_t *page, mminfo_t *mm, mminfotype *mmi) printf("mainmem=%lu\n", mmi->mainmem); printf("UnusedMemory=%lu\n", MM_UnusedMemory(mm)); printf("TotalFree=%lu\n", MM_TotalFree(mm)); + //mmi->nearheap+mmi->farheap+ + printf("TotalUsed=%lu\n", mmi->mainmem+mmi->EMSmem+mmi->XMSmem);//+); // printf("\n"); // printf("UnusedMemory=%lu kb\n", MM_UnusedMemory()/10248); // printf("TotalFree=%lu kb\n", MM_TotalFree()/10248); @@ -1578,8 +1561,7 @@ void MM_FreeBlock(mmblocktype *x, mminfo_t *mm) void MM_seguin(void) { - __asm - { + __asm { push ds mov ax,ds inc ax @@ -1589,8 +1571,7 @@ void MM_seguin(void) void MM_segude(void) { - __asm - { + __asm { pop ds } }