void MML_SetupXMS(mminfo_t *mm, mminfotype *mmi)
{
- word base,size;
+ unsigned base,size;
getmemory:
__asm
mov [size],dx
done:
}
+ printf("base=%u ", base); printf("size=%u\n", size);
MML_UseSpace(base,size, mm);
- mmi->XMSmem += size*16;
- mm->UMBbase[mm->numUMBs] = base;
+ mmi->XMSmem += ((dword)size)*16;
+ mm->UMBbase[mm->numUMBs] = (dword)base;
mm->numUMBs++;
if(mm->numUMBs < MAXUMBS)
goto getmemory;
//
// take the given range out of the block
//
- oldend = scan->start + scan->length;
- extra = oldend - (segstart+seglength);
+ oldend = scan->start + (dword)scan->length;
+ extra = oldend - (dword)(segstart+seglength);
//++++emsver stuff!
if(extra>0xfffflu)
{
- segm=(extra%(0xfffflu))-1;
+ /*segm=(extra%(0xfffflu))-1;
fat=segm*(0xfffflu);
- extra-=fat;
-//printf("extra=%lu ", extra);
-//printf("segm=%lu\n", segm);
+ extra-=fat;*/
+/*printf("extra=%lu ", extra);
+printf("oldend=%lu ", oldend);
+printf("segm=%lu\n", segm);*/
printf("MML_UseSpace: Segment spans two blocks!\n");
}
// segm--;
- if(0xfffflu > extra > 0)
+ if(extra > 0)
{
MM_GetNewBlock(mm);
mm->mmnew->next = scan->next;
//
// detect EMS and allocate up to 64K at page frame
//
- printf("EMS\n\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("EMS!\n\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!
mmi->EMSmem = 0;
for(i = 1;i < __argc;i++)
{
MML_SetupEMS(mm); // allocate space
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!
//TODO: EMS4! AND EMS 3.2 MASSIVE DATA HANDLMENT!
- MML_UseSpace(mm->EMSpageframe,((dword)mm->EMSpagesmapped)*0x4000lu, mm);
+ MML_UseSpace(mm->EMSpageframe,(mm->EMSpagesmapped)*0x4000lu, mm);
//printf("EMS3\n");
MM_MapEMS(mm); // map in used pages
//printf("EMS4\n");
- mmi->EMSmem = ((dword)mm->EMSpagesmapped)*0x4000lu;
+ mmi->EMSmem = (mm->EMSpagesmapped)*0x4000lu;
}
//
// 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!
if(MML_CheckForXMS(mm))
{
-//printf("XMS!\n");
+ printf("XMS!\n");
MML_SetupXMS(mm, mmi); // allocate as many UMBs as possible
}
printf("freeEMSpages=%u\n", mm->freeEMSpages);
printf("EMSpageframe=%x\n", mm->EMSpageframe);
}
- if(MML_CheckForXMS(mm)) printf("XMSaddr=%x\n", *XMSaddr);
+ if(MML_CheckForXMS(mm)) printf("XMSaddr=%Fp\n", *XMSaddr);
printf("near=%lu\n", mmi->nearheap);
printf("far=%lu\n", mmi->farheap);
printf("EMSmem=%lu\n", mmi->EMSmem);
#define PURGEMASK 0xfffc
#define BASEATTRIBUTES 0 // unlocked, non purgable
-#define MAXUMBS 10
+#define MAXUMBS 12
typedef struct mmblockstruct
{
- //unsigned start,length;
- dword start,length;
+ unsigned start,length;
+ //dword start,length;
unsigned attributes;
memptr *useptr; // pointer to the segment start
struct mmblockstruct huge *next;
void *nearheap;
unsigned totalEMSpages,freeEMSpages,EMSpageframe,EMSpagesmapped,EMShandle;
unsigned int EMSVer;
- word numUMBs,UMBbase[MAXUMBS];
+ unsigned numUMBs,UMBbase[MAXUMBS];
+ //dword numUMBs,UMBbase[MAXUMBS];
mmblocktype huge mmblocks[MAXBLOCKS],huge *mmhead,huge *mmfree,huge *mmrover,huge *mmnew;
} mminfo_t;