V 0.1 First Release $VER V 0.2 Bug fixed in DSPGuiAnalyzer (Strings needed two zerobytes at the end instead of one !) ----------------------------------------------------------------------------- The DSP PlugIn System gives programmers the ability to design DSP algorithms for MOTOROLA 68k processors. The programmers don't have to care about nothing but the dsp algorithm to implement. It should be easy to use the DspPlugIns in other 68k Motorola Systems like AHI or Applications with minimal change to the source. :) You can do: - Any type of Scopes or spectrum analyzers - Soundcard Support plugins (Are difficult -> Sync) - Hall, Delay, Filters, Compressors ... - Overload analyzers, Correlation analyzers - Denoising Systems, Declicking Systems - Smoothing algorithms ... To try out a DSP plugin do the following: 1. Load Symphonie Player Pro (Symphonie Jr not yet supported for plugins) 2. Make the System Control Window as large as possible 3. Load a DSP Plugin (lower most gadgets) 4. Select |ON| to run the PlugIn This is just a short text. Look at it as BETA release. Experienced programers will have no problem in finding their ways by simply examining the example sources. ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- The following text describes the functions of the SuperSupportTable. The SuperSupportTable is a mixed list of subjumps and data. Do never use subjumps not documented ! ----------------------------------------------------------------------------- LIBRARY SECTION : CONTAINS THE ADRESS OF SUBROUTINES ----------------------------------------------------------------------------- SST_SYS_GetMem EQU 0 ;Get Memory ;I(A0L)(MEMBLOCK_PTR) INPUT ;O(D0L)(0=ERROR) OUTPUT ;MEMBLOCK EXAMPLE: memblock dc.l 0 ;Ptr to memory (0= memory has been freed) dc.l 1024 ;Length in Bytes dc.l 1 ;Flags MEMF_PUBLIC = 1 SST_SYS_FreeMem EQU 4 ;Free Memory ;If the memblock has already been freed, it wont free again ! ;I(A0L)(MEMBLOCK_PTR) ;O() SST_FILE_RequestFileName EQU 100 ;Get Filename using reqtools.library ;I(A0L)(RequestText_PTR) ;O(D0W)(0=Cancel) SST_FILE_SetReqPattern EQU 104 ;Set Pattern for Filerequester ;I(A0L)(PatternText_PTR) ;O() e.g. Pattern_TXT dc.b "#?.SymDSP",0 SST_FILE_SetReqDir EQU 108 ;Set Filerequester path ;I(A0L)(Dir_TXT) SST_FILE_GetFileName EQU 112 ;Get requested FileName ;I() ;O(A0L)(Filename_PTR) SST_FILE_GetFileLen EQU 116 ;I(A0L)(Filename_PTR) ;O(D0L)(FileLength in Bytes) SST_GFX_AssistText EQU 200 ;Print Text ;I(A0L)(Text_PTR) ;O() SST_GFX_AssistDecLong EQU 204 ;I(D0L)(Value) ;O() SST_GFX_AssistDecByte EQU 208 ;I(D0B)(Value) ;O() SST_GFX_AssistHexLong EQU 212 ;I(D0L)(Value) ;O() SST_AUDIO_GetChunkLen EQU 400 ;O(D0L)(SampleStreamChunk Length in Samples) ;O() ;1 Sample = 2x16 Bit Samples = 32 Bits ----------------------------------------------------------------------------- DATA SECTION : POINTERS TO LIBS and SCREEN ----------------------------------------------------------------------------- SST_PTR_EXECBASE EQU 1600 ;Contains PTR to EXECBASE SST_PTR_INTBASE EQU 1604 SST_PTR_DOSBASE EQU 1608 SST_PTR_ASLBASE EQU 1612 SST_PTR_REQTOOLSBASE EQU 1616 SST_PTR_GFXBASE EQU 1620 SST_PTR_Screen EQU 1650 ;Contains PTR to SCREEN ----------------------------------------------------------------------------- DATA SECTION : CONTAINS DATA, some of it with realtime update from the SymphonieOS ----------------------------------------------------------------------------- SST_ADR_ProcessorFlags EQU 1800 SST_ADR_SystemFrequency EQU 1804 SST_ADR_SystemBpm EQU 1808 SST_ADR_ChunkLen EQU 1812 ;in Samples SST_ADR_OversampleFlag EQU 1816 SST_ADR_MaxAmplitude EQU 1820 ;$7fff in SymPRO SST_ADR_BitPerSample EQU 1824 ;16 for 2x16 Bit Stream ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- Notes: ----------------------------------------------------------------------------- Do only use PC relative Assembler. (Have a look at the example sources) You can use 020+ Opcodes. Save it as ABSOLUTE CODE / RAW CODE ! If you compile the given sources, you have to get identical PlugIns. If you use your own windows, use GetMsg in the DSPLIB:RefreshGraph to get window messages. Don't use Wait or the System might wait twice. Use OpenWindow in InitDSP and CloseWindow in CleanUpDSP OR Use OpenWindow in StartDSP and CloseWindow in StopDSP All GFX Update MUST take place in RefreshGraph NOT WITHIN ProcDsp !! ProcDsp is called within an interrupt -> so make your algorithms as fast as possible (or even faster ) :)) All interrupt limitations apply !!! Take care ! Within ProcDsp you are NOT allowed to do anything but calculate some stuff - thats it. To do a scope e.g. You have to copy data to a buffer and then do the gfx stuff in RefreshGraph. The same is for very slow algorithms e.g. FFT analyzer For advanced DSP algorithms you will most of the time have to install a ringbuffer. The Delay example does this. The DSP GUI can only handle positive values YET. To get memory protection do use the alloc mem free mems of the SuperSupportTable. ----------------------------------------------------------------------------- This is the DSP library, all functions must be valid, they must at least point to a RTS. InitDSP and GetDspTitle also need parameters which have to be present ! In ProcDsp you have to save all registers used. ----------------------------------------------------------------------------- DSPLIB DEF ----------------------------------------------------------------------------- jmp InitDSP(PC) ;Allocate Mem, Build your Tables, Open Wins jmp CleanUpDSP(PC) ;Free Mem, Close Wins jmp ProcDsp(PC) ;Process DSP algorithm (IN interrupt !!) jmp GetDspTitle(PC) ;Get DSP algorithm Title jmp ModifyValue(PC) ;notify changed Value jmp GraphSizeModify(PC) ;notify graph size has changed (not yet implemented) jmp RefreshGraph(PC) ;notify its time for a GFX update jmp StartDSP(PC) ;notify start (User pressed |ON| ) jmp StopDSP(PC) ;notify stop (User pressed |OFF| ) dc.l -1 ;-1 MUST BE PRESENT If you find a bug in the docs or the DspPlugIn System contact Patrick_Meng@augs1.augs.use.ch Note its all beta, but its already fully functional. The DSP PlugIn Gui for RAPID PROTOTYPING will change for sure.