mac-rom/Patches/ProcessManagerSegmentTweaks.a

70 lines
2.3 KiB
Plaintext

;
; File: ProcessManagerSegmentTweaks.a
;
; Contains: Code to do smarter loading of Process Manager segments to reduce
; system heap fragmentation. Based on GregÕs 7 Up code.
;
; Written by: Dean Yu
;
; Copyright: © 1991 by Apple Computer, Inc., all rights reserved.
;
; Change History (most recent first):
;
; <1> 12/16/91 DTY first checked in
;
; To do: Take decompression slop into account (this doesnÕt happen yet, but it might)
;
load 'StandardEqu.d'
include 'LinkedPatchMacros.a'
;
; Loading these segments lower in the system heap helps reduce fragmentation of the
; system heap. Preloading resources from the System file doesnÕt work because they
; come in before the decompression hooks are installed. For each Process Manager
; segment in our list, find out itÕs size, reserve enough space for it, and load
; it low in the heap.
;
kProcessManagerSegmentType equ 'scod' ; Process Manager segment resource type
LoadProcessManagerSegmentsLowerInSysHeap InstallProc (Plus,SE,II,IIci,Portable)
subq #2,sp
_CurResFile ; Remember the current resource file
clr.w -(sp)
_UseResFile ; Work on the System file
move.b ResLoad,-(sp) ; Save current resource load state
lea ProcessManagerSegmentTable,a4 ; Table of Process Manager segments to load low
@loadLoop
move.w (a4)+,d7 ; Get the segment number
bz.s @doneWithSegments ; Did Õem all
sf ResLoad ; DonÕt load in resources
subq #8,sp ; Space for _SizeResource result too
move.l #kProcessManagerSegmentType,-(sp)
move.w d7,-(sp)
_Get1Resource
_SizeRsrc ; Find out how big it is
move.l (sp)+,d0 ; Get the size
_ResrvMem ,Sys ; Make some space low in the heap
st ResLoad ; Load it in for real now
subq #4,sp
move.l #kProcessManagerSegmentType,-(sp)
move.w d7,-(sp)
_Get1Resource ; Load it in
addq #4,sp ; We donÕt really care about the resource
bra.s @loadLoop
@doneWithSegments
move.b (sp)+,ResLoad ; Restore resource load state
_UseResFile ; The current resource file is on the stack
rts
ProcessManagerSegmentTable
dc.w $BFAC ; MiscSeg
dc.w $BFB0 ; KernelSeg
dc.w $BFB2 ; EPPCSeg
dc.w 0 ; End of table
EndProc
End