mirror of
https://github.com/elliotnunn/supermario.git
synced 2025-02-17 21:30:24 +00:00
115 lines
4.5 KiB
C
115 lines
4.5 KiB
C
/*
|
|
File: Zone.h
|
|
|
|
Contains: Information needed by heap management routines, regardless of whether we
|
|
are in 24-bit or 32-bit zone. Mode specific information is in Zone24.h
|
|
and Zone32.h.
|
|
|
|
Written by: Phil Goldman
|
|
|
|
Copyright: © 1986-1991 by Apple Computer, Inc., all rights reserved.
|
|
|
|
Change History (most recent first):
|
|
|
|
<6> 4/9/91 DFH VL, #83672 : Added GetProcessMgrHiMaxBlock vector definitions.
|
|
<5> 4/7/91 DFH gbm, WS#JC-PM-005 : Added MIN_PHYSICAL_SIZE_EITHER_MODE.
|
|
<4> 3/14/91 DFH gbm,#82504, #82681, #83168, #83182, #83207: Removed
|
|
GUARANTEED_SYSHEAP_FREE_CONTIGUOUS_SPACE.
|
|
<3> 2/21/91 DFH dba,#82504, #82681, #83168, #83182, #83207: Added
|
|
GetSystemHiFreeBytes vector. need to grow.
|
|
<0> x/xx/86 PYG New Today.
|
|
|
|
*/
|
|
|
|
/* Macros for heap access */
|
|
#define SIZEOF_ZONE_HEADER (sizeof(Zone) - sizeof(short))
|
|
#define SIZEOF_24BIT_BLOCK_HEADER ((unsigned int) 8)
|
|
#define SIZEOF_32BIT_BLOCK_HEADER ((unsigned int) 12)
|
|
#define HEAP_FREE_SPACE(theZone) ((theZone)->zcbFree)
|
|
#define FNoRvrAlloc (1<<5)
|
|
#define ZONE_BYTES_PER_MP (8*1024)
|
|
#define MIN_PHYSICAL_SIZE_EITHER_MODE ((unsigned int) 16)
|
|
#define MIN_LOGICAL_SIZE ((unsigned int) 4)
|
|
#define SIZEOF_SMALLEST_PTR_DATUM MIN_LOGICAL_SIZE
|
|
#define MAX_LOGICAL_SIZE (0xFFFFFFF0)
|
|
#define MINGROWTH ((unsigned int) 16)
|
|
#define MAX_TOO_FEW_SYS_MPS ((unsigned int) 32)
|
|
#define EXTRA_SLOP_FOR_NEXT_TIME (10*1024)
|
|
|
|
/* maxSize that works both in 24-bit and 32-bit modes
|
|
* NOTE: This must not be too big, since the memory manager automatically
|
|
* adds the block header size to this value, which would cause it to wrap
|
|
* to a small positive number.
|
|
*/
|
|
#define compactAll 0xFFFFFF00
|
|
|
|
/* Typedef that zone files can share */
|
|
typedef unsigned long FreeBlockAddr; /* address of free block */
|
|
|
|
/* Function prototypes */
|
|
typedef pascal long (*GZProcPtr)(long cbNeeded);
|
|
|
|
pascal long ProcessMgr_GZProc_Glue(u_size cbNeeded)
|
|
extern;
|
|
|
|
pascal long ProcessMgrSysGZProc(u_size cbNeeded)
|
|
extern;
|
|
|
|
void MakeNonRelocatable24(Ptr *);
|
|
void MakeNonRelocatable32(Ptr *);
|
|
|
|
/* Function prototypes for vectored routines */
|
|
typedef u_size (*zvr1Ptr) (Handle, Boolean *);
|
|
typedef void (*zvr2Ptr) (THz pZone, u_size cbNeeded);
|
|
typedef void (*zvr3Ptr) (THz oldZone, THz newZone);
|
|
typedef long (*zvr4Ptr) (u_size cbNeeded);
|
|
typedef Ptr (*zvr5Ptr) (Ptr ceilingPtr);
|
|
typedef FreeBlockAddr (*zvr6Ptr) (u_size size, Ptr lockPtr);
|
|
typedef long (*zvr7Ptr) (FreeBlockAddr pTopBlock);
|
|
typedef FreeBlockAddr (*zvr8Ptr) (FreeBlockAddr pBlockHdr, u_size newSize);
|
|
typedef FreeBlockAddr (*zvr9Ptr) (FreeBlockAddr pBlock, Handle *pHandle,u_size sizeNeeded, short sizeCorrection);
|
|
typedef Ptr (*zvr10Ptr) (THz pZone);
|
|
typedef u_size (*zvr11Ptr) (void);
|
|
typedef u_size (*zvr12Ptr) (void);
|
|
|
|
/* Macros to get vectored routines */
|
|
#define GetProcessMgrLoFreeBytes (*vrGetProcessMgrLoFreeBytes)
|
|
#define ExtendZone (*vrExtendZone)
|
|
#define MoveZone (*vrMoveZone)
|
|
#define ShrinkProcessMgrZone (*vrShrinkProcessMgrZone)
|
|
#define GetLockPtr (*vrGetLockPtr)
|
|
#define GetHighestLargeFreeBlock (*vrGetHighestLargeFreeBlock)
|
|
#define GetTopBlockSize (*vrGetTopBlockSize)
|
|
#define FreeTop (*vrFreeTop)
|
|
#define ChipOffRelocFromFree (*vrChipOffRelocFromFree)
|
|
#define ZoneMPBlockPtr (*vrZoneMPBlockPtr)
|
|
#define GetSystemHiFreeBytes (*vrGetSystemHiFreeBytes)
|
|
#define GetProcessMgrHiMaxBlock (*vrGetProcessMgrHiMaxBlock)
|
|
|
|
/* Import the vectors */
|
|
extern zvr1Ptr vrGetProcessMgrLoFreeBytes;
|
|
extern zvr2Ptr vrExtendZone;
|
|
extern zvr3Ptr vrMoveZone;
|
|
extern zvr4Ptr vrShrinkProcessMgrZone;
|
|
extern zvr5Ptr vrGetLockPtr;
|
|
extern zvr6Ptr vrGetHighestLargeFreeBlock;
|
|
extern zvr7Ptr vrGetTopBlockSize;
|
|
extern zvr8Ptr vrFreeTop;
|
|
extern zvr9Ptr vrChipOffRelocFromFree;
|
|
extern zvr10Ptr vrZoneMPBlockPtr;
|
|
extern zvr11Ptr vrGetSystemHiFreeBytes;
|
|
extern zvr12Ptr vrGetProcessMgrHiMaxBlock;
|
|
|
|
/* Import the non-vectored routines */
|
|
extern void InitVectorTable24(void);
|
|
extern void InitVectorTable32(void);
|
|
|
|
/* Exports */
|
|
void InitHeaps(void);
|
|
pascal long MyGrowZone(unsigned long);
|
|
u_size ProcessMgrMaxBlock(void);
|
|
u_size StraddleBlockSize(u_size *, u_size *, Handle, Boolean *);
|
|
void ReclaimSpaceIfSysHeapLow(Handle *);
|
|
#define LogicalToPhysicalSize(size) (size) += (In32BitMode) ? SIZEOF_32BIT_BLOCK_HEADER : SIZEOF_24BIT_BLOCK_HEADER;
|
|
#define PhysicalToLogicalSize(size) (size) -= (In32BitMode) ? SIZEOF_32BIT_BLOCK_HEADER : SIZEOF_24BIT_BLOCK_HEADER;
|