]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_mm.c
FIXED farcoreleft() is a VERY important part of the farheap of MM. it is much larger...
[16.git] / src / lib / 16_mm.c
index bb392aab60439095c35843eb7f14d38dfb461528..333c368658baf31f79673695c88fe702b73f26bd 100755 (executable)
@@ -801,6 +801,38 @@ void MML_ClearBlock (global_game_variables_t *gvar)
 }\r
 \r
 \r
+//==========================================================================\r
+\r
+/*\r
+===================\r
+=\r
+= MM_Reset\r
+=\r
+===================\r
+*/\r
+\r
+void MM_Reset (global_game_variables_t *gvar)\r
+{\r
+//     //has to be 16\r
+//     if(sizeof(mmblocktype)!=16)\r
+//             return;\r
+\r
+#ifdef __BORLANDC__\r
+       strcpy(gvar->handle.datadumpfilename, "mmdump.16b");\r
+#endif\r
+#ifdef __WATCOMC__\r
+       strcpy(gvar->handle.datadumpfilename, "mmdump.16w");\r
+#endif\r
+\r
+#ifdef __BORLANDC__\r
+       strcpy(gvar->handle.heapdumpfilename, "heap.16b");\r
+#endif\r
+#ifdef __WATCOMC__\r
+       strcpy(gvar->handle.heapdumpfilename, "heap.16w");\r
+#endif\r
+}\r
+\r
+\r
 //==========================================================================\r
 \r
 /*\r
@@ -817,17 +849,14 @@ void MML_ClearBlock (global_game_variables_t *gvar)
 void MM_Startup (global_game_variables_t *gvar)\r
 {\r
        int i;\r
-       dword length;\r
+       unsigned        long length;\r
        void far        *start;\r
        unsigned        segstart,seglength;//,endfree;\r
 \r
        if(gvar->mm.mmstarted)\r
                MM_Shutdown (gvar);\r
 \r
-       //has to be 16\r
-       if(sizeof(mmblocktype)!=16)\r
-               Quit (gvar, "mmblocktype size is not 16");\r
-\r
+       MM_Reset (gvar);\r
        gvar->mm.mmstarted = true;\r
        gvar->mm.bombonerror = true;\r
 //\r
@@ -854,17 +883,8 @@ void MM_Startup (global_game_variables_t *gvar)
 //\r
 // get all available near conventional memory segments\r
 //\r
-#ifdef __WATCOMC__\r
-       _nheapgrow();\r
-#endif\r
-       length=(word)_memavl();//(word)coreleft();\r
-       //start = gvar->mm.nearheap = _fmalloc(length);\r
-#ifdef __WATCOMC__\r
-       start = (void __far *)(gvar->mm.nearheap = _nmalloc(length));\r
-#endif\r
-#ifdef __BORLANDC__\r
-       start = (void far *)(gvar->mm.nearheap = malloc(length));\r
-#endif\r
+       length=coreleft();\r
+       start = (void far *)(gvar->mm.nearheap = nearmalloc(length));\r
 \r
        length -= 16-(FP_OFF(start)&15);\r
        length -= SAVENEARHEAP;\r
@@ -873,30 +893,19 @@ void MM_Startup (global_game_variables_t *gvar)
        MML_UseSpace (segstart,seglength, gvar);\r
        gvar->mmi.nearheap = length;\r
        //0000printf("near:     start=%Fp       segstart=%x     seglen=%lu      len=%lu\n", start, segstart, (dword)seglength, length);\r
-\r
 //\r
 // get all available far conventional memory segments\r
 //\r
-#ifdef __WATCOMC__\r
-       _fheapgrow();\r
-#endif\r
-#ifdef __BORLANDC__\r
-//     printf("farcoreleft()                           %lu\n", farcoreleft());\r
-//     printf("(farcoreleft()+32)-_FCORELEFT   %d\n", (sword)((farcoreleft()+32)-_FCORELEFT));\r
-#endif\r
-       length=_FCORELEFT;\r
-       start = gvar->mm.farheap = _fmalloc(length);//start = gvar->mm.farheap = halloc(length, 1);\r
-\r
+       length=farcoreleft();\r
+       start = gvar->mm.farheap = farmalloc(length);\r
        length -= 16-(FP_OFF(start)&15);\r
        length -= SAVEFARHEAP;\r
        seglength = length / 16;                        // now in paragraphs\r
        segstart = FP_SEG(start)+(FP_OFF(start)+15)/16;\r
        MML_UseSpace (segstart,seglength, gvar);\r
        gvar->mmi.farheap = length;\r
-       //0000printf("far:      start=%Fp       segstart=%x     seglen=%lu      len=%lu\n", start, segstart, (dword)seglength, length);\r
-\r
        gvar->mmi.mainmem = gvar->mmi.nearheap + gvar->mmi.farheap;\r
-\r
+       //0000printf("far:      start=%Fp       segstart=%x     seglen=%lu      len=%lu\n", start, segstart, (dword)seglength, length);\r
 #if !defined(__16_PM__)// && defined(__WATCOMC__)\r
 #if 0\r
        if(!dbg_debugpm) {\r
@@ -1336,6 +1345,15 @@ void MM_SortMem (global_game_variables_t *gvar)
 \r
 //==========================================================================\r
 \r
+#ifdef __BORLANDC__\r
+extern char global_temp_status_text[512];\r
+extern char global_temp_status_text2[512];\r
+#endif\r
+#ifdef __WATCOMC__\r
+//#define MMSMPANVID\r
+#define MMSMSCANINFO\r
+#endif\r
+\r
 /*\r
 =====================\r
 =\r
@@ -1344,11 +1362,6 @@ void MM_SortMem (global_game_variables_t *gvar)
 =====================\r
 */\r
 \r
