
Question 1:
Posted: 4/1/86


    +---------------------------------------------------------------------+
    |                                                                     |
    | It appears the only way to take advantage of the parallel data      |
    | movement feature of DSP56000 is to be operating out of the internal |
    | X: and Y: memory spaces. The question is, can these internal memory |
    | spaces be loaded directly from their corresponding external memory  |
    | spaces.  This would imply that there is an addressing mode such as: |
    | *                                                                   |
    |         X:<ea>,X:<ea>  or  X:<aa>,X:<aa>                            |
    | It seems the only way to do this is with two separate operations:   |
    | *                                                                   |
    |         X:<ea>,Xn                                                   |
    |         Xn,X:<ea>                                                   |
    | Does this seem reasonable or is there a more efficient way to use   |
    | these memory spaces.                                                |
    |                                                                     |
    +---------------------------------------------------------------------+

Answer:

  Thank you for your excellent question. The good doctor has a four part 
  answer for you:

  1) You can  take  advantage of the  parallel data move features of the
     DSP56000  whether  accessing  internal  or external  memory  space.
     External  memory  is  not a  separate  memory  space but  rather an
     extension of internal memory space.

  2) Parallel data move access to an  external  or internal memory space 
     can  be  performed at full speed.  For information  related to par-  
     allel  data moves accessing  more than one external memory space in
     a single instruction, please  consult one or more of the following:

            a) Dr. BuB document d1 (under the subsection Address Buses,
               which appears after Figure 2 - DSP Block Diagram.  Address
               Buses will appear 2 to 3 screens after Figure 2)

            b) DSP56000 User's manual (order number DSP56000UM/AD),
               page 3-3 and section A.7 in the Appendix.

	    c) Dr. Bub answer a21 discusses bus timing for multiple        
               external accesses and other timing issues.

  3) Your code to do the "Block" moves using two separate move operations 
     is  correct.  This approach offers the greatest flexibility in that 
     any  source,  destination,  address mode,  or memory  space  may be 
     specified.   Not   only  that  but  the  "Block"  move  process  is 
     interruptible.  Your  code  is  a  manifestation  of  the  register 
     oriented  nature  of  the  DSP56000.  As  such register to register, 
     register  to  memory,  and  memory  to register moves are all fully 
     supported.  The  MOVEP  instruction  is  the only instruction which 
     supports  memory to memory moves.  In this case one of the memories 
     must be in I/O (peripheral) space. This "two separate move" approach,
     however, does require two instruction cycles per data word moved.

  4) "Block"  moves  at  the rate of ONE instruction cycle per data word
     moved are possible using the following  DSP56000 assembly language.

                REP #N     ; #N is the  size of the block to be moved 
                MOVE       x:<ea>,A     A,y:<ea>

     This MOVE instruction performs two moves concurrently at full speed 
     if one of the effective addresses, e.g., y:<ea>, is external, or if
     both the effective addresses are internal.  By using  accumulator A
     as a pipeline register, the data is block  moved from  one space to 
     another different space.  The REPEAT instruction is uninterruptible.
