+---------------------------------------------------------------------+ | WHATSNEW.DOC REVISION HISTORY FOR TMS320C31 DSK SOFTWARE | +---------------------------------------------------------------------+ This file contains information covering new applications, features and fixes that have been incorporated since rev 1.10 of the C3x DSK Software. ========================================================================= APPLICATIONS CODE (versions after 1.10) ========================================================================= -APPHELP.HLP This files, which are actually source files for building -CMDHELP.HLP some DSK applications contain the text strings for various -HARDWARE.HLP help screens. They are plain text and can be viewed or printed with almost any program. -DSK3HELP.EXE This application can be used in a seperate DOS box alongside the debugger and other applications to view the debuggers help screens as well as a new external help file 'APPHELP.HLP' that contains lots of tips and tricks for DSK code and hardware development. You can also copy these help screens to files the same as if you were viewing them in the debugger. -LOADPROM.EXE This application is a utility that reads in *.HEX files, which are bootloadable images, and writes each byte to the DSK's external interface using the DSK debugger. This makes it easier to create EEPROM based daughter cards that can be both used with the DSK debugger and used in a standalone mode. Note that you MUST convert your application files to the *.HEX format to use this utility -DSK_SG.EXE Generates precision sine wave, triangle or sawtooth signals using an interpolated table lookup. Up to 14 signals can be added together (limited by screen display) be added together. Includes White noise and DC level shifting. Includes AIC control hot keys. -DSKSG.ASM TMS320C3x source code for DSK_SG.EXE -SAWT_SG.ASM TMS320C3x source code for creating wave tables -SINE_SG.ASM TMS320C3x source code for creating wave tables -RAMP_SG.ASM TMS320C3x source code for creating wave tables -RAND_SG.ASM TMS320C3x source code for creating wave tables -DSK_DTMF.EXE Generates precision 32 bit floating point accurate sine wave signals using a complex vector rotation. Up to 14 sine waves can be added together (limited by screen display). The number keys are mapped to create DTMF tones. Includes White noise and DC level shifting. Includes AIC control hot keys. -DSKDTMF.ASM TMS320C3x source code for DSK_DTMF.EXE -FFT_1024.EXE A 1024 point complex radix 2 FFT that runs 100% on-chip. This is made possible by using a packed short float format (4:1:11) similar to float immediate values. There is very little loss in SNR. Data and twiddles are packed two per memory slot in REAL:IMAG pairs. Pack/unpack routines are also included for float16() 8:1:7 format. Includes AIC control hot keys. -FFT1024.ASM TMS320C3x source code for FFT_1024.EXE -FFT_512.EXE Traditional 512 point FFT using 32 bit floating point arithmetic. The FFT is written for readability not for size or speed since the majority of time is spent in the host updating the display. Includes AIC control hot keys and analog loop back of a sawtooth signal. -FFT512.ASM TMS320C3x source code for FFT_512.EXE -FFT_256.EXE Traditional 256 point FFT using 32 bit floating point arithmetic. The FFT is written for readability not for size or speed since the majority of time is spent in the host updating the display. Includes AIC control hot keys and analog loop back of a sawtooth signal. -FFT256.ASM TMS320C3x source code for FFT_256.EXE -FFT_256B.EXE Same as 256 point FFT except that the host display uses the oscilloscope interface. Includes AIC control hot keys and analog loop back of a sawtooth signal. -FFT256B.ASM TMS320C3x source code for FFT_256B.EXE -FFT_OSC.EXE Data collection and display as an oscilloscope I/F. Hot keys allow control of the AIC, volts/div, offset and other parameters. With the bandpass filter removed, the TLC32040 will accurately convert and display square, triangle and sawtooth signals. Note that the analog loop back of a sawtooth signal will show some ringing. This is because of the DAC reconstruction filter which cannot be defeated is bandwidth limited. -DSKOSC.ASM TMS320C3x source code for DSK_OSC.EXE -DSK_PWM.EXE This program is written to give the user finer control over the two timers that are used to create the R-Y-G LED cycling. Additionally a 0Hz frequency can be specified with a known duty cycle between the two timers for a DC output. -DSKPWM.ASM TMS320C3x source code for DSK_OSC.EXE -DSK_TEST.EXE This program is used in the factory to test the DSK's functionality. Includes an internal memory checker and a routine for checking the external data bus for stuck bits. Be sure to not have the DSK's data bus connected to an external load before running this test. -DSKTEST.ASM TMS320C3x source code for DSK_TEST.EXE -MANDEL3X.EXE This program uses the DSK to calculate the Mandelbrot set much faster than most PC's. Guessing algorithms are not used as in most popular Mandelbrot viewers. Note that in many cases a high percentage of the time is used to move the data, not calculate it! -MANDEL.ASM TMS320C3x source code for MANDLE3X.EXE NOTE: This application requires an external BGI driver SVGA256.BGI to operate. See README.DOC for details -DSK3LOAD.EXE Loader/Bootloader utility that will either load or bootload a DSK, COFF or HEX file to the DSK. Also includes a FILE2HEX converter and NOLOAD option. -DSK_HLL.EXE By loading the symbols of the last loaded DSK3D debugger file (contents of DASMFILE.FIL) this utility can get the value of the current PC and cross reference that value back to a line of C level source code. This application can be run concurrent to DSK3D.EXE in a separate DOS window in either Windows 3.1 or Windows 95. OS/2 will not allow multiple devices to access the printer port at the same time. -MEMVIEW.EXE Use this utility concurrently in a second Windows DOS box to asynchronously pole the status of the DSK and display both a block of memory and on-chip memory mapped registers. -REGVIEW.EXE Similar to MEMVIEW.EXE except that the display is of the context save area giving an update of the register values as a program is run. Also, the memory dump can be in either HEX or FLOAT. -SIMPLE.EXE This program is a stripped down version of MEMVIEW.EXE to help a novice code writer learn how to write host interface code for the DSK. For example you can change the memory display to a different format by changing the printf() statement or maybe add graphics routines for a display. Note that the opposite of getting a block of memory, getmem(DSPaddr,length,&HOSTaddr) is putmem(DSPaddr,length,&HOSTaddr) making it easy to create a DSK memory modifier. -C3X.ASM TMS320C3x DSK Communications and debug kernel source code -C3XMMRS.ASM TMS320C3x Memory mapped register definitions -LOOPAIC.ASM Stand alone AIC code for either analog loop back or sawtooth signal generation. The mode is changed by a code variable. -SFFT.ASM The Sliding FFT or SFFT is a method of calculating an entire FFT output within the span of one input sample. The technique uses the previous FFT and applies a vector rotation to each output bin before summing in the new input. Since the vector rotation operation on a DSP is quite fast, the SFFT can be very efficient. This demo will either create a spectrum analyzer output, which is viewed with an oscilloscope connected to Vout, or as a sum of all REAL's or all IMAG's. IOW an all pass filter of either 0 or 90 degrees phase shift. -TOGGLE.ASM Stand alone code for making the LED toggle R-G-R-G -IDLE2.ASM Stand alone code showing how to use a feature of the IDLE2 instruction to freeze a write in progress on the bus to eliminate the need for pull up, pull down resistors for low power -RAND.ASM Stand alone code showing a code loop which calculates 32 bit random numbers. -FIR.ASM A 16 tap FIR filter example implementing the Z transform -15 H[z] = 1 - z which is a simple comb filter -MATH.ASM A piece of looped code that calls various math functions for evaluation. Includes inverse float, square root, log2 and ultra-fast log2. These math functions are written for readability not for speed. By using the debugger and utility interfaces the functions can be analyzed to determine how they work. Read the notices contained within the source file for more information. -SCANNER.EXE Host control and display code for a TSL1402 256x1 line scanner Requires that a daughter card be constructed. The daughter card electronics require a TSL1402, 14 pin socket, bypass capacitor and 330 ohm resistor. You will also need a short focal length lens and some kind of mounting hardware unless you only want to see that shadows showing up on the line. Read the documentation at the top of the *.CPP and *.ASM source files on how to construct the daughter card. -SCAN.ASM TMS320C3x source code for SCANNER.EXE NOTE: These files are not compiled or pulled down into the DSK3TOOLS directory since this application requires the construction of a daughter card. Also, there is not much space leftover on the disk for very many more applications! - The TLC32040 that is used on the DSK is able to convert each sample coming from the TSL1402 without being dependent on the previous samples since the input filter can be bypassed on that particular AIC. Other types of AIC's are usually not suitable for this kind of application. TI also makes a low cost 8 bit flash converter (TLC5510) but this does require considerably more effort to breadboard so it is not used in this application. NOTE: This application requires an external BGI driver SVGA256.BGI to operate. See README.DOC for details ========================================================================== DEBUGGER COMMANDS AND OTHER FEATURES ADDED AFTER VER 1.10 NOTE: THE DSK3D HELP MENU CONTAINS A LISTING OF DSK3D FEATURES ========================================================================== FSTEP Step through functions times MEM View memory @ - 32 bit hex MEMX '' MEMI View memory @ - signed MEMD '' MEML '' MEMUI View memory @ - unsigned MEMUD '' MEMUL '' MEMU '' MEMF View memory @ - TMS float FILE2HEX .dsk|.out conversion to HEX DSK2HEX .dsk conversion to HEX COFF2HEX .out conversion to HEX HEX2COFF file .hex conversion to COFF DSK2COFF file .dsk conversion to COFF MEM2HEX file,a,l Write memory at address for length to HEX file MEM2COFF file,a,l Write memory at address for length to COFF file MAXFLEN val Set max output file length MOVE/MOV src,dst,n Move memory from src->dst n<256 times Added functions (assembler and debugger) ---------------------------------------- rand() 32 bit long or +/- 1.0 normalized float random srand(x) Seeded version of rand() float() 32 bit hex of TI float 8:1:23 format float8() 4 bit hex of TI float 4:1:3 format float16() 16 bit hex of TI float 8:1:7 format sfloat() 16 bit hex of TI float 4:1:11 format .psfloat Packed sfloat() used for 1024 FFT ======================================================================== REVISION HISTORY - COVERS NEW FEATURES AND BUG FIXES ======================================================================== New for version 1.11 ======================================================================== - Improved message passing between functions - COFF loader loads more symbols. Also more descriptive - COFF loader now loads HLL cross reference table - Now loads and writes DSK, COFF, HEX and MEM to and from files - File translation - Last loaded file for debugger is now written to file DASMFILE.FIL - Memory display and type over modify in HEX, DECIMAL and FLOAT - Added HEX file support. Hex files are hex ascii bootloader images - Command buffer highlighting - Improved online help - Source and executable code is now compressed to fit on disk - Added an INSTALL.BAT to help installing the code - The distribution disk now expands into a structured tree ======================================================================== New for version 1.12 ======================================================================== - Improved expression analyzer stability - Trapping of math overflow errors - Black out of various windows on error - LOAD (no arg) before first file is loaded no longer causes a crash - Worked auto detection of long and float values - pow(a,b) - Fixed sfloat, vsfloat rounding of negative numbers - Long commands no longer cause the command buffer to 'blank out' - Better tracking of code in the disassembler window - Labels and symbols not recognized - Packed float address count in pass1 assembly - LABEL; comment ignored - Comment preceding || of parallel code was ignored - FFT analyzers were moving 2x data necessary for display - Added TMSFLOAT.CPP to distribution disk - LOOPAIC.ASM AIC initialization routine was corrupted. - Can now force stepping using 'shift' function steps (SF8/SF10) through even code that turns off, masks, or loses the host interrupt enables. Usually shows up as a load to the IE register - Can now set a breakpoint at the end of a repeat block. Previously the breakpoint (a trap) would wrap around to the repeat start and therefor not step properly - The TRAP binary opcode value was missing an offset of 32, causing the TRAPs to begin at address zero, overlapping the normal interrupts. Note: The DSK uses this feature to create TRAPs that execute the standard interrupts. As defined in the UG, this bit pre-adds an offset of 32 to a TRAP. ------+ | C3x TRAP = 0x74000020 = 011101000000000000000000001xxxxx - An error in the indirect addressing filter would get confused in the following case. Basically '+' within the offset field would be seen as a post modifier add (it was trailing the ARx field) and generate a bad code. Ex. LDF *-AR0(1+1) <- Generates bad code LDF *+AR0(1+1) <- This worked - The following, improperly written code, would not generate an error Ex. LDF *-AR0(1)% <- The % modifier was ignored - If a block of code was disabled " .if 0", and a parallel code was inside the disabled block, the second line of the opcode would generate an error. Example. .if 0 ; Turn off code block ldf *AR0,R1 ; || ldf *AR1,R2 ; Error generated here .endif - If a breakpoint was set within an ISR as shown the debugger would loose synch, in version 1.11 but not previous versions. This bug was created by a routine that was added for benchmarking (the _dT option in the debugger). The new routine would force a single step of a known opcode (a branch) and use it as a standard value for timing calculations. Since the DSK uses a low priority interrupt for debugging it was possible to loose the debugger interrupt. By forcing all interrupts to return to the SSTEP routine, all cases were guarenteed to return. This bug was fixed using the singlestep forcing feature (previous bug fix). ISR nop ; Enters with GIE=0 b ISR ; reti ; ======================================================================== New for version 1.15 12/15/96 ======================================================================== - Lost Host Communications If 0xC4 (XINT1,RINT1,INT2) is not logically OR'ed with IE, the DSK kernel communications link can be lost. The effect is that singlestepping or running can crash or be eratic. - If host communications fail, the user is notified that 0xC4 should be logically OR'ed with IE - Higher level interrupts block host communications If a higher level interrupt is pending, and during its execution fails to fully recover E (OR of 0xC4), the CPU can miss the host communications interrupt, failing to return to the command state. - If singlestep or run synchronization fails, the user is notified that 0xC4 should OR'ed with IE and that SF8/SF10 can be used to override all interrupts, forcing all interrupts to point back to the singlestep routine. - A BreakPoint (BP), which is a TRAP opcode, can now be set in most locations including repeat blocks. When a break point (TRAP) is executed the program counter (PC) is loaded with the TRAP address+1. By then cross referencing the PC with known BP locations, the host can then properly back up and execute the code that was in the BP location. However in the case that a BP is set at the end of a repeat block the PC value will not be BP address +1. Instead the PC will be reloaded with the starting address of the repeat block and the RC decremented. By verifying that the apparent BP location was not in the active BP list, that PC=RS, and that a BP was set at the end of the repeat block, a recovery can be made. Conditions that cannot covered include 1) A BP cannot be set at both the end of a repeat block and at the position RS-1. A warning will be displayed if this condition is detected. 2) A BP cannot be set within the three opcodes immediately following a delayed instruction. This condition is not allowed since interrupts, and TRAPs are disabled during those cycles. Note: A TRAP within 3 instruction of a delayed code will be taken after the 3rd opcode, without regard to the PC load of the delayed instruction. A recovery is not possible. An error is generated if this condition is detected. - Not all operands for parallel enhanced opcodes (PG 6 and above) were allowed. IE use of non floating point registers and some special opcode orderings where missing. - Consolodated the display and source managment of help files as follows. - TXT2SRC.EXE utility was created to convert *.HLP text files into properly formatted C strings. The resulting *.CPP file is then #included into the code. TXT2SRCE was also added to the Transfer Utility in the IDE such that auto-dependenct builds will work. - All help files are now managed through a single display function. - DSK_reset() function was cleaned up to eliminate dead or inefficient code and to also make it easier to port to a Windows DLL. - Known screen update errors and lost messages were fixed - Saved Help files now have a *.HLP extension - The command buffer depth was increased to 16 commands - Can now to save the symbol table to a file. - Changed rev to 1.15 (1.20 will be the formal release level) - The assembler now accepts F0-F7 as valid arguments for float regs - The assemblers defined register are now fully table driven. - 'FP' is now accepted as 'AR3' the C frame pointer - CREAD (TAKE) has been added to allow execution of debugger commands stored in a file. - CSAVE Saves command buffers, window positions, PC and SP CSAVEALL Same as above, but also saves all onchip memory to CSAVEALLCOFF FULLSAVE.HEX or FULLSAVE.OUT (COFF version) - A new command 'CMDxx string' copies 'string' to command buffer xx 'PAUSE' and 'END' functions were also added - Consolodated the command processor switch tables. - Can now 'SAVE x,y,DASM' memory in DASM format to a file - fcloseall() statements in DSK_COFF.CPP were changed to fclose() of localy open files - New commands DASM0-3 now allow various amounts of information to be written to the DASM window. - The 40 bit and floating point display now persist after hitting the F2 or F3 keys. Can now edit the CPU registers as both hexadecimal or float - Now use ExeCmdStrg(char *) to execute command entries, rather than seperate command processors in several boxes. - DSK3A labels to floats ("F0 .float 1.4") are now properly listed in the symbol table at the end of the DSK file and are properly read in and used by the debugger ======================================================================== New for version 1.16 1/6/97 ======================================================================== - 43/50 row screen modes are now supported using a new command line option 'C4350' - The MEM window start address can now be entered while the MEM window is active using the F2 function key. The edit box that is opened can accpet numerical or symbolic expressions similar to the command line and assembler. - Preservation of the last used cell for the MEM and CPU windows makes it easier to go back to the location that was last edited - The DASM window cursor location now tracks the PC value when the window is first opened ======================================================================== New for version 1.17 2/6/97 ======================================================================== - New help utility DSK3HELP.EXE - More help files, especially for applications - New utility LOADPROM.EXE reads *.HEX files into DSK memory assuming that an EEPROM is present. - INSTALL.BAT now includes version stamp recognition - DSK3LOAD now recognizes when no file is specified - Disassembler routines now use a hash table for faster code lookup - TI Floating Point Tools Version 5.0 support. A new COFF file version was added. Changed some structure definitions - Q format view and edit of the memory window ======================================================================== New for version 1.18 3/7/97 ======================================================================== - Added more application information to APPHELP.HLP - Added DSK_WAV.EXE (DSK_WAV.CPP/DSKWAV.ASM) wave file play and record - Improved LOADPROM.EXE user interface to have highlighted data and reconstructed data (byte->long) for easy verify. Also set wait state generator to maximum for slow devices. - Added PICK.EXE ot INSTALL.BAT to replace DOS 'CHOICE' command. CHOICE was not available before DOS 6.0 and was therefor giving users installation errors. - Fixed a DSK3A bug that was causing load errors Within a .if section that was disabled, directives were not being shown as 'nocode' lines. As a result the loader would see a .sect that should have been disabled as active. 0x809800 directive .if 0 ; turn off assembly 0x809800 directive .sect "JUNK" ; section 0x809800 directive .endif ; 0x809800 directive .if 0 ; turn off assembly 0x809800 nocode .sect "JUNK" ; section 0x809800 nocode .endif ; - Immediate short float values (4/1/11 format) with Exp=-8, should disassemble to zero. This is bypassed for the DSK3A assembler loopback test mode which is used to verify binary exactness for disassembled -> re-assembled binary opcodes. - Added a commented out line of in TMSFLOAT.CPP, function TMS_IEEE(), that can be used for the conversion of 'Denormal' IEEE floating point numbers. Denormal numbers occur when the exponent is -127 and fall outside of the IEEE range of 2^-127 < 2^127. Denormal numbers may not be faithfully represented or operated on in an IEEE number format. These numbers are either treated as zero values, or as 2^-127 * Q23(frac). The C3x/C4x on the other hand uses the range specified for denormal numbers for floating point representation. - An '.brstart' (or any other section change statement) imbedded into the comment field of a section which was supposed to be turned off in a .if block was causing the section loader to fail. - DSK_TEST.EXE, TXT2SRC.EXE and FFT_256B.EXE were removed from the software installation diskette to make room to fit into 1.4MB diskettes. The source and project files for these applications are still included. KEL 3/18/97