mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2025-01-01 11:29:27 +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.
572 lines
25 KiB
Plaintext
572 lines
25 KiB
Plaintext
;
|
|
; File: SCSIPriv.a
|
|
;
|
|
; Contains: SCSI Mgr-specific variable and constant definitions
|
|
;
|
|
; Written by: Jerry Katzung
|
|
;
|
|
; Copyright: © 1989-1992 by Apple Computer, Inc. All rights reserved.
|
|
;
|
|
; Change History (most recent first):
|
|
;
|
|
; <SM7> 11/20/92 SWC Rolled in changes from Horror.
|
|
; <H4> 6/10/92 BG Added global sdmStack for DB Lite SCSI Disk Mode. Added global
|
|
; for DREQ bit position within DREQ access location. Added tail
|
|
; bytes to SCSIGlobals for expansion and updated file from Reality
|
|
; SCSIPriv.a .
|
|
; <H3> 2/28/92 SWC Removed temporary DBLite equates.
|
|
; <H2> 2/10/92 SWC jab/Added base address storage for external c80 in DB Lite.
|
|
; <SM6> 7/28/92 PW Added Cousin Itt stuff: xptGlobals (ptr) and RecorderPtr (for
|
|
; debugging).
|
|
; <SM5> 7/7/92 CSS Updated from Reality:
|
|
; <17> 5/22/92 DTY #1029009 <jab>: Added global for DREQ bit position within DREQ
|
|
; access location.
|
|
; <SM4> 5/17/92 kc Remove conditionals.
|
|
; <SM3> 5/1/92 JSM Roll-in changes from Reality:
|
|
; <16> 5/1/92 JSM We need to define Max020030BusErrs because it's sometimes wrong
|
|
; to use MaxBusErr since CPU is set to 00 for System builds.
|
|
; <15> 4/7/92 pvh Fill in vectors jvUnused10-jvUnused 16 for the SCSI Manager
|
|
; (these are what were added to HORROR's SCSIPriv.a) Per James
|
|
; Blair.
|
|
; <SM2> 3/3/92 kc Add TransactionFlag, and FreeHookPending to SCSIGlobals.
|
|
; <14> 12/26/91 RB Include PowerPrivEqu.a for Power Manager definitions.
|
|
; <13> 12/21/91 RB Need to add definition for scsiNewSCSIMax for the ROM to build.
|
|
; <12> 11/25/91 DTY Added bit flags for transaction table.
|
|
; <11> 10/28/91 SAM/KSM Rolled in Regatta file.
|
|
; (pdw) Added all of the lo-mem SCSI Globals that were defined in
|
|
; the TERROR version of this file. Also added several others that
|
|
; are unique to the Regatta version of the c96 SCSIMgr.
|
|
; <10> 8/22/91 JSM Clean up header.
|
|
; <9> 6/12/91 LN added #include 'InternalOnlyEqu.a'
|
|
; <8> 1/30/91 gbm sab, #38: Change the Ôalready including this fileÕ variable to
|
|
; all uppercase (for security reasons)
|
|
; <7> 12/14/90 dnf Add dispatch selector and macro for _SCSIBusy
|
|
; <6> 9/14/90 MSH Added to conditional list that extends the local storage to
|
|
; accomodate spinning down the hard disk.
|
|
; <4> 2/21/90 CCH Removed Max040BusErrs from conditional.
|
|
; <3> 2/20/90 BG Added 040 BusErr retry constant.
|
|
; <2> 1/18/90 JWK Needed for Zone5 - Added equates for SCSIStat fix and new
|
|
; watchdog timeout value.
|
|
; <1.4> 12/10/89 jwk NEEDED FOR F19 - Additional locals to DMA in old SCSI Mgr
|
|
; <1.3> 9/11/89 jwk NEEDED FOR F19 - Added Bus Dev Rst, support for SE and Plus
|
|
; <1.2> 7/15/89 jwk NEEDED FOR AURORA - Minor changes for intr handling
|
|
; <1.1> 6/29/89 jwk NEEDED FOR AURORA - Added equates to help with System patch
|
|
; builds
|
|
; <1.0> 6/13/89 jwk Reorganizing SCSI sources to be Universal-ROM friendly
|
|
;
|
|
|
|
IF &TYPE('__INCLUDINGSCSIPRIV__') = 'UNDEFINED' THEN
|
|
__INCLUDINGSCSIPRIV__ SET 1
|
|
|
|
; This is the SCSIPriv.a file
|
|
; <start>
|
|
|
|
BLANKS ON
|
|
STRING ASIS
|
|
|
|
INCLUDE 'InternalOnlyEqu.a'
|
|
INCLUDE 'PowerPrivEqu.a' ; <14> rb
|
|
|
|
IF Cpu ³ 020 THEN
|
|
MACHINE MC68020 ; for '020 instructions <C846>
|
|
ENDIF
|
|
|
|
scsiNewSCSIMax EQU 2 ; <13> rb, maximum selector supported in motherboard
|
|
|
|
;
|
|
; Stack frame definitions (frame allocated in StdEntry)
|
|
;
|
|
|
|
OldBusErrVct EQU -4 ; long <C789>
|
|
BusErrCount EQU -6 ; word <C846>
|
|
LocalSize EQU -6 ; total <C789>
|
|
|
|
IF Cpu ³ 020 THEN
|
|
MaxBusErr EQU 5
|
|
ELSE
|
|
MaxBusErr EQU 2
|
|
ENDIF
|
|
|
|
Max020030BusErrs EQU 5 ; same as MaxBusErr when Cpu ³ 020 <16>
|
|
Max040BusErrs EQU 1 ; only once because of Instruction Restart <3><4>
|
|
|
|
;
|
|
; Additional stack frame definitions for SCSI DMA chip support in the old SCSI Mgr <v1.4>
|
|
; <start>
|
|
AddLocalSize EQU 20 ; 5 longs
|
|
vAddr EQU 0 ; virtual address
|
|
vCount EQU 4 ; virtual buffer length
|
|
pAddr EQU 8 ; physical address <end>
|
|
pCount EQU 12 ; physical buffer length <v1.4>
|
|
|
|
;=======================================================================================
|
|
; Private Old SCSI Manager Related Stuff
|
|
|
|
scsiBusy Equ 14 ; SCSIBusy routine selector <7> djw
|
|
|
|
macro ; check if SCSI mgr is busy or free <7> djw
|
|
_SCSIBusy
|
|
move.w #scsiBusy,-(sp)
|
|
_SCSIDispatch
|
|
endm
|
|
|
|
; Bit flags for transaction table
|
|
|
|
fDoFreeHook equ 0 ; set = execute "jSCSIFreeHook"
|
|
fSetTransFlag equ 1 ; set = set "TransactionFlag"
|
|
fClearTransFlag equ 2 ; set = clear "TransactionFlag" unconditionally
|
|
fClearTransErr equ 3 ; set = clear "TransactionFlag" if function error
|
|
|
|
;
|
|
; Trap number for the new SCSI Manager trap
|
|
;
|
|
TrapNum EQU $A089 ; _NewSCSI
|
|
_NewSCSI OPWORD $A089 ; the exciting, powerful, new SCSI Mgr traps
|
|
;
|
|
; These are the private fields in the parameter block
|
|
;
|
|
scsiPrivPB RECORD 0, INCREMENT
|
|
scsiPrivLink DS.L 1 ; link to next SCSI Mgr private record
|
|
scsiFlags DS.B 1 ; SCSI Mgr operation flag bits
|
|
scsiState DS.B 1 ; SCSI Message Out state machine
|
|
scsiFlag1 DS.B 1 ; flag expansion
|
|
scsiFlag2 DS.B 1 ; flag expansion
|
|
scsiTime DS.L 1 ; timeout time
|
|
scsiCmdOffs DS.L 1 ; value of command buffer ptr between interrupts
|
|
scsiTempErr DS.W 1 ; current error message <v1.2>
|
|
scsiFiller DS.W 1 ; future expansion <v1.2>
|
|
scsiDCSaved DS.L 1 ; part of Saved Data Pointer
|
|
scsiDCOffs DS.L 1 ; value of data pointer between interrupts
|
|
scsiMoveOffs DS.L 1 ; partial "dcMove" count between interrupts
|
|
scsiVAddr DS.L 1 ; virtual address for Logical/Physical translation
|
|
scsiVCount DS.L 1 ; virtual count for Logical/Physical translation
|
|
scsiPAddr DS.L 1 ; physical address from Logical/Physical translation
|
|
scsiPCount DS.L 1 ; physical count from Logical/Physical translation
|
|
scsiPrivPBSize EQU *-scsiPrivPB ; size of SCSI Mgr private storage (per active request)
|
|
ENDR
|
|
;
|
|
; Version number of the SCSI Mgr
|
|
;
|
|
mgrVersion EQU 1 ; brand new SCSI Mgr 2
|
|
;
|
|
; Valid ID and LUN values are from 0-7 inclusive.
|
|
;
|
|
LUNMask EQU 7 ; mask for valid logical unit numbers (0-7)
|
|
;
|
|
; SCSI protocol equates
|
|
;
|
|
minSnsLen EQU 4 ; minimum sense buffer length
|
|
allocLen EQU 4 ; offset to alloc length byte in auto Req Sense cmd
|
|
;
|
|
; These bits are used to indicate information in the "state1" global variable
|
|
;
|
|
dtEnqueued EQU 7 ; Deferred Task already enqueued
|
|
dataSem EQU 3 ; SCSI Mgr data structures inconsistent
|
|
doingDMA EQU 1 ; SCSIDMA chip is DMAing (don't let SCSIStat touch it) <2>
|
|
waitingForIRQ EQU 0 ; waiting for an intr - DMA in progress, <v1.3>
|
|
; or waiting for Loss of BSY <v1.3>
|
|
;
|
|
; This constant is used to set up the watchdog timer to timeout after 250ms.
|
|
; This value was chosen as the timeout value since 250ms is much more lenient than
|
|
; the current 16us on the MacII-class machines. It is equal to the Mac SE timeout,
|
|
; and is much greater than the effective 20us timeout of the Mac Plus.
|
|
;
|
|
sc250msTicks EQU 2500000 ; 250ms * 10000 watchdog timer ticks/ms <2>
|
|
;
|
|
; interrupt level of the SCSI chip -- will be moved to HardwareEqu.a (???)
|
|
;
|
|
scsiIntMask EQU $0200 ; on Rom32 machines
|
|
;
|
|
; Currently the watchdog timer goes off every five seconds.
|
|
;
|
|
WDTO EQU 5000 ; watchdog timeout value in milliseconds (word)
|
|
|
|
bDBP EQU 0 ; bit test for *DBP - add to xHardwareEqu.a
|
|
|
|
; Location of Mac Plus SCSIGlobals ptr <v1.1>
|
|
SCSIDispVct EQU $000c54 ; address of _SCSIDispatch vector in trap dispatch table
|
|
SCSIPtr EQU -4 ; offset from _SCSIDispatch code to SCSI Mgr globals ptr
|
|
|
|
;
|
|
; Base addresses for the Mac Plus. The Mac Plus doesn't actually have
|
|
; hardware-handshaking circuitry, but using the pseudo-DMA base address
|
|
; in place of the hhsk base address makes the data transfer code simpler.
|
|
;
|
|
plusSCSIBase EQU $580000 ; read base address of Mac Plus SCSI chip <v1.2>
|
|
plusSCSIDMA EQU $580200 ; pseudo-DMA read base address of Mac Plus SCSI chip <v1.2>
|
|
plusSCSIHsk EQU $580200 ; fake "hardware-handshake" read base address <v1.2>
|
|
|
|
macPlusSCSIDB EQU $00db ; trial-and-error value for Mac Plus <v1.2><v1.3>
|
|
macSeSCSIDB EQU $00fc ; trial-and-error value for Mac SE <v1.2><v1.3>
|
|
|
|
OldTimeSCSIDB EQU $da6 ; SCSI DBRA's per millisecond on all machines
|
|
|
|
scsiOldSCSIErr EQU -1 ; old SCSI Mgr called ClearState <v1.2>
|
|
|
|
;
|
|
; SCSI Mgr flags:
|
|
;
|
|
scsiFInUse EQU $01 ; SCSI Mgr private storage record is in use
|
|
scsiFAutoSns EQU $02 ; parameter block for automatic Request Sense
|
|
scsiFComp EQU $10 ; Perform a read-compare (old requests only)
|
|
scsiFStatus EQU $20 ; Device has gone through Status phase
|
|
scsiFPtyErr EQU $40 ; a parity error has occurred
|
|
scsiFTagged EQU $80 ; request is in danger of timing out
|
|
; SCSI Mgr bits:
|
|
scsiBInUse EQU 0 ; SCSI Mgr private storage record is in use
|
|
scsiBAutoSns EQU 1 ; parameter block for automatic Request Sense
|
|
scsiBComp EQU 4 ; Perform a read-compare (old requests only)
|
|
scsiBStatus EQU 5 ; Device has gone through Status phase
|
|
scsiBPtyErr EQU 6 ; a parity error has occurred
|
|
scsiBTagged EQU 7 ; request is in danger of timing out
|
|
;
|
|
; Message Out state machine state variable values
|
|
;
|
|
scsiMOID EQU $00 ; "ID" state - normal Identify sequence
|
|
scsiMOMR EQU $01 ; "MR" state - Message Reject sequence
|
|
scsiMOInvalid EQU $02 ; "Invalid" state - bad state machine sequence
|
|
scsiMOKIO EQU $03 ; "KIO" state - Kill I/O sequence
|
|
scsiMONOP EQU $04 ; "NOP" state - unexpected Message Out, send No Op's
|
|
scsiMOBDR EQU $05 ; "Bus Device Reset" state - send a BDR message <v1.3>
|
|
|
|
;
|
|
; Messages - used as an index into a jump table of message-handler routines
|
|
;
|
|
scsiCmdComplete EQU $00 ; Command Complete
|
|
scsiExtendedMsg EQU $01 ; Extended Message
|
|
scsiSaveDataPtr EQU $02 ; Save Data Pointer
|
|
scsiRestorePtrs EQU $03 ; Restore Pointers
|
|
scsiDisconnect EQU $04 ; Disconnect
|
|
scsiIDetectErr EQU $05 ; Initiator Detected Error
|
|
scsiAbort EQU $06 ; Abort
|
|
scsiMsgReject EQU $07 ; Message Reject
|
|
scsiNoOperation EQU $08 ; No Operation
|
|
scsiMsgParityErr EQU $09 ; Message Parity Error
|
|
scsiLnkCmdCpl EQU $0A ; Linked Command Complete
|
|
scsiLnkCmdCplFlg EQU $0B ; Linked Command Complete (with flag)
|
|
scsiBusDevReset EQU $0C ; Bus Device Reset
|
|
scsiIdentFlg EQU $80 ; Identify flag
|
|
scsiIdentBit EQU 7 ; Identify bit
|
|
scsiReselFlg EQU $40 ; "Initiator supports Reselection" flag
|
|
scsiReselBit EQU 6 ; "Initiator supports Reselection" bit
|
|
scsiIdentifyIn EQU $0D ; vector number for Identify message (pseudo-message)
|
|
scsiMsgRejectOut EQU $0E ; vector number for an invalid message (pseudo-message)
|
|
|
|
;
|
|
; declaration of SCSI Manager globals
|
|
;
|
|
scsiGlobalRecord RECORD 0, INCREMENT
|
|
;
|
|
; SCSI Manager "G_State" flags
|
|
;
|
|
;sBusy EQU 1 ; used for G_State field -- SCSI Mgr is busy (non-zero)
|
|
;sFree EQU 0 ; used for G_State field -- SCSI Mgr is free
|
|
scPending EQU 7 ; bit in G_State -- an old request is spinning in SCSIGet
|
|
scBusy EQU 0 ; bit in G_State -- an old request is pending/in progress
|
|
;
|
|
; old SCSI Manager globals
|
|
;
|
|
numVectors EQU 24 ; 24 4-byte jump table vectors
|
|
numSCSIVect EQU numVectors ; number of SCSI Mgr vectors
|
|
jmpTblSize EQU numVectors*4 ; 24 4-byte jump table vectors
|
|
G_JmpTbl ; 24 4-byte jump table vectors
|
|
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"
|
|
scsiQHdr ; 10-byte OS queue header - SCSI request queue
|
|
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_CompTicks ; when request finished (unpatched SE only) <v1.1>
|
|
G_Reserved0 DS.L 1 ; box number in high byte. HW flags in low bytes <v1.1>
|
|
pageFault ; ptr to page fault SCSI PB <v1.1>
|
|
G_Reserved1 DS.L 1 ; used for storing timer value <?> pdw
|
|
G_Reserved2 DS.L 1 ; machine-specific storage <v1.1>
|
|
RecorderPtr DS.L 1 ; debugging event recorder pointer $70 <SM6> pdw
|
|
;G_ExtPtr DS.L 1 ; unused (saved for future expansion)
|
|
;
|
|
; extended SCSI manager globals
|
|
;
|
|
numExtVec EQU 96 ; 96 new vectors
|
|
discLUN DS.B 8 ; bitmaps of disconnected LUN's by SCSI ID
|
|
discID DS.B 1 ; bitmap of disconnected SCSI ID's
|
|
state1 DS.B 1 ; dTask enqueued, data structures inconsistent, DMA in progress
|
|
state2 DS.B 1 ; SCSI Mgr interface level
|
|
state3 DS.B 1 ; SCSI DMA ?
|
|
busTO DS.L 1 ; byte-to-byte timing in microseconds
|
|
phaseTable ; 8-entry jump table for phase handler routines
|
|
jvDataOut DS.L 1 ; Data Out phase handler
|
|
jvDataIn DS.L 1 ; Data In phase handler
|
|
jvCommand DS.L 1 ; Command phase handler
|
|
jvStatus DS.L 1 ; Status phase handler
|
|
jvIllegal1 DS.L 1 ; Illegal phase - reset the bus
|
|
jvIllegal2 DS.L 1 ; Illegal phase - reset the bus
|
|
jvMsgOut DS.L 1 ; Message Out phase handler
|
|
jvMsgIn DS.L 1 ; Message In phase handler
|
|
dataTable ; 16-entry jump table for data-transfer routines
|
|
jvVSR DS.L 1 ; virtual slow reads
|
|
jvVSW DS.L 1 ; virtual slow writes
|
|
jvVFR DS.L 1 ; virtual fast reads
|
|
jvVFW DS.L 1 ; virtual fast writes
|
|
jvUnused1 DS.L 1 ; unused (illegal)
|
|
jvUnused2 DS.L 1 ; unused (illegal)
|
|
jvPFR DS.L 1 ; physical fast reads (DMA)
|
|
jvPFW DS.L 1 ; physical fast writes (DMA)
|
|
jvVSRO DS.L 1 ; virtual slow reads
|
|
jvVSWO DS.L 1 ; virtual slow writes
|
|
jvVFRO DS.L 1 ; virtual fast reads (hhsk)
|
|
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
|
|
scsiReadSlow EQU jvVSRO - jvVSR ; offset to old slow read routine <v1.2>
|
|
scsiWriteSlow EQU jvVSWO - jvVSR ; offset to old slow write routine <v1.2>
|
|
scsiReadFast EQU jvVFRO - jvVSR ; offset to old slow read routine <v1.2>
|
|
scsiWriteFast EQU jvVFWO - jvVSR ; offset to old slow write routine <v1.2>
|
|
scsiCompBit EQU scsiBPhysical ; bit to select old SCSI Mgr "scComp" operation
|
|
;
|
|
msgTable ; 32-entry jump table for different messages
|
|
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
|
|
|
|
; Base addresses for dual c80 SCSI Bus
|
|
sdmStack DS.L 1 ; SCSIDiskMode stack global for DB Lite <H5> jab
|
|
base5380_1 DS.L 1 ; SCSI read base address (internal) <H2>
|
|
pdma5380_1 DS.L 1 ; SCSI pseudo-DMA read base addr (internal) <H2>
|
|
hhsk5380_1 DS.L 1 ; SCSI hardware-handshaked read base addr (internal)<H2>
|
|
base5380_2 DS.L 1 ; SCSI read base address (external) <H2>
|
|
pdma5380_2 DS.L 1 ; SCSI pseudo-DMA read base addr (external) <H2>
|
|
hhsk5380_2 DS.L 1 ; SCSI hardware-handshaked read base addr (external)<H2>
|
|
|
|
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>
|
|
|
|
; SUPPORT FOR 5396 (13C bytes from the base) <T3>
|
|
; (These used to be jvUnused23-30) <T3>
|
|
G_SCSIDREQ DS.L 1 ; SCSI DREQ base address <T3><T4>
|
|
G_TargetID DS.L 1 ; Target ID <T3>
|
|
G_FakeStat DS.L 1 ; Fake state <T3>
|
|
G_OldTrapAdrs DS.L 1 ; contains the old SCSIMgr address <T3>
|
|
G_OldIntHnd DS.L 1 ; contains old intrp level 2 handler <T3>
|
|
G_IntrpCount DS.L 1 ; counts total # of intrps <T3>
|
|
G_IntrpStat DS.L 1 ; Status read by Intrp routine <T3>
|
|
G_State96 DS.L 1 ; Bits to make c96 backwards compatible <T10> pdw
|
|
|
|
BootCfgFlags DS.L 1 ; copy of d2 passed to InitHW_SCSI96 at boot (used by jvInitHW) <T10> pdw
|
|
G_bitDREQ DS.B 1 ; Bit position at DREQ location <17> jab
|
|
jvUnused32 DS.B 1 ; Future expansion <17> jab
|
|
jvUnused33 DS.W 1 ; Future expansion <17> jab
|
|
; <?> from prev <?>
|
|
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 <v1.2>
|
|
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 <v1.2>
|
|
xptGlobals DS.L 1 ; pointer to Cousin Itt's XPT globals $1b4 <SM6> pdw
|
|
; <?> thru next <?>
|
|
; More Space for the new SCSI96 Manager(1B8 bytes from the base) <T3>
|
|
; (these used to be jvUnused 47-53) <T3>
|
|
blindBusTO DS.L 1 ; number of ticks to wait for blind transfer bytes (after 1st byte)
|
|
transferType DS.W 1 ; Type of data transfer to perform (used in Transfer_96, BusError)
|
|
lastINTread DS.B 1 ; Value of rINT at last valid interrupt read
|
|
lastSTAread DS.B 1 ; Value of rSTA at last valid interrupt read
|
|
yeOldeBusErrVct DS.L 1 ; 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.L 1 ; SCSI Device Map for the Internal SCSI Bus <T3>
|
|
G_SCSIDevMap1 DS.L 1 ; SCSI Device Map for the External SCSI Bus <T3>
|
|
|
|
jvErr DS.L 1 ; SCSI96 Error, used to be jUnused 54 <T6> <T6>
|
|
jvEscLoop DS.L 1 ; SCSI Escape Loop Vector <T7>
|
|
jvCyclePhase DS.L 1 ; Bitbuckets or fills bytes to get target to Status phase (was jvUnused49)
|
|
jvInitSCSIHW DS.L 1 ; init SCSI chip (was jvUnused57) <T10> pdw
|
|
; <?> from prev <?>
|
|
;
|
|
newSCSIDisp
|
|
jvSCSIRequestIO DS.L 1 ; SCSIRequestIO
|
|
jvSCSIKillIO DS.L 1 ; SCSIKillIO
|
|
jvSCSIBusInfo DS.L 1 ; SCSIBusInfo
|
|
|
|
newSCSI96Disp ; used to be jvUnused63-jvUnused66 <?> thru next <?>
|
|
jvSCSIBusy DS.L 1 ; SCSIBusy vector, selector 14
|
|
jvSel15 DS.L 1 ; SCSI vector for selector 15
|
|
jvSel16 DS.L 1 ; SCSI vector for selector 16
|
|
jvSel17 DS.L 1 ; SCSI vector for selector 17
|
|
jvAltBusCall DS.L 1 ; Call to alternate SCSI bus <?> from prev <?>
|
|
;
|
|
numMsgVct EQU 36 ; number of message routing vectors
|
|
msgInTbl DS.B numMsgVct ; dispatch table for Messages 00H-23H (Msg In)
|
|
msgOutTbl DS.B numMsgVct ; dispatch table for Messages 00H-23H (Msg Out)
|
|
;
|
|
dtQElSize EQU 20 ; temporary
|
|
dTask DS.B dtQElSize ; Deferred Task Mgr task record
|
|
;
|
|
tmQSize EQU 14 ; Time Mgr task record size
|
|
timer DS.B tmQSize ; Time Mgr task record for request timing
|
|
;
|
|
RSCmd DS.B 6 ; Request Sense command buffer
|
|
RSDC DS.L 12 ; data-chaining block for Request Sense command
|
|
;
|
|
dummy DS scsiPB ; dummy parameter block
|
|
;
|
|
dummyPriv DS scsiPrivPB ; dummy private storage
|
|
faultPriv DS scsiPrivPB ; private storage for page-fault handling
|
|
firstPriv DS scsiPrivPB ; private storage for request processing
|
|
DS scsiPrivPB ; private storage for request processing
|
|
DS scsiPrivPB ; private storage for request processing
|
|
DS scsiPrivPB ; private storage (machine-specific storage follows)
|
|
TransactionFlag DS.L 1 ; location to store SCSI transaction flag <2> kc
|
|
FreeHookPending DS.L 1 ; location of pending free-hook flag <2> kc
|
|
|
|
GlobalSize EQU *-scsiGlobalRecord ; size of SCSI Mgr globals
|
|
ENDR
|
|
|
|
;
|
|
; Machine-specific structure
|
|
;
|
|
machSpecRecord RECORD 0, INCREMENT
|
|
|
|
IF tmQSize > SleepqRec.SleepqSize THEN ; use the larger of the two data structures <14> rb
|
|
sleep ; 12-byte sleep queue element (onHcMac) OR
|
|
timer2 DS.B tmQSize ; 14-byte intr polling timer (onMac) <v1.1>
|
|
ELSE
|
|
sleep ; 12-byte sleep queue element (onHcMac) OR
|
|
timer2 DS.B SleepqSize ; 14-byte intr polling timer (onMac) <v1.1>
|
|
ENDIF
|
|
machSpecSize EQU *-machSpecRecord ; size of machine-specific record
|
|
ENDR
|
|
|
|
;
|
|
; Find selector (passed in d0.l)
|
|
;
|
|
findAny EQU -1 ; find first non-disconnected request
|
|
findAnyFlag EQU 31 ; find first non-disconnected request flag (bit 31)
|
|
|
|
;
|
|
; EnDequeue selector (passed in d0.l)
|
|
;
|
|
enqNormal EQU -1 ; enqueue at end of queue
|
|
enqFront EQU -2 ; enqueue at front of queue ("immediate" function, page fault)
|
|
deqNormal EQU 1 ; dequeue one request (linked commands are elevated)
|
|
deqLinked EQU 2 ; remove a series of linked commands (to cleanly kill linked cmds)
|
|
enqueueFlag EQU 31 ; enqueue/dequeue selection flag (bit 31)
|
|
|
|
;
|
|
; Masks for the interrupt handler. They are used to determine the interrupt type.
|
|
; These masks are the concatenation of the Bus and Status Register with the
|
|
; Current SCSI Bus Status Register. The BSR is the most-significant byte.
|
|
;
|
|
mReselect EQU $F5E2 ; mask to clear don't cares for Reselect interrupt
|
|
iReselect EQU $1002 ; bit image for a Reselect intr. with don't care bits reset
|
|
scResel EQU 7 ; bit in "dtParm" for Reselect interrupts
|
|
mEOP EQU $F6C2 ; mask to clear don't cares for EOP intr (PM is don't care) <v1.2>
|
|
iEOP EQU $9040 ; bit image for EOP intr. with don't care bits cleared
|
|
scEOP EQU 6 ; bit in "dtParm" for Reselect interrupts
|
|
mPhaseMm EQU $BDE2 ; mask to clear don't cares for Phase Mismatch Error intr.
|
|
iPhaseMm EQU $1060 ; bit image for Phase Mismatch Error without don't care's
|
|
scPhaseMm EQU 5 ; bit in "dtParm" for Reselect interrupts
|
|
mLossBsy EQU $F7FF ; mask to clear don't cares for Loss of BSY interrupts
|
|
iLossBsy EQU $1400 ; bit image for Loss of BSY intr. without don't care's
|
|
scLossBsy EQU 4 ; bit in "dtParm" for Reselect interrupts
|
|
mBusReset EQU $F77F ; mask to clear don't cares for SCSI Bus Reset interrupt
|
|
iBusReset EQU $1000 ; bit image for SCSI Bus Reset intr. with don't care's reset
|
|
scBusReset EQU 3 ; bit in "dtParm" for Reselect interrupts
|
|
mParity EQU $BCC2 ; mask to clear don't cares for Parity Error interrupt
|
|
iParity EQU $3840 ; bit image for Parity Error intr. with don't care's reset
|
|
scParity EQU 2 ; bit in "dtParm" for Reselect interrupts
|
|
scNewRequest EQU 1 ; bit in "dtParm" indicating a new request to process
|
|
|
|
;
|
|
; Register saving convention
|
|
;
|
|
scsiRegs REG a0-a5/d1-d7 ; standard register saving convention (result in d0)
|
|
intrRegs REG a0-a5/d0-d7 ; interrupt handler register saving convention
|
|
zeroReg EQU d7 ; quick source of zeroes (CLR won't work on SCSI chip)
|
|
|
|
;
|
|
; Old SCSI Mgr equates -- temporary, since SCSIEqu.a has the public portion of the PB
|
|
;
|
|
|
|
maxOpcode EQU 8 ; highest numbered TIB opcode (from PatchIIROM.a)
|
|
|
|
; <v1.6>
|
|
; <end>
|
|
;
|
|
; Here we redefined the Universal ROM's hardware feature bits to serve our own twisted
|
|
; purposes. If we're building for a System Disk, then these bits in the "G_Reserved0"
|
|
; variable in the globals reflect the low memory data structures defined for the ROM's. <v1.1>
|
|
; <start>
|
|
; NOTE that these are also defined in SCSIMgrFlags.a, so if you change 'em here....
|
|
;
|
|
sHWCbPwrMgr equ 0 ; see if we have a Power Mgr
|
|
sOSSExists equ 1 ; do we have an OSS ?
|
|
sRBVExists equ 2 ; do we have an RBV ?
|
|
sVIA2Exists equ 3 ; do we have a second VIA ?
|
|
sSCSIDMAExists equ 4 ; do we have a SCSI DMA chip ?
|
|
isMacPlus equ 5 ; are we on a Mac Plus ?
|
|
is68000 equ 6 ; are we on a 68000 ? <v1.1>
|
|
sDeferUserFn equ 7 ; is _DeferUserFn defined ? <end>
|
|
;sSCSI96_1 equ 8 ; do we have 1st SCSI96 chip <T3>
|
|
;sSCSI96_2 equ 9 ; do we have 2nd SCSI96 chip? <T3>
|
|
;sSCSI96_1 equ 8 ; do we have 1st SCSI96 chip <T3>
|
|
;sSCSI96_2 equ 9 ; do we have 2nd SCSI96 chip? <T3>
|
|
|
|
|
|
numSelectorsDB equ 2 ; we only patch three SCSI Mgr routines <H2>
|
|
|
|
cTargSetup equ $40 ; setup target mode for DBLite's dual bus DiskMode <H2>
|
|
|
|
|
|
ENDIF ; ...already included
|