I've put together an open-source toolchain for the AT&T DSP3210 - the 32-bit floating-point DSP on the logic board of the Quadra 840AV and Centris 660AV - and perhaps someone might find it useful.
The project is available here:
https://github.com/pappadf/dsp3210-sdk
What's in it:
On correctness: during development the emulator was validated against real code - Apple's DSP kernel from the 840AV/660AV ROM boots on it, unmodified, through both of its boot handshakes into its idle loop; AT&T's mask boot ROM runs all three of its reset paths; and AppleSRC (the sample-rate converter Apple shipped as a DSP task module) runs on that kernel and resamples a test signal correctly. The disassembler reads all of the shipped DSP code in the AV ROM cleanly. None of that Apple/AT&T material is in the repository (it can't be redistributed) but the repo's own test suite is no afterthought either: the assembler and disassembler are independent implementations checked against each other across the entire cleanly-decodable opcode space (~12 million instruction words), and the example programs have hand-computed expected results.
In the interest of full transparency: AI tools were used in developing the code, tests and documentation. I know that's a red flag for some, and fully respect that.
Corrections and bug reports very welcome! (The DSP3210 also nearly made it into the Amiga 3000+ prototypes, so there may be some cross-community interest too.)
The project is available here:
https://github.com/pappadf/dsp3210-sdk
What's in it:
- an assembler and a disassembler for the DSP3210 instruction set, using the AT&T syntax from the Information Manual
- an instruction-level emulator of the CPU core (two builds: a simple one, and one that models the 40-bit DAU arithmetic exactly in integers)
- a condensed, searchable programmer's reference for the CPU - the AT&T manual only seems to survive as page scans
- a test suite that cross-checks all three tools against each other, plus small example programs (loops, subroutine calls, DAU multiply-accumulate, interrupt handling)
On correctness: during development the emulator was validated against real code - Apple's DSP kernel from the 840AV/660AV ROM boots on it, unmodified, through both of its boot handshakes into its idle loop; AT&T's mask boot ROM runs all three of its reset paths; and AppleSRC (the sample-rate converter Apple shipped as a DSP task module) runs on that kernel and resamples a test signal correctly. The disassembler reads all of the shipped DSP code in the AV ROM cleanly. None of that Apple/AT&T material is in the repository (it can't be redistributed) but the repo's own test suite is no afterthought either: the assembler and disassembler are independent implementations checked against each other across the entire cleanly-decodable opcode space (~12 million instruction words), and the example programs have hand-computed expected results.
In the interest of full transparency: AI tools were used in developing the code, tests and documentation. I know that's a red flag for some, and fully respect that.
Corrections and bug reports very welcome! (The DSP3210 also nearly made it into the Amiga 3000+ prototypes, so there may be some cross-community interest too.)
