XOR Electronics · Eurorack tracker

Mappings

Field Guide

Every other screen of the NerdSEQ plays the music you arranged. The Mapping screen reacts, decides and remembers on its own: a CV input can steer an LFO, a MIDI CC can rewrite a track’s probability, a counter can drive itself. You don’t need to program to use it — each row is one plain rule, and this guide builds them up one at a time, with examples that were run on the firmware.

Firmware V3.03 · Manual V3.03

↓ PDF dark, for reading on screen · 31 pages · 1.0 MB↓ PDF for printing light, A4 · 31 pages · 1.0 MB

  • 70 rows, each one self-contained rule
  • 1000 times a second, every row is checked
  • 15 → 19 source bases watched, destination bases controlled
  • 72 calculator operations between them

01 The big picture

What a mapping is, before any hex — read this page and the rest is detail.

Open the Nerd Menu with SHIFT + AUTOMATE (NERD), then press SHIFT + AUTOMATE again: you are on the Mapping screen. 70 numbered rows, six small fields each. It looks dense, but every row says one thing, always in the same way:

  1. Watch this a source — a CV input, a MIDI note, a track’s state, a variable
  2. Calculate optional — compare, count, scale, quantise
  3. Do that a destination — a CV output, a track parameter, a MIDI message

A row is a small rule: whatever this does, make that follow it — or follow something calculated from it. You write up to 70 of these rules and the NerdSEQ keeps all of them running in the background while you play, on top of whatever your patterns already do. Clock dividers, quantisers, step sequencers, random melodies in a scale, probability gates and self-refilling patterns are all built from these rules, without anything you would call code.

It never stops checking

Every row is checked 1000 times a second, always in the same order, from row 00 to the last used row, then from the top again. It runs whether the Mapping screen is open or not, and whether the sequencer plays or not.

Because the order is fixed, a row that reads the result of a row above it sees this pass’s value. A row that reads a row below it sees the value from the pass before — at most 1 ms old. You won’t hear the difference, but in a chain of rows the rule is simple: put the rows that produce a value above the rows that use it.

“Is it on?” is not “did it just turn on?”

A held key or an open gate reports 1 on every one of those thousand checks, for as long as it is held — not once. When something should happen once, at the moment a signal changes, you use one of the tools made for edges (chapters 07 and 13).

Destinations act on change

So a simple row doesn’t hammer its destination a thousand times a second, a destination normally acts only when the row’s value differs from the value it sent last time. A plain CV-in → CV-out row updates the output when the input moves, and does nothing while it stands still.

A few destinations act on every pass on purpose — a SETV variable write, the song start and jump commands, the TRG* / VAL* triggers. They are named where they appear. Point one of those at MIDI or an expander and it sends a thousand messages a second, so they need a gate in front of them.

Starting and stopping the mapping

ActionWhat happens
STOP on the Mapping screenStops the mapping. The ▶ at the top right disappears. Press it again and it stops the sequencer, as usual.
START on the Mapping screenStarts a stopped mapping. When the mapping already runs, START starts the sequencer, as usual.
SHIFT + OKRuns only the row under the cursor, once, whether the mapping runs or not. The way to test a row you just wrote.
Stop On Edit (Nerd Menu)When set to YES, editing a destination field stops the mapping, so a half-written row can’t fire.
Leaving the screenA stopped mapping starts again when you go to any screen other than Mapping, Variable or the Nerd Menu.

Editing a GLOB button, screen or mode destination also stops the mapping, whatever Stop On Edit says — those rows could otherwise press buttons or change screens while you type. SHIFT + START and SHIFT + STOP keep their sequencer meaning on this screen.

↑ Contents

02 How values work

One number range for everything — and the three places a number can be kept.

Every source hands its row one number, 0–FFF (0–4095). A CV input already lives in that range; a MIDI CC (0–127) or an I2C value (0–16383) is rescaled into it before the row sees it. Every destination takes the same range and scales it to what it needs. That shared range is why almost anything can drive almost anything.

One number, several meanings

KindRangeUsed by
Full range0–FFFThe default: a CV level, a cutoff, an LFO speed.
Boolean0 / not 0Gates, run states, comparison results. Any non-zero value counts as true.
Note number0–119CV NOTE, MIDI note destinations, Dualchord notes.
Song row0–FDThe start and jump family: STRT, STRW, JMPT, JMPR.
Bipolar0–FFF, centre 800Transpose, detune, pitchbend, swing.

A gate cable is not a boolean

A gate patched into a CV input still arrives as a full-range reading with a little noise on it — never exactly 0. Used as a condition, that noise alone fires at 1000 passes a second. The CV source has the fix built in: its extra offers TH and !TH next to VAL. With TH the row compares the input with the global Threshold (Nerd Menu) and delivers a clean 1 / 0.

MAPPING Hex:001 Dec:0001 Bool:1 ▶
00 CV   IN 1 TH    > TRIG TRIG TR 1  · a clean trigger from a noisy gate
CV input 1 above the threshold → 1, below → 0. Trigger 1 fires on each rise.

An envelope’s GATE and STAT extras are already clean. For any other analog source — an automator, an envelope’s VAL — build the same comparison with a CALC IF> row against TH or a constant, and use that row’s result as the gate.

