X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2F16_mm.h;h=083a4d299c9edac773a18e1e40688c40b9e62d32;hb=1287746074527ec8af4c6ca515802e5a72d0ef05;hp=6b1c535e366298d48667744b58363b69a18e3ac0;hpb=f4e34c1b65530dd69c17cac12fee72337d8a256e;p=16.git diff --git a/src/lib/16_mm.h b/src/lib/16_mm.h index 6b1c535e..083a4d29 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,22 +23,26 @@ #include #include -#include "src/lib/lib_head.h" +//#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" -//****#if 1 // 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 +#ifdef __DEBUG__ // 1 == Debug/Dev ; 0 == Production/final +#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 + //-------- @@ -50,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 @@ -79,23 +84,18 @@ #define XMS_FREEUMB 0x11 //========================================================================== -//__segment seg; -typedef void __based(__self) * memptr; //__based(seg) * memptr; typedef struct { dword nearheap,farheap,EMSmem,XMSmem,mainmem; - boolean mmstarted, bombonerror, mmerror; + //__segment segu; } mminfotype; //========================================================================== -/*extern mminfotype mminfo; -extern memptr bufferseg; -extern boolean mmerror; - extern void (* beforesort) (void); -extern void (* aftersort) (void);*/ +extern void (* aftersort) (void); +extern void (* XMSaddr) (void); // far pointer to XMS driver //========================================================================== @@ -112,20 +112,32 @@ extern void (* aftersort) (void);*/ #define PURGEMASK 0xfffc #define BASEATTRIBUTES 0 // unlocked, non purgable -#define MAXUMBS 10 +#define MAXUMBS 12 +#define MAPPAGES 4//mm->EMSpagesmapped typedef struct mmblockstruct { - unsigned start,length; + //word start,length; + word start; dword length; unsigned attributes; memptr *useptr; // pointer to the segment start - struct mmblockstruct far *next; + struct mmblockstruct huge *next; } mmblocktype; -//#define GETNEWBLOCK {if(!(mmnew=mmfree))Quit("MM_GETNEWBLOCK: No free blocks!");mmfree=mmfree->next;} -#define GETNEWBLOCK {if(!mmfree)MML_ClearBlock();mmnew=mmfree;mmfree=mmfree->next;} -#define FREEBLOCK(x) {*x->useptr=NULL;x->next=mmfree;mmfree=x;} +typedef struct +{ + memptr bufferseg; + boolean mmstarted, bombonerror, mmerror; + void huge *farheap; + void *nearheap; + //byte EMS_status; + 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; /* ============================================================================= @@ -135,11 +147,6 @@ typedef struct mmblockstruct ============================================================================= */ -/*static mminfotype mminfo; -static memptr bufferseg; - -static void (* beforesort) (void); -static void (* aftersort) (void);*/ /* ============================================================================= @@ -149,55 +156,36 @@ static void (* aftersort) (void);*/ ============================================================================= */ -/*static void huge *hugeheap; -static void far *farheap; -static void *nearheap; - -static mmblocktype far mmblocks[MAXBLOCKS] - ,far *mmhead,far *mmfree,far *mmrover,far *mmnew; - - -static unsigned totalEMSpages,freeEMSpages,EMSpageframe,EMSpagesmapped,EMShandle; -static unsigned int EMSVer; - -static void (* XMSaddr) (void); // far pointer to XMS driver - -static unsigned numUMBs,UMBbase[MAXUMBS];*/ - -//========================================================================== - -void MM_Startup (void); -void MM_Shutdown (void); - -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); - -void MM_ShowMemory (void); - -dword MM_UnusedMemory (void); -dword MM_TotalFree (void); -void MM_Report(void); -//int MM_EMSVer(void); - -void MM_BombOnError (boolean bomb); - //========================================================================== -// -// 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); +boolean MML_CheckForEMS(void); +byte MML_SetupEMS(mminfo_t *mm); +void MML_ShutdownEMS(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(/*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(/*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); //==========================================================================