Abstract:
Connected blocks of micro-instructions are reloaded to a register file in a sequencer, which is used for controlling an interfacing between a host computer, a magnetic disk-drive, and a buffer memory. This provides for efficiently reloading sequencer microinstructions into a relatively small sequencer-memory space and minimizes use of external system resources for reloading microinstructions. This avoids the sequencer having to remain in a wait condition until a system processor completes higher priority tasks and becomes available for reloading instructions to memory cells of the sequencer. 
     The method includes storing a plurality of blocks of microinstructions in a buffer memory device. A first block of microinstructions is stored in a register file. A second block of microinstructions stored within the buffer memory device is called using microinstructions contained within the first block of microinstructions. The second block of microinstructions are loaded into the register file, where the second block of microinstruction contain microinstructions for loading a third block of microinstructions into the register file, and so on. 
     The sequencer interfaces with a buffer memory, which stores a plurality of blocks of microinstructions. A register file stores a first block of microinstructions, where the first block of microinstructions includes microinstructions for selecting a second block of microinstructions from the buffer memory. The first block of microinstruction includes microinstructions for subsequently loading the selected second block of microinstructions into the register file.

Description:
BACKGROUND OF THE INVENTION 
     1. Field of the Invention 
     This invention relates to sequencers which provide a series of microinstructions for control of electronic circuits and, more particularly to apparatus and methods for efficiently operating a Small Computer Systems Interface SCSI sequencer with a hard-disk magnetic storage device and a host computer system. 
     2. Prior Art 
     Two specific methods have been used to implement interface control operations. First is a microprocessor which controlled interface operations by setting or resetting interface control lines. These control lines determined the direction and identified the type of information being transferred over the interface. This type of interface control was flexible as the program controller. The microprocessor and instructions could be easily changed, as it was stored in RAM or PROM. This method had performance issues associated with it, as microprocessor overhead caused significant delays in controlling the interface. 
     A second method was to design a hardware state machine to control interface control lines. This method had advantages in speed but was not flexible as new interface sequences required the state machine to be modified. Because of the difficulty in describing complex interface sequences, the state machines are designed to handle simple well-defined tasks, and require assistance from a &#34;local&#34; microprocessor to complete most I/O operations. 
     A further difficulty with present hardwired sequencers is that the SCSI interface standard is periodically changed. When it is, a controller with a hardwired sequencer cannot be used to implement the new standard, and a new controller must be designed. Further, a disc drive controller implements a plurality of basic operations, many of which may be repeated or periodically returned to, depending on the circumstances of the transmission. For example, after RESET, the next phase is BUS FREE, followed by SELECTION and MESSAGE. However, after SELECTION, there may be a return to BUS FREE, and MESSAGE may loop on itself a number of times for a plurality of MESSAGES or returned to BUS FREE, or continue on to COMMAND and TRANSFER. Each of these next phases may also return to MESSAGE and then to BUS FREE. With a hardwired sequencer, only a limited number of options is available without starting the sequence over or causing an interrupt by the microprocessor external to the disc controller to implement the desired sequence. Therefore, a controller implemented with a sequencer having a programmable register file which obtains sequences of instructions, either from an external memory or, in the case of instructions being modified from another external source, is highly desirable. 
     SUMMARY OF THE INVENTION 
     It is the object of this invention to provide a special programmable sequencer with decision making capability to control an I/O interface. This provides the high speed of hardware state machines and the flexibility of an external microprocessor over the control of an I/O interface. 
     It is another object of this invention to minimize the amount of RAM used by the sequencer. Therefore, a method of automatically reloading microinstructions into the sequencer has been provided. 
     It is another object of this invention to minimize the number of microinstructions to perform the I/O operation. Therefore, a special WAIT instruction has been provided to transfer data using a single instruction. 
     It is another object of the invention to provide a sequencer arrangement which efficiently provides for reloading of sequencer microinstructions into a relatively small sequencer-memory space. 
     It is another object of the invention to minimize use of external system resources for reloading microinstructions in a sequencer. 
     It is another object of the invention to avoid having a sequencer remain in a wait condition until a system processor completes higher priority tasks and becomes available for reloading instructions to the memory cells of the sequencer. 
     The invention is advantageously used in a sequencer which provides an interface between a magnetic disk-drive, a host computer, and a buffer memory. 
     In accordance with these and other objects of the invention, an apparatus is provided comprising a sequencer incorporated in a SCSI interface dedicated to controlling SCSI interface operations. In a preferred embodiment, an apparatus and a method are provided for reloading blocks of micro-instructions to a register file in a sequencer where the sequencer controls interfacing between a host computer and a magnetic disk-drive. 
     The preferred loading method includes storing a plurality of blocks of microinstructions in a buffer memory device. A first block of microinstructions is loaded in a register file. A second block of microinstructions, which is stored within the buffer memory device, is called using microinstructions contained within the first block of microinstructions. Instructions in the first block have decision making ability to determine which block will be called. The second block of microinstructions are loaded into the register file, where the second block of microinstruction contain microinstructions for loading a third block of microinstructions into the register file, and so on. 
     The method includes the step of feeding microinstruction from the output terminals of the register file to one or more control registers in the sequencer. 
     Either the microinstructions from the output terminals of the register file or the input microinstructions to the sequence from an external microprocessor can be selectively directed with a multiplexer to one or more of the control registers in the interface device. 
     The method includes the step of selectively directing with a multiplexer either the microinstructions from the buffer memory or microinstructions from an external source of microinstructions to the input terminals of the register file. The external source includes an external processor which selectively provides microinstructions to the register to modify the sequence of operations in the interface sequencer. 
     The method may include the step of loading a write pointer address for the register file into a write-pointer address register. 
     The method includes the step of temporarily storing the second block of microinstructions in a FIFO register prior to the second block of microinstructions being loaded into the register file from the buffer memory device. 
     The method may further include the step of selectively directing data/command with a multiplexer to the FIFO register from either the buffer memory or a host computer data input bus. 
     The method may also include the step of storing in a data input register the microinstructions from the host computer data input bus. 
     The method may also include the step of selectively directing output signals from the FIFO or the output signals from a sequencer control register to a host computer data output bus. 
     The sequencer includes one or more control registers to which are fed control information from the output terminals of the register file. A first multiplexing means is provided for selectively directing to one or more of said control registers either the control information from the output terminals of the register file or the input control information to the register file. 
     The sequencer includes a second multiplexing means for selectively directing to the input terminals of the register file either the microinstructions from the buffer memory or microinstructions from an external processor. 
     The sequencer may also include third multiplexer means for selectively directing to the said FIFO register data from either the buffer memory or a host computer data input bus. 
     The sequencer may also include data input register means for storing information from the host computer data input bus. 
     The sequencer may further include a third multiplexer means for selectively directing output signals from the FIFO or the output signals from a sequencer control register to a host computer data output bus. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     The accompanying drawings, which are incorporated in and form a part of this specification, illustrate embodiments of the invention and, together with the description, serve to explain the principles of the invention: 
     FIG. 1 is an overall functional block diagram of an integrated-circuit SCSI controller, which is controlled by an external microcomputer and which includes circuits for interfacing with a SCSI host, a DRAM buffer memory, and a hard disk magnetic storage device; 
     FIG. 2 is a functional block diagram of the buffer memory control portion of the SCSI controller of FIG. 1; 
     FIG. 3 is a block diagram of a SCSI sequencer circuit which has a register file which can automatically reload itself with various microinstruction modules residing in DRAM buffer memory; 
     FIG. 4 is a flow chart showing the functional interrelationships between the various microinstruction modules, which are selected to be reloaded into the register file of the sequencer circuit of FIG. 3; 
     FIG. 5A shows the data structure of a LOAD-REGISTER microinstruction stored in the microinstruction register file of the SCSI sequencer; 
     FIG. 5B shows the data structure of a BRANCH Microinstruction stored in the microinstruction register file of the SCSI sequencer; 
     FIG. 5C shows the data structure of a WAIT-SPECIFIC microinstruction stored in the microinstruction register file of the SCSI sequencer; 
     FIG. 5D shows the data structure of a WAIT-GENERAL/microinstruction stored in the microinstruction register file of the SCSI sequencer; 
     FIG. 6 illustrates an exemplary sequence of instructions which may be carried out using this invention; and 
     FIG. 7 illustrates a flowchart for a particular sequence of instruction incorporating the Branch instruction and utilizing the loop counter. 
    
    
     DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS 
     Reference will now be made in detail to the preferred embodiments of the invention, examples of which are illustrated in the accompanying drawings. While the invention will be described in conjunction with the preferred embodiments, it will be understood that they are not intended to limit the invention to those embodiments. On the contrary, the invention is intended to cover alternatives, modifications and equivalents, which may be included within the spirit and scope of the invention as defined by the appended claims. 
     FIG. 1 shows a block diagram of a 68-pin integrated circuit small computer system interface SCSI CONTROLLER CIRCUIT 10. As shown in the diagram, various interface blocks are connected by signal buses to a memory control unit 12. A disk-formatter block 14 provides an interface to a magnetic storage disc through various signal lines 16-30. An NRZ signal provided on signal line 16 is an input/output signal in an NRZ data format which provides a data bit stream to or from the logic circuits in the formatter 14. A RD/REF CLK signal on line 18 is a read reference clock which is the clock signal for the formatter supplied by the data separator of the magnetic disc electronics. The frequency of this clock signal ranges from 5 Mhz to 24 Mhz. A read gate signal RG on signal line 20 is a signal which enables the read channel and which causes the controller circuit 10 to input NRZ data to the magnetic disc. A write gate signal WG is a signal which enables the write drivers and which causes the controller circuit 10 to output NZ data to the magnetic disc. An INPUT/COAST signal on line 24 and an OUTPUT signal on line 26 are signals which are general purpose signals used to synchronize the formatter 14 with external magnetic-disk hardware. An INDEX signal provided in line 8 is the index signal from the magnetic disc drive and is supplied once per revolution of the disc. A SECTOR/WAM/AMD signal provided on signal line 30 is a sector input, address mark detected input, or write address mark output to or from the formatter 14, depending on the operating mode of the system. The formatter 14 also contains an error correction code circuit ECC 32. Signals passing between the memory control unit 12 and the formatter 14 are carried on a signal bus 34. 
     Interfacing between the memory control unit 12 and an external microprocessor, such as an 8051 Intel Controller, is handled with a microprocessor interface circuit 40 which communicates with the memory control circuit 12 through a bus 42. An active-low chip-select CS signal on signal line 44 enables the controller integrated circuit 10 for either a read operation or a write operation. An active-low read-data RD signal on a signal line 46, in conjunction with the CS signal, causes data from a specified register within the memory control circuit 12 to be moved to a microprocessor address/data AD(7:0) bus 52, as indicated. The microprocessor address/data bus AD(7:0) is an input/output bus with active-high signals provided on bidirectional signal lines which interface to a multiplexed microprocessor address/data bus of the external microprocessor. An active-low write data signal WR on a signal line 48 in connection with the CS signal on signal line 44 causes data from the data bus AD to be moved to a specified register within the memory control unit 12. An interrupt request signal IRQ, provided on a signal line 54, is an active-low output signal from the microprocessor interface interrupt control circuit 56 to interrupt operation of the external microprocessor. A clock control circuit 58 within the integrated circuit 10 provides appropriate clock signals to a clock bus 60 to the microprocessor interface circuit 40. Signals from the microprocessor interface circuit 40 to the formatter 14 are provided on a bus 62. 
     A SCSI interface circuit 70 provides for communication between a SCSI bus, which includes signal lines 72-90, and the memory control unit 12. Providing the SCSI interface with its own sequence is a special advantage of the present design. It is especially significant that the SCSI sequencer includes a register file (FIG. 3) which may be selectively reloaded with sets of microinstructions as each new operation is begun. In the interface 70, the active-low input/output signal lines in DB(7:0) are the SCSI data lines. An active-low input/output busy SCSI control signal BSY is provided on a signal line 74. An active-low input/output SCSI SEL control signal is provided on a signal line 76. An active-low input/output command/data SCSI control signal C/D is provided on a signal line 78. An active-low input/output message SCSI control signal MSG is provided on signal line 82. An active-low input/output request signal REQ in connection with an acknowledge active-low input/output signal ACK on line 86 forms a SCSI data transfer handshake. An active-low input/output SCSI attention control signal ATN is provided on signal line 88. An active-low input/output SCSI reset signal RST is provided on a signal line 90. All of the above SCSI control signals are provided in accordance with the SCSI standards. The SCSI interface circuit 70 is coupled to the memory control circuit 12 through a signal bus 92. 
     A DRAM interface buffer memory circuit 100 is coupled to the memory control circuit 12 through a signal bus 101. External connections from the DRAM interface circuit 100 to a DRAM memory are provided through various signal lines. An active-low output row address strobe signal RAS on a signal line 102 provides an address strobe for the DRAM memory. An active-low input/output column address strobe signal CAS on a signal line 104 provides an address strobe for a first or an only DRAM. A second active-low output column address strobe CAS2 signal on a signal line 106 provides an address strobe for a second DRAM. An active-low output right strobe signal W is provided on a signal line 108. An active-low output enable signal G on a signal line 110 is a DRAM output driver enable signal. An address bus 112 provides nine bits of DRAM address A(8:0). Active-high input/output signals are provided on a DRAM data bus DQ(3:0). 
     FIG. 2 diagrammatically shows the DRAM memory-interface circuits for the integrated circuit 10. The data is transferred to and from three buses 72,34,52 to the DRAM data bus 114. Data from the SCSI data bus 72, that is, Host data is input to a Host FIFO 120. Formatted disk data from the formatter 14 is input to a Format FIFO 122. Read/write data from the microprocessor on bus 52 is input to a Window RAM 124. Byte/wide (8 bit) data transfers to and from each of these asynchronous interfaces are made to the respective FIFOs. Nibble/wide (4 bit) data transfers are made to and from the DRAM between the respective FIFOs under the control of a State Machine 126. 
     Several different DRAM configurations can be implemented which include: one 64K×4 DRAM page mode or static column mode; two 64K×DRAM; one 256K×4 DRAM page mode or static column mode; and two 256K×4 DRAMs. The circuit also provides two nibbles of parity for each 32 nibble transfer. Transfers to and from the DRAM are in blocks of 32 nibbles, or 16 bytes. An Arbitration Circuit 128 gives priority for each interface operation to the DRAM. The disc sequencer for the magnetic disc which provides formatted data from the Form FIFO 122 has the highest priority. Refresh of the DRAM buffer memory has the next highest priority. Microprocessor inputs from the read/write bus which is stored in the window ram 124 has the next priority. Finally Host Data on the SCSI bus 72 stored in the Host FIFO 120 has the lowest priority. The Arbitration Circuit 128 arbitrates at the end of each 16 byte transfer and allows only one interface axis to the DRAM at a time. A parity Generator/Checker Circuit 130 provides the two nibbles of parity for each 32 nibble transfer. 
     FIG. 3 shows a block diagram of the SCSI sequencer 200 portion of the SCSI interface circuit 70 of FIG. 1. 
     A 14×32 static-memory register file 202 stores 32 instruction words for the sequencer, where each instructions word has a width of 14 bits. The 14 bits of the instruction word are provided on an output bus 203 from the register file 202. Eight bits of the instructions words stored in the register file 202 are fed on an 8-bit information bus 204 to one set of input terminals of a multiplexer 206. 
     Various registers are coupled to an 8-bit bus 208 connected to the output of the multiplexer 206. These registers include a SCSI Command Register 210, a SCSI Mode Register 212, a SCSI Bus Control Register 214, a SCSI General Purpose Register 216, a SCSI Buffer Pointer High Register 218, a SCSI Buffer Pointer Low Register 220, and a Loop Counter Register 222. 
     An input terminal 230 of an input buffer amplifier 232 is connected to a SCSI Data Input Bus. The output terminal of the buffer amplifier 232 is connected to an input terminal of a Data Input Register 234. The output terminal of the Data Input Register 234 is connected to one input terminal 236 of a multiplexer 238. The other input terminal 240 of the multiplexer 238 is connected to the output terminal of a buffer memory, typically a DRAM (not shown which is external to the integrated circuit 10. The output terminal of the multiplexer 238 is coupled to the input terminal of a FIFO memory 242. The output terminal 244 of the FIFO 242 is coupled to the input terminal of the same buffer memory. The output terminal 244 of the FIFO 242 is also connected to one input terminal 246 of a multiplexer 248. The other input terminal 250 of the multiplexer 248 is coupled to a terminal of the General Purpose Register 216. The output terminal 254 of the multiplexer 248 is coupled through a buffer amplifier 252 to a SCSI Data Output Bus. 
     A microprocessor data bus 253 is coupled to the controller 200 at input terminals 260 for providing address and data information to the data register 202 from an external microprocessor. 
     Write-address information WA is provided to the register file 202 from a write-pointer register 270. Address information for the write-pointer register 270 is provided on a bus 272 connected to the output terminals of a 2-input multiplexer 274. One set of input terminals 276 of the multiplexer 274 is connected to the microprocessor input terminals 260. 
     Read-address information RA is provided to the register file 202 from a read-pointer register 280. Address information for the read-pointer register 280 is provided on a bus 282 connected to the output terminals of a 2-input multiplexer 284. One set of input terminals 286 of the multiplexer 284 is connected to the microprocessor input terminals 260. The other set of input terminals 288 is connected to a bus 290 from the output terminals of the register file 202. A selection control terminal 292 of the multiplexer 284 is connected to the output terminal of a branch logic circuit 294, which provides a branch address to the read pointer for a branch instruction. 
     Data information is provided to the register file 202 on a signal line 300 which is connected to the output terminal of the multiplexer 274. The other set of input terminals 302 for the multiplexer 274 is connected to the output terminal 244 of the FIFO 242 through a bus 304. 
     Several different sources for a block of 32 instructions for the register file are available. One source for the register file is the microprocessor data bus 253, which is connected to terminal 276 of the multiplexer 274. Two other sources of data information for the register file 202 are coupled to the register file 202 through the FIFO 242. One source of data information is the buffer memory, which is coupled to the multiplexer at terminal 240. The other source of data information is the SCSI Data Input Bus connected to terminals 230 and through buffers 232 to the Data Input Register 234, which is connected to the input terminals 236 for the multiplexer 238. The data information selected by the multiplexer then passes through the FIFO 242 and on signal bus 304 to the input terminal 302 of the multiplexer 274. 
     Note that data information from the multiplexer 274 on the data bus 300 can be directly transferred to a second set of input terminals of the multiplexer 206, bypassing the register file 202. 
     The register file is loaded with 32 instructions for the sequencer, where each of the instruction words has a width of 14 bits. The integrated-circuits cells for the register files are preferably static memory cells and, consequently, occupy relatively large silicon area on an integrated circuit. Consequently, to significantly reduce the silicon area of an integrated circuit for the SCSI controller, the size of the register file 202 is reduced by utilizing one of the objects of this invention, for example, from 128 instructions of 14 bits to 32 instructions of 14 bits. 
     The register file 202 provides a set of instructions for the sequencer. Typically, these instructions are loaded into the register file from an external microprocessor and form what is called an instruction map for the sequencer. For a register file storing only 32 instructions, rather than 128 instructions, the microprocessor needs to reload a new instruction map, or a new set of instructions, to the file register 202 relatively more often. If the microprocessor is busy serving other system needs, the sequencer is required to wait to be reloaded with a new set of instructions. 
     One of the objects of the present invention is to avoid excessive use of a valuable system resource such as the microprocessor and to avoid having the sequencer being in a wait condition until the microprocessor is available, provides for reloading a block of 32 sequencer instructions into the register file under the control of instructions contained in the register file itself, rather than requiring the microprocessor to load the register file. In other words, a reloading capability for the sequencer memory is built into the sequencer map itself. This frees the microprocessor for other system tasks and avoids having the sequencer being in a wait condition. Note that the microprocessor loads the buffer memory with all of the instructions blocks which eventually are loaded into the register file 202. 
     Each instruction block of 32 instructions for the register file 202 also contains decision making instructions regarding which block will be required next and where to find the next set of instructions in the buffer memory. 
     FIG. 4 is an example of a flow chart showing the functional interrelationships between various 32-word microinstruction blocks, or modules, each of which may be selectably stored in the register file 202 of FIG. 3. 
     FIGS. 5A through 5D show the data structures for various instructions stored in the register file 202 and provided to the output terminals of the register file 202. 
     FIG. 5A shows the data structure of a LOAD REGISTER microinstruction stored in the instruction register file of the SCSI sequencer. The Load Register op code 00 (bits 12 and 13) causes the register specified in the Register Select field to be loaded with the parameters contained in the Register Parameters field. 
     TABLE I lists the various Register Select values found at bits 8-10 of the LOAD REGISTER microinstruction and the corresponding registers to be loaded. The first seven of these commands cause the value found at bits 0-7 to be loaded in the designated register. 
     
                       TABLE I______________________________________REGISTER SELECT: THESE BITS ARE DECODED TOSELECT THE REGISTER TO RECEIVETHE REGISTER PARAMETERS:Register SelectValue      Register______________________________________111        Loop Counter (Loop Counter 1 if LC bit = 1,      Loop Counter 0 if LC = 0110        SCSI register101        General Purpose Register (GPR)100        Command Register011        Status Code Register010        Buffer Pointer High (also resets the      FIFO Pointer)001        Buffer Pointer Low000        Macro Commands______________________________________ NOTE: Writing or reading of these registers while the sequencer is operating ma corrupt the sequencer operation or provide invalid data. Parameters: This byte is the data to be put into the selected register. 
    
     Table II lists the MACRO commands, which are called up in a Ld, or Load Register, command as Load Register 000. Macro commands provide a specific function which is used one or more times in the SCSI sequencer code. Macro commands are used to reduce the number of sequencer instructions needed to implement a particular function and may be tailored to meet the needs of a specific application. 
     
                                           TABLE II__________________________________________________________________________MacroValueMnemonic   Function__________________________________________________________________________00:  Set.sub.-- Flg1           Set Flag1 to 1. Interrupts microprocessor.01:  Set.sub.-- Flg2           Set Flag2 to 1. Interrupts microprocessor.02:  Rst.sub.-- Flg1           Clear Flag1.03:  Clr.sub.-- SCSI.sub.-- PE           Clear SCSI parity error04:  Set.sub.-- Flg0           Set Flag0 to 1. Unreadable by micro-           processor.05:  Rst.sub.-- Flg0           Reset Flag0 to 0. Unreadable by           microprocessor.06:  Ld.sub.-- SCSI.sub.-- to.sub.-- DI           Load SCSI bus data into the Data Input           register.07:  Set.sub.-- Flg 3           Set Flag3 to 1. Interrupts microprocessor.08:  Reload.sub.-- Seq           Reload entire sequencer map. This Macro           command loads the sequencer map from           buffer memory using the Buffer Pointer value           and starts automatically at instruction 0.09:  Ld.sub.-- DI.sub.-- to.sub.-- FIFO           Load D.sub.-- Input register to FIFO0A:  Sav.sub.-- B.sub.-- Ptr           Save Buffer Pointers and reset FIFO pointers.           A copy of the current 16-bit Buffer pointer           value is saved into an unreadable register           for future use. The FIFO pointers are reset           to 0.0B:  Restor.sub.-- B.sub.-- Ptr           Restore Buffer Pointer and reset FIFO ptr.           The 16-bit Buffer pointer value is returned           to value last saved by the Sav.sub.-- B.sub.-- Ptr           Macro.           The FIFO pointers are reset to 0.0C:  Set.sub.-- Cmd.sub.-- Q           Set CMD.sub.-- Q register.           Only the unmasked bit (or bits) of D.sub.-- Input           · GPR will set corresponding bit(s) high           in the CMD.sub.-- Q register.0D:  NOP        No operation.0E:  FIFO.sub.-- to.sub.-- GPR           Prefetch FIFO data to GPR. This is neces-           sary prior to any data transfer from the           FIFO to the SCSI bus.0F:  Ld.sub.-- GPR.sub.-- to.sub.-- FIFO           Load GPR data to FIFO.__________________________________________________________________________ 
    
     FIG. 5B shows the data structure of a BRANCH Microinstruction stored in the microinstruction register file of the SCSI sequencer. The Branch command checks an existing condition. If the Branch Condition to be checked is true, the program continues to operate with the instruction found at the address specified by the Branch Address. 
     The Branch instruction is one of the microinstruction sequences. If the microcode that&#39;s running in the sequencer needs to make a decision about what to do next based on the state of one of the interface signals, a branch instruction is inserted into the sequence, and that branch select determines which of the inputs into the branch select logic 301 is gated on to cause the instruction either to branch at the instruction specified in the branch address off the branch instruction, or to continue to the next instruction. 
     If, for example, the branch instruction says to take a branch when the ATN signal is asserted, the branch logic 303 causes the next sequencer instruction to be taken from the instruction address defined by bits 6 through 0 of the Branch instruction. If ATN (in this case example) were not asserted, then the branch logic 303 would cause the next instruction to be executed to be the next sequential instruction beyond the branch instruction. 
     The Branch Select Logic 301 (FIG. 3) is a multiplexer used to select one input signal as an input to determine whether the Branch Logic sees a true or false condition. So the Branch Instruction decode selects which one of these bits are gated through this logic into the remainder of the Branch Logic to determine whether the branch is taken or not. 
     TABLE IIIA lists for the Target Mode the various Branch Condition values specified by bits 8-11 of the Branch Instruction with their corresponding Mnemonic and Description. If the instruction executed is to occur, the branch is at the Branch Address found at bits 0-6. 
     
                                           TABLE IIIA__________________________________________________________________________Branch Condition: The condition to be checked isDecoded from these 4 Bits.Target Mode:ConditionValue  Mnemonic  Description__________________________________________________________________________0000   UnderGCorPE            Undefined command group code or            parity error detected.0001   Atn*      Attention deasserted.0010   Bsy       Busy signal asserted.0011   Sel       Select signal asserted.0100   Par.sub.-- Err            Parity Error (set by SCSL or buffer            parity error).0101   I/O       SCSI I/O signal asserted.0110   Flag3*    Flag3=00111   Compare   GPR = D.sub.-- Input register.1000   Flag0*    Flag0=01001   Flag1*    Flag1=01010   Test.sub.-- for.sub.-- 0            Test for 0:(GPR*D).sub.-- Input=0)1011   No.sub.-- Cmd.sub.-- Pend            Command is not pending (GPR*·D.sub.-- Input            ·CMD.sub.-- Q = 0)1100   Uncond    Unconditional (always branch to branch            address)1101   Arb.sub.-- Lost            Arbitration Lost: GPR &lt;SCSI bus.1110   MT1.sub.-- or.sub.-- DB.sub.-- P            Test for more than 1 bit (GPR*·D.sub.-- Input=            two or more bits are one) or Data Bus            Parity Error.1111   LC.sub.-- NZ.sub.-- Decr            Branch on loop counter not zero and then            decrement. (Loop Counter 1 if LC bit=1            Loop Counter 0 if LC=0).__________________________________________________________________________ 
    
     TABLE IIIB lists for the Initiator Mode the various Branch Condition values found at bits 8-11 with their corresponding Mnemonic and Description. 
     
                       TABLE IIIB______________________________________INITIATOR MODECondition           DescriptionValue   Mnemonic    true if:______________________________________0000    Msg.sub.-- Out               Message Out phase0001    Stat.sub.-- Ph               Status phase0010    BSY         Busy signal asserted0011    SEL         Select signal asserted0100    Par.sub.-- Err               Parity Error (SCSI bus or buffer               parity error)0101    I/O         SCSI I/O signal asserted0110    Cmd.sub.-- Ph               Command phase0111    Compare     GPR=D.sub.-- Input1000    Flag0*      Flag0=01001    Flag1*      Flag1=01010    Msg.sub.-- In               Message In phase1011    Data.sub.-- In               Data In phase1100    Uncond      Unconditional (always branch to               branch address)1101    Arb.sub.-- Lost               GPR&lt;D.sub.-- IN.1110    Data.sub.-- Out               Data Out phase1111    LC.sub.-- NZ.sub.-- Decr               Branch on loop counter not zero               and then decrement (Loop Counter               1 if LC bit=1,               Loop Counter 0 if LC=0)______________________________________ 
    
     In certain instances, the Branch instruction may be used in conjunction with the loop counter 222 shown at the bottom of FIG. 3. A typical operation is shown in flowchart of FIG. 7 where the illustration is of a common example where we want to send 15 bytes of a message, so we need to repeat the same operation many times. The operation begins by loading a loop count, followed by a combination of Load Branch and WAIT instructions to do the task. In this case, send the message on the SCSI Bus. At the end of each message, the loop counter is decremented using an appropriate macro, and there is a branch to return to the second step of this flowchart if the loop counter is not yet at zero. When the loop count reaches zero, as expressed in the loop counter, then the loop counter indicates this occurrence by an appropriate input to the Branch Select Logic 301, detected by Branch Logic 303, which in turn advances the read pointer as described. 
     FIG. 5C shows the data structure of a WAIT GENERAL microinstruction stored in the microinstruction register file of the SCSI sequencer. This command unconditionally waits for the number of bytes (to transfer to or from the host) specified in the Count value. 
     The Count value provides a transfer length as follows: 
     
         ______________________________________  Count       Transfer  Value       Length______________________________________  7FFh        1      byte  000h        2      bytes  001h        3      bytes              .              .  0FEh        256    bytes  0FFh        257    bytes  100h        258    bytes              .              .  1FEh        512    bytes  1FFh        513    bytes              .              .  7FEh        2048   bytes.______________________________________ 
    
     FIG. 5D shows the data structure of a WAIT SPECIFIC microinstruction stored in the microinstruction register file of the SCSI sequencer. This command waits for a specified condition to occur or for a specified time-out condition to occur. If the time-out condition occurs prior to the specified condition, the sequencer is halted, and the local microprocessor is notified via interrupt line IRQ 54. Interrupt code is set at timeout fault. 
     Table IV lists the Wait Condition value and the corresponding Mnemonic and Description of the event being waited for. These appear at bits 8-11 of the instruction. 
     
                                           TABLE IV__________________________________________________________________________WAIT CONDITION: This Value is Decodedto Select One of the Following ConditionsCondition        Timeout                  DescriptionValue  Mnemonic  Possible?                  Wait For:__________________________________________________________________________0000   ACK (Target)            Y     Acknowledge signal asserted                  (if in Target mode)  REQ (Initiator)            Y     Request signal asserted                  (in Initiator mode)0001   ACK* (Target)            Y     Acknowledge signal negated                  (if in Target mode)  REQ* (Initiator)            Y     Request signal negated                  (in Initiator mode)0010   BSY*.sub.-- &amp;.sub.-- SEL            Y     Selection phase0011   BSY       Y     Busy signal asserted0100   Bus.sub.-- F.sub.-- or.sub.-- Sel.sub.-- Ph            Y     Bus Free or Selection                  phase (SEL &amp; BSY*)0101   FIFO.sub.-- Inc            N     Increment the FIFO pointer                  &#34;Count&#34; times (does not use                  Rate multiplier).0110   Count.sub.-- Down            N     Count Down using Rate                  multiplier and Count value.0111   Cmd.sub.-- Input            N     All Command Descriptor Block                  (CDB) bytes received (Goes                  active after ACK for last byte)1000   Msg.sub.-- In            Y     Message In phase1001   Cmd.sub.-- Ph            Y     Command phase1010   FIFO.sub.-- E*            Y     FIFO is not empty. This con-                  dition is true when Dir=1 and                  the FIFO has prefetched at                  least 4 bytes od data from the                  buffer.1011   Undefined1100   Flag2*    Y     Flag2 not set1101   Flag1*    Y     Flag1 not set1110   FIFO.sub.-- Free            Y     A FIFO transfer is not active                  pending. This condition will                  be false any time the SCSI FIFO                  is accessing the buffer RAM.1111   Sync.sub.-- cmplt            Y     Synchronous transfer complete                  (#REQ = #ACK)__________________________________________________________________________ 
    
     For Wait Specific conditions which use a timeout condition, the Rate field and the Count field are defined such that the RATE bits are decoded to provide a multiplier for the COUNT. The actual count is (RATE times COUNT)+1. The rate bits (found at bits 5,6) are decoded as follows: 
     
         ______________________________________RATE       COUNT MULTIPLIER______________________________________00           1 cycle/count01           32 cycles/count10          2048 cycles/count11         65536 cycles/count______________________________________ 
    
     The COUNT value found at bits 0-4 multiplied by the Count Multiplier provides the maximum wait time for a particular Wait Condition of Table IV. If the selected condition does not become true before the count, the sequencer freezes operation by generating an internal Halt signal, which in turn raises the microprocessor interrupt signal. When the count is set to 1F, no time-out will occur. As an example, for a RATE value of 00 (1 cycle per count), a Count value of 00h provides a count of 22 cycles and a Count value of 1Eh provides a count of 31 cycles. As another example, for a RATE value of 01 (32 cycles per count), a Count value of 00h provides a count of 1 cycle and a Count value of 1Eh provides a count of 961 cycles. 
     The wait select logic 305 is the same as the branch select logic 301. It is a multiplexer with input signals that again cause the wait instruction either to loop on itself to continue executing its own address or to execute the next sequential address. There is no branch address in Wait; but if, for example, the system is waiting for the ATN signal to be asserted, and the ATN signal is not asserted, then the wait select 305 will gate a signal into the wait logic 307, and that signal saying that the ATN signal was not asserted would cause the wait instruction to be executed again and again and again. When ATN is finally asserted, the wait logic 307 would then cause the next sequential instruction after the wait to be executed. 
     The exclusive OR 307 input of the wait logic is a way to invert, to either take the active or the true or the false condition of the signal as input. So the system can either wait for a condition to occur or wait for the compliment of the condition to occur. And that condition is gated into the wait logic. 
     FIG. 6 illustrates a typical sequence of instructions which makes use of several of the type of instructions discussed above. For example, the first instruction as designated by the read pointer, instruction 04, is a load instruction of the type shown in FIG. 5A. This instruction will contain register select values to designate a particular register to be loaded, and the values to be loaded in that register. Upon completion of that function, the instruction is complete, and the read pointer moves to instruction 05, which is a macro instruction. This means that the bits 8 through 10 are 000, and that the appropriate macro is now designated by bits 0-3, with bits 4-7 unused. When the macro is complete, the sequencer automatically goes to instruction 06, which is a branch to instruction 25 if XYZ is true. For purposes of this example, assume that XYZ is not true, and therefore the sequencer goes directly to instruction 07, which is a branch to 15 if XYZ (which may be any condition) is true. 
     For purposes of this example, we assume the condition to be true, so the sequencer goes directly to instruction 15 which is a load instruction of the same type as found at 04. Typically, whatever was previously loaded, the sequencer is now instructed to load at different value. When the load operation is complete, the sequencer and its read pointer moves to instruction 16, which is a WAIT IF ACK, ACK being one of the input signals to the WAIT SELECT logic 305 shown in FIG. 3. According to the WAIT instruction, the sequencer will now wait for the time period designated in the instruction to see if ACK is true. If not, the sequencer remains in 16, and at the end of a time period looks again as shown by the line above. As shown by that line, on the sixth instance, ACK goes true, and the sequencer moves to instruction 17, which is another load instruction. Suppose that the complete time specified in the WAIT instruction had expired and ACK had not been true. Then the sequencer waits for intervention by the external microprocessor because, be definition, the sequencer has limited intelligence so that it can operate at very high speed. 
     By going to instruction 17, we find a new load instruction, after which at instruction 18 there is another branch to 25 if ATN is true. In this case, we assume ATN, which is an input to the branch select logic is true, causing the sequencer to move to instruction 25 which is another load instruction. In this way, any sequence defined or available through the sequences shown in FIG. 4 can be implemented. Details of several of the specific sequences are shown in the tables which follow, and in Appendix A which is attached hereto and incorporated herein for purposes of providing further exemplary details. 
     CODE MODULES I through IV are typical modules, or blocks, of 32 instructions with comments. They are lists of the detailed instructions utilized to implement the functional blocks shown in FIG. 4. The instructions are written in a user code prior to being assembled into 14-bit binary instructions. The 14-bit instructions are stored in the buffer memory before being called into the file register 202. The data structure of the various instructions are described in more detail in the descriptions connected with FIGS. 5A through 5D, where Ld is the Load Register command, Br is the Branch command; Wts is the Wait Specific command; Wtg is the Wait General command. ##SPC1## 
     Note that, for the two lines of instructions before the last line of code in Code Modules II, III, and IV, the beginning and ending addresses of the next module to be loaded into the register file 202 are specified with the Ld Buf --  Ptr --  L and the Ld Buf --  Ptr --  H commands. The very last line of code in all of the Code Modules is the Ld Macro,Reload --  Seq command, which is a Macro command to reload the entire sequencer map. 
     The foregoing descriptions of specific embodiments of the present invention have been presented for purposes of illustration and description. They are not intended to be exhaustive or to limit the invention to the precise forms disclosed, and obviously many modifications and variations are possible in light of the above teaching. The embodiments were chosen and described in order to best explain the principles of the invention and its practical application, to thereby enable others skilled in the art to best utilize the invention and various embodiments with various modifications as are suited to the particular use contemplated. It is intended that the scope of the invention be defined by the claims appended hereto and their equivalents. ##SPC2##