diff options
| author | PavelBARABANOV <pavelbarabanov94@gmail.com> | 2026-09-27 12:48:45 +0200 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2026-09-27 12:48:45 +0200 |
| commit | 815325cceca948030cf476dce7c46d901e4e4df5 (patch) | |
| tree | b15a4a11c9bdefccd03129eb3914e36babd396c7 /cpmfile.json | |
| parent | 37fe9119526c03ca064166130cc983c55b9a9e86 (diff) | |
[loader] add ZBIC (zstd variant) NSO decompression support for Switch 22.0+ (#4482)
- [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions).
- [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md)
- [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability.
-------------------
A new NSO compression method was introduced in Switch 22.0.0. This is a
customized variant of zstd and is used when NSO flags have bit 7 set.
Key characteristics:
- ZSTD_MAGICNUMBER is set to 0x4349425A (b'ZBIC') instead of 0xFD2FB528
- ZSTD_LEGACY_SUPPORT is set to 0
- ZSTD_TRACE is set to 1, zstd version used is 1.5.7 (10507)
- FSE_readNCount is replaced with a BIC (Binary Interpolative Coding)
version which improves compression of entropy tables significantly
Source: https://switchbrew.org/wiki/22.0.0
Implementation:
- Detect ZBIC segments via NSO flag bit 7 (NsoFlags_UseZbicCompression)
and/or ZBIC magic scan in nso.cpp
- Fall back to LZ4 when ZBIC is not detected or returns unexpected size
- Handle segment 0 alternate offset (0x100 vs 0x108) for both ZBIC and LZ4
References:
- Atmosphère loader/strat zstd-zbic integration:
https://github.com/Atmosphere-NX/Atmosphere/commit/082115187a0509cb6b8a757de639a4e4741b8712
- nxdumptool ZBIC segment compression support:
https://github.com/DarkMatterCore/nxdumptool/commit/441e5c0904f29427987433be4eb057a2843d222a
- STORM_SWITCH ZBIC implementation:
https://github.com/ReiKatari/STORM_SWITCH/commit/1e09eb82b760aaf340b810031400991c0740c091
Tested with firmware 23.0.0 and ZBIC-compressed NSOs.
Co-authored-by: xbzk <xbzk@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4482
Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Reviewed-by: lizzie <lizzie@eden-emu.dev>
Reviewed-by: Maufeat <sahyno1996@gmail.com>
Diffstat (limited to 'cpmfile.json')
| -rw-r--r-- | cpmfile.json | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/cpmfile.json b/cpmfile.json index f574bf5668..616235f27a 100644 --- a/cpmfile.json +++ b/cpmfile.json @@ -333,6 +333,11 @@ "repo": "herumi/xbyak", "version": "v7.40.1" }, + "zbic": { + "hash": "fbe2f37986377d7f0d96ae3224c80b5971df6e8b6961f68061f1975ebb2e8cb78f07b90f014b007be4023dbf5513581504e7f7d61a5237cb2a8a7a61ae11e482", + "repo": "kinnay/zbic", + "version": "11b08f2712264bbed731545085cbd9702096ceb7" + }, "zlib": { "hash": "16fea4df307a68cf0035858abe2fd550250618a97590e202037acd18a666f57afc10f8836cbbd472d54a0e76539d0e558cb26f059d53de52ff90634bbf4f47d4", "min_version": "1.2", |
