VIBE FM Mk1 Open firmware, officially supported. The first 100 get 10% off Join the list →

The Firmware Hub · FM-1 · ATEK303

ATEK303 for the M-VAVE FM-1

ATEK3031.2

by Animatek GitHub ↗

synth

A TB-303 style acid synth with its own pattern generator: press PLAY and a line plays. Generate, mutate and undo patterns up to 64 steps, edit steps in a piano roll, add drive, chorus, synced delay and plate reverb. The ATEK303 engine from VCV Rack with 14 oscillators and its fine tuning, 12…

Text by the maker.

About it

Runs on
FM-1 · Browser ↗
Release
1.2 · released 8 Nov 2026 · on the hub since 9 Nov 2026601 KB · what's new
Licence
GPL-3.0 · source ↗ · copy on the hub
Flash chip
Every FM-1, the newer chip 0xB36014 too
Identity
FM-1_330010200what it reports over USB while it runs
Build
Built by its maker, not signed
Popular
★ 1 on GitHub

Like ATEK303

Changelog

What changed, version by version3 versions

2026-11-08

  • ATEK303: controles nuevos, como pidió Javier. Editor: K1 semitono, K2 octava (UP/DOWN), K3 ACC/SLIDE (nada, ACC, SLIDE, los dos), K4 gate (REST, NOTE, TIE); SELECT recorre el patrón entero y la página lo sigue (K4 ya no cambia de página); OCT− + K4 sigue siendo STEPS. ALGO (antes sin uso) elige WAVE desde cualquier página. EDIT recorre lo de la secuencia: editor → página SEQ → página PATT → editor. GLO abre OPTIONS (OCT− + HOME sigue valiendo) y LOCK pasa a OCT− + SEQ (SEQ encendido con LOCK). En la lista de presets SEL (encendido) carga el del cursor al momento, también sonando, y las 16 teclas blancas son los presets de esa mitad (el cargado encendido, los guardados a media luz) y cargan al momento. Prueba nueva controls.txt; basic, editor y steps64 al día; pasan las ocho (199 comprobaciones). Firmware en firmwares/propios/atek303-wave.fwsc, sin instalar; sin commit.
  • ATEK303: WAVE es ahora una lista de osciladores (página VOICE): SAW, SAW+SUB, FAT, DETUNE+SUB, SHINE, METAL, GROWL, BREATH, WILD, OCTAVES, OCT UP, FIFTH UP, SQR+SUB y SQUARE, una por detent. Son las recetas del ATEK303 de VCV y sus bajos al estilo del TB-3 (solo la parte de osciladores), sobre la capa extra portada a atek_voice.c (seno con su afinación, la otra onda con salto y desafinado, ruido, ring y cross-mod; sin libm, en una función aparte que solo corre si la entrada lleva capa). Por decisión de Javier, en vez de ocho opciones en OPTIONS: OPTIONS queda como en la 1.1. SAW y SQUARE están en los extremos (WAVE = 0 y 1), así que los presets guardados suenan igual; cambia que un CC 79 intermedio ya no mezcla las dos ondas, elige una entrada. Nombres nuevos en words.tsv para el lector de pantalla. Verificado en el PC: SAW y SQUARE idénticos muestra a muestra a la voz anterior (cmp); las 14 entradas, frente a VCV con la capa (ref_render.cpp con -DATEK_LAYER y el src/ de UZZ-VCV-RACK), mismo nivel y espectro a 0,02–0,9 dB de media, picos ≤ 0,88. CPU en el PC frente a la voz sin capa: +3 a +7 % las entradas normales, +14 % WILD. port_render.c arreglado (usaba drift_on, que ya no existe) y con OSC=k. Sin compilar el firmware ni probar en el simulador ni en el emulador (build.sh lo aprueba Javier); sin commit.

