n0nx0x logo

n0nx0x is a firmware modification for the x0xb0x.
It aims to emulate the TB-303 sequencer interface.
However, it does not fit on the original atmega162 CPU.

Fortunately, there was a cpu-modification made for the x0xb0x, which uses the much bigger atmega2561 CPU.

So now n0nx0x2 is here, redesigned, and rewritten.
The sequencer interface is severely different, the x0xb0x requires a custom front panel for use with n0nx0x2, because the meaning of the buttons and other labels is completely different.
Check the Requirements for more details.
Here’s a summary of the differences between the 303 and n0nx0x2.


n0nx0x2 - User’s Manual


v2.11: n0nx0x_v2.11.zip (118 KB) (86626 bytes)


at x0x forums

What’s new in v2.11

  • Changed: Changes were made to some interrupt-related things.

  • Changed: Some button-combos in SETTINGS mode were changed to use the TEMPO encoder instead of the TRACK/BANK selector.

  • Changed: All data output to the App (USB-Serial) is now queued.

  • Changed: Removed the 10uS delay before the Gate opens up in the note_on() function.

  • New: Manipulator 3 - "Transpose" added. It transposes the notes from the pattern/chain up or down.

  • Changed: In Freeze Frame, even if you press a slot button for very shortly (which wouldn’t activate the effect) now there is a guaranteed 1-step-activate in these situations.

  • Pitch Mode:

    • Added functions to insert/delete notes from the list at the current position.

    • Now it’s possible to alter the DUAS attributes while holding a Key.

  • New: The Offset of the Input and Output MIDI Notes can be adjusted from the SETTINGS mode, the setting affects both.

  • MIDIPLAY mode:

    • Added LED visualisation.

    • Added access to the MIDI Note Offset setting from here.

    • Added handling for "All Notes OFF" controller. It kills all stuck notes (same as the Panic function).

  • Bugfix: Tap-Write mode: there was a bug probably from v2.05, causing Ties to be added almost always on the following step after a tap (Gate). Now fixed.

  • Bugfix: The MIDI-IN/MIDI-OUT implementation was changed. The note tracking algorithm from the previous version (which caused lots of issues) was replaced with a new one ("Modified MVA" algorithm). More info on the issue here.

Known issues

  • Pattern-Record mode is not implemented yet, so don’t panic.

Progress so far


  • 128 patterns (8 banks * 2 sections * 8 slots)

  • chain up to 4 consecutive patterns

  • 16 tracks of 64 bars each (extendable to up to 256 bars)

  • change MODE while playing (happens at end of chain, or instant (only between some modes))

  • smooth tempo changes (compared to stock firmware)

  • Shuffle (tick-based and shuffled-clock)

Pattern-Write mode

  • Time Mode

  • Pitch Mode

  • Tap-Write mode

  • Clear pattern

  • Set pattern length / step mode

  • Copy/Paste/Swap patterns and chains

Pattern-Play mode

  • Pitch-Shift

  • Test-Tone

  • Freeze Frame

Track-Write mode

  • a Bar holds pattern slot and pitch-shift information (so it’s duration is the length of the pattern)

  • Chains can be written with one button press

  • Insert/Delete bar

Track-Play mode

  • Immediate jump to bar 1 / Sign via pressing BAR RESET / D.S.

  • BAR RESET re-loads the track

  • Freeze Frame

Track-Record mode

  • An alternative (simplified) way to write tracks.


  • Sync modes:

    1. Internal(Master) - 20 to 300BPM

      • generates DinSync & MIDI Sync

      • generates Low-density Clock (XSync)

      • generates Step-Trigger (XSync)

    2. DinSync(Slave)

      • converts to MIDI Sync

      • converts to XSync

    3. MIDI Sync(Slave)

      • converts to DinSync (predicts falling edge based on last tick period)

      • converts to XSync

  • Other sync features:

    • Independant Start/Stop from the RUN/STOP button when slaved

    • Delayed-Start - start on the next measure

    • Delayed-Restart - restart pattern from step 1 on the next measure

    • Bypass Master Start/Stop

    • Fast tempo change by pressing down the TEMPO control (+/- 7 BPM)

