# ADSP-219x Reverse Engineering Toolkit

Radare2 architecture plugin and reference materials for reverse
engineering ADSP-2191 firmware.

## Contents

    r2plugin/       Native radare2 arch plugin (C, GNU style)
    examples/       ADSP-2191 assembly examples (FIR, IIR, FFT, Viterbi)
                    + assembler-verified ISA test ROM
    testrom/        Test ROM generator for plugin validation
    docs/           Architecture reference, opcode tables, walkthrough guides

## Quick Start

    cd r2plugin && make && make install
    r2 -a adsp219x -b 24 examples/isa_test.bin
    [0x00000000]> pd 48

## Requirements

- Radare2 >= 5.8.0 (RArchPlugin API)
- GCC

## Plugin Status

Currently decodes: NOP, IDLE, Type 1 (multifunction), Type 3
(direct memory), Type 4 (compute + memory), Type 6/7 (immediate
loads), Type 10/10a (jump/call), Type 17 (reg move), Type 20
(RTS/RTI).

Work in progress: Type 9/9a (standalone compute), Type 11
(DO UNTIL), Type 15 (shift), Type 18 (mode control), Type 25
(saturate).

## Assembler

The examples were assembled with [open21xx](https://github.com/wodz/open21xx),
an open-source assembler/linker for ADSP-218x/219x. Build
instructions are in the open21xx README. The resulting ELF is
converted to raw binary with `dd` (extract the `int_pm` section).

## License

Plugin code: LGPL-3.0-only. Example code from Analog Devices
application notes. Documentation extracts from the ADSP-219x
DSP Instruction Set Reference.
