mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2024-12-22 23:29:27 +00:00
70 lines
2.3 KiB
Plaintext
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<65>s 7 Up code.
|
|||
|
;
|
|||
|
; Written by: Dean Yu
|
|||
|
;
|
|||
|
; Copyright: <09> 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<73>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<73>t work because they
|
|||
|
; come in before the decompression hooks are installed. For each Process Manager
|
|||
|
; segment in our list, find out it<69>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 <20>em all
|
|||
|
sf ResLoad ; Don<6F>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<6F>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
|