Settings mode

all settings are stored on the internal eeprom

  • sync mode - internal/dinsync/midisync

  • metronome can be switched ON/OFF

  • Delayed-Start "Measure" length (in 16th steps)

  • Bank LED Display

  • Tempo

  • Tempo Correction (-100 to +100 equivalent to 90% to 110%)

  • XSync speed

  • midi2dinsync conversion method (prediction or fixed-width pulse)

  • Shuffle mode

  • Shuffle min/max level

  • MIDI-Notes Output - enabled/disabled

  • MIDI Note Offset

Pattern-Manipulation mode

  • #1: Shift - Left/Right or auto (via TAP), trim, tile, resize

  • #2: Reorder - random / reverse, per-attribute

  • #3: Transpose

  • #5: Mutate - small probability randomization, mutate with clipboard, all or per-attribute

  • #6: Randomize - randomize all or per-attribute

Pattern-Trigger mode

16 Patterns (one Bank) are mapped to 16 MIDI Notes, and 13 MIDI Notes are mapped to pitch-shift. Patterns can be changed instantly (similar to how most software 303 plugins work). It’s also possible to use the x0x buttons instead of external MIDI controller

Serial Messages







At-Boot Commands

  • Reset all settings to default

  • Battery-out-effect (randomize all patterns)

  • Force 2MHz SPI frequency

  • Set 4MHz SPI frequency



Front Panel

n0nx0x2 changes the meaning of most buttons and labels, so a custom front panel is required.
The panel can be made from metal and silkscreen printed, but that comes at a price.
It can also be made cheaply from plastic with engraving or some sort of vinyl with printing.

The cheapest way (which is a fair temporary solution) is to print it on (thick) A4 paper in 1:1 scale, cut the holes yourself, then put this as an overlay on top of your existing x0x panel.

Front Panel layout:


Download: n0nx0x2_panel2013.zip (220 KB) (includes vector files: .ai with the artwork and .dxf with the holes)

Ideally, the layout should be printed on a light-color material (light-gray to white) and with two actual colors - black and red (orange actually). The red in the files might be too dark, so you should probably tweak it. It can also be removed to simplify the layout (replace it with white).

I wanted to try the front panel design and went to a place which does laser cutting and engraving on various materials, i sacrificed the red color for the sake of cheapness.
..the result isn’t bad IMHO:

n0nx0x2 ABS panel 001

n0nx0x2 ABS panel 002

n0nx0x2 ABS panel 003

n0nx0x2 ABS panel 004

This panel is made out of 1.5mm ABS plastic which has two layers - black, and a thin matte gray on top (which looks similar to matte alu).
The engraving simply reveals the black layer. The plastic itself was a bit bendy, rubber like, but it’s not too bad when screwed to the x0x case.

This panel costed me just ~12 euro.

And this here is a proper alu panel, with two-color silkscreen. E1IDOKXl TI1V1O2l

Looks flawless.

Older versions

