TMS20C5X DGTL SGNL PROC STARTR'S KIT DSK.DOC

From Proghq
Revision as of 04:40, 17 October 2020 by Mcmaster (talk | contribs) (Created page with " ********************************************************* * >>>>>>> NOTE <<<<<<< * *...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
            *********************************************************
            *                  >>>>>>> NOTE <<<<<<<                 *
            *                                                       *
            *             THIS IS A PRELIMINARY DOCUMENT            *
            *     THE DSP STARTERS KIT IS NOT YET PRODUCTIZED       *
            *                                                       *
            *********************************************************
 
                                C5X DSP STARTERS KIT
 
                                   ( D S K 5 )
 
                        USERS GUIDE AND TECHNICAL REFERENCE
 
 
 DSK HARDWARE AND SOFTWARE LICENSE
 ---------------------------------
 
 Hardware
 
      Your unmodified DSK circuit board has been carefully tested and
      inspected in the factory for functionality.  Be sure to check the
      board yourself BEFORE making any changes!  If you do make changes, this
      will invalidate any kind of warranty, and we will not accept the board
      back for repair.
 
 Software
 
      DSK5D.EXE (tm) TMS320C50 RS232 Monitor and Debugger   Version 1.xx
      Copyright 1993 Texas Instruments, Inc.  All rights reserved.
 
      DSK5A.EXE (tm) TMS320C5x DSP Designers Kit Assembler Version 1.xx
      Copyright 1993 Texas Instruments, Inc.  All rights reserved.
 
      DSK5L.EXE (tm) TMS320C5x DSP Designers Kit Loader Version 1.xx
      Copyright 1993 Texas Instruments, Inc.  All rights reserved.
 
 
 Introduction to C50 DSP Designers Kit
 ---------------------------------
 
 OVERVIEW
 
   Your C50 DSK development kit is designed to be operated from an IBM PC/AT
 or compatible.  The user interface is through an RS-232 serial communications
 link.  Provisions have been made in the hardware specification making it
 possible to upgrade the DSK module with extra memory and features of your
 own design.
 
 KIT CONTENTS: Your kit should contain the following materials.
 
    - DSK circuit board module
       > TMS320C50 DSP processor
       > TLC32040 Analog Interface Circuit (AIC)
       > RS-232 interface chips
       > AC/DC Power supply circuitry
 
    - Floppy disk containing
       > DSK5D.EXE    - The debugger interface for the DSK module
       > DSK5A.EXE    - A TMS320C5x assembler
       > DSK5L.EXE    - A DSK loader program
       > ?????        - Check the subdirectories!  New applications will be
                        added as they become available!
 
    - DSK Users Guide and Technical Reference
 
 =======================================================================
 
 WHAT YOU WILL NEED TO PROVIDE
 -----------------------------
 
   Like C26 DSK, your C50 DSK circuit board and software has been designed
   to be operated from an IBM PC/AT running DOS 4.01 or higher. Your
   computer must have an RS-232 asynchronous port installed to run the DSK.
   Also, a suitable 9VAC (UL Class II) wall mount transformer with a 2.1mm
   pin diameter power jack.  The outer diameter is 5.50mm.  A chart showing
   the DSK connector and corresponding plugs is given below.
 
               +----------+--------+--------+
               |          | DSK    | XFMR   |
               |          | CONN   | PLUG   |
               +----------+--------+--------+
               | PIN   ID | 2.00mm | 2.10mm |
               | SHAFT OD | 5.55mm | 5.50mm |
               +----------+--------+--------+
 
 RS232 PORT AND CABLES
 ---------------------
 
   To run the DSK you will need to have an RS-232 port available.  If you
 do not, or the one you have is currently being used (possibly a mouse), you
 may need to purchase an Asynchronous communications for your PC or possibly
 an RS-232 upgrade kit.  Consult your PC manual for more details.
 
   You will also need to purchase an RS-232 cable to connect to the DSK module.
 To save space the DSK was designed with a DB9 RS-232 connection.  This
 connector style is very popular with newer PC's and laptop computers.  If
 you do not have the neccessary cables, they can be purchased from a local
 computer store.  If you are making your own cable, the DSK module connections
 as shown below.
                                     DSK CIRCUIT BOARD
                          ..........................................
                          :         RS232 LINE    C50 DSP          :
       -----+             :    / |    BUFFERS     +----+           :
            |TX   (XMIT)  :3 /   |  |\            |    |           :
       PC/AT|---------------|    |--|  >o---------|BIO |  +-----+  :
       HOST |TR   (RCV)   :2|   R|  |/  /|        |    |--|     |--- AIN
            |---------------| D S|---o<  |--------|XF  |--| TLC |  :
       ASYNC|DTR  (/RS)   :4| B 2|  |\  \| |\     |    |--|32040|  :
       SER  |---------------| 9 3|--|  >o--|  >o--|/RS |--| AIC |--- AOUT
       PORT |GND          :5|   2|  |/     |/     |    |--|     |  :
            |---------------|    |----------------|GND |  +-----+  :
            |             :  \   |                |    |           :
       -----+             :    \ |                +----+           :
                          :                       +-----------+    :
                          :       +12(unreg) -----| Half Wave |    :
                          :               +5 -----| rectify   |----- 9 VAC
                          :               -5 -----| +/-5V reg |    :
                          :       -12(unreg) -----|           |    :
                          :                       +-----------+    :
                          ..........................................
 
 
 POWER SUPPLY
 ------------
   The C50 DSK uses the same power supply design as the C26 DSK. You will need
 a 9 VAC (>250 mA) supply to run the DSK.  The DSK module accepts a 2.1mm power
 jack, common to many wall mount AC transformers.  A low current UL listed
 transformer is recommended for the DSK module since they are designed to
 withstand most power faults for a brief period of time.  If you do have
 problems, immediately unplug the transformer from the wall and check that you
 have everything set up right. In the United States a suitable transformer (9
 VAC, 1.3A) can be aquired from Radio Shack (Cat. No. 273-1611A).  However, if
 you have a early revision board you will also want to replace the 2.1mm jack on
 this transformer.
 
   If you decide to use the DSK's on board power supply and regulators for
 external circuits, be sure to keep the loading to less than about 50 mA.
 Regulation for the DSK is minimal and can not handle a lot of additional
 current.
 
   The DSK module can also be run from a suitable +/-7 to +/-12 VDC supply.
 In this case the minimum voltage is set by the lower regulation limit of
 the onboard +/-5 V regulators and the upper limit by the maximum allowable
 RS232 level.  To do this, power is directly applied to the double row header
 where all signals have been made available.  Note: Be careful to connect
 the power supply correctly since the DSK is not warrentied after modifications
 have been made.  Failure to do this can also cause significant damage to
 the DSK module.
 
 SETTING UP THE DSK SOFTWARE
 ---------------------------
 
   It is strongly recommended that you first copy the contents of the DSK
 distribution disk to a safe place for backup.  This can be done by using the
 DOS DISKCOPY utility.  It is not recommended that you use the DSK from the
 distribution diskette.
 
   Next, we need to execute the install batch file (DSKINSTL.BAT) to install the
 software to the C:\DSK sub-directory.  Since the DSK5D debugger is also
 compatible with TI's COFF assemblers and linkers you can also copy everything
 to that directory to keep things simple.  Next you should modify your PC's path
 statement to make the DSK tools available from other directories.
 
   The DSK software you will need primarily consists of three executable files,
 DSK5D.EXE, DSK5A.EXE, and DSK5L.EXE.  The first two files are the debugger and
 assembler respectively.  The third one is loader program. The other files
 contained in the distribution disk are for examples and development support.
 
   When the DSK5D is first started it also creates some configuration and
 parameter file (DSK5D.CFG and DSK5D.PRM).  They can be modified to customize
 the colors that the debugger uses.  If something goes wrong, delete the
 old ones and start over.
 =============================================================================
 
 DSK5D
 -----
 INTRODUCTION
 
   DSK5D is a debugger and user interface designed to be used with the EPROM
 Bootload option of the TMS320C50 chip.  Features of DSK5D include an easy to
 use windowed display of program, data, internal registers and status.  The
 user interface is capable of loading and executing user code with single
 step, breakpoint and run-time halt capabilities.  The full featured DSP code
 which is responsible for the host communications has been kept to a very
 compact 314 words in program SARAM making it possible to run reasonably
 complicated code completely on-chip while still operating the debugger.
 
 INPUT FILES FOR DSK5D
 
   Valid code formats for DSK5D include both DSK output files from the DSK5A
 assembler and COFF format files from the TMS320 DSP Fixed Point Assembler.
 If you need features not found in the DSK5A assembler, contact your local
 TI sales representitive for purchasing information on the COFF assembler.
 
 HOW DSK5D WORKS
 
   DSK5D works in conjunction with the EPROM bootload option of the
 TMS320C50.  When the 'C50 is reset, the on-chip ROM bootloader drives the BR\
 pin low and starts to load the kernel program from the OTP on the DSK. After
 loading, the program starts from 0x800 on SARAM which is configured as program
 and data memory.
 
   The DSK uses BIO and XF to communicate with RS232. When the BIO line goes
 low, this indicates that an RS232 transmission start bit has been sent by the
 host.  Since the baud rate is unknown, the PC sends 0x80 data through RS232
 and the 'C50 begins counting the number of elapsed CPU cycles until the BIO
 line goes high again.  The baud rate is set by the width of the start bit plus
 7 data bit, then divide by 8.
 
   The bootloader loads code into on-chip SARAM.  In the case of the DSK a
 debugging and communications kernal is loaded which is capable of bi-
 directional RS232 communications using XF and BIO as well as debugging using
 the TRAP mneumonic and INT2 (incoming RS232 message).  When a debug interrupt
 occurs, the DSK kernal also saves and restores the internal registers.  This
 should not concern a DSK user as long as the kernal is not corrupted.  If it is
 corrupted, the DSK5D (and the DSP) will not operate properly.
 
                         >>>>>>  IMPORTANT <<<<<<
 
    Your DSK module uses the INT2 line tied to the BIO input to indicate that
 there is activity on the RS232 receive line.  If you turn off the global
 interrupt enable bit or unmask INT2 the runtime halt feature will not work.
 Likewise, if you rewrite the vector table for either TRAP or INT2 the debugger
 kernal will fail to operate correctly.
 
                          RESERVED FOR DSK5D
 
    > All of RAM block B2                 CPU register storage
    > First 384 words of SARAM            debugger communications kernal
    > SARAM configured as
      program & data RAM                            ""
    > C50 must be in uC mode              RS232 receive is in ROM
    > RESET
    > INT2                                Halts running CPU
    > TRAP opcode                         Breakpoints and single step
 
 INTERRUPT VECTOR TABLE
 
   The interrupt vectors of the DSK have been allocated to start at 0x800. That
 means the IPTR value in the PMST register is 1, and You SHOULD NOT MODIFY THE
 IPTR VALUE. The DSK5D program will restore the RESET, INT2, TRAP interrupt
 vectors. Therefore, you should not worry about overwriting those vectors. The
 kernel program starts from 0x840 -DO NOT LET YOUR INTERRUPT VECTORS OVERWRITE
 THE KERNEL PROGRAM. Your program should start after 0x980. We recommend you
 start from 0xa00. The example code below shows where the DSK interrupt vector
 table and kernal reside.
 
         .ps     0800h
 RESET:  .space  2*16          ;00; Reset vector reserved for Kernel program
 INT1:   B       ISR1          ;02; external INT1
 INT2:   .space  2*16          ;04; INT2 reserved for Kernal program
 INT3:   B       ISR3          ;06; external INT3
 TINT:   B       TIMER         ;08; Timer interrupt
 RINT:   B       RECEIVE       ;0A; Serial port receive interrupt
 XINT:   B       TRANX         ;0C; Serial port transmit interrupt
 TRNT:   B       TREC          ;0E; TDM serial port receive interrupt
 TXNT:   B       TTRANX        ;10; TDM serial port transmit interrupt
 INT4:   B       ISR4          ;12; external INT4
 
         ;--------------------------------------------------------------
         ; KERNEL PROGRAM (00840h - 00980h)
         ;--------------------------------------------------------------
 
          .ps    00a00h        ;Your code can start here
          .entry               ;
 START:   mar    *,AR0         ;
          lar    AR0,#0        ;
          lacl   #03fh         ;Turn on all interrupts
          ldp    #0            ;
          sacl   04h           ;
 SELF:    B      SELF          ;
         ;---------------------------------------------------------------
         ; Simple interrupt processing (quick return)
 ISR1:                         ;
 ISR3:                         ;
 ISR4:                         ;
 TIMER:                        ;
 RECEIVE:                      ;
 TRANX:  ldp    #0             ;recover the ARP from ST1
          .
          .
          .
         rete                  ;
         .end                  ;
 
 
 DSK5D COMMANDS AND HELP MENU
 
   For quick reference, a list of commands can be viewed from within DSK5D by
 hitting 'H' (Help) while at the command line.  This list can also be sent to
 a file while in the Help menu by hitting the 'F' (File) key. The following is
 the output listing:
 
 
      D S P    S T A R T E R     K I T    D E B U G G E R
 \C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4
 
 Usage of the program: dskd [[-|\][options]
 Options: Please note that options are not case sensative
 \C4\C4\C4\C4\C4\C4\C4\C4
 H      : Displays this screen
 Bxxxxx : Selects the baudrates: 4800, 9600, 19200[default], 38400, or 57600.
 COMx   : comport: x=1 [default] or x=2. Optional 'C1' or 'C2' can be used to
          select commport 1 and commport 2 respectively. (commports 3 & 4 are
          not supported)
 Exxxx  : defines the entry point, where xxxx is the address in hexidecimal.
 I      : selects logic level for DTR->Reset (default->inverse)
 L      : selects the EGA/VGA screen length (43 or 50)
 S      : selects the default screen length (25)
  
 Function Key definitions
 \CD\CD\CD\CD\CD\CD\CD\CD\CD\CD\CD\CD\CD\CD\CD\CD\CD\CD\CD\CD\CD\CD\CD\CD
 F1     Help Information
 F2     Print Screen to 'screen.srn'
 F3     Display Directory
 F4     unused
 F5     execute to breakpoint --> same as XG
 F6     unused
 F7     unused
 F8     singlestep --> same as F10, XS, blank, return
 F9     unused
 F10    execute over function --> same XF
 F11    Reverse Assembler window
 sF1    Reverse Assembler window
 F12    Trace ON/OFF
 sF2    Trace ON/OFF
  
  
 BA     Breakpoint add
 BD     Breakpoint delete
 BE     Breakpoint enable/disable
 BL     Breakpoint list
  
 C..    Copy/Move
 CDD    Copy Data block to another Data area
 CDP    Copy Data block to Program area
 CPD    Copy Program block to Data area
 CPP    Copy Program block to another Program area
  
 DD     Display Data memory
 DB     Display Breakpoints
  
 DF.    Display Format: see subcommands
 DFB    Display Data in format big (expo=16,mantissa=32/Q30)
 DFD    Display Data in format double
 DFE    Display Data in format short float (exp=16,mant=16/Q14)
 DFF    Display Data in format float
 DFI    Display Data in format integer
 DFL    Display Data in format long
 DFO    Display Data in format octal
 DFP    Display Data in format packed string
 DFQ    Display Data in format signed Q15
 DFS    Display Data in format string
 DFU    Display Data in format unsigned integer
 DFT    Display Data in format long float (exp=32,mant=64/Q62)
 DFX    Display Data in format hexadecimal
  
 DM.    Display Memory window: see subcommands
 DMA    Display Memory window: set Address
 DMB    Display Memory Format: big (expo=16,mantissa=32/Q30)
 DMD    Display Memory Format: double (IEEE)
 DME    Display Memory Format: short float (exp=16,mant=16/Q14)
 DMF    Display Memory Format: float (IEEE)
 DMI    Display Memory Format: integer
 DML    Display Memory Format: long
 DMO    Display Memory Format: octal
 DMQ    Display Memory Format: Q15
 DMU    Display Memory Format: unsigned int
 DMT    Display Memory Format: long float (exp=32,mant=64/Q62)
 DMX    Display Memory Format: to hexadecimal
  
 DP     Display Program memory
 DS     Display Status register information
 DV     Display Version
  
 FD     Fill Data Memory with a value
 FP     Fill Program Memory with a value
  
 Help   Help display
  
 I      Initialize to the entry point of the program
  
 L..    Load data (program, [formatted] data from a file)
 LC     Load Coff file: common object file format
 LD     Load DSK file: DSK file format
 LP     Load Format Program: 4 hex digits per line
 LF.    Load Format
 LFB    Load Format Bfloat: 1 big float per line
 LFD    Load Format Double: 1 IEEE double number per line
 LFE    Load Format Efloat: 1 special float per line
 LFI    Load Format integer: 1 int per line
 LFL    Load Format long: 8 hex digits per line
 LFF    Load Format Float: 1 IEEE float number per line
 LFP    Load Format packed charter string
 LFQ    Load Format Q15: one Q15 number per line
 LFS    Load Format Char string: 1 char per word
 LFT    Load Format Tfloat: 1 long float per line
 LFU    Load Format unsigned: 1 unsigned int per line
 LFX    Load Format Hex: 4 hex digits per line
  
 MR     Modify 320C50 Register: PC,ACCU,ARx, etc.
 MP     Modify Program Memory
 MD     Modify Data Memory
  
 Q      Quit (or ctrl Q)
  
 P      load Program counter: done from ModifyRegister display
  
 R      Reset the 320c50
  
 S..    Save (program, [formatted] data to a file)
 SD     Save Data memory to file
 SF     Save Format
 SP     Save Program memory to file: 4 hex digits per line
 SFB    Save Format Bfloat: 1 big float per line
 SFI    Save Format integer: 1 int per line
 SFD    Save Format Double: 1 IEEE double number per line
 SFE    Save Format Efloat: 1 special float per line
 SFF    Save Format Float: 1 IEEE float number per line
 SFL    Save Format long: 8 hex digits per line
 SFP    Save Format Packed character string
 SFQ    Save Format Q15: 1 Q15 number per line
 SFS    Save Format character String: 1 char per word
 SFT    Save Format Tfloat: 1 long float per line
 SFU    Save Format unsigned: 1 unsigned int per line
 SFX    Save Format Hex: 4 hex digits per line
  
 V      Verify Flag ON/OFF - default=ON for(Load ...)
  
 W..    Watch Window definition
 WA     Watch window: Address definition
 WD     Watch window: Delete watch number
 WM     Watch window: Modify address of watch
 WF     Watch window Format: see subcommands
 WFB    Watch window Format: big (exp=16,mant=32/Q30)
 WFD    Watch window Format: double
 WFE    Watch window Format: short float (exp=16,mant=16/Q14)
 WFF    Watch window Format: float
 WFI    Watch window Format: integer
 WFP    Watch window Format: packed string
 WFQ    Watch window Format: Q15 (sign . fraction)
 WFS    Watch window Format: string
 WFU    Watch window Format: unsigned integer
 WFT    Watch window Format: long (exp=32,mant=64/Q62)
  
 XA     eXecute and go to Address: define a destination Adress
 XC     eXecute with calling a function (includes stack handling)
 XF     eXecute a function: CALL or CALA 
 XG     eXecute Go to Breakpoint
 XL     eXecute and Link: branches like a 'call' to an address
 XQ     eXecute and Quit the debugger
 XN     eXecute 'n' single steps
 XR     eXecute and Free Run (ignore switching XF)
 XS     eXecute one single step
        see: F8, F10, blank, return
  
  
 Floating Point formats:
 \C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4
 .Float   32 bit IEEE standardized floating point format
 .Double  64 bit IEEE standardized double floating point format
 .Bfloat  'big float' / 16 bit exponent + 32 bit mantissa
          exponent: 2's complement / signed mantissa = Q30
 .Tfloat  'long float' / 32 bit exponent + 64 bit mantissa
          exponent: 2's complement / signed mantissa = Q62
 .Efloat  'enhanced float' / 16 bit exponent + 16 bit mantissa
          exponent: 2's complement / signed mantissa = Q14
  
  
 Register Definitions:
 \C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4
 PC    Program counter: 16 bit
 ACCU  Accumulator: 32 bit with C (carry) in ST1
 ACCB  Accumulator Buffer: 32 bit to temporarily store ACCU
 PREG  Product Register: 32 bit for 16* 16 bit multiplication
 TRG0  Temporary Multiplicand: 16 bit for multipliction
       and special instructions
 TRG1  Temporary Register 1: 5 bit for dynamic shift
 TRG2  Temporary Register 2: 4 bit for bit pointer in bit test
 ARi   Auxiliary Register: 16 bit with i=0..7 used as
       counter and pointer
 ST0   Status Register 0: 16 bit
 ST1   Status Register 1: 16 bit
 PMST  Status Register: 16 bit
 STCKi Stack Register: 16 bit with n= 0..7 used as
       Hardware Stack.
       Please note that the debugger uses one level stack
       for its own purpose!!
 DRR   Data receive register at address 0:
           16 bit for the serial port
 DXR   Data transmit register at address 1:
           16 bit for the serial port
 TIM   Timer register at address 24: 16 bit
 PRD   Period register at address 25: 16 bit
 IMSK  Interrupt mask register at address 4:
           6 bits for masking 6 interrupts
 GREG  Global register at address 5:
           8 bits to define data memory as global
 SPC   Serial Port Control Register at address 22
 ARP   ST0: Auxiliary register pointer: 3 bits
 INTM  ST0: Interrupt mode (global int enable) : 1 bit
 DP    ST0: Data Page pointer: 9 bits
 ARB   ST1: Auxiliary register pointer buffer: 3 bits
 CNF   ST1: internal Prog/Data configuration: 2 bits
 PM    ST1: Preg to accu shift mode: 2 bits
 C     ST1: Carry bit: 1 bit
 TC    ST1: Test/Control: 1 bit
 HM    ST1: Holdmode selection: 1 bit
 TXM   SPC: FSX mode bit: 1 bit
 FO    SPC: serial port control (8/16 bit mode): 1 bit
  
  
  
 Please note that following is reserved
 \C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4
 1) IMR=4 (INT2) and EINT are set from the debugger to enable
    halting of a running program: Please do not overwrite
    the bit IMR=4 and use logical instruction to set the
    appropriate interrupt mask! Do not change the locations
    0x804 and 0x805, which are reserved for INT2!
  
    If another IMR bit than 4 is set this Interrupt is
    executed also during Single Steps!
  
    If an breakpoint is set on an interrupt vector (0x802...)
    and then it is executed with Single Step it will 'nest'
    interrupts because EINT is automatically executed!
  
 2) Block B2 (data memory 0x60 - 0x7f) is reserved for
    debugger use! Don't overwrite this locations!
  
 3) The debugger kernel is located from 0x840-0x980
    in SARAM configured as Program & Data memory! Please
    DO NOT modify RAM & OVLY bits.
  
 4) The instruction TRAP and the memory location 0x822
    (trap vector) are reserved for the debugger
  
  
  
 Please note also following
 \C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4\C4 
 The debugger allocate the Interrupt Vectors at 0x800 and
 higher by set IPTR=1! Please DO NOT modified the IPTR value
 Executing User Interrupts (please note that INT2 is reserved)
 requires that additional Vectors have to be placed into the
 address space 0x800-0x83f as following:
  
 0x802-0x803   -  INT 1
 0x804-0x805   -  INT 2 - used from debugger
 0x806-0x807   -  INT 3
 0x808-0x809   -  Timer
 0x80a-0x80b   -  Serial Port Receive
 0x80c-0x80d   -  Serial Port Transmit
 0x80e-0x80f   -  TDM Serial Port Receive
 0x810-0x811   -  TDM Serial Port Transmit
 0x812-0x813   -  INT4
 0x814-0x820   -  reserved
 0x822-0x823   -  TRAP  - used from debugger
 0x824-0x825   -  NMI
 0x826-0x827   -  reserved
 0x828-0x83f   -  User-defined
  
 Please note also that the ARP (auxiliary register pointer) is
 set to AR5 with executing the Interrupt vector branch! The
 original ARP content is saved to the 3 MSBs in ST1 and can
 here extracted and restored!
  
 ============================================================================
 
 DSP DESIGNERS KIT ASSEMBLER
 ---------------------------
 
   The DSP Designers Kit Assembler (DSK5A.EXE) is a very simple and easy
 to use assembler for the TMS320C5x family of processors.  Only the most
 essential features of an assembler have been incorporated to help keep
 the assembler as easy to use as possible.  Every effort has been made to
 keep the DSK5A as compatible as possible to TI's commercialy retailed "TMS320
 Fixed Point DSP Assembly Language Tools" which offer many more features.
 
 OVERVIEW
 --------
 
   The DSK5A assembler differs from many other assemblers in that it does not
 go through a linker phase to create an output file.  Instead the DSK5A uses
 special directives to assemble code to an absolute address 'on the fly'. A
 label table will generate at the end of list file which can give you the
 absolute address of all labels. The strength of this approach is that small
 and simple programs can be created quickly and easily.  Larger executables can
 also be created by chaining files together with the '.include' directive.
 There is no provision for linking executables or libraries together at a later
 time.
 
 COMMAND LINE OPTIONS FOR INVOKING DSK5A
 --------------------------------------
 
 Useage: DSK5A <FILE[.ASM]> [KL] [asm "code"]
                             ||   |
                             ||   pre-assembles 'code' as an include
                             |+- generate list file FILE.LST
                             +--- Keep output. Ignoring ERRORS
 
 FILES OPENED:  FILE.DSK: DSK5A Output file for use with DSK5D
                FILE.TMP: Temporary object (automaticly deleted)
                FILE.INC: File used when using the asm option
 
 Example: To Assemble TEST.ASM to TEST.DSK and generate a listing file TEST.LST
 
          C:\DSK> DSK5A TEST.ASM -L
 
 option: -K  If this option is given DSK5A will try to generate an output
             file irregardless of the outcome of any errors or warnings.
             By default an ERROR corrupted file is deleted.
 
         -L  This option generates an intermediate file containing the
             unresolved opcodes.  Unresolved symbols are resolved when
             the entire file has been read in.  Note that the symbols
             are not stored in the intermediate object file and are
             therefore not linkable.
 
        asm  This option is a feature which allows the user to define
             assembler statements from the command line.  Assembler code
             in this case is terminated at both ends with a double quote.
             The character immediately following the first quote is placed
             in the first column.  ASM statements are written to an
             include file FILE.INC overwriting the previous file using
             that name.
 
             Example:
 
               DSK5A TEST.ASM  L  ASM"FFT .SET 256"  ASM" .entry 0a00h"
 
             generates the file "TEST.INC" which contains
 
               column 1
               |
               FFT .SET 256
                .entry 0a00h
 
 DSK5A SOURCE FILES:
 -----------------
 Editors:
 
   DSK5A assembler source files can be created with almost any ASCII editor.
   Legal characters are any alpha-numeric character, white space and tabs.
   What the DSK5A can not work with are files created directly from word
   processors that use special control characters for formatting.  Usually
   these editors can generate pure ASCII text files but not by default!
 
 Comments:
 
   There are two ways to comment a line with the DSK5A assembler.  The first
   and prefferable way is to use a semi-colon ";".  A semi-colon can be
   placed anywhere in a line and everything after it is ignored.
 
   The second way to add a comment is to use an asterisk "*".  In this case
   the asterisk must always be in the first column.  If it is not, it will
   be assumed to be part of an opcode and will likely generate an error.
 
 Labels
 
   All labels must begin in the first column and must start with a letter
   or an underscore "_".  After the first letter you can then mix in numbers
   as you go along.  An optional colon ":" which is usually needed in other
   assemblers as a terminator is not needed.  A label can be up to 8 characters
   in length.
 
   When an opcode or directive references a label, the value of the address
   where the label is located in memory is substituted.  The only exception
   is the LDP opcode which loads the top nine bits of the address.
 
 Opcodes
 
   Opcodes must begin past the first column or after a white space or tab
   character following a label.  The syntax usage of specific TMS320C5x
   opcodes can be found in the TMS320C5x Users Guide.  The rules that apply
   are given in the examples below.
 
   First, it is usually neccessary to resolve ALL fields in an opcode.  If
   an opcode field such as the shift field in a SACL opcode is left out,
   the next field found becomes the value for that field and the next field
   is not filled in.  If a field is not specified, its value is assumed
   to be a null and the opcode is processed accordingly.
 
   Second, expression analysis is NOT performed!  Things like the addition
   of two values, multiplies, shifts etc... are not perfomed.  Only direct
   substitution of defined variables is allowed.
 
   EXAMPLE
          .ps
          LAR   AR7,RESULT
          MAR   *,AR7
   WRONG: SACL  *,AR7      ; becomes SACL  *,7  (AR7 used for shift)
   RIGHT: SACL  *,0,AR7    ; all field specified
   OK:    SACL  *          ; last two fields not specified.  This works
          .ds
   RESULT .word 0
 
   This happens because the numeric value of AR7 becomes 7, which when
   placed into the B opcode (in the wrong field) becomes *BR0+ in the
   AR modification field.
 
   NOTE: IMPROPERLY SPECIFIED OPCODES DO NOT ALWAYS GENERATE WARNINGS !
 
 ==========================================================================
 DIRECTIVES
 ==========================================================================
 label  .byte  value1,[value2,]...
 
   The .byte directive places one or more bytes into consecutive memory words.
   The 8 MSB's are filled with 0's.  Value can either be numeric or character
   constants.  Variable substitution is NOT supported.
 
 LAB1   .byte    -1,2,0Ah,'A'  ;where 'A' is converted to it's ASCII char
 ==========================================================================
 label  .int   value1,[value2,]...
 label  .word  value1,[value2,]...
 
   The .int and .word directives place one or more signed 16 bit values into
   memory.  Character constants are also legal.  Variable substitution is NOT
   supported.
 
 LAB1   .int     0,-1,2,0ABCDh,'B'
 ==========================================================================
 label  .long  value1,[value2,]...
 
   The .long directive places one or more signed 32 bit values or character
   constants into memory.  The least significant word is stored first.
 
 LAB1   .long    0,-123456,234567,01234ABCDh,'C'
 ==========================================================================
 label  .float   value1,[value2,]...
 label  .double  value1,[value2,]...
 label  .efloat  value1,[value2,]...
 label  .bfloat  value1,[value2,]...
 label  .tfloat  value1,[value2,]...
 
    These directives convert numeric values into various floating point
 formats.  The formats are ...
 
 .float    IEEE-784 32 bit floating point format
 .double   IEEE     64 bit floating point format
 
 .efloat   This format uses a 16 bit 2's compliment exponent and a 16 bit
           2's compliment mantissa.  The mantissa's decimal point is between
           bits 14 and 15 making the 1's place explicit.  That is it is not
           implied as in IEEE formats where it is normaly suppressed.  In
           IEEE this is suppressed to allow for greater precision since the
           mantissa is always between 1.0 and 1.9999 in value.  For DSP use
           an IEEE number would need to be 'unpacked' before the individual
           members are operated on.  As a result speed performance would be
           sacrificed.  In the .efloat, .bfloat and .tfloat formats numbers
           are left in their unpacked form for greater efficiency.
 
 .bfloat   similar to .efloat except that it has 16 bit exponent and 32 bit
           mantissa.
 
 .tfloat   similar to .efloat except that it has 32 bit exponent and 64 bit
           mantissa.  NOTE: This is a proposed format for the TMS320C40 and
           is only included for compatability.  It is not suitable for a 16
           bit processor!
 ==========================================================================
        .mmregs
 
   The .mmregs will generate the symbolic names for the C50 registers and
   places them in the symbol table. It is equivalent to executing
       IMR   .set   4
       GREG  .set   5
 ==========================================================================
 label  .string value1,[value2,]...
 
   The .string directive places bytes into memory in a packed form in the
   order they are encountered.  If a word is not completely filled, the
   trailing LSB's are filled with 0's.  Value can either be numeric, character
   constant or character string.  Variable substitution is NOT supported.
 
 LAB1   .string  -1,2,0Ah,"ABC",'D'  ;"ABC" is converted to 3 ASCII char's
 ==========================================================================
 label  .space  value
 
   The .space directive is used to insert value bits into the current
   segment, either program or data.  Each word in the space is filled
   with 0's and words not completely filled are padded with additional
   zeros.
 
 Example:
         b        past      ;
         .space   040h      ;fills in 4 words with 0's
 past:   nop                ;
 ==========================================================================
 var   .set    value
 
   The .set directive is used to assign a value to a variable.  This
   directive is useful in establishing values throughout the scope of
   the assembled code.  For instance, .set could be used to set the
   load and program entry addresses or establish values for commonly used
   variables like memory mapped registers.
 
 Example:
 
      [add in the feature]
 
 ==========================================================================
        .include   "file.ext"
        .copy      "file.ext"
 
   These directives are used to chain files together making it easier to
   build large programs.  Note that because there is no link phase to
   the DSK assembler that multiple definitions of labels and variables
   will generate errors and warnings.  Nesting of included files of
   up to 8 levels is allowed before terminating the assembler.
 
 Example:
 
         .include        "MMRS.ASM"    ; include a file defining the MMR's
         .include        "LINK.ASM"    ; include a file defining the load
                                       ; and program entry address
         .include        "VECTS.ASM"   ; include a vector table
 
         ; BEGIN YOUR CODE HERE
 
 ==========================================================================
 label   .text
 label   .data
 
   These directives select that assembly output either goes to the program
   or data space respectively.  The previously used address (program or data
   space) is kept in memory making it easy to continue code or data after a
   break.
 
 Example
 
       [ add in the feature ]
 
 ==========================================================================
 
   The .end directive terminates the assembly process making any code that
   follows irrelevent.  Note that an improperly placed .end directive inside
   an .include file can also terminate the assembler prematurely.
 
 ==========================================================================
         .ps     [value]
         .ds     [value]
 
   These directives are used to initialize the program and data load
   load address's.  They can appear multiple times, making it possible
   to selectively not load anything to the gaps that are produced.
   Also, if the addresses overlap, it is possible to overwrite code
   or data with these directives.  If [value] is ommitted, the last
   address is used as in .text or .data.
 ==========================================================================
         .entry  [value]
 
   When this directive is encountered the value given becomes the starting
   address of the program counter when the file is loaded.  If no value is
   given the current program memory address as determined by the .ps or
   .text section becomes the starting address.  If more than one .entry
   directive is encountered in the file, the last .entry becomes the starting
   address of your code.
 
 Example
 
 
       [ add in the feature ]
 
 ==========================================================================
         .liston
         .listoff
 
   These directives are sometimes usefull in debugging your code.  They
   are used to override the command line -L option which can turn on the
   output listing.  The listing is always written to a file whose name is
   derived from the original source with an extension of file.LST.
 
   NOTE: .listoff also turns off disassembly since this feature is part
         of the LIST file.
 ==========================================================================
 
         .if       value
         .else
         .endif
 
   These directives are used to conditionally assemble sections of code.
   The .if segment is assembled if value is non-zero.  Value can either
   be numeric or a preset (.set) variable.  Note that since DSK5A does
   not have a link phase and is a one pass assembler, variables must be
   initialized BEFORE using them!  Otherwise their value will be zero.
   ALso note that expression analysis is not supported.
 
 Example:
 
         ELOOP   .set    1
         .if     ELOOP
 SELF    B       SELF
         .else
         NOP
         .endif
 ==========================================================================
         .qxx
         .lqxx /* 32 bit Q formats */
 
   These directives are used to generate signed 2's compliment fractional
   integer and long integer values whose decimal point is displaced xx
   places from the LSB.
 
 Example:
 
        .ds      0400h
        .Q15     0.25, 0.5, 0.75
                              <- 15 places ->
        0400     00000h  ; #0.000000000000000b
        0401     02000h  ; #0.010000000000000b
        0402     04000h  ; #0.100000000000000b
        0403     06000h  ; #0.110000000000000b
 
 ==========================================================================
 DSK OUTPUT FILES
 
   The DSK output file supports 16 bit addresses both in program and
 data space allowing direct placement of runtime code into a target.
 
 +-- DSK characters:  K designates start of file
 |                    1 designates code entry point
 |                    9 designates load address
 |
 |          +-- DSK revision and output file name
 |          |                                 +-- Checksum follows
 ^ |<-------------->|                         |    +-- line terminate
 K_DSKA_1.01_TEST.DSK                         |    |
 1FB007FB00F                                  ^    ^
 9FB00B5588B55A9B55AAB55ABB55ACB55ADB55AEB55AF7AD3CF
 9FB08BFFA8BFB01B67E0B60F07C379F
 90400M0000M0000M123471234F
 :              ^
 ^              |
 |              +-- B designates load to program space
 |                  M designates load to data space
 |
 +-- End of file record
 