Specifications

System Macros Invoked by Drivers
ADPDISP
Table 2–1 Selectable Adapter Characteristics
Select Argument Possible Value of flag in addrlist Definition
ADAP_TYPE UBA, MBA, GENBI, DR, or NULL.
(See those symbols prefixed with
AT$ defined by the $DCDEF macro
in SYS$LIBRARY:STARLET.MLB.)
Adapter type.
ADDR_BITS 18 or 22 Number of adapter address bits.
ADAP_MAPPING YES or NO Does adapter support mapping?
AUTOPURGE_DP YES or NO Does adapter support autopurging datapaths?
BUFFERED_DP YES or NO Does adapter support buffered datapaths?
DIRECT_VECTOR YES or NO Does adapter directly vector device interrupts?
ODD_XFER_BDP YES or NO Does adapter support odd-aligned transfers over
its buffered data paths?
ODD_XFER_DDP YES or NO Does adapter support odd-aligned transfers over
its direct data paths?
EXTENDED_MAPREG YES or NO Does adapter support extended set (8192) map
registers?
QBUS YES or NO Is this a Q22–bus device?
Specification of select=ADAP_TYPE causes ADPDISP to generate a CASEW
instruction using ADP$W_ADPTYPE as an index into the case table.
Specification of select=ADDR_BITS similarly causes ADPDISP to dispatch
from the contents of ADP$B_ADDR_BITS (16 or 22 bits). If any of the other
conditions is specified for select, ADPDISP issues a BBC or BBS instruction on
the contents of bit field ADP$V_select in ADP$W_ADPDISP_FLAGS.
You cannot use a single invocation of ADPDISP to dispatch on more than one
adapter characteristic. For example, if you need an autopurging datapath that
supports direct vectoring, use the ADPDISP macro twice.
ADPDISP requires that the address of an ADP, CRB, UCB, or ECRB be specified.
If anything other than an ADP is specified, the scratch register is used to
determine the ADP address.
Examples
1.
ADPDISP -
SELECT=ADAP_MAPPING,-
ADDRLIST=<<NO,10$>,<YES,20$>>,-
ADPADDR=R3
ADPDISP transfers control to the instruction at 10$ if the adapter does not
support mapping, or to 20$ if it does. ADPDISP uses the value in R3 to locate
the ADP.
2.
ADPDISP -
SELECT=ADAP_TYPE,-
ADDRLIST=<<CI,10$>,<MBA,20$>,<UBA,30$>>,-
UCBADDR=R5,-
SCRATCH=R1
ADPDISP transfers control to 10$ if the adapter is a CI, 20$ if the adapter
is a MASSBUS adapter, and 30$ if it is a UNIBUS adapter. ADPDISP
determines the location of the ADP from a chain of pointers starting at the
2–3