What’s new in v2.10
  • New: Shuffled clock added. In addition to the tick-based shuffle from the previous version - shuffled clock is only available when the x0xb0x is Master. It can generate shuffled clock (which affects all sync outputs, DinSync / MIDISync / XSync).

  • Changed: Changes were made to the internal clock math: the digital oscillator (which generates the internal clock) now uses 64bit integer math to calculate the frequency, since shuffled-clock requires a bit more accurate coefficients.

  • New: Added a "Freeze Frame" feature. It’s a sort of buffer-override / glitch / stutter effect. It’s available in Pattern-Play and Track-Play mode.

  • Changed: Some small cosmetic changes were made: the Tempo LED blink is now even shorter.

  • Changed: The numeric LED display animation (for displaying numbers from 0 to 999) is no longer tied to the tempo. The animation is now at a fixed rate.

  • New: MIDIPLAY mode now uses the "midi-note-tracker" code to track up to 8 simultaneously held notes. Now one n0nx0x2 can drive another one with the MIDI notes. It’s also possible to play the x0x via a MIDI keyboard in legato style.

  • New: Added a "PANIC" function to MIDIPLAY mode. It kills any stuck notes and resets the midi-note-tracker.

  • Changed: Added handling of MIDI_START to override any unhandled MIDI_STOP, this happens with some stupid DAWs which don’t send MIDI_CLOCKs while stopped.

  • Bugfix: The note-gate-out (from XSync) was sometimes getting stuck "high" on sequencer stop.

  • Changed: Added code to set the note-gate-out to "low" on MIDI_STOP, otherwise it gets stuck (due to some DAWs which don’t send MIDI_CLOCKs after a MIDI_STOP).

  • Changed: The "Dump Settings" function in Computer Control mode now prints the values more sanely specifically the midi channels were printed 0 to 15 while they had to be printed 1 to 16 instead (now fixed).

  • New: Added visual indication for the at-boot functions (those who didn’t have any).

  • New: Added an option to disable the output of MIDI notes from the patterns (they are enabled by default).

  • New: Added an At-Boot keycombo to set SPI to 4MHz.

  • Changed: "MIDI-Trigger" mode (A) is now renamed to "Pattern-Trigger" mode.

  • Changed: Pattern-Trigger mode: small button optimization.

  • Changed: The test-tone (in Pattern-Play mode) now has a shorter retrigger time.

  • Changed: some small adjustments were made to the retrigger times in some places (they are shorter now).

What’s new in v2.09
  • New: Shuffle! Affects patterns of step-mode 4/4, the shuffle is "global", it can go negative to positive, and the min/max range can be set from the settings (in case you never ever want to accidentally dial negative shuffle). The shuffle level is saved/loaded from the internal eeprom like the tempo.

  • New: Internal clock processing, dinsync polling and MIDISync2DinSync conversion is now running on a dedicated timer at 4.8kHz. Buttons and other stuff still runs on the old timer at 1kHz.

  • New: SPI clock boosted to 4MHz. This means that the cpu now communicates with the LEDs/buttons/EEPROM(external) twice faster. There’s also a way to disable this in case it fails to work in some x0x.

  • changed: Optimized the pattern-loading algorithm, now it reads continuously from the eeprom without setting the address on every byte (since the eeprom itself advances it automatically).

  • changed: The pattern/chain selection and pitch-shift algorithms were rewritten. This affected most modes on the right side of the MODE selector.

  • New: Switching between some modes (while playing) is now instant and should behave like on the 303. Specifically Track-Play, Pattern-Play, Pattern-Write, Manipulate (if the pattern is not modified).

  • changed: When switching modes (while sequencer is stopped) - the "forced" delay of ~110ms is now ~220ms.

  • New: Added a "half-lit" LED state.

  • New: Added a "Bypass Master Start/Stop" feature. When the x0x is slaved, holding FUNCTION temporarily ignores the master Start/Stop, however the internal master clock counters still reset on start, thus it’s possible to start the x0x later via Delayed-Start.

  • Track modes:

    • bugfix: trying to see where the D.C. or Sign marker is while the track is playing: the bar number display was getting overwritten by the "current bar" (playing position). Fixed.

    • bugfix: Track-Write mode: it wasn’t possible to press WRITE/NEXT while in the pitch-shift or BAR menus. Now fixed.

    • New: Track-Write mode: Now it’s possible to press NEXT while stopped, which only advances the bar position and discards any unsaved changes/markers.

  • Pattern-Write mode:

    • New: this mode didn’t have Delayed-Start/Restart available, now it has, as long as while holding FUNCITON - the pattern length / step-mode haven’t been changed.

    • Pitch-Mode, Time-Mode, the pattern length / step-mode menus now keep track if the pattern needs to be saved to memory or not.

    • New: Time-Mode: Added a function to display the time information (relative to the pattern) using the bank LEDs.

    • New: Pattern Length can now be adjusted also by turning the TEMPO encoder.

  • New: added a 4th "Bank LED display" mode, it combines Step position and Master Bar position.

  • bugfix: The indication of whether the pattern has been modified or not (in Manipulate, and B mode) is now more consistent. It is now also aware of changes made via MSG_PATBUF.

  • changed: MIDI_CONTINUE is handled now. It’s treated as MIDI_START.

  • Computer Control mode:

    • New: Added a function to dump most settings in a readible way using MSG_TEXTOUT to the App (c0nb0x).

    • New: Added a function to display if there were missed clock ticks during the conversion from MIDISync to DinSync, using MSG_TEXTOUT.

    • New: The "half-lit" LED brightness can be adjusted from here.

    • New: Added a fancy LED animation ;]

  • New: Added indication of whether the x0xb0x is master or slave. If it’s master, the TEMPO LED alternates between ON/OFF, otherwise ON/half-lit.

  • A (MIDI-Trigger) mode:

    • New: This mode can now be used also via the x0x buttons. And it also works in master-sync mode (RUN/STOP is available with the Hold function).

    • New: MIDI-Note output added.

    • New: Delayed-Start/Restart available now.

    • changed: The buttons for setting the MIDI-Note offsets for selecting patterns and pitch-shift (which were Slot1 and Slot2) are now moved to FUNCTION+DEL and FUNCTION+INS.

    • bugfix: Switching between this mode and the other modes in some conditions didn’t select/load the right pattern. Fixed.

    • changed: There was a restriction of not being able to switch between patterns of different step-mode. That restriction is gone now.

  • New: In B mode, the pattern index (from the chain) is also shown on the bank LEDs.

  • bugfix: Keyboard mode was sending out MIDI Notes with wrong pitches, now fixed.

  • changed: Keyboard mode: The Down / Up behaviour was changed, now Down+Up is "double-up".

  • bugfix: MSG_TEMPO is no longer sent directly from the interrupt, but later from the main thread.

  • changed: Changes to the tempo and sync code.