Centred at 800

A bipolar destination puts its neutral point at 800 (2048): below means negative, above means positive. Track transpose, for example, is 120 × v / 4095 − 60: 0 is −60 semitones, 800 is 0, FFF is +60. An unpatched CV input reads 0 V, so a raw CV IN 1 VAL → TRCK TPS row would drop the track five octaves. Add an offset instead:

MAPPING Hex:99A Dec:2458 Bool:1 ▶
00 CV   IN 1 VAL   > ---- ---- ----  · the CV, unchanged
01 CALC ADD  00|VA > TRCK TRK3 TPS   · VA holds 811h
Variable A = 811. 0 V plays the track as written, 1 V transposes it +12, 2 V +24.

Why 811 and not 800: 1 V reads about 409 counts, and 800 + 409 lands exactly on the boundary of +12. If the input reads a count low, the result drops to +11. The extra 11 keeps every octave safely inside its step and still gives 0 at 0 V.

Where a value lives

StorageRead it asWritten bySaved?
Row result 00–45an operand 00–45, or source VAR RWxx SRCthe row itself, on every run; or SETV RWxxno
Variable VA–VPan operand VA–VP, or source VAR #x SRCSETV V x, or the Variable screen (PATCH)yes, with the project
Threshold THan operand TH, or a CV source’s TH / !THNerd Menu → Thresholdyes

↑ Contents

03 Reading and editing a row

Six fields, a marker, a status line — and a selector that explains every value.

MAPPING Hex:027 Dec:0039 Bool:1 ▶
08 CV   IN 1 TH    > ---- ---- ----
09 CTRL XSHT 1RW   > ---- ---- ----
0A CALC INCW =0|=7 X ---- ---- ----  · X: not in the regular pass
0B CALC LDI  0A|=0 > CV   NOTE CV 1
0C GLOB RAND ----  > CV   PTCH CV 2
0D CALC SCAL 3D|=0 > CV   NOTE CV 3  · 3D shown inverted: constant 61
0E SKIP 02 = 0A|=0 > ---- ---- ----
Pass Variable B to Dest.
The top line shows the cursor row’s live result in hex, decimal and as a boolean; ▶ means the mapping runs. The bottom line explains the field under the cursor.

The six fields

Fields 1–3 pick the source: the base (the family — CV, MIDI, TRCK…), the function (which input, which track, which operation) and, where needed, the extra (which reading, which parameter). Fields 4–6 do the same for the destination. A source or destination with an empty field it needs does nothing.

Between the halves sits a marker: > means the row runs in the regular pass, a red X means it doesn’t — it sits in a block that its CTRL row runs, or a SKIP just skipped it (chapter 13).

Keys on the grid

KeysWhat they do
▲ ▼ ◀ ▶Move between rows and fields.
SHIFT + ◀ / ▶Step the field’s value down / up by one entry.
SHIFT + ▲ / ▼Step it by a larger jump, where the field has one.
OKOpens the Mapping Selector for the field (Edit Mode on). With Edit Mode off it shows Edit mode is off.
SHIFT + OKRun the cursor row once, forced.
START / STOPStart / stop the mapping (chapter 01).
SHIFT + PATCH (DELETE)Clear the field. Clearing a base clears its function and extra too.
SHIFT + UP + PATCHDelete the row; the rows below move up.
SHIFT + DOWN + PATCHInsert an empty row; the rows below move down.
SHIFT + SEQUENCER (MARK)Start a block; the cursor keys grow it; MARK again copies it.
SHIFT + PATTERN (COPY)Paste the block at the cursor. Source fields land in source fields, destination in destination.
PATCHSwitch to the Variable screen and back.

The Mapping Selector

Mapping selector       11/15
Select source base
CV    CV/MOD in- and outputs
TRIG  Trigger and gate outputs
TRCK  A track's playback state
…
VAR   A variable or a row value
CALC  Calculate from two operands
SKIP  Skip rows on a condition
GLOB  Clock, run and reset
EXT   Keyboard, gamepad, buttons
CTRL  Enable/disable other rows
OK->Set SHIFT+OK->Abort
▲ ▼
move through the list; ▶ pages forward
OK
takes the entry and walks on: base → function → extra
◀
steps back to the previous field
SHIFT + OK
closes it without changing anything

Every entry shows the four-letter name it will have in the row and a short description, so you don’t need to learn the abbreviations. A whole source or destination takes three presses of OK. A function without an extra ends there and says so. Picking a learn function (LRN) closes the selector and leaves the row listening.

Mapping selector
Select CALC->SCAL ->
  Operand Y          Operand Z
  Constant   61      Constant   0
  Scale RW0C to 61 key 0
OK->Set SHIFT+OK->Abort
For CALC and SKIP the selector edits the two operands — kind, then value, for each — and writes the finished sentence underneath as you change them.

↑ Contents

04 Sources I — the direct signals

What the NerdSEQ is already doing: jacks, tracks, automators and envelopes.

CV and TRIG — the jacks

BaseFunctionExtra
CVCV inputs 1–4, CV outputs 1–6, MOD outputs 1–6 — an output can be read back as a sourceVAL, !VAL (inverted), TH, !TH
TRIGTrigger outputs 1–6; the 16 outputs of each of four Trigger16s; the two trigger outputs of a Dualchord on each slot; AUD1–AUD4, the gates of the four sample voices— (already 0 / 1)

