mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2024-12-28 01:29:20 +00:00
4325cdcc78
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.
408 lines
14 KiB
Plaintext
408 lines
14 KiB
Plaintext
;________________________________________________________________________
|
|
;
|
|
; File: XPT.h
|
|
;
|
|
; Contains: header stuff for XPT
|
|
;
|
|
; Entry points:
|
|
;
|
|
; Written by: Paul Wolf
|
|
;
|
|
; Copyright: © 1992-1994 by Apple Computer, Inc., all rights reserved.
|
|
;
|
|
; Change History (most recent first):
|
|
;
|
|
; <SM21> 1/31/94 DCB Added a second version number field for the SCSI Busy patch
|
|
; <SM20> 1/25/94 DCB Added space in the C0C globals for our own private deferred task
|
|
; queue.
|
|
; <SM19> 1/14/94 chp Remove SCSIGlobals equate again. It is defined in SysEqu.a. (See
|
|
; <SM15>.) Fix Òinclude onceÓ SET variable naming conventions.
|
|
; <ML3> 1/9/94 pdw Added busyPatchVers field.
|
|
; <ML2> 1/5/94 pdw Added SCSIBusy selector and required fields in SCSIGlobals.
|
|
; <MC4> 11/5/93 pdw Series of attempts and re-attempts to fix various VM/FileShare
|
|
; problems.
|
|
; <SM17> 12/19/93 DCB Added SCSIBusy constant
|
|
; <SM16> 11/22/93 pdw Rolling in from <MCxx>.
|
|
; <SM15> 9/22/93 chp Remove SCSIGlobals equate. It is defined elsewhere.
|
|
; <SM14> 10/29/93 DCB <MC> roll-in.
|
|
; <MC3> 10/28/93 pdw Got rid of some unused fields. Changed the way Recorder works.
|
|
; <SM13> 10/14/93 pdw <MC> roll-in.
|
|
; <MC2> 10/12/93 pdw Added support for Synchronous data transfers, rewrote State
|
|
; Machine, message handling etc.
|
|
; <SM12> 9/9/93 pdw Lots of little changes. Name changes, temporary cache_bug
|
|
; stuff.
|
|
; <SM11> 7/17/93 pdw Moved jvSelected to HALg.
|
|
; <SM10> 7/8/93 pdw Added locations for counting interrupts (not used) and other
|
|
; comment changes.
|
|
; <SM9> 6/29/93 pdw Massive checkins: Change asynchronicity mechanism to CallMachine
|
|
; stack switching mechanism. Adding support for Cold Fusion.
|
|
; Rearranging HW/SW Init code. Some code optimizations. Changed
|
|
; Record_Event trigger to use a couple of values in SCSIGlobals.
|
|
; <SM8> 5/29/93 PW Adding comment about globals stolen.
|
|
; <SM7> 5/25/93 DCB Update from Ludwig (the three items below this one)
|
|
; <LW7> 5/21/93 mal Changing GetXPTg to use simple indirection instead of [] stuff.
|
|
; <LW6> 5/20/93 DCB Adding two fields to the XPT globals to support turning off
|
|
; deferred completion routines from inside debuggers.
|
|
; <LW5> 5/20/93 PW Added SCSIGlobalsRec from SCSIPriv and into these, I added jump
|
|
; vector for target mode.
|
|
; <SM6> 5/5/93 PW Converted names to meanies-friendly names. Updated with latest
|
|
; from Ludwig stuff.
|
|
; <SM5> 4/8/93 DCB Added a copy of the C0C SCSI Globals which have been modified
|
|
; for use by the new SCSI Manager.
|
|
; <SM4> 1/31/93 PW Update from the latest of Ludwig. Also changes required for PDM
|
|
; (will update Ludwig with these as needed myself).
|
|
; <LW3> 1/27/93 PW Changed bogus to syncUnsafeCount.
|
|
; <LW2> 12/18/92 PW Added syncReqEnabled counter (bogus field right now).
|
|
; <SM3> 11/20/92 PW Removed Includes. Made MaxBuses 16. Removed XPTgs not used in
|
|
; asm files.
|
|
; <SM2> 10/30/92 DCB Misc equates to support multiple ISR routines.
|
|
;========================================================================
|
|
|
|
STRING ASIS
|
|
|
|
IF &TYPE('__INCLUDINGXPTEQU__') = 'UNDEFINED' THEN
|
|
__INCLUDINGXPTEQU__ SET 1
|
|
|
|
|
|
IF &TYPE('__INCLUDINGACAM__') = 'UNDEFINED' THEN
|
|
INCLUDE 'ACAM.a'
|
|
ENDIF
|
|
|
|
;******** Old Call Enumerators ********
|
|
|
|
OldSCSICalls RECORD 0, INCREMENT
|
|
|
|
kSCSIReset ds.b 1 ; 0
|
|
kSCSIGet ds.b 1
|
|
kSCSISelect ds.b 1
|
|
kSCSICmd ds.b 1
|
|
kSCSIComplete ds.b 1 ; 4
|
|
kSCSIRead ds.b 1
|
|
kSCSIWrite ds.b 1
|
|
kSCSIunused ds.b 1
|
|
kSCSIRBlind ds.b 1 ; 8
|
|
kSCSIWBlind ds.b 1
|
|
kSCSIStat ds.b 1
|
|
kSCSISelAtn ds.b 1
|
|
kSCSIMsgIn ds.b 1 ; C
|
|
kSCSIMsgOut ds.b 1
|
|
kSCSIBusy ds.b 1
|
|
kNumOldSCSICalls ds.b 1 ; F (15)
|
|
|
|
ENDR
|
|
|
|
|
|
;******** Old Call States ********
|
|
|
|
OldCallStates RECORD 0, INCREMENT
|
|
|
|
kNotConnected ds.b 1 ; 0
|
|
kGotGet ds.b 1
|
|
kSelectInProgress ds.b 1
|
|
kConnected ds.b 1
|
|
kNumOldCallStates ds.b 1
|
|
|
|
ENDR
|
|
|
|
;***** Max number of buses supported *****
|
|
|
|
kMaxBuses EQU 16
|
|
|
|
|
|
;******** QHdr ********
|
|
|
|
QHdr RECORD 0, INCREMENT
|
|
|
|
qFlags ds.w 1
|
|
qHead ds.l 1
|
|
qTail ds.l 1
|
|
|
|
ENDR
|
|
|
|
|
|
;******** BusInfo ********
|
|
|
|
BusInfo RECORD 0, INCREMENT
|
|
|
|
initInfo ds SIMinitInfo
|
|
|
|
ENDR
|
|
|
|
|
|
;******** RefInfo ********
|
|
|
|
RefInfo RECORD 0, INCREMENT
|
|
|
|
DrvrCnt ds.l 1
|
|
RefInfo ds.l 1 ;!!!
|
|
|
|
ENDR
|
|
|
|
|
|
;******** DrvrList ********
|
|
|
|
DrvrList RECORD 0, INCREMENT
|
|
|
|
DevID ds.l 1
|
|
DRefNum ds.w 1
|
|
unused ds.w 1
|
|
|
|
ENDR
|
|
|
|
|
|
;******** DevInfo ********
|
|
|
|
DevInfo RECORD 0, INCREMENT
|
|
|
|
DevIdent ds DeviceIdent ;
|
|
ioPB ds.l 1 ; ptr to ioPB
|
|
IdentMsg ds.b 1 ; Boolean
|
|
|
|
ENDR
|
|
|
|
|
|
;******** BootInfo ********
|
|
|
|
BootInfo RECORD 0, INCREMENT
|
|
|
|
startPRAM ds.l 1 ; long word
|
|
BusCount ds.w 1 ;
|
|
defltDrvrRefNum ds.w 1 ; ref num of driver for default boot device
|
|
IDmasks ds.l kMaxBuses
|
|
|
|
ENDR
|
|
|
|
|
|
;****** XPT Globals *********
|
|
; partial list only because only not all is needed from asm
|
|
|
|
XPTglobals RECORD 0, INCREMENT
|
|
|
|
BusInfoPtrs ds.l kMaxBuses ;// pointers to BusInfos (handles 99.9965% of cases)
|
|
OldSyncWait ds.l 1
|
|
numBuses ds.w 1
|
|
syncUnsafeCount ds.w 1 ;
|
|
flags ds.b 1
|
|
unusedC2 ds.b 1
|
|
unusedC0 ds.b 1
|
|
unusedC1 ds.b 1
|
|
debugPatch ds.l 1 ; address of our _DebugUtil Patch
|
|
oldIDBusNumber ds.w 8 ; one for each SCSI ID
|
|
oldAPIstate ds.w 1 ; OldCallStates
|
|
latestOldCallPhase ds.w 1 ; SCSIphase
|
|
unusedX ds.w 1 ;
|
|
nextInterleave ds.w 1 ;
|
|
xptIOptr ds.l 1 ;
|
|
xptIOpbSize ds.w 1 ; size of currently allocated SCSI_IO (for old API)
|
|
maxIOpbSize ds.w 1 ; size of largest required SCSI_IO (for all SIMs)
|
|
Drivers ds.l 1 ; Ptr to DrvrList
|
|
BootStorage ds.l 1 ; Ptr to BootInfo
|
|
|
|
ENDR
|
|
|
|
|
|
;***** For XPTprivateFlags field *******
|
|
|
|
kbTIB equ 0
|
|
|
|
|
|
;****** For XPTg.flags field ********
|
|
|
|
kbOldAPIBusy equ 0
|
|
kbInOldCall equ 1
|
|
|
|
|
|
;******** SCSIStat word bit equates ********
|
|
|
|
kmStatATN equ $0200
|
|
kmStatACK equ $0100
|
|
|
|
kmStatRST equ $0080
|
|
kmStatBSY equ $0040
|
|
kmStatREQ equ $0020
|
|
kmStatMSG equ $0010
|
|
|
|
kmStatC_D equ $0008
|
|
kmStatI_O equ $0004
|
|
kmStatSEL equ $0002
|
|
kmStatDBP equ $0001
|
|
|
|
|
|
;******** Old SCSI Manager globals ********
|
|
;
|
|
; we're kind of living off some of the C0C^ globals here
|
|
;
|
|
SCSIGlobalsRec RECORD 0, INCREMENT ;{
|
|
;
|
|
; ÑÑÑÊOLD (& NEW emulation of old) ÑÑÑ
|
|
jvReset DS.L 1 ; SCSIReset vector
|
|
jvGet DS.L 1 ; SCSIGet vector
|
|
jvSelect DS.L 1 ; SCSISelect vector
|
|
jvCmd DS.L 1 ; SCSICmd vector
|
|
jvComplete DS.L 1 ; SCSIComplete vector
|
|
jvRead DS.L 1 ; SCSIRead vector
|
|
jvWrite DS.L 1 ; SCSIWrite vector
|
|
jvInstall DS.L 1 ; SCSI installation vector (for debugging purposes)
|
|
jvRBlind DS.L 1 ; SCSIRBlind vector
|
|
jvWBlind DS.L 1 ; SCSIWBlind vector
|
|
jvStat DS.L 1 ; SCSIStat vector
|
|
jvSelAtn DS.L 1 ; SCSISelAtn vector
|
|
jvSMsgIn DS.L 1 ; SCSIMsgIn vector
|
|
jvSMsgOut DS.L 1 ; SCSIMsgOut vector
|
|
firstPrivate DS.L 1 ; ptr to SCSI Mgr private storage record circularly linked list
|
|
nextPrivate DS.L 1 ; ptr to next available SCSI Mgr private storage record
|
|
base5380 DS.L 1 ; SCSI read base address
|
|
pdma5380 DS.L 1 ; SCSI pseudo-DMA read base addr
|
|
hhsk5380 DS.L 1 ; SCSI hardware-handshaked read base addr
|
|
wrOffset DS.W 1 ; write offset relative to "base5380"
|
|
scsiQFlags DS.W 1 ; flags for SCSI request queue
|
|
scsiQHead DS.L 1 ; ptr to head of SCSI request queue
|
|
scsiQTail DS.L 1 ; ptr to tail of SCSI request queue
|
|
activeReq DS.L 1 ; ptr to currently active SCSI request
|
|
timeout DS.L 1 ; next timeout should occur at this time
|
|
G_ID DS.B 1 ; initiator's SCSI ID mask
|
|
G_State DS.B 1 ; SCSI Mgr state (free/busy)
|
|
G_Async DS.W 1 ; unused - $62
|
|
G_Reserved0 DS.L 1 ; box number in high byte. HW flags in low bytes <v1.1>
|
|
G_Reserved1 DS.L 1 ; used for storing timer value <?> pdw
|
|
G_Reserved2 DS.L 1 ; machine-specific storage <v1.1>
|
|
;
|
|
;** Cool stuff for the new SCSI Manager
|
|
|
|
; The following variables in SCSIGlobals were stolen by the Async SCSI Manager
|
|
;
|
|
; ÑÑÑÊNEW ÑÑÑ
|
|
unused0 DS.L 1 ; 70:
|
|
|
|
berr_halg0 DS.L 1 ; 74: Saved HAL globals for internal bus (used by the Bus Error Handler)
|
|
berr_halg1 DS.L 1 ; 78: Ditto for external bus. (I know, its a hack but justifiable because
|
|
; we are the only ones with xfer routines that cause bus errors.)
|
|
jvUnusedXL1 DS.L 1 ; 7c: jv called when we're selected as target
|
|
|
|
numBEHs DS.B 1 ; 80: Number of Bus Error Handlers installed
|
|
inDebugger DS.B 1 ; 81: count of debugger entries+/exits-
|
|
unused1 DS.B 2 ; 82:
|
|
|
|
tempXPTGGlobals DS.L 1 ; 84: Used for "transitioning" from one XPT to another <SM8>
|
|
tempXPTGInUse DS.L 1 ; 88: Set to 'xptg' if we have two XPTs active <SM8>
|
|
|
|
unused2 DS.L 1 ; 8c:
|
|
|
|
recordBreak0 DS.L 1 ; 90: gets checked for match against all events recorded
|
|
recordBreak4 DS.L 1 ; 94:
|
|
|
|
busyPatch DS.L 1 ; 98: addr of SCSI busy patch
|
|
ciBusyPending DS.B 1 ; 9c: Used by the ciSCSIBusy patch to keep track of deferred jvSCSIFreeHook Calls
|
|
ciWasBusy DS.B 1 ; 9d: Set if we returned "Busy" to somebody.
|
|
busyPatchVers DS.W 1 ; 9e: version of SCSI busy patch installed
|
|
|
|
recCurrent DS.L 1 ; a0: debugging event recorder - current pointer
|
|
recSize DS.L 1 ; a4: debugging event recorder - size of buffer
|
|
recStartLog DS.L 1 ; a8: logical start of buffer
|
|
recStartPhys DS.L 1 ; ac: physical start of buffer
|
|
|
|
unusedW1 ds.w 1 ; b0:
|
|
completionQHdr ds.w 1 ; b2: high byte = flag indicating deferred task is enqd
|
|
completionQHead ds.l 1 ; b4: Q used to call completion routines from our
|
|
completionQTail ds.l 1 ; b8: deferred task (XPT.a).
|
|
|
|
unusedW2 ds.w 1 ;
|
|
privDTQueue
|
|
privDTQFlags ds.w 1 ; used for the private deferred task manager
|
|
privDTQHead ds.l 1 ; ditto
|
|
privDTQTail ds.l 1 ; ditto
|
|
oldjDisptch ds.l 1 ; the old jDisptch vector we patched out
|
|
ci_jDisptchVers ds.l 1 ; version tag for our patch
|
|
|
|
; ÑÑÑÊOLD ÑÑÑ
|
|
|
|
jvVFWO DS.L 1 ; virtual fast writes (hhsk)
|
|
jvCSO DS.L 1 ; virtual slow compare ("p" bit redefined to mean "compare")
|
|
jvUnused3 DS.L 1 ; unused
|
|
jvCFO DS.L 1 ; virtual fast compare ("p" bit redefined to mean "compare")
|
|
jvUnused4 DS.L 1 ; unused
|
|
jvInvalidIn DS.L 1 ; Invalid Message In
|
|
jvIdentifyIn DS.L 1 ; Identify Message In
|
|
jvCmdComplete DS.L 1 ; Command Complete
|
|
jvExtendedMsg DS.L 1 ; Extended Message
|
|
jvSaveDataPtr DS.L 1 ; Save Data Pointer
|
|
jvRestorePtrs DS.L 1 ; Restore Pointers
|
|
jvDisconnect DS.L 1 ; Disconnect
|
|
jvMsgRejIn DS.L 1 ; Message Reject In
|
|
jvLCCF DS.L 1 ; Linked Command Complete with (or without) flag
|
|
sdmStack DS.L 1 ; SCSIDiskMode stack global for DB Lite
|
|
base5380_1 DS.L 1 ; SCSI read base address (internal)
|
|
pdma5380_1 DS.L 1 ; SCSI pseudo-DMA read base addr (internal)
|
|
hhsk5380_1 DS.L 1 ; SCSI hardware-handshaked read base addr (internal)
|
|
base5380_2 DS.L 1 ; SCSI read base address (external)
|
|
pdma5380_2 DS.L 1 ; SCSI pseudo-DMA read base addr (external)
|
|
hhsk5380_2 DS.L 1 ; SCSI hardware-handshaked read base addr (external)
|
|
jvIdentifyOut DS.L 1 ; Identify Message Out
|
|
jvMsgRejOut DS.L 1 ; Message Reject Out
|
|
jvInvalidOut DS.L 1 ; Invalid Message Out
|
|
jvKillIO DS.L 1 ; Kill I/O
|
|
jvNoOp DS.L 1 ; No Operation
|
|
jvBusDevRstOut DS.L 1 ; Bus Device Reset Out <v1.3>
|
|
G_SCSIDREQ DS.L 1 ; SCSI DREQ base address
|
|
G_TargetID DS.L 1 ; Target ID
|
|
G_FakeStat DS.L 1 ; Fake state
|
|
G_OldTrapAdrs DS.L 1 ; contains the old SCSIMgr address
|
|
G_OldIntHnd DS.L 1 ; contains old intrp level 2 handler
|
|
G_IntrpCount DS.L 1 ; counts total # of intrps
|
|
G_IntrpStat DS.L 1 ; Status read by Intrp routine
|
|
GxState96 DS.L 1 ; Bits to make c96 backwards compatible
|
|
BootCfgFlags DS.L 1 ; copy of d2 passed to InitHW_SCSI96 at boot (used by jvInitHW)
|
|
G_bitDREQ DS.B 1 ; Bit position at DREQ location
|
|
jvUnused32 DS.B 1 ; Future expansion
|
|
jvUnused33 DS.W 1 ; Future expansion
|
|
jvIntHnd DS.L 1 ; 24-entry jump table -- interrupt handler
|
|
jvMessage DS.L 1 ; Send a message to the deferred task
|
|
jvClearIRQ DS.L 1 ; Clear the SCSI interrupt (and VIA, if necessary)
|
|
jvDisEnable DS.L 1 ; Enable/disable interrupts routine
|
|
jvLogError DS.L 1 ; Record error for the PB
|
|
jvSCSIDT DS.L 1 ; Deferred Task for all other interrupts
|
|
jvFind DS.L 1 ; Find a request to process
|
|
jvSetup DS.L 1 ; Setup active request
|
|
jvPreflight DS.L 1 ; Preflight the parameter block
|
|
jvEnDequeue DS.L 1 ; Enqueue/dequeue a parameter block
|
|
jvArb DS.L 1 ; Arbitrate for the SCSI bus
|
|
jvSel DS.L 1 ; Select a SCSI device
|
|
jvDelay22 DS.L 1 ; Delay 2.2 microseconds
|
|
jvClearState DS.L 1 ; Remove the current request
|
|
jvTransfer DS.L 1 ; Transfer data using the primitive routines
|
|
jvSetTimer DS.L 1 ; Set the timer
|
|
jvResetBus DS.L 1 ; Reset SCSI bus and kill all requests
|
|
jvClearBus DS.L 1 ; Clear the SCSI bus
|
|
jvBusErr DS.L 1 ; Bus error handler
|
|
jvDataDMA DS.L 1 ; DMA-related data-chaining interpreter
|
|
|
|
; ÑÑÑÊNEW ÑÑÑ
|
|
xptGlobals DS.L 1 ; 1b4- pointer to Cousin Itt's XPT globals
|
|
|
|
; ÑÑÑÊOLD ÑÑÑ
|
|
blindBusTO DS.L 1 ; 1b8- number of ticks to wait for blind transfer bytes (after 1st byte)
|
|
transferType DS.W 1 ; 1bc- Type of data transfer to perform (used in Transfer_96, BusError)
|
|
lastINTread DS.B 1 ; 1be- Value of rINT at last valid interrupt read
|
|
lastSTAread DS.B 1 ; 1bf- Value of rSTA at last valid interrupt read
|
|
; ÑÑÑÊNEW and OLD ÑÑÑ
|
|
yeOldeBusErrVct DS.L 1 ; 1c0- temp storage while we insert our buserr handler <T10> pdw
|
|
base539x0 DS.L 1 ; SCSI 539x base address, bus0 <T3><T4>
|
|
base539x1 DS.L 1 ; SCSI 539x base address, bus1 <T3><T4>
|
|
G_SCSIDevMap0 DS.B 1 ; SCSI Device Map for the Internal SCSI Bus
|
|
fill1 DS.B 3
|
|
G_SCSIDevMap1 DS.B 1 ; SCSI Device Map for the External SCSI Bus <T3>
|
|
fill2 DS.B 3
|
|
|
|
|
|
ENDR ;}
|
|
|
|
maxOpcode EQU 8 ; highest numbered TIB opcode (from PatchIIROM.a)
|
|
|
|
MACRO
|
|
GetXPTg
|
|
move.l SCSIGlobals, A5
|
|
move.l SCSIGlobalsRec.xptGlobals(A5), A5
|
|
ENDM
|
|
|
|
ENDIF ; already included
|