X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2F16_mm.h;h=083a4d299c9edac773a18e1e40688c40b9e62d32;hb=1287746074527ec8af4c6ca515802e5a72d0ef05;hp=38279368a0694aceabf9888ebdaa765248a57850;hpb=86a3bdcff4baaa723755ec3bfa1417696aa9ff1b;p=16.git diff --git a/src/lib/16_mm.h b/src/lib/16_mm.h index 38279368..083a4d29 100644 --- a/src/lib/16_mm.h +++ b/src/lib/16_mm.h @@ -25,21 +25,24 @@ #include //#include #include "src/lib/16_head.h" +#include "src/lib/modex16.h" +//#include "src/lib/16_ca.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 :%ld bytes" +#define OUT_OF_MEM_MSG "MM_GetPtr: Out of memory!\nYou were short :%lu bytes" #else #define OUT_OF_MEM_MSG "\npee\n" #endif -#define SAVENEARHEAP 0x400 // space to leave in data segment -#define SAVEFARHEAP 0 // space to leave in far heap +#define SAVENEARHEAP 0x200 // space to leave in data segment +#define SAVEFARHEAP 0x400 // space to leave in far heap #define BUFFERSIZE 0x1000 // miscelanious, allways available buffer -#define MAXBLOCKS 600 +#define MAXBLOCKS 720 + //-------- @@ -51,6 +54,7 @@ #define EMS_GETPAGES 0x42 #define EMS_ALLOCPAGES 0x43 #define EMS_MAPPAGE 0x44 +#define EMS_MAPXPAGE 0x50 #define EMS_FREEPAGES 0x45 #define EMS_VERSION 0x46 @@ -80,13 +84,11 @@ #define XMS_FREEUMB 0x11 //========================================================================== -//I hope this is correct! -//__segment seg; -typedef void __based(__self) * memptr; //__based(seg) * memptr; typedef struct { - dword nearheap,farheap/*,hugeheap*/,EMSmem,XMSmem,mainmem; + dword nearheap,farheap,EMSmem,XMSmem,mainmem; + //__segment segu; } mminfotype; //========================================================================== @@ -111,11 +113,12 @@ extern void (* XMSaddr) (void); // far pointer to XMS driver #define BASEATTRIBUTES 0 // unlocked, non purgable #define MAXUMBS 12 +#define MAPPAGES 4//mm->EMSpagesmapped typedef struct mmblockstruct { - unsigned start,length; - //dword start,length; + //word start,length; + word start; dword length; unsigned attributes; memptr *useptr; // pointer to the segment start struct mmblockstruct huge *next; @@ -126,12 +129,12 @@ typedef struct { memptr bufferseg; boolean mmstarted, bombonerror, mmerror; - //void huge *hugeheap; void huge *farheap; - void *nearheap; + void *nearheap; + //byte EMS_status; unsigned totalEMSpages,freeEMSpages,EMSpageframe,EMSpagesmapped,EMShandle; unsigned int EMSVer; - unsigned numUMBs,UMBbase[MAXUMBS]; + word numUMBs,UMBbase[MAXUMBS]; //dword numUMBs,UMBbase[MAXUMBS]; mmblocktype huge mmblocks[MAXBLOCKS],huge *mmhead,huge *mmfree,huge *mmrover,huge *mmnew; } mminfo_t; @@ -156,13 +159,14 @@ typedef struct //========================================================================== boolean MML_CheckForEMS(void); -unsigned MML_SetupEMS(mminfo_t *mm); +byte MML_SetupEMS(mminfo_t *mm); void MML_ShutdownEMS(mminfo_t *mm); -unsigned MM_MapEMS(mminfo_t *mm); +byte MM_MapEMS(mminfo_t *mm, mminfotype *mmi); +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(unsigned segstart, dword seglength, mminfo_t *mm); +void MML_UseSpace(/*d*/word segstart, dword seglength, mminfo_t *mm); void MML_ClearBlock(mminfo_t *mm); void MM_Startup(mminfo_t *mm, mminfotype *mmi); @@ -173,11 +177,12 @@ 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(mminfo_t *mm); +void MM_ShowMemory(/*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(mminfo_t *mm, mminfotype *mmi); -//int MM_EMSVer(void); +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);