return(emmcfems);
}
-
+#ifndef __16_PM__
/*
======================
=
unsigned int EMSVer = 0;
//byte EMS_status;
- unsigned totalEMSpages,freeEMSpages,EMSpageframe,EMSpagesmapped,EMShandle;
- totalEMSpages = freeEMSpages = EMSpageframe = EMSpagesmapped = 0;
+ unsigned totalEMSpages,freeEMSpages,EMSPageFrame,EMSpagesmapped,EMSHandle;
+ totalEMSpages = freeEMSpages = EMSPageFrame = EMSpagesmapped = 0;
__asm {
mov ah,EMS_STATUS
int EMS_INT // find the page frame address
or ah,ah
jnz error
- mov [EMSpageframe],bx
+ mov [EMSPageFrame],bx
mov ah,EMS_GETPAGES
int EMS_INT // find out how much EMS is there
int EMS_INT
or ah,ah
jnz error
- mov [EMShandle],dx
+ mov [EMSHandle],dx
jmp End
#ifdef __BORLANDC__
}
}
gvar->mm.totalEMSpages=totalEMSpages;
gvar->mm.freeEMSpages=freeEMSpages;
- gvar->mm.EMSpageframe=EMSpageframe;
+ gvar->mm.EMSPageFrame=EMSPageFrame;
gvar->mm.EMSpagesmapped=EMSpagesmapped;
- gvar->mm.EMShandle=EMShandle;
- gvar->pm.emm.EMSVer=EMSVer;
+ gvar->mm.EMSHandle=EMSHandle;
+ gvar->mm.EMSVer=EMSVer;
return 0;
}
void MML_ShutdownEMS(global_game_variables_t *gvar)
{
boolean errorflag=false;
- unsigned EMShandle=gvar->mm.EMShandle;
+ unsigned EMSHandle=gvar->mm.EMSHandle;
- if(!EMShandle)
+ if(!EMSHandle)
return;
__asm {
mov ah,EMS_FREEPAGES
- mov dx,[EMShandle]
+ mov dx,[EMSHandle]
int EMS_INT
or ah,ah
jz ok
byte MM_MapEMS(global_game_variables_t *gvar)
{
byte str[160];
- unsigned EMShandle;
+ unsigned EMSHandle;
byte err;
boolean errorflag=false;
int i;
- EMShandle=gvar->mm.EMShandle;
+ EMSHandle=gvar->mm.EMSHandle;
for (i=0;i<4/*MAPPAGES*/;i++)
{
mov ah,EMS_MAPPAGE
mov bx,[i] // logical page
mov al,bl // physical page
- mov dx,[EMShandle] // handle
+ mov dx,[EMSHandle] // handle
int EMS_INT
or ah,ah
jnz error
}
}
gvar->mmi.EMSmem = (i)*0x4000lu;
- //printf(" gvar->mmi.EMSmem=%lu\n", gvar->mmi.EMSmem);
return 0;
}
//END SUB
byte str[160];
byte err;
- word EMShandle;
+ word EMSHandle;
boolean errorflag=false;
int i;
- EMShandle=gvar->mm.EMShandle;
+ EMSHandle=gvar->mm.EMSHandle;
- if(gvar->pm.emm.EMSVer<0x40)
+ if(gvar->mm.EMSVer<0x40)
return 5;
for (i=0;i<MAPPAGES;i++)
mov ah,EMS_MAPXPAGE
mov cx,[i] // logical page
mov al,bl // physical page
- mov dx,[EMShandle] // handle
+ mov dx,[EMSHandle] // handle
int EMS_INT
or ah,ah
jnz error
gvar->mmi.EMSmem = (i)*0x4000lu;
return 0;
}
-
+#endif
//==========================================================================
/*
=======================
*/
-boolean MML_CheckForXMS(global_game_variables_t *gvar)
+boolean MML_CheckForXMS(void)
{
+ //numUMBs = 0;
boolean errorflag=false;
- gvar->mm.numUMBs = 0;
__asm {
mov ax,0x4300
else return true;
}
-
+#ifndef __16_PM__
/*
======================
=
}
}
}
-
+#endif
//==========================================================================
/*
//printf("_FARCORELEFT %lu\n", _FCORELEFT);
#ifdef __WATCOMC__
_fheapgrow();
+ length=_FCORELEFT;//_fcoreleft();//(dword)GetFarFreeSize();//0xffffUL*4UL;
#endif
#ifdef __BORLANDC__
printf("farcoreleft() %lu\n", farcoreleft());
printf("(farcoreleft()+32)-_FCORELEFT %d\n", (sword)((farcoreleft()+32)-_FCORELEFT));
+ length=farcoreleft();//_fcoreleft();//(dword)GetFarFreeSize();//0xffffUL*4UL;
#endif
- length=_FCORELEFT;//_fcoreleft();//(dword)GetFarFreeSize();//0xffffUL*4UL;
start = gvar->mm.farheap = _fmalloc(length);
//start = gvar->mm.farheap = halloc(length, 1);
length -= 16-(FP_OFF(start)&15);
gvar->mmi.mainmem = gvar->mmi.nearheap + gvar->mmi.farheap;
+#ifndef __16_PM__
+ if(!dbg_debugpm) {
//
// detect EMS and allocate up to 64K at page frame
//
gvar->mmi.EMSmem = 0;
//goto emsskip; //0000
- for(i = 1;i <
-#ifdef __WATCOMC__
- __argc
-#endif
-#ifdef __BORLANDC__
- _argc
-#endif
- ;i++)
+ for(i = 1;i < _argc;i++)
{
- if(US_CheckParm(
-#ifdef __WATCOMC__
- __argv[i]
-#endif
-#ifdef __BORLANDC__
- _argv[i]
-#endif
- ,ParmStringsexmm) == 0)
+ if(US_CheckParm(_argv[i],ParmStringsexmm) == 0)
goto emsskip; // param NOEMS
}
if(MML_CheckForEMS())
{
MML_SetupEMS(gvar); // allocate space
- //TODO: EMS4! AND EMS 3.2 MASSIVE DATA HANDLMENT!
- MML_UseSpace(gvar->mm.EMSpageframe,(MAPPAGES)*0x4000lu, gvar);
+ //16_PM: EMS4! AND EMS 3.2 MASSIVE DATA HANDLMENT!
+ MML_UseSpace(gvar->mm.EMSPageFrame,(MAPPAGES)*0x4000lu, gvar);
//if(gvar->pm.emm.EMSVer<0x40)
MM_MapEMS(gvar); // map in used pages
//else
emsskip:
gvar->mmi.XMSmem = 0;
goto xmsskip;//0000
- for(i = 1;i <
-#ifdef __WATCOMC__
- __argc
-#endif
-#ifdef __BORLANDC__
- _argc
-#endif
- ;i++)
+ for(i = 1;i < _argc;i++)
{
- if(US_CheckParm(
-#ifdef __WATCOMC__
- __argv[i]
-#endif
-#ifdef __BORLANDC__
- _argv[i]
-#endif
- ,ParmStringsexmm) == 0)
+ if(US_CheckParm( _argv[i],ParmStringsexmm) == 0)
goto xmsskip; // param NOXMS
}
- if(MML_CheckForXMS(gvar))
+ if(MML_CheckForXMS())
{
MML_SetupXMS(gvar); // allocate as many UMBs as possible
}
+ }
+xmsskip:
+#endif
//
// allocate the misc buffer
//
-xmsskip:
gvar->mm.mmrover = gvar->mm.mmhead; // start looking for space after low block
MM_GetPtr(&(gvar->mm.bufferseg),BUFFERSIZE, gvar);
#endif
#ifdef __BORLANDC__
free(gvar->mm.nearheap);// printf(" near freed\n");
+#endif
+#ifndef __16_PM__
+#ifdef __DEBUG__
+ if(!dbg_debugpm) {
#endif
if(MML_CheckForEMS()){ MML_ShutdownEMS(gvar); }//printf(" EMS freed\n"); }
- if(MML_CheckForXMS(gvar)){ MML_ShutdownXMS(gvar); }//printf(" XMS freed\n"); }
+ if(MML_CheckForXMS()){ MML_ShutdownXMS(gvar); }//printf(" XMS freed\n"); }
+#ifdef __DEBUG__
+ }
+#endif
+#endif
}
//==========================================================================
gvar->mm.mmnew->length = needed;
gvar->mm.mmnew->useptr = baseptr;
//if(gvar->mm.mmnew->useptr==NULL){
-#ifdef __DEBUG__
- printf("baseptr=%04x ", baseptr); printf("useptr=%04x\n", gvar->mm.mmnew->useptr);
- printf("*baseptr=%04x ", *baseptr); printf("*useptr=%04x\n", *(gvar->mm.mmnew->useptr));
- printf("*baseptr=%Fp ", *baseptr); printf("*useptr=%Fp\n", *(gvar->mm.mmnew->useptr));
+#ifdef __DEBUG_MM__
+ printf("MM_GetPtr\n");
+ //%04x
+ printf(" baseptr=%Fp ", baseptr); printf("useptr=%Fp\n", gvar->mm.mmnew->useptr);
+ printf(" *baseptr=%Fp ", *baseptr); printf("*useptr=%Fp\n", *(gvar->mm.mmnew->useptr));
+ printf(" &baseptr=%Fp ", &baseptr); printf("&useptr=%Fp\n", &(gvar->mm.mmnew->useptr));
#endif
//exit(-5); }
gvar->mm.mmnew->attributes = BASEATTRIBUTES;
=====================
*/
+
void MM_SetPurge(memptr *baseptr, int purge, global_game_variables_t *gvar)
{
//huge mmblocktype huge *start;
void MM_Report_(global_game_variables_t *gvar)
{
printf("========================================\n");
- printf(" MM_Report\n");
+ printf(" MM_Report_\n");
printf("========================================\n");
if(MML_CheckForEMS())
{
- printf(" LIMEMS\n");
- printf(" EMM v%x.%x available\n", gvar->pm.emm.EMSVer>>4,gvar->pm.emm.EMSVer&0x0F);
- printf(" totalEMSpages: %u ", gvar->mm.totalEMSpages); printf("freeEMSpages: %u\n", gvar->mm.freeEMSpages);
- printf(" EMSpageframe: %x\n", gvar->mm.EMSpageframe);
+ printf(" %cLIMEMS %u\n", 0xC9, gvar->pm.emm.EMSPresent);
+ printf(" %c%cEMM v%x.%x available\n", 0xC7, 0xC4, gvar->pm.emm.EMSVer>>4,gvar->pm.emm.EMSVer&0x0F);
+ printf(" %c%ctotalEMSpages: %u ", 0xC7, 0xC4, gvar->pm.emm.totalEMSpages); printf("freeEMSpages: %u\n", gvar->pm.emm.freeEMSpages);
+ printf(" %c%cEMSPageFrame: %04x\n", 0xC7, 0xC4, gvar->pm.emm.EMSPageFrame);
+ printf(" %c%cEMSmem: %lu\n", 0xD3, 0xC4, gvar->mmi.EMSmem);
}
- if(MML_CheckForXMS(gvar))
+ if(MML_CheckForXMS())
{
- printf(" XMS\n");
- printf(" XMSaddr: %X\n", *XMSaddr);
+ printf(" %cXMS %u\n", 0xC9, gvar->pm.xmm.XMSPresent);
+ printf(" %c%cXMS v%x.%x available\n", 0xC7, 0xC4, XMSVer>>8,XMSVer&0x0F);
+ printf(" %c%cXMSDriver: %Fp\n", 0xC7, 0xC4, XMSDriver);
+ printf(" %c%cXMSHandle: %04x\n", 0xC7, 0xC4, gvar->pm.xmm.XMSHandle);
+ printf(" %c%cXMSmem: %lu\n", 0xD3, 0xC4, gvar->mmi.XMSmem);
}
- printf("near: %lu ", gvar->mmi.nearheap); printf("far: %lu\n", gvar->mmi.farheap); if(MML_CheckForEMS())
- printf("EMSmem: %lu ", gvar->mmi.EMSmem); if(MML_CheckForXMS(gvar)) printf("XMSmem: %lu", gvar->mmi.XMSmem); printf("\n");
+ printf(" %cConv. %u\n", 0xC9, gvar->pm.mm.MainPresent); DebugMemory_(gvar, 0);
//printf("mainmem: %lu\n", gvar->mmi.mainmem);
- printf("Total convmem: %lu ", gvar->mmi.mainmem); printf("TotalFree: %lu ", MM_TotalFree(gvar)); printf("TotalUsed: %lu\n", gvar->mmi.mainmem+gvar->mmi.EMSmem+gvar->mmi.XMSmem+gvar->mmi.XMSmem);
- printf(" UnusedMemory: %lu\n", MM_UnusedMemory(gvar));
+ //printf("Total convmem: %lu ", gvar->mmi.mainmem); printf("TotalFree: %lu ", MM_TotalFree(gvar)+gvar->mmi.EMSmem+gvar->mmi.XMSmem+gvar->mmi.XMSmem); printf("TotalUsed: %lu\n", gvar->mmi.mainmem);
+ //printf(" UnusedMemory: %lu\n", MM_UnusedMemory(gvar));
+ printf("nearheap: %lu ", gvar->mmi.nearheap); printf("farheap: %lu\n", gvar->mmi.farheap);
}
//==========================================================================
gvar->mm.mmfree=x;
}*/
+void xms_call(byte v, global_game_variables_t *gvar)
+{
+ dword XMSDriver = gvar->pm.xmm.XMSDriver;
+ __asm {
+ mov ah,[v]
+ call [DWORD PTR XMSDriver]
+ }
+}
+
/*void MM_seguin(void)
{
__asm {