boolean MML_CheckForEMS(void)
{
boolean emmcfems;
- char emmname[] = "EMMXXXX0";
+ static char emmname[] = "EMMXXXX0"; //fix by andrius4669
// mov dx,OFFSET emmname
__asm {
- LEA DX, emmname //fix by andrius4669
+ //LEA DX, emmname //fix by andrius4669
+ mov dx,OFFSET emmname //fix by andrius4669
mov ax,0x3d00
int 0x21 // try to open EMMXXXX0 device
jc error
union REGS CPURegs;
EMShandle=mm->EMShandle;
- for (i=0;i<mm->EMSpagesmapped;i++)
+ for (i=0;i<4/*mm->EMSpagesmapped*/;i++)
{
__asm
{
strcpy(str,"MM_MapEMS: EMS error 0x");
itoa(err,str2,16);
strcpy(str,str2);
- printf("%s\n",str);
+ //printf("%s\n",str);
+ printf("FACK! %u\n", err);
return err;
}
}
return 0;
}
+/*
+SUB EMS.MapXPages (PhysicalStart, LogicalStart, NumPages, Handle)\r
+\r
+ 'Maps up to 4 logical EMS pages to physical pages in the page frame, where:\r
+ '\r
+ 'PhysicalStart = Physical page first logical page is mapped to\r
+ 'LogicalStart = First logical page to map\r
+ 'NumPages = Number of pages to map (1 to 4)\r
+ 'Handle = EMS handle logical pages are allocated to\r
+\r
+ 'Create a buffer containing the page information\r
+ FOR x = 0 TO NumPages - 1\r
+ MapInfo$ = MapInfo$ + MKI$(LogicalStart + x) + MKI$(PhysicalStart + x)\r
+ NEXT\r
+\r
+ Regs.ax = &H5000 'Map the pages in the buffer\r
+ Regs.cx = NumPages 'to the pageframe\r
+ Regs.dx = Handle\r
+ Regs.ds = VARSEG(MapInfo$)\r
+ Regs.si = SADD(MapInfo$)\r
+ InterruptX &H67, Regs, Regs\r
+ EMS.Error = (Regs.ax AND &HFF00&) \ &H100 'Store the status code\r
+\r
+END SUB
+*/
+void MM_MapXEMS(mminfo_t *mm)
+{
+
+}
+
//==========================================================================
/*
//find out how many blocks it spans!
if(seglength>0xffffu)
{
- segm=seglength/0x4000u;
+// segm=seglength/0x4000u;
+ segm=seglength/0xffffu;
}
else segm=1;
-//
-// take the given range out of the block
-//
- oldend = scan->start + scan->length;
- extra = oldend - (segstart+seglength);
//++++emsver stuff!
- if(extra>0xfffflu)
+ if(segm>1/*extra>0xfffflu*/)
{
/*__asm
{
inc ax
mov ds,ax
}*/
-printf("segm=%u ", segm);
-printf("ex=%lu ", extra);
-printf("len=%u ", scan->length);
-printf("segsta=%x ", segstart);
-printf("seglen=%lu\n", seglength);
+
//MML_UseSpace(?segstart?, ?length?, mm);
//printf("MML_UseSpace: Segment spans two blocks!\n");
}
+//
+// take the given range out of the block
+//
+ oldend = scan->start + scan->length;
+ extra = oldend - (segstart+seglength);
+
+printf("segm=%u ", segm);
+printf("ex=%lu ", extra);
+printf("start+seglen=%lu ", segstart+seglength);
+printf("len=%u ", scan->length);
+printf("segsta=%x ", segstart);
+printf("seglen=%lu\n", seglength);
+
//segu:
//++++todo: linked list of segment!
//printf("segm=%lu\n", segm);
if(MML_CheckForXMS(mm))
{
printf("XMS!\n");
- MML_SetupXMS(mm, mmi); // allocate as many UMBs as possible
+ //MML_SetupXMS(mm, mmi); // allocate as many UMBs as possible
}
//