KN5000 effects-DSP — program flowcharts

One structural flowchart per NEC uPD6383GF microprogram: the shared kernel that every effect runs, plus each of the 38 distinct effect bodies. These show the signal flow / algorithm structure — not a per-instruction dump (that is the ../disasm/ .dsm listing, one per program). They are the diagram companion to the disassembly tree; read ../README.md and ../instruction-set.md first.

How to read these charts

The charts are Mermaid (they render on GitHub and in the technics-docs Jekyll site) and are regenerated from the ROM words plus the notes — never hand-drawn. A node is emitted only when the landmark it names is actually detected in the program’s words, using the same rules as the disassembler (../tools/dsp_disasm.py). Every instruction is accounted for: the ones a recognised landmark matches become labelled stages, and the rest are collected into a single honest opaque “undecoded core (N of M instructions)” node. No signal flow is invented.

Confidence is carried in the node style:

style meaning
solid green PROVEN — proved by construction or decoded to the bit (the kernel control flow, the EQ biquad, the reverb tank)
solid blue MEASURED — a structural landmark measured across the corpus (LFO phase word, biquad section, damping filter, all-pass marker)
solid amber INFERRED — a strong reading not yet decoded to the bit (external-DRAM read/write, waveshaper LUT, stage counts)
dashed grey OPEN — the opaque undecoded-core block and other open steps
purple a UI control parameter hanging off the stage it drives

Ordering follows the family signal chain documented in ../algorithms/families.md; stage presence is gated by detection, and parameter labels are the live UI names (notes/kn5000-dsp-paramlist.md). Because both the named-coefficient layer (500/822 today) and the ISA are still growing, re-running the generator refreshes every chart — opaque blocks shrink and stages gain names as the RE advances.

The charts

  • kernel — the shared per-frame control flow (PROVEN)
