Nintendo Switch emulator
  • C++ 64%
  • cpp 25.5%
  • POV-Ray SDL 4.4%
  • Kotlin 3.8%
  • CMake 0.9%
  • Other 1.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
PavelBARABANOV 815325ccec
[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:
    082115187a
  - nxdumptool ZBIC segment compression support:
    441e5c0904
  - STORM_SWITCH ZBIC implementation:
    1e09eb82b7

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>
2026-09-27 12:48:45 +02:00
.ci [tools] refactor, use #!/bin/sh, update license files (#3998) 2026-05-22 21:15:31 +02:00
.forgejo/workflows [ci] Only update translations once a week (#4256) 2026-08-08 05:46:52 +02:00
.github [forgejo] Replace mentions of yuzu in issue templates with eden (#3842) 2026-08-10 03:55:03 +02:00
.patch [cmake] Use a debloated boost distribution (#4198) 2026-09-15 07:22:23 +02:00
.reuse [qt] nuke game compat list (again) (#4201) 2026-07-12 09:32:11 +02:00
.tx [cmake] feat: FFmpeg CI, allow 16kb android builds, update translations for transifex (#2543) 2025-09-23 19:38:11 +02:00
CMakeModules Revert "[audio] Replace libopus with FFmpeg (#4169)" (#4419) 2026-09-14 14:34:24 +02:00
dist [dist, android] Update translations from Transifex for Sep 21 (#4466) 2026-09-21 19:25:54 +02:00
docs [frontend] Unify cmdline parsing (#4424) 2026-09-23 14:51:51 +02:00
externals [loader] add ZBIC (zstd variant) NSO decompression support for Switch 22.0+ (#4482) 2026-09-27 12:48:45 +02:00
hooks [tools] refactor, use #!/bin/sh, update license files (#3998) 2026-05-22 21:15:31 +02:00
LICENSES general: fix trailing whitespace 2024-01-08 09:34:32 -05:00
src [loader] add ZBIC (zstd variant) NSO decompression support for Switch 22.0+ (#4482) 2026-09-27 12:48:45 +02:00
tools [cmake] Fix some macOS compilation errors (#4350) 2026-09-05 23:43:46 +02:00
.codespellrc core: refactor emulated cpu core activation 2023-12-04 10:37:16 -05:00
.git-blame-ignore-revs Skip git blame 2023-11-04 18:26:49 +00:00
.gitattributes chore: make yuzu REUSE compliant 2022-07-27 12:53:49 +02:00
.gitignore [android] Replace Oboe audio with SDL3 audio (#4338) 2026-09-02 00:29:58 +02:00
.shellcheckrc [tools, cmake] refactor: update/hash check scripts, use tags for some more deps, proper CPMUtil separation (#2666) 2025-10-05 03:04:53 +02:00
AGENTS.md [docs] Tighten AI restrictions and switch to CONTRIBUTING.md (#4193) 2026-07-09 23:06:46 +02:00
CLAUDE.md [docs] Tighten AI restrictions and switch to CONTRIBUTING.md (#4193) 2026-07-09 23:06:46 +02:00
CMakeLists.txt [cmake] Use a debloated boost distribution (#4198) 2026-09-15 07:22:23 +02:00
CONTRIBUTING.md [meta] Discourage profanity usage (#4239) 2026-08-09 02:53:16 +02:00
cpmfile.json [loader] add ZBIC (zstd variant) NSO decompression support for Switch 22.0+ (#4482) 2026-09-27 12:48:45 +02:00
Doxyfile chore: make yuzu REUSE compliant 2022-07-27 12:53:49 +02:00
LICENSE.txt chore: make yuzu REUSE compliant 2022-07-27 12:53:49 +02:00
README.md [docs] Various grammar fixes, fix dead links, update deps.md, merge RDOC into Debug.md (#4315) 2026-09-01 06:45:47 +02:00
shell.nix Revert "[audio] Replace libopus with FFmpeg (#4169)" (#4419) 2026-09-14 14:34:24 +02:00


Eden
Eden

Eden is a free and open-source (FOSS) Switch 1 emulator started by developer Camille LaVey.
Written in C++, with builds for Windows, Linux, macOS, Android, FreeBSD and more.

Discord Stoat

Compatibility | Development | Building | Download | Support | License

Compatibility

The emulator is capable of running most commercial games at full speed, provided you meet the necessary hardware requirements.

A list of supported games will be available in future. Please be patient.

Check out our website for the latest news on exciting features, monthly progress reports, and more!

Packaging status

Contribute

To contribute to Eden; be it financially, code, bug reports, or otherwise, see our Contributing guidelines.

Documentation

We have a user manual! See our User Handbook.

Building

See the General Build Guide

For information on provided development tooling, see the Tools directory

Download

You can download the latest releases from our release page.

Save us some bandwidth! We have mirrors available as well.

License

Eden is licensed under the GPLv3 (or any later version). Refer to the LICENSE.txt file.

Special thanks

Super special thanks to Cloudflare for preventing the git server from blowing up.

  • Yuzu
  • Ryujinx
  • Sudachi
  • Citron
  • Torzu
  • Suyu
  • Ryubing

And everyone who continues or had contributed to the project! <3