mac-rom/Toolbox/SegmentLoader/SegmentLoaderPatches.a
Elliot Nunn 4325cdcc78 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-12-26 09:52:23 +08:00

81 lines
3.0 KiB
Plaintext

;
; File: SegmentLoaderPatches.a
;
; Contains: Fixes to the Segment Loader
;
; Written by: Scott T Boyd
;
; Copyright: © 1990-1992 by Apple Computer, Inc., all rights reserved.
;
; Change History (most recent first):
;
; <SM2> 5/5/92 stb incorporate the ÔscodÕ-loading patch for the segment loader into
; SegmentLoader.a.
; <6> 2/10/92 JSM Moved this file to SegmentLoader folder, keeping all the old
; revisions.
; <5> 1/14/91 stb & VL; change Get1Resource to also use the limited range.
; <4> 11/15/90 csd & fjs; Reduced the range where 'CODE' gets changed to 'scod'
; from $BFFF-$8000 to $BFFF-$BF00.
; <3> 6/12/90 JSM Add Get1Resource patch, we may take this out again if we decide
; to change the ProcessMgr.
; <2> 6/8/90 stb Forgot to add 4 for the return address.
; <1> 6/7/90 stb first checked in
;
;
load 'StandardEqu.d'
include 'LinkedPatchMacros.a'
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; Force system code to load as 'scod' resources. The Process Mgr. is our distinguished first guest
; of this mechanism. The segment loader thinks itÕs loading a ÔCODEÕ resource. This patch checks
; whether the id is in the reserved range [$BFFF,$BF00]. If so, it replaces ÔCODEÕ with ÔscodÕ on
; the stack and calls on through to _GetResource.
; Rolled into SegmentLoader.a 3/30/92 by stb for SuperMario ROM.
LoadSystemCODE PatchProc _GetResource,(Plus,SE,II,Portable,IIci)
returnAddress EQU 0
theResID EQU returnAddress+4
theResType EQU theResID+2
cmp.l #'CODE',theResType(SP) ; Is LoadCode looking for a CODE resource?
bne.s @GetOnWithIt
cmp.w #$BFFF,theResID(SP) ; Is it in the BFFF - BF00 range reserved for sys code?
bgt.s @GetOnWithIt
cmp.w #$BF00,theResID(SP) ; is it really in the BFFF - BF00 range? <4>
blt.s @GetOnWithIt ; <4>
move.l #'scod',theResType(SP) ; Change CODE to scod
@GetOnWithIt
jmpOld ; Get on with loading the resource
EndProc
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; Same as above patch to GetResource, needed because the ProcessMgr calls Get1Resource to unload segments.
Load1SystemCODE PatchProc _Get1Resource,(Plus,SE,II,Portable,IIci)
returnAddress EQU 0
theResID EQU returnAddress+4
theResType EQU theResID+2
cmp.l #'CODE',theResType(SP) ; Is ProcessMgr looking for a CODE resource?
bne.s @GetOnWithIt
cmp.w #$BFFF,theResID(SP) ; Is it in the BFFF - 8000 range reserved for sys code?
bgt.s @GetOnWithIt
cmp.w #$BF00,theResID(SP) ; is it really in the BFFF - BF00 range? <5>
blt.s @GetOnWithIt ; <5>
move.l #'scod',theResType(SP) ; Change CODE to scod
@GetOnWithIt
jmpOld ; Get on with loading the resource
EndProc
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
END