mirror of
https://github.com/elliotnunn/supermario.git
synced 2024-10-30 08:24:38 +00:00
396 lines
13 KiB
Plaintext
396 lines
13 KiB
Plaintext
; Version: 3.19
|
|
; Created: Friday, October 20, 1989 at 9:50:00 PM
|
|
;
|
|
; File: SCSIEqu.a
|
|
;
|
|
; Assembler Interface to the Macintosh Libraries
|
|
; Copyright Apple Computer, Inc. 1986-1990
|
|
; All Rights Reserved
|
|
;
|
|
; Equates for SCSI boot, mgr routines
|
|
; SCSI Traps
|
|
;________________________________________________________________________________
|
|
|
|
IF &TYPE('__IncludingSCSIEqu__') = 'UNDEFINED' THEN
|
|
__IncludingSCSIEqu__ SET 1
|
|
|
|
|
|
; misc SCSI driver equates
|
|
|
|
scMacID EQU $80 ; SCSI ID for Macintosh Plus (bit 7)
|
|
SCSIDrvrs EQU $B2E ; (word) bitmap for loaded SCSI drivers
|
|
|
|
; SCSI error codes
|
|
|
|
scCommErr EQU 2 ; communications error (operation timeout)
|
|
scArbNBErr EQU 3 ; arbitration timeout waiting for not BSY
|
|
scBadparmsErr EQU 4 ; bad parameter or TIB opcode
|
|
scPhaseErr EQU 5 ; SCSI bus not in correct phase for attempted operation
|
|
scCompareErr EQU 6 ; data compare error
|
|
scMgrBusyErr EQU 7 ; SCSI Manager busy with another operation
|
|
; when SCSIGet was called
|
|
|
|
scSequenceErr EQU 8 ; attempted operation is out of sequence;
|
|
; e.g., calling SCSISelect before doing
|
|
; SCSIGet. Incorrectly written drivers
|
|
; can cause this error.
|
|
|
|
scBusTOErr EQU 9 ; CPU bus timeout when attempting read or
|
|
; write in pseudo-DMA mode -- indicates
|
|
; that the data wasn't ready within the
|
|
; 'bus timeout' period. (Mac SE & Mac II only)
|
|
|
|
scComplPhaseErr EQU 10 ; SCSI bus wasn't in Status phase when
|
|
; SCSIComplete was called -- the SCSI
|
|
; Manager may have had to throw away data
|
|
; (or write 'filler' bytes) in order to
|
|
; reach the Status phase. Indicates that
|
|
; the driver didn't handle SCSI bus phase
|
|
; changes correctly.
|
|
|
|
|
|
; misc SCSI driver equates
|
|
|
|
scDefaultID EQU 7 ; default CPU SCSI id
|
|
|
|
;---------------------------------------------------
|
|
;
|
|
; the information pertaining to the read/write
|
|
; command block interpreter.
|
|
;
|
|
; SCSI command block equates.
|
|
;
|
|
|
|
scOpcode EQU 0 ; offsets into command "line" for data xfer
|
|
scParam1 EQU 2
|
|
scParam2 EQU 6
|
|
scSize EQU 10 ; size of a command line
|
|
|
|
|
|
scInc EQU 1 ; xfer with address increment
|
|
scNoInc EQU 2 ; xfer without address increment
|
|
scAdd EQU 3 ; add count to address
|
|
scMove EQU 4 ; MOVE data from addr1 to addr2
|
|
scLoop EQU 5 ; decrement loop counter and branch
|
|
scNop EQU 6 ; do very little
|
|
scStop EQU 7 ; then stop doing even that
|
|
scComp EQU 8 ; compare bytes with address increment
|
|
|
|
;
|
|
; The layout of block 0 of a bootable SCSI device.
|
|
;
|
|
|
|
sbSigWord EQU $4552 ; block 0 validator
|
|
sbSig EQU 0 ; signature word
|
|
sbBlkSize EQU 2 ; block size of device
|
|
sbBlkCount EQU 4 ; # blocks on device
|
|
sbDevType EQU 8 ; device type code
|
|
sbDevID EQU 10
|
|
sbData EQU 12 ; start of data section
|
|
sbDrvCount EQU 16 ; # drivers following
|
|
sbDrvrs EQU 18 ; start of driver descriptors
|
|
|
|
; Driver descriptors
|
|
|
|
ddBlock EQU 0 ; physical block of driver
|
|
ddSize EQU 4 ; block count of driver
|
|
ddType EQU 6 ; Processor type of driver
|
|
ddLen EQU 8
|
|
sbMac EQU 1 ; Macintosh driver type
|
|
|
|
;
|
|
; Partition Descriptors
|
|
;
|
|
pdSigWord EQU $5453 ; block 1 validator
|
|
pmSig EQU 0 ; unique value for map entry blk
|
|
pmSigPad EQU 2 ; currently unused
|
|
pmMapBlkCnt EQU 4 ; # of blks in partition map
|
|
pmPyPartStart EQU 8 ; first physical block of partition
|
|
pmPartBlkCnt EQU 12 ; number of blocks in partition
|
|
pmPartName EQU 16 ; ASCII partition name
|
|
pmParType EQU 48 ; ASCII partition type
|
|
pmLgDataStart EQU 80 ; log. # of partition's 1st data blk
|
|
pmDataCnt EQU 84 ; # of blks in partition's data area
|
|
pmPartStatus EQU 88 ; bit field for partition status
|
|
pmLgBootStart EQU 92 ; logical blk of partition's boot code
|
|
pmBootSize EQU 96 ; number of bytes in boot code
|
|
pmBootAddr EQU 100 ; memory load address of boot code
|
|
pmBootAddr2 EQU 104 ; currently unused
|
|
pmBootEntry EQU 108 ; entry point of boot code
|
|
pmBootEntry2 EQU 112 ; currently unused
|
|
pmBootCksum EQU 116 ; checksum of boot code
|
|
pmProcessor EQU 120 ; ASCII for the processor type
|
|
pmPad EQU 124 ; 512 bytes long, currently unused
|
|
|
|
|
|
hfsID EQU 'TFS1' ; The HFS filesystem ID
|
|
|
|
;Routine Selectors
|
|
|
|
scsiReset EQU 0
|
|
scsiGet EQU 1
|
|
scsiSelect EQU 2
|
|
scsiCmd EQU 3
|
|
scsiComplete EQU 4
|
|
scsiRead EQU 5
|
|
scsiWrite EQU 6
|
|
scsiInstall EQU 7
|
|
scsiRBlind EQU 8
|
|
scsiWBlind EQU 9
|
|
scsiStat EQU 10
|
|
scsiSelAtn EQU 11
|
|
scsiMsgIn EQU 12
|
|
scsiMsgOut EQU 13
|
|
numSelectors EQU 14
|
|
|
|
|
|
MACRO
|
|
_SCSIReset
|
|
MOVE #scsiReset,-(sp)
|
|
_SCSIDispatch
|
|
ENDM
|
|
|
|
MACRO
|
|
_SCSIGet
|
|
MOVE #scsiGet,-(sp)
|
|
_SCSIDispatch
|
|
ENDM
|
|
|
|
MACRO
|
|
_SCSISelect
|
|
MOVE #scsiSelect,-(sp)
|
|
_SCSIDispatch
|
|
ENDM
|
|
|
|
MACRO
|
|
_SCSICmd
|
|
MOVE #scsiCmd,-(sp)
|
|
_SCSIDispatch
|
|
ENDM
|
|
|
|
MACRO
|
|
_SCSIComplete
|
|
MOVE #scsiComplete,-(sp)
|
|
_SCSIDispatch
|
|
ENDM
|
|
|
|
MACRO
|
|
_SCSIRead
|
|
MOVE #scsiRead,-(sp)
|
|
_SCSIDispatch
|
|
ENDM
|
|
|
|
MACRO
|
|
_SCSIWrite
|
|
MOVE #scsiWrite,-(sp)
|
|
_SCSIDispatch
|
|
ENDM
|
|
|
|
MACRO
|
|
_SCSIInstall
|
|
MOVE #scsiInstall,-(sp)
|
|
_SCSIDispatch
|
|
ENDM
|
|
|
|
MACRO
|
|
_SCSIRBlind
|
|
MOVE #scsiRBlind,-(sp)
|
|
_SCSIDispatch
|
|
ENDM
|
|
|
|
MACRO
|
|
_SCSIWBlind
|
|
MOVE #scsiWBlind,-(sp)
|
|
_SCSIDispatch
|
|
ENDM
|
|
|
|
MACRO
|
|
_SCSIStat
|
|
MOVE #scsiStat,-(sp)
|
|
_SCSIDispatch
|
|
ENDM
|
|
|
|
|
|
MACRO
|
|
_scsiSelAtn
|
|
MOVE #scsiSelAtn,-(sp)
|
|
_SCSIDispatch
|
|
ENDM
|
|
|
|
MACRO
|
|
_SCSIMsgIn
|
|
MOVE #scsiMsgIn,-(sp)
|
|
_SCSIDispatch
|
|
ENDM
|
|
|
|
MACRO
|
|
_SCSIMsgOut
|
|
MOVE #scsiMsgOut,-(sp)
|
|
_SCSIDispatch
|
|
ENDM
|
|
|
|
;
|
|
; New SCSI Manager
|
|
|
|
;
|
|
; SCSI request parameter block
|
|
;
|
|
scsiPB RECORD 0, INCREMENT
|
|
scsiQLink DS.L 1 ; --- link to next request block
|
|
scsiPrivate DS.L 1 ; --- SCSI Mgr private storage
|
|
scsiVersion DS.W 1 ; --> version of the parameter block
|
|
scsiBus DS.W 1 ; --> SCSI bus number
|
|
scsiReqID DS.B 1 ; --> SCSI ID
|
|
scsiReqLUN DS.B 1 ; --> logical unit number
|
|
scsiResult DS.W 1 ; <-- return code from SCSI Manager
|
|
scsiCompletion DS.L 1 ; --> address of completion routine
|
|
scsiUsrData DS.L 1 ; --> pointer to user's storage
|
|
scsiReqTO DS.L 1 ; --> in ms
|
|
scsiUsrFlags DS.W 1 ; --> user's operation flag bits
|
|
scsiSelTO DS.W 1 ; --> in ms
|
|
scsiMgrFlags DS.L 1 ; --> SCSI operation flags
|
|
scsiLinkCmd DS.L 1 ; --> ptr to next linked command
|
|
scsiSnsBuf DS.L 1 ; --> sense buffer pointer
|
|
scsiSnsLen DS.B 1 ; --> length of sense buffer ( at least 4 bytes )
|
|
scsiSnsXfer DS.B 1 ; <-- actual sense bytes transferred
|
|
scsiStatus DS.B 1 ; --> SCSI status byte
|
|
scsiCmdLen DS.B 1 ; --> length of the command buffer
|
|
scsiCmdBuf DS.L 1 ; --> command buffer pointer
|
|
scsiDCInstr DS.L 1 ; --> ptr to array of data-chaining instructions
|
|
scsiDataLen DS.L 1 ; --> requested data transfer length
|
|
scsiDataXfer DS.L 1 ; <-- actual data bytes transferred
|
|
scsiPBSize EQU *-scsiPB ; size of SCSI request parameter block
|
|
ENDR
|
|
|
|
;
|
|
; flags
|
|
;
|
|
; SCSI Mgr flags:
|
|
;
|
|
scsiFParity EQU $00000001 ; Enable parity checking
|
|
scsiFNoDisc EQU $00000002 ; Disconnection not allowed for this request
|
|
scsiFWrite EQU $00000004 ; output data to the SCSI bus
|
|
scsiFFast EQU $00000008 ; Transfer data in the "fast" mode
|
|
scsiFPhysical EQU $00000010 ; physical addresses are used (enables DMA)
|
|
scsiFAsync EQU $00000020 ; asynchronous request
|
|
scsiFBusDevRst EQU $00000040 ; attempt to send a Bus Device Reset message
|
|
scsiFImmed EQU $00000080 ; Immediate ("page fault") service requested
|
|
; SCSI Mgr bits:
|
|
scsiBParity EQU 0 ; enable parity checking
|
|
scsiBNoDisc EQU 1 ; disconnection not allowed for this request
|
|
scsiBWrite EQU 2 ; output data to the SCSI bus
|
|
scsiBFast EQU 3 ; transfer data in the "fast" mode
|
|
scsiBPhysical EQU 4 ; physical addresses are used (enables DMA)
|
|
scsiBAsync EQU 5 ; asynchronous request
|
|
scsiBBusDevRst EQU 6 ; attempt to send a Bus Device Reset message
|
|
scsiBImmed EQU 7 ; Immediate ("page fault") service requested
|
|
|
|
;
|
|
; Data-chaining related equates
|
|
;
|
|
dcLoop EQU -1 ; loop opcode (dcLoop,count,offset,store)
|
|
dcStop EQU 0 ; stop opcode (dcStop,-----,------,-----)
|
|
; ; move opcode ( addr ,count,offset,store)
|
|
dcInstr RECORD 0, INCREMENT
|
|
dcAddr DS.L 1 ; buffer start address (0,-1,other)
|
|
dcCount DS.L 1 ; generic count
|
|
dcOffset DS.L 1 ; generic "offset"
|
|
dcStore DS.L 1 ; used to create "Saved Data Pointer"
|
|
dcSize EQU *-dcInstr ; size of one data-chaining instruction
|
|
ENDR
|
|
|
|
;
|
|
; Status byte equates
|
|
;
|
|
statusInitial EQU $FF ; initial "invalid" status byte value
|
|
statusByteCode EQU $9E ; mask to clear vendor-unique bits in status byte
|
|
statusRsrvBit EQU 7 ; reserved bit in status byte (must be zero for autosense)
|
|
statusGood EQU $00 ; status byte values with VU and reserved bits masked
|
|
statusChkCond EQU $02
|
|
statusCondMetGood EQU $04
|
|
statusBusy EQU $08
|
|
statusIntGood EQU $10
|
|
statusIntCMGood EQU $14
|
|
statusRsrvConflict EQU $18
|
|
|
|
;
|
|
; error codes on the original call
|
|
;
|
|
scsiBadPBErr EQU -470 ; invalid field(s) in the parameter block
|
|
;
|
|
; error codes in the "scsiResult" field
|
|
;
|
|
scsiOverrunErr EQU -471 ; attempted to transfer too many bytes
|
|
scsiTransferErr EQU -472 ; write flag conflicts with data transfer phase
|
|
scsiBusTOErr EQU -473 ; bus error during transfer
|
|
scsiSelectTOErr EQU -474 ; scsiSelTO exceeded (selection failed)
|
|
scsiTimeOutErr EQU -475 ; scsiReqTO exceeded
|
|
scsiBusResetErr EQU -476 ; the bus was reset, so your request was aborted
|
|
scsiBadStatus EQU -477 ; non-zero (not "Good") status returned
|
|
scsiNoStatusErr EQU -478 ; device did not go through a status phase
|
|
scsiLinkFailErr EQU -479 ; linked command never executed
|
|
scsiUnimpVctErr EQU -489 ; unimplemented routine was called
|
|
;
|
|
; "in progress" codes in the "scsiResult" field
|
|
;
|
|
scsiEnqueued EQU $0001 ; enqueued, waiting to start
|
|
scsiArbitrated EQU $0002 ; arbitration in progress, or attempted
|
|
scsiSelection EQU $0003 ; selection in progress, or target selected
|
|
scsiDisc EQU $0004 ; disconnected
|
|
scsiDataOut EQU $0010 ; Data Out phase
|
|
scsiDataIn EQU $0011 ; Data In phase
|
|
scsiCommand EQU $0012 ; Command phase
|
|
scsiStatus EQU $0013 ; Status phase
|
|
scsiIllegal1 EQU $0014 ; Unknown (illegal) phase
|
|
scsiIllegal2 EQU $0015 ; Unknown (illegal) phase
|
|
scsiMessageOut EQU $0016 ; Message Out phase
|
|
scsiMessageIn EQU $0017 ; Message In phase
|
|
|
|
;
|
|
; SCSIBusInfo information selectors
|
|
;
|
|
scsiIntfLvl EQU 0 ; SCSI Mgr interface level (1-n)
|
|
scsiBusTO EQU 1 ; byte-to-byte time limit (in us, 0=no timeout)
|
|
scsiBusDMA EQU 2 ; bus has a dedicated DMA channel (1=has DMA)
|
|
;
|
|
; New SCSI Manager (_NewSCSI) routine selectors
|
|
;
|
|
scsiRequestIO EQU 0 ; SCSIRequestIO trap
|
|
scsiKillIO EQU 1 ; SCSIKillIO trap
|
|
scsiBusInfo EQU 2 ; SCSIBusInfo trap
|
|
scsiNewSCSIMax EQU 2 ; highest legal selector value
|
|
|
|
scsiLogStart EQU 64 ; SCSILogStart trap
|
|
scsiLogStop EQU 65 ; SCSILogStop trap
|
|
|
|
MACRO
|
|
_SCSIRequestIO
|
|
MOVEQ.L #scsiRequestIO,d0
|
|
_NewSCSI
|
|
ENDM
|
|
|
|
MACRO
|
|
_SCSIKillIO
|
|
MOVEQ.L #scsiKillIO,d0
|
|
_NewSCSI
|
|
ENDM
|
|
|
|
MACRO
|
|
_SCSIBusInfo
|
|
MOVEQ.L #scsiBusInfo,d0
|
|
_NewSCSI
|
|
ENDM
|
|
|
|
MACRO
|
|
_SCSILogStart
|
|
MOVEQ.L #scsiLogStart,d0
|
|
_NewSCSI
|
|
ENDM
|
|
|
|
MACRO
|
|
_SCSILogStop
|
|
MOVEQ.L #scsiLogStop,d0
|
|
_NewSCSI
|
|
ENDM
|
|
|
|
ENDIF ; ...already included |