-#ifdef __WATCOMC__\r
-//#define MMSMPANVID\r
-#define MMSMSCANINFO\r
-#endif\r
-\r
 void MM_ShowMemory (global_game_variables_t *gvar)\r
 {\r
        mmblocktype far *scan;\r
@@ -1558,11 +1571,14 @@ void MM_ShowMemoryDetail (unsigned x, unsigned y, unsigned w, unsigned q, sdword
 } mmblocktype;*/\r
                        //modexprint(page, x, y, t, tlsw, color, bgcolor, vidsw, const byte *str);\r
 #define MMSMPRINTMEMINFO modexprint(&(gvar->video.page[0]), xpos, ypos, 1, 1, ccolor, 8, gvar->video.VL_Started, global_temp_status_text); ypos+=8;\r
+#ifdef __WATCOMC__\r
                        if(gvar->video.VL_Started)\r
                        {\r
                                VL_ShowPage(&gvar->video.page[0], 1, 0);\r
                                modexClearRegion(&gvar->video.page[0], 0, 0, gvar->video.page[0].width, gvar->video.page[0].height, 8);\r
-                       }else clrscr();\r
+                       }else\r
+#endif\r
+                               clrscr();\r
                        sprintf(global_temp_status_text, "block #%04u", qq); MMSMPRINTMEMINFO\r
 //                     sprintf(global_temp_status_text, "%Fp", scaninfo[qq].scan->useptr); MMSMPRINTMEMINFO\r
                        sprintf(global_temp_status_text, "start:  %04x", (unsigned)scaninfo[qq].scan->start); MMSMPRINTMEMINFO\r
@@ -1583,6 +1599,7 @@ void MM_ShowMemoryDetail (unsigned x, unsigned y, unsigned w, unsigned q, sdword
                        {\r
                                printf("%s", scratch1);\r
                                printf("%s", AAGREY); printf("_");\r
+                               if(scaninfo[qq].scan->length<64000)\r
                                for(w=(scaninfo[qq].scan->start)/80;w<=end/80;w++)\r
                                {\r
                                        //strcat(scratch1, "+");\r
@@ -1670,16 +1687,9 @@ void MM_DumpData (global_game_variables_t *gvar)
 #ifdef __BORLANDC__\r
        free(gvar->mm.nearheap);\r
 #endif\r
-#ifdef __BORLANDC__\r
-               dumpfile = fopen ("mmdump.16b","w");\r
-#endif\r
-#ifdef __WATCOMC__\r
-               dumpfile = fopen ("mmdump.16w","w");\r
-#endif\r
-       if (!dumpfile){\r
-               printf("MM_DumpData: Couldn't open MMDUMP.16!\n");\r
-               return;\r
-       }\r
+       dumpfile = fopen (gvar->handle.datadumpfilename, "w");\r
+       if (!dumpfile)\r
+               Quit (gvar, "MM_DumpData: Couldn't open MMDUMP.16!\n");\r
 \r
        lowest = -1;\r
        do\r
@@ -1717,8 +1727,16 @@ void MM_DumpData (global_game_variables_t *gvar)
 \r
        } while (lowest != 0xffff);\r
 \r
-       fclose(dumpfile);\r
-       printf("MMDUMP.16 created.\n");\r
+       fclose (dumpfile);\r
+\r
+       //reset filename\r
+#ifdef __BORLANDC__\r
+       strcpy(gvar->handle.datadumpfilename, "mmdump.16b");\r
+#endif\r
+#ifdef __WATCOMC__\r
+       strcpy(gvar->handle.datadumpfilename, "mmdump.16w");\r
+#endif\r
+//00   printf ("MMDUMP.16 created.\n");\r
 }\r
 \r
 //==========================================================================\r