mac-rom/Toolbox/PackageMgr.a

274 lines
10 KiB
Plaintext

;
; File: PackageMgr.a
;
; Contains: xxx put contents here (or delete the whole line) xxx
;
; Written by: xxx put name of writer here (or delete the whole line) xxx
;
; Copyright: © 1983-1992 by Apple Computer, Inc., all rights reserved.
;
; Change History (most recent first):
;
; <SM3> 6/11/92 PN Roll in patchIIciROM.a the optimized package 4 and 5 in
; Startboot.a and delete Pack4 &5 in this file
; <SM2> 5/20/92 TN Removed entry points for Packs 8, 9, 11, 13, 15. They are now
; with the corresponding Pack sources.
; <1.2> 8/22/89 SES Removed references to nFiles.
; <1.1> 11/10/88 CCH Fixed Header.
; <1.0> 11/9/88 CCH Adding to EASE.
; <¥1.1> 9/23/88 CCH Got rid of inc.sum.d and empty nFiles
; <1.0> 2/11/88 BBM Adding file for the first time into EASEÉ
; <C636> 1/14/87 JTC Unrolled the Pack 4&5 code to expedite, so 881 wouldnÕt be
; slowed any more than necessary.
; <C215> 10/14/86 RDC Removed check for FPU on NuMac - it is assumed to always be
; there and FPU packs replace packs 4 and 5
; <C206> 10/9/86 bbm Modified to mpw aincludes.
; <C169> 9/23/86 JTC Cleanse pack address with _StripAddress rather than CLR.B before
; jumping into package.
; <C67> 7/28/86 RDC Added changes to allow install of new math packs if NuMac FPU
; chip is installed.
; 2/19/86 BBM Made some modifications to work under MPW
; 7/10/85 LAK Added set up of ROMMapInsert for ROM resources.
; 5/7/85 JTC Minor clean-up and extend to 16 packages.
; 4/16/85 SC NoPack code changed and called after _LoadResource (in case the
; load failed)
; 4/16/85 SC InitAllPacks now saves/restores resload state (directly to low
; memory too, no traps
; 3/6/85 LAK Clear high byte of address before dispatching (to be nice . .
; .).
; 1/28/85 LAK Uses new equates files. Changed InitMath to InitAllPacks. Added
; ram patches.
; 6/15/83 AJH Made it use deep shit errors defined in SysErr
;
;
;EASE$$$ READ ONLY COPY of file ÒPackageMgr.aÓ
; 1.2 SES 08/22/1989 Removed references to nFiles.
; 1.1 CCH 11/10/1988 Fixed Header.
; 1.0 CCH 11/ 9/1988 Adding to EASE.
; OLD REVISIONS BELOW
;¥1.1 CCH 9/23/1988 Got rid of inc.sum.d and empty nFiles
; 1.0 BBM 2/11/88 Adding file for the first time into EASEÉ
; END EASE MODIFICATION HISTORY
; File: Packages.TEXT
;---------------------------------------------------------------------
;
; Macintosh Application Package Dispatch Interface
;
; written by Jerome Coonen and Andy Hertzfeld 13-May-83
;
; ROM-based interface to RAM-based package. The packages are
; resources of type "PACK", numbered 0 through 7. Packages 0 through
; 3 are for use by applications (presumably, several applications
; sharing the same resources); packages 4 through 7 are reserved for
; math routines such as floating point arithmetic, elementary
; functions, etc.
;
; PROCEDURE InitPack(PackNumber : integer); when passed a
; PackNumber between 0 and 7 performs a GetResource of the appropriate
; PACK resource, setting up the dispatch vector for subsequent
; invocations of the package from the application. InitPack turns off
; resource loading (via SetResLoad) so that the GetResource simply
; up the resource map. Thus the package is loaded into memory, and
; need only be available at all in the resource file, if and when it
; is used. Resource loading is turned back on after the GetResource.
; InitPack follows the Pascal register conventions.
;
; PROCEDURE InitMath; calls InitPack four times with the arguments
; 4, 5, 6, and 7 and then initializes the 3 word floating point state
; area.
;
; Labels PACK0, PACK1, ..., PACK7 receive the respective A-line traps.
; The in turn transfer control to the package whose handle was saved
; by InitPack; they preserve ALL registers. They must check the
; handle, in case GetResource failed to find the package, and then
; check the pointer, in case the package has been purged.
;
; Modification history:
;
; 15-Jun-83 AJH Made it use deep shit errors defined in SysErr
;
;---------------------------------------------------------------------
;
; 28 Jan 85 LAK Uses new equates files. Changed InitMath to InitAllPacks.
; Added ram patches.
; 06 Mar 85 LAK Clear high byte of address before dispatching (to
; be nice . . .).
; 16 Apr 85 SC InitAllPacks now saves/restores resload state (directly
; to low memory too, no traps
; 16 Apr 85 SC NoPack code changed and called after _LoadResource (in case
; the load failed)
; 07 May 85 JTC Minor clean-up and extend to 16 packages.
; <10Jul85> LAK Added set up of ROMMapInsert for ROM resources.
;_______________________________________________________________________
;
; Post Lonely Hearts
;_______________________________________________________________________
;
; <19feb86> BBM Made some modifications to work under MPW
; <C67/28Jul86> RDC Added changes to allow install of new math packs
; if NuMac FPU chip is installed.
; <C169/23Sep86> JTC Cleanse pack address with _StripAddress rather than
; CLR.B before jumping into package.
; <C206/09oct86> bbm Modified to mpw aincludes.
; <C215/14Oct86> RDC Removed check for FPU on NuMac - it is assumed to
; always be there and FPU packs replace packs 4 and 5
; <C636/14Jan87> JTC Unrolled the Pack 4&5 code to expedite, so 881 wouldnÕt
; be slowed any more than necessary.
;---------------------------------------------------------------------
BLANKS ON
STRING ASIS
LOAD 'StandardEqu.d'
PackDispatcher PROC EXPORT
EXPORT InitPack, InitAllPacks
EXPORT Pack0, Pack1, Pack2, Pack3, Pack6, Pack7
EXPORT Pack10, Pack12, Pack14
EXPORT PackMgrEnd
;
; PROCEDURE InitPack(PackNumber : integer);
;
; Stack: return adrs < PackNumber
;
InitPack
SUBQ.L #4,SP ; room for handle from GetResource
MOVE.L #'PACK',-(SP) ; resource type PACK
; Stack: "PACK" < handle slot < resLoad < return adrs < PackNumber
MOVE.W 12(SP),-(SP) ; resource number = PackNumber <10Jul85>
MOVE.W #MapFalse,ROMMapInsert ; check ROM map as well <10Jul85>
_GetResource
; Stack: handle slot < resLoad < return adrs < PackNumber
MOVE.W 8(SP),D0 ; PackNumber, beyond handle, ret adrs <10Jul85>
BSR.S GetPHand ; point A0 to the saved handle <07May85>
MOVE.L (SP)+,(A0) ; store resource handle <07May85>
; Stack: return adrs < PackNumber
MOVEA.L (SP)+,A0 ; return address
ADDQ.L #2,SP ; kill PackNumber
JMP (A0)
;
; PROCEDURE InitAllPacks;
;
InitAllPacks ; deleted FPU check for NuMac <C215>
MOVE.L (SP)+,A0 ; get trap return
MOVEQ #15,D0 ; 16 packages <07May85>
@1 MOVE.W D0,-(SP) ; pack to init
MOVE.L A0,-(SP) ; where to go
LEA InitPack,A0 ; where to go from here
DBRA D0,@1
MOVE.L A0,-(SP) ; push InitPack for RTS-style branch
CLR.W FPState ; set default modes for arithmetic
LEA FPException,A0
MOVE.L A0,FPState+2 ; default halt address
RTS ; RTS, initing all packs
; deleted FPU check for NuMac <C215>
;
; Default floating point exception handler simply signals deep six alert.
;
FPException
MOVEQ #DSFPErr,D0
_SysError
; deleted NuMac FPU check routine <C215>
; deleted Pack4 and Pack5 since they are installed at boot time <SM3>
;
; Given pack number 0..15 in D0.W, return A0 pointing to saved handle in low memory. <07May85>
;
GetPHand
LEA App2Packs,A0 ; presume it's the latter set <07May85>
SUBQ.W #8,D0 ; < 0 for 0-7; >= 0 for 8-15 <07May85>
BGE.S @1 ; Greater or Equal => App2Packs is right <07May85>
LEA AppPacks,A0 ; <07May85>
ADDQ.W #8,D0 ; <07May85>
@1
LSL.W #2,D0 ; mult by four to index into longs <07May85>
ADDA.W D0,A0 ; point to saved handle <07May85>
RTS ; <07May85>
;
; Common jump routine. Must preserve values of all registers.
; Jump to address saved in location AppPacks + OFFSET,
; where OFFSET = 2 * (<return address> - Pack1).
;
PackCom
MOVEM.L D0/A0,-(SP) ; need two work registers
MOVE.L 8(SP),D0 ; get return address
LEA Pack1,A0
SUB.L A0,D0 ; difference is 0,2,4,6,...,14,16,...,30 <07May85>
LSR.W #1,D0 ; back to 0,1,2,...,15 <07May85>
BSR.S GetPHand ; point A0 to saved handle <07May85>
TST.L (A0)
BEQ.S NoPack ; 0 handle means GetResource failed
MOVEA.L (A0),A0 ; now dereference handle down to pointer
TST.L (A0) ; 0 pointer means must reload resource
BNE.S GoToPack
MOVE.L A0,-(SP) ; push handle for LoadResource
MOVE.W #MapTrue,ROMMapInsert ; use ROM map as well <10Jul85>
_LoadResource ; Note: preserves ALL registers.
TST.L (A0) ; Did load fail? <SC 16-Apr-85>
BEQ.S NoPack ; if so, deep shit
GoToPack
; Get here with A0=handle; want to cleanse ptr. <C169>
MOVE.L (A0),D0 ; deref to dirty ptr <C169>
_StripAddress ; true address in D0 <C169>
MOVE.L D0,8(SP) ; pack adrs replaces old return adrs <C169>
MOVEM.L (SP)+,D0/A0 ; restore work registers
RTS ; into package
; Signal deep six alert if GetResource failed
NoPack
MOVE.L 8(SP),D0 ; get return address <SC 16-Apr-85>
LEA Pack1,A0
SUB.L A0,D0 ; difference is 0,2,4,6,...,14
LSR #1,D0 ; shift to 0,1,2,3,...,7
ADD.W #DSNoPackErr,D0 ; error number for this NoPack
_SysError
;
; Routines differ only in offset into handle table. So compute offset from
; the difference <return address> - Pack1
;
Pack0 BSR.S PackCom
Pack1 BSR.S PackCom
Pack2 BSR.S PackCom
Pack3 BSR.S PackCom
xPack4 BSR.S PackCom ; bogus name, to leave placeholder <C636>
xPack5 BSR.S PackCom ; bogus name, to leave placeholder <C636>
Pack6 BSR.S PackCom
Pack7 BSR.S PackCom
xPack8 BSR.S PackCom ; bogus name as placeholder. Entry in AEPackEntry.a <SM2 tcn>
xPack9 BSR.S PackCom ; bogus name as placeholder. Entry in PPCBrowserPackEntry.a <SM2 tcn>
Pack10 BSR.S PackCom
xPack11 BSR.S PackCom ; bogus name as placeholder. Entry in dpPackEntry.a <SM2 tcn>
Pack12 BSR.S PackCom
xPack13 BSR.S PackCom ; bogus name as placeholder. Entry in DataAccessPackEntry.a <SM2 tcn>
Pack14 BSR.S PackCom
xPack15 BSR.S PackCom ; bogus name as placeholder. Entry in puPackEntry.a <SM2 tcn>
PackMgrEnd
END