What’s new in v2.08
  • New: added optional fixed-width midi2dinsync conversion, for when the prediction method causes problems. It can be set from Settings mode.

  • bugfix: animation bug in the "authentic" numeric LED-display. Fixed.

  • New: added "authentic" numeric entry to Track mode (this involves the "100" and "200" selector buttons).

  • bugfix: Test-tone - since it was made to be sustained forever - playing a pattern made the first note from the pattern not retrigger the gate properly. Fixed.

  • New: Track-Write mode - now it’s possible to press WRITE/NEXT (to save the current bar and advance to the next) while in the pitch-shift submenu.

  • New: added Pitch-Shift (view only) to Track-Play mode.

  • New: added Pitch-Shift to MANIPULATE mode.

  • changed: a bunch of cosmetic changes: MANIPULATE mode - while stopped, displays the selected pattern/chain; B mode - added pitch-shift (while stopped) and discard changes (when stopped); Tap-Write mode - shows "Bank LED" display during the cycle.

  • bugfix: the pitch-shift from the Track BAR data was loaded from EEPROM without checking for invalid values which made it behave incorrect (pitch-shift over 12 semitones) when the EEPROM hasn’t been used yet by the FW. Fixed.

  • bugfix: since "D+U" was changed to result in "D only", it caused a side effect in c0nb0x 1.01’s pattern editor. Now specifically for MSG_PATBUF, the FW checks for notes with "D+U" and changes them to "D only".

What’s new in v2.07
  • New: added the "authentic" numeric LED-display for all TRACK modes. It can display numbers from 0 to 299.

  • bugfix: the note length on triplet patterns is now 5/8.

  • bugfix: Down+Up attributes on a note gave zero transpose, while it should have been Down. Now fixed.

  • bugfix: the Test-Tone (in PATTERN-PLAY mode) was play a low C note, should have been high-C. Now fixed.

  • bugfix: MIDI-Trigger mode was playing patterns twice slower, this has probably happened after the big sync-related changes in v2.05. Now fixed.

  • bugfix: it was not possible to stop the sequencer while Tap-Write mode hadn’t finished a cycle. This is now fixed - stopping the sequencer discards the changes (if any).

  • bugfix: the "BAR" menu was missing in some situations in the different TRACK modes. Now fixed.

  • changed: small adjustment made to the XSync code.