2026-11-07

  • ATEK303 1.1 publicada: release atek303-v1.1 en GitHub con atek303-1.1.fwsc (identidad FM-1_330010100, sobre 4b6e441). Probada en el FM-1 real con --classic: instalada, salida a AMB-1 (FM-1_7010300) y vuelta a la 1.1; la copia de los presets por USB antes y después es idéntica byte a byte (copia también en ~/Backups/FM1/). Falta el correo a The Firmware Hub (lo envía Javier).
  • ATEK303 1.1 preparada (sin publicar). Instalado en el FM-1 lo de OCT− + HOME (--classic, 100 %). Documentación al día para el hub: README (estado de la 1.1), cheat sheet v1.1 (12 presets de fábrica, MIDI de entrada y salida, OCT− al soltar; HTML y PDF, una página), README de la raíz con enlace al ATEK303, fmhub.json y fm1.toml (64 pasos, 12 presets, OPTIONS, MIDI de salida), captura art/screen.png nueva (COSMIC TRAX sonando, con la batería). ./build.sh --release 1.1 → atek303-1.1.fwsc, identidad FM-1_330010100, en firmwares/propios/ (fuera de Git); notas de la release en inglés listas. Falta: probar la de release en el FM-1, publicar la release de GitHub y el correo al hub.
  • ATEK303: OPTIONS con OCT− + HOME, en vez de HOME mantenido (con 1,5 s y luego 3 s se colaba en el FM-1 al pasar de página). HOME vuelve a pasar de página al pulsarlo; OCT− baja la octava al soltarlo, salvo que se haya usado en una combinación (+ HOME, o + K4 en el editor). En OPTIONS, OCT− no la cierra. options.txt al día (HOME mantenido 3,5 s no abre nada, OCT− + HOME abre sin cambiar página ni octava, OCT− solo baja la octava); pasan las siete. README y cheat sheet al día. Sin instalar; sin commit.
  • ATEK303: menú OPTIONS (HOME mantenido 1,5 s), colores, MIDI de salida y ajuste fino. HOME corto sigue pasando de página; mantenido abre OPTIONS (SELECT la línea, K1–K4 el valor, HOME cierra y guarda). Las opciones van en un objeto propio (OBJ_OPTIONS, 0xDE000), fuera de los presets y de la copia por USB. COLOR: ANIMATEK o los temas de fm1-base (GREEN, AMBER, CYAN, RED, MONO), con los colores del editor sacados del tema. MIDI: canal de entrada (ALL/1–16), canal de salida, SEQ NOTES OUT (notas del secuenciador por USB, acento 127, slide legato; activado por defecto) y CLOCK OUT (Start/Stop y 24 ppq con reloj interno). FINE TUNING: los 11 ajustes del menú «Fine tuning» del ATEK303 de VCV con sus tablas (at_option en la voz); por defecto los del modelo circuit, como sonaba. Las teclas salían por el canal 1 y ahora por el de salida. Prueba nueva options.txt (HOME corto/largo, color, deriva, notas y Start/Stop en el registro MIDI, 100 pulsos en 2 s a 125 BPM, todo sigue tras reiniciar); pasan las siete. Pila igual. README y cheat sheet (HTML y PDF, una página) al día. Sin instalar; sin commit.
  • ATEK303: reloj MIDI clavado con el DAW. Tras un Start, el paso 2 entraba en el 6.º pulso, uno antes de tiempo (~20 ms a 125 BPM): ahora el pulso que sigue al Start es el del paso 1 y el siguiente paso cae en el 7.º, como cuenta un DAW. Prueba nueva clock.txt (Start, pasos en los pulsos 7 y 13, Stop); pasan las seis. En el plugin de fm1-emu el secuenciador sigue sin arrancar con el DAW: el plugin no convierte el transporte en reloj MIDI, y Javier prefiere no tocar el código de terceros. Con el FM-1 real, el DAW manda el reloj por USB. Sin instalar.
  • ATEK303: limitador a la salida, más volumen sin recortar. A Javier le sonaba más bajo que otras ROMs: con MASTER a tope sus presets ya tocaban 0 dBFS de pico pero quedaban en −11 a −18 dBFS RMS (el 303 tiene 12–18 dB de pico sobre la media), y FUZZY SNAKE recortaba en duro el 12 % del tiempo. Ahora, antes de MASTER: +6 dB, limitador estéreo (1 ms de ataque, 80 ms de suelta, umbral 0,8) y recorte suave tanh desde 0,8. Medido en el simulador con los 12 presets: +3 a +6 dB RMS, picos a −0,1/−0,4 dBFS, 0 % recortado (FUZZY SNAKE baja de −4,1 a −6,7 RMS al dejar de recortar). Pasan las cinco pruebas; pila igual. Sin escuchar en el FM-1; sin instalar.
  • ATEK303: un FM-1 nuevo arranca en el preset 01 (COSMIC TRAX, con su nombre en la cabecera), no en el estado guardado de Javier; si el 01 está vacío, como antes. Comprobado en el simulador con la cabecera de Javier (preset 0, 12 presets, suena); pasan las cinco pruebas. La raya de la batería ya no toca el borde (2 px alrededor). Firmware y web recompilados, sin instalar.
  • ATEK303: los presets de Javier como los de fábrica, y batería en la cabecera. Copia por USB del FM-1 (fm1_backup.py --magic AT64, 11.784 B) → factory_from_backup.py --drop 19 (opción nueva: deja fuera un hueco guardado sin querer) → app/factory_presets.h con 12 presets (COSMIC TRAX … SQUELCH GOO) y su estado de arranque, para el FM-1 y la web; el simulador de --host sigue con la tabla de 8 para que las pruebas no dependan de los presets. Indicador de batería arriba a la derecha (3 rayas de plat_battery, ámbar vacía, azul con USB; nada en la web) y la nota que suena a su izquierda; se redibuja al cambiar de nivel. Pasan las cinco pruebas; visto en capturas del simulador. Pila peor 4,2 KB de 7,9 (interrupciones). Firmware en firmwares/propios/, sin instalar; web sin subir.
  • ATEK303: K4 del editor menos sensible. Las páginas se reparten en todo el recorrido del knob (0–1 como los demás: 0,01 por clic, 0,02 girando rápido), unos 25 clics por página con 4; antes cada clic era una página. Al entrar al editor o cambiar STEPS, el knob se coloca en el centro de la página del cursor. steps64.txt lo comprueba (5 clics no cambian, 15 sí, ida y vuelta); pasan las cinco. Sin instalar ni publicar; sin commit.
  • ATEK303: mandos nuevos del editor, como pidió Javier: SELECT recorre los 16 pasos de la página (y vuelve al primero), K4 cambia de página (solo las que existen; cabecera «STEP 18 2:4»), K1 gate, K2 octava, K3 semitono, y OCT− mantenido + K4 cambia STEPS (OCT− solo baja la octava al soltarlo). Una tecla avanza dentro de la página. editor.txt y steps64.txt al día (página, vuelta en la página, STEPS con OCT−, octava al soltar); pasan las cinco. README y cheat sheet (HTML y PDF) al día. Sin instalar ni publicar; sin commit.
  • ATEK303: 64 pasos, generador v5 de UZZ, SEQ al compás, valores de arranque de Javier y copia por USB. El generador se vuelve a portar desde UZZ-VCV-RACK, el ATEK303 SEQ de 64 pasos (antes era el del repo ATEK303, de 16): AcidCorpus.hpp (pesos medidos sobre un corpus de líneas acid), vocabulario, acentos, ties y slides v5, y mutaciones por tramo. Bit a bit idéntico al C++: 7.680 patrones en 64, 32, 16 y 7 pasos con sus mutaciones (61.440 líneas), también con la fm_powf del FM-1. STEPS de 1 a 64; la tira y el editor enseñan la página de 16 que suena (o la del cursor), con cuatro marcas de página; ENV/LFO/ARP mutan la página a la vista. SEQ sonando espera al siguiente compás (NEXT en ámbar #FD9A00, que ahora sí es ámbar: el C_AMB de la paleta era azul grisáceo). Arranque con los valores de Javier (369 Hz, reso 80 %, env mod 4 %, decay 707 ms; density 100 %, range 80 %, accents 51 %, slides 44 %). Presets en 4 objetos (8 por objeto; nuevos 0xD4000 y 0xD6000) y formato AT64: los guardados antes no se cargan. Copia y restauración por USB (backup = true, fm1_backup.py --magic AT64) y tools/factory_from_backup.py, que convierte una copia (o una imagen de flash) en app/factory_presets.h: los presets y el estado de arranque de Javier como los de fábrica; probado de punta a punta en el simulador. Pruebas: steps64.txt nueva; basic, editor y presets al día (el patrón y el SEQ diferido cambian las cuentas); pasan las cinco. Pila peor 4,1 de 7,9 KB (interrupciones) y 2,9 KB (principal); imagen 146 KB. Sin instalar ni publicar; sin commit.
  • ATEK303: pantalla de guardar con confirmación, como la del FMini-1 que pasó Javier. SAVE ya no guarda directo: abre SAVE PRESET con el hueco (EMPTY u OVERWRITE) y el nombre; PRESETS cambia de hueco, SELECT da otro nombre, SAVE guarda y cualquier otro botón cancela. En un hueco ocupado pregunta OVERWRITE? NO / YES (NO de entrada). Se quita «SAVE mantenido 1 s». Pruebas presets.txt y basic.txt al día; pasan las cuatro. README y cheat sheet (HTML y PDF) al día. Sin instalar ni publicar.
  • ATEK303: 8 presets de fábrica y cambio de preset al final del patrón. Un FM-1 sin presets guardados trae 8 en los huecos 1–8 (ACID CLASSIC, SQUARE SQUELCH, RUBBER BASS, PHRYGIAN RAT, DUB ACID, HYPER ACID, FLANGE WORM, SPACE MELT; tabla FACTORY en app.c, patrón por semilla fija); solo si el banco A no existe, así que un FM-1 que ya guardó presets no los recibe. En marcha, el preset elegido espera al final del patrón y entra en su paso 1, como en un 303 (NEXT en ámbar en la lista y la cabecera); parado, al momento. Petición de Javier. presets.txt ampliada (fábrica, espera y cambio parado); pasan las cuatro pruebas; comprobado paso a paso que el cambio cae en el paso 0, y grabados los 8 en el simulador (−26 a −31 dBFS RMS, sin saturar). README y cheat sheet (HTML y PDF) al día. Firmware recompilado en firmwares/propios/, sin instalar en el FM-1; versión web recompilada, sin subir a gh-pages.

2026-11-06

  • ATEK303 para tocar en el navegador: ./build.sh --web (fm1-base, con Emscripten en ~/emsdk: source ~/emsdk/emsdk_env.sh antes) compila la app a WebAssembly; publicada en <https://animatek.github.io/FM1-Animatek/atek303/play/> (rama gh-pages, sin los .o) con una portada en la raíz de la web que enlaza tocar, cheat sheet y descarga. Probada en Chromium: enciende, PLAY suena y el secuenciador corre (9 % de CPU). Enlazada como play en fmhub.json.
  • Cheat sheet del ATEK303 (atek303/cheatsheet/): una hoja A4 apaisada en inglés, estilo acid (negro, amarillo ácido, la carita): inicio rápido, botones, las 8 páginas, editor de pasos, presets, MIDI e instalación. En HTML y en PDF (atek303-cheatsheet.pdf, sale con Chromium). Publicada con GitHub Pages desde la rama gh-pages, que lleva solo la web (desde main falla: el enlace atek303/base apunta a terceros/, fuera de Git), en <https://animatek.github.io/FM1-Animatek/atek303/cheatsheet/>, y enlazada como cheat en fmhub.json. Al cambiar la hoja, copiarla también a gh-pages.
  • ATEK303 1.0, listo para The Firmware Hub. Identidad nueva FM-1_330 (release FM-1_330010000): FM-1_303 es la de Smiley Face y las herramientas de M-VAVE solo miran tres dígitos (comprobado contra los 155 firmwares descargados). fmhub.json en la raíz (la ficha del hub), portada atek303/art/cover.jpg con el TB-303 de la foto de dominio público de Steve Sims (créditos en atek303/art/CREDITS.md), fm1.toml con title, descripción al día, repo, install y screenshot (el firmware.json decía «Animatek»). Probado en el FM-1 real lo que pide el hub: instalado desde la V15, salir a otro firmware (AMB-1) y entrar desde él (el 1.0, --classic, arranca como FM-1_330010000).
  • ATEK303: HOME recorre las páginas de sonido (VCF, VOICE, PATT, SEQ y vuelta a VCF); desde el editor, la lista de presets o un efecto, va directo a VCF. Petición de Javier tras probarlo en el FM-1 real («funciona genial»). Prueba ampliada en basic.txt; pasan las cuatro (80 comprobaciones). Firmware recompilado en firmwares/propios/ e instalado en el FM-1 real con --classic (100 %, sin cortes). Apuntada en docs/05 la idea de la caja de ritmos acid (4 pistas, Plaits), sin probar.
  • ATEK303 instalado en el FM-1 real con terceros/fm1-base/tools/fm1_install.py (por MIDI, sin sudo). La instalación rápida se quedó al 2 % (el cargador y el ordenador dejaron de oírse; el FM-1 enseñaba «USB LOST»); repetida con --classic sin apagarlo, terminó y el aparato arrancó como FM-1_30300. En Linux, usar --classic.
  • Primera copia de la flash del FM-1 real, antes de instalar nada. El aparato llegó con el oficial V15 (contesta FM-1_015 a la consulta de versión del actualizador; flash Puya P25Q80H 0x856014). Copia con fm1_unbrick.py (softkey + backup, en un venv dentro de terceros/): dos lecturas idénticas, sha256 1fd6823b…72f5, 1 MiB; el arranque (0x0000–0x3FFF, d9f431917776…) es el de la V15. La zona del firmware no coincide byte a byte con el paquete público, como avisa la herramienta en las unidades de fábrica. En backups/fm1-2026-11-06/ (fuera de Git) y otra en ~/Backups/FM1/.
  • Repo público en GitHub (animatek/FM1-Animatek) con LICENSE GPL-3.0 y una sección de licencia en el README (Open303, fm1-base MPL-2.0 aparte en terceros/). Antes de publicarlo se revisó que en Git no hubiera .fwsc, .bin, copias de la flash ni claves.
  • ATEK303: quitados los movimientos grabados (parameter locks). A Javier no le convencieron. El código vuelve al del último commit y se reaplican encima el navegador de páginas, el arreglo de las vistas y la paleta Animatek. REC vuelve a ser deshacer, EDIT abre y cierra el editor de notas, y los presets recuperan su formato de antes (2×16); los guardados con la versión de los locks no se cargan. Pasan las cuatro pruebas del simulador.
  • ATEK303: movimientos, segunda vuelta. Arreglado que con REC los knobs parecieran no funcionar: grababan, pero la pantalla seguía enseñando el knob. Ahora enseña lo que suena en el paso. Carriles nuevos (9): cutoff, reso, env mod, decay, accent, DLY TIME, DLY FEEDBACK, DLY MIX y REV MIX; sale DRIVE. Vista LOCKS: SELECT paso, K1 valor, K2 parámetro, K3 fino, K4 aleatorio en todo el carril; parámetros en barra de pestañas como el navegador. Los presets vuelven a perderse por el formato. Pasan las cinco pruebas del simulador.
  • ATEK303: movimientos grabados (parameter locks). 8 carriles por paso: cutoff, reso, env mod, decay, accent, drive y los MIX de delay y reverb. REC graba lo que giras en el paso que suena, y un barrido graba una rampa. EDIT dos veces abre la vista LOCKS con barras por carril (poner, borrar paso, borrar carril). Se guardan en los presets, ahora 8 por objeto en 4 objetos: los presets antiguos se pierden. Deshacer pasa a SEL. Plaits queda aparcado por decisión de Javier. Pruebas: las cinco del simulador pasan, con locks.txt nueva; el cutoff grabado sube el centroide de 361 a 541 Hz.
  • ATEK303: paleta Animatek como en los últimos módulos de VCV: fondo pizarra #16181C, valores #5DB7FF, barras, pestaña y marco en #2C7FFF, rótulos #9AA2B5. La tira de pasos y el editor pasan a los colores del editor acid de VCV (nota #2C7FFF, tie #1E4E9C, acento #CFE6FF, slide #00C2FF, octava #7F9CC4). animatek_palette() pisa la paleta de fm1-base. Pasan las cuatro pruebas del simulador.
  • ATEK303: arreglados restos en pantalla al cambiar de vista. La lista de presets no pintaba toda su área: quedaban el navegador de la página anterior abajo y la marca del cursor del editor arriba. La lista y las páginas cubren ahora de la cabecera (y 32) al final de la pantalla. Comprobado en el simulador pasando por editor, lista y página; pasan las cuatro pruebas.
  • ATEK303: navegador de páginas al pie, al estilo de la referencia de Javier: 5 pestañas que se desplazan con la página, la actual recuadrada en ámbar y flechas cuando hay más. Sustituye a «PAGE N …»; la tira de pasos sube. Pasan las cuatro pruebas del simulador.
  • ATEK303: lista de presets. El primer giro de PRESETS abre una página con los 32 huecos (8 a la vista); el cursor carga al momento el preset que pisa. ENV dos veces borra el seleccionado (la primera solo avisa), SAVE en un hueco vacío guarda ahí, y HOME o 6 s sin tocar la cierran. Prueba presets.txt ampliada (abrir, cargar, borrar, guardar en hueco, cerrar, reiniciar); pasan las cuatro; la lista se abre también en el emulador.
  • ATEK303: presets. 32 presets en dos objetos de la memoria de fm1-base (copia A/B y CRC). SAVE guarda uno nuevo con un nombre acid aleatorio; mantener SAVE 1 s guarda encima del cargado; el encoder PRESETS los recorre cargándolos al momento. Cada preset guarda patrón, voz, efectos, tempo, escala, raíz, octava y LOCK. Prueba app/tests/presets.txt; pasan las cuatro del simulador; comprobado en el emulador, donde SAVE escribe en la flash. Documentada también la recuperación que trae fm1-base: modo seguro y REC al encender.
  • ATEK303: páginas de efectos reordenadas como pidió Javier: 5 DELAY, 6 CHORUS (antes MOD), 7 DRIVE, 8 REVERB. Solo cambia el orden en pantalla; el sonido sigue pasando drive → chorus → delay → reverb. Prueba fx.txt actualizada; pasan las tres.
  • ATEK303: HOME lleva directo a la página del CUTOFF (página 1) y sale del editor. Deshacer pasa de HOME a REC, que estaba libre. Pruebas del simulador actualizadas y pasando.
  • ATEK303: arreglado el SLIDE del editor (LFO). La limpieza del patrón heredada de VCV borraba el slide si el paso siguiente no era una nota de otra altura, así que parecía que el botón no hacía nada. Ahora el editor guarda el slide tal cual (acid_sanitize_ex con keep_slides). Un slide hacia la misma nota suena legato, como en un 303; hacia un silencio o un tie no hace nada y se pinta apagado. El generador sigue idéntico al de VCV (comparación byte a byte). Prueba nueva en app/tests/editor.txt; pasan todas.
  • ATEK303: pantalla de arranque con la carita acid en azul Animatek (#2C7FFF), la imagen de Javier (atek303/art/splash-smiley.png). tools/make_splash.py la pasa a 16 colores en tiradas: ocupa 10 KB del firmware (app/splash_img.h). Va con app_splash de fm1-base y «ATEK303» debajo. Comprobado en el emulador.
  • ATEK303 fase 3: efectos y editor de pasos. Efectos estéreo en atek303/app/dsp/fx.c: drive (overdrive, RAT y fuzz, con antialias), chorus o flanger, delay ping-pong sincronizado y la reverb de placa de Dattorro; páginas 5 a 8 y botón FX. Son estables al máximo, ocupan 326 de 344 KB de buffers y la CPU sube a ~60 % con todo puesto. Editor de pasos (EDIT): piano roll con filas UP/DOWN/GATE/ACC/SLIDE; cursor con SELECT o K1, nota con las teclas, octava, gate, semitono, acento y slide, y deshacer. Nuevo acid_import (2.000 patrones van y vuelven sin cambios); el generador sigue idéntico al de VCV. Mutar la articulación pasa al botón ARP. Simulador: basic, fx y editor pasan; el editor también funciona en el emulador.
  • ATEK303 fase 2: el secuenciador en el FM-1. El generador de patrones del ATEK303 SEQ (AcidPattern v4 + AcidGen) portado a C en atek303/app/dsp/acid_pattern.c: 3.840 patrones con 6 mutaciones cada uno salen idénticos byte a byte al C++ de VCV. El paso, el gate, el tie y el slide siguen Atek303Seq::process. Controles: PLAY, GENERATE (SEQ), mutar tiempo, notas y articulación (ENV/LFO/EDIT), deshacer (HOME), LOCK (GLO), transportar con las teclas, y 4 páginas de knobs. Tira de 16 pasos en pantalla, reloj interno o MIDI. Simulador 25/25; suena en el emulador con PLAY y con reloj MIDI externo. Firmware de 110 KB en firmwares/propios/.
  • ATEK303 compilado y sonando en el emulador. Con permiso de Javier: el toolchain de JieLi en ~/.jieli y el SDK AC79 en ~/fw-AC79_AIoT_SDK. Firmware de 100 KB (firmwares/propios/atek303.fwsc). En el simulador host pasan las 15 comprobaciones; en el emulador suena, con el 42 % de un núcleo, y va a 3,6× el tiempo real (como AMB-1 y X0X). Nuevo: PLAY toca una línea acid de demostración. Plugin CLAP recompilado e instalado en ~/.clap.
  • Arreglo local en fm1-emu. El bsp de fm1-base de hoy no enciende el audio si el PLL no tiene los valores de fábrica, y el emulador leía 0: todo firmware recién compilado salía mudo, la plantilla y AMB-1 incluidos. crates/fm1-soc/src/lib.rs devuelve ahora los valores de fábrica en 0x119A0 y 0x119A4. Pendiente de mandarlo al autor.
  • ATEK303 para el FM-1, fase 1 (sin compilar). Nueva carpeta atek303/, sobre fm1-base. El motor está portado a C (app/dsp/atek_voice.c: Open303 con nuestros cambios, el oscilador y el filtro de diodos ATEK, en float sin libm; el elíptico de 12.º orden pasa a seis biquads). Contra el ATEK303 de VCV con la misma línea acid, la diferencia es de −51,5 dB y el espectro coincide con 0,03 dB de media. App escrita: teclas mono con slide en legato y acento por velocidad, K1–K4 en dos páginas, SAVE y MIDI. Falta compilar el firmware: bajar el toolchain de JieLi y compilar fm1-base los bloqueó el modo automático.
  • Emulador compilado e instalado para Bitwig. Con permiso de Javier: fm1-live y fm1-emu en release, y el plugin CLAP (fuera del workspace, crates/fm1-plugin) instalado en ~/.clap/FM-1.clap (exporta clap_entry, sin librerías que falten). Bajados los 155 firmwares de la comunidad y copiados a firmwares/descargas/ (fuera de Git). Pasos y uso en emulador/README.md. Falta probarlo en Bitwig.
  • Idea 6: plataforma tipo VCV. Añadida a docs/05-ideas-animatek.md: Kitten Rack (con su editor Matryoshka) ya patchea en el navegador y manda el patch al FM-1 por SysEx (64 huecos, 11 % de CPU un patch de 303). La recomendación pasa a partir de su motor para los módulos que lean .pch y hablar antes con sus autores.
  • Repo nuevo. Investigación del FM-1 en docs/: 01 cómo funciona (chip, flash, .fwsc, actualización sin firma, toolchain de JieLi y las cuatro bases), 02 emulador (web, fm1-live en Linux, plugin CLAP para Bitwig), 03 rescate (los tres casos de brick: modo de rescate, unbricker por USB y FM-1 Transporter), 04 firmwares existentes (ranking por estrellas, AMB-1 por dentro, cómo se portó Mutable) y 05 ideas para el firmware de Animatek con sus límites. herramientas/clonar-terceros.sh clona 14 repos en terceros/ (fuera de Git). Rust instalado en ~/.cargo. Sin compilar: compilar código de terceros espera la aprobación de Javier.

CHANGELOG.md on GitHub ↗