mirror of
https://github.com/elliotnunn/supermario.git
synced 2024-11-25 09:30:50 +00:00
101 lines
3.4 KiB
Plaintext
101 lines
3.4 KiB
Plaintext
;
|
||
; File: DispatchHelperPriv.a
|
||
;
|
||
; Written by: Jeff Miller
|
||
;
|
||
; Contains: Private interface file for DispatchHelper and ProcHelper.
|
||
;
|
||
; Copyright: © 1990-1991 by Apple Computer, Inc., all rights reserved.
|
||
;
|
||
; Change History (most recent first):
|
||
;
|
||
; <6> 8/22/91 JSM Clean up header.
|
||
; <5> 1/30/91 gbm sab, #38: Change the ‘already including this file’ variable to
|
||
; all uppercase (for security reasons)
|
||
; <4> 10/22/90 JSM Add dispatchFlags equates, remove obsolete sndIsLPtch equate,
|
||
; add DispatchUnimplementedRoutine macro.
|
||
; <3> 8/8/90 SAM Adding sndIsLPtch symbol that signals BBS to build
|
||
; DispatchHelper & ProcHelper as an old style ptch. •••-->
|
||
; Temporary <--••• Remove when sound is an Lptch.
|
||
; <2> 7/8/90 JSM Fix some comments in DispatchHelperTable.
|
||
; <1> 7/7/90 JSM First checked in.
|
||
;
|
||
|
||
IF &TYPE('__INCLUDINGDISPATCHHELPERPRIV__') = 'UNDEFINED' THEN
|
||
__INCLUDINGDISPATCHHELPERPRIV__ SET 1
|
||
|
||
;
|
||
; Bits defined for dispatchFlags. Note that even selectors are supported only when
|
||
; entries in the dispatch table are word offsets (i.e. you can't have both dhSelectorsEven
|
||
; and dhAbsoluteEntries set at the same time). The only reason for this is that nobody else
|
||
; currently uses even selectors besides the Edition Manager, which also uses word offsets.
|
||
;
|
||
dhSelectorsEven EQU 0 ; selectors are even
|
||
dhAbsoluteEntries EQU 1 ; entries in dispatch table are absolute addresses, not offsets (used in linked patches)
|
||
|
||
;
|
||
; Standard dispatch table format for DispatchHelper
|
||
;
|
||
|
||
DispatchHelperTable RECORD 0
|
||
dispatchFlags DS.W 1 ; use bits defined above (e.g. 1<<dhSelectorsEven)
|
||
firstSelector DS.B 1 ; first valid selector, can be negative
|
||
lastSelector DS.B 1 ; last valid selector
|
||
firstOffset DS.W 1 ; first offset from DispatchHelperTable
|
||
; other offsets follow
|
||
ORG firstOffset ; alternately, if dhAbsoluteEntries is set
|
||
firstAddress DS.L 1 ; first absolute address
|
||
; other addresses follow
|
||
ENDR
|
||
|
||
;
|
||
; Standard proc header format for ProcHelper
|
||
;
|
||
|
||
ProcHelperHeader RECORD 0
|
||
UnusedDebugger DS.W 1 ; used to branch to PACK entry, now set to $A9FF
|
||
ProcResType DS.L 1 ; resource type of proc: 'PACK', 'proc', etc.
|
||
ProcID DS.W 1 ; id of resource
|
||
ProcVers DS.W 1 ; proc version
|
||
ProcDispTable DS.W 1 ; start of DispatchHelperTable
|
||
ENDR
|
||
|
||
;
|
||
; The following trap words are for reference only, you should never
|
||
; call DispatchHelper or ProcHelper directly through them.
|
||
;
|
||
|
||
_DispatchHelperTrap OPWORD $A0EC
|
||
_ProcHelperTrap OPWORD $A09A
|
||
|
||
;
|
||
; Use these macros to invoke DispatchHelper and ProcHelper
|
||
;
|
||
MACRO
|
||
_DispatchHelper
|
||
MOVE.L $7B0,-(SP) ; go through vector for _DispatchHelperTrap
|
||
RTS
|
||
ENDM
|
||
|
||
MACRO
|
||
_ProcHelper
|
||
MOVE.L $668,-(SP) ; go through vector for _ProcHelperTrap
|
||
RTS
|
||
ENDM
|
||
|
||
;
|
||
; Use this macro to define an unimplemented routine for DispatchHelper and ProcHelper
|
||
; Cleans up the stack based on the words of parameters in the selector in D0 and
|
||
; returns to the caller with paramErr.
|
||
;
|
||
MACRO
|
||
DispatchUnimplementedRoutine
|
||
MOVE.L (SP)+,A0 ; A0 = return address
|
||
LSR.W #8,D0 ; D0.W = words of parameters
|
||
ADD.W D0,D0 ; D0.W = bytes of parameters
|
||
ADD.W D0,SP ; strip off parameters
|
||
MOVE.W #paramErr,(SP) ; return parameter error
|
||
JMP (A0) ; return to caller
|
||
ENDM
|
||
|
||
ENDIF ; ...already included |