Added the CDJ-900NXS firmware patcher.
Takes the official C900NXS.UPD (1.31, checked by SHA-256), lets you choose mods in a list (arrows, space, enter; numbers where the terminal cannot pass keys), patches the application with the emulator checkout's mods/patch_cdj900nxs.py, packs it and writes a new C900NXS.UPD labelled 1.32. Only the application is replaced: the boot loader and recovery records, MAIN's S0/S7 records, DRIV and PANL are copied byte for byte and checked again on the finished file, which is also unpacked the boot loader's way and compared with the patched application. --stock differs from the official file in the version label and its CRC only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
e8134e446c
commit
cfa0e85854
5 files changed
+730
No files matched your search
@@ -0,0 +1,72 @@
|
||||
# CDJ-900NXS firmware patcher
|
||||
|
||||
Builds a new `C900NXS.UPD` from the official CDJ-900NXS firmware 1.31 with
|
||||
the mods you choose, for the player's own USB update.
|
||||
|
||||
```sh
|
||||
python cdj900nxs_patcher.py C900NXS.UPD # choose in a list
|
||||
python cdj900nxs_patcher.py C900NXS.UPD --mods beatjump,cuecolours,hotcuekeys
|
||||
python cdj900nxs_patcher.py C900NXS.UPD --stock # the original, to go back
|
||||
python cdj900nxs_patcher.py --list
|
||||
```
|
||||
|
||||
In the list: **arrow keys** move, **space** ticks or unticks, **a** ticks all
|
||||
or none, **enter** builds, **q** quits. Terminals that cannot pass single
|
||||
keys (Git Bash's mintty, a pipe) get a numbered list instead. The result goes
|
||||
to `out/<date>-<mods>/C900NXS.UPD` with a `report.txt` of every check.
|
||||
|
||||
## What it guarantees
|
||||
|
||||
- **Only the original file is accepted**: SHA-256
|
||||
`e96bca7d1ac983985992a8e5fa7813e1ebf04bef514e0c6cfd0a8375f667f7f9`, and the
|
||||
1.31 application inside it is checked too.
|
||||
- **Only the main application is replaced.** The boot loader and recovery
|
||||
loader (MAIN's records below flash 0x40000), MAIN's S0 header and S7 entry
|
||||
records, and the DRIV and PANL sections are copied from the original byte
|
||||
for byte. Before anything is written the finished file is read back and
|
||||
checked: every section CRC and S-record checksum; DRIV and PANL equal to the
|
||||
original; MAIN's header equal but for its version label, application-only
|
||||
mode kept; every boot loader and recovery record and byte equal; no record
|
||||
past 0x7E0000; the packed application's checksum; and the application,
|
||||
unpacked the way the boot loader does it, equal to the patched one.
|
||||
- **Labelled 1.32**, so that the player's updater does not skip the update as
|
||||
the version it already has. The application still reports 1.31 (as
|
||||
arnoldasr's builds do). `--stock` gives the original firmware with only that
|
||||
label changed: three bytes differ from the official file (the digit and the
|
||||
section CRC), exactly as arnoldasr's back-to-stock file, which installed on
|
||||
his test player.
|
||||
|
||||
Checked in the emulator: both the `--stock` file and one with every mod were
|
||||
written into an emulated flash and booted through Pioneer's own boot loader,
|
||||
which unpacked and started them.
|
||||
|
||||
## Mods
|
||||
|
||||
From the emulator checkout `../CDJ900NXSVirtual` (`--repo` for another place):
|
||||
`mods/patch_cdj900nxs.py` and the mods next to it.
|
||||
|
||||
| mod | what it does |
|
||||
|---|---|
|
||||
| `code` | arnoldasr: BPM with two decimals, two-line phase meter, RGB waveform |
|
||||
| `utility` | arnoldasr: UTILITY > PHASE METER switch (needs `code`) |
|
||||
| `overview` | arnoldasr: overview waveform colour gradient |
|
||||
| `beatjump` | TRACK SEARCH jumps 1/2/4/8 beats, UTILITY > BEAT JUMP |
|
||||
| `cuecolours` | memory cues in their rekordbox colours, hot cues shown |
|
||||
| `hotcuekeys` | UTILITY > HOT CUE KEYS; QUANTIZE short = hot key mode |
|
||||
|
||||
arnoldasr's mods need his repository checked out in
|
||||
`../CDJ900NXSVirtual/mods/cdj900nxs/upstream` (it has no licence, so it is
|
||||
not copied here); without it they are greyed out.
|
||||
|
||||
## Risk
|
||||
|
||||
Nothing here talks to a player; you copy the file to a FAT32 USB stick and run
|
||||
the update yourself. Our mods have only run in the emulator. Recovery from an
|
||||
application that crashes at start-up has not been tested by anyone. Keep the
|
||||
`--stock` file at hand.
|
||||
|
||||
## Tests
|
||||
|
||||
```sh
|
||||
CDJ900NXS_UPD=/path/to/C900NXS.UPD python -m pytest test_patcher.py
|
||||
```
|
||||
Reference in new issue
Block a user