DSP 3210 drivers & tools
This package contains drivers and several tools to use and operate the
DSP 3210 on AA3000/AA3000+ motherboards.
Samples and Demos **********************************
dsp3210devtest: A tool for comprehensively testing the DSP drivers
(dsp3210.device and dsp3210.resource) and the hardware as regards
CPU vs DSP memory access. It executes DSP programs that hammer host
memory in all directions and of all kinds (ChipRAM and FastRAM). If
this shows errors (other than IO errors), there is a hardware problem
at hand, most likely GAL timing issues. To make sure, the timing of
the GALs is correct, let this run for at least 1000 passes. It
should exit with zero errors.
This tool has two important limitations:
1) The FastRAM tests are performed with FastRAM of the highest
priority. If you have an accelerator board with local RAM, it will
usually use that - timing errors with motherboard or Zorro RAM might
therefore not be detected.
2) What this tool is incapable to uncover are potential issues with
the onboard SCSI controller in connection with the DSP.
Please see docs/STATUS.doc for more information.
examples/dsp3210mandel: A Mandelbrot application using the DSP via
dsp3210.device and dsp3210.library. This is an adaption of Wrangler's
"mandel_dsp", with all hardware hacks removed and replaced by driver
functions. Comes in three versions that differ in how the DSP tells
the CPU it's finished. Meant as demos for the different methods the
drivers support and offer.
Based on dsp3210run (used as DSP-handling skeleton), Mandel by Erik
Trulsson, ARTABROT by George T Warner.
examples/dsp3210run: Runs a given DSP program. Is a sample and skeleton
for new applications at the same time. It fully utilizes the drivers in
this package. A suitable demo DSP program is DSP/testprogram.
examples/dsp3210libtest and examples/dsp3210clibtest:
Show usage of dsp3210.library, by loading and relocating the DSP
programs in examples/DSP.
makeobjectfile: This utility creates an object file out of any binary,
and the main purpose here is to create object files out of DSP binaries,
ready to link to your own application with blink, slink or and other
Amiga standard linker.
This library helps applications to use the DSP by handling binaries created
by the d32 tools (eg d32as and d32cc).
It currently supports
- calculating the required memory for the relocated binary
- relocating a DSP binary to a target memory address
- loading and relocating a DSP binary in one single step (DSPLoadMod())
- resolving local and global symbols accross several DSP binaries
- additional application-provided global symbols
- searching for global symbols
- converting a binary with little-endian file structures to big-endian
Please see the code samples for more information, first and foremost
Source and developer files included.
DSP 3210 Resource & Device ***************************
Low level drivers for the DSP.
The dsp3210.resource ("resource") is the base layer.
dsp3210.resource is an executable which is run from CLI at startup, for
example from user-startup. It creates the dsp3210.resource.
This is placed in devs: and is a middle layer between the dsp3210.resource
and the user application.
Please see the included documentation and examples for more information
on how to use this.
All files in this archive are written in 1987 or 2020/2021 by Thomas
Winischhofer, except as noted.
Newer versions of this package might be found at
4.13: (=210904 on github)
- dsp3210.resource (40.33)/dsp3210.device (40.33)
- minor bug fix
- code optimizations
- docs clean-up
4.12: (=210829 on github)
- dsp3210.resource (40.32)/dsp3210.device (40.32)
- Add payload facility (send a value from DSP to CPU
- dsp3210.library (7.0)
- Get rid of global symbol table array, introduce
proper data structure.
- Add (untested) driver for Atlas ATL DSP3210 Zorro
cards that came with the ATL HDI-1000 ultrasound
4.11: (=210823 on github)
- dsp3210.resource (40.31)/dsp3210.device (40.31)
- Made fit for hooking in third party DSP3210 drivers
- minor bug-fixes and code optimizations
- dsp3210.library (6.0)
- Add FreeAllSymbolTables() function
4.10: (=210814 on github)
- Fix last-minute typo in install script
- dsp3210.resource (40.30)/dsp3210.device (40.30)
- reduce memory footprint
- dsp3210devtest: Add test for int6
4.09: (=210809 on github)
- dsp3210.resource (40.29)/dsp3210.device (40.29)
- Added cut-down ROMable modules (located in ROM/ directory; only
tested with LoadModule, not tested as real ROM modules.)
- Added installer script
4.08: (=210805 on github)
- dsp3210.resource (40.28)/dsp3210.device (40.28)
Some API changes to support DSP local ram at addresses >=$80000000
Add PostROMInit hook
Minor fixes and code optimizations
- dsp3210.library (5.0)
Some API changes to support DSP local ram at addresses >=$80000000
4.07: (=210731 on github)
- dsp3210.resource (40.27)/dsp3210.device (40.27)
Fix DSPDAllocMem (last-minute typo with deadly impact)
4.06: (=210728 on github)
- dsp3210.device (40.26), dsp3210.resource (40.26)
Added support for the mmu.library, drivers work now with MuMove4k
Fixed leak in DSPDFreeMem
Fix bug: DSP was unfairly advantaged (MaxIter not changed on Zoom)
Optimized DSP code to again beat the 060 FPU after named bug was fixed
Brushed and polished the application, it's a looker now
4.05: (=210722 on github)
- dsp3210.device (40.25), dsp3210.resource (40.25)
Fixed bug in device (message handling)
Added SETSTARTADDR command
etc. (see ChangeLog)
4.04: (=210715 on github)
- dsp3210.device is now a hybrid of device and library
- Added longwordcopy convenience DSP function, used in the same way as
the triggerintx functions.
- Device and resource are now multi-DSP capable (in theory)
- dsp3210.library (4.0):
Changed arguments to LoadMod()/LoadModChip()/UnloadMod() in order
to support address translation and driver-private memory management
4.02: (=210705 on github)
- minor changes, no new functions
- documentation cleanup and update
4.01: (=210702 on github)
- dsp3210.resource, dsp3210.library:
Added CompatMode, in light of the recently discovered issues
with the onboard SCSI controller in connection with
accelerator boards with local RAM. The library and resource
use exclusively ChipRAM for DSP code if in Compat-Mode.
This mode is enabled by setting the global environment variable
DSPCOMPAT (ie "setenv DSPCOMPAT 1").
- Added docs/STATUS.doc with detailed information on hardware
and software status.
4.00: (=210627 on github)
- API cleanup (again) (hence the version jump)
- Added DSP ID
- Minor other changes
- Reminder: Needs updated U124.
3.00: (=210620 on github)
- Added PLD and JEDs for GALs needed on AA3000+
- Added dsp3210mandel (in various flavors)
- Fixed triggering of CPU interrupts in drivers and all sample programs
- New commands for dsp3210.device
- New data structures for dsp3210.device
- SwapEndian function for dsp3210.library
- Added README to examples
- Added lots of documentation
2.00: (=210609 on github)
- massive changes and additions, see ChangeLog
- add dsp3210run, a fully featured sample program to run DSP programs
1.03: (=210304 on github)
- numerous changes, additions and fixes for dsp3210.library
1.02: (=210213 on github)
- dsp3210.resource: disable interrupts while writing to $dd0080 if
started with r4 or r10 parameters.
1.01: (=210210 on github)
- dsp3210.resource: By default, write byte to DSP control register only once
- Added read tests to dsp3210devtest
- Moved dsp3210.resource to devs:
(Please delete c:dsp3210.resource after installing)
- Initial release