What’s new in v2.06
  • New: Added two "Low-Density" analog clock outputs, one outputs impulses, while the other outputs gate-like signal (suitable for driving modular sequencer stuff). These will be called XSync (eXtra-sync) and the density or speed can be configured from the settings mode. Note: additional circuitry might be required before connecting things to the pins!

  • bugfix: since v2.05, a small side effect made the patterns glitch when writing to eeprom while the sequencer plays, now fixed.

  • bugfix: small LED glitch in PitchMode related to the DUAS…​

  • a few small things tweaked - test tone in pattern-play mode is now held forever

  • the "Reverse" manipulator (part of REORDER) now properly reverses the patterns (which requires an additional shift of all slide attributes).

What’s new in v2.05
  • Big changes were made to the synchronization and internal clock generation mechanisms.

  • The internal clock is now generated as a digital oscillator with 32bit-integer phase accumulator running at 1kHz. This makes it possible to change the tempo instantly 1000 times per second.

  • The whole note processing runs on the main thread now.

  • New: The minimum tempo (internal) is 20BPM now.

  • New: the current tempo (internal) can be displayed/set from the SETTINGS mode.

  • New: change tempo with one twist! Hold down the tempo encoder and rotate - the tempo is changed with +/- 7 BPM at a time!

  • New: Internal tempo clock correction adjustment: the actual digital oscillator can be tweaked from 90% to 110% (-100 to + 100)

What’s new in v2.04
  • Bugfix: DINSYNC randomly starting late (missing clock tick)

  • Bugfix: DINSYNC - "skipping" steps in some patterns but not on others

  • Bugfix: DINSYNC - changing tempo while slaved causing chaos

  • New: added MIDI-Note-output as the patterns play. The algorithm is not the same as in the stock firmware - notes end with the same velocity they started with.

What’s new in v2.03
  • Bugfix: in Master sync mode, saving the tempo to internal eeprom at extremely fast tempos caused glitches. Now that’s done only while the sequencer is stopped.

  • Bugfix: on sequencer Stop - "Hanging" chains were only visually shifted, but not actually loaded into the buffer.

  • Improved the conditions for chain selection and pitch-shift, in order to tolerate changing a pattern and transposing it extremely quickly.

  • Bugfix: in Keyboard mode, the accent button did not reflect the actual new position of the accent button as per the new front panel layout.

What’s new in v2.02
  • MIDI-Trigger mode added (on A mode) .. needs to be tested

What’s new in v2.01
  • small changes to the existing manipulators

  • new manipulators added (mutate and reorder)

  • some small cosmetic improvements (lighting up the LED above the button when it’s pressed)

  • MSG_PATBUF now reports 4 pattern slots, thus the whole chain can be manipulated via c0nb0x

  • added a configurable "Bank LED display" thingie..

  • Track-Record mode: changed the behaviour of placing the Sign marker to the beginning of the chain, to be consistent with Track-Write mode

  • Optimized the button debouncing code - buttons are now sampled twice more often, and the Press state has priority (no additional delay)

  • Added a small timeout delay to the MODE selector, to make it possible to switch from one mode to another quickly without this "catching" thru each mode inbetween

v2.10: n0nx0x_v2.10.zip (111 KB) (81120 bytes)
v2.09: n0nx0x2.09.hex (193 KB) ::: n0nx0x2.09.hex.syx (140 KB) (70336 bytes)
v2.08: n0nx0x2.08.hex (110 KB) ::: n0nx0x2.08.hex.syx (80 KB) (40138 bytes)
v2.07: n0nx0x2.07.hex (106 KB) ::: n0nx0x2.07.hex.syx (77 KB) (38686 bytes)
v2.06: n0nx0x2.06.hex (105 KB) ::: n0nx0x2.06.hex.syx (76 KB) (38396 bytes)
v2.05: n0nx0x2.05.hex (104 KB) ::: n0nx0x2.05.hex.syx (75 KB) (37718 bytes)
v2.04: n0nx0x2.04.hex (100 KB) (36490 bytes)
v2.03: n0nx0x2.03.hex (100 KB) (36382 bytes)
v2.02: n0nx0x2.02.hex (100 KB) (36316 bytes)
v2.01: n0nx0x2.01.hex (94 KB) (34196 bytes)

Last updated: 2014-11-04