X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2F16_mm.h;h=8f064ce09d6e5363691704c288c8c8705026b2ce;hb=c3ce6abee3c0bcd794b948b897980843b6378173;hp=663c7df9b167f11af101d6a9b99f26fb054936b8;hpb=866232d8ee296189ab972a4c99c140dbe32c3353;p=16.git diff --git a/src/lib/16_mm.h b/src/lib/16_mm.h index 663c7df9..8f064ce0 100644 --- a/src/lib/16_mm.h +++ b/src/lib/16_mm.h @@ -1,4 +1,4 @@ -/* Catacomb Armageddon Source Code +/* Catacomb Apocalypse Source Code * Copyright (C) 1993-2014 Flat Rock Software * * This program is free software; you can redistribute it and/or modify @@ -23,17 +23,18 @@ #include #include -#include "src/lib/lib_head.h" +//#include +#include "src/lib/16_head.h" //++++mh #include "src/lib/16_in.h" -//****#if 1 // 1 == Debug/Dev ; 0 == Production/final +#ifdef __DEBUG__ // 1 == Debug/Dev ; 0 == Production/final #define OUT_OF_MEM_MSG "MM_GetPtr: Out of memory!\nYou were short :%ld bytes" -//****#else -//****#define OUT_OF_MEM_MSG "\npee\n" -//****#endif +#else +#define OUT_OF_MEM_MSG "\npee\n" +#endif -#define SAVENEARHEAP 0x400 // space to leave in data segment +#define SAVENEARHEAP 0x200 // space to leave in data segment #define SAVEFARHEAP 0 // space to leave in far heap #define BUFFERSIZE 0x1000 // miscelanious, allways available buffer @@ -79,58 +80,109 @@ #define XMS_FREEUMB 0x11 //========================================================================== - -typedef void /*_seg*/ * memptr; +//I hope this is correct! +//__segment seg; +typedef void __based(__self) * memptr; //__based(seg) * memptr; typedef struct { - long nearheap,farheap,EMSmem,XMSmem,mainmem; + dword nearheap,farheap,EMSmem,XMSmem,mainmem; } mminfotype; //========================================================================== -extern mminfotype mminfo; -extern memptr bufferseg; -extern boolean mmerror; - extern void (* beforesort) (void); extern void (* aftersort) (void); +extern void (* XMSaddr) (void); // far pointer to XMS driver //========================================================================== -void MM_Startup (void); -void MM_Shutdown (void); -void MM_MapEMS (void); +/* +============================================================================= + + LOCAL INFO -void MM_GetPtr (memptr *baseptr,dword size); -void MM_FreePtr (memptr *baseptr); +============================================================================= +*/ -void MM_SetPurge (memptr *baseptr, int purge); -void MM_SetLock (memptr *baseptr, boolean locked); -void MM_SortMem (void); +#define LOCKBIT 0x80 // if set in attributes, block cannot be moved +#define PURGEBITS 3 // 0-3 level, 0= unpurgable, 3= purge first +#define PURGEMASK 0xfffc +#define BASEATTRIBUTES 0 // unlocked, non purgable -void MM_ShowMemory (void); +#define MAXUMBS 12 -long MM_UnusedMemory (void); -long MM_TotalFree (void); +typedef struct mmblockstruct +{ + word start,length,segm; + //dword start,length; + //word start; + //dword length; + ///word segm; //how many 64kb segment blocks it takes up if there is many data! + unsigned attributes; + memptr *useptr; // pointer to the segment start + struct mmblockstruct huge *next; +} mmblocktype; -void MM_BombOnError (boolean bomb); -//========================================================================== +typedef struct +{ + memptr bufferseg; + boolean mmstarted, bombonerror, mmerror; + void huge *farheap; + void *nearheap; + unsigned totalEMSpages,freeEMSpages,EMSpageframe,EMSpagesmapped,EMShandle; + unsigned int EMSVer; + word numUMBs,UMBbase[MAXUMBS]; + //dword numUMBs,UMBbase[MAXUMBS]; + mmblocktype huge mmblocks[MAXBLOCKS],huge *mmhead,huge *mmfree,huge *mmrover,huge *mmnew; +} mminfo_t; -// -// local prototypes -// +/* +============================================================================= -boolean MML_CheckForEMS (void); -void MML_ShutdownEMS (void); -void MM_MapEMS (void); -boolean MML_CheckForXMS (void); -void MML_ShutdownXMS (void); -void MML_UseSpace (unsigned segstart, unsigned seglength); -void MML_ClearBlock (void); + GLOBAL VARIABLES + +============================================================================= +*/ + + +/* +============================================================================= + + LOCAL VARIABLES + +============================================================================= +*/ + +//========================================================================== -int US_CheckParm(char *parm,char **strings); +boolean MML_CheckForEMS(void); +unsigned MML_SetupEMS(mminfo_t *mm); +void MML_ShutdownEMS(mminfo_t *mm); +unsigned MM_MapEMS(mminfo_t *mm); +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_ClearBlock(mminfo_t *mm); + +void MM_Startup(mminfo_t *mm, mminfotype *mmi); +void MM_Shutdown(mminfo_t *mm); + +void MM_GetPtr(memptr *baseptr,dword size, mminfo_t *mm, mminfotype *mmi); +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); +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_BombOnError(boolean bomb, mminfo_t *mm); +void MM_GetNewBlock(mminfo_t *mm); +void MM_FreeBlock(mmblocktype *x, mminfo_t *mm); //==========================================================================