chart effect family conf. words opaque landmarks
prog00 NO OPERATION dynamics medium 49 0 1 biquad DF-I section(s), 2 C-format immediate load(s), 3 DRAM read/write word(s)
prog01 CHORUS modulation high 70 0 1 LFO phase word(s), 4 C-format immediate load(s), 1 DRAM read/write word(s), 2 waveshaper LUT selector(s)
prog02 MODULATED CHORUS modulation high 85 0 2 LFO phase word(s), 4 C-format immediate load(s), 1 DRAM read/write word(s), 3 waveshaper LUT selector(s)
prog03 ENHANCER filter medium 99 0 2 C-format immediate load(s), 1 DRAM read/write word(s), 4 all-pass marker(s)
prog04 FLANGER modulation medium 65 0 2 LFO phase word(s), 1 DRAM read/write word(s), 2 waveshaper LUT selector(s)
prog05 PHASER modulation medium 106 0 2 LFO phase word(s), 2 waveshaper LUT selector(s), 2 all-pass marker(s)
prog06 ENSEMBLE modulation medium 96 0 1 LFO phase word(s), 3 DRAM read/write word(s), 4 waveshaper LUT selector(s)
prog08 GATED REVERB reverb medium 102 0 2 C-format immediate load(s), 10 DRAM read/write word(s), 6 all-pass marker(s)
prog09 SINGLE DELAY delay high 48 0 3 DRAM read/write word(s)
prog10 MULTI TAP DELAY delay high 68 0 2 DRAM read/write word(s)
prog15 ROCK ROTARY rotary high 86 0 1 biquad DF-I section(s), 5 C-format immediate load(s), 1 DRAM read/write word(s), 1 waveshaper LUT selector(s), 2 class-8 post-sum step(s)
prog16 ROOM REVERB 1 reverb SOLVED 133 0 4 C-format immediate load(s), 13 DRAM read/write word(s), 9 all-pass marker(s)
prog32 DISTORTION distortion high 42 0 2 waveshaper LUT selector(s)
prog33 OVERDRIVE distortion high 63 0 2 biquad DF-I section(s), 2 waveshaper LUT selector(s), 2 class-8 post-sum step(s)
prog34 FUZZ distortion high 42 0 2 waveshaper LUT selector(s)
prog35 EXCITER exciter high 69 0 2 biquad DF-I section(s), 2 waveshaper LUT selector(s), 2 class-8 post-sum step(s)
prog36 COMPRESSOR dynamics medium 40 0 4 C-format immediate load(s)
prog39 PARAMETRIC EQ eq SOLVED 105 0 10 biquad DF-I section(s), 10 class-8 post-sum step(s)
prog48 AUTO PAN am high 50 0 2 LFO phase word(s), 2 waveshaper LUT selector(s)
prog50 VIBRATO modulation high 53 0 2 LFO phase word(s), 2 C-format immediate load(s), 1 DRAM read/write word(s), 2 waveshaper LUT selector(s)
prog52 AUTO WAH filter medium 72 0 1 C-format immediate load(s), 2 class-8 post-sum step(s)
prog54 RING MODULATOR am high 46 0 2 LFO phase word(s), 1 DRAM read/write word(s), 2 waveshaper LUT selector(s)
prog56 MIX UP modulation medium 64 0 3 LFO phase word(s), 2 C-format immediate load(s), 1 DRAM read/write word(s), 3 waveshaper LUT selector(s)
prog64 S.DELAY+CHORUS combi high 95 0 1 LFO phase word(s), 4 C-format immediate load(s), 3 DRAM read/write word(s), 2 waveshaper LUT selector(s)
prog65 S.DELAY+S.DELAY delay high 68 0 5 DRAM read/write word(s)
prog66 S.DELAY+FLANGER combi medium 100 0 2 LFO phase word(s), 3 DRAM read/write word(s), 2 waveshaper LUT selector(s)
prog67 S.DELAY+VIBRATO combi high 86 0 2 LFO phase word(s), 2 C-format immediate load(s), 3 DRAM read/write word(s), 2 waveshaper LUT selector(s)
prog68 S.DELAY+PHASER combi medium 110 0 2 LFO phase word(s), 3 DRAM read/write word(s), 2 waveshaper LUT selector(s), 2 all-pass marker(s)
prog70 AUTO WAH+S.DELAY combi medium 105 0 1 C-format immediate load(s), 3 DRAM read/write word(s), 2 class-8 post-sum step(s)
prog71 PEQ+CHORUS combi high 93 0 2 biquad DF-I section(s), 1 LFO phase word(s), 4 C-format immediate load(s), 1 DRAM read/write word(s), 2 waveshaper LUT selector(s), 2 class-8 post-sum step(s)
prog72 PEQ+S.DELAY combi high 54 0 2 biquad DF-I section(s), 3 DRAM read/write word(s), 2 class-8 post-sum step(s)
prog73 PEQ+FLANGER combi high 91 0 2 biquad DF-I section(s), 2 LFO phase word(s), 1 DRAM read/write word(s), 2 waveshaper LUT selector(s), 2 class-8 post-sum step(s)
prog74 PEQ+VIBRATO combi high 77 0 2 biquad DF-I section(s), 2 LFO phase word(s), 2 C-format immediate load(s), 1 DRAM read/write word(s), 2 waveshaper LUT selector(s), 2 class-8 post-sum step(s)
prog75 PEQ+COMPRESSOR combi high 59 0 2 biquad DF-I section(s), 4 C-format immediate load(s), 1 DRAM read/write word(s), 2 class-8 post-sum step(s)
prog96 PEQ+COMPR+DIST combi high 90 0 2 biquad DF-I section(s), 4 C-format immediate load(s), 2 waveshaper LUT selector(s), 2 class-8 post-sum step(s)
prog97 PEQ+COMPR+OVERDR combi high 97 0 2 biquad DF-I section(s), 4 C-format immediate load(s), 2 waveshaper LUT selector(s), 4 class-8 post-sum step(s)
prog98 PEQ+DIST+DELAY combi high 92 0 2 biquad DF-I section(s), 3 DRAM read/write word(s), 2 waveshaper LUT selector(s), 2 class-8 post-sum step(s)
prog99 PEQ+OVERDR+DELAY combi high 104 0 4 biquad DF-I section(s), 3 DRAM read/write word(s), 2 waveshaper LUT selector(s), 4 class-8 post-sum step(s)

Regenerating

make dsp-flowcharts        # or: python3 dsp/tools/gen_dsp_flowcharts.py
git diff --exit-code dsp/flowcharts   # doubles as a drift check

The generator reuses gen_dsp_disasm.py’s extraction, grouping and named-coefficient overlay, so the two trees never diverge. It does not touch the .dsm listings and does not affect dsp/verify.py’s byte-match.


On this site

These flowcharts are the diagram companion to the Effects DSP (NEC uPD6383GF) reference page. The narrative — how each result was found — is in the MAME development blog, KN5000 effects-DSP series (Parts 78-84).

Synced from the kn5000-roms-disasm disassembly tree by tools/sync_flowcharts.py; re-run make flowcharts to refresh after the charts are regenerated upstream.