]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_mm.c
wound workings
[16.git] / src / lib / 16_mm.c
index 0246d4e191e2f7b31aed686aef19866aad9eafb5..1ae9e65ab9f94e24f706f0eded02541424963b6a 100644 (file)
@@ -83,10 +83,11 @@ static      char *ParmStringsexmm[] = {"noems","noxms",""};
 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
@@ -269,7 +270,7 @@ unsigned MM_MapEMS(mminfo_t *mm)
        union REGS CPURegs;
        EMShandle=mm->EMShandle;
 
-       for (i=0;i<mm->EMSpagesmapped;i++)
+       for (i=0;i<4/*mm->EMSpagesmapped*/;i++)
        {
                __asm
                {
@@ -291,13 +292,44 @@ unsigned MM_MapEMS(mminfo_t *mm)
                        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)
+{
+
+}
+
 //==========================================================================
 
 /*
@@ -442,17 +474,13 @@ void MML_UseSpace(/*d*/word segstart, dword seglength, 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
                {
@@ -461,11 +489,7 @@ void MML_UseSpace(/*d*/word segstart, dword seglength, mminfo_t *mm)
                        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);
 
@@ -476,6 +500,19 @@ printf("seglen=%lu\n", seglength);
                //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);
@@ -654,7 +691,7 @@ emsskip:
        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
        }
 
 //