mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2024-11-03 05:04:29 +00:00
229 lines
8.0 KiB
Plaintext
229 lines
8.0 KiB
Plaintext
|
;
|
|||
|
; File: SlotMgrEqu.a
|
|||
|
;
|
|||
|
; Contains: This file contains PRIVATE equates for the slot manager
|
|||
|
;
|
|||
|
; Written by: George Norman
|
|||
|
;
|
|||
|
; Copyright: <09> 1986-1992 by Apple Computer, Inc. All rights reserved.
|
|||
|
;
|
|||
|
; Change History (most recent first):
|
|||
|
;
|
|||
|
; <SM4> 10/28/92 SWC Changed SlotEqu.a->Slots.a.
|
|||
|
; <SM3> 6/30/92 kc Roll in Horror, comments follow:
|
|||
|
; <H4> 6/10/92 djw Add new selector for doSecondaryInit (a private routine)
|
|||
|
; <H3> 6/10/92 djw Add new private trap macro's for AddCard, RemoveCard,
|
|||
|
; and CheckSlot.
|
|||
|
; <SM2> 5/17/92 kc Add get sGetSRTEntry vector number.
|
|||
|
; <5> 1/7/92 RB Added a couple of records structures used to identify faulty
|
|||
|
; drivers in Apple display cards.
|
|||
|
; <4> 1/30/91 gbm sab, #38: Change the <20>already including this file<6C> variable to
|
|||
|
; all uppercase (for security reasons)
|
|||
|
; <2> 1/17/90 djw Add new slotmgr private selector GetBoard
|
|||
|
; <1.9> 6/30/89 djw removed pSlotStatus.
|
|||
|
; <1.8> 4/16/89 GGD Added new data structures used by SlotInterrupts.a and
|
|||
|
; VerticalRetraceMgr.a
|
|||
|
; <1.7> 4/12/89 djw Removed including slotequ.a and duplicate state constants
|
|||
|
; (state_sdminit,...)
|
|||
|
; <1.6> 3/28/89 djw added an SRT entries count to globals. Added macros for private
|
|||
|
; routines, added last SRT ptr in globals.
|
|||
|
; <1.5> 3/12/89 djw changed srt link block and added some mark values, deleted
|
|||
|
; SRTlastBlk ptr in globals and substituted expansion chassis
|
|||
|
; support fields.
|
|||
|
; <1.4> 3/1/89 djw change srrblock flag field from byte to long
|
|||
|
; <1.3> 2/20/89 djw added SRT header record definition, added slot mgr globals
|
|||
|
; record. added flag field to srrBlock for enable/disable.
|
|||
|
; <1.2> 1/6/89 djw Add slotVNum for slot version number
|
|||
|
; <1.1> 11/17/88 CCH Added stuff from system build.
|
|||
|
; <1.0> 11/9/88 CCH Adding to EASE.
|
|||
|
; <1.0> 10/24/88 djw Adding for the first time into EASE.
|
|||
|
; 1/10/88 djw created - removed sSDMRecord and state equates
|
|||
|
;
|
|||
|
;_______________________________________________________________________________________
|
|||
|
|
|||
|
IF &TYPE('__INCLUDINGSLOTMGREQU__') = 'UNDEFINED' THEN
|
|||
|
__INCLUDINGSLOTMGREQU__ SET 1
|
|||
|
|
|||
|
Include 'Slots.a'
|
|||
|
|
|||
|
|
|||
|
;---------------------------------------------------------------------
|
|||
|
;MACRO: sNextStep(VAR Step:Dx; VAR Temp:Dy; VAR sPointer:An)
|
|||
|
; sNextStep creates a new pointer from the given pointer and step
|
|||
|
; register. The step register is updated for the next call.
|
|||
|
; NOTE: &Temp must be CLEAR in bits 8..15.
|
|||
|
;---------------------------------------------------------------------
|
|||
|
MACRO
|
|||
|
sNextStep &Step,&Temp,&sPointer
|
|||
|
MOVE.B &Step,&Temp ;&Temp <- the Least Significant Byte of the Step register.
|
|||
|
ADD.W &Temp,&sPointer ;&sPointer <- &sPointer + Step[x]
|
|||
|
@M10 ROR.L #8,&Step ;&Step <- the next step value.
|
|||
|
TST.B &Step ;IF (the next step value is zero) THEN
|
|||
|
BEQ.S @M10 ; GOTO @M10 {Skip it}
|
|||
|
ENDM
|
|||
|
|
|||
|
|
|||
|
;=====================================================================
|
|||
|
; Constants
|
|||
|
;=====================================================================
|
|||
|
|
|||
|
slotVNum EQU 2 ; if new slot manager is in ROM <1.3>
|
|||
|
; 1 if slot manager has been patched
|
|||
|
; 0 if not present - really an error
|
|||
|
|
|||
|
srDisable EQU 0 ; bit number for srrFlags - set = disabled <1.3>
|
|||
|
|
|||
|
|
|||
|
;these are apple internal only, never roll into equates
|
|||
|
|
|||
|
srrBlock RECORD 0 ;Slot Resource Table Record.
|
|||
|
srrSlot DS.B 1 ; Slot
|
|||
|
srrId DS.B 1 ; Id
|
|||
|
srrExtDev DS.B 1 ; External Device <C663>
|
|||
|
srrHWDev DS.B 1 ; Hardware device id. <1.3>
|
|||
|
srrRefNum DS.W 1 ; RefNum of driver
|
|||
|
srrIOReserved DS.W 1 ; Reserved
|
|||
|
srrCategory DS.W 1 ; sType: Category
|
|||
|
srrCType DS.W 1 ; Type
|
|||
|
srrDrvrSW DS.W 1 ; DrvrSW
|
|||
|
srrDrvrHW DS.W 1 ; DrvrHW
|
|||
|
srrsRsrcPtr DS.L 1 ; Pointer to sResource
|
|||
|
srrFlags DS.L 1 ; flag field <1.4>
|
|||
|
SRTRecSize EQU * ; Size of se parameter Block
|
|||
|
ENDR
|
|||
|
|
|||
|
srtLink RECORD 0 ; SRT link block <1.5>
|
|||
|
srtMarker DS.W 1 ; place holder for marker
|
|||
|
srtNext DS.L 1 ; ptr to next srt block, or nil
|
|||
|
srtLinkSize EQU * ; size of srt link record
|
|||
|
ENDR
|
|||
|
|
|||
|
srtend EQU $FFFF ; end of the srt blk and start of link block <1.5>
|
|||
|
srtfree EQU $FF01 ; a free entry <1.5>
|
|||
|
|
|||
|
srtMaxEntries EQU 8 ; 8 entries per SRT block <1.3>
|
|||
|
srtBlkSize EQU srtMaxEntries*srrBlock.SRTRecSize ; size of srt blocks to allocate <1.3>
|
|||
|
|
|||
|
|
|||
|
SlotRsrcType RECORD 0 ;Slot Resource Type.
|
|||
|
sCategory DS.W 1 ; sType: Category
|
|||
|
sCType DS.W 1 ; Type
|
|||
|
sDrvrSW DS.W 1 ; DrvrSW
|
|||
|
sDrvrHW DS.W 1 ; DrvrHW
|
|||
|
SRSize EQU * ; Size of Slot resource type.
|
|||
|
ENDR
|
|||
|
|
|||
|
seHeader2 RECORD 0 ;Record structure of sExec Block, Revision-2.
|
|||
|
seRevision DS.B 1 ; Revision of seBlock. Revision = 2. {Must be same field as se1Block}
|
|||
|
seCPUId DS.B 1 ; Id of CPU
|
|||
|
seTimeOut DS.W 1 ; Time Out
|
|||
|
seCodeOffset DS.L 1 ; Offset to code.
|
|||
|
ENDR
|
|||
|
|
|||
|
; Slot Manager global variables - globals are a negative offset from sInfoPtr.
|
|||
|
|
|||
|
slotGlobals RECORD 0,DECR ; global variables for slot manager <1.3>
|
|||
|
BusUseCnt DS.W 1 ; count for usage of exception vector - when zero restore saved one
|
|||
|
entryMMUMode DS.W 1 ; saved mmu mode when bus exception was swapped
|
|||
|
sysBusExcptn DS.L 1 ; saved bus exception vector
|
|||
|
slotBusExcptn DS.L 1 ; slot manager's bus exception vector
|
|||
|
lastSRTPtr DS.L 1 ; ptr to the last entry in the SRT <1.6>
|
|||
|
srtCnt DS.W 1 ; number of entries in the SRT <1.6>
|
|||
|
expnSlot DS.B 1 ; expansion chassis slot number <1.5>
|
|||
|
expnId DS.B 1 ; expansion chassis sRsrc id <1.5>
|
|||
|
slotGlobalSize EQU slotGlobals-*
|
|||
|
ENDR
|
|||
|
|
|||
|
; <5> rb, from Terror
|
|||
|
|
|||
|
DevTblRec Record 0 ; CardDevice identification record.
|
|||
|
category Ds.w 1 ; spCategory
|
|||
|
cType Ds.w 1 ; spCType
|
|||
|
drvrSW Ds.w 1 ; spDrvrSW
|
|||
|
drvrHW Ds.w 1 ; spDrvrHW
|
|||
|
drvrVers Ds.w 1 ; driver version number
|
|||
|
DTEntrySize Equ *
|
|||
|
Endr
|
|||
|
|
|||
|
LoadTBlRec Record 0 ; Table of device parameter offsets.
|
|||
|
ltAddrOff Ds.l 1 ; Offset to driver code.
|
|||
|
ltSizeOff Ds.l 1 ; Offset to size of driver.
|
|||
|
ltSpID Ds.b 1 ; Kind of spID to look for.
|
|||
|
ltSpExtDev Ds.b 1 ; Multiple devices?
|
|||
|
ltPadding Ds.b 2 ; Padding (for alignment).
|
|||
|
LTEntrySize Equ *
|
|||
|
Endr
|
|||
|
|
|||
|
|
|||
|
|
|||
|
; Slot manager private routines - these routines are accessed through <1.6>
|
|||
|
; the vector table, but not the trap dispatcher.
|
|||
|
|
|||
|
macro
|
|||
|
slotjsr &selector
|
|||
|
pea @resume
|
|||
|
move.l ([SDMJmpTblPtr],&selector*4),-(sp)
|
|||
|
rts
|
|||
|
@resume
|
|||
|
endm
|
|||
|
|
|||
|
sDoSecondary equ $0f ; <h4> djw
|
|||
|
sAddCard equ $1e ; <h3> djw
|
|||
|
sRemoveCard equ $1f ; <h3> djw
|
|||
|
sCheckSlot equ $27 ; <h3> djw
|
|||
|
|
|||
|
NewSRTEntry equ $34
|
|||
|
InitEntry equ $35
|
|||
|
SrToSpBlock equ $36
|
|||
|
Read4Bytes equ $37
|
|||
|
GetBoard equ $38 ; <2>
|
|||
|
BusException equ $39
|
|||
|
InstallBus equ $3A
|
|||
|
RestoreBus equ $3B
|
|||
|
AllocSRTBlk equ $3C
|
|||
|
sGetSRTEntry equ $3D
|
|||
|
|
|||
|
|
|||
|
; Slot manager sustem private routines which are accessed through the trap dispatcher.
|
|||
|
|
|||
|
macro ; <h3> djw
|
|||
|
_AddCard
|
|||
|
moveq.l #sAddCard,d0
|
|||
|
_SlotManager
|
|||
|
endm
|
|||
|
|
|||
|
macro ; <h3> djw
|
|||
|
_RemoveCard
|
|||
|
moveq.l #sRemoveCard,d0
|
|||
|
_SlotManager
|
|||
|
endm
|
|||
|
|
|||
|
macro ; <h3> djw
|
|||
|
_CheckSlot
|
|||
|
moveq.l #sCheckSlot,d0
|
|||
|
_SlotManager
|
|||
|
endm
|
|||
|
|
|||
|
|
|||
|
; Private data structures used by slot interrupt and VBL processing.
|
|||
|
|
|||
|
slotVBLInfo record {slotVBLQHdr},increment
|
|||
|
ds.w 1 ; unused space, for alignment
|
|||
|
slotVBLQHdr ds.b qHeadSize ; slot VBL queue header for this slot
|
|||
|
slotTickCount ds.l 1 ; VBL tick count for this slot
|
|||
|
sVBLInfoSize equ *-slotVBLInfo
|
|||
|
endr
|
|||
|
|
|||
|
slotIntGlobals record {slotVBLPtrs},increment ; globals pointed to by SlotQDT
|
|||
|
slotVBLPtrs ds.l TotalSlots ; pointers to slotIntInfo records, indexed by slot number
|
|||
|
ds.l 1 ; filler, reserved
|
|||
|
|
|||
|
slotIntQHeads ds.l TotalSlots ; pointers to SlotIntQElement records, indexed by slot number
|
|||
|
ds.l 1 ; filler, reserved
|
|||
|
|
|||
|
slotVBLInfos ds.b TotalSlots*slotVBLInfo.sVBLInfoSize ; VBL info record for each possible slot
|
|||
|
|
|||
|
sIntGlobalSize equ *-slotIntGlobals
|
|||
|
endr
|
|||
|
|
|||
|
ENDIF ; ...already included
|