mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2024-11-15 21:10:14 +00:00
0ba83392d4
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.
131 lines
4.3 KiB
Plaintext
131 lines
4.3 KiB
Plaintext
;_______________________________________________________________________________________
|
|
;
|
|
; File: SlotMgrPatchHead.a
|
|
;
|
|
; Contains: slot manager patch for system 7.0
|
|
;
|
|
; Written by: David Wong
|
|
;
|
|
; Copyright: © 1989-1990 by Apple Computer, Inc., all rights reserved.
|
|
;
|
|
; Change History (most recent first):
|
|
;
|
|
; <9> 9/12/90 JWK Added "notAUX" condition to avoid installing linked patch on Mac
|
|
; II's.
|
|
; <8> 8/17/90 DTY Converted to a linked patch. (Greg said that Darin said that I
|
|
; could check it in.)
|
|
; <7> 7/1/90 gbm take out ridiculous _Debugger trap @PatchStart
|
|
; <6> 6/29/90 djw Fix conditional assemblies so that only check for installation
|
|
; for 32bitQD INIT.
|
|
; <5> 3/15/90 djw Rewrote install code to take care of no install case and
|
|
; for system 7.0
|
|
; <4> 3/15/90 djw Rewrote install code to support 6.xx, bigbang, and 32bitQD patches
|
|
; <3> 1/17/90 djw Modifications to build slot mgr with 32bit QD INIT using BBS
|
|
; sources
|
|
; <2> 12/28/89 dba use MAIN instead of PROC to get dead code stripping
|
|
; <1.0> 10/10/89 djw slot manager patch for system 7.0
|
|
;
|
|
;_______________________________________________________________________________________
|
|
|
|
Machine MC68020
|
|
String Asis
|
|
Print Off
|
|
LOAD 'StandardEqu.d'
|
|
Include 'SlotEqu.a'
|
|
Print On
|
|
|
|
If (&TYPE('SeparateFile') = 'UNDEFINED') Then ; equ indicating whether we are <3>
|
|
SeparateFile Equ 0 ; ... building for 32bit QD INIT
|
|
Endif ; ... or as a system patch
|
|
|
|
If (&TYPE('forAUX') = 'UNDEFINED') Then ; equ indicating whether we are <4>
|
|
forAUX Equ 0 ; ... building for an A/UX patch
|
|
Endif
|
|
|
|
if not(forAUX) then
|
|
Include 'LinkedPatchMacros.a'
|
|
endif
|
|
|
|
;_______________________________________________________________________________________ <4>
|
|
;
|
|
; Start of patch
|
|
;
|
|
|
|
if SeparateFile then
|
|
Start Main Export
|
|
else
|
|
SlotMgrPatch InstallProc (II,notAUX) ; For Mac II, IIx, IIcx, & SE/30 under Mac OS <9>
|
|
endif
|
|
Import InstallSlot
|
|
|
|
If SeparateFile Then ; when built as a separate INIT file
|
|
Import CutBackPt
|
|
With spBlock
|
|
|
|
bra.s @PatchStart ; branch to slotmgr patch initialization code
|
|
|
|
dc.l ('ptch') ; resource type
|
|
dc.w 13 ; 'ptch' resource ID
|
|
dc.w 1 ; version number
|
|
|
|
@PatchStart
|
|
; So, Dave, what was this doing here?
|
|
; _Debugger
|
|
|
|
lea Start,a0 ; get the handle to this resource
|
|
_RecoverHandle ; return a0 = handle to resource
|
|
movea.l (sp)+,a1 ; get return addr off stack
|
|
move.l a0,-(sp) ; save handle rsrc for later
|
|
move.l a1,-(sp) ; reverse order on stack for later calling trap
|
|
|
|
; Check if we really need to install the slot manager patch
|
|
|
|
suba.w #spBlockSize,sp ; get spblock on stack
|
|
movea.l sp,a0 ; a0 = ptr to spBlock
|
|
_sVersion ; get slot manager version in spResult
|
|
adda.w #spBlockSize,sp ; get rid of spBlock
|
|
beq.s @NoInstall ; sVersion present - don't install patch
|
|
Endif ; <6>
|
|
|
|
movem.l d2-d7/a2-a6,-(sp)
|
|
lea InstallSlot,a0 ; get address of patch init
|
|
If SeparateFile then ; _StripAddress done by the linked patch loader in system patch
|
|
move.l a0,d0
|
|
_StripAddress ; make sure it's 32 bit clean
|
|
movea.l d0,a0
|
|
endif
|
|
jsr (a0) ; execute the init code
|
|
movem.l (sp)+,d2-d7/a2-a6
|
|
|
|
; Cut back the initialization code
|
|
|
|
If SeparateFile THEN
|
|
|
|
lea InstallSlot,a0 ; a0 = addr to cutback to
|
|
move.l a0,d0
|
|
_StripAddress ; clean the pointer
|
|
move.l d0,d1 ; d1 = ptr to cutback to
|
|
movea.l 4(sp),a1 ; a1 = handle to beginning of code
|
|
move.l (a1),d0 ; d0 = ptr to beginning
|
|
_StripAddress ; clean the pointer
|
|
sub.l d0,d1 ; d1 = size of resident code
|
|
move.l d1,d0
|
|
movea.l 4(sp),a0 ; restore a0 = handle to patch resource
|
|
_SetHandleSize ; cutback to resident code size
|
|
|
|
move.w #$192,d0 ; trap number for _DetachResource
|
|
bra.s @Exit
|
|
|
|
; No need to install this patch, so let us release this resource. (sp) = hndl to rsrc
|
|
|
|
@NoInstall move.w #$1a3,d0 ; trap number for _ReleaseResource
|
|
|
|
@Exit _GetTrapAddress ,newTool ; get the trap address
|
|
move.l a0,-(sp) ; put addr of trap routine on stack
|
|
Endif
|
|
|
|
@Done
|
|
rts ; execute trap then exit
|
|
|
|
End
|