# Cronus Zen™ Main Hub

### <i class="fa-rocket">:rocket:</i> New to Cronus Zen™? <a href="#new-here" id="new-here"></a>

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><i class="fa-face-smile">:face-smile:</i> <strong>All-in-One — Easy Setup</strong></td><td><a href="/pages/SR9IB70UTNawzIjmGVPI">/pages/SR9IB70UTNawzIjmGVPI</a></td><td><a href="/files/t4hv5GmN7M6EqEwOxV5r">/files/t4hv5GmN7M6EqEwOxV5r</a></td></tr></tbody></table>

***

### <i class="fa-book-open-reader">:book-open-reader:</i> Setup and downloads <a href="#setup" id="setup"></a>

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><i class="fa-bolt-lightning">:bolt-lightning:</i> <strong>Quick Start and Donwloads</strong></td><td><a href="/pages/psHLPhCTyCwHEqLnfmaq">/pages/psHLPhCTyCwHEqLnfmaq</a></td><td><a href="/files/xw2ICJNd8HSHWKT87z1Q">/files/xw2ICJNd8HSHWKT87z1Q</a></td></tr><tr><td><i class="fa-download">:download:</i> <strong>Downloads</strong></td><td><a href="/pages/LAZpF5TttS7LugcCQQBg">/pages/LAZpF5TttS7LugcCQQBg</a></td><td><a href="/files/ezFuezXkDarXR05HduOT">/files/ezFuezXkDarXR05HduOT</a></td></tr><tr><td><i class="fa-file-pdf">:file-pdf:</i> <strong>Printable Quick Start Guides</strong></td><td><a href="/pages/okqOYyNfko6f4eKlPugV">/pages/okqOYyNfko6f4eKlPugV</a></td><td><a href="/files/B5onHFR5qFXOQZIX7cO8">/files/B5onHFR5qFXOQZIX7cO8</a></td></tr></tbody></table>

***

### <i class="fa-desktop">:desktop:</i> Software and scripting <a href="#software" id="software"></a>

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><i class="fa-desktop">:desktop:</i> <strong>Zen Studio Live</strong></td><td></td><td><a href="/files/7G9X8Ir3Y5fJrmKfdBXH">/files/7G9X8Ir3Y5fJrmKfdBXH</a></td></tr><tr><td><i class="fa-code">:code:</i> <strong>GPC Script Guide</strong></td><td><a href="/spaces/yIhlDMEOMB6JOWTfU9zr">/spaces/yIhlDMEOMB6JOWTfU9zr</a></td><td><a href="/files/UGgR2XnBTSCcKk1tEIPz">/files/UGgR2XnBTSCcKk1tEIPz</a></td></tr><tr><td><i class="fa-file-pen">:file-pen:</i> <strong>Changelog</strong></td><td><a href="/pages/QfYbpJFWk027YJpK2ZZw">/pages/QfYbpJFWk027YJpK2ZZw</a></td><td><a href="/files/vWUox4zKE8H254TeoTIE">/files/vWUox4zKE8H254TeoTIE</a></td></tr></tbody></table>

***

### <i class="fa-gamepad-modern">:gamepad-modern:</i> Hardware <a href="#hardware" id="hardware"></a>

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><i class="fa-link">:link:</i> <strong>Zen Link™</strong></td><td><a href="/pages/b12vhgLiP4qx0aeyYUHK">/pages/b12vhgLiP4qx0aeyYUHK</a></td><td><a href="/files/VhrG72HNDQdCRKSbi6bb">/files/VhrG72HNDQdCRKSbi6bb</a></td></tr><tr><td><i class="fa-gamepad-modern">:gamepad-modern:</i> <strong>Supported Devices</strong></td><td><a href="/pages/EE5AGOKtlQFiMwnPJqh5">/pages/EE5AGOKtlQFiMwnPJqh5</a></td><td><a href="/files/oMAXkXzqltW04cOYq6O0">/files/oMAXkXzqltW04cOYq6O0</a></td></tr><tr><td><i class="fa-computer-mouse">:computer-mouse:</i> <strong>Mouse &#x26; Keyboard</strong></td><td><a href="/pages/Euc1IMgVbOGS0pLevBU5">/pages/Euc1IMgVbOGS0pLevBU5</a></td><td><a href="/files/QV9kmexToRxvXwMWuPI5">/files/QV9kmexToRxvXwMWuPI5</a></td></tr><tr><td><i class="fa-steering-wheel">:steering-wheel:</i> <strong>Wheel Mode</strong></td><td><a href="/pages/6WzUJuJOmywHXYAMOs98">/pages/6WzUJuJOmywHXYAMOs98</a></td><td><a href="/files/jV65HLj7jrlifEpGMSkA">/files/jV65HLj7jrlifEpGMSkA</a></td></tr></tbody></table>

***

### <i class="fa-circle-question">:circle-question:</i> Help <a href="#help" id="help"></a>

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><i class="fa-question">:question:</i> <strong>Frequently Asked Questions</strong></td><td><a href="/pages/9LjkvIT1vDfDwUPQiKLN">/pages/9LjkvIT1vDfDwUPQiKLN</a></td><td><a href="/files/ICClURipgJNIrEwppuSY">/files/ICClURipgJNIrEwppuSY</a></td></tr><tr><td><i class="fa-discord">:discord:</i> <strong>Discord Server</strong></td><td><a href="/pages/T8G2XP5if4PJJRKdDDcS">/pages/T8G2XP5if4PJJRKdDDcS</a></td><td><a href="/files/rN5OxPJNagQ74sSMOI8I">/files/rN5OxPJNagQ74sSMOI8I</a></td></tr></tbody></table>


# All-In-One — Easy Setup

Everything from opening the box to playing on your console, in order. No prior knowledge needed.

## <mark style="color:$danger;">`WORK IN PROGRESS`</mark>

This page takes you all the way from an unopened box, over flashing a GamePack/Script to playing on your console.\
Do the steps in order and do not skip ahead — each one assumes the last one is finished.

It takes about 20 minutes the first time.

***

### What this All-in-One step by step guide covers

