]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_mm.c
[16_ca needs huge amounts of work and I should remember what needs to be done soon...
[16.git] / src / lib / 16_mm.c
index 67059b39c245d74d1123270f8e2bb4f019b87adf..f5f0770e7bb57e332ab9c202ee08e86c8d2afe78 100755 (executable)
@@ -90,17 +90,18 @@ boolean MML_CheckForEMS(void)
 {
        boolean emmcfems = false;
        word            EMSPageFrame = 0;
+       byte    err=0, str[64];
        static char     emmname[] = "EMMXXXX0"; //fix by andrius4669
        __asm {
                mov     dx,OFFSET emmname       //fix by andrius4669
                mov     ax,0x3d00
-               int     0x21            // try to open EMMXXXX0 device
+               int     EMM_INT         // try to open EMMXXXX0 device
                jc      error
 
                mov     bx,ax
                mov     ax,0x4400
 
-               int     0x21            // get device info
+               int     EMM_INT         // get device info
                jc      error
 
                and     dx,0x80
@@ -108,13 +109,13 @@ boolean MML_CheckForEMS(void)
 
                mov     ax,0x4407
 
-               int     0x21            // get status
+               int     EMM_INT         // get status
                jc      error
                or      al,al
                jz      error
 
                mov     ah,0x3e
-               int     0x21            // close handle
+               int     EMM_INT         // close handle
                jc      error
 
                //
@@ -141,6 +142,7 @@ boolean MML_CheckForEMS(void)
                //
                // EMS is bad
                //
+               mov     err,ah
                mov     emmcfems,0
 #ifdef __BORLANDC__
        }
@@ -159,7 +161,13 @@ boolean MML_CheckForEMS(void)
 #if defined(__DEBUG_PM__) || defined(__DEBUG_MM__)
                printf("MML_CheckForEMS: EMS error No Pageframe!\nAddress detected to be %04x\n", EMSPageFrame);
 #endif
+       }else   if(!emmcfems)// if there is an error and page frame is not 0000
+       {
+               strcpy(str,"MML_CheckForEMS: EMS error ");
+               MM_EMSerr(str, err);
+               printf("%s\n",str);
        }
+
        return(emmcfems);
 }
 
@@ -1142,7 +1150,7 @@ void MM_SetLock(memptr *baseptr, boolean locked, global_game_variables_t *gvar)
 void MM_SortMem(global_game_variables_t *gvar)
 {
        mmblocktype far *scan,far *last,far *next;
-       unsigned        start,length,source,dest;//++++,oldborder;
+       unsigned        start,length,source,dest,oldborder;
        //++++int                       playing;
 
        //
@@ -1160,13 +1168,13 @@ void MM_SortMem(global_game_variables_t *gvar)
                        playing += STARTADLIBSOUNDS;
                        break;
                }
-               MM_SetLock(&(memptr)audiosegs[playing],true);
+               MM_SetLock((memptr *)&audiosegs[playing],true);
        }
 
 
        SD_StopSound();*/
-//     oldborder = bordercolor;
-//     VW_ColorBorder (15);
+       oldborder = gvar->video.bordercolor;
+       gvar->video.bordercolor = modexPalOverscan(15);
 
        if(beforesort)
                beforesort();
@@ -1236,7 +1244,7 @@ void MM_SortMem(global_game_variables_t *gvar)
 //     VW_ColorBorder (oldborder);
 
 /*++++ if(playing)
-               MM_SetLock(&(memptr)audiosegs[playing],false);*/
+               MM_SetLock((memptr *)&audiosegs[playing],false);*/
 }
 
 //==========================================================================
@@ -1259,7 +1267,6 @@ void MM_ShowMemory(global_game_variables_t *gvar)
        //dword wwww;
        byte    scratch[160],scratch0[4096],str[16];//[[[[scratch1[160],
        //byte d = '#';
-//[[[[ VW_SetDefaultColors();
 //[[[[ VW_SetLineWidth(40);
 //++++mh       temp = bufferofs;
 //++++mh       bufferofs = 0;
@@ -1401,6 +1408,46 @@ void MM_ShowMemory(global_game_variables_t *gvar)
 //++++mh       bufferofs = temp;
 }
 
+void MM_ShowMemoryVidVer(global_game_variables_t *gvar)
+{
+       mmblocktype far *scan;
+       unsigned color,temp,x,y;
+       long    end;//,owner;
+       //char    scratch[80],str[10];
+
+       temp = gvar->video.ofs.bufferofs;
+       gvar->video.ofs.bufferofs = gvar->video.ofs.displayofs;
+       scan = gvar->mm.mmhead;
+
+       end = -1;
+
+       while (scan)
+       {
+               if (scan->attributes & PURGEBITS)
+                       color = 5;              // dark purple = purgable
+               else
+                       color = 9;              // medium blue = non purgable
+               if (scan->attributes & LOCKBIT)
+                       color = 12;             // red = locked
+               if (scan->start<=end)
+                       Quit (gvar, "MM_ShowMemory: Memory block order currupted!");
+               end = scan->length-1;
+               y = scan->start/320;
+               x = scan->start%320;
+               VL_Hlin(x,x+end,y,color, &gvar->video.ofs);
+               VL_Plot(x,y,15, &gvar->video.ofs);
+               if (scan->next && scan->next->start > end+1)
+                       VL_Hlin(x+end+1,x+(scan->next->start-scan->start),y,0, &gvar->video.ofs);       // black = free
+
+               scan = scan->next;
+       }
+
+       VL_FadeIn(0,255,&gvar->video.palette,10, &gvar->video);
+       IN_Ack(gvar);
+
+       gvar->video.ofs.bufferofs = temp;
+}
+
 //==========================================================================
 
 /*