X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2F16_mm.c;h=38754e10cbbae0f570cec38df1908ae75bc09c69;hb=96e05db3b16f8e7ea67df81250163e0b590c4195;hp=dfb9256c2ca91b900bdfe79c715b337c95236f54;hpb=95c8b2ecdd490ddffd9e1d2c0c147a1bd456f4a1;p=16.git diff --git a/src/lib/16_mm.c b/src/lib/16_mm.c index dfb9256c..38754e10 100644 --- a/src/lib/16_mm.c +++ b/src/lib/16_mm.c @@ -47,9 +47,9 @@ Open Watcom port by sparky4 */ #include "src/lib/16_mm.h" -#pragma hdrstop - -#pragma warn -pro +#pragma hdrstop + +#pragma warn -pro #pragma warn -use /* @@ -634,10 +634,10 @@ void MM_Startup(mminfo_t *mm, mminfotype *mmi) { int i; dword length,seglength; + //dword length; word seglength; void huge *start; - unsigned segstart,endfree; + word segstart;//,endfree; - printf("mmi->segu=%Fp\n", (mmi->segu)); if(mm->mmstarted) MM_Shutdown(mm); @@ -655,7 +655,6 @@ void MM_Startup(mminfo_t *mm, mminfotype *mmi) mm->mmblocks[i].next = &(mm->mmblocks[i+1]); } mm->mmblocks[i].next = NULL; - printf("mmi->segu=%Fp\n", (mmi->segu)); // // locked block of all memory until we punch out free space @@ -668,69 +667,45 @@ void MM_Startup(mminfo_t *mm, mminfotype *mmi) mm->mmnew->attributes = LOCKBIT; mm->mmnew->next = NULL; mm->mmrover = mm->mmhead; - printf("mmi->segu=%Fp\n", (mmi->segu)); // // get all available near conventional memory segments // - //printf(" nearheap making!\n"); //---- length=coreleft(); - //_nheapgrow(); - length=_memmax(); - start = /*(void *)*/(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 // //---- length=farcoreleft(); - //printf(" farheap making!\n"); - //_fheapgrow(); - length=0xffffUL*4UL;//_memavl(); - start = mm->farheap = halloc(length, sizeof(byte)); - //start = mm->farheap = _fmalloc(length); + printf(" farheap making!\n"); + _fheapgrow(); + 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 @@ -776,17 +751,13 @@ 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 } // // allocate the misc buffer // xmsskip: -/*mmi->nearheap = 0; -mmi->farheap = 0; -mmi->EMSmem = 0; -mmi->XMSmem = 0;*/ mm->mmrover = mm->mmhead; // start looking for space after low block MM_GetPtr(&(mm->bufferseg),BUFFERSIZE, mm, mmi); @@ -809,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"); } } @@ -914,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; } @@ -1234,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; @@ -1278,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; } @@ -1321,7 +1291,7 @@ void MM_DumpData(mminfo_t *mm) } while (lowest != 0xffff); fclose(dumpfile); - printf("MMDUMP.TXT created.\n"); + printf("MMDUMP.16 created.\n"); } //========================================================================== @@ -1351,8 +1321,8 @@ dword MM_UnusedMemory(mminfo_t *mm) scan = scan->next; } - return free*16l; -// return free; +// return free*16l; + return free; } //========================================================================== @@ -1384,8 +1354,8 @@ dword MM_TotalFree(mminfo_t *mm) scan = scan->next; } - return free*16l; -// return free; +// return free*16l; + return free; } //========================================================================== @@ -1407,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); @@ -1415,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); @@ -1589,8 +1561,7 @@ void MM_FreeBlock(mmblocktype *x, mminfo_t *mm) void MM_seguin(void) { - __asm - { + __asm { push ds mov ax,ds inc ax @@ -1600,8 +1571,7 @@ void MM_seguin(void) void MM_segude(void) { - __asm - { + __asm { pop ds } }