]> 4ch.mooo.com Git - 16.git/commitdiff
divide the memory blob into chunks
authorsparky4 <sparky4@cock.li>
Thu, 2 Jul 2015 21:13:10 +0000 (16:13 -0500)
committersparky4 <sparky4@cock.li>
Thu, 2 Jul 2015 21:13:10 +0000 (16:13 -0500)
modified:   exmmtest.exe
modified:   src/lib/16_mm.c
modified:   src/lib/16_mm.h

exmmtest.exe
src/lib/16_mm.c
src/lib/16_mm.h

index 42dba971abb5187246f3dc8718b65b51c34d1281..df027297c0e69293b1cef9fe4d2e498d25940c8f 100644 (file)
Binary files a/exmmtest.exe and b/exmmtest.exe differ
index d39e2683456fdefce413a63c795d469dcd8d42d6..3f0e7e575d556b95d8ddc20d9fed0b6836a51426 100644 (file)
@@ -410,12 +410,12 @@ void MML_ShutdownXMS(mminfo_t *mm)
 ======================
 */
 
-void MML_UseSpace(unsigned segstart, unsigned seglength, mminfo_t *mm)
+void MML_UseSpace(unsigned segstart, dword seglength, mminfo_t *mm)
 {
        mmblocktype huge *scan,huge *last;
        unsigned        oldend;
        //++++if(mm->EMSVer)
-       long            extra;
+       dword           extra;
 
        scan = last = mm->mmhead;
        mm->mmrover = mm->mmhead;               // reset rover to start of memory
@@ -435,10 +435,10 @@ void MML_UseSpace(unsigned segstart, unsigned seglength, mminfo_t *mm)
        oldend = scan->start + scan->length;
        extra = oldend - (segstart+seglength);
        //++++emsver stuff!
-       if(extra < 0)
+       if(extra > 0xffffl)
        {
-               printf("MML_UseSpace: Segment spans two blocks!");
-               return;
+               printf("MML_UseSpace: Segment spans two blocks!\n");
+               //return;
        }
 
 
@@ -593,11 +593,13 @@ void MM_Startup(mminfo_t *mm, mminfotype *mmi)
                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,mm->EMSpagesmapped*0x400, mm);
+               if(mm->EMSVer>=0x40) MML_UseSpace(mm->EMSpageframe,((dword)mm->EMSpagesmapped)*((dword)mm->freeEMSpages), mm);
+               else MML_UseSpace(mm->EMSpageframe,mm->EMSpagesmapped*0x400, mm);
 //printf("EMS3\n");
                MM_MapEMS(mm);                                  // map in used pages
 //printf("EMS4\n");
-               mmi->EMSmem = mm->EMSpagesmapped*0x4000l;
+               if(mm->EMSVer>=0x40) mmi->EMSmem = ((dword)mm->EMSpagesmapped)*((dword)mm->freeEMSpages);
+               else mmi->EMSmem = mm->EMSpagesmapped*0x4000l;
        }
 
 //
index bef21c038393a7d775106bebf9a07d38ea35443d..bc178f159c14848b0bb14104fd17746cb20a7bc0 100644 (file)
@@ -160,7 +160,7 @@ unsigned MM_MapEMS(mminfo_t *mm);
 boolean MML_CheckForXMS(mminfo_t *mm);
 void MML_SetupXMS(mminfo_t *mm, mminfotype *mmi);
 void MML_ShutdownXMS(mminfo_t *mm);
-void MML_UseSpace(unsigned segstart, unsigned seglength, mminfo_t *mm);
+void MML_UseSpace(unsigned segstart, dword seglength, mminfo_t *mm);
 void MML_ClearBlock(mminfo_t *mm);
 
 void MM_Startup(mminfo_t *mm, mminfotype *mmi);
@@ -175,7 +175,7 @@ void MM_ShowMemory(mminfo_t *mm);
 dword MM_UnusedMemory(mminfo_t *mm);
 dword MM_TotalFree(mminfo_t *mm);
 void MM_Report(mminfo_t *mm, mminfotype *mmi);
-int MM_EMSVer(void);
+//int MM_EMSVer(void);
 void MM_BombOnError(boolean bomb, mminfo_t *mm);
 void MM_GetNewBlock(mminfo_t *mm);
 void MM_FreeBlock(mmblocktype *x, mminfo_t *mm);