mac-rom/Patches/ProcessManagerSegmentTweaks.a
Elliot Nunn 0ba83392d4 Bring in CubeE sources
Resource forks are included only for .rsrc files. These are DeRezzed into their data fork. 'ckid' resources, from the Projector VCS, are not included.

The Tools directory, containing mostly junk, is also excluded.
2017-09-20 18:04:16 +08:00

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