Reading an output back lets a row react to what another row, or the sequencer, just wrote there — no patch cable needed.

Trigger16 and Dualchord can’t report their outputs over NSA, so the NerdSEQ answers from a mirror of what it last sent. A gate on, off or toggle (including a binary or all-off command) holds until the next command. Any shorter trigger reads 1 exactly once, and the read clears it — if two rows watch the same output, only the first sees the pulse. What a Trigger16 generates by itself (Triggers Galore, Triggers Square 8) is not mirrored.

TRCK — a track’s own state

ExtraMeaning
PRB0–PRB7, PRB8The track’s probabilities 1–8 and the row probability; their meaning depends on the track type.
PTRWWhere the pattern is: a ramp from 0 at its first row to FFF at its last.
PRUN1 while the track runs.
NOT1–NOT8The note playing in note column 1–8.
SROWThe track’s current song row.

AUTM and ENV — the modulators

AUTM gives the output of one of the 8 automator slots, 0–FFF; it has no extra. ENV gives one of the 8 envelopes, and its extra chooses what you read:

ExtraMeaning
VALThe envelope’s output, 0–FFF.
GATE1 while its gate is on.
STATThe stage: 0 idle, 1 attack, 2 decay, 3 sustain, 4 release.
ATK ATKP DECY SUST RELS OFFSThe envelope’s settings (0–254 on the Envelope screen), scaled to 0–FFF.
00 ENV  #  3 VAL   > CV   PTCH MOD6  · envelope 3 out of MOD 6
01 ENV  #  3 GATE  > TRIG GATE TR 6  · and its gate out of trigger 6
Two rows turn an internal envelope into a function generator on the panel: its shape on MOD 6, its gate on trigger 6.

↑ Contents

05 Sources II — the outside world

MIDI notes, CCs, NRPNs and I2C — each with a learn function, so you rarely need to know a channel.

The function of MIDI, MCC and NRPN picks the port and channel: TC 1–16 for TRS, HC for USB host, DC for USB device. The last entry, LRN, waits for the next matching message on any channel and fills in the real channel for you.

MIDI — notes and more

ExtraGives you
NOTE / GATEThe last note number played, or 1 while any note is held.
VELO PRSR BEND PGMCVelocity, channel pressure, pitchbend (centre 800), program change.
one note, C-0N…B-9NFurther up the list: one specific note’s on/off state, or its velocity (…V) or aftertouch (…A). One key becomes a dedicated switch.

MCC — a CC as a level or as an event

ModeBehaviour
LevelThe row holds the last value of that controller, 0–127 scaled to 0–FFF, like a fader. Shown as # 74.
EventThe row pulses once — and forces its destination — for every message with exactly that controller and that value. Another value on the same controller does nothing. Shown as controller and value in hex, 2001 = CC 32, value 1.

On the grid, SHIFT + ◀ / ▶ steps a level row through the controllers; SHIFT + ▲ / ▼ switches it to event mode. In event mode the large step walks the controller and the small step the value; stepping the value below its first position goes back to level mode. LRN learns in the mode the extra is already in: a level extra learns channel and controller, an event extra learns controller and value — the quickest way to capture one encoder click or one button.

00 MCC  TC 1 2001  > SETV V  A INC^  · CC 32 = 1: one step up
01 MCC  TC 1 207F  > SETV V  A DEC^  · CC 32 = 127: one step down
02 VAR  #  A SRC   > CV   PTCH CV 2
A relative (endless) encoder sends CC 32 = 1 per click clockwise and 127 per click anticlockwise. Variable A counts the clicks and stops at 0 and FFF.

NRPN — 14-bit control

The same channel layout; the extra is an NRPN number 0–9999. 7-bit and 14-bit values are told apart by what arrives. Use it when 128 steps of a CC are too coarse — a long filter sweep, a delay time.

I2C — from an expander bus

Two functions: SC.CV (a value arriving over SET.CV from another I2C module, a fader bank for example) and LRN. The extra is the port, 0–127. Values arrive with 14 bits and are scaled to 0–FFF.

↑ Contents

06 Sources III — memory, machine, buttons

The mapping’s own memory, the sequencer’s state, and every button you can press.

VAR — read memory

