; ; File: MemoryMgrPriv.a ; ; Contains: Definitions for Macintosh Assembly Language Memory Manager ; ; Supports multiple heap zones with mixed relocatable and non-relocatable ; storage blocks. ; ; Reorganized from code designed and written by Bud Tribble, 27-Nov-81, ; and maintained and modified by Angeline Lo, Larry Kenyon, ; and Andy Hertzfeld. ; ; Written by: Bud Tribble ; ; Copyright: © 1983-1992 by Apple Computer, Inc., all rights reserved. ; ; Change History (most recent first): ; ; <2> 3/4/92 kc Add pVMGlobals equate. ; <1> 10/2/91 JSM first checked in ; <0> 10/1/91 JSM Created from HeapDefs.a. ; ; Modification history from HeapDefs.a below: ; ; <3> 9/30/91 JSM DonÕt use is32BitClean conditional, all future ROMs will be. ; <2> 9/16/91 JSM Add header. ; <1.4> 7/15/89 CSL Added equ NRBbit. ; <1.3> 3/22/89 CSL moved EQUS MMPRAMloc, MMFlags, and bit settings for MMFlags to ; Private.a. ; <1.2> 2/28/89 CSL Added Jump vector offsets for 24/32 bit memory manager ; <1.1> 11/10/88 CCH Fixed Header. ; <1.0> 11/9/88 CCH Adding to EASE. ; <1.0> 2/10/88 BBM Adding file for the first time into EASEÉ ; <C102> 8/2/86 WRL Changed the default System Zone size to 6k (same as default ; Application Zone size) so that we can allow it to grow ; dynamically during system startup to accommodate an arbitrary ; number of device drivers. ; 4/18/85 JTC Added flag SmartSetSize to control new strategy. <18Apr85> ; 4/14/85 JTC Added flag GrowDown to flag application zone growth downwards. ; <14Apr85> ; 3/11/85 JTC Cut sys heap back to 14.5K, a la, SysHeapSize ; 1/29/85 JTC Added FNGZResrv=3, FGZAlways=2 flag bits, even though shouldn't ; be here UUUGGGGHHHHHHHHHHH ; 1/25/85 LAK Removed equates which were moved to SysEqu.Text. ; 8/12/83 LAK Added ClearBit equate. ; 7/30/83 LAK Added equates for PurgePtr and AllocPtr. Also added equates for ; Flags byte: FNSelCompct,FNoRvrAlloc,FNSelPurge,FRelAtEnd. ; 7/18/83 LAK Removed FreeList stuff completely; removed TLock, TPurge; ; removed Trap macro and check hook offsets. ; 6/21/83 MPH Put FreeList code under assembly switch: FList. ; 6/17/83 MPH Removed moveRelProc from Heap object, inserted spare. ; 6/10/83 MPH Removed Definition of Nil, use Nil from GrafTypes. ; 3/29/83 MPH added purgeProc and moverelProc entries to zone object. ; 3/20/83 MPH changed memory size constants to support 512 K byte machine; ; added PtrMask and HandleMask to allow garbage in high byte of ; ptrs or handles passed to memory manager; removed "checking" ; conditional from ChkZone macro. ; 2/17/83 LAK added dfltStackSize for defltApplLimit. ; BLANKS ON STRING ASIS FNGZResrv EQU 3 FGZAlways EQU 2 ; These constants control conditional assembly. RAMTest EQU 0 ;special RAM nonsense <10May85> GrowDown EQU 0 ;permit ApplZone downward growth <14Apr85> SmartSetSize EQU 1 ;try smarter stratey <18Apr85> ;Checking .Equ 0 ;check arguments and data structures ;Statistics .Equ 0 ;gather statistics on usage ;Robust .Equ 0 ;enables super-robust internal checks ;CountMPs .Equ 0 ;enables counting of master pointers ;DfltFlags .Equ 0 ;Checking is on when zone is init'd MinZone EQU HeapData+(4*MinFree)+(8*dfltMasters) ;Minimum size for Applic. Zone ; ; Heap Zone Default Sizes ; SysZoneSize EQU $1800 ; default System Zone size <C102> AppZoneSize EQU $1800 ; default Application Zone size <C102> ;---------------------------------------------------------------------- ; Macros ; MACRO ;Get theZone into a register GetZ MOVE.L theZone,&Syslst[1] ENDM MACRO ;Set theZone with a register's value SetZ MOVE.L &Syslst[1],theZone ENDM MACRO Equal IF Checking THEN Move.L &Syslst[1],-(SP) Move.L &Syslst[2],-(SP) JSR EqualCheck ENDIF ENDM MACRO Even IF Checking THEN MOVE.L &Syslst[1],-(SP) JSR EvenCheck ENDIF ENDM MACRO Range IF Checking THEN MOVE.L &Syslst[1],-(SP) MOVE.L &Syslst[2],-(SP) MOVE.L &Syslst[3],-(SP) JSR RangeCheck ENDIF ENDM pVMGlobals EQU $B78 ; VM Globals NRBbit EQU $06 ; non-rel. block bit in first byte block header <v1.4> Zone32Flag EQU $1E ; flag to indicate if zone is 32 bit or 24 bit <v1.2> Is32Zone EQU $01 ; value for Zone32Flag to indicate 32 bit Is24Zone EQU $00 ; value for Zone32Flag to indicate 24 bit ZoneJumpV EQU $20 ; offset to jump vector in zone header <v1.2> JSetApplBase EQU 0 ; ( 0) jump vector offset <v1.2> JInitApplZone EQU JSetApplBase+4 ; ( 4) jump vector offset <v1.2> JInitZone EQU JInitApplZone+4 ; ( 8) jump vector offset <v1.2> JGetZone EQU JInitZone+4 ; ( C) jump vector offset <v1.2> JSetZone EQU JGetZone+4 ; (10) jump vector offset <v1.2> JMaxBlock EQU JSetZone+4 ; (14) jump vector offset <v1.2> JPurgeSpace EQU JMaxBlock+4 ; (18) jump vector offset <v1.2> JCompactMem EQU JPurgeSpace+4 ; (1C) jump vector offset <v1.2> JPurgeMem EQU JCompactMem+4 ; (20) jump vector offset <v1.2> JFreeMem EQU JPurgeMem+4 ; (24) jump vector offset <v1.2> JResrvMem EQU JFreeMem+4 ; (28) jump vector offset <v1.2> JMaxMem EQU JResrvMem+4 ; (2C) jump vector offset <v1.2> JSetGrowZone EQU JMaxMem+4 ; (30) jump vector offset <v1.2> JSetApplLimit EQU JSetGrowZone+4 ; (34) jump vector offset <v1.2> JStackSpace EQU JSetApplLimit+4 ; (38) jump vector offset <v1.2> JMaxApplZone EQU JStackSpace+4 ; (3C) jump vector offset <v1.2> JNewPtr EQU JMaxApplZone+4 ; (40) jump vector offset <v1.2> JDisposePtr EQU JNewPtr+4 ; (44) jump vector offset <v1.2> JGetPtrSize EQU JDisposePtr+4 ; (48) jump vector offset <v1.2> JSetPtrSize EQU JGetPtrSize+4 ; (4C) jump vector offset <v1.2> JPtrZone EQU JSetPtrSize+4 ; (50) jump vector offset <v1.2> JNwHandle EQU JPtrZone+4 ; (54) jump vector offset <v1.2> JNewEmptyHandle EQU JNwHandle+4 ; (58) jump vector offset <v1.2> JDsposeHandle EQU JNewEmptyHandle+4 ; (5C) jump vector offset <v1.2> JGetHandleSize EQU JDsposeHandle+4 ; (60) jump vector offset <v1.2> JSetHandleSize EQU JGetHandleSize+4 ; (64) jump vector offset <v1.2> JHandleZone EQU JSetHandleSize+4 ; (68) jump vector offset <v1.2> JRecoverHandle EQU JHandleZone+4 ; (6C) jump vector offset <v1.2> JEmptyHandle EQU JRecoverHandle+4 ; (70) jump vector offset <v1.2> JReAllocHandle EQU JEmptyHandle+4 ; (74) jump vector offset <v1.2> JHlock EQU JReAllocHandle+4 ; (78) jump vector offset <v1.2> JHUnlock EQU JHlock+4 ; (7C) jump vector offset <v1.2> JHPurge EQU JHUnlock+4 ; (80) jump vector offset <v1.2> JHNoPurge EQU JHPurge+4 ; (84) jump vector offset <v1.2> JHRSRC EQU JHNoPurge+4 ; (88) jump vector offset <v1.2> JHNoRSRC EQU JHRSRC+4 ; (8C) jump vector offset <v1.2> JHGetFlags EQU JHNoRSRC+4 ; (90) jump vector offset <v1.2> JHSetFlags EQU JHGetFlags+4 ; (94) jump vector offset <v1.2> JMoreMasters EQU JHSetFlags+4 ; (98) jump vector offset <v1.2> JMoveHHi EQU JMoreMasters+4 ; (9C) jump vector offset <v1.2>