supermario/base/SuperMarioProj.1994-02-09/Patches/ProcessManagerSegmentTweaks.a
2019-06-29 23:17:50 +08:00

70 lines
2.3 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;
; File: ProcessManagerSegmentTweaks.a
;
; Contains: Code to do smarter loading of Process Manager segments to reduce
; system heap fragmentation. Based on Gregs 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 doesnt 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 doesnt work because they
; come in before the decompression hooks are installed. For each Process Manager
; segment in our list, find out its 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 ; Dont 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 dont 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