*/
#include "src/lib/16_mm.h"
-#pragma hdrstop\r
-\r
-#pragma warn -pro\r
+#pragma hdrstop
+
+#pragma warn -pro
#pragma warn -use
/*
{
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);
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
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
{
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);
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"); }
}
}
if (mm->bombonerror)
+ {
printf(OUT_OF_MEM_MSG,(size-mmi->nearheap));
+ exit(-5);
+ }
else
mm->mmerror = true;
}
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;
//++++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;
}
} while (lowest != 0xffff);
fclose(dumpfile);
- printf("MMDUMP.TXT created.\n");
+ printf("MMDUMP.16 created.\n");
}
//==========================================================================
scan = scan->next;
}
- return free*16l;
-// return free;
+// return free*16l;
+ return free;
}
//==========================================================================
scan = scan->next;
}
- return free*16l;
-// return free;
+// return free*16l;
+ return free;
}
//==========================================================================
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);
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);
void MM_seguin(void)
{
- __asm
- {
+ __asm {
push ds
mov ax,ds
inc ax
void MM_segude(void)
{
- __asm
- {
+ __asm {
pop ds
}
}