
SCSI Functional Description
2-59
Move instruction facilitates partial receive transfers and allows correct
partial send behavior without additional opcode overhead. Behavior of
the chained Block Move instruction varies slightly for sending and
receiving data.
For receive data (Data-In for the initiator or Data-Out for the target), a
chained Block Move instruction indicates that if a partial transfer occurred
at the end of the instruction the WSR flag is set. The high-order byte of
the last SCSI transfer is stored in the
SCSI Wide Residue (SWIDE)
register rather than transferred to memory. The stored byte should be the
first byte transferred to memory at the start of the chained Block Move
or regular Block Move data stream. Since the byte count always
represents data transfers to/from memory (as opposed to/from the SCSI
bus), the stored byte transferred out is one of the bytes in the count. If
the WSR bit is cleared when a receive data chained Block Move
instruction is executed, the data transfer occurs similar to that of the
regular Block Move instruction. It is recommended that all Block Move
instructions be chained Block Moves.
For send data (Data-Out for the initiator or Data-In for the target), a
chained Block Move instruction indicates that if a partial transfer
terminates the chained block move the WSS flag is set. The low-order
byte should be stored in the lower byte of the
SCSI Output Data Latch
(SODL)
register for asynchronous transfers or in the outbound chain byte
holding register for synchronous transfers and not sent across the SCSI
bus. Without the chained Block Move instruction, the last low-order byte
would be sent across the SCSI bus. The starting byte count represents
data bytes transferred from memory but not to the SCSI bus when a
partial transfer exists. For example, if the instruction is an initiator
chained Block Move Data Out of five bytes (and WSS is not previously
set), five bytes are transferred out of memory to the SCSI controller. Four
bytes are transferred from the SCSI controller across the SCSI bus and
one byte is temporarily stored as described above, waiting to be married
with the first byte of the next Block Move instruction. If the WSS bit is set
at the start of a data send command the first byte of the transfer is
assumed to be the high-order byte and is “married” with the stored byte
(which will be the low-order byte) before the two bytes are sent across
the SCSI bus. It is recommended that all Block Move instructions be
chained Block Moves.
Figure 2.7
provides examples of the Block Move and Chain Block Move
operations.