1. [What you need before you start](#what-you-need-before-you-start)
2. [Open the setup software](#step-1-open-the-setup-software)
3. [Plug the Zen into your computer](#step-2-plug-the-zen-into-your-computer)
4. [Update the firmware](#step-3-update-the-firmware)
5. Find out how your controller connects
6. Set the output protocol
7. Flash a GamePack/Script
8. Connect the Zen to your console
9. Connect your controller
10. Test it

***

### What you need before you start

* **A computer with the** [**Chrome browser**](https://www.google.com/chrome/)**.** Zen Studio Live runs inside the browser, so Windows, macOS, and Linux all work. You only need the computer for setup — once the Zen is configured, it works on its own.
* **Two USB-C cables.** One short and one long cable are in the box.
* **Your controller**, charged.
* **Your console.**

You do not need to install drivers, or pay for anything to complete this guide.

{% hint style="info" %}
**Lost the cables that came in the box?**

Any USB-C cable works — but it has to be a **data cable**, not a charge-only cable.

The difference is inside: a charge-only cable has just the two power wires. A data cable has those plus two more that carry the actual communication. Without them the Zen lights up but your computer never sees it.

**The quick test:** use the cable to connect your phone to your computer. If the phone's files show up, it is a data cable. If it only charges, it is not.
{% endhint %}

***

### Step 1 — Open the setup software

The software is called **Zen Studio Live**. It is what you use to tell the Zen what to do.\
It runs inside the [Chrome browser](https://www.google.com/chrome/) — nothing to download, nothing to install.\
\
You just open a web page: [zenstudio.collectivemindsstore.com](https://zenstudio.collectivemindsstore.com/)

Open that link in [Chrome](https://www.google.com/chrome/) now and leave the tab open.\
You will come back to it in almost every step from here on.

***

### Step 2 — Plug the Zen into your computer

Your Cronus Zen has two USB-C ports.\
They are not interchangeable — each step in this guide tells you which one to use, so read carefully.

For this step you need the port labelled **PROG USB**.

{% stepper %}
{% step %}
Take a USB-C cable
{% endstep %}

{% step %}
Plug one end into the **PROG USB** port on the Zen
{% endstep %}

{% step %}
Plug the other end into your computer
{% endstep %}

{% step %}
Go back to the Zen Studio Live tab in Chrome and click Connect Device
{% endstep %}

{% step %}
A small window opens listing the devices Chrome can see
{% endstep %}

{% step %}
Choose Cronus Bridge
{% endstep %}

{% step %}
Click Connect
{% endstep %}

{% step %}

### **Prefer to watch someone do it?**

We have a short video that walks through connecting your Zen to Zen Studio Live.
{% endstep %}
{% endstepper %}

{% embed url="<https://www.youtube.com/watch?v=zgAmRHzDXn4>" %}
Connecting your Cronus Zen to Zen Studio Live
{% endembed %}

{% hint style="info" %}
**Why does the browser ask for permission?**

Chrome does not let a web page reach hardware on its own — you have to point at the device and allow it, once per browser. That is what the small window is doing.&#x20;
{% endhint %}

{% hint style="danger" %}
**Cronus Bridge does not appear in the list?**

Almost always the **cable**. Many USB-C cables only carry power, and the Zen will light up on one of those while staying completely invisible to your computer.\
\
Try a different cable before you change anything else.\
If the cable is definitely a data cable, unplug the Zen, plug it back in, and click **Connect Device** again.
{% endhint %}

***

### Step 3 — Update the firmware

Your Zen came from the factory it may have a older firmware on it.\
Update it now, before you connect anything to a console.

{% stepper %}
{% step %}
**Unplug every cable from the Zen**

<sub>All of them, the next steps only work if the Zen starts out with nothing attached</sub>
{% endstep %}

{% step %}
Turn the Zen around so you can see the back, find the small blue button
{% endstep %}

{% step %}
**Press and hold** that button, keep holding
{% endstep %}

{% step %}
While still holding, plug the USB data cable into the **top port** of the Zen
{% endstep %}

{% step %}
In Zen Studio Live, click **Update Firmware** in the bottom-left corner
{% endstep %}

{% step %}
Click **Connect Device**.
{% endstep %}

{% step %}
**Choose Cronus Zen from the list, then click Connect**
{% endstep %}

{% step %}
Click **Update to latest**
{% endstep %}

{% step %}
**The firmware now writes to your Zen.**

<sup>This takes a while., do not unplug the cable and do not close the page while it runs</sup>
{% endstep %}

{% step %}
When it is finished you get a success message that says Firmware updated
{% endstep %}

{% step %}
Click **Close**
{% endstep %}

{% step %}

### **Prefer to watch someone do it?**

We have a short video that walks through connecting your Zen to Zen Studio Live.
{% endstep %}
{% endstepper %}

{% embed url="<https://www.youtube.com/watch?v=rocT6KLMA20>" %}
Updating the Cronus Zen firmware
{% endembed %}

{% hint style="danger" %}
**Do not interrupt the update.**

Unplugging the cable or closing the page part-way through can leave the Zen with half-written firmware. Let it finish, however long it takes.
{% endhint %}

{% hint style="info" %}
**Cronus Zen does not appear in the list?**

Then it is not in the right mode. Unplug the cable, press and hold the blue button again, and plug the cable in while you are still holding it. The order is what matters: hold first, then plug in.

If that does not help, try a different cable — a charge-only cable will not work here either.
{% endhint %}

***

##


# STEP 1: Start Zen Studio Live

## Quick Reference

{% hint style="info" %}
Setting up for the first time? Use the [All-in-One — Easy Setup](/cronus-zen-guide/all-in-one-easy-setup) instead — it explains every step.\
This page is a lookup sheet for people who already know the process.
{% endhint %}

***

### <i class="fa-globe">:globe:</i> Software <a href="#software" id="software"></a>

|                       |                                                                                                                             |
| --------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| **Zen Studio Live**   | [zenstudio.collectivemindsstore.com](https://zenstudio.collectivemindsstore.com/) — runs in the browser, nothing to install |
| **Browser**           | Chrome recommended. Windows®, macOS®, Linux® supported. iOS® is not                                                         |
| **Zen Studio Legacy** | For older Zen firmware — see [Downloads](/quick-start-and-downloads/downloads)                                              |

***

### <i class="fa-plug">:plug:</i> Ports and cables <a href="#ports" id="ports"></a>

The Zen has two USB-C ports. They are not interchangeable.

| Port         | Used for                                              |
| ------------ | ----------------------------------------------------- |
| **PROG USB** | Connecting the Zen to your computer (Zen Studio Live) |
| **Top port** | Firmware updates, while holding the blue button       |

{% hint style="warning" %}
The cable must be a **data cable**, not charge-only.\
On a charge-only cable the Zen lights up but stays invisible to your computer.

**Quick test:** connect your phone to your computer with it. If the phone's files show up, it's a data cable.
{% endhint %}

***

### <i class="fa-arrows-rotate">:arrows-rotate:</i> Connecting <a href="#connecting" id="connecting"></a>

| Goal                | What to do                                                                                           | Pick from the list |
| ------------------- | ---------------------------------------------------------------------------------------------------- | ------------------ |
| **Normal use**      | Plug into **PROG USB**, click **Connect Device**                                                     | `Cronus Bridge`    |
| **Firmware update** | Unplug everything, hold the blue button on the back, plug into the **top port** while still holding. | `Cronus Zen`       |

The order matters for the firmware mode: hold the button first, then plug in.

{% hint style="danger" %}
Never interrupt a firmware update. Unplugging the cable or closing the page part-way through can leave the Zen with half-written firmware.
{% endhint %}

***

### <i class="fa-circle-info">:circle-info:</i> Where to find things <a href="#where" id="where"></a>

|                     |                                                                 |
| ------------------- | --------------------------------------------------------------- |
| **Serial number**   | Bottom-left corner of Zen Studio Live, once the Zen is detected |
| **Update Firmware** | Bottom-left corner of Zen Studio Live                           |

***

### <i class="fa-triangle-exclamation">:triangle-exclamation:</i> If something is wrong <a href="#troubleshooting" id="troubleshooting"></a>

| Symptom                                       | Most likely cause                              |
| --------------------------------------------- | ---------------------------------------------- |
| Device not detected at all                    | Charge-only cable                              |
| `Cronus Bridge` missing from the list         | Charge-only cable, or the Zen needs replugging |
| `Cronus Zen` missing during a firmware update | Blue button was not held before plugging in    |
| "Device Not Connected" in the status bar      | Faulty USB cable                               |

***

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><strong>All-in-One — Easy Setup</strong></td><td>The full walkthrough, from the box to playing.</td><td><a href="/pages/SR9IB70UTNawzIjmGVPI">/pages/SR9IB70UTNawzIjmGVPI</a></td><td><a href="/files/NayZn9iDiJGF04Y4qFvD">/files/NayZn9iDiJGF04Y4qFvD</a></td></tr><tr><td><strong>Frequently Asked Questions</strong></td><td></td><td></td><td><a href="/files/ICClURipgJNIrEwppuSY">/files/ICClURipgJNIrEwppuSY</a></td></tr></tbody></table>


# STEP 2: Update Firmware

## Update Firmware

{% hint style="info" %}
Setting up for the first time? The All-in-One — Easy Setup covers this as part of the full walkthrough.\
This page is for updating on its own.
{% endhint %}

***

### <i class="fa-list-check">:list-check:</i> Before you start <a href="#before" id="before"></a>

|              |                                                                                      |
| ------------ | ------------------------------------------------------------------------------------ |
| **Software** | [Zen Studio Live](https://zenstudio.collectivemindsstore.com/) in the Chrome browser |
| **Cable**    | A USB-C **data cable**, not charge-only                                              |
| **Port**     | The **top port** on the Zen                                                          |
| **Button**   | The small blue button on the back                                                    |

{% hint style="warning" %}
On a charge-only cable the Zen lights up but stays invisible to your computer. If your phone's files show up when you connect it with that cable, it's a data cable.
{% endhint %}

***

### <i class="fa-arrows-rotate">:arrows-rotate:</i> Update <a href="#update" id="update"></a>

{% stepper %}
{% step %}

#### Unplug everything

Remove every cable from the Zen. The next steps only work if the Zen starts out with nothing attached.
{% endstep %}

{% step %}

#### Hold the blue button

Turn the Zen around so you can see the back and find the small blue button. Press and hold it, and keep holding.
{% endstep %}

{% step %}

#### Plug in while still holding

With the button still held, plug the USB data cable into the **top port** of the Zen.

The order is what matters: hold first, then plug in.
{% endstep %}

{% step %}

#### Connect in Zen Studio Live

Click **Update Firmware** in the bottom-left corner, then click **Connect Device**. Choose **Cronus Zen** from the list and click **Connect**.
{% endstep %}

{% step %}

#### Start the update

Click **Update to latest**. The firmware now writes to your Zen.
{% endstep %}

{% step %}

#### Wait for it to finish

This takes a while. Do not unplug the cable and do not close the page while it runs.

When it is done you get a success message that says **Firmware updated**. Click **Close**.
{% endstep %}

{% step %}

### **Prefer to watch someone do it?**

We have a short video that walks through connecting your Zen to Zen Studio Live.
{% endstep %}
{% endstepper %}

{% embed url="<https://www.youtube.com/watch?v=rocT6KLMA20>" %}
Updating the Cronus Zen firmware
{% endembed %}

{% hint style="danger" %}
**Do not interrupt the update.**

Unplugging the cable or closing the page part-way through can leave the Zen with half-written firmware. Let it finish, however long it takes.
{% endhint %}

***

### <i class="fa-globe">:globe:</i> Alternative: Web Update Tool <a href="#web-update-tool" id="web-update-tool"></a>

The online firmware update tool works in Chrome and Edge, on Windows®, macOS®, and Android® — USB OTG is required on Android®.

<a href="https://firmware.modcentral.ca/" class="button primary">Open the Web Update Tool</a>

***

### <i class="fa-triangle-exclamation">:triangle-exclamation:</i> If something goes wrong <a href="#troubleshooting" id="troubleshooting"></a>

| Symptom                                  | What to do                                                                                                                |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| **Cronus Zen**™ is not in the list       | The Zen is not in the right mode. Unplug the cable, hold the blue button again, and plug the cable in while still holding |
| Still not in the list                    | Try a different cable — a charge-only cable will not work here either                                                     |
| Nothing happens after **Connect Device** | Unplug the Zen, plug it back in, and click **Connect Device** again                                                       |

***

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><strong>Quick Reference</strong></td><td>Ports, links, and lookups on one page.</td><td><a href="/pages/tZ5QnE33RgQuKi7xX5jw">/pages/tZ5QnE33RgQuKi7xX5jw</a></td><td><a href="/files/QVpjTFTllEZ8ksebknTC">/files/QVpjTFTllEZ8ksebknTC</a></td></tr><tr><td><strong>Changelog</strong></td><td></td><td><a href="/pages/QfYbpJFWk027YJpK2ZZw">/pages/QfYbpJFWk027YJpK2ZZw</a></td><td><a href="/files/vWUox4zKE8H254TeoTIE">/files/vWUox4zKE8H254TeoTIE</a></td></tr></tbody></table>


# STEP 3: Controller compatibility

Check how your controller connects to the Cronus Zen™ before you set it up. Some controllers are USB-only, some work over Bluetooth®, and some need a wireless adapter.

***

### <i class="fa-gamepad-modern">:gamepad-modern:</i> Connection matrix <a href="#matrix" id="matrix"></a>

| Controller                    |                    USB                    |                   Bluetooth®                   |                     Adapter                    |
| ----------------------------- | :---------------------------------------: | :--------------------------------------------: | :--------------------------------------------: |
| DualSense™                    | <mark style="color:green;">**Yes**</mark> | <mark style="color:orange;">**Limited**</mark> |                        —                       |
| DualSense Edge™               | <mark style="color:green;">**Yes**</mark> | <mark style="color:orange;">**Limited**</mark> |                        —                       |
| DualShock®4                   | <mark style="color:green;">**Yes**</mark> |    <mark style="color:green;">**Yes**</mark>   |                        —                       |
| Xbox® (all models)            | <mark style="color:green;">**Yes**</mark> |     <mark style="color:red;">**No**</mark>     | <mark style="color:green;">**Required**</mark> |
| Nintendo Switch® (all models) |   <mark style="color:red;">**No**</mark>  |    <mark style="color:green;">**Yes**</mark>   |                        —                       |
| Astro® C40                    | <mark style="color:green;">**Yes**</mark> |     <mark style="color:red;">**No**</mark>     | <mark style="color:green;">**Required**</mark> |

{% hint style="warning" %}
**Limited** means the controller pairs over Bluetooth®, but Adaptive Triggers, rumble, gyroscope, and mic do not work. Connect it over USB if you need those.
{% endhint %}

{% hint style="info" %}
**Required** means an adapter is needed. Wireless Xbox Series X|S® and Xbox® One controllers need the [Xbox® Wireless Adapter](https://cronus.shop/products/xbox-one-wireless-adapter).
{% endhint %}

***

### <i class="fa-headset">:headset:</i> Headsets <a href="#headsets" id="headsets"></a>

Whether your headset works depends on how it connects, not on the headset itself.

| How your headset connects                                           | Works                                                                  |
| ------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| **USB dongle** — 2.4 GHz wireless receiver plugged into the console | <mark style="color:green;">**Yes**</mark>                              |
| **USB headset or DAC**                                              | <mark style="color:green;">**Yes**</mark>                              |
| **PS Link** — 2.4 GHz, on newer PlayStation® headsets               | <mark style="color:green;">**Yes**</mark>                              |
| **3.5 mm jack on the controller**                                   | <mark style="color:orange;">**Only with console Bluetooth® on**</mark> |
| **Bluetooth®, paired to the console**                               | <mark style="color:red;">**No**</mark>                                 |

#### Why Bluetooth® matters <a href="#why-bluetooth" id="why-bluetooth"></a>

Zen Link™ PS5® Native Mode requires **Bluetooth® → Off** in the console settings. Anything that relies on the console's Bluetooth® radio stops working at that point. Anything on its own 2.4 GHz link — a USB dongle or PS Link — is unaffected.

#### If your headset plugs into the controller <a href="#controller-jack" id="controller-jack"></a>

A headset in the controller's 3.5 mm jack needs the controller connected to the Zen over **USB**, not Bluetooth®. Even then it only works while the console's Bluetooth® is on.

{% hint style="info" %}
If you lose headset audio after setting up Zen Link™, a USB headset or a USB dongle is the reliable fix — most wireless gaming headsets ship with one.
{% endhint %}

***

### <i class="fa-gamepad">:gamepad:</i> Nintendo Switch® requirements <a href="#switch" id="switch"></a>

* Using a **TV dock**: the 15 V power supply must be connected, otherwise the Zen will not power on.
* Using **handheld mode**: a USB-C OTG adapter is required.
* Enable this on the console: **System Settings → Controllers and Sensors → Pro Controller Wired Communication → On**

***

### <i class="fa-list">:list:</i> Supported platforms <a href="#platforms" id="platforms"></a>

Cronus Zen™ supports all major consoles, official controllers, and most licensed third-party controllers.

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><strong>PlayStation®5</strong></td><td><a href="/pages/tcRCL2DA8mmoTThR4Nat">/pages/tcRCL2DA8mmoTThR4Nat</a></td><td><a href="/files/YgN9N4BPVbvkZXZE2FKe">/files/YgN9N4BPVbvkZXZE2FKe</a></td></tr><tr><td><strong>PlayStation®4</strong></td><td><a href="/pages/NdGIk0KMuC0GojSqwg2h">/pages/NdGIk0KMuC0GojSqwg2h</a></td><td><a href="/files/aZZREYit6Diwy1Cg3Snf">/files/aZZREYit6Diwy1Cg3Snf</a></td></tr><tr><td><strong>PlayStation®3</strong></td><td><a href="/pages/qJ1bX2Vnci3He2BQOovd">/pages/qJ1bX2Vnci3He2BQOovd</a></td><td><a href="/files/UR0SvfacVSZA85veV2n3">/files/UR0SvfacVSZA85veV2n3</a></td></tr><tr><td><strong>Xbox Series X|S®</strong></td><td><a href="/pages/rUIszzrV9ZONrvO9P4sm">/pages/rUIszzrV9ZONrvO9P4sm</a></td><td><a href="/files/S6KJqFaTWKsrCyFVMsZt">/files/S6KJqFaTWKsrCyFVMsZt</a></td></tr><tr><td><strong>Xbox® One</strong></td><td><a href="/pages/MJjWLP62FG3cvMCvwhgG">/pages/MJjWLP62FG3cvMCvwhgG</a></td><td><a href="/files/NMwkTLJSWUcJcyn0ltNy">/files/NMwkTLJSWUcJcyn0ltNy</a></td></tr><tr><td><strong>Xbox 360®</strong></td><td><a href="/pages/1pC7RJsW5JrSXFfrbWJL">/pages/1pC7RJsW5JrSXFfrbWJL</a></td><td><a href="/files/5CaoTYDofgYMtdLPEc9Y">/files/5CaoTYDofgYMtdLPEc9Y</a></td></tr><tr><td><strong>Nintendo Switch®</strong></td><td><a href="/pages/e8BzluOk7c8eoMJlqpbX">/pages/e8BzluOk7c8eoMJlqpbX</a></td><td><a href="/files/l9gbmryw3WXlGvCY9Pap">/files/l9gbmryw3WXlGvCY9Pap</a></td></tr><tr><td><strong>Nintendo® Wii</strong></td><td><a href="/pages/vq1DZ64cGMzZ5irR3lPp">/pages/vq1DZ64cGMzZ5irR3lPp</a></td><td><a href="/files/4NAH0ClPTxX33QMLAHTC">/files/4NAH0ClPTxX33QMLAHTC</a></td></tr><tr><td><strong>Windows® PC</strong></td><td><a href="/pages/Vml7Bql3XyV73Nq2CYqw">/pages/Vml7Bql3XyV73Nq2CYqw</a></td><td><a href="/files/me6SDKAZBUt0z1UZz3PF">/files/me6SDKAZBUt0z1UZz3PF</a></td></tr><tr><td><strong>Mice</strong></td><td><a href="/pages/EhjTgrfxYQqJnv0tSWd5">/pages/EhjTgrfxYQqJnv0tSWd5</a></td><td><a href="/files/A2E7LXIohlngmreCyeBY">/files/A2E7LXIohlngmreCyeBY</a></td></tr><tr><td><strong>Keyboard</strong></td><td><a href="/pages/3h9WYBloAHRFDeAITaEa">/pages/3h9WYBloAHRFDeAITaEa</a></td><td><a href="/files/yGB1TSnToAiaoPVAUJww">/files/yGB1TSnToAiaoPVAUJww</a></td></tr><tr><td><strong>Racing Wheels</strong></td><td><a href="/pages/IZVPY7iXZJbpkUkhcxsR">/pages/IZVPY7iXZJbpkUkhcxsR</a></td><td><a href="/files/A6rwtnP64sFeyA8y4nLl">/files/A6rwtnP64sFeyA8y4nLl</a></td></tr></tbody></table>


# USB

Set up your console and controller over USB.\
There are two ways to do it — pick the one that matches your situation.

| Variant       | When to use it                                                            |
| ------------- | ------------------------------------------------------------------------- |
| **Matched**   | Your controller matches your console. The simplest setup.                 |
| **Crossover** | You want to use a controller from a different platform than your console. |

***

### <i class="fa-desktop">:desktop:</i> Before you start <a href="#before" id="before"></a>

Both setups need the output protocol set first. Connect the Cronus Zen™ to a Windows® PC using the **PROG USB** port, then set the protocol for your console.

| Console              | Output Protocol                                   |
| -------------------- | ------------------------------------------------- |
| **PlayStation®5**    | See the dedicated PS5® setup guide                |
| **PlayStation®4**    | **Zen Studio → Device Panel →** `PlayStation 4/5` |
| **Xbox®**            | **Zen Studio → Device Panel →** `Xbox One X/S`    |
| **Nintendo Switch®** | **Zen Studio → Device Panel →** `Nintendo Switch` |
| PC                   | **Zen Studio → Device Panel →** `AUTO`            |

{% hint style="info" %}
Nintendo Switch® needs additional console settings. See the Nintendo Switch® page.
{% endhint %}

***

### <i class="fa-gamepad-modern">:gamepad-modern:</i> Matched <a href="#matched" id="matched"></a>

<figure><img src="/files/f2HaS14cyaWnKgfAoYgx" alt=""><figcaption><p>Xbox Series X|S® Controller to an Xbox Series X®</p></figcaption></figure>

Supports PlayStation®4, Xbox®, and Nintendo Switch® consoles with their own controllers.

{% stepper %}
{% step %}

#### Connect the Zen to the console

Use the **CONSOLE/PC USB** cable. The short cable is recommended.
{% endstep %}

{% step %}

#### Plug in the controller

Connect it to the Zen's **A1** USB port. After a few seconds the controller powers on and syncs with the Cronus Zen™.
{% endstep %}

{% step %}

#### Test it

Check in-game that all buttons work.
{% endstep %}
{% endstepper %}

***

### <i class="fa-shuffle">:shuffle:</i> Crossover <a href="#crossover" id="crossover"></a>

Use a controller from one platform on a console from another. Supports PlayStation®, Xbox®, and Nintendo Switch®.

Crossover needs two controllers connected at once:

<figure><img src="/files/YGKJGqec9eUMPpga0my3" alt=""><figcaption><p>PS5® DualSense™ to Xbox Series X|S®</p></figcaption></figure>

| Port   | Controller                                                                         |
| ------ | ---------------------------------------------------------------------------------- |
| **A1** | The controller that matches the console — the **authentication (AUTH) controller** |
| **A3** | The controller you actually want to play with                                      |

{% stepper %}
{% step %}

#### Connect the Zen to the console

Use the **CONSOLE/PC USB** port.
{% endstep %}

{% step %}

#### Connect the AUTH controller to A1

In the example above that is the Xbox® controller. It must stay connected the whole time you use the crossover controller.
{% endstep %}

{% step %}

#### Connect the crossover controller to A3

In the example above that is the PS5® DualSense™.
{% endstep %}

{% step %}

#### Test it

Check in-game that all buttons work.
{% endstep %}
{% endstepper %}


# Wireless

Set up your console and controller over Bluetooth® or a wireless adapter.

{% hint style="info" %}
Not sure whether your controller works wirelessly? See [Controller](/supported-devices/controller) compatibility first.
{% endhint %}

Every setup on this page comes in two forms:

| Variant       | When to use it                                                                                                                                |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| **Matched**   | Controller and console are from the same platform.                                                                                            |
| **Crossover** | Controller and console are from different platforms. Needs an **authentication (AUTH) controller** matching the console, connected to **A1**. |

***

### <i class="fa-xbox">:xbox:</i> Xbox® — Wireless Adapter <a href="#xbox" id="xbox"></a>

Any Xbox® controller can be used wirelessly on an Xbox Series X|S® or Xbox® One console, or on another supported console such as PS5®. Requires the [Xbox® Wireless Adapter](https://cronus.shop/products/xbox-one-wireless-adapter).

{% stepper %}
{% step %}

#### Connect the adapter

Plug the **Xbox® Wireless Adapter** into **A3**.
{% endstep %}

{% step %}

#### Connect the controller by cable

Plug the Xbox® controller into **A2** using a USB cable.
{% endstep %}

{% step %}

#### Remove the cable

Wait a few seconds, then unplug the USB cable from **A2**.

The adapter LED starts blinking. When it turns solid white, the controller is paired with the Zen.
{% endstep %}

{% step %}

#### For crossover only: add the AUTH controller

Connect a controller that matches your console to **A1**.

For example, on a PS5® with an Xbox Elite Series 2 controller: a DualSense™ goes into **A1**, and the Xbox® controller pairs to the adapter in **A3**.
{% endstep %}
{% endstepper %}

***

### <i class="fa-playstation">:playstation:</i> PlayStation® — Bluetooth® <a href="#playstation" id="playstation"></a>

{% stepper %}
{% step %}

#### Put the Zen into pairing mode

Press the **P2 Bluetooth® pairing button** on the Zen. The RGB LEDs flash blue.
{% endstep %}

{% step %}

#### Put the controller into pairing mode

Hold the button combination for your controller until the light bar flashes.

| Controller      | Hold                |
| --------------- | ------------------- |
| **DualShock®4** | **SHARE** + **PS**  |
| **DualSense™**  | **Create** + **PS** |

When pairing succeeds, both the controller light bar and the Zen RGB LEDs turn solid blue.
{% endstep %}

{% step %}

#### For crossover only: add the AUTH controller

Connect a controller that matches your console to **A1**.
{% endstep %}
{% endstepper %}

***

### <i class="fa-gamepad-modern">:gamepad-modern:</i> Switch Pro Controller — Bluetooth® <a href="#switch-pro" id="switch-pro"></a>

Any Nintendo Switch® Pro Controller can be used wirelessly on a Nintendo Switch® console, or on another supported console such as PS5®.

{% stepper %}
{% step %}

#### Put the Zen into pairing mode

Press the **P2 Bluetooth® pairing button** on the Zen. The RGB LEDs flash blue.
{% endstep %}

{% step %}

#### Put the controller into pairing mode

Press and hold the **SYNC** button on the Pro Controller until the player LEDs flash.

When pairing succeeds, the player LEDs and the Zen RGB LEDs stop flashing and stay solid.
{% endstep %}

{% step %}

#### For crossover only: add the AUTH controller

Connect a controller that matches your console to **A1**.
{% endstep %}
{% endstepper %}

***

### <i class="fa-gamepad">:gamepad:</i> Switch Joy-Con — Bluetooth® <a href="#joy-con" id="joy-con"></a>

Left and Right Joy-Con controllers pair individually.

{% stepper %}
{% step %}

#### Set the output protocol

Connect the Cronus Zen™ to a computer using the **PROG USB** port. In **Zen Studio → Device Panel**, set **Emulator Output Protocol** to `Nintendo Switch`.
{% endstep %}

{% step %}

#### Connect the Zen to the console

Use the **CONSOLE/PC USB** port to connect to the Switch® TV dock.

{% hint style="info" %}
Handheld mode without the TV dock requires a USB-C OTG adapter.
{% endhint %}
{% endstep %}

{% step %}

#### Put the Zen into pairing mode

Press the Zen's **P2 Bluetooth® pairing button** until the RGB LEDs flash blue.
{% endstep %}

{% step %}

#### Pair the Left Joy-Con

Press and hold the **SYNC** button on the Left Joy-Con until the player LEDs flash. After a few seconds the Zen RGB LEDs turn red and the Joy-Con vibrates.
{% endstep %}

{% step %}

#### Pair the Right Joy-Con

Press and hold the **SYNC** button on the Right Joy-Con. After a few seconds the Joy-Con vibrates.

<div align="left"><figure><img src="/files/pVAdhPfnTIs7CPAwNOzd" alt=""><figcaption></figcaption></figure> <figure><img src="/files/grgiOnOJPNknDSEJCwk1" alt=""><figcaption></figcaption></figure></div>
{% endstep %}
{% endstepper %}

{% hint style="info" %}
A powered USB hub with a 5 V auxiliary power input is recommended. Connect the hub to your PC or Mac, then connect the Zen to the hub.

This helps prevent PS5® disconnections, pairing failures, input lag, loss of vibration, and adaptive trigger issues.
{% endhint %}


# Downloads

### <i class="fa-globe">:globe:</i> Zen Studio Live <a href="#zen-studio-live" id="zen-studio-live"></a>

Zen Studio Live (ZSL) is the new browser-based version of Zen Studio. Everything is included and no download is required. Chrome is recommended, and most platforms are supported — iOS® is not.

{% embed url="<https://zenstudio.collectivemindsstore.com/>" %}

***

### <i class="fa-box-archive">:box-archive:</i> Zen Studio Legacy <a href="#zen-studio-legacy" id="zen-studio-legacy"></a>

Maintenance build of Zen Studio for older Zen firmware versions. Includes the 2.2.12 firmware update tool.

{% file src="/files/dzrUjLV9rlABegg9RutD" %}

***

### <i class="fa-arrows-rotate">:arrows-rotate:</i> Web Update Tool <a href="#web-update-tool" id="web-update-tool"></a>

Online firmware update tool for Chrome and Edge. Compatible with Windows®, macOS®, and Android® — USB OTG is required on Android®.

<a href="https://firmware.modcentral.ca/" class="button primary">Open the Web Update Tool</a>

***

### <i class="fa-box-archive">:box-archive:</i> Cronus Pro <a href="#cronus-pro" id="cronus-pro"></a>

{% file src="/files/kOkwj2454VvHmEbRStMt" %}

{% hint style="warning" %}
**Discontinued.** Final software release for CronusMAX, discontinued in 2019.\
No further updates will be provided.
{% endhint %}

***

{% hint style="danger" %}
Redistribution of these software, in whole or in part, is strictly prohibited.\
Unauthorized copying, sharing, or distribution may result in legal action.
{% endhint %}


# Cronus Zen™ Quick Start Guides

These are the official printed Quick Start Guides included with Cronus Zen, available in multiple languages for your convenience.

**All files are in PDF format:**

{% file src="/files/1YOByT3js7U3Nm2oCQPO" %}
:flag\_gb: **English**
{% endfile %}

***

{% file src="/files/9PxQAu7KrvhEUlkzeWee" %}
:flag\_fr: **French**
{% endfile %}

***

{% file src="/files/476pAjvr2MzAVP3qmXQs" %}
:flag\_de: **German**
{% endfile %}

***

{% file src="/files/qrenVenoEcPtzV69PKav" %}
:flag\_it: **Italian**
{% endfile %}

***

{% file src="/files/Dy7tTpmU5cyrC1Fq1lyr" %}
:flag\_br: **Brazilian Portuguese**
{% endfile %}

***

{% file src="/files/dcVaF918wP11w70lOR9b" %}
:flag\_es: **Spanish**
{% endfile %}

***


# What is Zen Studio Live

Zen Studio Live is the hub for everything Cronus Zen™. It runs in your browser, with nothing to install.

<figure><img src="/files/d0E6EtwrNkG0oZo31XKp" alt=""><figcaption><p>Zen Studio Live</p></figcaption></figure>

***

### <i class="fa-list-check">:list-check:</i> What you do here <a href="#what-you-do" id="what-you-do"></a>

* **Device settings** — configure how your Cronus Zen™ behaves
* **Slot contents** — manage what is programmed to each memory slot
* **GPC scripts** — build your own scripts
* **Firmware** — update your Cronus Zen™ to the latest version
* **Troubleshooting** — diagnose problems with the device or with a script


# Mouse and Keyboard panel

The **Mouse & Keyboard Settings** panel is divided into two working areas: **Mapping** and **Aim Settings**, with profile controls in the left sidebar and header, and file controls in the footer.

***

### Header

| Element          | Function              |
| ---------------- | --------------------- |
| Profile          | Names the `.zmk` file |
| In-Game Settings | Stores your own notes |
| Saved Profiles   | Saved `.zmk` files    |

***

### Sidebar

#### Select profile

Six selectable profiles:

* **HIP**
* **ADS**
* **AUX 1**
* **AUX 2**
* **AUX 3**
* **AUX 4**

**AUX** stands for *auxiliary*. These are additional mapping profiles that are activated with an assigned key or mouse button.

#### Button labels

Two options: **PlayStation** and **Xbox**. This switches which button icons are shown throughout the mapping rows.

#### Keyboard view

Toggle with **OFF** and **ON** positions. When set to **ON**, the mapping is displayed as a keyboard layout.

***

### Mapping

The **Mapping** panel contains four tabs:\
**Primary**, **Secondary**, **Movement** and **Controller**. **Copy** and **Paste** buttons are located below the panel.

{% tabs %}
{% tab title="Primary" %}
Binding rows arranged in two columns. Each row shows a controller button icon, the assigned mouse or keyboard input, and an **×** button to clear the binding.
{% endtab %}

{% tab title="Secondary" %}
Binding rows arranged in two columns. Each row shows a controller button icon, the assigned mouse or keyboard input, and an **×** button to clear the binding.
{% endtab %}

{% tab title="Movement" %}
Contains a single section: **Left Stick**.

**Direction bindings**

| Stick input | Bound key |
| ----------- | --------- |
| Up          | `W`       |
| Down        | `S`       |
| Left        | `A`       |
| Right       | `D`       |
| WLK         | `G`       |

Rows are cleared with the **×** button.

**Sliders**

| Label      | Row marker | Control                 |
| ---------- | ---------- | ----------------------- |
| Walk Scale | WLK        | Slider with value field |
| Analog Sim | SIM        | Slider with value field |

**Walk Scale** works together with the key assigned to the **WLK** row. While that key is held, the slider sets how slowly you move instead of running at full speed.

**Analog Sim** applies to the `W`, `A`, `S`, `D` direction bindings. It converts their digital on/off input into a gradual, analog-style output, similar to how an analog stick behaves.
{% endtab %}

{% tab title="Controller" %}
Contains three sections: **Left Stick**, **Right Stick** and **Triggers**.

Each dropdown remaps that input to a different key or button. Each **Deadzone** slider sets a custom deadzone for that input.

**Left Stick**

| Row      | Control                 |
| -------- | ----------------------- |
| Stick    | Dropdown — `None`       |
| Stick    | Dropdown — `None`       |
| Deadzone | Slider with value field |

**Right Stick**

| Row      | Control                 |
| -------- | ----------------------- |
| Stick    | Dropdown — `None`       |
| Stick    | Dropdown — `None`       |
| Deadzone | Slider with value field |

**Triggers**

| Row           | Control                 |
| ------------- | ----------------------- |
| Trigger       | Dropdown — `None`       |
| Deadzone      | Slider with value field |
| Trigger       | Dropdown — `None`       |
| Deadzone      | Slider with value field |
| {% endtab %}  |                         |
| {% endtabs %} |                         |

***

### Aim Settings

#### Tuning

| Setting       | Control       |
| ------------- | ------------- |
| Sensitivity   | Numeric field |
| X/Y Ratio     | Numeric field |
| Boost         | Numeric field |
| Smoothness    | Numeric field |
| Invert Y-Axis | Toggle        |

**Sensitivity** sets how far the reticle moves for a given mouse movement. Higher values aim faster.

**X/Y Ratio** sets the vertical sensitivity relative to the horizontal sensitivity. A value of `1.00` makes both axes equal.

**Boost** raises the output sent to the stick, so small mouse movements produce a stronger reticle movement.

**Smoothness** averages consecutive mouse samples to reduce jitter. Higher values feel steadier but respond more slowly.

**Invert Y-Axis** reverses the vertical aiming direction.

#### Translator

| Setting         | Control       |
| --------------- | ------------- |
| Deadzone X      | Numeric field |
| Deadzone Y      | Numeric field |
| Deadzone Shape  | Dropdown      |
| Analog Stickize | Numeric field |

**Deadzone X** and **Deadzone Y** compensate for the deadzone of the game, so the smallest mouse movement already registers.

**Deadzone Shape** sets the geometry of the deadzone to match the shape the game uses.

**Analog Stickize** scales the simulated stick output.

***

### Ballistic Curve

The curve editor plots input against output, with both axes scaled from `0` to `10k`. Curve points are shown as markers on the plot.

The horizontal axis is the incoming mouse movement, the vertical axis is the resulting reticle movement. A straight diagonal line from `0` to `10k` is a linear curve, where the output matches the input.

#### Selected point

| Element | Control |
| ------- | ------- |
| X       | X-Axis  |
| Y       | Y-Axis  |

**X** and **Y** set the exact position of the selected point, as an alternative to dragging it on the plot.

**Remove** deletes the selected point. The start and end point of the curve cannot be removed.

#### Editor toolbar

<table data-search="false"><thead><tr><th>Control</th><th>Function</th></tr></thead><tbody><tr><td>Info</td><td>Button</td></tr><tr><td>−</td><td>Zoom out</td></tr><tr><td>Fit</td><td>Fit view</td></tr><tr><td>+</td><td>Zoom in</td></tr><tr><td>Percentage</td><td>Current zoom level</td></tr><tr><td>↩️</td><td>Undo</td></tr><tr><td>↪️</td><td>Redo</td></tr><tr><td>📖</td><td>Shows Minimap</td></tr><tr><td>Copy</td><td>Copies the current ballistic curve</td></tr><tr><td>Paste</td><td>Inserts a ballistic curve</td></tr><tr><td>Reset</td><td>Resets the curve back to linear</td></tr><tr><td>Expand</td><td>Shows ballistic curve in fullscreen</td></tr></tbody></table>

***

### Footer

| Control                   | Function                                 |
| ------------------------- | ---------------------------------------- |
| Import                    | Loads a new `.zmk` file                  |
| Export                    | Saves the current `.zmk` file            |
| Defaults                  | Resets `.zmk` file                       |
| Reload                    | Reloads the page                         |
| Finalize → Save to Device | Saves the current `.zmk` file to the Zen |

{% hint style="info" %}
Only one `.zmk` file can be stored on the Zen at a time.
{% endhint %}


# Changelog (26)

{% hint style="info" %}
Newest first. For earlier releases, see Changelog [2025](/changelogs/changelog-26/changelog-25), [2024](/changelogs/changelog-26/changelog-24), [2023](/changelogs/changelog-26/changelog-23) and [2022](/changelogs/changelog-26/changelog-22).
{% endhint %}

#### <i class="fa-microchip">:microchip:</i> Cronus Zen™ firmware <a href="#firmware" id="firmware"></a>

<details open>

<summary><strong>v2.3.2</strong> — August 18, 2026</summary>

**Added**

* Trigonometry math functions: `sin`, `cos`, `tan`, `asin`, `acos`, and `atan2`
* Support for the unified Zen Link™ v1/v2 firmware

**Fixed**

* Clearing Bluetooth® did not fully clear or unpair a connected device
* DualShock®4 and DualSense™ light bar and rumble behaviour is now consistent between USB and Bluetooth®
* General bug fixes and improvements

</details>

<details>

<summary><strong>v2.3.1</strong> — July 9, 2026</summary>

**Fixed**

* Slot 8 readback issue

</details>

<details>

<summary><strong>v2.3.0</strong> — July 2, 2026</summary>

**Added**

* GameSir G7 Pro controller support
* BVARS, giving each slot **1024 extra 16-bit persistent values** for scripts
* High-resolution Mouse Ballistics Curve

**Improved**

* Audio handling
* Elite Series 2 controller detection
* General optimizations and minor bug fixes

</details>

***

#### <i class="fa-link">:link:</i> Zen Link™ <a href="#zen-link" id="zen-link"></a>

<details open>

<summary><strong>v2.1.4</strong> — August 20, 2026</summary>

**Added**

* A quick tap of the config button cycles the LED brightness: **dim → four steps → max → off → dim**. Dim is the default — see Brightness
* Holding the config button for more than five seconds enters BLE mode for changing the Wi-Fi settings. If the phone app is already running, restart it so it can detect the Zen Link™
* BLE mode can be left at any time by tapping the config button again. Nothing is changed unless new Wi-Fi settings are submitted

**Changed**

* The idle state is now a dim white LED, replacing the previous two white blinks

</details>

<details>

<summary><strong>v2.1.3</strong> — August 18, 2026</summary>

**Changed**

* Unified firmware for Zen Link™ v1 and v2

**Improved**

* LED status signals — see Status Light
* General stability

</details>

***

#### <i class="fa-code">:code:</i> Zen Studio Live <a href="#zen-studio-live" id="zen-studio-live"></a>

<details open>

<summary><strong>v1.0.8</strong> — August 22, 2026</summary>

**Added**

* Upload is blocked when the active script is blank or compiles to nothing, and the reason is named on the button and in the dialog
* Open device confirmations — erase memory, clear Bluetooth®, factory reset, restart — close themselves when the Cronus Zen™ disconnects
* `GPC3020` warning for `:` used as a statement terminator
* `GPC5143` error when combo state slots exceed the available capacity
* `GPC6038` warning for an empty combo

**Fixed**

* Undo in the OLED editor no longer leaves the selection pointing at an object that is gone
* OLED image import and nudge refuse an unresolved selection instead of quietly editing the Background layer
* Reads from the Cronus Zen™ retry on a transient integrity fault instead of failing outright
* A connection that fails partway through startup no longer leaves the app showing a ready device
* Folding of division, modulo, shift and clamp matches how the Cronus Zen™ evaluates them at runtime
* Float literals round the way Zen Studio rounds them
* The optimizer no longer drops side effects from the initializer of a removed `for` loop
* Combo steps stay correct after the optimizer rewrites a combo body
* Long flat operator chains count toward the expression nesting limit instead of slipping past it
* `sizeof()` array sizes resolve correctly, and an unusable array size is reported once instead of twice
* Device read timeouts no longer drift
* Formatting a script is now stable — running it again on formatted code leaves it unchanged

**Improved**

* Programming waits for the Cronus Zen™ to report erase completion before the first write
* Disconnects are detected right away and carry a reason, so nothing is sent to a device that is already gone
* General diagnostics, error handling, stability, and reliability

</details>

<details>

<summary><strong>v1.0.7</strong> — August 18, 2026</summary>

**Added**

* QR code objects in the OLED Message Screen editor, re-editable after creation, with error correction and size options and a warning when a code will not fit the screen
* Position anchor grid to snap any OLED object to one of nine spots on the canvas
* Open tabs now talk to each other: when another tab is holding the Cronus Zen™, the in-use indicator can alert that tab with a title flash, a toast and an optional browser notification
* Device Settings entry in the Device Management sidebar menu
* Single-tab device lock setting for advanced users
* Publish date shown on script cards in the Script Library
* Combined GamePack sort choices in the slot list
* Right-click a Device Monitor cell to copy its raw value
* Automatic retry when slot programming is interrupted mid-write, with a cancellable wait
* Zen Link™ status indicator in the status bar, with a popover showing the link's state, its own firmware version and serial, and a refresh button
* Version history for Script Library scripts: **Details** and **History** tabs, switching to any earlier release, and a banner with **Go to latest** when viewing an older one
* Stack budget meter in the Output panel, showing how much of the Cronus Zen™'s stack a script's variables and runtime cost use
* Evaluate an expression or convert a number's radix straight from the editor's right-click menu
* Editor settings to turn quick suggestions and parameter hints off
* Live "too narrow" warning when the picture-in-picture Device Monitor is sized below what it can render
* Trigonometry built-ins on the Zen32: `sin`, `cos`, `tan`, `asin`, `acos`, and `atan2` — they take and return degrees, with values scaled by 10000

**Fixed**

* GamePack options with more than one choice are now treated as multiple choice
* Script Library upload rejects blank content instead of failing later
* Attached Devices popover opened on the wrong surface in some places
* Editor Settings dialog now keeps full height
* SPVAR editor button labels and wording
* Nintendo Switch® was not always detected as the connected console
* MAX Combo defaulted its controller to PS3® instead of PS5®
* **Push** and **Pull** labels in the editor's git bar were unreadable
* Very large scripts could break the editor instead of loading with reduced features
* Scripts saved as UTF-16 are now opened and decoded correctly, and files that are not source are rejected on every open path
* **Restore File Access** kept asking after being declined
* Merge conflicts are entered reliably, and conflict markers glued to code are put back on their own lines
* A stalled git remote request now fails visibly instead of hanging
* `set_ps4_lbar` took its colour parameters in the wrong order
* `wait()` in an expression now reports an error instead of crashing the compiler
* Calls with the wrong number of arguments to a built-in are reported instead of silently dropped
* Variable slot usage reported the number of declarations instead of the slots actually used
* **Go to definition** and **Rename** now anchor on the declaration's name
* Formatter output stays plain ASCII and no longer leaves minified scripts on one line

**Changed**

* Closing or reloading the page is now blocked while programming or updating the device
* The **Update Available** banner can no longer be dismissed, and update notices are much harder to miss

**Improved**

* Attached Devices popover reworked into a tree grid that shows how devices are connected
* Editor dialogs now use Zen Studio Live's own window chrome, grow to fit their content, and wrap long text
* Slots are verified against the Cronus Zen™ after programming, and slot backups check the size read back against the slot's own metadata
* Connecting now gives up cleanly instead of hanging when the Cronus Zen™ stops responding
* Clearing Bluetooth® no longer asks you to type a confirmation, and the remaining confirmations are quicker to get through
* Device Monitor opens at the width needed for the PS5® adaptive trigger columns
* Output panel filter badges now match what is actually filtered
* Data section summary counts strings, images, and adaptive trigger tables as items
* GamePack sort labels reworded to plain language
* General diagnostics, error handling, stability, and reliability

**Removed**

* Legacy `PVAR_1` to `PVAR_16` from the Zen and Zen32 built-ins

</details>

<details>

<summary><strong>v1.0.6</strong> — July 17, 2026</summary>

**Added**

* Ternary conditional operator (`condition ? a : b`) in scripts
* GPC2117 error for a ternary missing its `:`
* GPC4032 error when a ternary is used as a standalone statement
* **Fix** and **Fix All** buttons in the compiler output panel apply available quick fixes directly
* Hovering an enum member or define now shows its resolved value

**Fixed**

* Saved M\&K profiles now store and restore ballistic curves correctly
* Device Settings no longer shifts layout while values load from the Cronus Zen™
* Restarting the Cronus Zen™ no longer loses settings applied just before the restart
* Incorrect parameter-limit errors on some built-in functions
* Fallthrough warning no longer appears on empty switch cases
* Find References and symbol highlighting now respect scope and symbol type
* Stray text cursor no longer appears over icons and read-only text

**Improved**

* Firmware update wizard retries a failed update automatically, with the option to cancel while it waits to retry
* Device settings changes apply without restarting the Cronus Zen™
* Cronus Zen™ commands now retry automatically on recoverable communication errors
* Sending a Library script directly to a slot no longer leaves its tab behind after a reload (editing the script keeps it)
* Device Management moved into the sidebar Tools group
* General diagnostics, error handling, stability, and reliability

</details>

<details>

<summary><strong>v1.0.5</strong> — July 12, 2026</summary>

**Added**

* Every successful compile now shows slot, stack, and bytecode usage against your Cronus Zen™'s maximum limits
* Lightbulb fixes are now driven by the real parser, allowing edits to land precisely without overlaps or duplicate suggestions
* New fixes cover unused declarations, switch fallthrough, assignments inside conditions, unconsumed return values, and single or multi-variable `for` declarations
* Hover, rename, references, cursor targeting, quickfixes, and the Problems panel now align correctly in scripts containing accents, symbols, or other non-ASCII text
* The bug report dialog can now capture detailed Cronus Zen™ traffic for the current session

**Fixed**

* Momentary device-state races no longer cause false "connection lost" disconnects
* The Build button can no longer remain stuck after a failed compile
* Tab menus now target the correct tab, Git files restore using the correct language, close buttons remain visible, and dialogs correctly handle Escape and Enter
* Keyboard shortcuts no longer trigger while typing outside the editor
* Invalid switch-case values no longer disrupt the remaining case labels
* Multiline strings no longer shift diagnostic line numbers
* Outline and analytics panels clear correctly when switching to an empty tab
* Long usernames no longer break profile layouts on the Library page

**Improved**

* Script flashing and device reads are now much more reliable when the Cronus Zen™ streams live data during an operation, preventing silent timeouts and corrupted reads
* <kbd>Ctrl</kbd> + <kbd>S</kbd> now detects files changed outside the editor and handles them safely
* Unsaved work is preserved when moving tabs between editor panes
* Workspace saving now recovers gracefully when browser storage fails and flushes when switching away from the tab
* Changes to the auto-save setting now apply immediately without requiring a reload
* Messages for `REMAP_NULL`, switch-case traps, memory limits, and other diagnostics are now clearer and more actionable
* Failed compiles now show an accurate summary that resets correctly before the next build
* When a new update becomes available, Zen Studio Live now prompts you to reload instead of failing on stale application files
* Broad reliability improvements across diagnostics, error handling, saving, tabs, and Cronus Zen™ communication

</details>

<details>

<summary><strong>v1.0.4</strong> — July 9, 2026</summary>

**Fixed**

* Firmware updater getting stuck after downloading the firmware

</details>

<details>

<summary><strong>v1.0.3</strong> — July 9, 2026</summary>

**Added**

* GPC3012–GPC3017: const-array narrowing warnings
* New warnings for zero-folding division/modulo and "glued" negative numbers such as `x -1`
* Restart your Zen directly from the app. Zen Studio Live also restarts the device automatically after writing output, PS4®, or Remote Play settings
* Capture bindings by pressing a key, mouse button, or controller button on your connected device
* Name mapped buttons inline. Labels save with your profile and `.zmk` exports
* Exclude specific devices from capture, with quick-add options from the device tiles
* Save, export, download, and profile actions now show confirmation toasts
* Top Scripts on the Home page are now votable, with confirmation before each vote is submitted

**Fixed**

* Duplicate tabs, cancelled-save tab closing, clipped hover tooltips and suggestions in split view, and a startup crash caused by duplicated tabs
* Compile results now stay with the tab that compiled them, and stale compiles can no longer overwrite another tab's results
* Diagnostic positions are now correct in scripts containing non-ASCII characters, including accents and emoji
* The upload dialog now shows the correct active file name
* Incorrect slot names in empty-readback errors, Flash All confirmation with no pending changes, and header wrapping
* Live BALC dots, button-label length caps, device-tile layout issues, and label caption clipping
* The PS5® ADT column font size now matches the rest of the monitor
* The downvote tally is now hidden while vote buttons remain available
* A Script Library upload issue that could occur in Brave
* Failed `addr()` and 2D const-array lookups now report diagnostics instead of returning wrong values
* `sizeof(image)` now returns the element size, `1`

**Improved**

* 2D const-array index, address bounds, and single-bracket access are now validated
* Data-section address arguments are now checked against section size
* Built-in argument limits now error instead of slipping through
* Stray `;` expressions now error with **Expected expression** instead of compiling as `0`
* Zero-size array aliasing now warns with GPC6031; zero-size arrays without an alias target now error
* Deeply nested scripts are now caught instead of silently overflowing
* On 16-bit devices, constant math now truncates correctly to match device behavior
* Uppercase `0X` hexadecimal notation is now accepted
* Flashing and firmware update communication has been reworked to reduce write failures and stalls
* Program is now always available when a connected, supported device is ready
* Free-draw strokes are faster and no longer drop pixels during quick movements
* The server status indicator now reflects real request outcomes, reducing false offline or online states
* Startup behavior and library loading

</details>

<details>

<summary><strong>v1.0.2</strong> — July 4, 2026</summary>

**Added**

* Work with two side-by-side editor panes for easier comparison, editing, and script navigation
* Move tabs freely between editor panes, or use the drag-to-dock overlay to split or move a tab
* Tab context menus and editor strip buttons now include split options
* Dropping a file that is already open in the other pane now jumps to that tab instead of opening a duplicate
* Pane layout and split ratio now persist across reloads
* If the built-in firmware updater gives you trouble, a clearly labeled link now takes you to the official online updater after handing your Zen over cleanly
* The connected-device area now shows when newer firmware is available, plus a once-per-session heads-up
* Your M\&K profile and ballistic curves now survive device disconnects. Unsaved changes now trigger a **Save** / **Discard** prompt
* If your Zen is already being used by another tab or app, Zen Studio Live now shows a clear **in use elsewhere** state

**Fixed**

* Constants now resolve correctly inside `data()` section values
* Const-array usage is no longer incorrectly reported as unused
* `addr()` on jagged const arrays now resolves element addresses correctly
* Hex escapes from `\x80` to `\xFF` now emit as single bytes
* Enum members and variables now use the correct symbol icons

**Improved**

* General editor stability
* Workspace-restore reliability
* Cursor detection inside comments and strings is now more accurate
* The updater now handles busy devices, device handoff, disconnects during update, and **Try Again** recovery more reliably
* The success screen now shows the installed version, outdated firmware states show the available update, and rejected updates show the correct reconnect fix
* GitHub sign-in now completes inside its popup instead of reloading the whole app
* Flashing a new script to a slot no longer inherits leftover values from the previous script
* Broad reliability and error-handling improvements across device connections, the Script and GamePack Library, and uploads

**Removed**

* `get_mk` and `set_mk` are no longer supported

</details>

<details>

<summary><strong>v1.0.0</strong> — July 2, 2026</summary>

**Added**

* Truly cross-platform: works anywhere a Chromium-based browser runs, including Windows®, macOS®, Linux®, and ChromeOS™
* Full Zen device support in the browser: connect your Zen directly from the page, program slots, use live Device Monitor, configure GamePacks, adjust M\&K settings, run guided firmware updates, and reconnect automatically
* Fast, modern editor: snappy code editing and compiling directly in the browser, with built-in Git version control for your scripts
* Built-in OLED Studio: design 128×64 OLED screens with layers, shapes, text from any font, image import with dithering, and one-click GPC export. This is not available in the desktop app

</details>

***

#### <i class="fa-box-archive">:box-archive:</i> Zen Studio Legacy <a href="#zen-studio-legacy" id="zen-studio-legacy"></a>

<details open>

<summary><strong>v1.7.0 Build 7</strong> — July 2, 2026</summary>

**Added**

* Launcher for Zen Studio Live

**Improved**

* Disables Programmer and M\&K tab for firmware higher than 2.2.14

</details>


# Changelog (25)

{% hint style="info" %}
Newest first. See also Changelog [2026](/changelogs/changelog-26), [2024](/changelogs/changelog-26/changelog-24), [2023](/changelogs/changelog-26/changelog-23) and [2022](/changelogs/changelog-26/changelog-22).
{% endhint %}

### <i class="fa-microchip">:microchip:</i> Cronus Zen™ firmware <a href="#firmware" id="firmware"></a>

<details open>

<summary><strong>v2.2.14</strong> — November 5, 2025</summary>

**Added**

* Zen Link™ PS5® Native Mode

**Fixed**

* Xbox® One haptics functionality
* Xbox® One Wi-Fi dongle connectivity issues

**Improved**

* PS5® system support
* General stability and performance

</details>

<details>

<summary><strong>v2.2.12</strong> — June 17, 2025</summary>

**Added**

* DualSense™ haptics translation to rumbles
* Wi-Fi channel support for Zen Link™ UDP statistics

**Fixed**

* Factory erase at startup
* DualSense™ touchpad issues over Bluetooth®
* DualSense™ compatibility with A3 Output Protocol on PS4®
* GamePack flash race condition
* DualSense™ audio issues in forced PS4® emulation on PC
* DualSense™ crossover audio on Xbox®
* DualShock®4 Bluetooth® conflict when a DualSense™ is in A1

**Improved**

* DualSense™ handling and stability
* Consistent haptics-to-rumbles translation in GPC and Device Monitor
* Haptics to rumbles sent only to cross-gaming pads (Xbox® One / DualShock®4)

</details>

<details>

<summary><strong>v2.2.11</strong> — April 3, 2025</summary>

**Added**

* Zen Link™ HTTP server support

**Fixed**

* Haptics are now blocked when using mouse and keyboard
* Haptics are now redirected to a secondary DualSense™ or DualSense Edge™

**Improved**

* Various bug fixes and stability improvements

</details>

***

### <i class="fa-link">:link:</i> Zen Link™ <a href="#zen-link" id="zen-link"></a>

<details open>

<summary><strong>v0.9.9.14</strong> — November 5, 2025</summary>

**Added**

* PS5® Native Mode support

**Fixed**

* Incorrect Wi-Fi settings after a firmware change

**Improved**

* PS5® connectivity and firmware selection handling
* General bug fixes and performance

</details>

***

### <i class="fa-desktop">:desktop:</i> Zen Studio <a href="#zen-studio" id="zen-studio"></a>

<details open>

<summary><strong>v1.6.1 Build 82</strong> — November 5, 2025</summary>

**Added**

* Missing `combo_*` function names added to the prohibited function names

**Fixed**

* `ps5adt` list `sizeof` in the compiler
* Function fall-through issue
* Find/Replace text boxes

**Improved**

* The "No device found" dialog now opens the online web updater
* ZenLinkConfigurator now supports dual firmware (Remote Play and PS5® Native Auth) with a redesigned wizard

</details>

<details>

<summary><strong>v1.6.1 Build 77</strong> — June 17, 2025</summary>

**Added**

* Zen Link™ online manual link
* `sizeof` support for `uint16`, `int32`, `ps5adt`, `image`, and `string`
* DualSense™ haptics display in Device Monitor

**Fixed**

* Missing DualSense™ icon in Device Monitor
* `combo_step_time_left` syntax highlighting
* Offsets table for images and strings
* Binary operator precedence

**Improved**

* Online Library UI and API
* General UI responsiveness

</details>

<details>

<summary><strong>v1.6.1 Build 20</strong> — April 3, 2025</summary>

**Fixed**

* Race condition when an outdated GamePack is on flash and no cached data is available
* Loading GamePack PVARs
* Race condition when resetting script PVARs
* Minor bugs

**Improved**

* Default file type when importing a mouse and keyboard profile is now `.zmk`

**Removed**

* CmUpdateTool removed from the Tools menu (no longer supported)

</details>


# Changelog (24)

{% hint style="info" %}
Newest first. See also Changelog [2026](/changelogs/changelog-26), [2025](/changelogs/changelog-26/changelog-25), [2023](/changelogs/changelog-26/changelog-23) and [2022](/changelogs/changelog-26/changelog-22).
{% endhint %}

### <i class="fa-microchip">:microchip:</i> Cronus Zen™ firmware <a href="#firmware" id="firmware"></a>

<details open>

<summary><strong>v2.2.10</strong> — December 19, 2024</summary>

**Fixed**

* Minor bugs

</details>

<details>

<summary><strong>v2.2.9</strong> — December 18, 2024</summary>

**Added**

* Haptics detection (on/off) in `get_rumble`. Use identifier `26` for left and `27` for right

**Fixed**

* DualShock®4 output protocol issue
* Xbox® One wireless dongle issue
* Factory reset issue

</details>

<details>

<summary><strong>v2.2.8</strong> — December 4, 2024</summary>

**Added**

* Support for GameSir G7 SE

**Fixed**

* Touchpad issue
* Touchpad fingers issue
* Output protocol cycle 16 ms issue
* Rumble not resetting to `0`
* Zen Link™ Remote Play connection starting without connected devices
* Xbox® One polars issue
* PS5® legacy rumbles issue

</details>

<details>

<summary><strong>v2.2.7</strong> — October 22, 2024</summary>

**Added**

* `ZENLINK_STATUS` constant for `get_info` — returns `1` if connected, `3` if connected and linked to a PS5®

**Fixed**

* `PS5_MUTE` with `event_press` and `event_release`
* Legacy rumbles when Zenet is connected

**Improved**

* Faster flash content synchronization
* PS5® driver CPU usage

</details>

<details>

<summary><strong>v2.2.6</strong> — September 26, 2024</summary>

**Improved**

* Device synchronization

</details>

<details>

<summary><strong>v2.2.5</strong> — September 18, 2024</summary>

**Added**

* Groundwork for the upcoming Cronus Zen™ Marketplace integration

</details>

<details>

<summary><strong>v2.2.4</strong> — September 5, 2024</summary>

**Added**

* Zen Link™ support

**Fixed**

* Minor issues

</details>

<details>

<summary><strong>v2.2.3</strong> — April 22, 2024</summary>

**Fixed**

* `set_ps4_lbar` now uses BRG order, matching the Cronus player LED order and the manual
* DualShock®4 Bluetooth® lightbar
* Various bugs related to Remote Play, Bluetooth®, audio, haptics, RGB, and rumbles
* Various mouse and keyboard bugs
* Various DualSense Edge™ bugs
* Various Device Monitor bugs
* Crossover of legacy rumbles and lightbar to a DualSense™ from a console other than a PS5®
* Xbox® Share button spamming from DualSense™ and DualShock®4 gyros
* Xbox® Share button always registering as pressed on connection for Series X and the Adaptive Controller

**Improved**

* Sony to Xbox® audio crossover process when plugging in headphones

</details>

***

### <i class="fa-desktop">:desktop:</i> Zen Studio <a href="#zen-studio" id="zen-studio"></a>

<details open>

<summary><strong>v1.6.1 Build 7</strong> — December 19, 2024</summary>

**Fixed**

* Minor bugs

</details>

<details>

<summary><strong>v1.6.1 Build 1</strong> — December 4, 2024</summary>

**Added**

* <kbd>Alt</kbd> or <kbd>Ctrl</kbd> + <kbd>↑</kbd> / <kbd>↓</kbd> gesture to move highlighted code blocks
* <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>Z</kbd> as an alternate redo shortcut
* <kbd>Ctrl</kbd> + <kbd>/</kbd> to comment or uncomment lines and selections
* <kbd>Ctrl</kbd> + <kbd>Q</kbd> to copy a line or selection
* <kbd>Ctrl</kbd> + <kbd>'</kbd> for the commenting gesture
* Bitwise assignment operators
* Combos and Functions navigation in the GPC editor
* Beta team listed in the About section
* License agreement on setup and at Zen Studio startup

**Fixed**

* Focus issue in the GPC script Find/Replace dialog
* Device Monitor label and selection-copy issues
* Date being cut off in the Online Library
* Left/right arrow issue when selecting text
* Block comment `/* */` functionality
* Script hyperlink color in the Online Library
* Programming tab hanging after a factory erase
* JavaScript error in YouTube videos during setup
* Zen Studio closing after the PC woke from sleep
* Backup & Restore closing unexpectedly on first use
* Small bug in Combos navigation
* WebHID issue by resetting the device when exiting due to Marketplace detection
* DualShock®4 output protocol issue

**Improved**

* Compiler: removed the deprecated 16-bit option
* Code movement now allows moving single lines
* Cursor positioning when using left/right arrow keys on selections
* Cursor positioning when using up/down arrow keys on selections
* Scrolling to the cursor when using arrow keys on selections
* Folding marker colors
* Foreground color for strings
* Device reset behavior after changing the output protocol
* GOTO window in the editor
* Device handling on output protocol change — no reset needed
* Combos and Functions lists are now sorted by name
* License information in the About section

**Changed**

* An internet connection is now mandatory

</details>

<details>

<summary><strong>v1.6.0 Build 90</strong> — October 22, 2024</summary>

**Fixed**

* Various UI issues

**Improved**

* Synchronization is now always executed to ensure content has not been tampered with
* Pressing <kbd>Enter</kbd> while searching in the GPC editor now jumps to the next occurrence
* Zen Studio now closes when the PC returns from sleep mode, due to USB communication re-sync

</details>

<details>

<summary><strong>v1.6.0 Build 63</strong> — September 30, 2024</summary>

**Fixed**

* `--` operation issue
* MAX Rec and MAX Mapper not being able to read inputs after the first run
* UI for Programmer tab readback
* `++` and `--` with a variable index

</details>

<details>

<summary><strong>v1.6.0 Build 56</strong> — September 26, 2024</summary>

**Added**

* Synchronization message when reading back slots
* Cached slot integrity is now checked, and reloaded from the device if the check fails

**Fixed**

* Race condition when an old version of a GamePack is on flash and Zen Studio starts synchronization because no cached data is available
* Missing plugin folder in `%appdata%\ZenStudio`
* The script upload page no longer opens if the script has errors
* Issue with `sub++` and `add++`

**Improved**

* Main window minimum height raised to 650
* User stats font size
* Message window display on warnings and errors

</details>

<details>

<summary><strong>v1.6.0 Build 37/38</strong> — September 18, 2024</summary>

**Added**

* Groundwork for the upcoming Cronus Zen™ Marketplace integration

**Fixed**

* Online Library reloading issue on device arrival
* Minor UI issues

</details>

<details>

<summary><strong>v1.6.0 Build 16/19</strong> — September 9, 2024</summary>

**Fixed**

* Minor issues

</details>

<details>

<summary><strong>v1.6.0 Build 13</strong> — September 5, 2024</summary>

**Added**

* Loading of pre-compiled scripts as `.bin` or `.gbc`
* Zen Link™ support
* ZenLinkConfigurator included in the installer
* Marketplace support

**Fixed**

* Flash size display issue
* Saving a config not setting the GamePack flag properly
* Various UI and behind-the-scenes issues

</details>

<details>

<summary><strong>v1.5.0 Build 76</strong> — April 22, 2024</summary>

**Added**

* `ADT_SETX` opcode
* Copy-to-clipboard buttons for PS5® adaptive triggers in Device Monitor
* Selected text in the GPC editor is now pasted into the find field when the search popup is invoked
* `XB1_SHARE` and `XB1_SYNC` added to MAX Combo capture
* GPC code now shows `XB1_SHARE` when captured
* DualSense™ adaptive trigger packet output to Device Monitor
* Top menu **Tools** option to open the online Web Update Tool

**Fixed**

* Code folding not working when a script ends with `}` instead of a newline, space, or tab
* A crash when attempting to open a file that does not exist, for example from Recent Files
* Online Library expand button when only three lines are used
* Output combo box value when PS5® is selected
* Adaptive triggers being inverted in Device Monitor

**Changed**

* `XB1_SHARE` is now enum `27`
* PS5® adaptive trigger constants have been relabeled

**Improved**

* Communication optimizations
* General stability
* Device tab text cleaned up and rephrased
* Highlight property adjusted for inputs and outputs in Device Monitor
* Many visual fixes

</details>


# Changelog (23)

{% hint style="info" %}
Newest first. See also Changelog [2026](/changelogs/changelog-26), [2025](/changelogs/changelog-26/changelog-25), [2024](/changelogs/changelog-26/changelog-24) and [2022](/changelogs/changelog-26/changelog-22).
{% endhint %}

### <i class="fa-microchip">:microchip:</i> Cronus Zen™ firmware <a href="#firmware" id="firmware"></a>

<details open>

<summary><strong>v2.2.2</strong> — December 11, 2023</summary>

**Fixed**

* DualShock®4 Bluetooth®

</details>

<details>

<summary><strong>v2.2.1</strong> — December 1, 2023</summary>

**Fixed**

* PS5® controller built-in mic and headset mic (USB only)

</details>

<details>

<summary><strong>v2.2.0</strong> — November 30, 2023</summary>

**Added**

* Upgraded support for the PlayStation®5 console
* Upgraded USB support for DualSense™ controllers
* New Bluetooth® support for DualSense™ controllers
* Support for Zen Studio v1.5.0 and above

</details>

<details>

<summary><strong>v2.1.0 Beta.68</strong> — May 12, 2023</summary>

**Added**

* Support for the PS5® console
* Support for DualSense™ controllers (USB)

**Improved**

* Various optimizations

</details>

<details>

<summary><strong>v2.1.0 Beta.50</strong> — March 20, 2023</summary>

**Added**

* Support for Hori OCTA

**Fixed**

* PS4® and PS5® mirror passing through input in error
* PS5® gyros in Remote Play

</details>

<details>

<summary><strong>v2.1.0 Beta.47</strong> — February 3, 2023</summary>

**Added**

* DualSense Edge™ controller support (USB only)

</details>

***

### <i class="fa-desktop">:desktop:</i> Zen Studio <a href="#zen-studio" id="zen-studio"></a>

<details open>

<summary><strong>v1.5.0 Build 24</strong> — November 30, 2023</summary>

**Added**

* `zenstudio://` URL hook — see the URL Hooks page for details
* Analog Sim for mouse and keyboard (HIP Movement Control)
* PS5® output protocol
* Support for the `PS5_MUTE` button via `get_val(PS5_MUTE)` and `set_val(PS5_MUTE, 100)`
* Splash screen at startup

**Fixed**

* Saving a slot failing because the device was disconnected
* Slot synchronization issue
* Race condition when opening a GPC script
* Performance issues with the code folding feature
* Issue causing the device to be considered unresponsive
* Potential endless loops when using a `do while` loop
* Issues compiling 32-bit multi-dimensional arrays
* Settings issue

**Improved**

* Various GUI improvements
* Updated to .NET Framework 4.8.1
* Updated to TLS 1.3

</details>

<details>

<summary><strong>v1.3.1 Beta 46</strong> — May 12, 2023</summary>

**Added**

* Flyout for DualSense™ adaptive triggers in Device Monitor
* PS5® input and output labels
* New communication library

**Fixed**

* "Device not responding" issues
* Zen Studio device synchronization issue
* Various visual bugs
* GPC compiler: `const int32` multi-dimensional array issue
* GPC compiler: various typos

**Improved**

* Dozens of code optimizations

</details>

<details>

<summary><strong>v1.3.1 Beta 11</strong> — March 20, 2023</summary>

**Fixed**

* Windows® 11 GUI inconsistencies
* Wrong timestamp playback issue in MAX Rec
* Importing a CFG when a GamePack update is available
* Missing PS5® case when setting the remote slot option
* Favorites GamePack list not populating
* GamePack update notification issue
* Nested `switch` statements
* An incorrect warning when using a `return` statement in a `switch` case instead of a `break`
* A crash in certain cases
* An issue when using a `switch` inside a `for` loop
* `get_ledx` issue
* No error was raised for bad `combo_*` usage in assignment conditions
* Crash when `if`, `else if`, or `else` was the last statement in a `switch` case
* Typo in the redefinition error message

**Removed**

* CronusMAX Plus GamePacks

</details>


# Changelog (22)

{% hint style="info" %}
Newest first. See also Changelog [2026](/changelogs/changelog-26), [2025](/changelogs/changelog-26/changelog-25), [2024](/changelogs/changelog-26/changelog-24) and [2023](/changelogs/changelog-26/changelog-23).
{% endhint %}

### <i class="fa-microchip">:microchip:</i> Cronus Zen™ firmware <a href="#firmware" id="firmware"></a>

<details open>

<summary><strong>v2.1.0 Beta.43</strong> — November 10, 2022</summary>

**Fixed**

* Xbox® Wireless Adapter bug

</details>

<details>

<summary><strong>v2.1.0 Beta.41</strong> — November 2, 2022</summary>

**Fixed**

* Back button issue

</details>

<details>

<summary><strong>v2.1.0 Beta.35</strong> — July 12, 2022</summary>

**Added**

* `get_ipolar(POLAR, RADIUS/ANGLE)`

**Fixed**

* `get_polar`
* Police lights bug
* Bug in `stickize` for analog indexes
* Various minor fixes

</details>

<details>

<summary><strong>v2.1.0 Beta.22</strong> — May 2, 2022</summary>

**Added**

* Support for PS5® DualSense™ volume control
* `GPC_OP_SWITCH` in the interpreter
* Bluetooth® Clear function — see the Device tab in Zen Studio

**Fixed**

* Elite Series 2 paddles mapped with the Xbox® now work with the new controller firmware
* PS5® DualSense™ mic in crossover
* A PS5® DualSense™ in A2/A3 with no headset would not pull audio from a DualShock®4 v2 in A1 with a headset
* A DualShock®4 over Bluetooth® always switching the Switch emulator to audio mode even with no headset
* Build & Run issue
* `GPC_OP_GPOLAR` now works correctly
* `GPC_OP_GRUMBLE` now works correctly

**Improved**

* Boosted Xbox® One audio volume to DualShock®4 and DualSense™ controllers

{% hint style="warning" %}
With the new Elite Series 2 controller firmware, GPC scripts can no longer control the paddles independently. To keep using GPC scripting for the paddles, revert the Elite Series 2 controller firmware to 4.8.1908.0.
{% endhint %}

</details>

<details>

<summary><strong>v2.1.0 Beta.16</strong> — February 25, 2022</summary>

**Changed**

* GPC errors no longer display `E2XXX` error codes. You are now returned to slot 0, where the error message is displayed. The Zen no longer crashes, and you can continue playing without resetting

**Fixed**

* Xbox® One Share button spamming when using mouse and keyboard

**Improved**

* General stability

</details>

<details>

<summary><strong>v2.1.0 Beta.6</strong> — February 11, 2022</summary>

**Added**

* `ResetDevice` command
* Navcon and Joy-Con Left activation for the mouse and keyboard config

**Fixed**

* `random(min, max)` now also works when called as `random(max, min)`
* Joy-Con Left not working with mouse and keyboard over Bluetooth®
* `brtime` being capped to `INT16_MAX`

**Improved**

* Stability

</details>

<details>

<summary><strong>v2.1.0 Beta.1</strong> — February 7, 2022</summary>

**Added**

* Official PS Remote Play support (PS5® and PS4®)
* New 32-bit GPC interpreter
* Support for the PowerA Fusion Pro 2 Xbox Series X|S® controller
* Support for the PowerA Spectra Xbox Series X|S® controller
* Support for the Razer Wolverine V2 Xbox Series X|S® controller
* Path to rumble on Nintendo Switch® controllers from the interpreter
* Toggle to activate mouse and keyboard profiles
* PS5® DualSense™ adaptive triggers support with official PS Remote Play
* Xbox® One Share button is now blocked for a non-1914 controller

**Fixed**

* Several Xbox® One controller issues
* DualShock®4 audio is now supported over Bluetooth®
* Xbox® One audio on Nintendo Switch®

**Improved**

* Support for 2-channel mics on the PS4®
* Mouse and keyboard detection

</details>

***

### <i class="fa-desktop">:desktop:</i> Zen Studio <a href="#zen-studio" id="zen-studio"></a>

<details open>

<summary><strong>v1.2.1 Beta 119</strong> — November 2, 2022</summary>

**Added**

* `ASCII_OPEN_BRACKET` constant
* **Tools → Restart Zen Studio**
* **Tools → Reset Zen Studio**, which deletes all files in `AppData\Roaming\CronusZenBeta`

**Fixed**

* Multidimensional array issue
* GPC Guide link
* Windows® 11 GUI issue

**Changed**

* The app exit command sent via `SendMessage` moved to value `99`
* `SET_POLAR` restored to its original behavior, while `GET_POLAR` now follows the new `SET_POLAR2` logic

</details>

<details>

<summary><strong>v1.2.1 Beta 105</strong> — July 12, 2022</summary>

**Added**

* Code can now be pasted into the currently opened Compiler tab via `SendMessage` by prepending a `#` to the pasted code
* `SET_POLAR2(POLAR, ANGLE, RADIUS)` — anticlockwise angle, radius max 15000
* `POLAR_GHOST`, `ANALOG_GHOSTX`, and `ANALOG_GHOSTY` — a virtual stick to help with math and trigonometry functions
* Downloaded scripts now show their name in the Compiler tab
* Tooltip on a downloaded script to read the full name in the Programmer tab
* A better error message when adding a script to the slots fails

**Fixed**

* `ASCII_OPEN_BRACKET` constant
* Device Monitor long text label animation overlapping index and value
* `INV` opcode
* Nested `if` statement issue
* Various GUI fixes

**Improved**

* Some UI text updated to reflect the new forum layout

</details>

<details>

<summary><strong>v1.2.1 Beta 85</strong> — May 2, 2022</summary>

**Added**

* Support for the `continue` keyword in loops
* Zen server status is now shown in the status bar. Clicking the status bar label performs the check again
* Button to copy the current device and software details to the clipboard, under **Help → About Zen Studio**
* Scrollable layout for low-resolution monitors
* `InGameSettingsFlyoutText` is now appended when exporting a mouse and keyboard `.bin` layout
* `switch` / `case` statement — see the sample below
* `enum` data definition — see the sample below
* Bluetooth® clear button
* Support for `any` as an identifier
* The compiler now tracks possible overflow and underflow errors

**Fixed**

* GamePack and script sync issue
* GamePack cached list issue
* Cached YouTube links not showing when clicking PRO GamePacks
* Increment/decrement issue in `if` statements
* Binary operator issue
* SPVARs not loading after a GamePack sync, on APPDATA deletion or PC change
* GPC editor GOTO logic
* Flashing certain GPC scripts
* MAX Mapper not exiting API mode on close, causing no output to be sent

**Changed**

* The parser now treats `:` and `;` as separate characters, while keeping the old syntax support for ending with `:` or `;`

**Improved**

* Replaced the Find Device icon
* Multiple GUI fixes, enhancements, and stability improvements
* Various compiler optimizations
* Ballistic Curve button order

{% hint style="success" %}
**Special thanks** <i class="fa-thumbs-up">:thumbs-up:</i> <i class="fa-medal">:medal:</i> <i class="fa-heart">:heart:</i>

A special mention to **Swizzy** for his invaluable assistance with this release.
{% endhint %}

**`switch` / `case` sample**

```gpc
int var = 1;

define FIVE = 5;

define SIX = FIVE + 1;

main {
	switch(var) {
		case 1 {
			set_val(TRACE_1, 1); // THIS HAS NO BREAK SO IT WILL EVALUATE NEXT CASE!
		}
		case 2 : {
			set_val(TRACE_1, 2);
			set_val(TRACE_2, 2);
			break;
		}
		case 0x3 {
			break;
		}
		case 0x4 : {
			break;
		}
		case FIVE {
			break;
	 	}
	 	case SIX : {
	 	
	 	}
		default {
			set_val(TRACE_3, 1);
		}
	}
	switch(get_rumble(RUMBLE_RT)) {
		case 0x10 {
			break;
		}
		case 40 : {
			break;
		}		
		case 60 {
			break;
		}
		case 80 : {
			break;
		}
	}
}
```

**`enum` sample**

```gpc
enum {
  MYENUM_0 = 50,
  MYENUM_1,
  MYENUM_3,
  MYENUM_4
}

enum {
  MYENUM2_0,
  MYENUM2_1,
  MYENUM2_3,
  MYENUM2_4
}

main {

	set_val(TRACE_1, MYENUM_1); 	// THIS WILL OUTPUT 51 AS OUR ENUM STARTED FROM 50
	set_val(TRACE_1, MYENUM2_1);	// THIS WILL OUTPUT 1 AS DEFAULT ENUM START IS ALWAYS 0

}
```

</details>

<details>

<summary><strong>v1.2.1 Beta 40</strong> — February 26, 2022</summary>

**Added**

* Support for the `continue` keyword in loops

**Fixed**

* A bug that could occur when flashing certain scripts
* GOTO in the GPC editor when selecting the start-of-line option

</details>

<details>

<summary><strong>v1.2.1 Beta 37</strong> — February 25, 2022</summary>

**Added**

* Search Device now invokes Find Device even if the device is unresponsive

**Fixed**

* GPC compiler issue
* GPC script GOTO column
* GPC script GOTO window size not showing all options
* Connected Bluetooth® devices not showing in Device Monitor

**Changed**

* The Refresh icon must now be clicked after plugging or unplugging a device from the Zen in order to update the connected devices tree

**Improved**

* General stability

</details>

<details>

<summary><strong>v1.2.1 Beta 25</strong> — February 15, 2022</summary>

**Added**

* Find Device button in the Device tab
* Zen Studio now checks for new beta updates and prompts you to download from the Beta resources channel

**Changed**

* New device status check method
* New logic for `ResetDevice`

**Fixed**

* Various GUI and stability fixes

</details>

<details>

<summary><strong>v1.2.1 Beta 13</strong> — February 11, 2022</summary>

**Added**

* Support for the `ResetDevice` command
* `ResetDevice` icon in the Device tab
* Setting PS4® Speciality or PS Remote now resets the device automatically

**Fixed**

* Missing case for the `GENERIC` label when loading a profile — this fixed the empty `MOUSEKEY` assignment when opening the M\&K tab or loading a profile
* 32-bit SPVARs causing a slot not to load correctly
* Issue when swapping slots
* Keyboard buttons 1 to 0 not showing as assigned in the Keyboard Layout view
* Available flash size after synchronizing missing local scripts
* Text overflow when listening to an assignment

**Improved**

* Communication retries on a bad device response

</details>

<details>

<summary><strong>v1.2.1 Beta 12</strong> — February 7, 2022</summary>

**Added**

* New Mouse & Keyboard Settings tab with Ballistic Curves, HIP and ADS profiles, and 4 AUX profiles, each with their own settings and keybinds
* `PIO_SWITCH` (enum `6`)
* PS Remote feature — now supports the Sony PS Remote Play PC software
* <kbd>Ctrl</kbd> + <kbd>/</kbd> + <kbd>+</kbd> and <kbd>Ctrl</kbd> + <kbd>/</kbd> + <kbd>-</kbd> to increase and decrease the GPC editor font size, while a GPC script is open
* Support for switching to a 16-bit compiler with optimizations. All scripts must be closed to switch
* Deactivation buttons for the M\&K Settings ADS profile. For example, set the Fire button to activate AUX1 with a lower mouse sensitivity, then set the ADS deactivate button to Fire — now AUX1 activates when you ADS and fire
* Recovery of unsaved GPC scripts after a Windows® restart or crash
* GamePack size displayed in the GamePack details
* Device Monitor shortcut <kbd>F3</kbd>
* GPC Clean, which formats the GPC layout at the touch of a button — shortcut <kbd>F6</kbd>, undo <kbd>Ctrl</kbd> + <kbd>F6</kbd>

**Changed**

* Memory slots are now measured by memory space, up to 64 KB per script or GamePack — double the size previously available

**Fixed**

* Output Protocol is now disabled when PS Remote Play is checked
* Multiple GUI fixes and tweaks

**Improved**

* Compiler font size range is now 7 to 20
* Memory slot programming speed is now over 3× faster

</details>


# What is Zen Link™

### What it is <a href="#what-it-is" id="what-it-is"></a>

Zen Link™ is a Wi-Fi expansion module for the Cronus Zen™, [**sold separately**](https://collectivemindsstore.myshopify.com/collections/cronus-zen/products/cronus-zen). It connects your Cronus Zen™ to your wireless network.

***

### <i class="fa-rocket">:rocket:</i> Key features <a href="#key-features" id="key-features"></a>

* **Wireless configuration** — Install and configure GAMEPACKS from your smartphone over Wi-Fi, with no PC involved.
* **PS5® Native Mode** — Play all PS5® games natively, without a secondary PC or a complex Remote Play setup.
* **Ultra-low latency** — A direct native connection ensures the fastest possible response times for competitive gaming.
* **Full game compatibility** — Works with all PS5® titles, including those that previously required a specialized controller or Remote Play.
* **Plug and play** — Once configured, the connection is handled automatically by the Zen Link™ hardware.


# Model Check

{% hint style="danger" %}
**Note:** Please VERIFY that you own the original Zen Link™ device.
{% endhint %}

The model is printed on the label underneath the device. The label shown below is from the new V2 device — on the original device, V2 is not mentioned on the label anywhere.

<div align="left"><figure><img src="/files/5ZcT3BE7KcDqyvaRaX1F" alt="" width="319"><figcaption></figcaption></figure></div>

Upon confirmation that your device is the original device (*no V2*) or the V2 version, please proceed to the setup steps [here](/zen-link/setup).


# Setup

This page explains setup for both Zen Link™ models.

## Zen Link™ Setup Steps <a href="#b-md3-2" id="b-md3-2"></a>

{% hint style="warning" %}
**V1 only.** Make sure you [update](/zen-link/updating) your Zen Link™ before continuing.
{% endhint %}

{% hint style="success" %}
After completing setup, your **Zen Link™** will provide both **PS5® NATIVE SUPPORT** and Wi-Fi <i class="fa-wifi">:wifi:</i> support for flashing and configuring **GAMEPACKS** using your smartphone.
{% endhint %}

***

### Part 1 —  Smartphone App Setup

{% stepper %}
{% step %}
Plug your Zen Link™ device into your plugged in Cronus Zen™. We recommend plugging it into the **A1** (left side) port as that is where it will reside for native PS5® play.

<div align="left"><figure><img src="/files/IhG2C1OcdK3byWkql2g7" alt="" width="188"><figcaption><p>Cronus Zen™</p></figcaption></figure></div>
{% endstep %}

{% step %}
Once CONNECTED, your Zen Link™'s LED will turn WHITE.

<div align="left"><figure><img src="/files/JH8UtAQal9skckfJofqW" alt="" width="125"><figcaption><p>Zen Link™</p></figcaption></figure></div>
{% endstep %}

{% step %}
Download the Zenlink App from the <i class="fa-app-store-ios">:app-store-ios:</i> iOS® App Store or <i class="fa-google-play">:google-play:</i> Google® Play Store.

* <i class="fa-app-store-ios">:app-store-ios:</i> [iOS® App Store](https://apps.apple.com/ca/app/cronus-zenlink/id6764543287)
* &#x20;<i class="fa-google-play">:google-play:</i> [Google® Play Store](https://play.google.com/store/apps/details?id=com.collectiveminds.zenlink\&pcampaignid=web_share)
  {% endstep %}

{% step %}
**Make sure your SMARTPHONE's Bluetooth® is turned on, and it is connected to the SAME Wi-Fi** <i class="fa-wifi">:wifi:</i>

<div align="left"><figure><img src="/files/8Guv1kVQsRsI2UAXgHlu" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
The app will automatically find your Zen Link™ via Bluetooth® <i class="fa-bluetooth-b">:bluetooth-b:</i>.

<div align="left"><figure><img src="/files/mdYGp0EjAqcpXJ2ZIDSq" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
The main "**CRONUS ZenLink**" screen will appear. You can now use your Zen Link™ for NATIVE PS5® play, or simply for installing and configuring GAMEPACKS on your Cronus Zen™.

<div align="left"><figure><img src="/files/BMf1uRJlwYrVd2RDhxQN" alt="" width="188"><figcaption></figcaption></figure></div>
{% endstep %}
{% endstepper %}

***

### Part 2 —  PS5® Console Settings <a href="#upe7g" id="upe7g"></a>

The following **Settings** must be applied on your PlayStation®5 console before using Cronus Zen™ with Zen Link™ V2 for PS5® Native Play.

#### <i class="fa-battery-low">:battery-low:</i> Power saving <a href="#power-saving" id="power-saving"></a>

**Settings** → **System** → **Power Saving**

<table><thead><tr><th width="340">Setting</th><th>Value</th></tr></thead><tbody><tr><td>Set Time Until PS5® Enters Rest Mode<br><em>While Playing Games</em></td><td><strong>Don't Put in Rest Mode</strong></td></tr><tr><td>Features Available in Rest Mode<br><em>Supply Power to USB Ports</em></td><td><strong>Always</strong></td></tr><tr><td>Features Available in Rest Mode<br><em>Stay Connected to the Internet</em></td><td><strong>Enable</strong></td></tr><tr><td>Features Available in Rest Mode<br><em>Enable Turning On PS5® from Network</em></td><td><strong>Enable</strong></td></tr><tr><td>Set Time Until Controllers Turn Off</td><td><strong>Don't Turn Off</strong></td></tr></tbody></table>

***

#### <i class="fa-gamepad-modern">:gamepad-modern:</i> Controller settings <a href="#controller-settings" id="controller-settings"></a>

**Settings** → **Accessories**

<table><thead><tr><th width="340">Setting</th><th>Value</th></tr></thead><tbody><tr><td>Controller (General)<br><em>Vibration Intensity</em></td><td><strong>Strong (Standard)</strong></td></tr><tr><td>Controller (General)<br><em>Trigger Effect Intensity</em></td><td><strong>Strong (Standard)</strong></td></tr><tr><td>Controller (General)<br><em>Communication Method</em></td><td><mark style="color:$warning;"><strong>Use USB Cable</strong></mark></td></tr><tr><td>Advanced Settings<br><em>Bluetooth</em></td><td><strong>Off</strong></td></tr></tbody></table>

<figure><img src="/files/6ZrCewuzmpjJUJkBG6jk" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="warning" %}
**Communication Method → Use USB Cable** is the critical one. Without it, the PS5® cannot connect through the Cronus Zen™ and Zen Link™ at all.
{% endhint %}

***

#### <i class="fa-wave-square">:wave-square:</i> DualSense Edge™ curve <a href="#dualsense-edge-curve" id="dualsense-edge-curve"></a>

{% hint style="info" %}
On a DualSense Edge™ controller, the settings above are located under **Profile 1**.
{% endhint %}

The built-in Right Stick Sensitivity and Deadzone settings must be set to default, or they will break the functionality of many M.O.D.﻿s including Silent Aim v2﻿.

{% stepper %}
{% step %}

#### Create a custom profile

**Settings** → **Accessories** → **DualSense Edge™ Wireless Controller** → **Custom Profiles** → **Create Custom Profile**

Name it something like **BEAM**, then select **OK**.
{% endstep %}

{% step %}

#### Set the stick values

Select the profile you created and apply these values.

<table><thead><tr><th width="340">Setting</th><th>Value</th></tr></thead><tbody><tr><td>Right Stick Sensitivity Curve</td><td><strong>Default</strong></td></tr><tr><td>Curve Adjustment</td><td><strong>0</strong></td></tr><tr><td>Deadzone Adjustment</td><td><strong>0%</strong></td></tr></tbody></table>
{% endstep %}
{% endstepper %}


# Status Light

Colour says which part is talking, rhythm says how it's going.

### Normal startup

This is the whole sequence from plugging in to ready. It takes a few seconds.

<figure><img src="/files/yXLUHWwHgRGtnS0UYKV6" alt=""><figcaption></figcaption></figure>

***

### Red always counts

A red light means something failed. It blinks in groups, pauses, and repeats. Count one group, then check the rhythm, the same count means different things at different speeds.

<figure><img src="/files/0bM79nkcXPm7rNSqpcto" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/sgGIyx5J8rdSjzs41gAv" alt=""><figcaption></figcaption></figure>

***

### Starting up

<figure><img src="/files/jIuashnKYGsKscEQGvbb" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/1AFVhQMMafNEjTwUhXO8" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/O7d1tDSVnf7mtqdctifY" alt=""><figcaption></figcaption></figure>

***

### Wi-Fi

<figure><img src="/files/52f4ox7pThKugAuzmiE6" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/x7ghkuL7IwC8gljwqnIC" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/577a8kQ8kdjZbEKb2OvT" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/Rvccwyga3ryuGRjLaXfa" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/yCO8zM3sjUNWmk1fkyO5" alt=""><figcaption></figcaption></figure>

***

### PS5 Native Mode

Magenta belongs to the Native mode initialization.\
Green at the end means Native mode was successful.

<figure><img src="/files/KILChrKsGvln2qsWNpc6" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/hTykfDzZJCFTll3CQSl5" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/ci5bTC4V2v4603ZN9kuI" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/zzKGDgojS26Y0O04OyxO" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/ZZOjU8ZrvKBPzpfBrMhz" alt=""><figcaption></figcaption></figure>

***

### Firmware updates

<figure><img src="/files/OcMnR5zjae5f7DzMYxLR" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/BxirIfjtJ7dldcWBiKzk" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/6AAYtwIeJ7JNpLMPNXPk" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/dFXMFJGiiW2GVwQ2pPYf" alt=""><figcaption></figcaption></figure>

***

### Red: quick blips

Something went wrong during a PS5 Native Mode initialization. The light clears itself after about ten seconds and you can try again.

<figure><img src="/files/7NB5hHJUq9wRaTcLJSjV" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/bUchN7JkQZLuzDtnEYks" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/yR2LmyANnFirtnds3Bcd" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/brf6F3PVpAcW2APVIvFu" alt=""><figcaption></figcaption></figure>

***

### Red: long blinks

The device has stopped. These never clear on their own and always need attention.

<figure><img src="/files/L0jEbQcO445YHWHPMxvA" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/N0FRZf5grqkO3vvvUS5N" alt=""><figcaption></figcaption></figure>

***

{% hint style="warning" %}
**Nothing here matches?** If the light is completely dark, the device is not getting power — try a different USB port or cable. If you see a colour or rhythm that is not on this page, note the colour, whether it blinks fast or slow, and how many blinks come before the pause, then send that to support. Those three details are enough to identify any state.
{% endhint %}

<br>


# Brightness

The config button controls the brightness of the status light, and gives access to Wi-Fi setup.

<figure><img src="/files/ywsKMeRd0uKEjGnIsGmg" alt=""><figcaption></figcaption></figure>

| Action                 | Result                            |
| ---------------------- | --------------------------------- |
| **Tap**                | Move to the next brightness level |
| **Hold for 5 seconds** | Start Wi-Fi setup over BLE        |

Each tap cycles the brightness. The default is dim.

Turning the light off does not affect anything else — the Zen Link™ keeps working normally.


# Updating

{% hint style="info" %}
Zen Link™ firmware updates are delivered over Wi-Fi. No cable, no PC, and no app interaction is required.
{% endhint %}

### Automatic updates <a href="#automatic-updates" id="automatic-updates"></a>

Plug in your Zen Link™ so that it powers up. Once it has connected to your Wi-Fi network, the update starts automatically after about 30 seconds. You do not need to open the Zenlink App.

{% hint style="warning" %}
If your Wi-Fi credentials are not valid, the Zen Link™ starts BLE setup instead of updating. Configure Wi-Fi from the Zen Link™ App, then let it connect again.
{% endhint %}

***

### One-time V1 upgrade <a href="#v1-upgrade" id="v1-upgrade"></a>

{% hint style="warning" %}
**V1 only.** Run this once. After the upgrade, your Zen Link™ V1 has the same functionality as a V2 and updates automatically from then on.
{% endhint %}

{% stepper %}
{% step %}

#### Enter Config Mode

Plug the Zen Link™ V1 in while holding the blue Config button.
{% endstep %}

{% step %}

#### Run the updater

Open the **ZenLinkConfigurator**, enter your Wi-Fi credentials, and select **Native Mode**.
{% endstep %}

{% step %}

#### Wait for the update

Once the Zen Link™ has connected to Wi-Fi, the update starts shortly after.
{% endstep %}
{% endstepper %}

***

### ZenLinkConfigurator <a href="#zenlinkconfigurator" id="zenlinkconfigurator"></a>

Apart from the one-time upgrade above, the **ZenLinkConfigurator** is only needed on a V1 device after a Factory Reset. There is no other use for it.

{% hint style="info" %}
A factory reset on a V1 is a last resort for a unrecoverable unit and is not part of normal use.
{% endhint %}


# Factory Reset

If your Zen Link™ is not behaving correctly and all other troubleshooting has failed, you can pinhole reset it to factory settings by following the steps below.

{% hint style="warning" %}
A factory reset is not normally needed; it is a last resort that will erase all custom settings on your Zen Link™
{% endhint %}

1. Unplug all cables from the Zen Link™.
2. Turn the Zen Link™ around so the back is facing you.
3. Locate the small hole on the back and insert a needle into it.
4. While holding the needle in place, plug the cables back in.
5. Wait 3 seconds, then remove the needle.

Your Zen Link™ is now factory reset and ready to setup.


# Troubleshooting

### <i class="fa-mobile">:mobile:</i> App - Connection Failed <a href="#rlr_z" id="rlr_z"></a>

If you see the "Connection Failed" message, your smartphone is likely *not* on the same network as your Zen Link™ V2.

* Make sure your smartphone is connected to Wi-Fi <i class="fa-wifi">:wifi:</i> on the **SAME** network that is 2.4Ghz compatible, and **PRESS** the "**Try Again**" button.

<div align="left"><figure><img src="/files/X8cVAMvneVbXe6kU2FmT" alt="" width="188"><figcaption></figcaption></figure></div>

{% hint style="warning" %}
If you still have no luck, it may even be worth temporarily disabling Mobile Data on your smartphone to be sure. And in the event that it is something more problematic, like the 2.4Ghz band on your network has been disabled, you will have to consult your modem/router's guide or internet provider to resolve it.
{% endhint %}

***

### <i class="fa-mobile">:mobile:</i> App - Zen Link™ V2 Not Found <a href="#rlr_z" id="rlr_z"></a>

If you have previously setup the Zen Link™ V2 and the app is *not* connecting to it, make sure your smartphone is connected to the **SAME** network and **PRESS** the "**Retry**" button.

* Make sure your Zen Link™ is powered on and reachable via Wi-Fi <i class="fa-wifi">:wifi:</i> or Bluetooth® <i class="fa-bluetooth-b">:bluetooth-b:</i>.
* Make sure your network is still allowing for 2.4Ghz connections, because the Zen Link™ is a 2.4Ghz device.

<div align="left"><figure><img src="/files/FaBpOG9WmUxkca1B1Lqy" alt="" width="188"><figcaption></figcaption></figure></div>

***

### <i class="fa-mobile">:mobile:</i> App - Wi-Fi Configuration Retry <a href="#rlr_z" id="rlr_z"></a>

In the event that your Zen Link™ V2 *cannot* connect to Wi-Fi, it will return to Setup Mode (solid <mark style="color:blue;">**BLUE**</mark> LED), and the app will automatically detect that Wi-Fi needs to be configured again.

<div align="left"><figure><img src="/files/yX8PPJJ8msrqtb92wevW" alt="" width="188"><figcaption></figcaption></figure></div>

***

### <i class="fa-headset">:headset:</i> No Headset Audio on PS5® <a href="#rlr_z" id="rlr_z"></a>

A 3.5mm wired headset is *unsupported* when your DualSense™ is paired wirelessly to the Cronus Zen™﻿ via Bluetooth® <i class="fa-bluetooth-b">:bluetooth-b:</i>. It will work if your controller is wired to one of the Cronus Zen's front ports (A2 or A3). If you'd prefer to use your controller wirelessly with headset audio, you'll need a USB or wireless headset that connects directly to your PS5® console.

***

### <i class="fa-gamepad-modern">:gamepad-modern:</i> No Connection to PS5® <a href="#rlr_z" id="rlr_z"></a>

The PS5® console setting "**Communication Method → Use USB Cable**" is especially important for the PS5® to be able to connect through the Cronus Zen™ and Zen Link™ V2 at all.


# Controller

Compatibility for controllers on each platform. If a controller is not listed, it has not been tested — that does not mean it will not work.

| Works                                              | Meaning                                |
| -------------------------------------------------- | -------------------------------------- |
| <mark style="color:green;">**Yes**</mark>          | Tested and working                     |
| <mark style="color:orange;">**Conditional**</mark> | Works with limitations — see the notes |
| <mark style="color:red;">**No**</mark>             | Does not work                          |

***

### <i class="fa-playstation">:playstation:</i> PlayStation®5 <a href="#ps5" id="ps5"></a>

<details open>

<summary><strong>PlayStation®5 controllers</strong></summary>

| Model                                                                                          |                   Works                   | Notes                                                                                                                                 |
| ---------------------------------------------------------------------------------------------- | :---------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------------- |
| [DualSense Edge™](https://www.playstation.com/accessories/dualsense-edge-wireless-controller/) | <mark style="color:green;">**Yes**</mark> | CFI-ZCP1. With Zen Link™: controller in **A2**, Zen Link™ in **A3**                                                                   |
| [DualSense™](https://www.playstation.com/accessories/dualsense-wireless-controller/)           | <mark style="color:green;">**Yes**</mark> | CFI‑ZCT1W (BDM‑010 V1 2020, BDM‑020 V2 2022, BDM‑030 V3 2022/23, BDM‑040 V4 2023/24, BDM‑050 V5 2024, BDM‑060 / CFI‑ZCT2W V6 2025/26) |
| [Razer Raiju V3 Pro](https://www.razer.com/console-controllers/razer-raiju-ultimate)           |   <mark style="color:red;">**No**</mark>  | Disconnects after a few minutes                                                                                                       |
| [Scuf Omega](https://scufgaming.com/)                                                          |   <mark style="color:red;">**No**</mark>  | PC Mode disables the touchpad                                                                                                         |

</details>

***

### <i class="fa-playstation">:playstation:</i> PlayStation®4 <a href="#ps4" id="ps4"></a>

<details>

<summary><strong>PlayStation®4 controllers</strong></summary>

| Model                                     |                        Works                       | Connection       | Notes                                             |
| ----------------------------------------- | :------------------------------------------------: | ---------------- | ------------------------------------------------- |
| DualShock®4 V2                            |      <mark style="color:green;">**Yes**</mark>     | USB / Bluetooth® |                                                   |
| DualShock®4 V1                            | <mark style="color:orange;">**Conditional**</mark> | USB / Bluetooth® | May have authentication and audio issues          |
| Astro® C40 TR                             |      <mark style="color:green;">**Yes**</mark>     | USB / Adapter    | Wireless requires the Astro® C40 TR adapter       |
| Hori PS4 Mini-Pad                         |      <mark style="color:green;">**Yes**</mark>     | USB              | Compact wired controller                          |
| Horipad 4 FPS                             |      <mark style="color:green;">**Yes**</mark>     | USB              | Wired FPS controller                              |
| Horipad FPS Plus                          |      <mark style="color:green;">**Yes**</mark>     | USB              | Wired FPS controller with sensitivity toggle      |
| Mad Catz Street Fighter V FightStick TE2+ |      <mark style="color:green;">**Yes**</mark>     | USB              | Arcade fight stick                                |
| Nacon Compact Wired Controller            |      <mark style="color:green;">**Yes**</mark>     | USB              | Officially licensed wired controller              |
| Nacon Revolution Pro v1                   |      <mark style="color:green;">**Yes**</mark>     | USB              | First-generation wired controller                 |
| Nacon Revolution Pro v2                   |      <mark style="color:green;">**Yes**</mark>     | USB              | Second-generation wired controller                |
| Nacon Revolution Pro v3                   |      <mark style="color:green;">**Yes**</mark>     | USB              | Third-generation wired controller                 |
| Nacon Revolution Unlimited Pro            |      <mark style="color:green;">**Yes**</mark>     | USB / Adapter    | Wireless via USB dongle                           |
| PowerA Fusion Pro                         | <mark style="color:orange;">**Conditional**</mark> | USB              | Requires a firmware update for full compatibility |
| Razer Raiju Tournament Edition            |      <mark style="color:green;">**Yes**</mark>     | USB              | Wired only                                        |
| Razer Raiju Ultimate                      |      <mark style="color:green;">**Yes**</mark>     | USB              | Wired only                                        |
| Scuf Infinity4PS Pro (DS4 v1)             |      <mark style="color:green;">**Yes**</mark>     | USB / Bluetooth® |                                                   |
| Scuf Infinity4PS Pro (DS4 v2)             |      <mark style="color:green;">**Yes**</mark>     | USB / Bluetooth® |                                                   |
| Scuf Impact                               |      <mark style="color:green;">**Yes**</mark>     | USB / Bluetooth® |                                                   |
| Scuf Vantage                              |      <mark style="color:green;">**Yes**</mark>     | USB              | Wired only                                        |
| Scuf Vantage 2                            |      <mark style="color:green;">**Yes**</mark>     | USB              | Wired only                                        |

</details>

***

### <i class="fa-playstation">:playstation:</i> PlayStation®3 <a href="#ps3" id="ps3"></a>

<details>

<summary><strong>PlayStation®3 controllers</strong></summary>

| Model                                     |                   Works                   | Connection       |                  Audio                 | Notes                                   |
| ----------------------------------------- | :---------------------------------------: | ---------------- | :------------------------------------: | --------------------------------------- |
| DualShock®3 (SCPH-98050)                  | <mark style="color:green;">**Yes**</mark> | USB / Bluetooth® | <mark style="color:red;">**No**</mark> | Original DualShock®3 controller         |
| DualShock®3 (CECH-ZC2)                    | <mark style="color:green;">**Yes**</mark> | USB / Bluetooth® | <mark style="color:red;">**No**</mark> | Later revision DualShock®3              |
| PlayStation® Move Motion (CECH-ZCM1X)     | <mark style="color:green;">**Yes**</mark> | Bluetooth®       |                    —                   | Motion controller for PS3® and PSVR     |
| PlayStation® Move Navigation (CECH-ZCS1X) | <mark style="color:green;">**Yes**</mark> | Bluetooth®       |                    —                   | Navigation controller for PS3® and PSVR |

</details>

***

### <i class="fa-xbox">:xbox:</i> Xbox Series X|S® <a href="#xbox-series" id="xbox-series"></a>

<details>

<summary><strong>Xbox Series X|S® controllers</strong></summary>

| Model                           |                        Works                       | Connection                    | Notes                                |
| ------------------------------- | :------------------------------------------------: | ----------------------------- | ------------------------------------ |
| Xbox® One                       |      <mark style="color:green;">**Yes**</mark>     | USB / Wireless / Bluetooth®   | Model 1537, 1697, 1708 revisions     |
| Xbox Series X\|S®               |      <mark style="color:green;">**Yes**</mark>     | USB-C / Wireless / Bluetooth® | Model 1914                           |
| Xbox Elite Series 1             |      <mark style="color:green;">**Yes**</mark>     | USB / Wireless                | Model 1698                           |
| Xbox Elite Series 2             |      <mark style="color:green;">**Yes**</mark>     | USB-C / Wireless / Bluetooth® | Model 1797                           |
| GameSir G7 SE                   | <mark style="color:orange;">**Conditional**</mark> | USB-C                         | Standard polling rate — TODO         |
| GameSir G7 Pro                  |      <mark style="color:green;">**Yes**</mark>     | USB-C                         | Standard polling rate                |
| GameSir G7 Pro 8K               |      <mark style="color:green;">**Yes**</mark>     | USB-C                         | High polling rate, 8000 Hz           |
| GameSir G7HE                    |      <mark style="color:green;">**Yes**</mark>     | USB-C                         | Enhanced edition with trigger tuning |
| GameSir Tarantula Pro for Xbox® |       <mark style="color:red;">**No**</mark>       | USB-C                         |                                      |
| Nacon RIG Pro Compact           |      <mark style="color:green;">**Yes**</mark>     | USB-C                         |                                      |
| PDP Afterglow                   |      <mark style="color:green;">**Yes**</mark>     | USB                           |                                      |
| PowerA Fusion Pro 2             |      <mark style="color:green;">**Yes**</mark>     | USB-C                         |                                      |
| PowerA Fusion Pro 3             |      <mark style="color:green;">**Yes**</mark>     | USB-C                         |                                      |
| PowerA Spectra Infinity         |      <mark style="color:green;">**Yes**</mark>     | USB-C                         |                                      |
| PowerA Enhanced                 |      <mark style="color:green;">**Yes**</mark>     | USB-C                         |                                      |
| Razer Wolverine V2              |      <mark style="color:green;">**Yes**</mark>     | USB-C                         |                                      |
| Razer Wolverine V2 Chroma       |      <mark style="color:green;">**Yes**</mark>     | USB-C                         |                                      |
| Scuf Instinct                   |      <mark style="color:green;">**Yes**</mark>     | USB-C / Wireless              |                                      |
| Scuf Instinct Pro               |      <mark style="color:green;">**Yes**</mark>     | USB-C / Wireless              |                                      |
| Turtle Beach Recon              |      <mark style="color:green;">**Yes**</mark>     | USB-C                         |                                      |
| Turtle Beach React-R            |      <mark style="color:green;">**Yes**</mark>     | USB-C                         |                                      |
| Victrix Gambit Dual Core        |      <mark style="color:green;">**Yes**</mark>     | USB-C                         |                                      |

</details>

***

### <i class="fa-xbox">:xbox:</i> Xbox® One <a href="#xbox-one" id="xbox-one"></a>

<details>

<summary><strong>Xbox® One controllers</strong></summary>

| Model                              |                   Works                   | Connection    | Notes                                    |
| ---------------------------------- | :---------------------------------------: | ------------- | ---------------------------------------- |
| Xbox® One (1537, 1697)             | <mark style="color:green;">**Yes**</mark> | USB / Adapter | Early revisions, no Bluetooth® support   |
| Xbox® One S (1708)                 | <mark style="color:green;">**Yes**</mark> | USB / Adapter | Second revision, improved wireless range |
| Xbox Elite (1698)                  | <mark style="color:green;">**Yes**</mark> | USB / Adapter | First-generation Elite controller        |
| Xbox Elite Series 2                | <mark style="color:green;">**Yes**</mark> | USB / Adapter | Second-generation Elite controller       |
| GameStop Wired                     | <mark style="color:green;">**Yes**</mark> | USB           | Standard wired controller                |
| GameStop Metallic Limited Edition  | <mark style="color:green;">**Yes**</mark> | USB           | Limited edition wired controller         |
| Hori Horipad                       | <mark style="color:green;">**Yes**</mark> | USB           | Licensed wired controller                |
| PowerA Enhanced                    | <mark style="color:green;">**Yes**</mark> | USB           | Officially licensed wired controller     |
| PowerA Mini                        | <mark style="color:green;">**Yes**</mark> | USB           | Compact wired controller                 |
| PowerA Fusion 2                    | <mark style="color:green;">**Yes**</mark> | USB           | Wired controller with paddles            |
| PowerA Fusion Pro                  | <mark style="color:green;">**Yes**</mark> | USB           | Wired controller with paddles            |
| PowerA Pro Ex                      | <mark style="color:green;">**Yes**</mark> | USB           | Wired controller                         |
| PowerA Spectra                     | <mark style="color:green;">**Yes**</mark> | USB           | RGB lighting                             |
| PowerA Star Wars Stormtrooper      | <mark style="color:green;">**Yes**</mark> | USB           | Licensed wired controller                |
| PDP Afterglow Prismatic            | <mark style="color:green;">**Yes**</mark> | USB           | RGB lighting                             |
| Razer Atrox Arcade Stick           | <mark style="color:green;">**Yes**</mark> | USB           | Arcade fight stick                       |
| Razer Atrox Dragon Ball FighterZ   | <mark style="color:green;">**Yes**</mark> | USB           | Arcade fight stick                       |
| Razer Wildcat                      | <mark style="color:green;">**Yes**</mark> | USB           | Wired tournament controller              |
| Razer Wolverine Tournament Edition | <mark style="color:green;">**Yes**</mark> | USB           | Wired controller                         |
| Razer Wolverine Ultimate           | <mark style="color:green;">**Yes**</mark> | USB           | Wired controller                         |
| Scuf Prestige                      | <mark style="color:green;">**Yes**</mark> | USB           | Wired controller                         |

</details>

***

### <i class="fa-xbox">:xbox:</i> Xbox 360® <a href="#xbox-360" id="xbox-360"></a>

<details>

<summary><strong>Xbox 360® controllers</strong></summary>

| Model              |                   Works                   | Connection |                  Audio                 | Notes                                                    |
| ------------------ | :---------------------------------------: | ---------- | :------------------------------------: | -------------------------------------------------------- |
| Xbox 360® Wired    | <mark style="color:green;">**Yes**</mark> | USB        | <mark style="color:red;">**No**</mark> | Fully supported over USB                                 |
| Xbox 360® Wireless |   <mark style="color:red;">**No**</mark>  | Adapter    | <mark style="color:red;">**No**</mark> | Requires the official Xbox 360® Wireless Receiver for PC |

</details>

***

### <i class="fa-gamepad-modern">:gamepad-modern:</i> Nintendo Switch® <a href="#switch" id="switch"></a>

<details>

<summary><strong>Nintendo Switch® controllers</strong></summary>

| Model                       |                   Works                   | Connection       | Notes                                       |
| --------------------------- | :---------------------------------------: | ---------------- | ------------------------------------------- |
| Joy-Con (L+R)               | <mark style="color:green;">**Yes**</mark> | Bluetooth®       | Official Nintendo® wireless controllers     |
| Switch Pro Controller       | <mark style="color:green;">**Yes**</mark> | Bluetooth®       | Official Nintendo® Pro controller           |
| Hori D-Pad Controller (L+R) | <mark style="color:green;">**Yes**</mark> | Bluetooth®       | Licensed controller, Bluetooth® only        |
| Hori Switch Horipad         | <mark style="color:green;">**Yes**</mark> | USB              | Licensed wired controller                   |
| Gulikit ZEN Pro             | <mark style="color:green;">**Yes**</mark> | USB / Bluetooth® | Licensed controller with Hall-effect sticks |

</details>

***

### <i class="fa-gamepad">:gamepad:</i> Nintendo® Wii <a href="#wii" id="wii"></a>

<details>

<summary><strong>Nintendo® Wii controllers</strong></summary>

| Model                |                        Works                       | Connection | Notes                                                                       |
| -------------------- | :------------------------------------------------: | ---------- | --------------------------------------------------------------------------- |
| Wii U Pro Controller |      <mark style="color:green;">**Yes**</mark>     | Bluetooth® | Standard Bluetooth® controller                                              |
| Wiimote              | <mark style="color:orange;">**Conditional**</mark> | Bluetooth® | No gyroscope support — requires a MotionPlus adapter, or use a Wiimote Plus |
| Wiimote Plus         |      <mark style="color:green;">**Yes**</mark>     | Bluetooth® | Expansion port supports Wii Nunchucks                                       |

</details>


# Mice

Tested mice for use with the Cronus Zen™. If a mouse is not listed, it has not been tested — that does not mean it will not work.

<table data-search="false"><thead><tr><th>Model</th><th width="232" align="center">Works</th><th>Connect</th></tr></thead><tbody><tr><td>Armageddon Z610 Swarm</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>Attack Shark X11 SE</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>Wireless</td></tr><tr><td>Cooler Master MM710</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>Cooler Master MM711</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>Corsair Harpoon RGB Pro</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>Corsair IRONCLAW RGB</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>Wireless</td></tr><tr><td>Corsair M65 Pro</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>Corsair M65 RGB Elite</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>Corsair M75 Wireless</td><td align="center"><mark style="color:orange;"><strong>Untested</strong></mark></td><td>Wireless</td></tr><tr><td>Glorious Model O</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>Gravastar M1 Pro</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB / Wireless (2.4 GHz + Bluetooth®)</td></tr><tr><td>Logitech G203</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>Logitech G402</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>Logitech G403</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>Wireless</td></tr><tr><td>Logitech G403 Hero</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>Wireless</td></tr><tr><td>Logitech G502 Hero</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>Logitech G502 Lightspeed</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>Wireless</td></tr><tr><td>Logitech G502 Proteus</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>Logitech G502X</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>Logitech G703 Lightspeed</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>Wireless</td></tr><tr><td>Logitech G903</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>Wireless</td></tr><tr><td>Logitech G Pro</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>Logitech G Pro Ultralight</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>Logitech PRO X2 SUPERSTRIKE</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>Wireless</td></tr><tr><td>Logitech Superlight GPRO</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>Wireless</td></tr><tr><td>Logitech Superlight 2</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>Wireless</td></tr><tr><td>Razer Basilisk X Hyperspeed</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>Wireless</td></tr><tr><td>Razer DeathAdder Chroma</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>Razer DeathAdder Elite</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>Razer DeathAdder Essential</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>Razer Mamba</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>Razer Naga Pro</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>Razer Naga Pro</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>Wireless</td></tr><tr><td>Razer Viper V1</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>Razer Viper V2 Pro</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>Wireless</td></tr><tr><td>Razer Viper V3 HyperSpeed</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>Wireless</td></tr><tr><td>Razer Viper V4</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>Wireless</td></tr><tr><td>Redragon M690 Pro</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>Wireless</td></tr><tr><td>Redragon M721 Pro</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>Redragon M801-K</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>Skytech Gaming Classic RGB M-1200N</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>SteelSeries Aerox 3 Wireless</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>Wireless</td></tr><tr><td>VXE Mad R 8K</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>USB</td></tr><tr><td>Xtrfy M68 Wireless</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>Wireless</td></tr></tbody></table>


# Keyboard

Tested keyboards for use with the Cronus Zen™. If a keyboard is not listed, it has not been tested — that does not mean it will not work.

| Works                                              | Meaning                                                  |
| -------------------------------------------------- | -------------------------------------------------------- |
| <mark style="color:green;">**Yes**</mark>          | Tested and working                                       |
| <mark style="color:orange;">**Conditional**</mark> | Works with a setting or a specific setup — see the notes |
| <mark style="color:purple;">**Unconfirmed**</mark> | Not enough test data                                     |
| <mark style="color:red;">**No**</mark>             | Does not work                                            |

***

### <i class="fa-keyboard">:keyboard:</i> Compatibility <a href="#compatibility" id="compatibility"></a>

***

<table data-search="false"><thead><tr><th>Model</th><th align="center">Works</th><th>Notes</th></tr></thead><tbody><tr><td>Ajazz Nacodex</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>Add falsely detected mouse to the Ignore List</td></tr><tr><td>Armageddon MKA-1C Neo Psychshift</td><td align="center"><mark style="color:orange;"><strong>Conditional</strong></mark></td><td>Enumerates as a mouse — must be ignored</td></tr><tr><td>Attack Shark x68he</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>Rapid trigger sensitivity must be set in software, onboard profile required</td></tr><tr><td>Cooler Master SGK 3040</td><td align="center"><mark style="color:orange;"><strong>Conditional</strong></mark></td><td>Enumerates as a mouse — must be ignored</td></tr><tr><td>Corsair K30</td><td align="center"><mark style="color:orange;"><strong>Conditional</strong></mark></td><td>BIOS mode required</td></tr><tr><td>Corsair K40</td><td align="center"><mark style="color:orange;"><strong>Conditional</strong></mark></td><td>BIOS mode required</td></tr><tr><td>Corsair K50</td><td align="center"><mark style="color:orange;"><strong>Conditional</strong></mark></td><td>BIOS mode required</td></tr><tr><td>Corsair K55</td><td align="center"><mark style="color:orange;"><strong>Conditional</strong></mark></td><td>BIOS mode required</td></tr><tr><td>Corsair K60</td><td align="center"><mark style="color:orange;"><strong>Conditional</strong></mark></td><td>BIOS mode required</td></tr><tr><td>Corsair K65</td><td align="center"><mark style="color:orange;"><strong>Conditional</strong></mark></td><td>BIOS mode required</td></tr><tr><td>Corsair K65 Mini</td><td align="center"><mark style="color:red;"><strong>No</strong></mark></td><td></td></tr><tr><td>Corsair K68</td><td align="center"><mark style="color:orange;"><strong>Conditional</strong></mark></td><td>BIOS mode required</td></tr><tr><td>Corsair K70</td><td align="center"><mark style="color:orange;"><strong>Conditional</strong></mark></td><td>BIOS mode required</td></tr><tr><td>Corsair K70 TKL</td><td align="center"><mark style="color:red;"><strong>No</strong></mark></td><td></td></tr><tr><td>Corsair K90</td><td align="center"><mark style="color:orange;"><strong>Conditional</strong></mark></td><td>BIOS mode required</td></tr><tr><td>Corsair K95</td><td align="center"><mark style="color:orange;"><strong>Conditional</strong></mark></td><td>BIOS mode required</td></tr><tr><td>Corsair K100</td><td align="center"><mark style="color:orange;"><strong>Conditional</strong></mark></td><td>BIOS mode required</td></tr><tr><td>Corsair Hyper X</td><td align="center"><mark style="color:orange;"><strong>Conditional</strong></mark></td><td>BIOS mode required</td></tr><tr><td>Corsair Strafe</td><td align="center"><mark style="color:orange;"><strong>Conditional</strong></mark></td><td>BIOS mode must be set on <strong>every</strong> startup</td></tr><tr><td>FNATIC STREAK65 RGB</td><td align="center"><mark style="color:orange;"><strong>Conditional</strong></mark></td><td>BIOS mode required</td></tr><tr><td>Glorious GMMK Pro</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td></td></tr><tr><td>HyperX Alloy</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td></td></tr><tr><td>HyperX Alloy Core RGB</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td></td></tr><tr><td>Keychron Q6 Max</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td></td></tr><tr><td>Kreo Hive 98</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td></td></tr><tr><td>Logitech G213</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td></td></tr><tr><td>Logitech G413</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td></td></tr><tr><td>Logitech G512</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td></td></tr><tr><td>Logitech G512 (dual cable)</td><td align="center"><mark style="color:orange;"><strong>Conditional</strong></mark></td><td>Requires the correct cable connection</td></tr><tr><td>Logitech G515 TKL Wired</td><td align="center"><mark style="color:red;"><strong>No</strong></mark></td><td></td></tr><tr><td>Logitech G713</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td></td></tr><tr><td>Logitech G815 (dual cable)</td><td align="center"><mark style="color:orange;"><strong>Conditional</strong></mark></td><td>Requires the correct cable connection</td></tr><tr><td>Logitech G915</td><td align="center"><mark style="color:orange;"><strong>Conditional</strong></mark></td><td>Certain firmware versions may not be recognized</td></tr><tr><td>Logitech G915 LIGHTSPEED</td><td align="center"><mark style="color:purple;"><strong>Unconfirmed</strong></mark></td><td>One user reported issues, possibly power related</td></tr><tr><td>Logitech G Pro</td><td align="center"><mark style="color:orange;"><strong>Conditional</strong></mark></td><td>Certain firmware versions may not be recognized</td></tr><tr><td>Madlions 60HE</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td></td></tr><tr><td>Proove Gaming AFK</td><td align="center"><mark style="color:red;"><strong>No</strong></mark></td><td></td></tr><tr><td>Razer BlackWidow Lite TKL</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td></td></tr><tr><td>Razer BlackWidow V3</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td></td></tr><tr><td>Razer Cynosa Lite</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td></td></tr><tr><td>Razer Ornata Chroma</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td></td></tr><tr><td>Razer Orbweaver</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td></td></tr><tr><td>Razer Tartarus V2</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td></td></tr><tr><td>Redragon K5 Range</td><td align="center"><mark style="color:orange;"><strong>Conditional</strong></mark></td><td>Enumerates as a mouse — must be ignored</td></tr><tr><td>Redragon K6 Range</td><td align="center"><mark style="color:orange;"><strong>Conditional</strong></mark></td><td>Enumerates as a mouse — must be ignored</td></tr><tr><td>Redragon K62 RGB</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td></td></tr><tr><td>Redragon K585 Wired</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td>Add falsely detected mouse to the Ignore List</td></tr><tr><td>Skytech Gaming K1000</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td></td></tr><tr><td>SteelSeries Apex Pro</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td></td></tr><tr><td>SteelSeries Apex Pro TKL</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td></td></tr><tr><td>Wooting 60HE (Gamepad Mode)</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td></td></tr></tbody></table>

***

### <i class="fa-circle-info">:circle-info:</i> What the notes mean <a href="#notes-explained" id="notes-explained"></a>

<details>

<summary><strong>BIOS mode required</strong></summary>

The keyboard must be switched to BIOS mode before the Cronus Zen™ will accept it. Whether this is needed depends on the keyboard's firmware version.

On the **Corsair Strafe**, BIOS mode has to be set again after every startup.

</details>

<details>

<summary><strong>Enumerates as a mouse</strong></summary>

The keyboard registers a second device that the Cronus Zen™ reads as a mouse. Add that device to the **Ignore List** so it does not interfere with your mouse settings.

</details>

<details>

<summary><strong>Requires the correct cable connection</strong></summary>

The keyboard ships with two USB cables. Only one of them carries the connection the Cronus Zen™ needs.

</details>

<details>

<summary><strong>Certain firmware versions may not be recognized</strong></summary>

Compatibility depends on the keyboard's firmware version. If the Cronus Zen™ does not detect the keyboard, check for a firmware update from the manufacturer.

</details>


# PlayStation®5

## PlayStation®5

Cronus Zen™ is fully compatible with all PlayStation®5 console models and with both DualSense™ and DualSense Edge™ controllers — either with the [Zen Link™ Wi-Fi Expansion Module](/zen-link/what-is-zen-link) or through the [Bypass](/supported-devices/ps5/ps5bypass) method.

Any supported device works with your PlayStation®5 through the Cronus Zen™, including [controllers](/supported-devices/controller), [mice](/supported-devices/mice), and [keyboards](/supported-devices/keyboard).

### <i class="fa-playstation">:playstation:</i> Compatibility <a href="#compatibility" id="compatibility"></a>

***

<table><thead><tr><th width="430">Consoles and controllers</th><th align="center">Supported</th></tr></thead><tbody><tr><td>PlayStation®5</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td></tr><tr><td>PlayStation®5 Digital</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td></tr><tr><td>PlayStation®5 Slim</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td></tr><tr><td>PlayStation®5 Pro</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td></tr><tr><td>DualSense™</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td></tr><tr><td>DualSense Edge™</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td></tr></tbody></table>

### <i class="fa-gamepad-modern">:gamepad-modern:</i> DualSense™ features <a href="#features" id="features"></a>

***

These require either Zen Link™ or the Bypass method.

<table data-search="false"><thead><tr><th width="430">Feature</th><th align="center">Supported</th></tr></thead><tbody><tr><td>Rumble and haptic feedback</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td></tr><tr><td>Adaptive triggers</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td></tr><tr><td>Two-finger and swipe touchpad</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td></tr><tr><td>Gyroscope</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td></tr><tr><td>Wired headset <em>(USB only)</em></td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td></tr><tr><td>Cronus BEAM™ GamePacks</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td></tr><tr><td>Controller microphone</td><td align="center"><mark style="color:red;"><strong>No</strong></mark></td></tr><tr><td>Controller speaker</td><td align="center"><mark style="color:red;"><strong>No</strong></mark></td></tr></tbody></table>

### <i class="fa-headset">:headset:</i> Headsets <a href="#headsets" id="headsets"></a>

***

A headset plugged into the DualSense™ 3.5 mm jack only works while the controller is connected to the Cronus Zen™ over **USB**. There is no 3.5 mm audio or microphone support over a Bluetooth® controller connection.

If your headset connects to the console directly — by USB, by a 2.4 GHz dongle, or by PS Link — you can connect the DualSense™ over Bluetooth®.

{% hint style="info" %}
Full details: [Headsets](/quick-start-and-downloads/step-3-controller-compatibility#headsets)
{% endhint %}

### <i class="fa-scale-balanced">:scale-balanced:</i> Trademark notice <a href="#trademarks" id="trademarks"></a>

***

Zen Link™ is a trademark of Collective Minds Gaming Co. Ltd.

All product names, logos, brands, trademarks, images, and videos referenced in this manual or on the website are used for identification purposes only and remain the property of their respective owners. These trademark owners are not affiliated with Collective Minds Gaming Co. Ltd. and do not sponsor or endorse its products, services, or websites.

"PlayStation®", "PlayStation®5", "PS5®", "PSN®", and "DualSense™" are trademarks of Sony Interactive Entertainment Inc.


# PlayStation®5 Bypass

{% hint style="warning" %}
**We recommend**[ **Zen Link™**](/zen-link/what-is-zen-link) **instead.** Zen Link™ enables PS5® Native Mode with a one-time setup, while the bypass below is a manual procedure that has to be repeated.
{% endhint %}

This page explains how to set up the PlayStation®5 bypass with the Cronus Zen™ and a DualSense™ or DualSense Edge™ controller.

***

### <i class="fa-arrows-rotate">:arrows-rotate:</i> Setup <a href="#setup" id="setup"></a>

{% stepper %}
{% step %}

#### Enable Bluetooth®

Go to **Settings → Accessories → General → Advanced Settings**.

If Bluetooth® is already **On**, continue with the next step.

If it is **Off**, select **Turn On Bluetooth** and press **✕**. The PS5® console restarts automatically.
{% endstep %}

{% step %}

#### Connect the controller over Bluetooth®

Use the **Bluetooth Accessories** screen to connect your DualSense™ or DualSense Edge™ controller wirelessly.
{% endstep %}

{% step %}

#### Set the communication method

Go to **Settings → Accessories → Controller (General) → Communication Method**, choose **Use USB Cable**, and press **✕** to confirm.
{% endstep %}

{% step %}

#### Put the Zen into Gearhead mode

Connect the Zen to the PS5® front USB port. If the display shows a GamePack or script icon, tap the right blue button until the Gearhead logo appears.

{% hint style="info" %}
To verify that Gearhead is the default screen, unplug the **rear USB cable**, then reconnect it once and confirm the Gearhead logo is still displayed.
{% endhint %}

Unplug the cable again so the Zen is no longer connected to the PS5®.
{% endstep %}

{% step %}

#### Connect your controller to the Zen

Connect the controller to the Zen's **A1** USB port on the left side.
{% endstep %}

{% step %}

#### Highlight the controller

Go to **Settings → Accessories → General → Turn Off Accessories** and highlight your DualSense™ or DualSense Edge™ controller with the D-pad.

{% hint style="warning" %}
Do not press **✕**. The controller only needs to be highlighted.
{% endhint %}
{% endstep %}

{% step %}

#### Execute the bypass

While holding **D-pad Right**, reconnect the USB cable to the Zen's **rear USB port**. Keep holding for about five seconds, until the Zen display flashes and returns to the Gearhead logo.

Release **D-pad Right**, then press **○** to exit the menu and launch your game.

The bypass is now active.
{% endstep %}
{% endstepper %}

***

### <i class="fa-scale-balanced">:scale-balanced:</i> Trademark notice <a href="#trademarks" id="trademarks"></a>

"PlayStation®", "PlayStation®5", "PS5®", "PSN®", and "DualSense™" are trademarks of Sony Interactive Entertainment Inc.


# Xbox Series X|S®

## Xbox Series X|S®

Cronus Zen™ supports all versions of the Xbox Series X|S® console and all official Xbox Series X|S® controllers.

Any supported device works with your Xbox Series X|S® through the Cronus Zen™, including [controllers](/supported-devices/controller), [mice](/supported-devices/mice), and [keyboards](/supported-devices/keyboard).

***

### <i class="fa-xbox">:xbox:</i> Consoles <a href="#consoles" id="consoles"></a>

| Model                  |                 Supported                 |
| ---------------------- | :---------------------------------------: |
| Xbox Series X®         | <mark style="color:green;">**Yes**</mark> |
| Xbox Series S® Digital | <mark style="color:green;">**Yes**</mark> |

***

### <i class="fa-gamepad-modern">:gamepad-modern:</i> Controllers <a href="#controllers" id="controllers"></a>

Xbox Series X|S® controllers connect over **USB** or the **Xbox® Wireless Adapter**. Bluetooth® is not supported.

{% hint style="warning" %}
Some Xbox Series X|S® and Xbox® One controllers share the same name, but one may be supported and the other not. Identify yours by the extra **Capture** button, which only the Series X|S® models have.
{% endhint %}

***

### <i class="fa-gear">:gear:</i> GameSir G7 SE setup <a href="#g7se" id="g7se"></a>

The GameSir G7 SE needs a one-time configuration before it works with the Cronus Zen™.

**Configure the controller**

{% stepper %}
{% step %}

#### Update the firmware

Download the [GameSir Nexus app](https://www.gamesir.hk/pages/gamesir-nexus), select **Update**, and program the controller to the latest version.
{% endstep %}

{% step %}

#### Open profile 1

Select **Profiles**. Profile 1 should be highlighted — select **Configure**, then select **Sticks** at the top of the screen.
{% endstep %}

{% step %}

#### Set both stick ranges

Set the **Initial** value to `0` for the left stick and enable **RAW**. Do the same for the right stick.
{% endstep %}

{% step %}

#### Calibrate

Move both sticks around until X and Y read `0.00%`, then press **A** to confirm.
{% endstep %}
{% endstepper %}

**Connect to the Cronus Zen™**

{% stepper %}
{% step %}

#### Connect the Zen to the console

Use the **CONSOLE/PC USB** port.
{% endstep %}

{% step %}

#### Wait, then connect the controller

Wait 5 seconds, then connect the GameSir controller to **A1**.

{% hint style="warning" %}
If you do not wait, the controller will not power on. Look for the white LED.
{% endhint %}
{% endstep %}

{% step %}

#### Reset

Tap the Zen's reset button. After a few seconds the RGB LEDs turn **green**.
{% endstep %}
{% endstepper %}


# Connection Issues Fix

## Connection Issues Fix

If your Xbox® controller does not connect through the Cronus Zen™, a full power cycle with the controller still attached resolves most cases.

{% hint style="warning" %}
Keep the Xbox® controller connected to the Zen throughout. You only ever disconnect and reconnect the **USB cables**, never the controller itself.
{% endhint %}

{% stepper %}
{% step %}

#### Disconnect the cables

With the controller still plugged in, remove both USB cables from the Zen:

* the cable in the **top port** (CONSOLE/PC)
* the cable in the **right port** (PROG)

Wait a few seconds so the Zen powers off fully.
{% endstep %}

{% step %}

#### Reconnect the cables

Plug both cables back into the same ports. The Zen powers on and detects the Xbox® controller.

In most cases everything works at this point.
{% endstep %}

{% step %}

#### If the controller does not respond

Press and hold the Xbox® **Guide** button on the controller to turn it on. It should now connect through the Zen.
{% endstep %}

{% step %}

#### If the problem persists

Perform a [Hard reset](/frequently-asked-questions/troubleshooting) on the Cronus Zen™, then repeat steps 1 to 3.
{% endstep %}
{% endstepper %}


# Nintendo Switch®

Cronus Zen™ supports the Nintendo Switch® console and all official Nintendo® controllers.

Any supported device works with your Nintendo Switch® through the Cronus Zen™, including [controllers](/supported-devices/controller), [mice](/supported-devices/mice), and [keyboards](/supported-devices/keyboard).

***

### <i class="fa-gamepad-modern">:gamepad-modern:</i> Consoles <a href="#consoles" id="consoles"></a>

| Model                 |                 Supported                 |
| --------------------- | :---------------------------------------: |
| Nintendo Switch®      | <mark style="color:green;">**Yes**</mark> |
| Nintendo Switch® OLED | <mark style="color:green;">**Yes**</mark> |
| Nintendo Switch® Lite | <mark style="color:green;">**Yes**</mark> |

***

### <i class="fa-gear">:gear:</i> Required console setting <a href="#wired-comms" id="wired-comms"></a>

Pro Controller Wired Communication must be enabled, or the Cronus Zen™ will not pair with the console.

**System Settings → Controllers and Sensors → Pro Controller Wired Communication → On**

<figure><img src="/files/l4GJbMW9in8IjpHsFAm8" alt=""><figcaption></figcaption></figure>

***

### <i class="fa-plug">:plug:</i> Power requirements <a href="#power" id="power"></a>

| Setup        | Requirement                                                           |
| ------------ | --------------------------------------------------------------------- |
| **TV dock**  | The 15 V power supply must be connected, or the Zen will not power on |
| **Handheld** | A USB-C OTG adapter is required                                       |

{% hint style="warning" %}
Your controller may not charge while connected through the Zen. Make sure it is fully charged, or has fresh batteries, to prevent disconnections.
{% endhint %}

***

### <i class="fa-shuffle">:shuffle:</i> Crossover <a href="#crossover" id="crossover"></a>

Non-Nintendo® USB controllers connect to the Zen's **A3** port.

{% hint style="info" %}
Unlike other consoles, the Nintendo Switch® does **not** need an authentication controller in **A1**.
{% endhint %}

| Controller           | Connection                                             |
| -------------------- | ------------------------------------------------------ |
| **Nintendo Switch®** | Bluetooth® — hold the **SYNC** button for pairing mode |
| **DualShock®4**      | Bluetooth® — hold **SHARE** + **PS** for pairing mode  |
| **DualSense™**       | USB only — no Bluetooth® support                       |
| **Xbox®**            | USB, or wireless with the Xbox® Wireless Adapter       |
| **Astro® C40**       | Adapter in **A3**                                      |

Full pairing procedures: [Wireless](/quick-start-and-downloads/step-3-controller-compatibility/wireless)

***

### <i class="fa-headset">:headset:</i> Headset support <a href="#headsets" id="headsets"></a>

The Joy-Con and Wireless Pro controllers have no wired headset connection. When the Switch® is docked, the Cronus Zen™ enables wired headset support through a DualSense™, DualShock®4, or Xbox® controller instead.

Connect the controller to **A3**.

| Controller                 |                    TODO                   |                    TODO                   |
| -------------------------- | :---------------------------------------: | :---------------------------------------: |
| DualShock®4 v1 (CUH-ZCT1X) |   <mark style="color:red;">**No**</mark>  |   <mark style="color:red;">**No**</mark>  |
| DualShock®4 v2 (CUH-ZCT2X) | <mark style="color:green;">**Yes**</mark> | <mark style="color:green;">**Yes**</mark> |
| DualSense™                 | <mark style="color:green;">**Yes**</mark> |   <mark style="color:red;">**No**</mark>  |
| Xbox Series X\|S®          | <mark style="color:green;">**Yes**</mark> |   <mark style="color:red;">**No**</mark>  |
| Xbox® One                  | <mark style="color:green;">**Yes**</mark> |   <mark style="color:red;">**No**</mark>  |

***

### <i class="fa-circle-check">:circle-check:</i> Check the connection <a href="#check" id="check"></a>

Open **Controllers** from the Switch® menu and look at the icon.

* **USB shown** — the Switch® is correctly synced to the Zen
* **USB not shown** — tap the Zen's reset button to resynchronize

<figure><img src="/files/XOicjHWDKlAzzC8muXL3" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/5DThjF5EEmdJgyAg8nu4" alt=""><figcaption></figcaption></figure>


# Nintendo® Wii

Cronus Zen™ supports all versions of the Nintendo® Wii console and all official Nintendo® Wii controllers.

Any supported device works with your Nintendo® Wii through the Cronus Zen™, including [controllers](/supported-devices/controller), [mice](/supported-devices/mice), and [keyboards](/supported-devices/keyboard).

***

### <i class="fa-gamepad-modern">:gamepad-modern:</i> Controllers <a href="#controllers" id="controllers"></a>

| Model                | Connection | Notes                                                                                   |
| -------------------- | ---------- | --------------------------------------------------------------------------------------- |
| Wii U Pro Controller | Bluetooth® |                                                                                         |
| Wiimote              | Bluetooth® | No gyroscope support — requires the Nintendo® MotionPlus adapter, or use a Wiimote Plus |
| Wiimote Plus         | Bluetooth® | Expansion port supports Wii Nunchucks                                                   |

{% hint style="info" %}
None of the Wii controllers connect over USB.
{% endhint %}

***

### <i class="fa-tower-broadcast">:tower-broadcast:</i> Wii Sensor Bar <a href="#sensor-bar" id="sensor-bar"></a>

A Wii USB Sensor Bar can be used with a Wii Remote Plus and the Cronus Zen™. Connect the sensor bar to any USB power source and position it within clear view of your play area.

The sensor bar provides infrared reference points for the Wii Remote Plus. The controller's front-facing IR camera detects these infrared LEDs to determine its position.


# PlayStation®4

Cronus Zen™ supports all versions of the PlayStation®4 console, including every variation of the DualShock®4 controller over USB and Bluetooth®.

Any supported device works with your PlayStation®4 through the Cronus Zen™, including [controllers](/supported-devices/controller), [mice](/supported-devices/mice), and [keyboards](/supported-devices/keyboard).

***

### <i class="fa-playstation">:playstation:</i> Consoles <a href="#consoles" id="consoles"></a>

| Model              |                      Supported                     |
| ------------------ | :------------------------------------------------: |
| PlayStation®4      |      <mark style="color:green;">**Yes**</mark>     |
| PlayStation®4 Slim |      <mark style="color:green;">**Yes**</mark>     |
| PlayStation®4 Pro  | <mark style="color:orange;">**Conditional**</mark> |

{% hint style="warning" %}
On the PlayStation®4 Pro, the CONSOLE/PC USB cable must go into the **rear USB port**. The front ports do not supply enough power for the Cronus Zen™.
{% endhint %}

***

### <i class="fa-gamepad-modern">:gamepad-modern:</i> DualShock®4 v1 versus v2 <a href="#ds4-versions" id="ds4-versions"></a>

There are two DualShock®4 models, and the difference matters.

|                          |               v1 (CUH-ZCT1X)              |               v2 (CUH-ZCT2X)              |
| ------------------------ | :---------------------------------------: | :---------------------------------------: |
| USB                      | <mark style="color:green;">**Yes**</mark> | <mark style="color:green;">**Yes**</mark> |
| Bluetooth®               | <mark style="color:green;">**Yes**</mark> | <mark style="color:green;">**Yes**</mark> |
| Audio over USB           |   <mark style="color:red;">**No**</mark>  | <mark style="color:green;">**Yes**</mark> |
| Works as AUTH controller |   <mark style="color:red;">**No**</mark>  | <mark style="color:green;">**Yes**</mark> |

The v1 is fine for basic gaming, but it has no audio — no headset and no controller speaker — and it cannot serve as the authentication controller in a PS4® crossover setup. The v2 supports all of it.

**How to tell them apart:** the v2 has a light bar visible through the touchpad.

{% hint style="info" %}
In the model numbers, the final letter is the region: **U** for USA, **E** for Europe, **J** for Japan.
{% endhint %}

***

### <i class="fa-gamepad">:gamepad:</i> PlayStation® Move controllers <a href="#move" id="move"></a>

The original and most third-party PlayStation® Move controllers pair to the Zen over Bluetooth® — left and right on separate Bluetooth® channels.

***

### <i class="fa-list">:list:</i> Licensed controllers <a href="#licensed" id="licensed"></a>

{% hint style="info" %}
For Bluetooth® support on a PlayStation®4, some third-party licensed controllers require a DualShock®4 v2 as the authentication controller in **A1**.
{% endhint %}


# PlayStation®3

Cronus Zen™ supports all versions of the PlayStation®3 console, including every variation of the DualShock®3 and PlayStation® Move controllers over USB and Bluetooth®.

Any supported device works with your PlayStation®3 through the Cronus Zen™, including [controllers](/supported-devices/controller), [mice](/supported-devices/mice), and [keyboards](/supported-devices/keyboard).

***

### <i class="fa-playstation">:playstation:</i> Consoles <a href="#consoles" id="consoles"></a>

| Model                                |                 Supported                 |
| ------------------------------------ | :---------------------------------------: |
| PlayStation®3 (CECH-L00)             | <mark style="color:green;">**Yes**</mark> |
| PlayStation®3 Slim (CECH-2000)       | <mark style="color:green;">**Yes**</mark> |
| PlayStation®3 Slim (CECH-3000)       | <mark style="color:green;">**Yes**</mark> |
| PlayStation®3 Super Slim (CECH-4000) | <mark style="color:green;">**Yes**</mark> |

***

### <i class="fa-gamepad-modern">:gamepad-modern:</i> Controllers <a href="#controllers" id="controllers"></a>

| Model                                     |                    USB                    |                 Bluetooth®                |                  Audio                 |
| ----------------------------------------- | :---------------------------------------: | :---------------------------------------: | :------------------------------------: |
| DualShock®3 (SCPH-98050)                  | <mark style="color:green;">**Yes**</mark> | <mark style="color:green;">**Yes**</mark> | <mark style="color:red;">**No**</mark> |
| DualShock®3 (CECH-ZC2)                    | <mark style="color:green;">**Yes**</mark> | <mark style="color:green;">**Yes**</mark> | <mark style="color:red;">**No**</mark> |
| PlayStation® Move Motion (CECH-ZCM1X)     |   <mark style="color:red;">**No**</mark>  | <mark style="color:green;">**Yes**</mark> |                    —                   |
| PlayStation® Move Navigation (CECH-ZCS1X) |   <mark style="color:red;">**No**</mark>  | <mark style="color:green;">**Yes**</mark> |                    —                   |

{% hint style="info" %}
In the model numbers, the final letter is the region: **U** for USA, **E** for Europe, **J** for Japan.
{% endhint %}


# Xbox® One

Cronus Zen™ supports all versions of the Xbox® One console and all official Xbox® One controllers.

Any supported device works with your Xbox® One through the Cronus Zen™, including [controllers](/supported-devices/controller), [mice](/supported-devices/mice), and [keyboards](/supported-devices/keyboard).

***

### <i class="fa-xbox">:xbox:</i> Consoles <a href="#consoles" id="consoles"></a>

| Model                           |                 Supported                 |
| ------------------------------- | :---------------------------------------: |
| Xbox® One                       | <mark style="color:green;">**Yes**</mark> |
| Xbox® One S                     | <mark style="color:green;">**Yes**</mark> |
| Xbox® One S All-Digital Edition | <mark style="color:green;">**Yes**</mark> |
| Xbox® One X                     | <mark style="color:green;">**Yes**</mark> |

***

### <i class="fa-gamepad-modern">:gamepad-modern:</i> Controllers <a href="#controllers" id="controllers"></a>

Xbox® One controllers connect over **USB** or the **Xbox® Wireless Adapter**. Bluetooth® is not supported.

{% hint style="warning" %}
Some Xbox® One and Xbox Series X|S® controllers share the same name, but one may be supported and the other not. Identify yours by the extra **Capture** button, which only the Series X|S® models have.
{% endhint %}


# Xbox 360®

Cronus Zen™ supports all versions of the Xbox 360® console.

Any supported device works with your Xbox 360® through the Cronus Zen™, including [controllers](/supported-devices/controller), [mice](/supported-devices/mice), and [keyboards](/supported-devices/keyboard).

***

### <i class="fa-xbox">:xbox:</i> Consoles <a href="#consoles" id="consoles"></a>

| Model       |                 Supported                 |
| ----------- | :---------------------------------------: |
| Xbox 360®   | <mark style="color:green;">**Yes**</mark> |
| Xbox 360® S | <mark style="color:green;">**Yes**</mark> |
| Xbox 360® E | <mark style="color:green;">**Yes**</mark> |

***

### <i class="fa-gamepad-modern">:gamepad-modern:</i> Controllers <a href="#controllers" id="controllers"></a>

| Model              |                 Supported                 | Connection                                               |                  Audio                 |
| ------------------ | :---------------------------------------: | -------------------------------------------------------- | :------------------------------------: |
| Xbox 360® Wired    | <mark style="color:green;">**Yes**</mark> | USB                                                      | <mark style="color:red;">**No**</mark> |
| Xbox 360® Wireless |   <mark style="color:red;">**No**</mark>  | Requires the official Xbox 360® Wireless Receiver for PC | <mark style="color:red;">**No**</mark> |


# Windows® PC

### <i class="fa-plug">:plug:</i> Before starting a game <a href="#before-gaming" id="before-gaming"></a>

Disconnect the **PROG USB** cable before you start a game. Leaving it connected while playing can cause problems.

Connect the Zen to your PC using the **CONSOLE/PC USB** port only.


# Android®

Cronus Zen™ lets you play across supported Android® devices using a compatible [controller](/supported-devices/controller). It works on phones, tablets, and laptops.

***

### <i class="fa-list-check">:list-check:</i> What you need <a href="#requirements" id="requirements"></a>

|                |                                                                             |
| -------------- | --------------------------------------------------------------------------- |
| **Adapter**    | A USB-C OTG adapter                                                         |
| **Controller** | Fully charged — wireless controllers do not charge from the Android® device |

***

### <i class="fa-arrows-rotate">:arrows-rotate:</i> Setup <a href="#setup" id="setup"></a>

{% stepper %}
{% step %}

#### Enable PS Remote Play

Connect the Cronus Zen™ to a Windows® PC using the **PROG USB** port. Open **Zen Studio → Device Panel** and enable **PS Remote Play**, then disconnect the PROG USB cable.

{% hint style="info" %}
PS Remote Play is enabled so that controllers connected to Android® are detected correctly. You are not using Remote Play itself.
{% endhint %}
{% endstep %}

{% step %}

#### Connect the Zen to your Android® device

Use the **CONSOLE/PC USB** port and a USB-C OTG adapter.
{% endstep %}

{% step %}

#### Wait 10 seconds

Make sure the Zen is powered on, then wait about 10 seconds before continuing.
{% endstep %}

{% step %}

#### Connect your controller

Connect a supported controller to the Zen's **A3** USB port.
{% endstep %}
{% endstepper %}


# Apple®

Cronus Zen™ supports compatible Apple® devices, including iPad®, iPhone®, and Mac®, and lets you use supported [controllers](/supported-devices/controller) across them.

***

### <i class="fa-list-check">:list-check:</i> What you need <a href="#requirements" id="requirements"></a>

|                |                                                                           |
| -------------- | ------------------------------------------------------------------------- |
| **Adapter**    | A Lightning or USB-C adapter, depending on your device                    |
| **Controller** | Fully charged — wireless controllers do not charge from the Apple® device |

***

### <i class="fa-arrows-rotate">:arrows-rotate:</i> Setup <a href="#setup" id="setup"></a>

{% stepper %}
{% step %}

#### Enable PS Remote Play

Connect the Cronus Zen™ to a Windows® PC using the **PROG USB** port. Open **Zen Studio → Device Panel** and enable **PS Remote Play**, then disconnect the PROG USB cable.

{% hint style="info" %}
PS Remote Play is enabled so that controllers connected to the Apple® device are detected correctly. You are not using Remote Play itself.
{% endhint %}
{% endstep %}

{% step %}

#### Connect the Zen to your Apple® device

Use the **CONSOLE/PC USB** port and the adapter that matches your device.
{% endstep %}

{% step %}

#### Wait 10 seconds

Make sure the Zen is powered on, then wait about 10 seconds before continuing.
{% endstep %}

{% step %}

#### Connect your controller

Connect a supported controller to the Zen's **A3** USB port.
{% endstep %}
{% endstepper %}


# Racing Wheels

Cronus Zen™ supports select legacy Logitech® and Fanatec® racing wheels, including force feedback, pedals, brake, clutch, and shifter functionality. TODO

{% hint style="danger" %}
**Keep clear of the wheel during calibration.** The wheel can rotate unexpectedly and cause injury or damage to your equipment.
{% endhint %}

***

### <i class="fa-steering-wheel">:steering-wheel:</i> Supported wheels <a href="#supported" id="supported"></a>

<table data-search="false"><thead><tr><th>Manufacturer</th><th>Model</th></tr></thead><tbody><tr><td><strong>Fanatec®</strong></td><td>ClubSport Wheel Base v1</td></tr><tr><td></td><td>ClubSport Wheel Base v1.5</td></tr><tr><td></td><td>ClubSport Wheel Base v2</td></tr><tr><td></td><td>CSR</td></tr><tr><td></td><td>CSR Elite</td></tr><tr><td></td><td>Porsche 911 GT2</td></tr><tr><td></td><td>Porsche 911 GT3</td></tr><tr><td></td><td>Porsche 911 GT3 R</td></tr><tr><td></td><td>Porsche 911 GT3 RS v2</td></tr><tr><td></td><td>Porsche 911 Turbo</td></tr><tr><td></td><td>Porsche 911 Turbo S</td></tr><tr><td><strong>Logitech®</strong></td><td>Driving Force GT</td></tr><tr><td></td><td>G25</td></tr><tr><td></td><td>G27</td></tr></tbody></table>

***

### <i class="fa-list-check">:list-check:</i> What you need <a href="#requirements" id="requirements"></a>

|                     |                                                                                                             |
| ------------------- | ----------------------------------------------------------------------------------------------------------- |
| **AUTH controller** | A DualSense™ for PS5®, or a DualShock®4 for PS4®. It must stay connected the whole time the wheel is in use |
| **Power supply**    | Some wheels need their own power supply, for example the Logitech® G27                                      |
| **Peripherals**     | Pedals, shifter, and anything else your wheel uses                                                          |

***

### <i class="fa-arrows-rotate">:arrows-rotate:</i> Setup <a href="#setup" id="setup"></a>

{% stepper %}
{% step %}

#### Enable Wheel Mode

Connect the Cronus Zen™ to a PC using the **PROG USB** port and open Zen Studio. Go to **Tools → Zen Operational Mode** and select **Wheel Mode**.

Disconnect the Zen from the PC. Do not connect it to the console yet.
{% endstep %}

{% step %}

#### Connect the AUTH controller

Connect it to the Zen's **A1** USB port.
{% endstep %}

{% step %}

#### Connect the wheel

Connect the racing wheel to the Zen's **A3** USB port, plug in its power supply if it has one, and attach all peripherals.
{% endstep %}

{% step %}

#### Connect the Zen to the console

Use the **CONSOLE/PC USB** port.

{% hint style="danger" %}
Stand clear of the wheel from this point on. Calibration starts on its own and the wheel can rotate without warning.
{% endhint %}
{% endstep %}

{% step %}

#### Synchronize

Make sure both the AUTH controller and the wheel are powered on, then press the Zen's **blue reset button** once.

If synchronization fails, disconnect the AUTH controller from **A1** and reconnect it.
{% endstep %}

{% step %}

#### Start a game

Launch a supported racing title.
{% endstep %}
{% endstepper %}


# Zen DS4 Back Button

The Cronus Zen™ DS4 Back Button attachment adds programmable inputs to the DualShock®4 controller, including Bluetooth® support when used with the Cronus Zen™.

Paired with the Cronus Zen™, the modified DualShock®4 works across supported PlayStation®, Xbox®, and Nintendo Switch® consoles.

***

### <i class="fa-list-check">:list-check:</i> Features <a href="#features" id="features"></a>

* Four programmable action buttons
* Ergonomic rear-mounted design
* Bluetooth® support when used with the Cronus Zen™
* Map up to 17 controller functions
* No PC required — mapping is done on the Cronus Zen™ OLED screen

***

### <i class="fa-arrows-rotate">:arrows-rotate:</i> Setup <a href="#setup" id="setup"></a>

{% stepper %}
{% step %}

#### Attach the Back Button

Attach the Zen Back Button to your DualShock®4 controller.
{% endstep %}

{% step %}

#### Pair over Bluetooth®

Press the Zen's **P2** button, then hold **SHARE** + **PS** on the controller.

The LEDs flash, then turn solid once pairing is complete.
{% endstep %}

{% step %}

#### Open the mapping menu

Press the left Mapping button on the Back Button until the mapping menu appears on the Zen's OLED screen.
{% endstep %}

{% step %}

#### Assign a function

Hold the Back Button you want to map, then press the controller input you want to assign to it. Your selection appears on the OLED screen.

Up to 17 functions are available.
{% endstep %}

{% step %}

#### Save

Press **B** or **CIRCLE** to save and exit.
{% endstep %}

{% step %}

#### Connect to your console

Connect the Cronus Zen™ to your PlayStation®, Xbox®, or Nintendo Switch®, with the correct authentication (AUTH) controller in **A1**.

<table><thead><tr><th width="302">Setup</th><th>AUTH controller in A1</th></tr></thead><tbody><tr><td><strong>PS4® over Bluetooth®</strong></td><td>A second DualShock®4</td></tr><tr><td><strong>PS4® over USB</strong></td><td>The DualShock®4 with the Back Button attached</td></tr></tbody></table>
{% endstep %}
{% endstepper %}


# Native vs Emulation

Understanding the difference between native mouse and keyboard support and mouse and keyboard emulation is essential for knowing how your inputs are handled in-game.

***

### <i class="fa-arrow-right-arrow-left">:arrow-right-arrow-left:</i> The difference <a href="#difference" id="difference"></a>

**Native** means the game accepts mouse and keyboard input directly. Your input goes straight from the mouse and keyboard into the PC or console.

**Emulation** means your mouse and keyboard are translated into controller inputs. Your input goes into the Cronus Zen™ first, and from there into the PC or console.

***

### <i class="fa-circle-question">:circle-question:</i> Why emulation is needed <a href="#why" id="why"></a>

Most console games do not support native mouse and keyboard input. Emulation gets around this by making the console see your mouse and keyboard as a standard controller.

***

### <i class="fa-scale-balanced">:scale-balanced:</i> Which one to use <a href="#comparison" id="comparison"></a>

<table data-search="false"><thead><tr><th></th><th align="center">Native</th><th align="center">Emulation</th></tr></thead><tbody><tr><td>Aim assist</td><td align="center"><mark style="color:red;"><strong>No</strong></mark></td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td></tr><tr><td>Works in any game</td><td align="center"><mark style="color:red;"><strong>No</strong></mark> — select titles only</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td></tr><tr><td>M.O.D. and script support</td><td align="center"><mark style="color:red;"><strong>No</strong></mark></td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td></tr><tr><td>Sensitivity, smoothing, deadzone tuning</td><td align="center"><mark style="color:red;"><strong>No</strong></mark></td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td></tr><tr><td>Custom key mapping</td><td align="center"><mark style="color:red;"><strong>No</strong></mark></td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td></tr><tr><td>Raw, unconverted input</td><td align="center"><mark style="color:green;"><strong>Yes</strong></mark></td><td align="center"><mark style="color:red;"><strong>No</strong></mark></td></tr><tr><td>Setup required</td><td align="center"><mark style="color:green;"><strong>None</strong></mark></td><td align="center">Zen Studio, profile import, and tuning</td></tr></tbody></table>

#### Native <a href="#native" id="native"></a>

Input goes directly to the game, with nothing to set up. But games treat you as a PC player, so there is no aim assist, only select titles support it, and scripts cannot be used.

#### Emulation <a href="#emulation" id="emulation"></a>

Works in every game, keeps controller aim assist, and supports scripts, custom mapping, and detailed tuning. The trade-off is that your input is converted rather than raw, and it takes an initial setup in Zen Studio.


# Supported Platforms and Devices

### <i class="fa-gamepad-modern">:gamepad-modern:</i> Platforms <a href="#platforms" id="platforms"></a>

| Platform              | Requirement                                                                                    |
| --------------------- | ---------------------------------------------------------------------------------------------- |
| **PC**                |                                                                                                |
| **Xbox Series X\|S®** |                                                                                                |
| **Xbox® One**         |                                                                                                |
| **PlayStation®5**     | Requires [Zen Link™](/zen-link/what-is-zen-link) or [Bypass](/supported-devices/ps5/ps5bypass) |
| **PlayStation®4**     |                                                                                                |
| **Nintendo Switch®**  |                                                                                                |

***

### <i class="fa-computer-mouse">:computer-mouse:</i> Mice and keyboards <a href="#devices" id="devices"></a>

Most standard USB devices work, even if they are not listed.

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><strong>Mice</strong></td><td><a href="/pages/EhjTgrfxYQqJnv0tSWd5">/pages/EhjTgrfxYQqJnv0tSWd5</a></td><td><a href="/files/A2E7LXIohlngmreCyeBY">/files/A2E7LXIohlngmreCyeBY</a></td></tr><tr><td><strong>Keyboards</strong></td><td><a href="/pages/3h9WYBloAHRFDeAITaEa">/pages/3h9WYBloAHRFDeAITaEa</a></td><td><a href="/files/yGB1TSnToAiaoPVAUJww">/files/yGB1TSnToAiaoPVAUJww</a></td></tr></tbody></table>

***

### <i class="fa-scale-balanced">:scale-balanced:</i> Trademark notice <a href="#trademarks" id="trademarks"></a>

"PlayStation®", "PlayStation®5", "PS5®", "PSN®", and "DualSense™" are trademarks of Sony Interactive Entertainment Inc.

"Nintendo Switch®", "Joy-Con®", and "Nintendo® eShop" are trademarks of Nintendo Co., Ltd.

"Xbox®", "Xbox Series X®", "Xbox Series S®", "Xbox® One", "Xbox® Live", and "Xbox® Game Pass" are trademarks of Microsoft Corporation.


# Connect & Configure

Get your mouse and keyboard working with the Cronus Zen™.

{% hint style="warning" %}
Once your mouse and keyboard are connected to the Cronus Zen™, they act as a controller. You will not be able to use them on your PC any more unless you switch them back manually.

Plan for a **second set** of mouse and keyboard, or a **USB-powered MK Switch** to toggle between PC and Zen.
{% endhint %}

{% stepper %}
{% step %}

#### Turn off scripts

Before connecting anything, press the right blue **Memory Slot** button on the Cronus Zen™ and cycle through until the Collective Minds logo appears on the OLED screen.

That means no GamePacks or scripts are active.
{% endstep %}

{% step %}

#### Connect your devices

| Port          | Device           |
| ------------- | ---------------- |
| **A1**        | Controller       |
| **A2**        | Keyboard         |
| **A3**        | Mouse            |
| **PROG USB**  | Cable to your PC |
| {% endstep %} |                  |

{% step %}

#### Check device detection

Open Zen Studio on your PC, go to the **Device** tab, and look under **Connected Devices**. Your mouse and keyboard should appear.

{% hint style="info" %}
A device shown with a question mark still works — it only means Zen Studio has no icon for that model.
{% endhint %}
{% endstep %}

{% step %}

#### Test the input

In Zen Studio, open **Tools → Device Monitor**.

| Test              | What you should see                                                      |
| ----------------- | ------------------------------------------------------------------------ |
| Move the mouse    | **RX / RY** values change — your mouse is read as right stick movement   |
| Press **W A S D** | **LX / LY** values change — your keyboard is read as left stick movement |
| Press **Space**   | Confirms additional mappings are working                                 |
| {% endstep %}     |                                                                          |
| {% endstepper %}  |                                                                          |


# PlayStation®5 Setup

Cronus Zen™ supports select legacy Logitech® and Fanatec® racing wheels on PlayStation®5, including force feedback, pedals, brake, clutch, and shifter in compatible racing titles.

{% hint style="danger" %}
**Do not touch the wheel during force feedback initialization and auto-calibration.** Unexpected movement can cause injury or result in incorrect calibration.
{% endhint %}

{% hint style="info" %}
Wheel Mode development concluded in January 2020. Further expansion is not feasible due to device memory and compatibility constraints across multiple hardware brands and platforms.

For wider racing wheel compatibility, consider Drive Hub™, a dedicated wheel adapter.
{% endhint %}

***

### <i class="fa-steering-wheel">:steering-wheel:</i> Supported wheels <a href="#supported" id="supported"></a>

<table data-search="false"><thead><tr><th>Manufacturer</th><th>Model</th><th>Mode</th></tr></thead><tbody><tr><td><strong>Fanatec®</strong></td><td>ClubSport Wheel Base v1 / v1.5 / v2</td><td>PS3 Mode, DC power connected</td></tr><tr><td></td><td>CSR, CSR Elite</td><td>PS3 Mode, DC power connected</td></tr><tr><td></td><td>Porsche 911 GT2, GT3, GT3 R, GT3 RS v2</td><td>PS3 Mode, DC power connected</td></tr><tr><td></td><td>Porsche 911 Turbo, Turbo S</td><td>PS3 Mode, DC power connected</td></tr><tr><td><strong>Logitech®</strong></td><td>Driving Force GT</td><td>PS3 Mode, DC power connected</td></tr><tr><td></td><td>G25</td><td>PS3 Mode, DC power connected</td></tr><tr><td></td><td>G27</td><td>PS3 Mode, DC power connected</td></tr></tbody></table>

Fanatec® wheels: see [Fanatec PS3 Mode](/wheel-mode/fanatec-ps3-mode) for detailed instructions.

{% hint style="info" %}
**Logitech® G29** works directly on PS4® and PS5® without a Cronus Zen™. Set it to PS4 Mode with the DC power supply connected.
{% endhint %}

<details>

<summary><strong>Logitech® G25 — shifter modes</strong></summary>

To switch between Six-Speed and Sequential Mode, push down on the shift knob and rotate the **Mode Selection Dial** until the red arrow points to the symbol you want.

* Sequential Mode — status light **on**
* Six-Speed Mode — status light **off**

</details>

***

### <i class="fa-plug">:plug:</i> Power supply <a href="#power" id="power"></a>

{% hint style="warning" %}
If your wheel needs an external power supply — the Logitech® G25, G27, and G29 use DC 24 V 2 A / 48 W — it **must** be connected. All peripherals such as pedals, brake, clutch, and shifter must also be connected.
{% endhint %}

Running the wheel without its power supply can cause:

* no force feedback
* continuous button inputs, for example the D-pad registering repeatedly
* clutch or pedal input not being detected

For example, a Logitech® G27 used in Gran Turismo® 7 without its power supply shows all three.

***

### <i class="fa-playstation">:playstation:</i> PS5® console settings <a href="#console-settings" id="console-settings"></a>

<table><thead><tr><th width="380">Setting</th><th>Value</th></tr></thead><tbody><tr><td>System → Power Saving<br><em>Set Time Until Controllers Turn Off</em></td><td><strong>Don't Turn Off</strong></td></tr><tr><td>System → Power Saving → Features Available in Rest Mode<br><em>Supply Power to USB Ports</em></td><td><strong>Always</strong></td></tr><tr><td>Accessories → Controllers<br><em>Communication Method</em></td><td><strong>Use USB Cable</strong></td></tr></tbody></table>

#### Before you start <a href="#before" id="before"></a>

* Confirm the game supports PS5® wheel input — see Compatible Racing Games
* Disable all scripts and GamePacks
* Unpair every PlayStation® controller from the console

{% hint style="warning" %}
When a DualSense™ or DualShock®4 is connected to a PS5® over USB, it also pairs over Bluetooth®. Deleting it prevents automatic re-pairing.

1. Connect the Cronus Zen™ to the PS5® using any controller
2. Go to **Settings → Accessories → Bluetooth Accessories**
3. Select the controller and choose **Delete**
   {% endhint %}

***

### <i class="fa-list-check">:list-check:</i> What you need <a href="#requirements" id="requirements"></a>

|                     |                                                                                 |
| ------------------- | ------------------------------------------------------------------------------- |
| **Console**         | PlayStation®5                                                                   |
| **Wheel**           | A compatible racing wheel from the list above                                   |
| **AUTH controller** | A PS4® Speciality authentication controller, for example the HORI® PS4 Mini-Pad |
| **Software**        | Zen Studio on a Windows® PC                                                     |

***

### <i class="fa-arrows-rotate">:arrows-rotate:</i> Setup <a href="#setup" id="setup"></a>

In PS5® Wheel Mode, supported wheels are automatically mapped to emulate a Logitech® G29 profile with full force feedback. No manual button remapping is required.

**Configure Wheel Mode**

{% stepper %}
{% step %}

#### Connect the Zen to your PC

Use the **PROG USB** port.
{% endstep %}

{% step %}

#### Enable Wheel Mode

Open **Zen Studio → Tools → Zen Operational Mode**, select **Wheel Mode**, and click **Finish**.

The Wheel Mode logo appears on the Zen's OLED screen.
{% endstep %}

{% step %}

#### Confirm it is active

Press the Zen's reset button once. If **Device Disconnected** appears, reconnect the PROG USB cable.
{% endstep %}

{% step %}

#### Enable PS4 Speciality

In **Zen Studio → Device Panel**, enable **PS4 Speciality** and let the Zen restart.

To confirm it stayed enabled, disconnect and reconnect the PROG USB cable and check the setting again.
{% endstep %}
{% endstepper %}

**Connect the hardware**

{% stepper %}
{% step %}

#### Disconnect everything

Remove all cables from the Zen so it has no power.
{% endstep %}

{% step %}

#### Connect the AUTH controller

Connect the PS4® Speciality authentication controller to **A1**.
{% endstep %}

{% step %}

#### Connect the wheel

Connect the racing wheel to **A3**, with its external power supply connected.
{% endstep %}

{% step %}

#### Connect the Zen to the PS5®

Use the **CONSOLE/PC USB** port.
{% endstep %}

{% step %}

#### Synchronize

Press the Zen's reset button to complete synchronization.

{% hint style="danger" %}
Stand clear of the wheel. Force feedback initialization and auto-calibration start automatically, and the wheel can move without warning.
{% endhint %}
{% endstep %}
{% endstepper %}


# PlayStation®4 Setup

Cronus Zen™ supports select legacy Logitech® and Fanatec® racing wheels on PlayStation®4, including force feedback, pedals, brake, clutch, and shifter in compatible racing titles.

{% hint style="danger" %}
**Do not touch the wheel during force feedback initialization and auto-calibration.** Unexpected movement can cause injury or result in incorrect calibration.
{% endhint %}

{% hint style="info" %}
Wheel Mode development concluded in January 2020. Further expansion is not feasible due to device memory and compatibility constraints across multiple hardware brands and platforms.

For wider racing wheel compatibility, consider Drive Hub™, a dedicated wheel adapter.
{% endhint %}

***

### <i class="fa-steering-wheel">:steering-wheel:</i> Supported wheels <a href="#supported" id="supported"></a>

See PlayStation®5 Setup for the full list of supported [wheels](/supported-devices/racing-wheels) and their required modes. The same wheels are supported on PlayStation®4.

***

### <i class="fa-plug">:plug:</i> Power supply <a href="#power" id="power"></a>

{% hint style="warning" %}
If your wheel needs an external power supply — the Logitech® G25, G27, and G29 use DC 24 V 2 A / 48 W — it **must** be connected. All peripherals supplied with the wheel must also be connected.
{% endhint %}

Running the wheel without its power supply can cause:

* no force feedback
* continuous button inputs, for example the D-pad registering repeatedly
* clutch or pedal input not being detected

***

### <i class="fa-gamepad-modern">:gamepad-modern:</i> Authentication controller <a href="#auth" id="auth"></a>

A licensed PS4® authentication controller must be connected to **A1**, or the wheel disconnects roughly every 8 to 10 minutes.

The DualShock®4 v2 (CUH-ZCT2X) is recommended, for authentication and for crossover setups.

| Model          |               License donor               |               Audio over USB              |           Audio over Bluetooth®           |                DS4 speaker                |                Switch audio               |
| -------------- | :---------------------------------------: | :---------------------------------------: | :---------------------------------------: | :---------------------------------------: | :---------------------------------------: |
| CUH-ZCT1X (v1) |   <mark style="color:red;">**No**</mark>  |   <mark style="color:red;">**No**</mark>  |   <mark style="color:red;">**No**</mark>  |   <mark style="color:red;">**No**</mark>  |   <mark style="color:red;">**No**</mark>  |
| CUH-ZCT2X (v2) | <mark style="color:green;">**Yes**</mark> | <mark style="color:green;">**Yes**</mark> | <mark style="color:green;">**Yes**</mark> | <mark style="color:green;">**Yes**</mark> | <mark style="color:green;">**Yes**</mark> |

{% hint style="info" %}
In the model numbers, the final letter is the region: **U** for USA, **E** for Europe, **J** for Japan.
{% endhint %}

***

### <i class="fa-playstation">:playstation:</i> PS4® console settings <a href="#console-settings" id="console-settings"></a>

<table><thead><tr><th width="380">Setting</th><th>Value</th></tr></thead><tbody><tr><td>Devices → Controllers<br><em>Communication Method</em></td><td><strong>Use USB Cable</strong></td></tr><tr><td>Power Save Settings<br><em>Set Time Until Controllers Turn Off</em></td><td><strong>Do Not Turn Off</strong></td></tr></tbody></table>

#### Before you start <a href="#before" id="before"></a>

* Confirm the game supports PS4® wheel input — see Compatible Racing Games
* Unpair every PlayStation® controller from the console

{% hint style="warning" %}
When a DualShock®4 is connected to a PS4® over USB, it also pairs over Bluetooth®. Forgetting the device prevents automatic re-pairing.

1. Connect the Cronus Zen™ to the PS4® using any controller
2. Go to **Settings → Devices → Bluetooth Devices**
3. Select the controller and choose **Forget Device**
   {% endhint %}

***

### <i class="fa-list-check">:list-check:</i> What you need <a href="#requirements" id="requirements"></a>

|                     |                             |
| ------------------- | --------------------------- |
| **Console**         | PlayStation®4               |
| **Wheel**           | A compatible racing wheel   |
| **AUTH controller** | DualShock®4 v2 (CUH-ZCT2X)  |
| **Software**        | Zen Studio on a Windows® PC |

***

### <i class="fa-arrows-rotate">:arrows-rotate:</i> Setup <a href="#setup" id="setup"></a>

Supported wheels are automatically mapped to emulate a Logitech® G29 profile with force feedback. No manual button remapping is required.

**Configure Wheel Mode**

{% stepper %}
{% step %}

#### Connect the Zen to your PC

Use the **PROG USB** port.
{% endstep %}

{% step %}

#### Enable Wheel Mode

Open **Zen Studio → Tools → Zen Operational Mode**, select **Wheel Mode**, and click **Finish**.

The Wheel Mode logo appears on the Zen's OLED screen.
{% endstep %}

{% step %}

#### Set the device panel options

In **Zen Studio → Device Panel**:

| Setting                  | Value        |
| ------------------------ | ------------ |
| Emulator Output Protocol | **AUTO**     |
| PS4 Speciality           | **Disabled** |
| PS Remote Play           | **Disabled** |
| {% endstep %}            |              |

{% step %}

#### Confirm it is active

Press the Zen's reset button once and check that Wheel Mode shows in the status bar. If **Device Disconnected** appears, unplug and reconnect the PROG USB cable.
{% endstep %}
{% endstepper %}

**Connect the hardware**

{% stepper %}
{% step %}

#### Disconnect everything

Remove all cables from the Zen so it has no power.
{% endstep %}

{% step %}

#### Connect the AUTH controller

Connect the DualShock®4 v2 to **A1**.
{% endstep %}

{% step %}

#### Connect the wheel

Connect the racing wheel to **A3**, with its external power supply connected.
{% endstep %}

{% step %}

#### Connect the Zen to the PS4®

Use the **CONSOLE/PC USB** port.

{% hint style="info" %}
On a PS4® Pro, use a **rear** USB port on the console.
{% endhint %}
{% endstep %}

{% step %}

#### Synchronize

Press the Zen's reset button to complete synchronization.

{% hint style="danger" %}
Stand clear of the wheel. Force feedback initialization and auto-calibration start automatically, and the wheel can move without warning.
{% endhint %}
{% endstep %}
{% endstepper %}


# Compatible Racing Games

Wheel Mode works with most PS4® and PS5® titles that natively support racing wheels.

{% hint style="info" %}
Wheel Mode is only for racing titles that natively support force feedback, clutch, brake, shifter, and pedals. Arcade racers that rely on standard controller input are not supported.
{% endhint %}

***

### <i class="fa-playstation">:playstation:</i> How PS5® support works <a href="#ps5" id="ps5"></a>

Wheel Mode was originally developed for PlayStation®4. On PlayStation®5 it runs through the **PS4 Speciality Mode** method and supports full force feedback in compatible titles.

***

### <i class="fa-flag-checkered">:flag-checkered:</i> Compatible titles <a href="#titles" id="titles"></a>

| Status                                         | Meaning                                                                         |
| ---------------------------------------------- | ------------------------------------------------------------------------------- |
| <mark style="color:green;">**PS4**</mark>      | Wheel Mode works with the PS4® version of the game, through PS4 Speciality Mode |
| <mark style="color:orange;">**PS5 TBC**</mark> | The PS5® version has not yet been confirmed                                     |


# Fanatec PS3 Mode

Set your Fanatec® wheel to **PS3 Mode** before enabling the Zen's Wheel Mode. PS3 Mode is required for full force feedback.

{% hint style="danger" %}
**Do not touch the wheel during force feedback initialization and auto-calibration.** Unexpected movement can cause injury or result in incorrect calibration.
{% endhint %}

Find your wheel below:

| Wheel                | Section            |
| -------------------- | ------------------ |
| CSR, CSR Elite       | Back Button method |
| 911 GT2              | Back Button method |
| 911 Turbo S          | Back Button method |
| 911 GT3 RS, RS v2    | Base + Select      |
| ClubSport Wheel Base | ClubSport          |

### <i class="fa-steering-wheel">:steering-wheel:</i> CSR, 911 GT2, and 911 Turbo S <a href="#back-button" id="back-button"></a>

***

{% stepper %}
{% step %}

#### Connect the Zen to your console

Connect the Cronus Zen™ to the PS4® or PS5®.
{% endstep %}

{% step %}

#### Connect the wheel to the Zen

Run a USB cable from the Cronus Zen™ to the **left-side USB port** on the wheel base.
{% endstep %}

{% step %}

#### Enter PC Mode

After the wheel finishes self-calibration, hold the **Back** button for about one second.

| Wheel          | What you should see                                 |
| -------------- | --------------------------------------------------- |
| CSR, CSR Elite | The **– – –** indicator disappears from the display |
| 911 GT2        | The **– – –** indicator disappears from the display |
| 911 Turbo S    | No wheel button illumination                        |
| {% endstep %}  |                                                     |

{% step %}

#### Activate PS3 Mode

Press the **Connect** and **Back** buttons at the same time.

| Wheel          | Confirmation                                            |
| -------------- | ------------------------------------------------------- |
| CSR, CSR Elite | A dot appears on the display                            |
| 911 GT2        | The wheel buttons light up with PlayStation® symbols    |
| 911 Turbo S    | The wheel buttons light up with the PlayStation® symbol |
| {% endstep %}  |                                                         |

{% step %}

#### Disconnect

Disconnect the wheel from the Cronus Zen™, leaving it powered on.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
The 911 Turbo S procedure applies to setups with no RF dongle, on the latest Fanatec® firmware.
{% endhint %}

***

### <i class="fa-steering-wheel">:steering-wheel:</i> 911 GT3 RS and RS v2 <a href="#gt3rs" id="gt3rs"></a>

{% stepper %}
{% step %}

#### Connect the Zen to your console

Connect the Cronus Zen™ to the PS4® or PS5®.
{% endstep %}

{% step %}

#### Connect the wheel to the Zen

Connect the wheel's USB cable to the Cronus Zen™.
{% endstep %}

{% step %}

#### Activate PS3 Mode

After self-calibration completes, press the **Base** and **Select** buttons at the same time.
{% endstep %}

{% step %}

#### Disconnect

The wheel is now in PS3 Mode. Disconnect it from the Cronus Zen™, leaving it powered on.
{% endstep %}
{% endstepper %}

***

### <i class="fa-steering-wheel">:steering-wheel:</i> ClubSport Wheel Base <a href="#clubsport" id="clubsport"></a>

{% stepper %}
{% step %}

#### Connect everything with the console off

Connect all components as instructed while the PS4® or PS5® is powered off.
{% endstep %}

{% step %}

#### Power on the wheel base

Power on the ClubSport Wheel Base.
{% endstep %}

{% step %}

#### Power on the console

Wait until the console reaches the main menu and the wheel finishes calibration.
{% endstep %}

{% step %}

#### Activate PS3 Mode

On the Universal Hub, press **Select** and **Circle** at the same time, immediately after auto-calibration completes.

The tuning display shows a **red dot**, confirming PS3 Mode is active.
{% endstep %}
{% endstepper %}

#### Certain rims need a different combination <a href="#rims" id="rims"></a>

For the BMW M3 GT2, Formula Black, Formula Carbon, and Porsche 918 RSR rims, press one of these immediately after auto-calibration:

* **Select (9)** + **Horn (22)**
* **Select (9)** + **Circle (3)**

Press both buttons at the same time.

***

### <i class="fa-gamepad-modern">:gamepad-modern:</i> Menu navigation <a href="#menu" id="menu"></a>

With the Cronus Zen™ you can navigate game menus using your Fanatec® wheel, including in titles that never supported wheel input in menus.

| Button    | Combination on PS4®                 |
| --------- | ----------------------------------- |
| **Home**  | L3 + R3                             |
| **Share** | Bottom-left black button on the rim |


# Troubleshooting

Find your symptom below and open it. If a fix points to a procedure, that procedure is at the bottom of this page.

### <i class="fa-triangle-exclamation">:triangle-exclamation:</i> Symptoms <a href="#symptoms" id="symptoms"></a>

<details>

<summary><strong>Firmware Version Incompatible</strong></summary>

This message appears when your Cronus Zen™ firmware or your Zen Studio version is outdated.

**Fix**

1. Update the firmware — see Update Firmware
2. Update Zen Studio
3. Reconnect the Zen and restart Zen Studio

</details>

<details>

<summary><strong>Error E3, E3001, or E3002</strong></summary>

These codes mean the firmware is corrupted or missing. They typically occur when:

* firmware installation was interrupted
* the device lost power during an update
* firmware files became corrupted

**Fix:** Bootloader recovery

</details>

<details>

<summary><strong>Stack or Bytecode error</strong></summary>

Indicates corrupted memory, an invalid script, or a failed programming process. Typically caused by:

* interrupting programming
* power loss during flashing
* a corrupted GamePack or script

**Fix:** Hard reset, then reinstall your scripts.

{% hint style="info" %}
If the error comes back immediately after installing one particular script, that script is corrupted or incompatible.
{% endhint %}

</details>

<details>

<summary><strong>Freezing or abnormal behaviour</strong></summary>

If the Zen freezes, behaves abnormally, or shows error codes, a hard reset restores it to factory condition.

**Fix:** Hard reset

</details>

***

### <i class="fa-screwdriver-wrench">:screwdriver-wrench:</i> Procedures <a href="#procedures" id="procedures"></a>

<details>

<summary><strong>Bootloader recovery</strong></summary>

**Enter Bootloader Mode**

{% stepper %}
{% step %}

#### Find the reset button

The **blue reset button** is underneath the Cronus Zen™.
{% endstep %}

{% step %}

#### Hold it and connect

Press and hold the reset button firmly. While holding, connect the Zen to your PC using the **CONSOLE/PC USB** port.
{% endstep %}

{% step %}

#### Confirm recovery mode

The screen shows **Zen Bootloader**.
{% endstep %}
{% endstepper %}

**Reinstall the firmware**

Open [firmware.modcentral.ca](https://firmware.modcentral.ca/) in Google Chrome or Microsoft Edge, and follow the on-screen instructions.

{% hint style="warning" %}
If the update fails, the cause is usually insufficient USB power. Connect the **PROG USB** port on the right side of the Zen as well, then retry with both ports connected.
{% endhint %}

</details>

<details>

<summary><strong>Hard reset</strong></summary>

{% hint style="danger" %}
A hard reset erases every script stored on the Zen.
{% endhint %}

**Step 1 — Hardware reset**

{% stepper %}
{% step %}

#### Disconnect everything

Remove all cables from the Zen so it has no power.
{% endstep %}

{% step %}

#### Hold P1 + P2

Press and hold both large blue buttons beside the OLED.
{% endstep %}

{% step %}

#### Connect while holding

Connect the Zen using the **CONSOLE/PC USB** port and keep holding for at least 4 seconds.

The RGB LEDs flash **red → green → blue**.
{% endstep %}

{% step %}

#### Release

Let go once the logo appears on the OLED screen.
{% endstep %}
{% endstepper %}

**Step 2 — Factory reset in Zen Studio**

{% stepper %}
{% step %}

#### Connect via PROG USB

Connect the Zen to your PC using the **PROG USB** port.
{% endstep %}

{% step %}

#### Run the factory reset

Open **Zen Studio → Device** tab and click **Factory Reset** in the bottom-right. Confirm — the Zen reboots to its default state.
{% endstep %}
{% endstepper %}

**Step 3 — After the reset**

The Zen is now empty. Reinstall the latest firmware, then reinstall your scripts.

</details>


# Discord server

Collective Minds has an official Discord server for support, news, and releases.

<a href="https://discord.gg/KuwFMtgVzP" class="button primary">Join the Discord server</a>


# Zen Studio Overview

Zen Studio is the configuration software for Cronus Zen™.

It provides:

• Device configuration and maintenance tools\
• GPC script development and compilation\
• Mouse & Keyboard configuration\
• Input capture and remapping plugins

## Library Panel

***

Provides access to downloadable GPC scripts from the online database.

When logged in, your Community Account information appears on the right side of the panel.

## Compiler Panel

***

Integrated development environment (IDE) for GPC scripting.

Features:

• Source code editor\
• Syntax highlighting\
• Find / Replace\
• Integrated compiler\
• Debug output window

## Programmer Panel

***

Used to assign content to the Zen’s memory slots.

Provides access to:

• GamePacks\
• Library Scripts\
• Remapper Profiles\
• Local GPC files

## Device Panel

***

Contains device configuration and maintenance tools, including:

• Output Protocol selection\
• PS4 Speciality and Remote Play options\
• Legacy 16-bit compiler toggle\
• Reset Device\
• Factory Reset\
• Erase Memory Slots\
• Device Monitor access\
• Connected device information

## M\&K Settings Panel

***

Mouse & Keyboard configuration interface.

Allows:

• Sensitivity adjustments\
• Deadzone configuration\
• Ballistic curve tuning\
• Button and key remapping\
• Profile management


# Main Interface

This page explains the layout and core functionality of Zen Studio™.

## Menu Bar

***

The Menu Bar provides access to all major functions through drop-down menus.

Includes:

• File management\
• Script editing tools\
• Device tools\
• Plugins\
• Support resources

### File, Edit & Compiler

These menus are used for:

• Creating and saving GPC scripts\
• Managing GPJ project files\
• Editing and navigating code\
• Compiling scripts

## Tools

***

Provides access to device management and system tools.

#### Device Monitor

Opens the Device Monitor window.\
Requires Cronus Zen™ to be connected via the PROG USB port.

#### Zen Studio Update

Checks for available software updates.\
Requires internet connection.

#### Zen Operational Mode

Select the device’s operating mode:

• **Normal Mode** – Full functionality enabled\
• **Tournament Mode** – Scripts and GamePacks disabled\
• **Wheel Mode** – Enables supported racing wheel functionality

## Plugins

***

Plugins extend functionality and can be accessed via menu or shortcuts.

• **MAX Combo (Alt + F1)** – Records controller input and converts it to GPC code\
• **MAX Mapper (Alt + F2)** – Visual remapping tool with GPC export\
• **MAX Rec (Alt + F3)** – Records and replays input sequences

## Help

***

Provides access to:

• Online documentation\
• Community resources\
• User Manual\
• About Zen Studio (F1) – Displays software and firmware version information

## Working Panels

***

Navigation tabs switch between five main panels:

• **Library** – Download and browse GPC scripts\
• **Compiler** – Create and edit GPC scripts\
• **Programmer** – Assign GamePacks, scripts, and profiles to memory slots\
• **Device** – Configure device settings and maintenance tools\
• **M\&K Settings** – Mouse & Keyboard configuration

For detailed explanations, see:\
**Working Panels**

## Community Panel

***

Displays:

• Community account status\
• GPC Library statistics\
• Registered device information\
• Zen serial number

The serial number links the device to the registered account and stores configuration data per device.

## Status Bar

***

Located at the bottom of the interface. Divided into three sections:

#### Left Section

Displays device connection status and firmware version.

#### Middle Section

Displays the active Operational Mode.\
Clickable to reopen the Operational Mode interface.

#### Right Section

Displays compiler information:

• Script status (OK / BAD)\
• Current line and column\
• Insert (INS) or Overtype (OVR) mode


# File Management

Zen Studio provides standard file management tools for handling **GPC scripts** and **GPJ project files**.

### File Types

***

**.GPC**\
GPC scripting language file used by Cronus devices.

**.GPJ**\
Project file containing a collection of GPC scripts.

## Creating Files

***

Navigate to **File → New** to access the following options:

#### Empty File

Creates a blank file in a new compiler tab.

#### GPC Script

Creates a new GPC script template including the `main` function.

#### Remap Sample

Creates a sample remapping script template.

#### Combo Rapid Fire

Creates a sample rapid-fire combo script template.

## Opening Files

***

#### Open…

**File → Open (Ctrl + O)**

Open one or multiple GPC or GPJ files.\
Each file opens in a separate compiler tab.\
If already open, the existing tab is selected.

## Project Management

***

### Add File to Project

Adds a `.gpc` file to the currently open project (.GPJ).

Requirements:\
• A project must already be open.

Use:\
**File → Add File to Project**

### Save Project

Saves all currently included scripts into a single GPJ project file.

Before saving:\
• Ensure all individual scripts are saved.

### Save Project As…

Save the current project under a new name or location.

### Close Project

Closes the currently open project file.

## Saving Files

***

#### Save (Ctrl + S)

Saves the active script.

If the file is new, a destination prompt appears.\
If it exists, it will be overwritten.

**Important:**\
The script tab must be selected (focused), otherwise Save and Compile options are unavailable.

Unsaved changes are indicated by an **asterisk (\*)** in the tab name.

#### Save As…

Save the active script or project under a new name or location.

#### Save All

Saves all open scripts.

## Closing Files

***

#### Close

Closes the selected tab.\
Unsaved changes will trigger a confirmation prompt.

#### Close All

Closes all open compiler tabs.

***

## Recent Files

Zen Studio stores the 10 most recently opened files under:

**File → Recent Files**

***

## Relaunch as Admin

Zen Studio requires full Windows Administrator privileges.

If permissions are restricted:

**File → Relaunch as Admin**

If successful, **\[ADMIN]** will appear in the title bar.

Note:\
Open tabs must be closed before relaunching.

***

## Exit

Closes Zen Studio.


# Edit, Search, Replacement

The Zen Studio Compiler supports standard editor operations including:

• Undo / Redo\
• Cut / Copy / Paste\
• Select All\
• Find / Replace\
• Go to Line / Column

All functions are available via the **Edit Menu**, keyboard shortcuts, or right-click context menu.

## Indentation

***

Indentation improves code readability by organizing logic into structured blocks.

• **Tab** – Indent current line or selected block\
• **Shift + Tab** – Remove indentation

Multiple lines can be indented simultaneously by selecting them before pressing Tab.

## Overtype Mode

***

Press the **Insert** key to toggle between:

• **INS** – Insert mode (default)\
• **OVR** – Overwrite mode

The current mode is displayed in the status bar.\
The cursor shape changes to reflect the active mode.

## Selecting Text

***

Text can be selected using:

• Click and drag\
• Double-click (select word)\
• Triple-click (select line)\
• Click line number margin (select full line)

Extend selection with:

• **Shift + Click**\
• **Shift + Arrow Keys**

Rectangle (block) selection:

• Hold **Alt** while selecting with the mouse.

## Edit Menu Commands

***

### Undo (Ctrl + Z)

Reverses the last action.\
Can be repeated until returning to the original state.

### Redo (Ctrl + Y)

Reapplies the last undone action.

### Cut (Ctrl + X)

Removes selected text and copies it to the clipboard.

### Copy (Ctrl + C)

Copies selected text without removing it.

### Paste (Ctrl + V)

Inserts copied or cut text at the cursor location.

### Select All (Ctrl + A)

Selects all text in the current document.

## Find / Replace (Ctrl + F)

***

Search for specific text or replace matching entries.

Useful for:

• Variable renaming\
• Refactoring\
• Large script adjustments

## Go to Line / Column (Ctrl + G)

***

Jump directly to a specific line or column number.

Recommended for large scripts (4000+ lines).


# Working Panels

Zen Studio is organized into five main working panels.\
Use the navigation tabs to switch between them.

### 1. Library

***

Provides access to downloadable GPC scripts from the online database.

Intended for:

• Users who want ready-made scripts\
• Learning GPC through community examples

### 2. Compiler

***

Integrated development environment (IDE) for GPC scripting.

Includes:

• Source code editor\
• Syntax highlighting\
• Integrated compiler\
• Debug and testing tools

Used for creating and modifying custom scripts.

### 3. Programmer

***

Used to manage and assign content to the Zen’s memory slots.

Provides access to:

• GPC Scripts\
• Remapper Profiles\
• Local GPC files

Cronus Zen™ includes **8 × 32KB memory slots**.\
Any combination of supported content can be assigned.

### 4. Device

***

Contains configuration and maintenance options, including:

• Device settings\
• Output protocol selection\
• PS4 Speciality and Remote Play options\
• Memory slot management\
• Factory Reset and Erase Memory Slots\
• Device Monitor access\
• Connected device display

Used for device configuration and troubleshooting.

### 5. M\&K Settings

***

Mouse & Keyboard configuration interface.

Allows:

• Mouse sensitivity tuning\
• Deadzone configuration\
• Ballistic curve adjustment\
• Button and key remapping\
• Loading premade game profiles

Used to optimize mouse translation within console input limits.


# Library

The GPC Library provides access to community-created GPC scripts.

Access requires:\
• A registered Cronus Zen™ device

The library contains a large collection of downloadable scripts for various supported games and controllers.

## Script Information Panel

***

When selecting a script, the information panel displays:

• Script title\
• Version number\
• Author name\
• Author notes

This section provides important usage details and compatibility information before downloading or compiling a script.


# Compiler

The Compiler is an integrated development environment (IDE) for creating, editing, and compiling GPC scripts.

Features include:

• Syntax highlighting\
• Find / Replace\
• Real-time error reporting\
• Bytecode size and memory usage analysis\
• Debug output window

### 16-Bit vs 32-Bit Scripts

***

Legacy 16-bit scripts must be compiled using the **Legacy 16-Bit Compiler**.

Enable this option in:

**Device Panel → Use Legacy 16-Bit Compiler**

Use this only for older scripts that require compatibility.

## Compiler Interface

***

### Tab Bar

Displays all open GPC scripts.

• Drag and drop to reorder tabs\
• An asterisk (\*) indicates unsaved changes

### Editor Window

Used to edit GPC source code.

Includes:

• Real-time syntax highlighting\
• Text formatting\
• Search functionality

Syntax highlighting improves readability and reduces coding errors.

### Compiler Output

Displays compilation results for the active script.

Output includes:

• Errors\
• Warnings\
• Bytecode size\
• Stack memory usage\
• Percentage of memory used

Cronus Zen provides **8 × 32KB memory slots**.

#### Important

Warnings should be treated as errors.

Even if compilation succeeds, warnings may indicate:

• Deprecated functions\
• Out-of-range values\
• Potential instability

Unresolved warnings can cause runtime issues or device error codes.

## Compiler Menu

***

### Font Size

Adjust editor font size via:

**Compiler → Font Size**

Default: 10

### Compile (F7)

Compiles the active script without running it.

Used to verify:

• Errors\
• Warnings\
• Memory usage

### Build and Run (F5)

Compiles the active script and loads it directly into device RAM.

The script runs immediately without programming a memory slot.

Commonly used for live testing with the **Device Monitor**.

### Publish Script

Allows submission of a GPC script to the public GPC Library.

Requirements:

• Registered device\
• Internet connection

Access via:

**Compiler → Publish Script**

This opens the publishing portal in your default web browser.


# Programmer

The **Programmer** panel provides access to:\
• GPC Scripts\
• Remapper Profiles\
• Local GPC files

Cronus Zen™ includes **8 memory slots (32KB each)**.\
Any combination of scripts, or profiles can be assigned to these slots.

## Panel Sections

***

### File Directory

Browse local folders and GPC files.

Features:

• Set a favorite folder\
• Reset favorite to default (Desktop)\
• Refresh local directory

Right-click the Favorites bar to reset it.

### GPC Scripts

***

Any script currently open in the Compiler appears here.

Drag and drop to a memory slot to assign.

### Remapper Profiles

***

Displays profiles created using the **MAX Mapper** plugin.

Drag and drop to assign to a memory slot.

## Memory Slot Management

***

### Program Device

Click **Program Device** to write all configured memory slots to the Cronus Zen.

### Reload Memory Slots

If changes are made via the GamePack Configuration Interface (GCI), use **Reload Memory Slots** to sync Zen Studio with the device.

### Delete Memory Slot

Drag a slot to the **trash icon** to clear it.\
Click **Program Device** to confirm deletion.


# Device

The **Device** tab allows you to:

• View connected devices\
• Configure device options\
• Manage output protocols\
• Run maintenance tools\
• Access diagnostics

## Device Options

***

### DualShock®4 Light Bar Brightness

Adjust DS4 light bar brightness in real time.

### Open Device Monitor with Build and Run

Automatically opens **Device Monitor** when using **Build and Run (F5)**.

### Unload Script When Closing Device Monitor

Scripts launched with **Build and Run (F5)** will unload when Device Monitor is closed.

### Disable Screen Saver When Device Monitor Is Open

Temporarily disables the Windows screensaver while Device Monitor is active.

### Open GamePack Configuration After Drag and Drop

Automatically opens the GamePack configuration interface after assigning it to a memory slot.

### Enable Autosave in Compiler

Automatically saves open files to prevent data loss.

### Use Legacy 16-Bit Compiler

Enables compatibility with older 16-bit scripts.\
Select this only when required for legacy scripts.

## PS4 Speciality (PS5 Support)

***

PS5 usage may require a licensed third-party PS4 controller as an authentication device (“PS4 Speciality Controller”).

When enabled, this allows supported controllers to function on PS5/PS4 titles without periodic disconnection.

To enable:

1. Select **Enable PS4 Speciality (For PS5 Console)**.
2. The device will reset automatically.
3. If not detected afterward, click **Find Device**.

## Enable PS Remote Play

***

Select **Enable PS Remote Play®** to configure the device for Remote Play usage.

The device will reset after activation.

## Emulator Output Protocol

***

Select the console output type:

• PlayStation 4 / 5\
• Xbox One / Series X|S\
• Nintendo Switch\
• PS3\
• Xbox 360\
• PC / Mobile

Default: **Auto** (recommended)

If experiencing PC detection issues, manually select **Xbox 360** or **PC/Mobile**.

### Mirror Function

The Output Protocol mirrors the controller connected to **A1**.

Any controller connected to A2, A3, or Bluetooth will appear to the console as the A1 device type.

Not applicable to PS5 authentication methods.

## Remote Slot Change

***

Allows memory slot switching directly from the connected controller.\
Available button combinations vary by controller type.

## Maintenance Tools

***

### Factory Reset

Restores all settings to default and erases memory slots.

### Erase Memory Slots

Clears all memory slots without changing other device settings.

### Reset Device

Reboots the Zen without manual power cycling.

### Find Device

Reinitializes device detection in Zen Studio.

## Bluetooth Management

***

### Clear BT Devices

Clears all stored Bluetooth pairings.

Steps:

1. Power off the device you want to unpair.
2. Open Zen Studio → Device Tab → **Clear BT Devices**.
3. Confirm until completion message appears.
4. Disconnect all USB cables from the Zen.
5. Pair the controller to another device before reconnecting to Zen.

## Diagnostics

***

### Device Monitor

Displays real-time:

• I/O data\
• CPU load\
• VM speed\
• Battery status\
• USB / Bluetooth inputs\
• Rumble and LED states

## Connected Devices

***

Displays logos of registered consoles and input devices currently detected.

## Zen Flash

***

Shows flash memory usage for loaded scripts and GamePacks.

## Zen Serial Number

***

Displays the device’s unique serial number.\
Used for product registration and access to restricted community areas.


# M\&K Settings

The M\&K Settings plugin allows configuration of mouse translation and keyboard mapping for console gameplay.

It provides detailed control over:

• Mouse sensitivity\
• Boost\
• Inverted Y-axis\
• Ballistic curves\
• Deadzone compensation\
• Deadzone shape\
• Analog Stickize\
• Button and key mapping

The goal is to optimize mouse-to-reticle translation within console limitations.

## Layout System

***

M\&K Settings includes **six independent layouts**.

Each layout contains:

• Dedicated Aim Settings\
• Independent Button Mappings

Layouts allow different configurations for various gameplay styles or scenarios.

## Aim Settings

***

Aim Settings provide advanced mouse tuning options, including:

• Sensitivity adjustments\
• Boost control\
• Six selectable ballistic curves\
• Deadzone configuration

Ballistic curves modify input response behavior to fine-tune acceleration and precision.

## Button Mapping

***

Button mapping is divided into:

• Primary mappings\
• Secondary mappings\
• Movement mappings

Mappings are not restricted to a single input device.\
Controller inputs can be combined with mouse and/or keyboard input.

Copy and Paste tools allow entire sections of Aim Settings or Mappings to be duplicated without affecting other sections.

***

For more detailed technical guidance, refer to the [**Mouse & Keyboard**](/mouse-and-keyboard/native-vs-emulation) section.


# Zen Studio Update

Zen Studio requires an active internet connection to check for and install updates.

### Automatic Update

***

If a mandatory or critical update is available, a notification will appear on launch.

To update:

1. Click **OK** on the update prompt.
2. Zen Studio will open the **Software Update** interface automatically.
3. Follow the on-screen instructions to complete the update.

### Manual Update (Recommended for Older Versions)

***

Some older versions may not support automatic updates.

If Zen Studio has not been updated recently:

1. Uninstall the current version.
2. Download the latest version from the official website.
3. Install the new version.


# Zen Operational Mode

Easily switch between Normal Mode, Tournament Mode & Wheel Mode.

﻿

<figure><img src="https://images.archbee.com/IwUlH55FdaPsVELSqm1Fc/-Qr9_KGD2Zvmk5dQ5Zpyv_2022-03-2912-03-21.jpg?format=webp" alt=""><figcaption></figcaption></figure>

Zen Operational Mode allows you to easily switch between **Normal Mode** (Default functionality), **Tournament Mode** (compiler is disabled, blocking access to scripts and GamePacks while optimizing data throughput), and **Wheel Mode** where you can connect any Logitech DFGT/G25/G27 or compatible PS3 Fanatec Wheel directly to a PS4 with full Force Feedback Support by emulating a Logitech G29 (which is also compatible with Cronus Zen). Support includes all pedals, brakes, and gear shifters that also connect to these wheels.

**🔎Find more detailed information for the three available Modes 👉 here:**

﻿[Normal Mode](https://guide.cronus.support/normal-mode)﻿

﻿[Tournament Mode](https://guide.cronus.support/tournament-mode)﻿

﻿[Wheel Mode](https://guide.cronus.support/P7ae-wheel-mode)﻿


# Normal Mode

Normal Mode enables all primary Cronus Zen™ features, including:

• GPC Script Compiler\
• GamePacks\
• GPC Library\
• Mouse & Keyboard support\
• Device Monitor and Plugins

### How to Enable Normal Mode

***

1. Connect Cronus Zen™ to a Windows® PC using a **mini-USB cable** via the **PROG USB port**.
2. Open **Zen Studio**.
3. Navigate to **Tools → Zen Operational Mode**.
4. Select **Normal Mode** and click **Finish**.

### Confirm Active Mode

***

The currently active Operational Mode is displayed in the **status bar** at the bottom of Zen Studio.

Clicking the status bar will reopen the **Zen Operational Mode** interface.


# Tournament Mode

Tournament Mode disables features that may provide gameplay automation, including:

• Scripts\
• Macros\
• GamePacks

The following features remain available:

• Cross-Over Controller support\
• Automatic Button Remapping

### How to Enable Tournament Mode

***

1. Connect Cronus Zen™ to a Windows® PC using a **mini-USB cable** via the **PROG USB port**.
2. Open **Zen Studio**.
3. Navigate to **Tools → Zen Operational Mode**.
4. Select **Tournament Mode**, then click **Finish**.

### Confirm Tournament Mode

***

When Tournament Mode is active:

• The status bar will display **Tournament Mode**.\
• The firmware label will show **TE** next to the firmware version.\
• The Zen OLED screen will display the Tournament Mode graphic.

You can click the status bar at any time to reopen the **Zen Operational Mode** interface.


# Wheel Mode

Wheel Mode enables compatibility for supported Logitech® and Fanatec® racing wheels on PlayStation®4 and PlayStation®5.

Supported wheels can operate with:

• Force Feedback (FFB)\
• Pedals\
• Brakes\
• Clutch\
• Shifter

Compatibility depends on the game supporting native racing wheel input.

For more detailed technical guidance, refer to the [**Wheel Mode**](/wheel-mode/ps5setup) section.


# Device Monitor

The Device Monitor provides real-time diagnostic data from the Cronus Zen™.

It displays:

• Controller input and output data\
• CPU load\
• VM speed\
• Battery status\
• USB and Bluetooth device information (VID/PID)\
• Memory slot control\
• LED and rumble status\
• Debug trace fields

This tool is primarily used for controller testing and GPC script debugging.

### Requirement

Device Monitor is only accessible when the Zen is connected to a PC via the **PROG USB port**.

## Interface Overview

***

### Input Area

Displays real-time controller input data, including:

• Buttons\
• Analog sticks\
• Triggers\
• Sensors (accelerometer / gyro)

If no controller is connected, a prompt will appear.

Click any input field to plot its live value in the Plot Area.\
Up to **4 fields** can be plotted simultaneously.

### Output Area

Displays processed output after GPC script or GamePack execution.

If no console is connected, you can manually select the **Emulator Output Protocol**:

• PlayStation 4 / 5\
• Xbox One / Series X|S\
• Switch\
• PS3\
• Xbox 360\
• PC / Mobile

#### TRACE Debug Fields

Six TRACE fields are available for GPC debugging:

• Flow validation\
• Variable monitoring\
• Script state feedback

Output and TRACE values can also be plotted (up to 4 at once).

## Status & Controls

***

### CPU Load

Indicates processing load.

• Below 80% = normal\
• Sustained high values may indicate inefficient scripts

### VM Speed

Adjusts Virtual Machine execution speed (1ms–40ms).\
Default: **10ms**

Lower values = faster execution\
Higher values = slower execution

Recommended for advanced script testing only.

### Active Slot

Displays:

• Active memory slot number\
• Loaded GamePack or script name

Controls:

• **+** – Cycle slots\
• **Unload** – Revert to Slot 0\
• **CFG** – Open GamePack configuration\
• **Build and Run (F5)** – Temporarily uses Slot 10

## Device Information

***

### USB / Bluetooth Inputs

Supports:

• 3 × USB inputs\
• 2 × Bluetooth inputs

Click the info icon to view:

• VID / PID\
• Extended device data

Use the refresh icon to rescan devices.

### Controller Battery

Displays battery level for wireless controllers.\
Not applicable to wired controllers.

### Input Labels

Identifies the active controller type.\
Selecting it updates the Output Area layout accordingly.

## Feedback Indicators

***

### LED Status

Displays Player LED state:

• ON\
• OFF\
• Slow Blink\
• Fast Blink

Note: GPC scripts and GamePacks can override LED behavior.

### Rumble Status

Displays rumble motor intensity:

• 0% = Off\
• 100% = Full power

Rumble A = Strong motor\
Rumble B = Weak motor\
RT/LT = Xbox trigger motors

Rumble output can also be controlled by GPC scripts.

## Plot Area

***

Used for real-time data analysis and debugging.

• Click any field to begin plotting\
• Click again to stop\
• Maximum 4 fields at once

### Plot Controls

• **Pause Plot** – Freeze graph for inspection\
• **Highlight Accel/Gyros** – Emphasize sensor data\
• **Deselect All** – Clear all selected fields\
• **Capture** – Save a screenshot of the plot area with labels


# Plugins

Add-ons expand and enhance the functionality of Zen Studio by providing advanced tools and extended configuration features.<br>

Available Add-Ons

﻿[MAX Combo](https://guide.cronus.support/max-combo)﻿

﻿[MAX Mapper](https://guide.cronus.support/max-mapper)﻿

﻿[MAX Rec](https://guide.cronus.support/max-rec)﻿


# MAX Combo

MAX Combo is a Zen Studio add-on that automates the creation of combo sequences by recording controller inputs and converting them into GPC code.

The plugin:

• Records controller input data\
• Converts recorded input into structured GPC code\
• Optimizes generated code for minimal size\
• Preserves event timing and execution accuracy\
• Automatically detects the start and end of input sequences\
• Allows optional inclusion or exclusion of accelerometer data and DS4 touchpad input\
• Supports recordings up to 300 seconds per session

Once recorded, the generated GPC script can be edited, refined, and recompiled inside Zen Studio.

## ﻿Capture Options

***

• **Combo Name** – Enter the name for the generated combo.\
• **Include Accelerometer Data** – Optional.\
• **Include DS4 Touchpad Data** – Optional.\
• **Stick Deadzone Adjustment** – Configure if required.

These settings determine what input data will be recorded and converted into GPC code.

## Start Capture

***

Click **Start Capture** to begin a 3-second countdown.

• The capture buffer records up to **30 seconds** of input.\
• Perform the desired controller actions within this time.\
• Click **Stop** to manually end the recording, or allow the buffer to complete.

The code generation algorithm automatically detects the beginning and end of the input sequence and converts it into optimized GPC code.

## GPC Code

***

This area displays the generated GPC code after capture.

The optimization process minimizes code size while preserving accurate event timing and transitions.

If the generated result is satisfactory:

1. Select all code.
2. Copy and paste it into your GPC script for further editing or use.

## Status Bar

***

The Status Bar provides real-time information during and after capture, including:

• Buffer usage during recording\
• Number of transitions detected\
• Number of commands generated

This helps evaluate recording completeness and code complexity.

## Device Monitor

***

Opens the **Device Monitor**, which displays live input and output activity from the connected device.

<br>


# MAX Mapper

MAX Mapper is a Zen Studio add-on that allows you to remap controller inputs and adjust sensitivity settings without writing code.

It supports:

• Button remapping\
• Analog stick configuration\
• Trigger sensitivity adjustment\
• Profile creation and management\
• Automatic GPC script generation

Profiles can be generated as GPC scripts or programmed directly to a Cronus Zen memory slot.

## Managing Profiles

***

A **Profile** is a saved configuration containing remaps and sensitivity adjustments.

The MAX Mapper plugin supports:

• Unlimited profiles\
• Import / Export for backup or sharing\
• Real-time testing while editing

While MAX Mapper is open, changes apply instantly. You can test adjustments live using gameplay or the Device Monitor.

## Profile Menu

***

• **Create** – Create a new profile with default settings.\
• **Import** – Load a previously exported profile file.\
• **Export** – Save the active profile for backup or sharing.\
• **Rename** – Rename the active profile.\
• **Delete** – Permanently delete the active profile.

## Active Remap

***

Displays all created profiles.\
The selected profile becomes the active configuration for editing, exporting, generating GPC, or deletion.

## Input & Output Selection

***

### Input

Select the controller type:

• PlayStation 4\
• Xbox One\
• PlayStation 3\
• Xbox 360\
• Switch Joy-Con

**Note:**\
If using PS5®, select *PlayStation 4*.\
If using Xbox Series X|S®, select *Xbox One*.

### Output

Select the console type:

• PlayStation 4\
• Xbox One\
• PlayStation 3\
• Xbox 360\
• Switch

## Profile Operations

***

• **Generate GPC Script** – Creates a GPC script based on the active profile and opens it in the code editor.\
• **Export Profile** – Save profile to file.\
• **Rename Profile** – Change profile name.\
• **Delete Profile** – Remove profile permanently.

## Mapping

***

Click the **Mapping** icon to assign any input button to any output button.

**Note:**\
Xbox Elite v1 paddles can be remapped independently.\
Xbox Elite Series 2 paddles cannot be remapped independently.

Other paddle-based controllers (e.g., Scuf) require GPC scripting for paddle remapping.

## Sticks

***

The **Sticks** section allows configuration of:

• Stick Size\
• X / Y Sensitivity\
• X / Y Deadzone\
• X / Y Midpoint\
• Axis Inversion

#### Sensitivity

Controls how responsive horizontal (X) and vertical (Y) movement is.

#### Deadzone

Defines the non-responsive area near the center of the stick to eliminate jitter.

#### Invert Axis

Reverses X or Y axis direction.

#### Midpoint

Default: 50%.\
Adjusting midpoint creates dual sensitivity zones:

* Lower values: Higher sensitivity near center
* Higher values: Lower sensitivity near center, higher sensitivity at extremes

#### Stick Size

Adjusts how input values map to analog stick range.

Xbox consoles allow full square axis values.\
PlayStation consoles restrict movement to circular limits.

Default value: **142**\
Some PlayStation titles may respond better at **115–120**.

Leave at default unless adjustment is required.

## Triggers

***

The **Triggers** section allows adjustment of:

• Left Trigger sensitivity\
• Right Trigger sensitivity

## Profile Configuration Area

***

Select **Input Protocol** and **Output Protocol** first.

The controller graphic represents the **Output Protocol (console)**.\
The surrounding selections represent the **Input (controller type)**.

## Storing Profiles to Cronus Zen

***

1. Open the **Programmer Panel** in Zen Studio.
2. Select the **Remapper Profiles** icon.
3. Drag and drop a profile into any Cronus Zen memory slot.


# MAX Rec

MAX Rec is a Zen Studio add-on that records controller input sequences and replays them with 1:1 timing accuracy.

It captures all controller inputs and stores them in a temporary memory buffer for playback or export.

### Requirements

Cronus Zen™ must be connected:

• To your console\
• To your Windows PC via the **PROG USB port**

## Plugin Interface

***

### Information Area

Displays details about the recorded sequence, including:

• Whether the sequence was loaded from file or recorded live\
• Total length (in seconds)\
• Playback progress bar

The progress bar represents the full sequence and playback position.

## Load File

***

Loads a previously saved recording file into the memory buffer.

## Play / Pause

***

Starts or pauses playback of the loaded sequence.

## Loop

***

When enabled, playback automatically restarts at the end of the sequence.

## Record / Stop

***

• **Record** – Begins capturing controller inputs into the memory buffer.\
• **Stop** – Ends recording or stops playback.

## Save File

***

Saves the current memory buffer to a file for later use or sharing.

## Device Monitor

***

Opens the Device Monitor to display live input and output activity.


# URL Hooks

URL Hooks allow you to open Zen Studio and automatically load scripts into the compiler using a custom protocol link.

This feature enables direct integration of web-hosted GPC scripts with Zen Studio.

### How It Works

***

URL Hooks use the `zenstudio://` protocol to trigger specific actions inside Zen Studio.

After the script loads into the compiler, you can compile and program the device as usual.

### Available URL Commands

***

#### 1. Open Zen Studio

```
zenstudio://
```

Launches Zen Studio.

#### 2. Add GPC Library Script to Compiler

```
zenstudio://lib/script/?scripts=12345
```

Loads the specified GPC Library script (by ID) directly into the compiler.

Replace `12345` with the desired script ID.

#### 3. Add Any Web-Hosted GPC Script

```
zenstudio://www.example.com/myscript.gpc
```

Loads a publicly hosted `.gpc` file directly into the compiler.

The script must be accessible via direct URL.

### Example

```
zenstudio://www.mywebsite.com/myscript.gpc
```


# GPC Script Guide

Your complete companion for writing scripts on the Cronus Zen.

<figure><img src="/files/lVWB9ZpKxNjneCrrG3WA" alt=""><figcaption></figcaption></figure>

No matter your experience level, this guide takes you from your first script to advanced techniques. Everything here is written specifically for **Zen Studio Live** and the current **32-bit Zen target**.

***

### Where do you want to go?

<table data-view="cards"><thead><tr><th align="center"></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td align="center"><a href="/pages/NGLiMyb5qiLUxNU2wNCU"><strong>Start Coding</strong></a></td><td>A guided first-script path. Compile, program, and test your Zen safely — step by step.</td><td></td><td><a href="/files/OBksp43o6ZTu9ERw3akf">/files/OBksp43o6ZTu9ERw3akf</a></td></tr><tr><td align="center"><a href="/pages/yIOWjIL79fFXkNml2qnu"><strong>Learn GPC</strong></a></td><td>Variables, conditions, functions, arrays, combos, input layers, and output order — the full toolkit.</td><td></td><td><a href="/files/2X3zCdiRtbK44GpvwMNB">/files/2X3zCdiRtbK44GpvwMNB</a></td></tr><tr><td align="center"><a href="/pages/Rw1vve2tcQCR2CObNI5A"><strong>Examples and Recipes</strong></a></td><td>Real, working scripts from beginner-friendly to expert-level. Copy, modify, learn.</td><td></td><td><a href="/files/kKW0pPBehKZ6T2V9eAmA">/files/kKW0pPBehKZ6T2V9eAmA</a></td></tr><tr><td align="center"><a href="/pages/oUYCshX6pAoZh288Yq4Y"><strong>Reference</strong></a></td><td>Every built-in, every constant, every diagnostic. Debugging workflows included.</td><td></td><td><a href="/files/uLAP8EDy1FjjrkHs2sYN">/files/uLAP8EDy1FjjrkHs2sYN</a></td></tr><tr><td align="center"><a href="/pages/33sVhYf1cqoUKTH3qI0d">Troubleshooting</a></td><td>Compiler errors, warnings, tracing, and bisection. Find the real cause, not the first symptom.</td><td></td><td><a href="/files/wM0CbT3CXQ7LapnleqGL">/files/wM0CbT3CXQ7LapnleqGL</a></td></tr></tbody></table>

{% hint style="info" %}
**Never coded before?**

Start with [What is GPC?](/gpcscripting/gpc-script-guide/what-is-gpc) to understand the language, then [Start Here](/gpcscripting/gpc-script-guide/start-here) to write your first script.
{% endhint %}


# What is GPC?

The language behind every Cronus Zen script, and the three ideas that matter   most in a real-time report loop.

GPC is the scripting language used to read controller input, maintain state, transform values, schedule timed sequences, control device feedback, and write the outgoing controller report on Cronus Zen.

A GPC script is not a desktop program. Its `main` section runs repeatedly as part of the real-time report loop. That makes three ideas especially important:

{% stepper %}
{% step %}

#### Read the input layer you actually mean.

{% endstep %}

{% step %}

#### Keep one clear final writer for each output.

{% endstep %}

{% step %}

#### Perform expensive display or persistence work only when something changes.

{% endstep %}
{% endstepper %}

This guide begins with those ideas before introducing advanced storage, architecture, and VM details.


# Start Here

A guided first-script path. Compile, program, and test your Zen safely — step by step.

<figure><img src="/files/CR8TsQSsF30onEO6UM8R" alt=""><figcaption></figcaption></figure>

Build, compile, program, and observe a small script while learning the report-cycle mental model that every larger GPC project depends on.

***

Work through these pages in order the first time. Return directly to any page later as a reference.

* [The smallest useful script](/gpcscripting/gpc-script-guide/start-here/the-smallest-useful-script)
* [Your first stateful script](/gpcscripting/gpc-script-guide/start-here/your-first-stateful-script)
* [Use Zen Studio Live as a tight feedback loop](/gpcscripting/gpc-script-guide/start-here/use-zen-studio-live-as-a-tight-feedback-loop)
* [The report pipeline](/gpcscripting/gpc-script-guide/start-here/the-report-pipeline)
* [Input values are not all the same layer](/gpcscripting/gpc-script-guide/start-here/input-values-are-not-all-the-same-layer)
* [Buttons, triggers, sticks, and sensors](/gpcscripting/gpc-script-guide/start-here/buttons-triggers-sticks-and-sensors)
* [Add a one-time setup phase](/gpcscripting/gpc-script-guide/start-here/add-a-one-time-setup-phase)
* [A clean script skeleton](/gpcscripting/gpc-script-guide/start-here/a-clean-script-skeleton)
* [First mistakes to recognize](/gpcscripting/gpc-script-guide/start-here/first-mistakes-to-recognize)
* [Checkpoint exercise](/gpcscripting/gpc-script-guide/start-here/checkpoint-exercise)


# The smallest useful script

Every GPC script needs `main` logic. Zen runs it repeatedly from top to bottom, once per VM cycle.

{% code title="smallest-useful-script.gpc" lineNumbers="true" %}

```cpp
main {
    if(get_val(PS5_L2)) {
        set_val(PS5_R1, 100);
    }
}
```

{% endcode %}

***

### What each part does

| Function               | Purpose                                           |
| ---------------------- | ------------------------------------------------- |
| `get_val(PS5_L2)`      | Reads the current L2 value.                       |
| `set_val(PS5_R1, 100)` | Writes a fully pressed R1 to the outgoing report. |

***

### How it runs

{% stepper %}
{% step %}

#### Read

`get_val(PS5_L2)` reads the current L2 value.
{% endstep %}

{% step %}

#### Evaluate

Any nonzero value is true in an `if` condition.
{% endstep %}

{% step %}

#### Write

While L2 is active, `set_val(PS5_R1, 100)` makes the outgoing R1 value fully pressed.
{% endstep %}

{% step %}

#### Send

At the end of `main`, Zen finalizes and sends the output report.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
This does not create a permanent state. The condition is evaluated again on the next VM cycle.
{% endhint %}

<details>

<summary>Can I use more than one <code>main</code> section?</summary>

Zen Studio Live accepts more than one `main` section and merges them into one combined section. Use a single `main` section in new scripts unless splitting generated source is genuinely useful.

</details>


# Your first stateful script

{% code title="smallest-useful-script.gpc" lineNumbers="true" %}

```cpp
int enabled;

main {
    if(event_press(PS5_CROSS)) {
        enabled = !enabled;
    }

    if(enabled) {
        set_val(PS5_R1, 100);
    }
}
```

{% endcode %}

This introduces the four ideas used by almost every real script:

| Element        | Description                                                                                           |
| -------------- | ----------------------------------------------------------------------------------------------------- |
| `int enabled;` | Declares a global signed 32-bit runtime variable. It starts at `0`.                                   |
| `event_press`  | Is true for the cycle in which the input transitions from released to pressed.                        |
| `!enabled`     | Changes zero to one and any nonzero value to zero.                                                    |
| State          | State set in one cycle remains available in later cycles until the script reloads or code changes it. |


# Use Zen Studio Live as a tight feedback loop

For each example:

{% stepper %}
{% step %}
Create or open a `.gpc` file in Zen Studio Live.
{% endstep %}

{% step %}
Paste the complete example, not only the body of `main`.
{% endstep %}

{% step %}
Connect Zen through its PROG USB port, then use **Compiler → Build and Run** or press **F5**. Build and Run compiles the script and sends the temporary test build directly to the connected Zen, so it is faster than repeatedly programming memory slots while developing.
{% endstep %}

{% step %}
If the build fails, read and fix the first compiler message from the top before chasing later messages.
{% endstep %}

{% step %}
Use Device Monitor to verify physical input, outgoing values, traces, controller type, and VM behavior while the test build is running.
{% endstep %}

{% step %}
Test with the intended console and controller; a successful compile proves syntax, not device behavior.
{% endstep %}

{% step %}
Program a memory slot only when you want to keep the tested script on Zen after the development session.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
Use a harmless test profile before adding automation to an existing large script. Large scripts can contain later output writers, remaps, menus, or gates that hide otherwise correct code.
{% endhint %}


# The report pipeline

Think of each cycle as five layers:

<div align="left"><figure><img src="/files/F6XzNBlsGAvVy03Qjt7W" alt=""><figcaption></figcaption></figure></div>

Active combos execute after the written `main` sections and before `remap` / `unmap` finalization. The compiler makes each active combo step part of the cycle's combined `main` behavior, even though the combo is declared in a separate top-level block. This means a combo can become a later writer than ordinary `main` code for the same identifier.

***

The key consequence is **order**. If two lines write the same output during a cycle, the later write wins:

{% code title="report-pipeline.gpc" %}

```cpp
main {
    set_val(PS5_RX, 25);
    set_val(PS5_RX, -40);  // final outgoing RX is -40
}
```

{% endcode %}

Conditionally writing an output can also leave another system as the final writer. Include active combos when reviewing output ownership instead of looking only at the visible order inside `main`.


# Input values are not all the same layer

{% code title="input-value-layers.gpc" lineNumbers="true" %}

```cpp
int raw_cross;
int current_cross;
int previous_cross;

main {
    raw_cross = get_ival(PS5_CROSS);
    current_cross = get_val(PS5_CROSS);
    previous_cross = get_lval(PS5_CROSS);

    set_val(TRACE_1, raw_cross);
    set_val(TRACE_2, current_cross);
    set_val(TRACE_3, previous_cross);
}
```

{% endcode %}

| Read           | Layer                                               | Typical use                                           |
| -------------- | --------------------------------------------------- | ----------------------------------------------------- |
| `get_ival(id)` | physical/unmodified input                           | features that must not feed on earlier script changes |
| `get_val(id)`  | current value after earlier changes this cycle      | composing deliberate transformations                  |
| `get_lval(id)` | final outgoing value from the previous VM iteration | output-history comparison                             |

Use `event_press` / `event_release` for ordinary button edges. Use explicit current-versus-previous comparisons when the exact input layer matters.


# Buttons, triggers, sticks, and sensors

The same integer API covers controls with different ranges:

| Control              | Range                                                                      |
| -------------------- | -------------------------------------------------------------------------- |
| Digital buttons      | normally `0` or `100`                                                      |
| Triggers             | normally `0..100`                                                          |
| Stick axes           | normally `-100..100`                                                       |
| Sensors/touch values | identifier-specific                                                        |
| Trace outputs        | debug integers, with `TRACE_1..TRACE_3` supporting full Live 32-bit values |

{% hint style="info" %}
Do not assume every identifier accepts the same range. The function and constant appendices record the compiler limits.
{% endhint %}


# Add a one-time setup phase

`init` runs once before the first `main` cycle:

{% code title="one-time-setup-phase.gpc" lineNumbers="true" %}

```cpp
int fire_button;

init {
    if(get_console() == PIO_PS5) {
        fire_button = PS5_R2;
    } else {
        fire_button = XB1_RT;
    }
}

main {
    if(get_ival(fire_button)) {
        set_val(fire_button, 100);
    }
}
```

{% endcode %}

Good `init` work includes selecting platform identifiers, loading persistent settings, initializing cached values, and choosing a start mode. Do not repeatedly perform one-time work in `main`.


# A clean script skeleton

{% code title="clean-script-skeleton.gpc" lineNumbers="true" %}

```cpp
// Compile-time names
define DEFAULT_STRENGTH = 20;

// Immutable data
const int8 RESPONSE_TABLE[] = { 0, 5, 10, 20, 35, 55, 80, 100 };

// Runtime state: global only
int enabled;
int strength = DEFAULT_STRENGTH;
int fire_button;

// One-time setup
init {
    fire_button = PS5_R2;
}

// Real-time loop
main {
    if(event_press(PS5_CROSS)) {
        enabled = !enabled;
    }

    if(enabled && get_ival(fire_button)) {
        set_val(TRACE_1, strength);
    }
}

// User functions conventionally follow main
function bounded_add(value, amount, low, high) {
    value = value + amount;
    if(value < low) return low;
    if(value > high) return high;
    return value;
}
```

{% endcode %}

The compiler does not require every optional section or this exact order, but consistent structure makes ownership and execution order reviewable.


# First mistakes to recognize

### Declaring inside a block

```cpp
main {
    int value;  // invalid: runtime variables must be top-level
}
```

Move `int value;` above `init` / `main`.

***

### Confusing assignment and comparison

```cpp
if(mode = 2) { }   // assigns 2; the condition is then true
if(mode == 2) { }  // compares; usually what was intended
```

Zen Studio Live warns about assignment in a condition, but write the intended operator.

***

### Using the wrong letter case

`PS5_CROSS`, `ps5_cross`, and `PS5_Cross` are different names. Only the defined constant is valid.

***

### Assuming a function changes its caller's variable

Function arguments are values held in local parameters:

```cpp
int amount = 10;

main {
    amount = add_five(amount);  // store the returned value
}

function add_five(value) {
    value = value + 5;
    return value;
}
```

***

### Writing forever in an inner loop

```cpp
while(TRUE) { }  // do not do this in live real-time code
```

`main` is already the repeating loop. Inner loops should complete quickly and have an obvious bound.


# Checkpoint exercise

Write a script that:

1. Toggles `enabled` on a Cross press.
2. While enabled, copies raw L2 to R2.
3. Writes `enabled` to `TRACE_1` and raw L2 to `TRACE_2`.
4. Suppresses Cross from the output only on the toggle cycle.

***

One solution:

{% code title="checkpoint-exercise.gpc" lineNumbers="true" %}

```cpp
int enabled;
int raw_l2;

main {
    raw_l2 = get_ival(PS5_L2);

    if(event_press(PS5_CROSS)) {
        enabled = !enabled;
        set_val(PS5_CROSS, 0);
    }

    if(enabled) {
        set_val(PS5_R2, raw_l2);
    }

    set_val(TRACE_1, enabled);
    set_val(TRACE_2, raw_l2);
}
```

{% endcode %}


# Learn GPC

Variables, conditions, functions, arrays, combos, input layers, and output order — the full toolkit.

<figure><img src="/files/aLmdojnP0pgGFLab9XTt" alt=""><figcaption></figcaption></figure>

Learn the complete source language a piece at a time, from declarations and operators to functions, remaps, and combos.

***

Work through these pages in order the first time. Return directly to any page later as a reference.

* [Source layout and global namespace](/gpcscripting/gpc-script-guide/learn-gpc/source-layout-and-global-namespace)
* [Statements, blocks, and comments](/gpcscripting/gpc-script-guide/learn-gpc/statements-blocks-and-comments)
* [Runtime variables](/gpcscripting/gpc-script-guide/learn-gpc/runtime-variables)
* [Definitions](/gpcscripting/gpc-script-guide/learn-gpc/definitions)
* [Enumerations](/gpcscripting/gpc-script-guide/learn-gpc/enumerations)
* [Immutable const data](/gpcscripting/gpc-script-guide/learn-gpc/immutable-const-data)
* [Raw data section](/gpcscripting/gpc-script-guide/learn-gpc/raw-data-section)
* [`sizeof` and `addr`](/gpcscripting/gpc-script-guide/learn-gpc/sizeof-and-addr)
* [Boolean truth](/gpcscripting/gpc-script-guide/learn-gpc/boolean-truth)
* [Operators](/gpcscripting/gpc-script-guide/reference/language-and-operators)
* [Flow control](/gpcscripting/gpc-script-guide/learn-gpc/flow-control)
* [User-created functions](broken://pages/AXmcPwMgSa2b4W64wDtl)
* [`init` and `main`](/gpcscripting/gpc-script-guide/learn-gpc/init-and-main)
* [Remap and unmap](/gpcscripting/gpc-script-guide/learn-gpc/remap-and-unmap)
* [Combos and `fcombo`](/gpcscripting/gpc-script-guide/learn-gpc/combos-and-fcombo)
* [Compile-time versus runtime checklist](/gpcscripting/gpc-script-guide/learn-gpc/compile-time-versus-runtime-checklist)


# Source layout and global namespace

A Live GPC file can contain these top-level forms:

* `define`
* `enum`
* `data(...)`
* typed `const` arrays, strings, images, and adaptive-trigger data
* `remap` and `unmap`
* global `int` variables and runtime arrays
* optional `init` section or sections
* one or more `main` sections
* `combo` / `fcombo` declarations
* user-created `function` declarations

Zen Studio Live accepts multiple `init` and `main` sections. The compiler merges all `init` sections into the one-time initialization phase and all `main` sections into the repeating main phase. Keeping one of each is normally clearer, but split sections in generated or assembled source are valid.

***

### Name spaces

GPC does not place every declared name in one namespace:

| Namespace/scope | Names in it                                                                   |
| --------------- | ----------------------------------------------------------------------------- |
| Data symbols    | Runtime variables and arrays, definitions, enum members, and const-data names |
| Functions       | User-created function names                                                   |
| Combos          | `combo` and `fcombo` names                                                    |
| Function-local  | The parameters declared by that function                                      |

Names must be unique within the namespace that owns them. A variable cannot reuse a definition, enum-member, or const-data name, but function names, combo names, and function parameters are resolved separately from that data-symbol namespace.

Language keywords and built-in **constants** are reserved. Declaring `main`, `if`, or a constant such as `PS5_CROSS` as your own name is a hard error.

Built-in **function** names are not reserved in the data-symbol namespace — `int set_val;` and `define set_val = 5;` both compile. What the compiler does reject is naming a *user-created function* after a built-in; that is reported as `GPC4001`.

{% hint style="warning" %}
Reusing a built-in function name for a variable or definition is legal, but strongly discouraged. Every compiler message about that name becomes ambiguous to read, and anyone maintaining the script later has to work out which `set_val` is meant.
{% endhint %}

***

Names are case-sensitive and follow this shape:

```
[A-Za-z_][A-Za-z0-9_]*
```

Prefer descriptive uppercase names for compile-time constants and lowercase snake case for runtime variables/functions. Even where separate namespaces technically allow the same spelling, distinct names make searches and compiler messages easier to understand.


# Statements, blocks, and comments

Braces group statements:

{% code title="statements-and-blocks.gpc" %}

```cpp
main {
    if(get_val(PS5_L2)) {
        set_val(PS5_R2, 100);
    }
}
```

{% endcode %}

The compiler accepts omitted semicolons in many places, but use them consistently. Semicolons are mandatory as separators in a `for` header. A missing semicolon after `return` can also make the next line look like its expression.

```cpp
// One-line comment

/*
    Block comment.
    Block comments cannot be nested.
*/
```

Use `//` when disabling a region that already contains block comments.


# Runtime variables

GPC has one runtime variable type: the signed 32-bit integer, written as `int`. You can declare one value at a time or reserve a consecutive group of values as an array.

***

### Scalar integers

Use a scalar integer when a name needs to hold one value:

```cpp
int count;
int strength = 25;
int x, y, enabled;
```

Rules:

* Declarations are global and top-level only.
* Uninitialized variables start at zero.
* There is no runtime `bool`, float, string, object, struct, or local block variable type.
* Function parameters are local integer values.
* Arithmetic overflow wraps according to the VM's integer behavior; design ranges to avoid relying on overflow.
* Runtime division truncates: `10 / 3` is `3`, `3 / 4` is `0`.

***

Scaled-integer pattern:

{% code title="scaled-integer-pattern.gpc" %}

```cpp
// 125 means 1.25x; calculate percentage before dividing away precision.
int base = 40;
int scale_percent = 125;
int result;

main {
    result = (base * scale_percent) / 100;
}
```

{% endcode %}

Check that the multiplication cannot exceed the 32-bit range.

***

### Runtime arrays

Use an array when you need several related runtime values under one name:

{% code title="runtime-arrays.gpc" %}

```cpp
int samples[16];
int index;

main {
    if(event_press(PS5_CROSS)) {
        samples[index] = get_ival(PS5_RX);
        index = index + 1;
        if(index >= 16) index = 0;
    }
}
```

{% endcode %}

Runtime arrays:

* occupy one variable slot per element;
* start filled with zero;
* cannot have initializers;
* require an index in range `0..size-1`;
* can use constant or runtime indexes;
* are mutable.

The compiler catches constant out-of-range indexes on ordinary declared arrays. You must validate dynamic indexes yourself.

***

### Sequential variable storage and aliases

Runtime variables are allocated sequentially after any variable slots generated by the compiler. GPC's indexing syntax operates on those sequential slots, so any runtime variable can technically be used as the base of an indexed access—not only a name declared with `[size]`.

{% code title="sequential-alias.gpc" %}

```cpp
int first;
int second;

main {
    first[1] = 25; // accesses the next sequential slot: second
}
```

{% endcode %}

This is an advanced aliasing behavior, not a substitute for a properly declared array. It can silently reach an unrelated variable when declarations change, so use it only when the storage layout is intentional and documented.

***

A zero-sized array occupies no slots and aliases the next declared variable:

{% code title="zero-sized-alias.gpc" %}

```cpp
int alias[0];
int value;

main {
    alias[0] = 50; // writes value
}
```

{% endcode %}

The compiler warns about this accepted quirk. A zero-sized array with no eligible variable after it is an error because it would point beyond the allocated variable table.


# Definitions

`define` replaces a readable name with a compile-time integer expression and uses no runtime variable slot:

```cpp
define MAX_MODES = 4;
define HALF_SCALE = 100 / 2;
define MENU_CHORD = PS5_L2;
```

Use definitions for immutable scalar values. A definition cannot depend on runtime state or a runtime function.


# Enumerations

Enums create related compile-time integer names. Use them for state machines, modes, pages, or schema versions:

{% code title="enum-modes.gpc" %}

```cpp
enum {
    MODE_OFF,       // 0: the first implicit value starts at zero
    MODE_STANDARD,  // 1: implicit values increment by one
    MODE_ALTERNATE, // 2
    MODE_COUNT      // 3
};

int mode;

main {
    if(event_press(PS5_TRIANGLE)) {
        mode = mode + 1;
        if(mode >= MODE_COUNT) mode = MODE_OFF;
    }
}
```

{% endcode %}

An explicit value restarts the sequence from that point:

```cpp
enum {
    PAGE_HOME,       // 0
    PAGE_STATUS,     // 1
    PAGE_EDIT = 10,  // 10: explicitly restart here
    PAGE_SAVE,       // 11
    PAGE_ADMIN = 20, // 20: restart again
    PAGE_DIAGNOSTIC  // 21
};
```

Enum members share the data-symbol namespace with variables, definitions, and const-data names. Do not reuse an enum-member name for one of those declarations.


# Immutable const data

### Numeric arrays

Choose the smallest type that holds every value:

| Type     | Bytes/value |                           Range |
| -------- | ----------: | ------------------------------: |
| `int8`   |           1 |                     `-128..127` |
| `uint8`  |           1 |                        `0..255` |
| `int16`  |           2 |               `-32,768..32,767` |
| `uint16` |           2 |                     `0..65,535` |
| `int32`  |           4 | `-2,147,483,648..2,147,483,647` |

```cpp
const int8 CURVE[] = { 0, 5, 12, 22, 35, 51, 72, 100 };

const int16 POINTS[][] = {
    { -100, -50, 0, 50, 100 },
    { -100, -25, 0, 25, 100 }
};
```

Every row of a two-dimensional const array must have the same number of columns. Const data is immutable and consumes compiled data/bytecode space even when never used.

Access:

{% code title="const-data-access.gpc" %}

```cpp
int a, b;

main {
    a = CURVE[3];
    b = POINTS[1][4];
}
```

{% endcode %}

***

### Strings

Strings live in the const/data area, not runtime variables:

```cpp
const string STATUS = "READY"; // one string

const string LABELS[] = { "OFF", "ON", "EDIT" };
```

When an API expects an address, pass a const item or `addr(...)` as required by its signature. Bare string literals are not general runtime expression values.

***

### Images

An `image` begins with width and height, followed by exactly `ceil(width * height / 8)` packed pixel bytes:

```cpp
const image BOX_8 = {
    8, 8,
    0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF
};
```

Pixels are packed left-to-right, top-to-bottom. Validate the byte count; invalid image data is a compiler error.

An array of image records needs a nested record for each image:

```cpp
const image ICONS[] = {
    { 8, 8, 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF },
    { 8, 8, 0x00, 0x7E, 0x42, 0x42, 0x42, 0x42, 0x7E, 0x00 }
};
```

***

### PS5 adaptive-trigger data

`ps5adt` records contain exactly 11 byte values in this order:

<table data-search="false"><thead><tr><th align="right">Index</th><th>Field selector</th><th>Meaning</th></tr></thead><tbody><tr><td align="right">0</td><td><code>PS5_ADT_MODE</code></td><td>Effect mode</td></tr><tr><td align="right">1</td><td><code>PS5_ADT_START</code></td><td>Start position</td></tr><tr><td align="right">2</td><td><code>PS5_ADT_FORCE1</code></td><td>First force parameter</td></tr><tr><td align="right">3</td><td><code>PS5_ADT_FORCE2</code></td><td>Second force parameter</td></tr><tr><td align="right">4</td><td><code>PS5_ADT_STRENGTH_LOW</code></td><td>Low-zone strength</td></tr><tr><td align="right">5</td><td><code>PS5_ADT_STRENGTH_MID</code></td><td>Mid-zone strength</td></tr><tr><td align="right">6</td><td><code>PS5_ADT_STRENGTH_HIGH</code></td><td>High-zone strength</td></tr><tr><td align="right">7</td><td><code>PS5_ADT_UNK1</code></td><td>Unknown/reserved byte 1</td></tr><tr><td align="right">8</td><td><code>PS5_ADT_UNK2</code></td><td>Unknown/reserved byte 2</td></tr><tr><td align="right">9</td><td><code>PS5_ADT_FREQ</code></td><td>Effect frequency</td></tr><tr><td align="right">10</td><td><code>PS5_ADT_UNK3</code></td><td>Unknown/reserved byte 3</td></tr></tbody></table>

{% code title="trigger-profile.gpc" %}

```cpp
const ps5adt TRIGGER_PROFILE = {
    PS5_ADT_CR, // 0: mode
    0,          // 1: start
    128,        // 2: force 1
    128,        // 3: force 2
    64,         // 4: low strength
    128,        // 5: mid strength
    192,        // 6: high strength
    0,          // 7: unknown/reserved 1
    0,          // 8: unknown/reserved 2
    100,        // 9: frequency
    0           // 10: unknown/reserved 3
};
```

{% endcode %}

Use a named mode and comment every positional field. Do not invent meanings for the three unknown/reserved bytes; preserve them from a known-good profile.


# Raw data section

`data(...)` stores immutable bytes at the start of the compiled virtual data space:

{% code title="raw-data-section.gpc" %}

```cpp
data(20, 42, 35, 255, 1, 100, 0, 86);

int signed_value;
int unsigned_value;

main {
    signed_value = dint8(3);    // -1 from byte 0xFF
    unsigned_value = duint8(3); // 255
}
```

{% endcode %}

`data(...)` also accepts values wider than one byte. The compiler splits a wider value into multiple bytes and warns because every later byte offset moves:

| Source value range                         | Storage on the current Zen target | Warning                  |
| ------------------------------------------ | --------------------------------: | ------------------------ |
| `-128..255`                                |                            1 byte | None for width           |
| `-32768..65535` outside the one-byte range |                           2 bytes | Later indexes shift by 1 |
| Values outside the two-byte range          |                           4 bytes | Later indexes shift by 3 |

{% code title="raw-data-widths.gpc" %}

```cpp
data(0x12, 0x1234, 0x12345678);

int byte_value;
int word_value;
int dword_value;

main {
    byte_value = duint8(0);
    word_value = duint16(1);
    dword_value = dint32(3);
}
```

{% endcode %}

If exact packed bytes matter, spelling out each byte is easier to audit and avoids accidental offset changes.

Live readers:

| Reader           | Bytes | Interpretation  |
| ---------------- | ----: | --------------- |
| `dint8(index)`   |     1 | signed 8-bit    |
| `duint8(index)`  |     1 | unsigned 8-bit  |
| `dint16(index)`  |     2 | signed 16-bit   |
| `duint16(index)` |     2 | unsigned 16-bit |
| `dint32(index)`  |     4 | signed 32-bit   |

Indexes are **byte offsets**. A wider entry shifts every following offset. Prefer compiler-managed const arrays for ordinary tables; use raw data when exact packed layout is the point.


# sizeof and addr

`sizeof(CONST_OR_ARRAY)` is evaluated at compile time and returns the declared element/row size understood by the compiler. It is useful for bounded loops:

{% code title="sizeof-bounded-loop.gpc" %}

```cpp
const uint8 BUTTONS[] = { PS5_CROSS, PS5_CIRCLE, PS5_SQUARE };
int i;

main {
    for(i = 0; i < sizeof(BUTTONS); i++) {
        if(get_ival(BUTTONS[i])) {
            set_val(TRACE_1, i);
        }
    }
}
```

{% endcode %}

Zen Studio Live also accepts supported type keywords in `sizeof(type)`. For the fixed-width numeric types, the result is their storage width in bytes:

| Type expression                    | Result |
| ---------------------------------- | -----: |
| `sizeof(int8)` / `sizeof(uint8)`   |    `1` |
| `sizeof(int16)` / `sizeof(uint16)` |    `2` |
| `sizeof(int32)`                    |    `4` |

```cpp
define PROFILE_VALUE_BYTES = sizeof(int16);
define SERIAL_VALUE_BYTES = sizeof(int32);
```

Type support is target-specific. If a keyword has no fixed supported size on the selected target, the compiler reports that `sizeof(keyword)` is not supported.

`addr(CONST_ITEM)` produces a const-data address for APIs that consume strings, images, or adaptive-trigger records. It is not a pointer to a runtime variable and cannot be used on arbitrary expressions.


# Boolean truth

* `0` is false.
* Any nonzero integer is true.
* `TRUE` is `1`; `FALSE` is `0`.
* Logical operators normalize results to false/true.

{% code title="boolean-truth.gpc" %}

```cpp
int enabled;

main {
    if(event_press(PS5_CROSS)) {
        enabled = !enabled;
    }
}
```

{% endcode %}


# Arithmetic

<table data-search="false"><thead><tr><th>Operator</th><th>Meaning</th><th>Example</th></tr></thead><tbody><tr><td><code>+</code></td><td>Add two values</td><td><code>total = a + b;</code></td></tr><tr><td><code>-</code></td><td>Subtract the right value from the left; unary <code>-</code> negates one value</td><td><code>difference = a - b;</code></td></tr><tr><td><code>*</code></td><td>Multiply</td><td><code>scaled = value * 125;</code></td></tr><tr><td><code>/</code></td><td>Integer division; any fractional remainder is discarded</td><td><code>10 / 3</code> produces <code>3</code></td></tr><tr><td><code>%</code></td><td>Remainder after integer division</td><td><code>10 % 3</code> produces <code>1</code></td></tr><tr><td><code>++</code></td><td>Add one</td><td><code>index++;</code></td></tr><tr><td><code>--</code></td><td>Subtract one</td><td><code>index--;</code></td></tr></tbody></table>

Prefix changes the variable before the expression result is used; postfix returns the old value and then changes the variable:

```cpp
b = ++a; // increment a first, then assign the new value to b
b = a++; // assign the old value to b, then increment a
```

{% hint style="warning" %}
**Porting an older script?**

The original Zen Studio compiler assigned the **new** value here — `b = a++` gave `b` the incremented value. The current compiler assigns the old value, as described above.

Nothing warns you about this. A script carried over from the older compiler compiles cleanly and quietly computes something different. In a `return` statement the same difference does produce a warning, `GPC6029`, but in a plain assignment it does not.

Use the prefix form (`b = ++a;`) where you want the new value — it behaves identically on both compilers.
{% endhint %}

***

### Comparison

Comparison operators return true (`1`) or false (`0`):

| Operator | Meaning                  |
| -------- | ------------------------ |
| `==`     | Equal to                 |
| `!=`     | Not equal to             |
| `<`      | Less than                |
| `<=`     | Less than or equal to    |
| `>`      | Greater than             |
| `>=`     | Greater than or equal to |

***

### Logical

Logical operators treat zero as false and every nonzero value as true:

| Operator   | Meaning                                    |
| ---------- | ------------------------------------------ |
| `!a`       | Logical NOT: true when `a` is false        |
| `a && b`   | Logical AND: true when both are true       |
| `a \|\| b` | Logical OR: true when either is true       |
| `a ^^ b`   | Logical XOR: true when exactly one is true |
|            |                                            |

***

### Bitwise

Bitwise operators work on the individual bits of an integer:

| Operator | Meaning                                         |
| -------- | ----------------------------------------------- |
| `~a`     | Invert every bit                                |
| `a & b`  | Bitwise AND; keep bits set in both values       |
| `a \| b` | Bitwise OR; keep bits set in either value       |
| `a ^ b`  | Bitwise XOR; keep bits set in exactly one value |
| `a << n` | Shift bits left by `n` positions                |
| `a >> n` | Shift bits right by `n` positions               |

```cpp
flags = flags | 4;  // set bit 2
flags = flags & ~4; // clear bit 2
```

***

### Conditional

Zen Studio Live supports the ternary conditional operator. It chooses one of two expression values:

```cpp
result = condition ? value_if_true : value_if_false;
```

GPC evaluates `condition` first. A nonzero condition selects `value_if_true`; zero selects `value_if_false`.

{% hint style="info" %}
**Important:** only the selected branch is evaluated. If the condition is true, GPC evaluates `value_if_true` and does not evaluate `value_if_false`. If the condition is false, it evaluates `value_if_false` and does not evaluate `value_if_true`.
{% endhint %}

#### Choose a value

{% code title="ternary-choose-a-value.gpc" %}

```cpp
int enabled;
int output;

main {
    output = enabled ? 100 : 0;
    set_val(PS5_CROSS, output);
}
```

{% endcode %}

This is the expression form of a small `if` / `else` choice. The same logic written longhand is:

```cpp
if(enabled) {
    output = 100;
} else {
    output = 0;
}
```

#### The unused branch does not run

Short-circuit branch evaluation makes guarded expressions safe:

{% code title="guarded-division.gpc" %}

```cpp
int numerator = 100;
int divisor;
int result;

main {
    // When divisor is 0, only the : 0 branch runs.
    // numerator / divisor is not evaluated.
    result = divisor != 0 ? numerator / divisor : 0;
}
```

{% endcode %}

The rule also applies to function calls and other side effects:

{% code title="branch-side-effects.gpc" %}

```cpp
int use_a;
int a_calls;
int b_calls;
int output;

main {
    use_a = get_val(PS5_L2) > 0;
    output = use_a ? make_a() : make_b();

    // Only one counter increases during each main iteration.
    set_val(TRACE_1, a_calls);
    set_val(TRACE_2, b_calls);
}

function make_a() {
    a_calls++;
    return 100;
}

function make_b() {
    b_calls++;
    return 0;
}
```

{% endcode %}

When `use_a` is true, only `make_a()` runs. When it is false, only `make_b()` runs. Parenthesize nested conditional expressions and keep side effects obvious so the code remains easy to review.

***

### Assignment

Assignment stores the right-hand result in the writable variable or array element on the left. `=` means "gets the value," not "is equal to." Use `==` for comparison.

Compound assignment reads the current left-hand value, applies an operation, and writes the result back:

| Operator    | Equivalent form | Meaning                |
| ----------- | --------------- | ---------------------- |
| `a = b`     | —               | Assign `b` to `a`      |
| `a += b`    | `a = a + b`     | Add and assign         |
| `a -= b`    | `a = a - b`     | Subtract and assign    |
| `a *= b`    | `a = a * b`     | Multiply and assign    |
| `a /= b`    | `a = a / b`     | Divide and assign      |
| `a %= b`    | `a = a % b`     | Remainder and assign   |
| `a &= b`    | `a = a & b`     | Bitwise AND and assign |
| `a \|= b`   | `a = a \| b`    | Bitwise OR and assign  |
| `a ^= b`    | `a = a ^ b`     | Bitwise XOR and assign |
| `a <<= b`   | `a = a << b`    | Shift left and assign  |
| `a >>= b`   | `a = a >> b`    | Shift right and assign |
| `a &&= b`   | `a = a && b`    | Logical AND and assign |
| `a \|\|= b` | `a = a \|\| b`  | Logical OR and assign  |
| `a ^^= b`   | `a = a ^^ b`    | Logical XOR and assign |

Assignment associates from right to left, so `a = b = 5;` assigns `5` to `b` and then assigns that result to `a`. Prefer one assignment per line when the chained form would hide intent.

Parenthesize mixed bitwise/comparison expressions:

```cpp
if((flags & MASK) == MASK) { }
```

Without parentheses, equality binds more tightly than bitwise AND.

See the exact precedence table in the language reference.


# Flow control

### `if`, `else if`, `else`

```cpp
if(mode == 0) {
    // first path
} else if(mode == 1) {
    // second path
} else {
    // fallback
}
```

***

### `switch`, `case`, `default`

```cpp
switch(mode) {
    case 0: {
        set_val(TRACE_1, 10);
        break;
    }
    case 1: {
        set_val(TRACE_1, 20);
        break;
    }
    default: {
        mode = 0;
        break;
    }
}
```

Case values must be compile-time constants and unique. Braces are required around case bodies. Omit `break` only when fallthrough is deliberate and documented.

{% hint style="info" %}
Deliberate fallthrough still produces `GPC6018`. GPC has no annotation to mark it as intentional, so the warning appears on every case that falls through — expect it, and document the intent in a comment.
{% endhint %}

### `for`

```cpp
for(i = 0; i < sizeof(BUTTONS); i++) {
    // bounded work
}
```

### `while`

```cpp
while(i < 8) {
    i++;
}
```

### `do ... while`

```cpp
do {
    i++;
} while(i < 8);
```

***

### `break` and `continue`

`break` exits the nearest loop or switch. `continue` skips to the next iteration of the nearest loop. Neither is valid outside its allowed context.

***

### `return`

`return;` immediately exits the current user-created function. `return expression;` also supplies the function's result:

{% code title="return-value.gpc" %}

```cpp
function absolute(value) {
    if(value < 0) {
        return -value;
    }
    return value;
}
```

{% endcode %}

A bare `return;` exits without a value. Do not mix bare and valued returns in the same function. If execution reaches the end of a user function without returning a value, its result is `0`; callers may also ignore a user function's result.

{% hint style="info" %}
All real-time loops must have a provable quick exit. A loop that waits for a future physical event will lock the current VM cycle; use persistent state evaluated across `main` cycles instead.
{% endhint %}


# User-created functions

{% code title="scale-percent-function.gpc" %}

```cpp
int output;

main {
    output = scale_percent(get_ival(PS5_RX), 125);
    set_val(PS5_RX, output);
}

function scale_percent(value, percent) {
    return (value * percent) / 100;
}
```

{% endcode %}

Rules:

* Declare with `function name(parameter, ...) { ... }`.
* Parameters are optional: `function reset_mode() { ... }` is valid.
* Parameters are local integer values.
* Global runtime variables remain accessible.
* A reached `return expression;` immediately exits.
* If no return is reached, the result is `0`.
* Do not mix valued returns and bare returns.
* Recursion compiles with a warning because worst-case stack use cannot be proven; avoid it in real-time scripts.
* A user-created function's return value may be ignored. The unused-return compiler error applies to built-ins whose return value is marked as required, not to user functions.

A parameterless function used only for its side effect can be called as a statement:

{% code title="reset-mode-function.gpc" %}

```cpp
int mode;

main {
    if(event_press(PS5_CIRCLE)) {
        reset_mode();
    }
}

function reset_mode() {
    mode = 0;
}
```

{% endcode %}

Functions make repeated logic readable, but deep call chains and large expressions increase stack pressure.


# init and main

`init` runs once. `main` runs continuously. Both operate on the same globals.

Zen Studio Live accepts multiple `init` and multiple `main` sections. The compiler merges each set into a single initialization phase and a single repeating main phase. This is useful for generated or combined source, although one `init` and one `main` are easier to read in hand-written scripts.

Use `init` for:

* loading persistent values;
* platform selection;
* one-time cache initialization;
* setting initial state.

Use `main` for:

* reading current input;
* detecting events;
* advancing state machines;
* calculating the current output report;
* drawing only when a dirty flag says the display changed.


# Remap and unmap

```cpp
remap PS5_CROSS -> PS5_SQUARE;
unmap PS5_TRIANGLE;
```

These are top-level compile-time declarations. Remaps are applied after `main`, so script logic uses original identifiers. `unmap` prevents an input from reaching the console output but does not prevent the script from reading it.

{% code title="unmap-still-readable.gpc" %}

```cpp
unmap PS5_TRIANGLE;

main {
    if(event_press(PS5_TRIANGLE)) {
        // still visible to the script
    }
}
```

{% endcode %}

Device-level remapping is also available through `set_remapper`, with `save_eeprom` used only on a deliberate save event. Unlike a source `remap` declaration, that changes the device remapper and can persist beyond the current script. See the additional built-in reference before using it.




---

[Next Page](/llms-full.txt/1)

