boot3/OS/SCSIMgr4pt3/SCSIEqu53c96.a
Elliot Nunn 5b0f0cc134 Bring in CubeE sources
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.
2017-12-26 10:02:57 +08:00

275 lines
11 KiB
Plaintext

;==========================================================================
;
; File: SCSIEqu53c96.a
;
; Contains: Equates for dealing with the SCSI 53c96 chip
;
; Written by: Jonathan Abilay/Paul Wolf
;
; Copyright: © 1990-1993 by Apple Computer, Inc., all rights reserved.
;
; Change History (most recent first):
;
; <SM16> 10/14/93 pdw <MC> roll-in.
; <MC3> 10/12/93 pdw Added support for Synchronous data transfers, rewrote State
; Machine, message handling etc.
; <MC2> 9/16/93 pdw Tailoring the Select timeout values for 20 and 40MHz clock
; speeds to about 200mS instead of 250mS to see if anybody
; complains.
; <SM15> 9/9/93 pdw Lots of little changes. Name changes, temporary cache_bug
; stuff.
; <SM14> 7/17/93 pdw Changed tc bit to bTermCnt (I think).
; <SM13> 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.
; <SM12> 5/25/93 DCB Rollin from Ludwig. (The next item below)
; <LW5> 5/21/93 PW Adding target mode commands so that we can respond to a select
; without toasting the bus.
; <SM11> 5/5/93 PW Converted names to meanies-friendly names. Updated with latest
; from Ludwig stuff.
; <LW3> 3/26/93 PW Removed initCFx values.
; <SM9> 1/31/93 PW Update from the latest of Ludwig. Also changes required for PDM
; (will update Ludwig with these as needed myself).
; <LW2> 1/27/93 PW Once again, added mSCSIRstRptIntDis to CF1.
; <SM8> 12/5/92 PW Got rid of confusing and worthless iDcBsxx stuff.
; <SM7> 11/17/92 DCB Changed initCF1: added mSCSIRstRptIntDis to disable interrupt on
; reset until we figure out what's going on.
; <SM6> 11/12/92 PW Rearranged a bit more logically and put 'm's in front of masks
; and added some more stuff. Removed parityEnable.
; <SM5> 10/30/92 DCB Changed some flags for to support changes to the interrupt
; handling routines
; <SM4> 10/8/92 PW Added bit definitions for status register.
; <SM3> 8/31/92 PW Added vowels. Changed FFO to FIFO, Flsh to Flush, Rst to Reset,
; S to SCSI, Chp to Chip, Acep to Accept, rFOS to rFIFOflags.
; <SM2> 8/30/92 PW Added cDMASelWAtn3 and cSelWAtn3 commands to equates.
; <SM1> - PW Initial check-in.
;
;==========================================================================
IF &TYPE('__INCLUDING_SCSIEqu53c96__') = 'UNDEFINED' THEN
__INCLUDING_SCSIEqu53c96__ SET 1
;---------------------------------------------------
; SCSI 53C96 Command Set
;---------------------------------------------------
;Note:
; for NON-DMA mode, bit7=0. DMA mode command bytes have bit7=1.
cNOP EQU $00 ; NOP command
cFlushFIFO EQU $01 ; flush FIFO command <SM3> pdw
cResetChip EQU $02 ; reset SCSI chip <SM3> pdw
cResetSCSIBus EQU $03 ; reset SCSI bus <SM3> pdw
cIOXfer EQU $10 ; non-DMA Transfer command
cCmdComplete EQU $11 ; Initiator Command Complete Sequence <SM3> pdw
cMsgAccept EQU $12 ; Message Accepted <SM3> pdw
cSendMsg EQU $20 ; Send Message byte(s)
cSendStatus EQU $21 ; Send status byte
cSendData EQU $22 ; Send data byte(s)
cDisconnectSeq EQU $23 ; Send 2 msg bytes and disconnect
cTerminateSeq EQU $24 ; Send status byte, message byte then disconnect
cTgtCmdComplete EQU $25 ; Send status byte, message byte DON'T disconnect
cDisconnect EQU $27 ; Disconnect (drop busy)
cRcvMsgSeq EQU $28 ; Receive Message byte(s)
cRcvCmd EQU $29 ; Receive command byte(s) (specified count)
cRcvData EQU $2a ; Receive data byte(s)
cRcvCmdSeq EQU $29 ; Receive command byte(s) (decoded count)
cStopDMA EQU $04 ; stop DMA
cSelWOAtn EQU $41 ; Select Without ATN Sequence
cSelWAtn EQU $42 ; Select With ATN Sequence
cSelWAtnStop EQU $43 ; Select With ATN and Stop Sequence <SM3> pdw
cSelWAtn3 EQU $46 ; Select With ATN 3 (msg_out bytes) Sequence <SM2> pdw
cEnableR_sel EQU $44 ; Enable (re)selection
cSetAtn EQU $1A ; Set ATN command
cRstAtn EQU $1B ; Reset ATN command
cDMAXfer EQU $90 ; DMA Transfer command
cDMASelWOAtn EQU $C1 ; Select Without ATN Sequence, use DMA
cDMASelWAtn EQU $C2 ; Select With ATN Sequence, use DMA
cDMASelWAtnStop EQU $C3 ; Select With ATN and Stop Sequence <SM3> pdw
cDMASelWAtn3 EQU $C6 ; Select With ATN 3 (msg_out bytes) Sequence <SM2> pdw
;---------------------------------------------------
; SCSI 53C96 Register Defs, Offsets
;---------------------------------------------------
nonSerlzdDisp EQU $040000 ; disp. between serlzd and non-serlzd I/O images
rXCL EQU $00 ; Transfer count bits 0-7 (r/w)
rXCM EQU $10 ; Transfer count bits 8-15 (r/w)
rFIFO EQU $20 ; FIFO (r/w)
rCMD EQU $30 ; Command (r/w)
rCF1 EQU $80 ; Configuration 1 (w)
rCF2 EQU $B0 ; Configuration 2 (w)
rCF3 EQU $C0 ; Configuration 3 (w)
rSTA EQU $40 ; Status (r)
rINT EQU $50 ; Interrupt (r)
rSQS EQU $60 ; Sequence Step (r)
rFIFOflags EQU $70 ; FIFO Flags/Sequence Step (r)
rDID EQU $40 ; Destination Bus ID (w)
rSTO EQU $50 ; Select/Reselect Timeout (w)
rSyncPeriod EQU $60 ; Synchronous Period (w)
rSyncOffset EQU $70 ; Synchronous Offset (w)
rCKF EQU $90 ; Clock Conversion Factor (w)
rTST EQU $A0 ; Test (w)
rXCH EQU $E0 ; Transfer count bits 16-24 (r/w)
rChipID EQU rXCH ; Chip ID register (r)
rFIFObtm EQU $F0 ; Reserve FIFO Byte (w)
rDMA EQU $100 ; Pseudo-DMA regr (r/w)
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
; SCSI 53C96 Bit Defs
;ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
;ÑÑÑÑ Interrupt Register (rINT) bits ÑÑÑÑ
bSelected EQU 0 ; selected interrupt
bSelectedWAtn EQU 1 ; selected w/atn interrupt
bReselected EQU 2 ; reselected interrupt
bFuncComplete EQU 3 ; function complete bit
bBusService EQU 4 ; bus service bit
bDisconnected EQU 5 ; disconnected bit
bIllegalCmd EQU 6 ; illegal command interrupt
bResetDetected EQU 7 ; SCSI reset detected interrupt
;ÉÉÉ masks ÉÉÉ
mSelected EQU 1<<bSelected
mSelectedWAtn EQU 1<<bSelectedWAtn
mReselected EQU 1<<bReselected
mFuncComplete EQU 1<<bFuncComplete
mBusService EQU 1<<bBusService
mDisconnected EQU 1<<bDisconnected
mIllegalCmd EQU 1<<bIllegalCmd
mResetDetected EQU 1<<bResetDetected
mNonNormalInt EQU mIllegalCmd + mReselected + mSelected + mSelectedWAtn + mResetDetected
;ÑÑÑÑ Status Register (rSTA) bits ÑÑÑÑ
bCmdXferComp EQU 3 ; Gross Error
bTermCount EQU 4 ; terminal count
bParityError EQU 5 ; Parity Error
bGrossError EQU 6 ; Gross Error
bINT EQU 7 ; interrupt
iPhaseMsk EQU $07 ; MASK value for phase bits
;ÑÑÑÑ Command Register (rCMD) bits ÑÑÑÑ
bINTMode EQU 4 ; initiator mode command
bTRGMode EQU 5 ; target mode command
bDSCMode EQU 6 ; disconnected mode command
;ÑÑÑÑ Configuration 1 Register (rCF1) bits ÑÑÑÑ
mCF1_SlowCableMode EQU $80 ; Slow Cable Mode enabled bit
mCF1_ResetIntrpDisable EQU $40 ; SCSI Reset Reporting Intrp Disabled bit <SM7>
mCF1_ParityTestMode EQU $20 ; Parity Test Mode bit
mCF1_EnableParity EQU $10 ; Enable Parity Checking bit
mCF1_ChipTestMode EQU $08 ; Enable Chip Test Mode bit
mCF1_MyBusID EQU $07 ; My SCSI Bus ID Mask
;ÑÑÑÑ Configuration 2 Register (rCF2) bits ÑÑÑÑ
mCF2_ReserveFIFOByte EQU $80 ; Reserve FIFO Byte
mCF2_FeaturesEnable EQU $40 ; Enable Phase Latch
; 53F96: turns on 24bit xfer count also
mCF2_EnableByteControl EQU $20 ; Enable Byte Control
mCF2_DREQHiZ EQU $10 ; DREQ High Impedance
mCF2_SCSI2 EQU $08 ; SCSI-2 Mode
mCF2_TgtBadParityAbort EQU $04 ; Target Bad Parity Abort
mCF2_RegisterParity EQU $02 ; Regr Parity Enable
mCF2_DMAParity EQU $01 ; DMA Parity Enable
;ÑÑÑÑ Configuration 3 Register (rCF3) bits ÑÑÑÑ
mCF3_FastSCSI EQU $10 ; set if rate>5MB/s
mCF3_FastClock EQU $08 ; set if clock = 40MHz
mCF3_SaveResidual EQU $04 ; Save Residual Byte
mCF3_AltDMAMode EQU $02 ; Alternate DMA Mode
mCF3_Threshold8 EQU $01 ; Threshold 8
;ÑÑÑÑ Other Register bits ÑÑÑÑ
mSQSMsk EQU $07 ; sequence bits mask value (rSQS)
mFIFOCount EQU $1F ; FIFO count mask value (rFOS)
mSyncOffset EQU $0F ; synchronous offset bits (rSYO)
mSyncPeriod EQU $1F ; synchronous period bits (rSYP)
;---------------------------------------------------
; Miscellaneous Constants
;---------------------------------------------------
iFifoSize EQU $10 ; FIFO size in bytes
;---------------------------------------------------
; 53c96 Register Values
;---------------------------------------------------
;ÑÑÑÑÑ Phase values (for iPhaseMsk bits in rSTA) ÑÑÑÑÑ
iDataOut EQU $00 ; Data-Out SCSI Phase value
iDataIn EQU $01 ; Data-In SCSI Phase value
iCommand EQU $02 ; Command Phase value
iStatus EQU $03 ; Status Phase value
iMsgOut EQU $06 ; Msg-Out SCSI Phase value
iMsgIn EQU $07 ; Msg-In SCSI Phase value
;ÑÑÑÑÑ Clock Conversion Values (based on SCSI chip clock - not CPU clock) ÑÑÑÑÑ
ccf10MHz EQU $02 ; CLK conv factor 10.0Mhz
ccf11to15MHz EQU $03 ; CLK conv factor 10.01 to 15.0Mhz
ccf16to20MHz EQU $04 ; CLK conv factor 15.01 to 20.0Mhz
ccf21to25MHz EQU $05 ; CLK conv factor 20.01 to 25.0Mhz
ccf26to30MHz EQU $06 ; CLK conv factor 25.01 to 30.0Mhz
ccf31to35MHz EQU $07 ; CLK conv factor 30.01 to 35.0Mhz
ccf36to40MHz EQU $00 ; CLK conv factor 35.01 to 40.0Mhz (0 := 8)
SelTO16Mhz EQU 126 ; ($7e) using the formula: RV (regr value)
; 126 = (16MHz * 250mS)/ (7682 * 4)
; 250mS is ANSI standard.
SelTO20Mhz EQU 132;160 ; ($) using the formula: RV (regr value)
; 162 = (20MHz * 250mS)/ (7682 * 4)
; 250mS is ANSI standard.
SelTO25Mhz EQU 167 ; ($a7) using the formula: RV (regr value)
; 163 = (25MHz * 250mS)/ (7682 * 5)
; 250mS is ANSI standard.
SelTO33Mhz EQU 167 ; ($a7) using the formula: RV (regr value)
; 153 = (33MHz * 250mS)/ (7682 * 7)
; 250mS is ANSI standard.
SelTO40Mhz EQU 132;160 ; ($a7) using the formula: RV (regr value)
; 163 = (40MHz * 250mS)/ (7682 * 8)
; 250mS is ANSI standard.
; <SM5>
;ÑÑÑÑÑ Values to use ÑÑÑÑÑ
asyncXfer EQU $0 ; Asynchronous Data Transfer = 0 Synch Offset value
; a non-zero value indicates Synch data xfer
initOp EQU asyncXfer ; use this operation
;---------------------------------------------------
; SCSI DAFB Register Information
;---------------------------------------------------
SCSI0_DAFB EQU $F9800024 ; DAFB address to access SCSI1 DREQ bit
SCSI1_DAFB EQU $F9800028 ; DAFB address to access SCSI2 DREQ bit
bDREQ EQU 9 ; SCSI DREQ status bit
tsc_cf_stg_25 EQU $1EC ; DAFB state maching config value for 25 MHz CPU
tsc_cf_stg_33 EQU $041 ; DAFB state maching config value for 33 MHz CPU
ENDIF ; already included...