The single source repository for Carey's KZ Ambika firmware, incorporating the preserved local KZ work and controller stabilization on AVR GCC 9.5.0.
Current release: v1.4 (2026-09-14) — faster preset browsing. Download AMBIKA.BIN: flash 52,550 bytes, static SRAM 3,829 bytes. Voice-card firmware is unchanged at v1.1 and does not need reflashing.
v1.3 before it was the stability milestone: the first published build on the modern AVR GCC 9 toolchain, with the preferences-page memory corruption fixed. Earlier KZ units report v1.2.
- v1.4 release notes and installation
- v1.3 release notes
- Baseline, hardware sign-off and limits
- Current handover and improvement plan
- Repository history and consolidation
- Voice card v2 architecture plan (breaking; not started)
- DIAG3 memory-diagnostic image
Copy AMBIKA.BIN to the SD card root, then either use Library -> more ->
Firmware update, or power off and hold S8 (rightmost button) while powering
on. Keep a backup of your working firmware first.
Use Python 3, GNU Make, AVR GCC/avr-libc and AVR binutils. Put the AVR executables
on PATH. The recorded build uses GCC 9.5.0 and binutils 2.46.0.20260210; other
versions require their own size and behavior checks. The modified avrlib/ is
included directly; no submodule checkout or resource regeneration is needed.
python3 tests/run_controller_ui_tests.py --sanitizers undefined
python3 scripts/build_firmware.py --target controller --variant release /tmp/kz-buildPass --variant diagnostic for the DIAG3 memory-instrumented image, or
--target voicecard for the voice card. No freshly compiled voice card image
has ever been validated on hardware here — see
KZ-firmware_builds/test-voicecard-2026-09-14/README.md before flashing one. That
image boots straight to a RAM/stack screen and replaces the firmware-update page,
so it can only be reflashed with the hold-S8 method.
The output directory must be new. The script builds in a fresh temporary directory,
checks flash <61,440 and static SRAM <3,968, and packages BIN/HEX/ELF, a map, build
log and exact source manifest. The test command needs a host C++ compiler
(clang++ by default, or CXX). It tests UI logic, not AVR interrupt timing.
common/features.h controls optional features and modifications; record its
configuration for every build. Do not treat old files in the ignored build/
directory as freshly built firmware.
A hybrid MIDI polysynth and voicecard host.
Ambika consists of a compact motherboard serving as a "host" for up to 6 sound synthesis voicecard. While this design is primarily intended to be a flexible hybrid polysynth, it could also be used as a drum module/drum machine.
The motherboard comprises 6 audio outputs, each one connected to a voicecard ; a global mono output ; a pair of MIDI input/output ; a SD card slot ; a 5V/8V/-8V power supply capable of delivering 150mA on the 8V rails and 350mA on the 5V rail ; the master MCU and the user interface elements. The voicecards (a pair of each being attached to the 3 voicecard ports) are SPI slaves, they receive note and modulation data from the motherboard ; and output monophonic audio, ideally 1V pp.
3 designs of voicecards implementing a refined version of the Shruthi-1 engine are provided. Each of those use a different filter (4-Pole with LM13700, 4-Pole with SSM2164, 2-Pole SVF with SSM2164).
Original developer: Emilie Gillet (emilie.o.gillet@gmail.com)
The firmware is released under a GPL3.0 license. It includes a variant of the formant synthesis algorithm used in Peter Knight's Cantarino speech synthesizer.
The PCB layouts and schematics, documentation, analyses, simulations and 3D models are released under a Creative Commons cc-by-sa 3.0 license.