#What this program is
VKBDevCfg is the Windows program that configures VKB joysticks, throttles and grips. It decides which physical button becomes which button in your flight sim, what colour an LED is, how an axis behaves, and what a thumb button does when you hold a shift key. It also flashes firmware onto the stick and calibrates its axes.
It does three jobs
Configure the stick · flash firmware · run self-tests and calibration.
It has two halves
A small toolbar across the top, and a large tabbed work area underneath.
It only talks to one stick at a time
You pick a device at the top, then everything below applies to that device.
#What to download
VKB's site is vkbsimcontrollers.com/pages/downloads. Three downloads matter:
| Get this | What it is | Do you need it? |
|---|---|---|
VKBDevCfg-C | The configuration program itself. | Yes — this is the tool. |
ZBootloader2 | Flashes firmware onto the microcontroller. | Yes, if you ever need to update or recover. |
v2_20_C (firmware pack) | The actual firmware images, one .vkb file per stick model. | Yes — ZBootloader flashes from these. |
VKB_BtnTester / VKB_JoyTester | Minimal standalone test programs. | Optional, but handy for proving a stick works before you blame the config tool. |
Extract the firmware pack into its own folder. It is ~66 files split by generation and
model, and you want to go straight to your stick. Naming is consistent:
__BlackMamba_v2_20_C.vkb, __KingCobra_v2_20_C.vkb, and so on.
#Unlocking the full UI
VKBDevCfg hides part of its own interface: macros, LEDs, the virtual mouse and several
options. A text file the program creates for itself, zconfig.ini, switches them on.
The procedure
- Open VKBDevCfg once, then close it. On first run it writes
zconfig.iniinto its own folder, next to the executable. If the file never appears, the program did not actually launch. - Open
zconfig.iniin a plain text editor. Keep it plain text. - Add the lines below under the matching
[User]and[Common]sections. The program does not create them for you. - Save, and restart VKBDevCfg.
; under [User]
User=Developer
PartialWrite=1
PartialCalibration=1
; under [Common]
Use matrix=1
Test Misc Enabled=1
Spell the keys exactly, spaces included. Those five are the ones most people want; the full list of keys the manual documents (Appendix I plus the chapters on writing parameters and calibration) is:
| Section | Parameter | Effect |
|---|---|---|
| [User] | User=Developer | Unlocks Macros, LEDs and virtual mouse, which are hidden from normal users entirely. |
| [User] | PartialWrite=1 | Adds Partial Write: pressing Set shows a dialog where you tick which parameter groups to send, instead of pushing everything. |
| [User] | PartialCalibration=1 | Adds Partial Calibration: pick exactly which axes to calibrate. |
| [User] | ForcedWriteID=1 | Lets you load a profile saved for a different firmware version. |
| [User] | Profile N= <name> | Named profiles. Repeat with N = 1, 2, 3… then enter the ID in the Profile ID field. |
| [Common] | Use matrix=1 | Adds the Row / Col / Base fields on Global → External. |
| [Common] | Test Misc Enabled=1 | Enables the Miscellaneous test sub-tab: MARS sensors and the LED tester. |
| [Common] | PageControlTop=1/0 | Put the tab strip at the top or the bottom of the window. |
| [Common] | SwapPL=1 | Swap the axes panels so Physical is above Logical. |
| [Common] | Release_DI=1 | Keeps button and axis testing live after parameters are activated. Set to 0 if testing misbehaves. |
#Firmware updates
Firmware is the code running on the stick's microcontroller. It is how you get bug fixes and new features: optional on a brand new device, increasingly important on an older one.
Via ZBootloader
- Run
ZBootloader2. - It lists every VKB device it can see. Double-click yours.
- Point it at the
.vkbfile for your exact model, in the folder you extracted the firmware pack into. - Confirm it shows the version you expect — the version number is printed next to the file.
- Click Flash. It takes roughly 30 seconds, then closes itself.
Tools → Bootloader launches ZBootloader, so you do not have to run it separately. It is mostly useful for recovery.
VKBDevCfg shows the firmware version on your stick next to the device name in the blue bar at the top, so you can check whether an update is warranted before you flash anything.
The firmware pack contains separate images per model and per hardware generation
(1stGen/, …). Flashing the wrong image is the most destructive thing you can do
with this toolchain. Check the filename against the model in VKBDevCfg's device list.
A saved profile has to match the firmware version, and some firmware versions reset the
stick's parameters to defaults. Save your configuration before flashing. To load a profile
from a different version anyway, see ForcedWriteID under
Unlocking the full UI.
#How it works
The program feels confusing because it makes you configure several different layers of “button” and “axis” separately. Once you see the layers, the rest follows.
The stick does the processing; the program only edits settings. Shift hierarchies, relative axes, curve equalisation, macro timing and LED priority all run in firmware on the device. VKBDevCfg pushes a block of parameters into the stick and pulls it back out. That is why the tool is a plain grid of cells, and why a software remapper on the PC cannot reproduce the behaviour.
The unit is the “line”
“Button” is shorthand. The manual counts lines: every pair of contacts is one.
“Every pair of button contacts is represented as single line. So simple button occupies one line, toggle switch On–Off–On — two lines, 4-way HAT — 4. Njoy32 controller can process up to 128 lines.”
Lines are numbered by wiring and grouped eight to a register,
Reg#1 … Reg#16. That is why the physical grid has 128 cells.
Four layers
Physical line
The wired contact or sensor. Numbers 1–128, fixed by the hardware: “the switch on pin 10 of my grip”. Test → Buttons / POVs shows you these numbers.
Physical function
What the line is: Button, ButAlt, Shift, SubShift, Toggle, Encoder, POV, Tempo, Generator… 26 types.
Logical line
The number Windows sees: “button 37 in DirectInput”. Defaults to the same number as the physical line. Any physical line can be mapped to any logical line.
Logical function
What the game receives: press, hat, keystroke, mouse, macro, media, system. 11 types.
You set each layer on its own, which is what makes the tool feel arbitrary. Not every physical function reaches layer 4: Shift has no logical function. It is a modifier, not an output.
People look for “where do I set button 5” and find nothing, because button 5 is a logical button and the thing they pressed is physical button 12. Know which layer you are in before you change a number.
Logical line numbers must be unique. The manual: “This number must NOT be the same with existing physical button line.” You can use an occupied number if you also reassign the button that holds it, for example moving a trigger from line 17 to line 1. The Virtual layer dialog shows occupied numbers in red and free ones in black.
Axes use the same split
Physical axes are raw sensor values straight off the gimbal. Logical axes are what Windows reports. Each logical axis names the physical axis feeding it (its Source), and one physical axis can feed several logical axes. On a default stick they match one to one, so leave them alone unless something is wrong. A controller handles at most eight axes.
Two gates on every axis: En and Vs
En (enabled) makes the stick compute the axis. Vs (visible) makes it show up in Windows. To use an axis in a game, tick both. An axis that is enabled but not visible still works inside the stick, driving Axes → Buttons, comparators or an LED gauge; that is how you turn axis movement into button presses without exposing the axis. Forgetting one box is the classic mistake.
Virtual controllers
Windows accepts at most 8 axes per controller. With more, enable virtual controllers (1–8) and assign each axis to one. Windows then sees each as a separate stick. The tool makes you do the assignment by hand.
Virtual buttons: the shifter example
A virtual button is a logical button with no switch behind it, triggered only by the firmware. It is how one physical input fans out into several logical buttons under different conditions.
- Your trigger is physical button 10. By default it drives logical button 10.
- You want trigger alone → logical button 79, and trigger + shift → logical button 80.
- Logical button 79 takes the trigger as its source. Logical button 80 has no switch left to drive it, so it is assigned to a virtual button.
One live configuration
The stick holds a single configuration; there are no slots. Get reads
all of it whichever tab you are on. Your per-game profiles are .cfg files on the
PC, not on the stick. See Get / Set / Save / Load.
#Anatomy of the window
Once you have picked a device, the window splits into two regions that people routinely confuse.
Top — the toolbar
Device selection, plus three tabs: Action, Tools, Settings. You use these constantly.
Bottom — the work area
Tabs for Test, Global, Profile and Macro. This is where the configuration lives.
Pick your device first
At the very top is a blue box listing every connected VKB device. Click yours; the app takes a second or two to read it, then shows its firmware version. Everything below applies only to the device you picked. With a stick and a throttle plugged in, you must switch between them.
#Get / Set / Save / Load
These four buttons cause more confusion than anything else in the program.
| Button | What it does | When you use it |
|---|---|---|
| Set | Writes the settings currently shown in the software into the physical stick. | After every change you want to keep. Changes in the UI are otherwise just a draft. |
| Get | Reads the settings out of the stick back into the software. | When what you see disagrees with what the stick is doing, e.g. after plugging in a stick configured on another machine. |
| Save | Saves the current configuration to a file of your choosing. | To keep a separate setup per game. |
| Load | Loads a previously saved configuration file into the software. | To switch between those per-game setups. |
Changing a setting in the UI does nothing to the stick until you press Set. You change an LED to purple, look down at the stick, see it still yellow, and conclude the software is broken. It is not; you have not written the change down.
Per-game profiles
DCS, Microsoft Flight Simulator and Elite Dangerous all want different bindings, and the stick
stores only one configuration, so keep one .cfg file per game:
- Configure everything for DCS. Save → name it
DCS.cfg. - Reconfigure for Elite Dangerous. Save →
Elite.cfg. - Before playing, Load the right file, then press Set to push it into the stick.
You can also drag a .cfg file from Explorer onto the VKBDevCfg window to load it.
Turn on Settings → Set After Load and loading a file writes it to the stick immediately. One less step, one less way to be confused.
#Top bar reference
Three tabs. Only some of what is on them matters day to day.
Action
| Control | What it does |
|---|---|
| Device readout | Shows which microcontroller is inside your stick (e.g. “VKB NJoy 32”). Purely informational. |
| Restart | Disconnects and reconnects the controller. The first thing to try when a stick misbehaves or goes unresponsive. |
| Get | Pull settings out of the stick. See above. |
| Set | Push settings into the stick. See above. |
| Save / Load | Per-game configuration files. |
Restart, Get, Set, Save, Load. You may never touch the rest of this tab.
Tools
You will not use most of these often.
| Control | What it does | Priority |
|---|---|---|
| Default | Resets everything to factory defaults. The panic button when you have lost track of what you changed. | HIGH |
| Start / End Calibr. | Runs axis calibration. Do it once on a new stick, and again if an axis ever feels wrong. | HIGH |
| Cancel Calibr. | Abandons a calibration run partway through. | rare |
| Bootloader | Launches ZBootloader from inside VKBDevCfg. | rare |
| Make reg file | Generates a registry file — the pre-zconfig.ini way of enabling developer mode. | rare |
| Parking | Reserves a button as a parking brake. You will probably never use it. | rare |
| Device Report | Exports a PDF of all your settings. Useful when asking for help in a forum. | rare |
| Button Wizard | Guided setup for button mapping. The other wizards are under Beyond the basics. | check it out |
How calibration works
- Click Start Calibration.
- A dialog lists the axes. Select the ones you want. With
PartialCalibration=1inzconfig.iniyou can choose; without it, all axes are calibrated. - Click Set.
- Move every selected axis to its extreme position: full forward, full back, full left, full right, throttle to the stops.
- Click End Calibration. Done.
If you mess it up midway, Cancel Calibration gets you out without writing bad values.
Settings
Four checkboxes and a skin picker. They change how the program behaves, not how your stick behaves.
| Option | On | Off |
|---|---|---|
| Auto Read Parameters | When you plug a stick in, it automatically reads and displays its settings. | You must press Get manually every time you connect. |
| Set After Load | Loading a config file immediately writes it to the stick. | Loading only fills the UI; you still press Set. |
Partial Write (needs PartialWrite=1) |
Pressing Set asks which categories to send (LEDs, buttons, axes…). | Everything is sent every time. Simpler, and safer if you are not sure. |
Partial Calibration (needs PartialCalibration=1) |
Calibration lets you pick which axes to calibrate. | Calibration always covers every axis. |
Skin changes how the program looks. The dark “Metro” skin is an alternative to the default white one; purely cosmetic.
#Test tab
For verifying hardware. It is read-mostly, so it is the safest place to poke around and the first place to look when something seems broken.
Info
Model name, version, firmware version. Nothing to configure. Use it to confirm you are editing the right device and running the firmware you think you are.
Buttons / POVs
Press a button on the stick and watch which cell lights up. This tells you which physical button number a given switch is wired to.
Before you remap anything, find the physical number: press the button, read the number, then change that one.
Axes
Live axis readout. Move the stick and watch the values move. Use it to confirm an axis is alive and to see its resting centre before and after calibration.
External Devices
Lists other VKB devices currently plugged in. Useful on multi-stick setups.
Miscellaneous — the LED tester
Requires Test Misc Enabled=1 in zconfig.ini.
- Type an LED number into the box, e.g.
LED 0orLED 10. - Hold the button next to it. That LED flashes on the physical stick.
- Set a colour in the panel on the right and click OK to change the colour the test uses.
Different sticks have different LEDs. A Gladiator NXT has LED 0,
LED 10 and LED 11; another model will not. Check your own device.
The manual instructs you to restart the joystick after testing LEDs. Do it.
#Global tab
Settings that apply to the whole device rather than to one axis or button.
Common
- Button count — how many buttons the device exposes to Windows.
- POV / hat count — how many hat switches. Setting this to zero makes the hats disappear from Windows entirely.
- Timing — debounce and timing behaviour per button.
- Keyboard — enables a virtual keyboard, so a stick button can emit a keystroke. Tick Map, then choose Classic or Modified (Off disables it). A separate “HID Keyboard Device” then appears in Windows.
- Mouse — the same idea for a virtual mouse: Off, Relative, Absolute or R+A. A mouse left always on can drift the cursor from small axis jitter.
Leave most of these at their defaults. They are easy to break and hard to diagnose.
External
Low-level microcontroller configuration: SPI, serial, GPIO and the like.
These are firmware-level settings that can stop a stick responding. Unless you really know what you are doing, do not touch this tab.
LEDs
Where you will spend real time if you care about lighting.
How it works
LEDs are configured as a list of events. An event is the thing that causes the light to change. For each event you choose which LED, which colour, and which mode.
| Event | Meaning | Example |
|---|---|---|
| Event 0 | The default / idle state. Lights are on unless something else overrides them. | LED 10 constant purple at rest. |
| Logical Button | Light changes when a particular logical button is pressed. | Press logical button 10 → LED 10 turns yellow. |
| Axis, Hat, etc. | Light reacts to an axis crossing a threshold, a hat direction, and so on. | LED 7 turns green when the throttle is past 80%. |
Several events can drive the same LED. If more than one occurs at once, the event with the higher number wins, so give them different colours, brightness or blink rates.
Not every stick has RGB LEDs. On a fixed-colour LED, picking green in the dropdown has no effect. A Gladiator NXT, for example, has one RGB LED and the rest are single-colour.
#Profile tab
You will spend most of your time here. Axes, buttons, POVs and logical functions all live on it.
Axes — physical
Configuration of the raw axis signals, before they become logical axes.
| Setting | Effect |
|---|---|
| Sensor type | How the sensor is read. Leave at default; changing it breaks the axis. |
| Virtual trimmer | Enables a software trimmer for the axis. |
| Auto calibration | Whether the axis self-calibrates. |
| Invert | Flips the axis direction. |
| Bias, % | Shifts the centre point. The main fine-tuning control for “my axis is centred 2% off”. |
| Low / High limits | Clamps the usable travel at each end. |
| Dynamic filtering | Smoothing applied to the signal. |
“My axis is slightly off-centre” is a bias problem, not a calibration problem. Adjust bias before you re-run calibration.
Response curve
Per-axis curve shaping: you can create eight curves and apply them to any axes. Most modern sims let you set curves in-game, so you often do not need this. It exists for the sims that do not, and for curves that a button can switch on at runtime.
The EQ flag
Each axis has an EQ checkbox and a curve number. Ticked means “always apply this curve to this axis”. Unticked means the curve is dormant and can instead be switched on dynamically, for example by a button.
If you edit a curve and nothing happens, you almost certainly forgot to tick EQ.
Logical axes
The table that maps physical axes onto what Windows reports. Each logical axis has a Source, the physical axis feeding it.
Example: to make logical axis 1 your X axis, find which physical axis X actually is (on a default stick, physical axis 1) and set logical axis 1's source to it.
Leave these at their defaults. You can invert an axis here if you want to, but keep En and Vs ticked on every axis you use; see How it works.
Axes → Buttons
Turns axis travel into button presses. You divide the axis into zones and each zone fires a different virtual button. The type decides how:
- Edges 1 — a single button is pressed when the axis crosses a zone boundary.
- Edges 2 — a pair of buttons, one for each side of the boundary, is pressed on the crossing. Pulling the stick to either extreme can then trigger a different button; this is how you get “pull fully back = boost” bindings.
- Zones — a button is held while the axis is inside its zone.
Double-click the button cell to pick which virtual button the zone triggers.
Buttons
Split into two layers, mirroring the axis model:
Physical layer — what the switch does
For each physical button you choose its function type:
| Type | Meaning |
|---|---|
| Button | Ordinary press. The default. |
| Button alternative | A button with fixation: it latches until pressed again. |
| Shift | Acts as a shift modifier for other buttons. |
| SubShift | A second, additional modifier. |
| Toggle | A toggle switch. |
| Tempo | A several-function button: the output depends on press time and type. |
| No function | Does nothing. Useful for disabling a switch you cannot remove. |
There are 26 types in all. To find the number of the button you want to change, press it in Test → Buttons/POVs, then click the matching cell here.
Physical layer — which logical button it drives
Next to the function type you pick the logical button this physical button activates. Auto mapping means “same number”. Untick it to send the button to any logical button, for example a trigger from logical button 10 to logical button 37, or to a shift-aware pair using a virtual button.
Logical layer — what the logical button does
For each logical button, what Windows actually receives:
| Action | Emits |
|---|---|
| Button press | An ordinary button. |
| Hat switch | A hat-switch direction. |
| Keyboard | A keystroke, via the virtual keyboard from Global. |
| Mouse | A mouse button or movement. |
| Multimedia | Media keys (play, next track…). |
| System | System actions. |
| Macro | A macro sequence. See the Macro tab. |
The manual lists 11 logical functions; the rest are Audio, Application, No Function and Void.
Physical layer: decide what the switch is and which logical button it fires. Logical layer: decide what that logical button does. You must do both, and they sit on the same screen, which is why people lose track of which half they are editing.
POVs
Configuration for the hat switches. A stick can have up to four; POV 1 and 2 can be analogue or discrete, POV 3 and 4 discrete only.
- POV type: Discrete, LoRes 4W, LoRes 8W, HiResPOV or Shifter 6W (a six-position virtual gearbox).
- Output: POV, Buttons V (logical buttons), Buttons L (virtual buttons), Numpad, Mouse Rel or Mouse Abs.
Wiring a hat to an existing button
Example: the stick's hat right already activates logical button 28, so:
- In Buttons → Logical layer, find logical button 28.
- Set its action to Hat switch, and pick which hat (hat 1).
- Confirm in Test that the hat responds.
Boolean
Small logical rules: when this input is true, do that. Example: when physical button 12 is selected, activate virtual button 80, where virtual button 80 is already wired to light an LED.
This builds conditional behaviour without a full macro. The manual has more detail.
#Macro tab
A macro is a named sequence of actions: button presses, keystrokes and so on. The tab is hidden until you unlock the full UI. Two things to set up, in this order.
1. Define what the macro does
- Go to the Macro tab and select a macro number, e.g. macro 5.
- Add entries, e.g. “mouse right button” and the keyboard
Akey. - Adjust timing in the same panel.
- Click Set.
2. Point a button at it
- Find the logical button you want to trigger it, e.g. logical button 80.
- In Buttons → Logical layer, set its action to Macro.
- Choose the macro number, e.g. macro 5. Tick Repeat if the macro should repeat while the button stays held.
Define the macro before you assign it, as the manual instructs. Pressing the stick button then replays the whole sequence.
The tab has Macros Array 1 and Macros Array 2 groups for working on ranges of macros: clear, fill, and Copy 1 to 2. Copying overwrites the current macro assignments.
#Recipes
Change an LED's colour
- Select your device in the blue bar at the top.
- Global → LEDs.
- Pick an event — usually Event 0 for the idle state.
- Choose the LED, set the mode, then pick the colour.
- Press Set. Look at the physical stick — it has changed.
Find out which physical button a switch is
- Test → Buttons / POVs.
- Press the switch on your stick.
- Read the number that lights up. Write it down.
Remap a button
- Find its physical number (recipe above).
- Profile → Buttons → Physical layer. Click that row.
- Set the function type — usually leave as Button.
- Set which logical button it drives — leave as Auto unless you have a reason.
- In the Logical layer, find that logical button and set what it does.
- Press Set.
Make a switch act as Shift
- Profile → Buttons → Physical layer.
- Find the switch's physical number and set its type to Shift.
- Press Set.
- Holding it should now modify what your other buttons do. Verify on the physical stick.
Set up a throttle-shift layer
- Make your shifter a Shift physical button.
- In the physical layer, set your trigger to drive logical button 79.
- Assign logical button 80 to a virtual button; it has no physical switch of its own.
- In the logical layer, give buttons 79 and 80 different actions.
- Set. Trigger alone → 79. Trigger + shift → 80.
Fix a stick that has gone unresponsive
- Press Restart in the Action tab. This is the cheap fix.
- Still stuck? Replug the USB cable.
- Still stuck? Tools → Default resets everything to factory settings. This loses your configuration, so save it first if you have one.
- Still stuck? Tools → Bootloader and reflash the firmware.
Keep separate setups per game
- Configure for game A. Save →
GameA.cfg. - Configure for game B. Save →
GameB.cfg. - Before playing, Load the right file.
- Press Set, or turn on Settings → Set After Load and skip it.
#Gotchas
The things that reliably waste people's time.
Nothing you change in the UI reaches the hardware until you press Set. By far the most common confusion.
You are editing a logical button; the switch you pressed is a physical button. They are different numberings connected by a table you must set deliberately.
Set what the switch does on the physical layer and what the game receives on the logical layer. Doing only one changes nothing.
An axis needs both En and Vs ticked before a game will see it.
Editing a response curve and seeing no effect almost always means EQ is unticked.
The software lets you pick a colour for a fixed-colour LED; nothing will change.
Configuration applies to whichever device you selected in the blue bar. Re-select when you switch between a stick and a throttle.
If an editor mangles it, you lose your settings and the hidden UI. Keep a copy.
The software has been reported to crash at random. Expect the occasional reset and keep your config files.
#Beyond the basics
VKBDevCfg is a ~23 MB C++Builder application whose binary embeds 69 form definitions: roughly 50 are VKB's own windows and dialogs, about 16 belong to the bundled FastReport library. Across them sit thousands of controls. Decompiling the current build to map its UI surfaces a long tail of features beyond the tabs above.
| Feature | What it appears to be |
|---|---|
| Visual Diagram | An eye icon in the main window that opens a graphical view of your device. Likely a much clearer way to understand the physical→logical mapping than a grid of cells. |
| Visual Mapping | Related — a visual representation of button assignments. |
| Curve Wizard | A guided tool for building response curves. |
| NXT SEM Axes Wizard | A wizard for generating axis definitions on NXT-series sticks. |
| Create MobiFlight Connector JSON | Exports a MobiFlight connector file — this stick can drive a physical cockpit panel. |
| Comparators / Detents | Switch a line on when an axis is past one threshold, or between two. The way to build detent-style buttons. |
| Functional generator | Injects synthetic axis motion — for testing software, not the stick. |
| Script / Script Test | Appears to be scripted automation of the config process. The manual does not document it. |
| Find && Auto Config | Automatic configuration discovery. |
| Global SHIFTs / SubSHIFTs | Up to two global shifts and seven SubShifts: modifier layers beyond the single Shift button type. |
| MultiDevice, Master / Slave Settings | Coordinating several VKB devices as one system. |
| Virtual BUS over USB | Links devices into that network over USB (via Z-Link2) instead of a cable. |
| Trackers / Gyro / Compass | Head-tracking and sensor support. |
| Get/Set Feature, HID Set 1 / 2 | Direct access to the device's HID feature reports — the raw protocol, exposed in the UI. |
| Led Gauge, System LEDs color inversion | Shows axis positions on a row of LEDs, plus global LED behaviour. |
| Raw Axes Data / Axis Data | Low-level axis telemetry viewers. |
| Macros Array 1 / 2 | Group operations on ranges of macros, such as copy 1 to 2. |
Every label above is read from the application's compiled-in form definitions. It says what exists, not necessarily what each item does. The vendor manual remains the authority on behaviour.
Try Visual Diagram early. If it does what the name suggests, it may be the best answer to “how do I actually understand this program”.
#Glossary
| Term | Meaning |
|---|---|
| Line | One pair of contacts. A button is one line, a hat four. The stick handles up to 128. |
| Physical button / axis | The raw hardware input, as wired and numbered by VKB. |
| Logical button / axis | The numbered input that Windows and your sim actually see. |
| Virtual button | A logical button with no physical switch, triggered by firmware logic. Lets one physical input produce several logical outputs. |
| En / Vs | Per-axis checkboxes: Enabled (the stick computes the axis) and Visible (Windows sees it). Both are needed to use the axis in a game. |
| Virtual controller | An extra controller Windows sees, used to get past the limit of 8 axes per controller. |
| Bias | Offset applied to an axis centre. The fix for a slightly off-centre axis. |
| Calibration | One-time procedure that learns each axis's true extremes. |
| POV / Hat | The directional pad. 4-way, 6-way or 8-way. |
| Event (LED) | The condition that changes an LED's colour or state. |
| EQ | The flag that makes a response curve permanently active. |
| Zone (Axes→Buttons) | A range of axis travel that fires a button. |
| Partial Write | Letting you choose which categories of settings to push to the stick. |
| Auto mapping | “Physical button N drives logical button N.” |
| zconfig.ini | The text config file that unlocks the hidden parts of the UI. |
| Microcontroller | The chip inside the stick. NJoy 32, for example. |
| Firmware | The software running on that microcontroller. Flashed with ZBootloader. |
#Sources and credit
This guide grew out of “VKBDevCfg Basics” by DCS Tutorial (27 June 2022), a patient half-hour walkthrough of the whole program and still the best introduction there is. Watch it alongside this page; the chapters below jump to the matching moment. The model and the settings were then checked against VKB's NJoy32 Configuration Utility User Guide v2.19 (August 2023, 163 pages) from their downloads page, and against the application itself.
| Time | Topic |
|---|---|
| 0:01 | Intro & what you need |
| 0:21 | Downloading the software |
| 1:50 | Unlocking the full UI — zconfig.ini |
| 3:17 | Firmware update |
| 5:01 | The window: two halves |
| 5:21 | Action tab |
| 7:54 | Tools tab |
| 9:26 | Settings tab |
| 11:14 | Top bar summary |
| 11:30 | The five bottom tabs |
| 11:45 | Test → Info |
| 11:58 | Test → Axes / Misc |
| 13:44 | Global tab |
| 15:06 | Global → External |
| 15:27 | Global → LEDs |
| 17:08 | Profile tab |
| 17:15 | Axes |
| 18:16 | Response curve |
| 19:34 | Logical axes |
| 20:44 | Axes → buttons |
| 21:25 | Buttons |
| 26:21 | POVs |
| 27:17 | Boolean |
| 27:58 | Macros |
| 29:04 | Wrap-up |