X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2F16_mm.h;h=7fb17a441a2b1fae3637752f4884a4ec41655c5a;hb=b6dd51c3b756f09551ea2c731b7aaf370676617a;hp=ff60c63fd95c051d7470f14a0d0be46c05a84770;hpb=1d18e37e88759bbd3ecc829766f29e695ef24c55;p=16.git diff --git a/src/lib/16_mm.h b/src/lib/16_mm.h old mode 100644 new mode 100755 index ff60c63f..7fb17a44 --- a/src/lib/16_mm.h +++ b/src/lib/16_mm.h @@ -23,25 +23,38 @@ #include #include -//#include #include "src/lib/16_head.h" -#include "src/lib/modex16.h" -//#include "src/lib/16_ca.h" +#include "src/lib/16_hc.h" +//#include "src/lib/modex16.h" //++++mh #include "src/lib/16_in.h" #ifdef __DEBUG__ // 1 == Debug/Dev ; 0 == Production/final -#define OUT_OF_MEM_MSG "MM_GetPtr: Out of memory!\nYou were short :%lu bytes" +#define OUT_OF_MEM_MSG "MM_GetPtr: Out of memory!\nYou were short :%lu bytes\n" #else #define OUT_OF_MEM_MSG "\npee\n" #endif +//#define GETNEWBLOCK {if(!(mmnew=mmfree))Quit("MM_GETNEWBLOCK: No free blocks!") ;mmfree=mmfree->next;} +#define GETNEWBLOCK {if(!mm->mmfree)MML_ClearBlock(mm);mm->mmnew=mm->mmfree;mm->mmfree=mm->mmfree->next;} -#define SAVENEARHEAP 0x400 // space to leave in data segment -#define SAVEFARHEAP 0//x4000 // space to leave in far heap +#define FREEBLOCK(x) {*x->useptr=NULL;x->next=mm->mmfree;mm->mmfree=x;} + +#define AARED "\x1b[41;31m" +#define AABLUE "\x1b[44;34m" +#define AAGREEN "\x1b[42;32m" +#define AAYELLOW "\x1b[43;33m" +#define AAGREY "\x1b[47;37m" +#define AABLACK "\x1b[40;30m" +#define AAWHITE "\x1b[47;37m" +#define AAMAGENTA "\x1b[45;35m" +#define AARESET "\x1b[0m" + +#define SAVENEARHEAP 0x200 // space to leave in data segment +#define SAVEFARHEAP 0//x400 // space to leave in far heap #define BUFFERSIZE 0x1000 // miscelanious, allways available buffer -#define MAXBLOCKS 600//720 +#define MAXBLOCKS 1024 @@ -84,15 +97,10 @@ #define XMS_FREEUMB 0x11 //========================================================================== -//I hope this is correct! -//__segment seg; -typedef void __based(__self) *memptr; //__based(seg) * memptr; typedef struct { dword nearheap,farheap,EMSmem,XMSmem,mainmem; - //word __based(__segname("_CODE")) segu; -// } mminfotype; //========================================================================== @@ -122,10 +130,8 @@ extern void (* XMSaddr) (void); // far pointer to XMS driver typedef struct mmblockstruct { word start,length; - //dword start,length; - //word start; - //dword length; - //byte segm; //how many 64kb segment blocks it takes up if there is many data! + //word start; dword length; + word blob; //for data larger than 64k unsigned attributes; memptr *useptr; // pointer to the segment start struct mmblockstruct huge *next; @@ -137,7 +143,12 @@ typedef struct memptr bufferseg; boolean mmstarted, bombonerror, mmerror; void huge *farheap; - void *nearheap; +#ifdef __BORLANDC__ + void *nearheap; +#endif +#ifdef __WATCOMC__ + void __near *nearheap; +#endif //byte EMS_status; unsigned totalEMSpages,freeEMSpages,EMSpageframe,EMSpagesmapped,EMShandle; unsigned int EMSVer; @@ -173,7 +184,7 @@ byte MM_MapXEMS(mminfo_t *mm, mminfotype *mmi); boolean MML_CheckForXMS(mminfo_t *mm); void MML_SetupXMS(mminfo_t *mm, mminfotype *mmi); void MML_ShutdownXMS(mminfo_t *mm); -void MML_UseSpace(/*d*/word segstart, dword seglength, mminfo_t *mm); +void MML_UseSpace(word segstart, dword seglength, mminfo_t *mm); void MML_ClearBlock(mminfo_t *mm); void MM_Startup(mminfo_t *mm, mminfotype *mmi); @@ -184,15 +195,15 @@ void MM_FreePtr(memptr *baseptr, mminfo_t *mm); void MM_SetPurge(memptr *baseptr, int purge, mminfo_t *mm); void MM_SetLock(memptr *baseptr, boolean locked, mminfo_t *mm); void MM_SortMem(mminfo_t *mm); -void MM_ShowMemory(/*page_t *page, */mminfo_t *mm); +void MM_ShowMemory(global_game_variables_t *gvar,/*page_t *page, */mminfo_t *mm); void MM_DumpData(mminfo_t *mm); dword MM_UnusedMemory(mminfo_t *mm); dword MM_TotalFree(mminfo_t *mm); void MM_Report(/*page_t *page, */mminfo_t *mm, mminfotype *mmi); static void MM_EMSerr(byte *stri, byte err); void MM_BombOnError(boolean bomb, mminfo_t *mm); -void MM_GetNewBlock(mminfo_t *mm); -void MM_FreeBlock(mmblocktype *x, mminfo_t *mm); +//void MM_GetNewBlock(mminfo_t *mm); +//void MM_FreeBlock(mmblocktype *x, mminfo_t *mm); //==========================================================================