VAR reads one of the 16 variables (# A–# P) or one of the 70 row results (RW00–RW45). With the extra on SRC it passes the value on. Any other extra is a value: the row writes it into the variable or row and passes it on in the same step. The row shows that value in hex, #800. That is how a load-time block seeds its starting values (chapter 12).

GLOB — the machine watching itself

FunctionGives you
SQRWWhere the main clock is in its cycle: a ramp from 0 to FFF.
TICKThe main clock’s tick count in its cycle, 6 ticks per row, from 0 upwards. Exact, so use it for “every N rows”.
SRUN1 while the sequencer runs.
CLKI CLKO RSTI RSTOClock and reset, in and out.
RANDA new random value on every pass.
BPMThe current tempo.
SEQVThe row becomes a sequencer target: an I2C or Multi track column set to Mapping writes its values into this row.
PLSE1 for exactly one run. It fires when a called block runs this row, or when another row writes a non-zero value into it with SETV RWxx.
RECM1 while record mode is armed. Pairs with the GLOB MREC destination.

EXT — keyboards, gamepads, buttons, encoders

The function picks the device — a USB or PS/2 keyboard’s numpad (KEYB), a Sega gamepad (SEGA), the NerdSEQ’s own buttons plus the Multi-IO’s MIOX / MIOY / MIOZ (BUTN), or an encoder. The extra picks the key; a button reads 1 while held.

The two encoders work differently. MENC (Multi-IO encoder) and PENC (PC keyboard encoder) hold a value the knob walks up and down between 0 and FFF, without wrapping. Their extra names the variable or row the step size comes from: 1 walks by ones, 10 by tens, 0 counts as 1.

Each button and encoder can have its built-in job switched off in Setup → ENCODER & MIO BUTTONS, which leaves it free for mappings only.

00 EXT  SEGA STRT  > GLOB BUTN STRT  · gamepad Start presses START
GLOB BUTN holds the NerdSEQ’s button for as long as the source is non-zero, and lets go at 0. A second, remote transport in one row.

↑ Contents

07 The built-in calculator

CALC turns a patch bay into something that can count, compare, remember and decide.

CALC is a source that needs no outside input: it computes a value from two operands, and that value becomes the row’s result — readable by other rows, routable to any destination.

The two operands, Y and Z

OperandShown as
A constant 0–8=0…=8
A constant 9–167its hex value, drawn inverted so it can’t be read as a row: 3D = 61
The thresholdTH
A variableVA…VP
The result of row 0–6900…45

Pointing an operand at a row is how rows talk to each other. A larger number than 167 goes into a variable.

The operations, by family

FamilyOperations
ArithmeticADD SUB MUL DIV MOD MIN MAX AVRG DIFF INC DEC — clamped at 0 / FFF; the ! versions wrap instead. MUL. DIV. and their wrapping : versions work in tenths.
Bits & logicBAND BOR BXOR INV LSFT RSFT SHTR SHTL BIT work on bits. LAND LOR LXOR DINV treat non-zero as true and answer 0 / 1.
ComparisonsIF< IF<= IF> IF>= IF= IF<> — 1 when true, else 0. The way to turn any value into a clean gate.
Edges & memoryCNT counts rising edges, S&H takes a value on a rising edge, T&H follows while open and holds when closed, LFLP / FLG^ / FLGv flip on edges, PULS gives one run on a rising edge, SCHM is a Schmitt trigger, MONO a monoflop in ms, EVRY is true once every Z runs.
UtilityP2NT / NT2P pitch ↔ note, RNDM a random value between Y and Z (inclusive), SLEW, LDI reads the row a value points at, INCW counts up and wraps, FORC passes and forces the destination, PASS, MODS.
ChainedRNGE SCAL MUX CLMP XFAD XFDS CURV WIN FOLD SLRF ACCU CDIV LUT SHFT NORM PROB — these take a third input from the row they are chained to (below).

You don’t need to memorise them. Pick CALC in the selector, and the operand editor writes out what the row will do: Divide 4 by VarC, Scale RW0C to 61 key 0.

Chained operations — a third input

A chained operation reads a third value: on the source side, the result of the row directly above; on the destination side (below), the row’s own source value. Y and Z are the settings. Each one replaces two to four rows of hand-built arithmetic:

  • SCAL

    Quantise a note into a scale. Y = scale number, Z = key (0 = C). 61 is minor pentatonic, 47 major, 57 minor, 12 dorian.

  • CDIV

    One pulse every Y rising edges; a rise on Z resets the count. A clock divider in one row.

  • PROB

    On each rise, roll once: with chance Y (800 = 50 %) pass Z for the whole gate. No chattering.

  • CLMP · WIN · FOLD

    Hold, test or fold a value into the range Y..Z.

  • XFAD · XFDS · MUX

    Crossfade from Y to Z (linear or S-curve), or select Y or Z.

  • CURV

    Bend a value: logarithmic below 800, exponential above, an S when Z is set.

Two small examples

00 CV   IN 2 VAL   > ---- ---- ----  · raw pitch, no destination
01 CALC P2NT 00|=0 > CV   NOTE CV 2  · snapped to the nearest note
A wandering voltage at CV input 2 comes out of CV 2 in tune.
00 CV   IN 1 TH    > ---- ---- ----  · clock in, made clean
01 CALC CDIV =4|=0 > TRIG TRIG TR 1  · every 4th clock
CDIV reads row 00 as its chained input. Tested: it fires on clocks 4, 8 and 12, and not when the mapping loads.

CALC as a destination — two calculations in one row

A row’s destination can be CALC again: the same 72 operations, run a second time on the same row. It is not an output. The result becomes the row’s own result, which the next rows read. You still need a following row to reach a real output; what you save is the row that would have sat between the two calculations.

00 CV   IN 1 VAL   > CALC P2NT 00|=0 · pitch → note, in one row
01 CALC ADD  00|=7 > CV   NOTE CV 1  · a fifth up
A quantiser with a transpose, in two rows instead of three. On the destination side, an operand that points at its own row reads that row’s source value from the same run.

↑ Contents

08 Destinations I — the workhorses

CV, triggers and tracks — the destinations you will use in most mappings.

Every destination scales the incoming 0–FFF to what it needs. The exact formulas are in the manual and in nerdseq_mapping_coding.md; here is what to expect.

CV — pitch or note

The function is PTCH (the value as-is) or NOTE (the value modulo 120, as a note). The extra picks the output: the 6 CV jacks, the 6 MOD jacks, or the 16 channels of up to four CV16 expanders.

TRIG — five ways to fire

FunctionFires…
GATEHigh while the value is non-zero.
TRIGThe default trigger type (Setup), when the value rises from 0.
TVALThe trigger type given by the value itself, on change.
TRG* / VAL*As TRIG / TVAL, but on every run, changed or not.

The extra reaches the 6 local triggers and up to four Trigger16s, and continues into M1-1–M8-16: every drum-matrix cell of every track. A cell fires whatever that track’s matrix has it set to — a Trigger16 output on a Trigger16 track, an I2C command or MIDI note on an I2C track. Other track types ignore it.

TRCK — every parameter a track has

The function picks the track: TRK1–TRK8, SLCT (the track under the cursor), a track chosen by a variable (V A…) or by a row’s result (RW00…). The last one lets one row re-target a different track whenever that row’s value changes.

The extra is the parameter — over fifty of them: mute, solo, pattern order, transpose, trigger delay, the nine probabilities, glide, track clock, fire a patch, pattern length, jump to a pattern row, shift the pattern, sync, reset, the four FX overrules, the song start / jump / stop family, the euclidean controls, and direct writes into the notes of any of the 64 steps.

PNC1–PNC8 write a note into the row the track is playing now, note column 1–8. The row above supplies the note (0 removes it); this row’s source rising from 0 is the moment it is written. The note sounds the next time the playhead reaches that row — a way to build up a pattern while it loops. They do nothing on row 00 or while the track is stopped.

↑ Contents

09 Destinations II — modulation & audio

Turn the knobs of the automators, envelopes, audio tracks and CV16 modulators from a row.

AUTM and ENV

Both pick their slot like TRCK picks a track: directly, by variable or by a row’s result. The automator’s LFO exposes start and reset, speed, offset, invert, clock source, amplitude, waveform, bit depth and phase. An envelope exposes attack, attack peak, decay, sustain, release, offset, and its gate, fire and toggle. Every knob on those screens, a row can turn.

00 CV   IN 2 VAL   > ENV  #  3 ATK   · CV in 2 sets envelope 3's attack

AUDI — the audio tracks

The function picks one of 4 audio channels, or one of 12 sample slots (loop start, end and position, for live scrubbing). A channel’s extra reaches pitch (exponential), note, gate and stop, waveform or sample, offset, backwards, the delay (type, time, send, feedback), FM boost, volume, glide, mute, note cloning with coarse and fine detune (centre 800), modulation source, PWM, wavefolder, bitcrush and distortion.

CV16 — the expander’s own modulators

Each of a CV16’s 16 channels can run its own envelope and LFO on the expander. This destination reaches glide speed and resolution, the envelope’s attack, sustain, release and fire, and the LFO’s type, speed, amplitude, start and reset.

↑ Contents

10 Destinations III — out into the world

MIDI out, I2C, Dualchord and the video expander — where flooding matters.

MCON — MIDI CC and NRPN out

The function picks port and channel (TRS, USB host, USB device). The extra is a CC 0–127 (value scaled to 0–127) or, further up, an NRPN 0–9999 (scaled to 14 bits).

MIDI — notes, bend, program change

ExtraBehaviour
NTON NTOF NOTENote on, note off, or both; the note number is the value.
PBND PGMCPitchbend (centre 800), program change.
NTGT NTTRA gate- or trigger-style note: the row above gives the note number, this row’s source the gate. Does nothing on row 00.
00 VAR  #  A SRC   > ---- ---- ----  · the note number
01 CV   IN 3 TH    > MIDI TC 1 NTGT  · note on/off from the gate
Row 01 sends a note-on when CV input 3 rises and a note-off when it falls, with the note taken from row 00. Change variable A and the next gate plays the new note.

I2C — drive an expander bus

Ten functions: bus A or B, each as CV with slew, CV without slew (scaled or raw), trigger, or AESC / BESC — the ES.CO command for a disting EX/NT controller. The extra packs address and port into one 4-digit hex value; the default address is 31 (41 for the ES.CO variants).

DUAL — the Dualchord

The function picks one of four units. The extra reaches notes, pitches and per-wave on/off, then nearly every knob: both LFOs, stereo spread, each wave’s pulse width, detune, level and morph, glide, velocity, the voice envelope, the filter, noise, filter mode and the wavefolder. Knob values are scaled to 0–255, the resolution of the hardware knobs; filter mode (19 modes) and preset select (0–3) are the exceptions.

VISU — the video expander

With a video expander connected, VISU selects and cues shaders and drives their position, amplitude and alpha, 16 modulator inputs, and per-shader envelopes and LFOs. SENV with E?GT gates a shader envelope and E?FI fires one — use them when the envelope should follow something that isn’t a trigger output.

↑ Contents

11 Destinations IV — random, tables, Fill

The NerdSEQ’s generative tools — and the whole Fill Pattern screen — driven by rows.

RNDM — random ranges

Sixteen ranges, each with a LOW and a HIGH bound, 0–99. The firmware keeps them from crossing. Patterns and tables draw their random values from these ranges.

00 CV   IN 2 VAL   > RNDM RG 3 HIGH  · a knob widens range 3

TABL — tables

The function picks a table (TB00–TB1F), a track’s running table, or the running table at the cursor’s column. The extra reaches speed, type, quantise, chord, range, preset, add tick, and start / stop. Nothing happens to a table without a track type.

GLOB — the whole machine

FunctionDoes
TPS SWNGGlobal transpose, −128…+127 (v / 16 − 128); swing −63…+63, centre 800.
TMPOTempo 1–500 BPM, internal clock only.
MCLK SCAL SLKNMain clock steps 1–64, the scale, the scale’s key.
SYNC RSETResync all tracks, reset the player — when the value is non-zero.
MRECFeed the row into the MIDI record path.
BUTNHold one of the 16 buttons while the value is non-zero.
SCRNSwitch screens, on a rising value.
MODEEdit, record, live and scroll mode, the edit step, and the Multi-IO panel’s mode.
SROW SDIRThe sequencer cursor row (Sequencer screen only), the scale direction.
SCP1–SCP4 SCTVThe four scope inputs and the scope trigger.
FILLThe Fill Pattern screen — below.

FILL — a track that refills itself

FILL puts the Fill Pattern screen behind mapping rows. Its extra has two halves:

  • Actions

    FI 1–FI 8 fill one track, FI * all playing patterns; FIM… do the same with the Magic settings. They fire on a rising value, only while the sequencer plays.

  • Settings

    Every field of the Fill Pattern screen — note range, density, trigger types, drum mask, sample range, volume, scale, interval mode, offset, columns, remove %, new length — set continuously from the value.

00 GLOB TICK ----  > ---- ---- ----  · main-clock ticks, 6 per row
01 CALC MOD  00|30 > ---- ---- ----  · modulo 48 = every 8 rows
02 CALC IF=  01|=0 > GLOB FILL FI 1  · fill track 1
Every 8 main-clock rows, track 1 is filled with whatever the Fill Pattern screen is set to. Use {60} (96) for every 16 rows.

↑ Contents

12 Variables & state

Write, step and reset values on purpose — and seed them when a project loads.

SETV — the write destination

ExtraBehaviour
SRCStore the value. Runs on every pass, changed or not.
RSTSet the target to 0 while the value is non-zero.
INC^ / INCvAdd 1 on a rising / falling value; stops at FFF.
DEC^ / DECvSubtract 1 on a rising / falling value; stops at 0.

The function is the target: V A–V P, or a row, RW00–RW45. The step functions turn “something happened” into “count one up or down” — the encoder in chapter 05 works this way.

Seeding values when a project loads

A CTRL XLOD row marks the rows below it as a block that runs once, right after the project loads, and never in the regular pass. Inside it, VAR rows write their values.

MAPPING Hex:000 Dec:0000 Bool:0 ▶
00 CTRL XLOD 2RW   > ---- ---- ----  · next 2 rows: once, after load
01 VAR  #  A #800  X ---- ---- ----  · variable A = 800
02 VAR  #  B #000  X TRCK TRK1 STRW  · start the song at row 00
Exec.Rows 01->02 after load
Tested: after load, variable A is 800 and the sequencer runs from song row 00.

Rate-limiting through a variable

00 CALC EVRY =0|64 > ---- ---- ----  · true once per 100 runs
01 SKIP 01 = 00|=0 > ---- ---- ----  · skip the send otherwise
02 VAR  #  A SRC   > MCON TC 1 # 74  · CC 74, 10 times a second
Whatever drives variable A may change a thousand times a second; CC 74 goes out at most ten times a second.

↑ Contents

13 Control flow, without the jargon

Skip rows on a condition, and keep blocks of rows that run only when something calls them.

SKIP — leave out the next rows

When its comparison is true, SKIP leaves out the next 1–16 rows for this pass only; next pass they run again unless skipped again. The row shows the count and the comparison: SKIP 02 = 0A|=0 skips two rows while row 0A is 0. It exists as a source and as a destination; the destination version runs on every pass. To switch more than 16 rows with one condition, put them in a plain XMAP block and the SKIP in front of the XMAP row (below).

CTRL — blocks that run when called

A CTRL row’s extra is a row count (2RW); its function says when the block below runs. Rows run by a block are forced: their destinations fire even without a change. A SKIP inside a block has no effect — put the condition in front of the CTRL row, or use IF / PASS inside.

FunctionThe block below runs…
XXMPOnly when an XMAP command calls it — a pattern FX, a table, a patch, the I2C/Multi drum matrix. The usual choice for a subroutine.
XLODWhen called, and once right after the project loads.
XSHTWhen called, and once on every rising edge of the row directly above. The “once per clock” building block; it can’t sit on row 00.
XMAPOnce on every pass, run by the XMAP row — so a SKIP in front of that row switches the whole block, however long it is. Also when called. Its rows are forced on every pass: a trigger in it stays high while its source is true, and a MIDI or expander row sends on every pass.
00 CV   IN 1 TH    > ---- ---- ----  · clean clock
01 CTRL XSHT 2RW   > ---- ---- ----  · next 2 rows: once per clock
02 CALC SHTR 02|=8 X ---- ---- ----  · 8-bit shift register
03 CALC BAND 02|=1 X TRIG TRIG TR 1  · its lowest bit
Rows 02–03 run only on the clock’s rising edge. Seed row 02 from a load block (VAR RW02 #…) and the bit pattern cycles through trigger 1.
00 CV   IN 2 TH    > ---- ---- ----  · the switch
01 SKIP 01 = 00|=0 > ---- ---- ----  · skip row 02 while it is off
02 CTRL XMAP 2RW   > ---- ---- ----  · next 2 rows: every pass
03 CV   IN 1 VAL   X CV   PTCH CV 1  · pitch through
04 CV   IN 1 TH    X TRIG GATE TR 1  · gate through
While CV input 2 is high, pitch and gate pass from input 1 to CV 1 and trigger 1. When it drops, both outputs hold where they were — a gate that was high stays high. One SKIP switches the whole block, however many rows it holds.

CTRL as a destination

XSH^, XSHv and XSH! run the block below once on a rising, falling or any edge of this row’s own source — a MIDI note, a gate, a button — instead of the row above.

Several blocks, one destination

The change filter is kept per row, not per destination. If three SKIP-gated blocks take turns writing the same CV output, a block whose value equals what it sent last time stays silent — even if another block has written something else since. The output shows a stale value. Two fixes:

  • Local outputs

    CV, triggers, track parameters: make each block’s last row CALC FORC. It writes on every run.

  • MIDI, I2C, expanders

    Let every block write a variable with SETV, and add one unconditional row that sends the variable. That row alone owns the destination.

↑ Contents

★ Recipes — eight mappings that work

Each of these was run on the V3.03 mapping engine and does what it says. Build them, then change them.

1 · A random melody in a scale

00 CV   IN 1 TH    > ---- ---- ----  · clock in
01 CTRL XSHT 2RW   > ---- ---- ----  · once per clock
02 CALC RNDM 24|3C X ---- ---- ----  · a random note 36–60
03 CALC SCAL 3D|=0 X CV   NOTE CV 1  · into C minor pentatonic
On every clock a new note, always in the scale (tested: 43, 41, 60, 53, 36 — G, F, C, F, C). Change 3D to 2F for C major; Z is the key.

2 · A clock divider

00 CV   IN 1 TH    > ---- ---- ----
01 CALC CDIV =4|=0 > TRIG TRIG TR 1  · every 4th clock

3 · Transpose a track by CV, 1 V per octave

00 CV   IN 1 VAL   > ---- ---- ----
01 CALC ADD  00|VA > TRCK TRK1 TPS   · VA = 811
0 V: no transpose. 1 V: +12. 2 V: +24. Why 811: chapter 02.

4 · An eight-step sequencer you edit on the Variable screen

00 VAR  #  A SRC   > ---- ---- ----  · step 1 … rows 00–07 read A–H
07 VAR  #  H SRC   > ---- ---- ----  · step 8
08 CV   IN 1 TH    > ---- ---- ----  · clock in
09 CTRL XSHT 1RW   > ---- ---- ----  · once per clock
0A CALC INCW =0|=7 X ---- ---- ----  · step counter 0–7
0B CALC LDI  0A|=0 > CV   NOTE CV 1  · play row 00–07
Set variables A–H to note numbers on the Variable screen (PATCH); they play in turn and wrap. The first clock plays step 2 — the counter moves before it is read.

5 · A gate that passes half the time

00 CV   IN 1 TH    > ---- ---- ----
01 CALC PROB VA|=1 > TRIG GATE TR 1  · VA = 800: 50 %
Each incoming gate is rolled once and then passed whole, or not at all. Drive variable A from an automator with an AUTM SLT0 → SETV V A SRC row and the density breathes.

6 · A pattern that refills every 8 rows

The GLOB TICK → MOD 30 (48) → IF= … FILL FI 1 rows from chapter 11. Remember it only fills while the sequencer plays.

7 · A relative encoder

The two MCC event rows and SETV INC^ / DEC^ from chapter 05. Tested: each CC 32 = 127 message steps the variable once; a value of 5 does nothing.

8 · Start the song when the project loads

The XLOD block from chapter 12. Combine it with a VAR row per variable you want to preset.

↑ Contents

14 Rules & pitfalls

Read this before you call a mapping finished — every “it doesn’t do what I expected” ends up here.

RuleWhy
Producers above consumersA row reading a row above sees this pass’s value; a row below gives last pass’s (chapter 01).
Fill every field a half needsAn empty function or extra switches the source or destination off.
No raw analog value as a gateIt is never exactly 0. Use TH, or a CALC IF row (chapter 02).
Row operands are absoluteOnly row insert and delete renumber them; pasted or imported blocks don’t (chapter 03).
Constants reach 167Above that, use a variable or the threshold.
Non-zero is trueLAND, IF, gates and SKIP treat any non-zero value as true.
Watch the unitsNotes 0–119, pitch 0–FFF, song rows 0–FD, bipolar centre 800.
Levels aren’t events“Once, when it happens” needs PULS, CNT, S&H, CDIV or XSHT — not a level.
Forced rows skip the change filterFORC, TRG*, VAL*, SETV, the song start/jump family, and every row a block or SHIFT + OK runs. Ask how often they can fire before pointing them at MIDI, I2C or an expander.
Counters run out at 16MONO, EVRY and CDIV rows together (chapter 07).
One owner per destinationThe change filter is per row. Several blocks on one destination need FORC or a variable (chapter 13).
A CALC destination always runsGate heavy work behind it (chapter 07).
Test with SHIFT + OKRuns the cursor row once, stopped or running — a single-step debugger.

↑ Contents

15 Saving, sharing & writing mappings with an LLM

A mapping travels with its project — and can also live on its own, as a file you share or have written for you.

Export and import

On the Mapping screen, SHIFT + AUTOMATE (NERD) opens the Nerd Menu:

EntryWhat it does
Export MappingSaves all 70 rows and the 16 variables as projects/NAME.MAP on the SD card. You choose the name. The mapping is stopped afterwards — START runs it again.
Import MappingLoads a .MAP file, replacing the rows, the variables and the mapping’s name.
Export PartShown instead of Export when a block is marked: saves only the marked rows, as NAME_PART.MAP.
ThresholdThe global threshold for TH / !TH and the TH operand.
Note ViewSharp or flat note names on the screen. Display only.
Stop On EditStop the mapping while you edit a destination (chapter 01).

Importing a part file replaces nothing: its rows are inserted at the cursor, and the rest of the mapping, its variables and its name stay. If the rows would overwrite used rows or don’t fit into the 70 rows, a popup asks first.

Let an LLM write the mapping

nerdseq_mapping_coding.md is a complete reference written for people and for AI tools. It describes how the engine runs, every source and destination with the exact numbers stored in a file, the 72 operations, worked examples and common mistakes, the scaling of every destination, the .MAP file format with all lookup tables (the same content as mapping_file_definition.txt), and a reference writer in Python.

  1. Download the mapping programming guide (nerdseq_mapping_coding.md) and give it to an LLM tool — attach it, or paste it into the conversation.
  2. Describe what you want in plain words: what comes in (which CV input, which MIDI channel), what should happen, and where it goes. “Clock on CV input 1; every clock a random note from C minor pentatonic between C2 and C4 on CV 1, and a gate on trigger 1 half the time.”
  3. Ask for the rows as a table first, the way the Mapping screen shows them, with one line per row on what it does. Read them; ask about anything that looks odd.
  4. Type the rows in, or ask for a .MAP file made with the reference writer. Copy it to projects/ on the SD card and use Import Mapping.
  5. Test on the module: STOP the mapping, step with SHIFT + OK, watch Hex:, then START.

↑ Contents

16 Cheat sheet

One page to keep next to the Mapping screen.

The 15 source bases

BaseIn one lineCh.
CV4 inputs, 6 CV and 6 MOD outputs; VAL !VAL TH !TH.04
TRIGTrigger outputs, Trigger16 and Dualchord outputs (mirrored), audio voice gates.04
TRCKProbabilities, pattern position, run state, notes, song row.04
AUTM ENVAn automator’s output; an envelope’s output, gate, stage, settings.04
MIDINote, gate, velocity, pressure, bend, program, or one note.05
MCC NRPNA CC as level or event; a 14-bit NRPN.05
I2CA value from an I2C port.05
VARRead, or write and pass, a variable or row.06
CALC72 operations on two operands (and a chained value).07
SKIPLeave out the next 1–16 rows on a condition.13
GLOBClock position and ticks, run, clock/reset, random, BPM, pulse, record.06
EXTKeyboard, gamepad, buttons, encoders.06
CTRLXMAP XXMP XLOD XSHT — blocks that run when called.13

The 19 destination bases

BaseIn one lineCh.
CVPitch or note to CV, MOD and CV16 outputs.08
TRIGGate, trigger, value trigger, “always” variants; drum-matrix cells.08
TRCK50+ track parameters, notes into steps or the playing row.08
AUTM ENVEvery LFO and envelope setting.09
AUDI CV16Audio channel and sample slot parameters; CV16 modulators.09
MCON MIDICC / NRPN out; notes, bend, program, NTGT / NTTR.10
I2C DUAL VISUI2C CV/trigger/ES.CO; Dualchord; video expander.10
RNDM TABL GLOBRandom ranges; tables; transport, buttons, screens, modes, scope, Fill.11
SETVWrite, reset, step a variable or row.12
SKIP CTRLSkip rows; run a block on an edge of this row’s source.13
CALCA second calculation on the same row.07

Keys

KeysDoes
SHIFT + AUTOMATE ×2Open the Mapping screen.
OKMapping Selector for the field (Edit Mode on).
SHIFT + OKRun the cursor row once.
START / STOPStart / stop the mapping; when it already is, the sequencer.
SHIFT + ◀ ▶ / ▲ ▼Step the value; small / large.
SHIFT + PATCHClear the field.
SHIFT + UP / DOWN + PATCHDelete / insert a row.
SHIFT + SEQUENCER / PATTERNMark and copy / paste.
PATCHVariable screen.

More about any of this: the NerdSEQ manual, and the NerdSEQ Field Guide, from the XOR downloads page.

↑ Contents